diff --git a/stable/.buildinfo b/stable/.buildinfo index 9e2ca8e1ac..ee644f0558 100644 --- a/stable/.buildinfo +++ b/stable/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 65d73da52d5ef675e18029111232e5b6 +config: 60db2b9bdc92843939bc2f12445a1cfa tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/stable/.doctrees/commands/networks.doctree b/stable/.doctrees/commands/networks.doctree index 167be3715e..aac5a287d3 100644 Binary files a/stable/.doctrees/commands/networks.doctree and b/stable/.doctrees/commands/networks.doctree differ diff --git a/stable/.doctrees/commands/run.doctree b/stable/.doctrees/commands/run.doctree index a6f8c137a1..ab72f1336b 100644 Binary files a/stable/.doctrees/commands/run.doctree and b/stable/.doctrees/commands/run.doctree differ diff --git a/stable/.doctrees/environment.pickle b/stable/.doctrees/environment.pickle index db51d9ff5b..033aa76b2a 100644 Binary files a/stable/.doctrees/environment.pickle and b/stable/.doctrees/environment.pickle differ diff --git a/stable/.doctrees/methoddocs/ape.doctree b/stable/.doctrees/methoddocs/ape.doctree index b2491626fd..4db299f7ac 100644 Binary files a/stable/.doctrees/methoddocs/ape.doctree and b/stable/.doctrees/methoddocs/ape.doctree differ diff --git a/stable/.doctrees/methoddocs/api.doctree b/stable/.doctrees/methoddocs/api.doctree index d6f7c4b4fd..8d6ce14971 100644 Binary files a/stable/.doctrees/methoddocs/api.doctree and b/stable/.doctrees/methoddocs/api.doctree differ diff --git a/stable/.doctrees/methoddocs/cli.doctree b/stable/.doctrees/methoddocs/cli.doctree index c631e97922..ac23b8f4b8 100644 Binary files a/stable/.doctrees/methoddocs/cli.doctree and b/stable/.doctrees/methoddocs/cli.doctree differ diff --git a/stable/.doctrees/methoddocs/contracts.doctree b/stable/.doctrees/methoddocs/contracts.doctree index e7a2a95213..d5e67e9672 100644 Binary files a/stable/.doctrees/methoddocs/contracts.doctree and b/stable/.doctrees/methoddocs/contracts.doctree differ diff --git a/stable/.doctrees/methoddocs/exceptions.doctree b/stable/.doctrees/methoddocs/exceptions.doctree index 93b67f86cd..e938babafe 100644 Binary files a/stable/.doctrees/methoddocs/exceptions.doctree and b/stable/.doctrees/methoddocs/exceptions.doctree differ diff --git a/stable/.doctrees/methoddocs/managers.doctree b/stable/.doctrees/methoddocs/managers.doctree index 1063edfb57..b325d4fead 100644 Binary files a/stable/.doctrees/methoddocs/managers.doctree and b/stable/.doctrees/methoddocs/managers.doctree differ diff --git a/stable/.doctrees/methoddocs/plugins.doctree b/stable/.doctrees/methoddocs/plugins.doctree index b0c64649b6..ee0b9092ac 100644 Binary files a/stable/.doctrees/methoddocs/plugins.doctree and b/stable/.doctrees/methoddocs/plugins.doctree differ diff --git a/stable/.doctrees/methoddocs/types.doctree b/stable/.doctrees/methoddocs/types.doctree index 6a108a870b..982efc858a 100644 Binary files a/stable/.doctrees/methoddocs/types.doctree and b/stable/.doctrees/methoddocs/types.doctree differ diff --git a/stable/.doctrees/methoddocs/utils.doctree b/stable/.doctrees/methoddocs/utils.doctree index 88730dd904..db2a53b2f2 100644 Binary files a/stable/.doctrees/methoddocs/utils.doctree and b/stable/.doctrees/methoddocs/utils.doctree differ diff --git a/stable/.doctrees/userguides/contracts.doctree b/stable/.doctrees/userguides/contracts.doctree index e3749b932c..6e21c105ac 100644 Binary files a/stable/.doctrees/userguides/contracts.doctree and b/stable/.doctrees/userguides/contracts.doctree differ diff --git a/stable/.doctrees/userguides/scripts.doctree b/stable/.doctrees/userguides/scripts.doctree index 5c703ca219..b2b23da1fe 100644 Binary files a/stable/.doctrees/userguides/scripts.doctree and b/stable/.doctrees/userguides/scripts.doctree differ diff --git a/stable/_sources/userguides/contracts.md.txt b/stable/_sources/userguides/contracts.md.txt index eed4559ecd..95b8fa3297 100644 --- a/stable/_sources/userguides/contracts.md.txt +++ b/stable/_sources/userguides/contracts.md.txt @@ -362,6 +362,32 @@ bytes_value = contract.encode_input(0, 1, 2, 4, 5) method_id, input_dict = contract.decode_input(bytes_value) ``` +## Contract Interface Introspection + +There may be times you need to figure out ABI selectors and method or event identifiers for a contract. +A contract instance provides properties to make this easy. +For instance, if you have a 4-byte hex method ID, you can return the ABI type for that method: + +```python +import ape + +usdc = ape.Contract("0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48") + +# ABI type for a hex method ID +assert usdc.identifier_lookup['0x70a08231'].selector == 'balanceOf(address)' + +# Also, selectors from method and event signatures +assert usdc.selector_identifiers["balances(address)"] == "0x27e235e3" + +# Or dump all selectors and IDs +for identifier, abi_type in usdc.identifier_lookup.items(): + print(identifier, abi_type) + # 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef type='event' name='Transfer' inputs=... + # ... +``` + +These include methods and error IDs, as well as event topics. + ## Multi-Call and Multi-Transaction The `ape_ethereum` core plugin comes with a `multicall` module containing tools for interacting with the [multicall3 smart contract](https://github.com/mds1/multicall). diff --git a/stable/_sources/userguides/scripts.md.txt b/stable/_sources/userguides/scripts.md.txt index ffb363c47e..b5bad41b88 100644 --- a/stable/_sources/userguides/scripts.md.txt +++ b/stable/_sources/userguides/scripts.md.txt @@ -32,12 +32,12 @@ For example, assuming we have script `/scripts/hello/helloworld.py`, we ape run hello helloworld ``` -Note that by default, `cli` scripts do not have [`ape.cli.network_option`](../methoddocs/cli.html?highlight=options#ape.cli.options.network_option) installed, giving you more flexibility in how you define your scripts. +**Note**: By default, `cli` scripts do not have [`ape.cli.network_option`](../methoddocs/cli.html?highlight=options#ape.cli.options.network_option) installed, giving you more flexibility in how you define your scripts. However, you can add the `network_option` or `ConnectedProviderCommand` to your scripts by importing them from the `ape.cli` namespace: ```python import click -from ape.cli import network_option, ConnectedProviderCommand +from ape.cli import ConnectedProviderCommand @click.command(cls=ConnectedProviderCommand) @@ -61,6 +61,45 @@ Try changing the network using the `--network` option: ape run shownet --network ethereum:mainnet:alchemy ``` +### Multi-network Scripting + +Because CLI-based scripts do not automatically connect to the provider before executing, they are ideal for multi-chain use-cases because they allow you to delay and manage the connection(s). +To learn more about how to control the network-context in Ape Pythonically, see [this guide](https://docs.apeworx.io/ape/stable/userguides/networks.html#provider-context-manager). + +Here is an example of a multi-chain script: + +```python +import click +from ape.cli import ape_cli_context + +@click.command() +@ape_cli_context() +def cli(cli_ctx): + # There is no connection yet at this point. + testnets = { + "ethereum": ["sepolia", "goerli"], + "polygon": ["mumbai"] + } + nm = cli_ctx.network_manager + + for ecosystem_name, networks in testnets.items(): + ecosystem = nm.ecosystems[ecosystem_name] + + for network_name in networks: + # Start making connections. + network = ecosystem.get_network(network_name) + + with network.use_provider("alchemy") as provider: + print(f"Connected to {provider.network_choice}") +``` + +Things to notice: + +1. It uses the CLI approach _without_ `cls=ConnectedProviderCommand`; thus it is not connected before it makes the first call to `.use_provider("alchemy")`. +2. It uses the `@ape_cli_context()` decorator to get access to Ape instances such as the `network_manager`. +3. Each network is only active during the context, thus allowing you to switch contexts and control chain-hopping in scripts. +4. **You do not need to call `.connect()` on the provider yourself!** + ## Main Method Scripts You can also use the main-method approach when defining scripts. @@ -71,7 +110,9 @@ def main(): print("Hello world!") ``` -**NOTE**: main-method scripts will always provide a network option to the call and thus will always connect to a network. +**NOTE**: main-method scripts will always provide a `--network` option and run in a connected-context. +Therefore, they are not ideal for multi-chain scripts. +`main`-method scripts work best for quick, single-network, connection-based workflows. To demonstrate, use the following script: @@ -79,10 +120,25 @@ To demonstrate, use the following script: from ape import networks import click - def main(): ecosystem_name = networks.provider.network.ecosystem.name network_name = networks.provider.network.name provider_name = networks.provider.name click.echo(f"You are connected to network '{ecosystem_name}:{network_name}:{provider_name}'.") ``` + +Suppose the name of the script is `foobar`, you can run it via: + +```shell +ape run foobar +``` + +Without specifying `--network`, the script with connect to your default network. +Else, specify the network using the `--network` flag: + +```shell +ape run foobar --network polygon:mumbai:alchemy +``` + +You can also change networks within the script using the `ProviderContextManager` (see examples in the CLI-script section above). +For multi-chain use-cases, we recommend sticking to the CLI based scripts to avoid the initial connection `main`-method scripts make. diff --git a/stable/commands/accounts.html b/stable/commands/accounts.html index a2f0f4366f..44d462d721 100644 --- a/stable/commands/accounts.html +++ b/stable/commands/accounts.html @@ -50,6 +50,7 @@ + diff --git a/stable/commands/compile.html b/stable/commands/compile.html index db32bf091a..8e8d0ff5a9 100644 --- a/stable/commands/compile.html +++ b/stable/commands/compile.html @@ -50,6 +50,7 @@ + diff --git a/stable/commands/console.html b/stable/commands/console.html index d4886f8367..e460f0b270 100644 --- a/stable/commands/console.html +++ b/stable/commands/console.html @@ -50,6 +50,7 @@ + diff --git a/stable/commands/init.html b/stable/commands/init.html index b6a8bdb20b..de042cf4ac 100644 --- a/stable/commands/init.html +++ b/stable/commands/init.html @@ -50,6 +50,7 @@ + diff --git a/stable/commands/networks.html b/stable/commands/networks.html index 27efaa3400..9343f6a71b 100644 --- a/stable/commands/networks.html +++ b/stable/commands/networks.html @@ -50,6 +50,7 @@ + @@ -251,7 +252,7 @@

list
Options:
-

local | mainnet-fork | sepolia | mainnet | goerli-fork | sepolia-fork | goerli

+

sepolia-fork | mainnet-fork | sepolia | mainnet | local | goerli | goerli-fork

@@ -262,7 +263,7 @@

list
Options:
-

test | geth

+

geth | test

diff --git a/stable/commands/plugins.html b/stable/commands/plugins.html index 2e7612a17e..61185103a2 100644 --- a/stable/commands/plugins.html +++ b/stable/commands/plugins.html @@ -50,6 +50,7 @@ + diff --git a/stable/commands/pm.html b/stable/commands/pm.html index 50a9e806a9..8f8837da59 100644 --- a/stable/commands/pm.html +++ b/stable/commands/pm.html @@ -50,6 +50,7 @@ + diff --git a/stable/commands/run.html b/stable/commands/run.html index 7f3c7cfd72..de8d153f43 100644 --- a/stable/commands/run.html +++ b/stable/commands/run.html @@ -50,6 +50,7 @@ + @@ -162,7 +163,10 @@
  • networks
  • plugins
  • run
  • test
  • @@ -223,6 +227,20 @@

    run

    Drop into interactive console session after running

    +
    +

    update_rpc

    +

    Run ‘scripts/update_rpc.py:main’

    +
    run update_rpc [OPTIONS]
    +
    +
    +

    Options

    +
    +
    +-v, --verbosity <LVL>
    +

    One of ERROR, WARNING, SUCCESS, INFO, or DEBUG

    +
    + +
    diff --git a/stable/commands/test.html b/stable/commands/test.html index 56c2a93239..d64f0090f1 100644 --- a/stable/commands/test.html +++ b/stable/commands/test.html @@ -50,6 +50,7 @@ + diff --git a/stable/genindex.html b/stable/genindex.html index 2dccce710d..ab3809ea18 100644 --- a/stable/genindex.html +++ b/stable/genindex.html @@ -47,6 +47,7 @@ + @@ -395,6 +396,8 @@

    Symbols

  • pm-list command line option
  • pm-remove command line option +
  • +
  • run-update_rpc command line option
  • test command line option
  • @@ -527,6 +530,8 @@

    Symbols

  • pm-list command line option
  • pm-remove command line option +
  • +
  • run-update_rpc command line option
  • test command line option
  • @@ -1872,6 +1877,8 @@

    H

    I

    + - - +
    + +
  • + run-update_rpc command line option + +
  • run_until_complete() (in module ape.utils) @@ -2726,6 +2742,8 @@

    S

  • (in module ape.cli.choices)
  • +
  • selector_identifiers (ape.contracts.base.ContractTypeWrapper property) +
  • send_call() (ape.api.providers.ProviderAPI method)
  • send_private_transaction() (ape.api.providers.ProviderAPI method) diff --git a/stable/index.html b/stable/index.html index 670a4bd3a2..9382bcfe49 100644 --- a/stable/index.html +++ b/stable/index.html @@ -49,6 +49,7 @@ + diff --git a/stable/methoddocs/ape.html b/stable/methoddocs/ape.html index f74b8a1b0b..0f8e58f0ec 100644 --- a/stable/methoddocs/ape.html +++ b/stable/methoddocs/ape.html @@ -50,6 +50,7 @@ + diff --git a/stable/methoddocs/api.html b/stable/methoddocs/api.html index e0d365b82b..2f196eb6f9 100644 --- a/stable/methoddocs/api.html +++ b/stable/methoddocs/api.html @@ -50,6 +50,7 @@ + diff --git a/stable/methoddocs/cli.html b/stable/methoddocs/cli.html index 52788447bb..49de5cccb9 100644 --- a/stable/methoddocs/cli.html +++ b/stable/methoddocs/cli.html @@ -50,6 +50,7 @@ + diff --git a/stable/methoddocs/contracts.html b/stable/methoddocs/contracts.html index 1916de4d82..74363e724b 100644 --- a/stable/methoddocs/contracts.html +++ b/stable/methoddocs/contracts.html @@ -50,6 +50,7 @@ + @@ -172,6 +173,8 @@
  • ape.contracts
    • ContractTypeWrapper
    • @@ -266,6 +269,20 @@

      ape.contracts +
      +property identifier_lookup: Dict[str, ConstructorABI | MethodABI | EventABI | StructABI | ErrorABI]
      +

      Provides a mapping of method, error, and event selector identifiers to +ABI Types.

      +
      + +
      +
      +property selector_identifiers: Dict[str, str]
      +

      Provides a mapping of function signatures (pre-hashed selectors) to +selector identifiers.

      +
      +
      property source_path: Path | None
      diff --git a/stable/methoddocs/exceptions.html b/stable/methoddocs/exceptions.html index 2a68db4e23..8894a48557 100644 --- a/stable/methoddocs/exceptions.html +++ b/stable/methoddocs/exceptions.html @@ -50,6 +50,7 @@ + diff --git a/stable/methoddocs/managers.html b/stable/methoddocs/managers.html index 8a606d3027..bd2f190c3c 100644 --- a/stable/methoddocs/managers.html +++ b/stable/methoddocs/managers.html @@ -50,6 +50,7 @@ + diff --git a/stable/methoddocs/plugins.html b/stable/methoddocs/plugins.html index 32fe026cc0..585d93027c 100644 --- a/stable/methoddocs/plugins.html +++ b/stable/methoddocs/plugins.html @@ -50,6 +50,7 @@ + diff --git a/stable/methoddocs/types.html b/stable/methoddocs/types.html index ad6fda18d6..36f01de2ac 100644 --- a/stable/methoddocs/types.html +++ b/stable/methoddocs/types.html @@ -50,6 +50,7 @@ + diff --git a/stable/methoddocs/utils.html b/stable/methoddocs/utils.html index 3d44d661dd..26fe367aa6 100644 --- a/stable/methoddocs/utils.html +++ b/stable/methoddocs/utils.html @@ -49,6 +49,7 @@ + diff --git a/stable/objects.inv b/stable/objects.inv index 80be565162..56ccdb1826 100644 Binary files a/stable/objects.inv and b/stable/objects.inv differ diff --git a/stable/py-modindex.html b/stable/py-modindex.html index 563393d068..2aef569517 100644 --- a/stable/py-modindex.html +++ b/stable/py-modindex.html @@ -50,6 +50,7 @@ + diff --git a/stable/search.html b/stable/search.html index 278d437077..a4fcb0180c 100644 --- a/stable/search.html +++ b/stable/search.html @@ -50,6 +50,7 @@ + diff --git a/stable/searchindex.js b/stable/searchindex.js index 9a44d8ea36..0d0a4854f0 100644 --- a/stable/searchindex.js +++ b/stable/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["commands/accounts", "commands/compile", "commands/console", "commands/init", "commands/networks", "commands/plugins", "commands/pm", "commands/run", "commands/test", "index", "methoddocs/ape", "methoddocs/api", "methoddocs/cli", "methoddocs/contracts", "methoddocs/exceptions", "methoddocs/managers", "methoddocs/plugins", "methoddocs/types", "methoddocs/utils", "userguides/accounts", "userguides/clis", "userguides/compile", "userguides/config", "userguides/console", "userguides/contracts", "userguides/data", "userguides/dependencies", "userguides/developing_plugins", "userguides/installing_plugins", "userguides/logging", "userguides/networks", "userguides/projects", "userguides/proxy", "userguides/publishing", "userguides/quickstart", "userguides/scripts", "userguides/testing", "userguides/transactions"], "filenames": ["commands/accounts.rst", "commands/compile.rst", "commands/console.rst", "commands/init.rst", "commands/networks.rst", "commands/plugins.rst", "commands/pm.rst", "commands/run.rst", "commands/test.rst", "index.md", "methoddocs/ape.md", "methoddocs/api.md", "methoddocs/cli.md", "methoddocs/contracts.md", "methoddocs/exceptions.md", "methoddocs/managers.md", "methoddocs/plugins.md", "methoddocs/types.md", "methoddocs/utils.md", "userguides/accounts.md", "userguides/clis.md", "userguides/compile.md", "userguides/config.md", "userguides/console.md", "userguides/contracts.md", "userguides/data.md", "userguides/dependencies.md", "userguides/developing_plugins.md", "userguides/installing_plugins.md", "userguides/logging.md", "userguides/networks.md", "userguides/projects.md", "userguides/proxy.md", "userguides/publishing.md", "userguides/quickstart.md", "userguides/scripts.md", "userguides/testing.md", "userguides/transactions.md"], "titles": ["accounts", "compile", "console", "init", "networks", "plugins", "pm", "run", "test", "Ape-Docs", "ape", "ape.api", "ape.cli", "ape.contracts", "ape.exceptions", "ape.managers", "ape.plugins", "ape.types", "ape.utils", "Accounts", "CLIs", "Compile", "Configure Ape", "Ape Console", "Contracts", "Querying Data", "Dependencies", "Developing Plugins", "Plugins", "Logging", "Networks", "Developing Projects with Ape", "Proxy Contracts", "Publishing", "Overview", "Scripting", "Testing", "Making Transactions"], "terms": {"command": [0, 4, 5, 6, 7, 11, 15, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 34, 35], "line": [0, 4, 5, 12, 15, 17, 34, 35, 36], "helper": [0, 4, 5], "manag": [0, 4, 5, 6, 9, 10, 11, 12, 13, 14, 16, 18, 19, 20, 22, 23, 24, 25, 27, 31, 33, 36], "local": [0, 2, 4, 6, 10, 11, 13, 14, 15, 16, 18, 19, 21, 22, 23, 24, 25, 27, 28, 34, 36, 37], "you": [0, 1, 6, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "can": [0, 6, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "unlock": [0, 19], "from": [0, 3, 6, 7, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36], "script": [0, 7, 9, 12, 15, 19, 20, 23, 29, 30, 36, 37], "consol": [0, 7, 9, 19, 24, 25, 27, 30, 31, 36], "us": [0, 6, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "load": [0, 1, 12, 13, 15, 18, 19, 20, 23, 24, 25, 26, 27, 31, 33, 37], "method": [0, 7, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 24, 25, 27, 30, 32, 33, 36, 37], "option": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 13, 14, 15, 16, 17, 18, 19, 20, 23, 26, 27, 30, 34, 35, 36], "arg": [0, 4, 5, 6, 7, 11, 12, 13, 14, 17, 18, 23, 24, 25], "an": [0, 3, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 33, 34, 35, 36, 37], "exist": [0, 11, 12, 13, 15, 17, 18, 20, 21, 23, 27, 30, 33, 36], "v": [0, 1, 2, 3, 4, 5, 6, 8, 12, 17, 23, 26, 29], "verbos": [0, 1, 2, 3, 4, 5, 6, 8, 12, 17, 23, 29, 34, 36], "lvl": [0, 1, 2, 3, 4, 5, 6, 8, 23], "One": [0, 1, 2, 3, 4, 5, 6, 8, 23, 24, 36, 37], "error": [0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 14, 15, 18, 20, 23, 29, 30], "warn": [0, 1, 2, 3, 4, 5, 6, 8, 13, 17, 18, 19, 21, 22, 23, 26, 27, 29, 30, 34], "success": [0, 1, 2, 3, 4, 5, 6, 8, 11, 23, 29, 34], "info": [0, 1, 2, 3, 4, 5, 6, 8, 12, 15, 20, 23, 27, 29, 36], "debug": [0, 1, 2, 3, 4, 5, 6, 8, 19, 23, 25, 29, 30, 34], "argument": [0, 1, 5, 6, 8, 11, 13, 14, 15, 17, 18, 19, 20, 23, 24, 26, 27, 30, 33, 34, 35, 37], "alia": [0, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 23, 24, 26, 27, 33], "requir": [0, 6, 10, 11, 12, 13, 14, 15, 16, 18, 20, 22, 24, 26, 28, 30, 31, 34, 36, 37], "privat": [0, 11, 19, 34], "kei": [0, 11, 12, 13, 15, 16, 17, 18, 19, 21, 22, 23, 24, 26, 27, 34, 37], "creat": [0, 3, 11, 12, 14, 15, 16, 17, 18, 21, 22, 23, 24, 25, 27, 30, 31, 36], "random": [0, 19, 36], "mnemon": [0, 15, 18, 19, 22, 36], "seed": [0, 18, 19], "phrase": [0, 18, 19], "hide": [0, 19], "newli": [0, 19], "termin": [0, 12, 13, 14, 15, 34, 36], "word": [0, 18, 19], "count": [0, 15, 17, 18, 19], "word_count": 0, "number": [0, 11, 12, 13, 14, 15, 17, 18, 22, 23, 25, 30], "default": [0, 3, 4, 8, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 30, 35, 36, 37], "12": [0, 19], "hd": [0, 18, 19], "path": [0, 5, 10, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 24, 26, 30, 36], "custom_hd_path": 0, "specifi": [0, 11, 12, 15, 16, 17, 18, 19, 20, 22, 24, 26, 27, 28, 30, 36, 37], "deriv": [0, 18, 30, 36], "m": [0, 18, 36], "44": [0, 18, 36], "60": [0, 18, 30, 36], "0": [0, 6, 8, 11, 12, 13, 15, 17, 18, 19, 20, 21, 22, 23, 24, 26, 28, 30, 32, 36, 37], "when": [0, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 30, 32, 34, 35, 36, 37], "avail": [0, 5, 11, 13, 15, 16, 17, 18, 19, 23, 24, 25, 26, 27, 28, 29, 36, 37], "all": [0, 1, 4, 5, 6, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 30, 31, 34, 36, 37], "output": [0, 12, 13, 14, 17, 18, 21, 23, 27, 29, 36, 37], "plugin": [0, 9, 11, 12, 15, 18, 19, 20, 23, 24, 25, 26, 30, 35, 36], "manifest": [1, 11, 15, 26, 33], "thi": [1, 6, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37], "project": [1, 2, 3, 5, 6, 7, 8, 9, 10, 12, 13, 14, 17, 18, 21, 22, 23, 26, 28, 30, 33, 35, 37], "save": [1, 15, 18, 24, 35], "result": [1, 4, 11, 12, 13, 15, 18, 22, 23, 24], "back": [1, 11, 13, 15, 24, 30], "note": [1, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37], "ap": [1, 3, 4, 6, 7, 8, 19, 21, 24, 25, 26, 27, 28, 29, 30, 32, 33, 35], "automat": [1, 6, 12, 15, 16, 20, 23, 24, 26, 30, 33, 36], "recompil": [1, 26], "ani": [1, 7, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 22, 23, 26, 27, 30, 34, 35, 36, 37], "chang": [1, 8, 11, 12, 13, 15, 22, 23, 29, 30, 35, 36], "contract": [1, 8, 9, 10, 11, 12, 14, 15, 17, 18, 19, 21, 23, 30, 33, 34, 37], "each": [1, 11, 15, 16, 17, 18, 19, 22, 25, 26, 27, 30, 36, 37], "time": [1, 11, 13, 15, 17, 19, 20, 22, 24, 26, 36, 37], "i": [1, 7, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "do": [1, 11, 14, 15, 18, 19, 22, 23, 24, 25, 26, 27, 29, 30, 32, 34, 35, 36], "have": [1, 11, 13, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 33, 34, 35, 36, 37], "manual": [1, 23, 30, 36], "trigger": [1, 36], "file_path": [1, 11, 15], "f": [1, 6, 12, 13, 15, 20, 27, 35], "forc": [1, 6, 11, 15, 26], "select": [1, 12, 13, 15, 19, 20, 23, 35], "": [1, 5, 6, 8, 11, 12, 13, 15, 16, 17, 18, 19, 21, 22, 24, 25, 26, 27, 28, 30, 31, 33, 35, 36, 37], "size": [1, 11, 15, 34], "show": [1, 11, 14, 18, 19, 20, 23, 28, 29, 30, 36, 37], "deploy": [1, 11, 13, 15, 31], "bytecod": [1, 11], "includ": [1, 5, 6, 11, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 26, 28, 33, 36, 37], "depend": [1, 6, 9, 11, 15, 16, 17, 18, 27], "also": [1, 6, 10, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 23, 24, 25, 26, 29, 30, 31, 33, 34, 35, 36, 37], "open": [2, 26, 34, 36], "allow": [3, 11, 12, 15, 16, 20, 22, 23, 24, 30, 32, 36, 37], "user": [3, 10, 11, 12, 14, 15, 16, 17, 18, 20, 22, 24, 29, 34, 36], "folder": [3, 7, 8, 15, 17, 21, 23, 25, 31, 36, 37], "config": [3, 10, 18, 19, 21, 22, 23, 28, 31, 36, 37], "yaml": [3, 4, 11, 12, 15, 16, 18, 19, 21, 22, 23, 26, 28, 30, 31, 36, 37], "more": [3, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37], "inform": [3, 11, 15, 16, 17, 19, 21, 22, 23, 24, 25, 26, 29, 30, 31, 33, 36], "http": [3, 11, 15, 17, 18, 22, 27, 28, 29, 30, 34], "doc": [3, 11, 17, 18, 27], "apeworx": [3, 18, 27, 28, 30, 33, 34], "io": [3, 17], "stabl": 3, "userguid": 3, "html": [3, 17, 36], "github": [3, 6, 11, 15, 16, 18, 22, 28, 30, 34], "org": [3, 15, 26], "repo": [3, 15, 18], "clone": [3, 18, 26, 32], "templat": [3, 27], "regist": [4, 11, 15, 16, 18, 34, 35], "ecosystem": [4, 11, 12, 14, 15, 16, 20, 25, 30, 34, 35, 36], "provid": [4, 6, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 27, 28, 29, 33, 34, 35, 37], "format": [4, 11, 12, 15, 17, 18], "output_format": 4, "tree": [4, 11, 12, 18], "ecosystem_filt": [4, 15], "filter": [4, 11, 12, 13, 20], "ethereum": [4, 11, 15, 16, 18, 19, 20, 22, 23, 24, 25, 27, 28, 30, 32, 34, 35, 36, 37], "network_filt": [4, 15], "mainnet": [4, 11, 15, 16, 20, 22, 23, 25, 30, 33, 34, 35, 37], "fork": [4, 11, 15, 22, 36, 37], "sepolia": [4, 20], "goerli": [4, 22, 30, 37], "provider_filt": [4, 11, 15], "test": [4, 9, 11, 15, 17, 18, 20, 21, 23, 24, 26, 27, 30], "geth": [4, 11, 14, 15, 18, 24, 28, 30, 36, 37], "start": [4, 11, 13, 15, 17, 18, 20, 23, 27, 30, 33, 34, 35, 36], "subprocess": [4, 11, 14], "node": [4, 11, 15, 17, 22, 28, 30], "independ": 4, "stream": [4, 18], "stdout": 4, "stderr": 4, "overrid": [4, 11, 12, 14, 15, 17, 18, 21, 30], "see": [4, 10, 11, 15, 16, 17, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 36, 37], "name": [5, 6, 7, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 33, 34, 35, 36, 37], "dir": 5, "y": [5, 6, 15, 26], "ye": [5, 6, 12, 26], "don": [5, 15, 24, 27, 30, 36, 37], "t": [5, 11, 15, 17, 22, 24, 27, 30, 36, 37], "ask": [5, 11, 19, 26], "confirm": [5, 6, 11, 12, 13, 15, 19, 26], "u": 5, "upgrad": [5, 32, 34], "newest": 5, "version": [5, 6, 11, 14, 15, 17, 18, 20, 21, 22, 23, 24, 26, 28, 30, 34, 36], "displai": [5, 11, 13, 14, 17, 18, 19, 30, 34, 37], "core": [5, 11, 22, 24, 26, 27, 30, 31, 34], "packag": [6, 7, 11, 14, 15, 16, 18, 19, 21, 27, 33, 34], "tool": [6, 24, 34], "The": [6, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37], "re": [6, 8, 11, 15, 23, 26, 36], "download": [6, 11, 15, 16, 18, 26], "cach": [6, 10, 11, 15, 23, 26, 36], "ref": [6, 15, 26], "A": [6, 7, 11, 12, 13, 14, 15, 16, 17, 18, 22, 23, 24, 26, 27, 28, 30, 31, 32, 36, 37], "refer": [6, 11, 13, 15, 22, 24, 26, 27, 30, 34], "flag": [6, 11, 19, 20, 21, 26, 28, 29, 30, 34, 36, 37], "branch": [6, 11, 15, 18, 26, 28], "tag": [6, 15, 17, 26], "instead": [6, 11, 12, 17, 18, 21, 22, 27, 30], "referenc": [6, 15, 26], "If": [6, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 23, 24, 26, 27, 29, 30, 33, 34, 35, 36, 37], "specif": [6, 11, 14, 15, 20, 30, 34, 36, 37], "ar": [6, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37], "onli": [6, 7, 11, 12, 13, 15, 17, 18, 20, 24, 25, 26, 36, 37], "those": [6, 15, 17, 20, 24, 26, 27, 30, 36], "prompt": [6, 12, 19, 20, 26, 34], "choos": [6, 12, 15], "exampl": [6, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 33, 34, 35, 36, 37], "packagenam": 6, "1": [6, 10, 11, 13, 15, 17, 18, 19, 22, 23, 24, 25, 26, 30, 36, 37], "2": [6, 15, 17, 22, 23, 24, 25, 26, 28, 30, 32, 36, 37], "must": [7, 11, 12, 14, 15, 16, 18, 19, 21, 23, 24, 25, 26, 27, 30, 33, 36], "either": [7, 11, 12, 15, 18, 19, 20, 24, 27, 30], "defin": [7, 11, 13, 14, 16, 17, 18, 23, 27, 30, 34, 35, 36], "main": [7, 16, 24, 29, 30], "cli": [7, 11, 14, 15, 18, 19, 21, 23, 28, 34, 36], "click": [7, 12, 20, 27, 28, 30, 35], "group": [7, 17, 24, 27, 35], "object": [7, 10, 11, 12, 15, 16, 17, 18, 19, 20, 22, 23, 24, 31, 35, 36, 37], "call": [7, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 30, 32, 35, 36, 37], "network": [7, 9, 10, 12, 13, 14, 23, 24, 25, 27, 28, 33, 35, 37], "given": [7, 8, 11, 12, 13, 14, 15, 18, 20, 22, 24, 30, 36], "should": [7, 11, 14, 15, 17, 18, 19, 26, 27, 36, 37], "import": [7, 11, 12, 13, 15, 18, 19, 20, 21, 22, 23, 24, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37], "mix": 7, "ins": 7, "necessari": [7, 12, 15], "oper": [7, 11, 14, 24, 29], "interact": [7, 11, 13, 15, 19, 23, 32, 34, 36, 37], "drop": [7, 18], "session": [7, 11, 15, 23, 30, 34], "after": [7, 11, 13, 15, 16, 19, 24, 30, 31, 34, 37], "launch": [8, 23, 30, 37], "pytest": [8, 10, 19, 23, 31, 34], "run": [8, 9, 11, 15, 17, 18, 20, 22, 23, 24, 25, 26, 28, 29, 31, 34, 35, 36, 37], "pytest_arg": 8, "w": [8, 11], "watch": [8, 36], "file": [8, 11, 12, 14, 15, 16, 17, 18, 19, 22, 23, 24, 25, 28, 30, 31, 34, 35, 36, 37], "suit": [8, 28, 36], "watch_fold": 8, "delai": [8, 30], "watch_delai": 8, "between": [8, 11, 13, 15, 17, 30], "poll": [8, 13, 15, 30, 36], "cycl": 8, "5": [8, 17, 19, 22, 24, 26, 36, 37], "second": [8, 13, 14, 15, 24, 30, 36, 37], "overview": 9, "account": [9, 10, 12, 13, 14, 18, 21, 22, 23, 24, 26, 27, 30, 31, 32, 33, 37], "develop": [9, 10, 11, 15, 18, 20, 25, 28, 30, 34], "compil": [9, 10, 14, 17, 18, 22, 23, 24, 28, 36], "queri": [9, 10, 13, 14, 23], "data": [9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 23, 24, 30, 37], "configur": [9, 11, 13, 14, 15, 16, 18, 19, 21, 26, 31, 36], "make": [9, 11, 16, 19, 20, 22, 23, 24, 30, 34, 36], "transact": [9, 13, 14, 15, 17, 18, 19, 22, 34], "proxi": [9, 11, 15], "publish": [9, 11, 13, 15, 36], "log": [9, 11, 12, 13, 15, 17], "pm": [9, 15, 26], "init": [9, 25, 31], "api": [9, 12, 14, 15, 16, 18, 19, 22, 26, 30, 32], "except": [9, 11, 12, 13, 15, 18, 30, 36], "type": [9, 10, 11, 13, 14, 15, 16, 18, 19, 20, 21, 23, 24, 27, 32, 33, 34, 36, 37], "util": [9, 10, 19, 20, 23, 27, 35], "address": [10, 13, 14, 15, 18, 19, 20, 21, 22, 23, 25, 26, 32, 36], "str": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 24, 27, 30], "checksumaddress": [10, 11, 13, 15, 17], "contract_typ": [10, 13, 15, 22, 26], "contracttyp": [10, 11, 13, 15], "none": [10, 11, 12, 13, 14, 15, 16, 17, 18, 27, 36], "txn_hash": [10, 11, 13, 14, 15, 37], "abi": [10, 11, 13, 14, 15, 16, 18, 21, 36, 37], "list": [10, 11, 12, 13, 14, 15, 17, 18, 20, 21, 22, 24, 25, 27, 28, 30, 34, 36], "constructorabi": [10, 11, 14, 15, 18], "fallbackabi": [10, 15], "receiveabi": [10, 15], "methodabi": [10, 11, 14, 15, 18], "eventabi": [10, 11, 15, 18], "errorabi": [10, 14, 15], "structabi": [10, 15], "unprocessedabi": [10, 15], "dict": [10, 11, 12, 13, 14, 15, 16, 17, 18, 23, 24], "contractinst": [10, 11, 13, 15, 24, 37], "face": [10, 14], "class": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 30, 34], "instanti": [10, 21], "projectmanag": [10, 13, 15, 23, 36], "current": [10, 11, 12, 13, 15, 18, 30, 31], "accountmanag": [10, 15, 23], "chain": [10, 11, 14, 16, 18, 23, 24, 25, 30, 34], "chainmanag": [10, 14, 15, 23, 36], "disconnect": [10, 11, 15, 20, 30, 36], "connect": [10, 11, 14, 15, 20, 22, 27, 28, 35, 36, 37], "blockchain": [10, 11, 14, 15, 16, 19, 24, 28, 30, 34, 36], "activ": [10, 11, 12, 13, 15, 23, 24, 36], "purpos": [10, 11, 15, 17, 19, 22, 25, 29], "control": [10, 11, 15, 19, 20, 30, 36, 37], "state": [10, 11, 13, 15, 19, 24], "handi": [10, 15], "about": [10, 11, 14, 15, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37], "compilermanag": [10, 15], "len": [10, 15], "registered_compil": [10, 15], "configmanag": [10, 11, 15, 16], "convert": [10, 12, 14, 18, 23, 24], "valu": [10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 23, 24, 25, 26, 28, 29, 30, 34, 36, 37], "tupl": [10, 13, 15, 16, 17, 18], "convers": [10, 11, 16], "function": [10, 11, 12, 13, 15, 17, 18, 19, 20, 24, 25, 30], "conversionmanag": [10, 15], "networkmanag": [10, 15, 23, 36], "revert": [10, 11, 14, 15, 18, 30, 36], "catch": 10, "expect": [10, 13, 15, 36, 37], "logic": [10, 11, 14, 15, 24, 27, 30], "resembl": 10, "rais": [10, 11, 14, 15, 18, 30, 36], "accountapi": [11, 12, 15, 16, 19, 20, 24, 27], "base": [11, 12, 13, 14, 15, 17, 18, 19, 22, 25, 27, 28, 30, 35, 36, 37], "baseinterfacemodel": [11, 13, 15, 18], "baseaddress": [11, 13, 15], "repres": [11, 12, 15, 16, 17, 18, 30, 36, 37], "__dir__": [11, 13], "ipython": [11, 13, 23, 34, 37], "tab": [11, 13], "complet": [11, 13, 15, 18, 35, 36], "return": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 30, 32, 36, 37], "properti": [11, 13, 14, 15, 17, 18, 19, 20, 24, 27, 30, 37], "shorten": [11, 15], "quicker": 11, "access": [11, 12, 13, 14, 15, 16, 18, 19, 20, 23, 24, 26, 27, 30, 31, 33, 36, 37], "txn": [11, 14, 25, 30, 37], "transactionapi": [11, 13, 14, 15], "send_everyth": 11, "bool": [11, 12, 13, 14, 15, 17, 18, 19, 36], "fals": [11, 12, 13, 15, 17, 18, 36], "signer_opt": 11, "receiptapi": [11, 13, 14, 15, 24, 25, 37], "accountserror": [11, 14], "nonc": [11, 13, 15], "invalid": [11, 15, 17, 36], "sender": [11, 13, 15, 21, 24, 31, 32, 33, 36, 37], "doe": [11, 12, 13, 14, 15, 18, 20, 22, 24, 27, 30, 34, 36, 37], "enough": [11, 24], "fund": [11, 14, 19, 24, 36], "transactionerror": [11, 14], "neg": [11, 15], "signatureerror": [11, 14], "sign": [11, 14, 17], "apinotimplementederror": [11, 14], "set": [11, 12, 13, 15, 16, 17, 18, 19, 22, 23, 25, 26, 27, 29, 30, 31, 36, 37], "true": [11, 12, 14, 15, 18, 19, 20, 21, 24, 26, 30, 33, 36, 37], "support": [11, 15, 17, 18, 25, 28, 30, 32, 34, 37], "paramet": [11, 13, 14, 15, 16, 17, 18, 30, 36], "invok": [11, 12, 13, 15, 20, 23, 24, 36, 37], "send": [11, 14, 24, 30, 37], "differ": [11, 13, 15, 22, 26, 27, 28, 30, 32, 36], "balanc": [11, 13, 19, 23, 24, 36], "fee": [11, 25, 30], "send_private_transact": 11, "addit": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 26, 30, 37], "kwarg": [11, 12, 13, 14, 15, 17, 18, 19, 20, 24, 27, 30, 33, 36, 37], "signer": [11, 17, 19, 20, 24], "modifi": [11, 12, 17, 18, 23, 24, 30], "check_signatur": [11, 19], "signablemessag": [11, 17], "eip712messag": [11, 19], "int": [11, 13, 14, 15, 16, 17, 18, 19], "signatur": [11, 13], "messagesignatur": [11, 17], "verifi": [11, 31], "messag": [11, 12, 14, 17, 18, 23, 27, 29, 30, 36], "wa": [11, 14, 15, 17, 18, 21, 24, 30], "union": [11, 12, 15, 17, 18], "noqa": [11, 15], "e501": [11, 15], "check": [11, 13, 15, 17, 18, 19, 24, 26, 32, 34, 36], "need": [11, 12, 15, 17, 18, 19, 20, 22, 23, 24, 26, 27, 30, 34, 36, 37], "first": [11, 13, 15, 19, 20, 23, 24, 25, 26, 30, 33], "otherwis": [11, 13, 15, 16, 17, 22, 23, 26, 30, 37], "declar": [11, 15, 22, 27, 37], "contractcontain": [11, 13, 15, 24], "deploi": [11, 13, 15, 21, 25, 26, 33, 34, 36, 37], "blueprint": [11, 15], "For": [11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 33, 34, 35, 36, 37], "evm": [11, 15, 24, 30], "like": [11, 13, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30, 31, 34, 36, 37], "mean": [11, 13, 19, 20, 36, 37], "eip": [11, 15, 17, 30, 32, 33, 37], "5202": [11, 15], "which": [11, 12, 13, 15, 16, 17, 18, 19, 22, 24, 25, 27, 30, 33, 36, 37], "implement": [11, 12, 14, 15, 16, 18, 19, 20, 26, 30, 32], "contain": [11, 12, 13, 15, 16, 17, 18, 21, 24, 30, 31, 33, 34, 36], "receipt": [11, 13, 15, 24, 30, 36, 37], "smart": [11, 13, 14, 17, 24, 31, 33, 34, 36, 37], "befor": [11, 13, 15, 18, 20, 24, 30, 36, 37], "attempt": [11, 14, 26, 27, 32, 36], "verif": [11, 13], "instanc": [11, 13, 15, 17, 18, 20, 21, 22, 24, 33, 36, 37], "prepare_transact": 11, "cannot": [11, 12, 34, 36, 37], "afford": 11, "prepar": 11, "abstract": [11, 14, 18, 24, 27, 30], "sign_messag": [11, 19], "msg": [11, 12, 17, 24, 36], "handl": [11, 14, 16, 18, 20, 23, 30], "variou": [11, 28, 32, 37], "keyfileaccount": [11, 16, 20], "byte": [11, 13, 15, 17, 18, 24], "correspond": [11, 13, 15, 17, 20, 30, 36], "sign_transact": 11, "mai": [11, 12, 13, 15, 17, 18, 19, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 34, 36, 37], "input": [11, 12, 13, 14, 18], "howev": [11, 13, 15, 19, 22, 24, 26, 27, 28, 30, 32, 35, 36, 37], "properli": [11, 15, 27], "here": [11, 16, 19, 20, 21, 22, 24, 27, 28, 30, 31, 34, 36], "meant": [11, 17, 30], "execut": [11, 12, 13, 15, 17, 20, 23, 24, 29, 31, 35, 36], "wish": [11, 19, 21, 29, 30, 33], "transfer": [11, 36], "addresstyp": [11, 13, 14, 15, 17], "receiv": [11, 15, 19, 24, 36], "amount": [11, 13, 15, 24, 25, 30, 37], "extra": [11, 18, 19, 26], "typic": [11, 15, 17, 19, 21, 27, 30, 36], "rpc": [11, 22, 24], "eth_sendprivatetransact": [11, 24], "achiev": [11, 24, 26, 30], "ignor": [11, 15, 26, 27], "accountcontainerapi": [11, 15, 16], "data_fold": [11, 15], "account_typ": [11, 12, 16, 20], "collect": [11, 12, 14, 15, 17], "__contains__": [11, 15], "indexerror": [11, 14, 15, 18], "__delitem__": [11, 15], "delet": [11, 15, 26, 27], "notimplementerror": 11, "overridden": [11, 14], "within": [11, 14, 18, 25, 27, 34, 36], "__getitem__": [11, 15, 18], "get": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 24, 26, 30, 33, 34, 36, 37], "__len__": [11, 15], "iter": [11, 13, 14, 15, 16], "over": [11, 15], "alias": [11, 12, 15, 20], "append": [11, 15, 18, 21], "add": [11, 12, 14, 15, 20, 21, 22, 23, 24, 26, 27, 28, 30, 34, 35, 36, 37], "alreadi": [11, 12, 14, 15, 19, 20, 23, 24, 26, 30, 33], "remov": [11, 15, 18, 34, 36], "known": [11, 13, 15, 18, 20], "impersonatedaccount": 11, "raw_address": 11, "subclass": [11, 12, 13, 15, 16, 18], "testaccountapi": [11, 19], "generateddevaccount": [11, 18], "directli": [11, 13, 15, 19, 20, 21, 24, 25, 26, 30], "how": [11, 12, 15, 18, 19, 21, 24, 25, 26, 30, 34, 35, 36, 37], "thei": [11, 13, 15, 16, 18, 23, 24, 26, 27, 29, 30], "up": [11, 15, 18, 20, 22, 23, 30, 31, 34, 36, 37], "fixtur": [11, 15, 19, 30], "testaccountcontainerapi": 11, "gener": [11, 12, 15, 17, 18, 19, 21, 24, 26, 29, 30, 33, 34, 36], "generate_account": 11, "new": [11, 13, 15, 18, 20, 26, 30, 34], "we": [11, 15, 17, 18, 19, 20, 24, 25, 27, 30, 34, 35, 36, 37], "know": [11, 17, 20, 21, 24, 26, 27, 30, 36], "eoa": 11, "doesn": [11, 17], "person": [11, 19], "raw": [11, 15, 17, 21, 30], "baseinterfac": [11, 18], "total": [11, 13, 15, 17], "code": [11, 12, 14, 15, 17, 20, 24, 26, 27, 33, 36], "hexbyt": [11, 15, 17, 24], "codes": 11, "histori": [11, 15, 24, 25], "accounthistori": [11, 15], "ha": [11, 13, 14, 18, 24, 25, 33, 36, 37], "made": [11, 15, 22, 24, 25], "is_contract": 11, "associ": [11, 13, 15], "compilerapi": [11, 15, 16, 27, 28], "compiler_set": 11, "languag": [11, 24, 28, 34], "solid": [11, 15, 16, 21, 22, 24, 27, 28, 36], "vyper": [11, 16, 21, 24, 28, 32, 34, 36], "repositori": [11, 18], "contract_filepath": [11, 15], "sequenc": [11, 12, 15, 18], "base_path": [11, 14, 15], "sourc": [11, 12, 13, 14, 15, 17, 23, 24, 25, 26, 27, 28, 31, 32, 33, 34, 36], "pathlib": [11, 12, 15, 18, 21], "directori": [11, 12, 15, 18, 19, 22, 23, 25, 26, 27, 28, 30, 31, 33, 34, 35, 36], "via": [11, 12, 13, 14, 15, 16, 19, 22, 24, 26, 27, 30, 36], "adhoc": [11, 12, 15, 21], "pluginconfig": [11, 15, 16], "enrich_error": [11, 15], "err": [11, 14, 15], "contractlogicerror": [11, 14, 15, 36], "enrich": [11, 15], "pc": [11, 15, 17], "locat": [11, 15, 17, 21, 22, 27, 30, 36], "runtim": [11, 12, 15], "get_vers": 11, "all_path": 11, "retriev": [11, 15, 18, 24, 32], "combin": [11, 15, 30, 36], "supports_source_trac": 11, "abl": [11, 15, 18, 19, 21, 24, 32, 36, 37], "traceback": 11, "trace": [11, 14, 15, 17, 18, 24, 36], "configenum": 11, "enum": [11, 12], "limit": [11, 12, 22, 30], "item": [11, 14, 15, 16, 17, 18, 23, 26, 27], "color": [11, 18, 29], "red": [11, 14, 29], "blue": [11, 29, 37], "green": [11, 29], "rather": [11, 15, 22, 26, 36], "than": [11, 13, 15, 17, 20, 22, 26, 30, 36, 37], "arbitrari": 11, "usag": [11, 12, 13, 15, 16, 17, 18, 19, 23, 27, 36, 37], "myenum": 11, "foo": [11, 12, 15, 18, 24, 30, 36], "bar": [11, 12, 18, 30, 36, 37], "myconfig": 11, "my_enum": 11, "model": [11, 15, 17, 18, 37], "genericconfig": 11, "configdict": [11, 18], "special": [11, 16, 19, 26], "_case_sensit": [11, 15], "_env_prefix": [11, 15], "_env_fil": [11, 15], "dotenvtyp": [11, 15], "posixpath": [11, 15], "_env_file_encod": [11, 15], "_env_nested_delimit": [11, 15], "_secrets_dir": [11, 15], "baseset": 11, "converterapi": [11, 15, 16], "convertedtyp": 11, "throw": [11, 15, 18], "conversionerror": [11, 14, 15], "fail": [11, 12, 14, 15, 18, 24, 26, 27, 30, 36], "is_convert": [11, 15], "string": [11, 12, 14, 15, 16, 17, 18, 19, 22, 24, 30, 36], "explorerapi": [11, 15, 16, 33], "networkapi": [11, 14, 15, 16], "particular": [11, 15, 36], "get_address_url": 11, "url": [11, 15, 22], "get_contract_typ": 11, "been": [11, 15, 17, 18, 36], "get_transaction_url": 11, "transaction_hash": [11, 15, 17], "hash": [11, 13, 15, 17, 23], "publish_contract": [11, 33], "ecosystemapi": [11, 15, 16, 28, 30], "request_head": [11, 15], "fee_token_symbol": 11, "fee_token_decim": 11, "18": 11, "extraattributesmixin": [11, 18], "relat": [11, 14, 15, 16], "__ape_extra_attributes__": 11, "extramodelattribut": [11, 18], "suppli": [11, 36], "attribut": [11, 13, 15, 18, 24], "__getattr__": [11, 13, 15, 18], "seri": 11, "add_network": 11, "network_nam": [11, 15, 35], "attach": [11, 12], "e": [11, 15, 18, 19, 22, 24, 26, 30, 36], "g": [11, 15, 18, 19, 22, 24, 26, 30, 36], "l2": 11, "optim": [11, 30, 36], "networkerror": [11, 14, 15], "create_transact": 11, "everyth": [11, 27], "initi": [11, 13, 15, 17, 23, 24, 25, 32], "custom_network": 11, "custom": [11, 12, 14, 15, 17, 19, 20, 21, 22, 23, 27, 29], "where": [11, 13, 15, 18, 19, 20, 25, 26, 30, 32, 36, 37], "unspecifi": 11, "classmethod": [11, 14, 15], "decode_address": 11, "hashstr20": [11, 17], "hashbytes20": [11, 17], "nativ": 11, "rawaddress": [11, 17], "decode_block": 11, "blockapi": [11, 15, 25], "decod": [11, 13, 14, 18, 30], "dictionari": [11, 15, 17, 18, 24, 36], "decode_calldata": 11, "calldata": [11, 13, 24], "map": [11, 13, 14, 15, 16, 18, 24, 36], "anonym": 11, "stringifi": [11, 13, 24], "index": [11, 13, 17, 18, 20, 22, 24, 36], "decode_log": [11, 37], "event": [11, 13, 14, 17, 37], "contractlog": [11, 13, 15, 17, 25, 37], "match": [11, 12, 13, 15, 17, 18, 30, 36], "definit": [11, 15, 30], "decode_receipt": 11, "decode_returndata": 11, "raw_data": 11, "default_network_nam": 11, "encode_address": 11, "integ": [11, 15], "encode_calldata": 11, "encod": [11, 17, 30], "encode_deploy": 11, "deployment_bytecod": 11, "other": [11, 12, 15, 17, 18, 19, 20, 23, 24, 28, 30, 31, 36, 37], "constructor": [11, 13, 24, 33], "interfac": [11, 15, 16, 21, 27, 30, 32, 35, 36], "encode_transact": 11, "addition": [11, 15, 20, 26, 28, 30, 34, 37], "updat": [11, 18, 36], "enrich_calltre": 11, "calltreenod": 11, "enhanc": 11, "help": [11, 12, 13, 18, 19, 22, 23, 26, 27, 28, 30, 34, 36], "decim": [11, 36], "token": [11, 26, 30, 36, 37], "symbol": [11, 23, 30, 37], "currenc": 11, "pai": 11, "eth": [11, 19, 23, 24, 25, 30, 34, 36], "get_method_selector": 11, "selector": [11, 13, 24, 36], "keccak": 11, "eth_pydantic_typ": [11, 24], "myecosystem": 11, "def": [11, 12, 15, 16, 18, 19, 20, 23, 24, 27, 29, 30, 35, 36, 37], "self": [11, 13, 15, 18, 20, 24, 27, 36], "simpl": [11, 22, 24, 37], "calcul": [11, 17], "get_network": 11, "networknotfounderror": [11, 14], "present": [11, 15, 26], "get_network_data": 11, "ad": [11, 14, 15, 18, 19, 20, 23, 30, 36], "opinion": [11, 15], "order": [11, 15, 19, 20, 24], "nice": [11, 14, 15], "translat": [11, 15], "get_proxy_info": [11, 15], "proxyinfoapi": [11, 15], "pattern": [11, 18, 26, 30], "same": [11, 13, 15, 17, 18, 19, 24, 27, 30, 34, 36, 37], "shareabl": 11, "header": [11, 17], "request": [11, 16, 22, 26, 29, 30], "serialize_transact": 11, "serial": [11, 17], "set_default_network": 11, "switch": [11, 30, 36], "forkednetworkapi": 11, "upstream_chain_id": 11, "id": [11, 13, 14, 15, 17, 21, 24, 26, 30], "upstream": 11, "alwai": [11, 21, 22, 24, 26, 35], "some": [11, 17, 19, 24, 28, 30, 36, 37], "while": [11, 14, 15, 26, 36], "regardless": [11, 23, 30, 37], "upstream_network": 11, "being": [11, 14, 17, 23], "upstream_provid": 11, "upstreamprovid": 11, "your": [11, 12, 13, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37], "under": [11, 15, 18, 19, 21, 35], "one": [11, 12, 13, 15, 16, 17, 19, 20, 22, 23, 26, 27, 30, 34, 36, 37], "use_upstream_provid": 11, "providercontextmanag": [11, 15, 30], "wrapper": [11, 13, 14, 21], "around": [11, 13, 14, 21], "auto_gas_multipli": 11, "float": [11, 15, 17], "multipli": [11, 22, 30], "estim": [11, 15, 18, 22, 30, 36], "ga": [11, 14, 18, 22, 24, 30], "tx": [11, 24, 37], "insur": [11, 22], "base_fee_multipli": [11, 30], "appli": [11, 15, 27, 36, 37], "block_tim": [11, 13, 15, 30], "approxim": 11, "take": [11, 12, 20, 22, 24, 30, 35, 36], "block": [11, 13, 14, 15, 16, 17, 18, 22, 23, 27], "mine": [11, 15], "15": [11, 30], "chain_id": [11, 14, 15, 23, 30, 35], "unless": [11, 12, 13, 15, 29, 30], "providerapi": [11, 12, 15, 16, 18, 27, 28, 37], "default_provider_nam": 11, "get_provid": 11, "provider_nam": [11, 14, 15, 35], "provider_set": [11, 15], "is_adhoc": 11, "mostli": 11, "unknown": [11, 14, 15, 30], "is_dev": 11, "is_fork": 11, "is_loc": 11, "network_id": 11, "infura": [11, 16, 22, 25, 27, 30, 34], "alchemi": [11, 16, 20, 22, 28, 30, 35, 37], "partial": 11, "conveni": [11, 15], "required_confirm": [11, 13, 15], "recommend": [11, 15, 19, 20, 26, 30, 34], "wait": [11, 13, 15, 30], "consid": [11, 15, 18, 30], "sinc": [11, 17, 24], "set_default_provid": 11, "found": [11, 13, 14, 15, 18, 19, 20, 21, 24, 26, 27, 30, 35, 36], "transaction_acceptance_timeout": [11, 30, 37], "accept": [11, 12, 19, 30, 33], "two": [11, 15, 19, 22, 27, 30, 34, 36, 37], "minut": [11, 30, 37], "smaller": 11, "timeout": [11, 14, 18], "use_default_provid": [11, 30], "disconnect_aft": [11, 15, 30], "temporarili": [11, 15], "enter": [11, 19, 29, 30, 36], "context": [11, 12, 14, 15, 17, 18, 19, 23, 27, 36], "exit": [11, 15, 23, 36], "multipl": [11, 12, 17, 18, 26, 34], "whatev": [11, 30], "end": [11, 12, 13, 15, 18, 30, 36], "so": [11, 15, 19, 24, 26, 27, 30, 32, 36], "multi": [11, 18, 30], "scenario": [11, 13, 36], "use_provid": [11, 15, 30, 34, 36], "disconnect_on_exit": [11, 15], "temporari": [11, 15, 30], "whether": [11, 12, 13, 15, 17, 18, 19, 30], "python": [11, 13, 15, 17, 21, 23, 24, 27, 30, 31, 33, 34, 35, 36], "verify_chain_id": 11, "networkmismatcherror": [11, 14], "hardcod": 11, "manageraccessmixin": [11, 12, 13, 18], "And": [11, 20, 30, 36], "providerpai": 11, "case": [11, 13, 14, 15, 20, 21, 22, 24, 26, 27, 30, 32, 36], "veri": [11, 30], "Or": [11, 21, 23, 24, 27, 28], "choic": [11, 15, 20, 30], "parse_network_choic": [11, 15, 30, 36], "empti": [11, 16, 17, 18, 36], "target": [11, 16, 18, 32], "basemodel": [11, 17, 18], "create_network_typ": 11, "easili": [11, 30, 37], "dependencyapi": [11, 15, 16, 26], "contracts_fold": [11, 15, 21, 22, 26], "exclud": [11, 15, 17, 18, 21, 26, 36], "json": [11, 15, 16, 17, 18, 24, 26], "lock": [11, 15, 21, 36], "build": [11, 15, 33, 35, 36], "config_overrid": [11, 15, 26], "ipf": 11, "cached_manifest": 11, "packagemanifest": [11, 15, 16, 26, 33], "valid": [11, 15, 16, 17, 19, 30], "use_cach": [11, 15], "By": [11, 15, 21, 37], "lazili": 11, "look": [11, 13, 15, 18, 20, 21, 22, 23, 27, 31, 36, 37], "glob": [11, 26], "extract_manifest": [11, 15], "presum": [11, 15], "project_manag": [11, 15], "get_project": [11, 15], "dynam": [11, 15], "correct": [11, 12, 15, 30, 36], "projectapi": [11, 15, 16], "structur": [11, 15, 17, 18, 19, 31, 35], "instal": [11, 14, 15, 19, 21, 22, 24, 25, 27, 30, 31, 35, 36], "uri": [11, 15, 22, 30], "omit": [11, 15, 20, 30, 37], "latest": [11, 13, 15, 17, 18, 23, 30, 34, 37], "version_id": [11, 15], "sub": [11, 12, 15], "most": [11, 13, 15, 19, 20, 22, 29, 30, 34], "often": [11, 13, 15, 24, 26], "config_file_nam": [11, 15], "work": [11, 13, 15, 16, 18, 24, 25, 26, 27, 28, 30, 34, 36, 37], "extend": [11, 12, 20, 28, 31], "non": [11, 13, 14, 17, 18, 23, 29, 30], "add_compiler_data": 11, "compiler_data": [11, 15], "ethpm_typ": [11, 15, 17], "full": [11, 15, 18, 30, 36], "manifest_cachefil": 11, "create_manifest": [11, 15], "clear": [11, 15], "is_valid": [11, 15], "figur": [11, 15], "out": [11, 14, 15, 18, 19, 23, 26, 28, 30, 36], "best": [11, 15, 30, 34], "share": [11, 17, 18, 30, 36], "upload": 11, "anoth": [11, 14, 15, 17, 30, 36, 37], "process_config_fil": [11, 15], "process": [11, 15, 16, 18, 24, 27], "had": [11, 15], "replace_manifest": 11, "replac": [11, 18, 30], "entir": [11, 24, 27, 30, 36], "update_manifest": 11, "part": [11, 15, 18, 20, 27, 30, 34, 36], "field": [11, 17, 18, 26, 28, 36], "whe": 11, "num_transact": 11, "parenthash": 11, "0x0000000000000000000000000000000000000000000000000000000000000000": 11, "timestamp": [11, 15, 17, 18, 23, 36], "its": [11, 12, 13, 14, 15, 16, 17, 18, 21, 22, 23, 24, 26, 27, 29, 30, 33, 36, 37], "block_page_s": 11, "100": [11, 36, 37], "concurr": [11, 15], "4": [11, 15, 22, 23, 24, 26, 30, 36, 37], "hardhat": [11, 22, 28, 30, 36, 37], "base_fe": [11, 15, 37], "minimum": [11, 15], "next": [11, 15, 30], "1559": [11, 15, 30, 37], "notimplementederror": [11, 14, 15, 37], "fetch": [11, 15, 24, 25, 30, 37], "respons": [11, 15, 16, 17, 18, 30], "particularli": 11, "across": [11, 15, 22, 23, 26, 30], "rang": [11, 13, 15], "chainlist": [11, 15], "comprehens": [11, 15], "mani": [11, 12, 25, 28, 30], "parallel": [11, 18], "thread": [11, 15, 18], "connection_id": 11, "uniqu": [11, 15, 17, 24, 30, 37], "identifi": [11, 15, 30, 36], "especi": 11, "dev": [11, 14, 15, 17, 24, 36, 37], "connection_str": [11, 15], "ipc": 11, "tear": 11, "down": [11, 17, 18, 34], "quit": [11, 13], "estimate_gas_cost": [11, 37], "block_id": [11, 14], "hexstr": [11, 17], "liter": [11, 17], "earliest": [11, 13, 15, 17], "pend": [11, 13, 15, 17, 30, 36], "cost": [11, 15, 24], "blockid": [11, 14, 17], "past": [11, 15, 22], "report": [11, 17, 30], "smallest": 11, "unit": 11, "wei": 11, "max": [11, 15, 22, 30, 36, 37], "maximum": [11, 22, 30], "gas_pric": [11, 15, 37], "price": [11, 15, 36], "what": [11, 15, 16, 19, 20, 23, 26, 27, 30, 35, 36], "pre": [11, 18, 19, 21, 23, 34], "get_bal": 11, "get_block": [11, 23, 30], "blocknotfounderror": [11, 14], "get_cod": 11, "previou": [11, 15], "contractcod": 11, "get_contract_log": 11, "log_filt": 11, "logfilt": 11, "topic": [11, 13, 31], "get_nonc": 11, "get_receipt": [11, 15, 37], "might": [11, 23, 37], "get_transactions_by_block": 11, "get_virtual_machine_error": 11, "virtualmachineerror": [11, 14], "virtual": [11, 14, 34], "machin": [11, 14, 15], "client": [11, 18], "went": 11, "wrong": [11, 14], "http_uri": 11, "is_connect": [11, 20], "max_ga": 11, "network_choic": [11, 15], "priority_fe": [11, 37], "miner": [11, 37], "tip": 11, "incentiv": 11, "them": [11, 16, 19, 21, 23, 24, 26, 27, 30, 31, 35, 36], "send_cal": 11, "immedi": [11, 23, 30], "without": [11, 18, 19, 23, 24, 28, 30, 37], "histor": [11, 13, 15], "point": [11, 15, 17, 18, 20, 26, 27, 32, 36], "prior": [11, 15, 27], "through": [11, 13, 18, 25, 27, 33], "mempool": [11, 24], "send_transact": 11, "supports_trac": 11, "update_set": 11, "new_set": 11, "port": 11, "reconnect": 11, "ws_uri": 11, "wss": 11, "subprocessprovid": [11, 14], "process_wait_timeout": 11, "popen": 11, "is_stop": 11, "stdout_queu": 11, "joinablequeu": [11, 18], "stderr_queu": 11, "ganach": 11, "build_command": 11, "pass": [11, 12, 15, 18, 19, 20, 26, 27, 36, 37], "task": [11, 18, 36], "stop": [11, 13, 15, 20, 36], "process_nam": 11, "20": [11, 25, 29, 30, 37], "readi": [11, 15, 17], "kill": 11, "testproviderapi": 11, "snapshot": [11, 14, 15, 18], "num_block": [11, 15], "advanc": [11, 25], "allot": 11, "snapshot_id": [11, 14, 15], "regress": [11, 15], "go": [11, 15, 30], "set_timestamp": 11, "new_timestamp": 11, "record": [11, 15], "intent": [11, 15], "later": [11, 15, 36], "snapshotid": [11, 14, 15, 18], "contract_address": [11, 14, 17], "block_numb": [11, 13, 15, 17], "gas_us": [11, 24], "statu": 11, "await_confirm": 11, "now": [11, 19, 22, 26, 27, 30, 36], "contractev": [11, 13, 37], "contractlogcontain": 11, "were": [11, 15, 22, 24, 30, 36], "emit": [11, 17, 37], "method_cal": 11, "produc": [11, 17], "raise_for_statu": 11, "noreturn": [11, 12], "regard": 11, "transactionstatusenum": 11, "ran_out_of_ga": 11, "ran": [11, 14, 31, 36], "gas_limit": [11, 22, 30], "return_valu": [11, 24], "obtain": [11, 24, 36], "final": [11, 15, 18, 36], "total_fees_paid": [11, 25], "paid": [11, 25], "tracefram": [11, 14], "track_coverag": 11, "track": [11, 15, 17, 24, 36], "coverag": 11, "els": [11, 13, 15, 18, 29, 30, 36], "level": [11, 12, 24, 27, 29, 30, 34], "track_ga": 11, "chainid": 11, "0x": [11, 15, 18, 24, 32], "max_fe": [11, 37], "max_priority_fe": [11, 37], "transactionsignatur": [11, 17], "schema": [11, 17], "permit": 11, "total_transfer_valu": 11, "could": [11, 23, 24], "determin": [11, 13, 15, 32], "submit": [11, 24], "accounttransactionqueri": [11, 15], "column": [11, 13, 15, 17], "start_nonc": [11, 15], "stop_nonc": [11, 15], "_basequeri": 11, "querytyp": [11, 15], "blockqueri": [11, 15], "start_block": [11, 13, 15, 25], "stop_block": [11, 13, 15, 25], "step": [11, 13, 15, 33], "_baseblockqueri": 11, "blocktransactionqueri": [11, 15], "insid": [11, 18, 25], "contractcreationqueri": [11, 15], "contracteventqueri": [11, 15], "search_top": [11, 13], "member": 11, "contractmethodqueri": [11, 15], "method_arg": 11, "queryapi": [11, 15, 16], "estimate_queri": [11, 15], "millisecond": [11, 15, 17, 18], "indic": [11, 15, 18, 24, 29], "engin": [11, 13, 14, 15], "unabl": [11, 14, 15, 21], "perform_queri": [11, 15], "perform": [11, 13, 15, 17, 19, 24], "update_cach": 11, "chanc": [11, 30, 34], "noth": [11, 14], "store": [11, 15, 18, 19, 24, 25], "namespac": [12, 15, 16, 27, 31, 35], "extens": [12, 15, 16, 23, 27, 33, 36], "reusabl": 12, "common": [12, 18, 22, 26, 27, 30, 31, 37], "resourc": [12, 15], "well": [12, 15, 16, 17, 18, 27, 28, 31], "contract_file_paths_argu": 12, "callback": 12, "flatten": [12, 15], "existing_alias_argu": [12, 20, 27], "callabl": [12, 16, 18, 20], "non_existing_alias_argu": [12, 20], "yet": [12, 20, 27, 28, 36], "accountaliaspromptchoic": 12, "prompt_messag": 12, "promptchoic": 12, "lessen": 12, "hard": [12, 18], "param": [12, 20], "ctx": 12, "miss": [12, 15, 17, 18, 36], "It": [12, 16, 19, 20, 24, 25, 27, 29, 30, 36, 37], "compat": [12, 17], "certain": [12, 36, 37], "situat": 12, "descript": [12, 15, 27, 32], "arriv": 12, "print_choic": 12, "echo": [12, 20, 27, 35], "select_account": [12, 20], "networkchoic": 12, "case_sensit": 12, "base_typ": 12, "network_opt": [12, 20, 35], "get_metavar": 12, "metavar": 12, "outputformat": 12, "subset": [12, 15, 17], "output_format_choic": 12, "rich": 12, "text": [12, 14, 19], "view": [12, 13, 15, 24, 37], "standard": [12, 25, 26, 29, 32], "paramtyp": 12, "choice_callback": 12, "get_user_selected_choic": 12, "cmd": [12, 20, 30], "__expected_": 12, "get_user_selected_account": [12, 20], "deprec": [12, 15], "pick": 12, "want": [12, 15, 19, 21, 22, 24, 25, 26, 27, 29, 30, 33, 34, 36], "_outside_": 12, "account_opt": [12, 20], "connectedprovidercommand": [12, 20, 30, 35], "durat": [12, 15, 24], "right": [12, 36], "wai": [12, 15, 19, 22, 23, 24, 26, 30, 32, 34, 36, 37], "parse_arg": 12, "parser": [12, 16], "pars": [12, 15, 18, 20], "make_context": 12, "networkboundcommand": 12, "apeclicontextobject": [12, 20], "ape_cli_context": [12, 20], "static": [12, 30], "abort": [12, 14, 20], "base_error": 12, "invoc": [12, 36], "preserv": 12, "stack": [12, 14], "networkopt": 12, "meth": 12, "anyth": [12, 20, 24, 27, 29], "default_log_level": 12, "obj_typ": [12, 20], "featur": [12, 19, 20, 22, 24, 25, 36], "verbosity_opt": 12, "contract_opt": 12, "contracterror": 12, "In": [12, 15, 17, 19, 20, 21, 22, 23, 24, 25, 30, 32, 34, 36, 37], "incompatible_with": 12, "incompatible_opt": 12, "factori": [12, 15, 24], "enforc": 12, "incompat": 12, "cl": [12, 18, 20, 35], "other_opt": 12, "auto": [12, 17, 19, 22, 30, 36], "normal": [12, 18, 28, 32], "output_format_opt": 12, "skip_confirmation_opt": 12, "skip": [12, 19, 26], "cli_logg": 12, "apelogg": 12, "decor": [12, 16, 18, 24, 27, 36], "allfilepath": 12, "encourag": 12, "consist": 12, "path_typ": 12, "contracttypewrapp": 13, "decode_input": [13, 24], "prefix": [13, 14, 20, 22, 23, 24, 26, 28], "detect": [13, 14, 32], "find": [13, 14, 15, 17, 18, 19, 26, 27, 32, 36], "along": [13, 26], "source_path": [13, 15], "belong": 13, "cross": 13, "source_id": [13, 15, 17], "That": [13, 24, 37], "necessarili": [13, 37], "mycontract": [13, 15, 21, 22, 24, 25, 31, 33, 36, 37], "__call__": 13, "handler": [13, 24, 37], "c": 13, "attr_nam": [13, 15], "vote": 13, "impli": 13, "call_view_method": 13, "method_nam": [13, 36], "get_error_by_signatur": 13, "customerror": [13, 14], "similar": [13, 27, 30, 36], "get_event_by_signatur": [13, 37], "come": [13, 15, 18, 19, 21, 23, 24, 26, 28, 29, 30, 31, 34, 36], "respect": [13, 15], "invoke_transact": 13, "contract_contain": [13, 15], "assum": [13, 15, 24, 30, 33, 35, 36, 37], "real": [13, 19, 37], "my_contract": [13, 24, 32, 36], "0xabc1230001112223334445566611855443322111": 13, "thing": [13, 20, 27, 30], "actual": [13, 17, 24, 36], "my_event_typ": 13, "myevent": 13, "mockcontractlog": [13, 17], "__iter__": [13, 15], "occur": [13, 14, 15, 18, 29, 32, 36], "from_receipt": [13, 37], "poll_log": 13, "new_block_timeout": [13, 15], "daemon": [13, 15, 18], "new_log": 13, "print": [13, 14, 15, 20, 24, 26, 30, 35, 37], "futur": [13, 15], "never": [13, 15, 17, 19, 36], "yield": [13, 15, 16, 27, 36], "less": [13, 15, 29], "reorg": [13, 15], "10": [13, 15, 18, 21, 22, 29, 30], "50": [13, 15, 37], "live": [13, 15, 24, 37], "engine_to_us": [13, 15], "datafram": [13, 15], "last": [13, 15, 18, 24, 25, 36], "bypass": [13, 15, 26], "algorithm": [13, 15], "pd": [13, 15], "start_or_stop": [13, 15], "extra_address": 13, "search": [13, 18], "desir": 13, "deleg": [13, 15, 18, 32], "apeexcept": 14, "clickexcept": 14, "problem": 14, "aliasalreadyinuseerror": 14, "apeattributeerror": [14, 15], "projecterror": [14, 15], "attributeerror": [14, 37], "try": [14, 15, 18, 27, 35, 36], "apeindexerror": 14, "argumentslengtherror": 14, "arguments_length": 14, "contractdataerror": 14, "reason": [14, 30, 36], "providererror": 14, "chainerror": [14, 15], "compilererror": [14, 15], "configerror": 14, "issu": [14, 29, 34], "alik": 14, "revert_messag": 14, "source_traceback": 14, "sourcetraceback": 14, "base_err": 14, "assert": [14, 19, 24, 30, 36, 37], "statement": [14, 17, 36], "dev_messag": 14, "valueerror": [14, 15], "from_error": 14, "whenev": [14, 18], "possibl": [14, 15, 16, 18, 19, 30], "contractnotfounderror": [14, 15], "has_explor": 14, "decodingerror": 14, "ecosystemnotfounderror": 14, "methodnonpayableerror": 14, "payabl": [14, 24, 36], "outofgaserror": 14, "becaus": [14, 19, 24, 26, 27, 30, 36], "providernotconnectederror": [14, 15, 18], "providernotfounderror": 14, "queryengineerror": [14, 15], "rpctimeouterror": 14, "subprocesstimeouterror": 14, "subprocesserror": 14, "whilst": 14, "exce": [14, 37], "inspir": [14, 17], "py": [14, 17, 18, 23, 27, 31, 35, 36], "transactionnotfounderror": 14, "error_messsag": 14, "unknownsnapshoterror": [14, 15], "unknownversionerror": 14, "handle_ape_except": 14, "relev": [14, 17, 31], "frame": 14, "exc": 14, "someth": [14, 23, 30, 36, 37], "treat": [15, 24], "singleton": [15, 16], "root": [15, 18, 19, 20, 22, 23, 24, 28, 31, 36], "my_account": [15, 20, 26], "everi": [15, 17, 18, 29, 30, 32], "get_accounts_by_typ": 15, "type_": 15, "test_account": [15, 18, 19, 21, 36], "testaccountmanag": [15, 36], "These": [15, 36], "subject": 15, "section": [15, 18, 20, 22, 24, 26, 30, 36], "test_my_contract": [15, 36], "accountsmanag": 15, "testaccountcontain": 15, "account_id": 15, "slice": 15, "account_str": 15, "x": [15, 36, 37], "singl": [15, 18, 20, 24, 26], "hood": [15, 19], "can_trace_sourc": 15, "filenam": 15, "both": [15, 16, 17, 18, 20, 23, 24, 27, 30, 34, 37], "trace_sourc": 15, "traceabl": 15, "sol": [15, 21, 26, 31, 36], "collis": [15, 24], "ensur": [15, 16, 17, 24, 30, 36], "compile_sourc": [15, 21], "compiler_nam": 15, "program": [15, 17], "fallback": 15, "statemut": [15, 24], "nonpay": [15, 24], "ethpm": [15, 33], "contractnam": [15, 21], "flatten_contract": 15, "content": [15, 18, 26], "get_import": 15, "import_source_id": 15, "get_refer": 15, "imports_dict": 15, "entri": [15, 27, 30], "referring_source_id": 15, "transactionhistori": 15, "txn_receipt": 15, "revert_to_block": 15, "outgo": 15, "short": [15, 29, 30, 32, 36], "circuit": 15, "greater": [15, 17], "contractcach": 15, "memori": [15, 18], "per": 15, "perman": [15, 18, 25], "disk": [15, 19], "faster": 15, "__setitem__": 15, "ecosystem_nam": [15, 35], "cache_blueprint": 15, "blueprint_id": 15, "would": [15, 19, 20, 25, 26, 30, 34, 35, 36], "starknet": [15, 28, 30, 36], "cache_deploy": 15, "contract_inst": [15, 25], "cache_proxy_info": 15, "proxy_info": 15, "proxyinfo": 15, "clear_local_cach": 15, "reset": 15, "blank": 15, "get_blueprint": 15, "get_contain": 15, "wrap": [15, 18], "get_creation_receipt": 15, "creation": [15, 20], "get_deploy": [15, 24], "read": [15, 20, 24, 30, 34], "_local_deployments_map": 15, "written": 15, "deployments_map": 15, "get_multipl": 15, "min": [15, 36, 37], "instance_at": 15, "typeerror": [15, 18], "en": [15, 16, 22, 24, 28], "domain": [15, 24], "instance_from_receipt": 15, "blockcontain": 15, "latest_block": 15, "head": [15, 23], "move": 15, "backward": 15, "height": 15, "poll_block": 15, "reorgan": 15, "even": [15, 29, 30], "previous": [15, 24, 26, 27, 36], "new_block": 15, "length": [15, 18, 19], "similarli": [15, 19, 20, 21, 24, 27, 36], "just": [15, 20, 24, 26, 30, 34], "mimic": 15, "behavior": [15, 29, 30], "built": [15, 27, 34, 36], "increment": [15, 17], "isol": [15, 36], "owner": [15, 21, 24, 25, 28, 36, 37], "foobar": [15, 28], "deltatim": 15, "AND": 15, "design": [15, 17, 27], "begin": [15, 24], "pending_timestamp": [15, 36], "epoch": 15, "3600": 15, "restor": 15, "recent": 15, "project_fold": 15, "meta": 15, "packagemeta": 15, "author": [15, 24, 36], "licens": [15, 36], "keyword": [15, 23, 30], "link": [15, 36], "deploymentconfigcollect": 15, "default_ecosystem": [15, 22, 30], "parametr": 15, "test_mnemon": 15, "get_config": 15, "home": [15, 19, 22, 23, 25, 30, 34], "plugin_nam": 15, "force_reload": 15, "metadata": [15, 18], "using_project": 15, "project_path": 15, "contracts_path": 15, "my_project": 15, "deploymentconfig": 15, "rootmodelroottyp": 15, "pydanticundefin": 15, "accountintconvert": 15, "addressapiconvert": 15, "bytesaddressconvert": 15, "gwei": [15, 37], "appropri": 15, "long": [15, 27, 29], "is_typ": 15, "checksum": [15, 17], "against": [15, 16, 31, 36], "hexaddressconvert": 15, "hexconvert": 15, "hexintconvert": 15, "hex": [15, 18], "intaddressconvert": 15, "stringintconvert": 15, "timestampconvert": 15, "datetim": 15, "timedelta": 15, "No": [15, 30], "timezon": 15, "utc": 15, "system": [15, 18, 19, 24, 25, 27, 30], "granular": 15, "active_provid": [15, 23], "create_custom_provid": 15, "provider_cl": 15, "ape_ethereum": [15, 24, 27], "ethereumnodeprovid": 15, "guess": 15, "set_default_ecosystem": 15, "get_ecosystem": 15, "get_network_choic": 15, "form": [15, 18, 24, 29, 36], "appear": [15, 18], "get_provider_from_choic": 15, "network_data": 15, "networks_yaml": 15, "load_contract": 15, "uniniti": 15, "mycontracttyp": 15, "mycontacttyp": 15, "To": [15, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37], "contractnamespac": 15, "__str__": 15, "mention": [15, 27, 30], "extensions_with_missing_compil": 15, "recurs": 15, "extract": 15, "get_compiler_data": 15, "compile_if_need": 15, "get_contract": [15, 24], "contract_nam": [15, 17, 36], "keyerror": 15, "interfaces_fold": 15, "lookup_path": 15, "key_contract_path": 15, "give": [15, 19, 20, 26, 32, 35], "helloworld": [15, 35], "absolut": [15, 18, 22], "2678": [15, 33], "project_typ": 15, "apeproject": [15, 16], "scripts_fold": 15, "sources_miss": 15, "anywher": [15, 24, 29], "tests_fold": 15, "track_deploy": [15, 33], "upon": [15, 24, 26, 33], "public": [15, 24, 36], "tracked_deploy": 15, "bip122uri": 15, "explicitli": [15, 17, 21, 36], "githubdepend": 15, "openzeppelin": [15, 18, 22, 26, 32], "organ": [15, 18, 27, 28, 33, 34], "follow": [15, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "dapphub": [15, 26], "erc20": [15, 26], "Will": [15, 20, 34], "localdepend": 15, "npmdepend": 15, "npm": 15, "safe": [15, 32], "gnosi": [15, 26, 32], "14": 15, "version_from_json": 15, "version_from_local_json": 15, "baseproject": 15, "brownieproject": 15, "browni": 15, "defaultqueryprovid": 15, "querymanag": [15, 23], "biggest_block_s": 15, "inaccess": 15, "plugin_typ": 16, "plugintyp": 16, "hookimpl_kwarg": 16, "accountplugin": 16, "accountcontain": 16, "pluggy_patch": 16, "There": [16, 19, 20, 22, 24, 26, 28, 30, 34, 36, 37], "sever": [16, 20], "ecosystemplugin": 16, "hook": [16, 27], "registr": [16, 27], "overal": 16, "conform": [16, 18, 27], "much": [16, 21, 36, 37], "plugin_manag": 16, "pluggi": 16, "_manag": 16, "pluginmanag": 16, "own": [16, 22, 26, 29, 34, 36], "compilerplugin": 16, "register_compil": 16, "interfacecompil": 16, "document": [16, 19, 22], "config_class": 16, "deconstruct": 16, "inject": [16, 18], "mypluginconfig": 16, "conversionplugin": 16, "mweiconvers": 16, "explorerplugin": 16, "explor": [16, 24, 32], "etherscan": [16, 24, 28, 30], "myblockexplor": 16, "networkplugin": 16, "ropsten": 16, "happen": [16, 21, 24, 26, 30, 36], "soon": [16, 26], "shibachain": 16, "shibanetwork": 16, "providerplugin": [16, 27], "myprovid": [16, 27], "dependencyplugin": 16, "projectplugin": 16, "resolv": [16, 32], "gitmodul": 16, "queryplugin": 16, "query_engin": 16, "postgresengin": 16, "represent": [17, 23, 31], "bodi": 17, "namedtupl": 17, "191": 17, "compon": 17, "signabl": 17, "easi": [17, 20, 24, 34, 36], "origin": [17, 26, 34, 37], "think": 17, "712": 17, "hand": [17, 24], "encode_": 17, "modul": [17, 18, 23, 24, 29], "encode_structured_data": 17, "encode_intended_valid": 17, "encode_defunct": [17, 19], "r": [17, 36], "_signatur": 17, "ecdsa": 17, "vr": 17, "recover_sign": [17, 19], "sig": 17, "contractcoverag": 17, "functioncoverag": 17, "individu": [17, 28], "function_hit": 17, "hit": 17, "counter": 17, "zero": [17, 18, 36], "function_r": 17, "rate": [17, 30], "versu": [17, 22], "line_r": 17, "divid": 17, "lines_cov": 17, "lines_valid": 17, "miss_count": 17, "model_dump": 17, "pydant": [17, 18], "concept": [17, 36], "modelmodel_dump": 17, "mode": [17, 36], "to_python": 17, "serializ": 17, "by_alia": 17, "exclude_unset": 17, "exclude_default": 17, "exclude_non": 17, "round_trip": 17, "enabl": [17, 19, 24, 34, 36], "deseri": 17, "round": 17, "trip": 17, "encount": 17, "coveragestat": 17, "contractsourcecoverag": 17, "cover": [17, 24, 36], "total_funct": 17, "coverageproject": 17, "coveragereport": 17, "source_fold": 17, "get_html": 17, "get_xml": 17, "xml": [17, 36], "codecov": 17, "thu": [17, 20, 24, 30, 35, 36], "slightli": 17, "convent": [17, 22], "90": 17, "java": 17, "won": [17, 30, 36], "super": 17, "hit_count": 17, "dure": [17, 21, 26, 29, 36], "segment": 17, "ast": 17, "occupi": 17, "builtin": 17, "mark": [17, 29, 36], "endlin": 17, "endcolumn": 17, "exact": [17, 36], "full_nam": 17, "contact": 17, "separ": [17, 19, 24, 27, 36], "getter": [17, 36], "profile_stat": 17, "profil": [17, 36], "accumul": 17, "sourcestat": 17, "detail": [17, 31, 34], "basecontractlog": 17, "event_nam": 17, "0x0000000000000000000000000000000000000000": 17, "event_argu": 17, "block_hash": 17, "log_index": 17, "transaction_index": 17, "unix": [17, 18], "lookup": [17, 36], "posit": [17, 36], "mock": [17, 26, 36], "compar": 17, "inherit": 17, "equal": [17, 18, 19, 37], "comparison": 17, "abc": 18, "model_config": 18, "classvar": 18, "arbitrary_types_allow": 18, "model_field": 18, "fieldinfo": 18, "__fields__": 18, "v1": [18, 26], "mixin": 18, "_before_": 18, "include_getattr": 18, "include_getitem": 18, "additional_error_messag": 18, "annot": 18, "nonetyp": 18, "accur": 18, "private_kei": 18, "pair": 18, "junk": [18, 19, 22, 36], "number_of_account": [18, 19, 22, 36], "githubcli": 18, "ape_org": 18, "com": [18, 28, 30, 34], "available_plugin": 18, "ape_plugin_nam": 18, "clone_repo": 18, "repo_path": 18, "target_path": 18, "scheme": 18, "git": [18, 26, 28], "ssh": 18, "download_packag": 18, "filesystem": 18, "get_releas": 18, "gitreleas": 18, "releas": [18, 25, 26, 28, 34], "get_repo": 18, "maxsiz": 18, "queue": 18, "join": [18, 34], "borrow": 18, "librari": [18, 19, 24, 27], "until": [18, 30], "gotten": 18, "unfinish": 18, "goe": [18, 30], "consum": 18, "task_don": 18, "unblock": 18, "struct": 18, "structpars": 18, "method_abi": 18, "decode_output": 18, "alter": [18, 23], "arrai": 18, "applic": [18, 26, 37], "default_nam": 18, "unnam": 18, "encode_input": [18, 24], "tracestyl": 18, "ff8c00": 18, "d75f00": 18, "gas_cost": 18, "dim": 18, "bright_magenta": 18, "bright_green": 18, "bright_blu": 18, "00afd7": 18, "add_padding_to_str": 18, "str_list": 18, "extra_spac": 18, "space_charact": 18, "space": 18, "pad": 18, "charact": 18, "allow_disconnect": 18, "fn": 18, "return_none_when_disconnect": 18, "try_snapshot": 18, "expand_environment_vari": 18, "substr": 18, "environ": [18, 19, 22, 23, 30, 34], "variabl": [18, 19, 22, 23, 36], "extract_nested_valu": 18, "dig": 18, "nest": 18, "gas_estimation_error_messag": 18, "tx_error": 18, "explan": [18, 31], "explain": [18, 30, 36], "generate_dev_account": 18, "hd_path": [18, 36], "start_index": 18, "genesi": [18, 30], "wallet": 18, "get_all_files_in_directori": 18, "dir_a": 18, "dir_b": 18, "file_a": 18, "file_b": 18, "file_c": 18, "interest": 18, "regex": 18, "get_current_timestamp_m": 18, "get_package_vers": 18, "obj": 18, "__version__": 18, "get_relative_path": 18, "anchor": 18, "comput": [18, 19], "rel": 18, "ancestor": 18, "injected_before_us": 18, "fget": 18, "fset": 18, "fdel": 18, "is_arrai": 18, "abi_typ": 18, "abityp": 18, "probabl": 18, "is_evm_precompil": 18, "is_named_tupl": 18, "output_valu": 18, "is_struct": 18, "is_zero_hex": 18, "load_config": 18, "expand_envar": 18, "must_exist": 18, "oserror": 18, "expand": 18, "pragma_str_to_specifier_set": 18, "pragma_str": 18, "specifierset": 18, "pragma": [18, 36], "raises_not_impl": 18, "returns_arrai": 18, "run_until_complet": 18, "coroutin": 18, "async": 18, "await": 18, "asyncio": 18, "gather": 18, "singledispatchmethod": 18, "func": [18, 36], "dispatch": 18, "descriptor": 18, "generic_method": 18, "spawn": 18, "stream_respons": 18, "download_url": 18, "progress_bar_descript": 18, "progress": 18, "use_temp_sys_path": 18, "sy": 18, "secur": 19, "learn": [19, 21, 22, 24, 27, 28, 30, 31, 32, 33, 34, 35, 36], "ship": [19, 20, 21, 23, 28, 30], "assist": [19, 20, 27], "write": [19, 35, 36], "test_my_contract_method": 19, "prefund": 19, "put": [19, 29], "sole": 19, "generate_test_account": 19, "unfund": 19, "guid": [19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36], "action": [19, 34, 36], "1e18": 19, "ether": [19, 24, 25], "elimin": 19, "use_send": 19, "myfunct": 19, "imperson": [19, 36], "ledger": [19, 27], "trezor": [19, 27], "third": [19, 28], "parti": [19, 28, 34], "let": [19, 21, 23, 24, 30, 36], "premis": 19, "describ": [19, 30], "below": [19, 24, 26, 30, 36], "passphras": 19, "encrypt": 19, "password": 19, "browser": 19, "rest": [19, 27], "maxim": 19, "materi": 19, "entropi": 19, "increas": [19, 34, 36, 37], "n": 19, "altern": [19, 20, 21, 24, 26, 29, 30, 36], "elect": 19, "twice": 19, "sure": [19, 30, 34, 36], "rememb": 19, "hdpath": 19, "wordcount": 19, "togeth": [19, 27], "sai": [19, 24, 30, 37], "metamask": [19, 20], "export": 19, "secret": 19, "recoveri": 19, "d": [19, 36], "Then": [19, 23, 24, 26, 27, 36], "reduc": [19, 30], "repetit": 19, "eth_account": 19, "hello": [19, 35], "intention": 19, "decid": 19, "abov": [19, 24, 29, 30, 36, 37], "eip712": 19, "eip712typ": 19, "mail": 19, "_chainid_": 19, "uint256": [19, 24, 36, 37], "_name_": 19, "_verifyingcontract_": 19, "0xcccccccccccccccccccccccccccccccccccccccc": 19, "_version_": 19, "alic": 19, "0xcd2a3d9f938e13cd947ec05abc7fe734df8dd826": 19, "bob": 19, "0xb0b0b0b0b0b0b000000000000000000000000000": 19, "recov": 19, "recovered_sign": 19, "ci": [19, 24], "cd": 19, "programmat": 19, "ape_accounts_": 19, "_passphras": 19, "subsequ": 19, "set_autosign": 19, "highli": 19, "approach": [19, 30, 35, 36], "avoid": [19, 24, 34], "accident": 19, "leak": 19, "framework": [20, 24, 26, 29, 31, 34, 36, 37], "coupl": 20, "area": [20, 36], "showcas": 20, "endeavor": 20, "etc": 20, "logger": [20, 29], "gracefulli": 20, "cli_ctx": [20, 27], "account_manag": 20, "bad": 20, "mymanag": 20, "my": [20, 24, 25, 26, 27, 30], "customcontext": 20, "my_manag": 20, "foundri": [20, 24, 30, 36], "leav": [20, 26, 36], "semi": 20, "colon": [20, 36], "cmd_2": 20, "afterward": [20, 36], "rare": 20, "peopl": 20, "index_of_test_account": 20, "matter": [20, 30], "alon": 20, "visa": 20, "versa": [20, 24], "delete_account": 20, "create_account": 20, "boolean": 20, "ape_account": 20, "application_prefix": 20, "foo_bar": 20, "cli_0": 20, "lambda": 20, "startswith": 20, "cli_1": 20, "me": [20, 37], "me2": 20, "selected_account": 20, "edit": [21, 22, 27, 28, 30], "src": [21, 22, 26], "myinterfac": 21, "my_interfac": 21, "0x1234556b5ed9202110d7ecd637a4581db8b9879f": 21, "my_method": [21, 24, 32, 36], "elsewher": [21, 22], "unwil": 21, "artifact": 21, "binari": 21, "larger": 21, "adjust": [21, 30, 31, 36], "vy": [21, 31, 36], "tsconfig": 21, "retain": 21, "use_depend": 21, "3": [21, 23, 24, 25, 26, 34, 36, 37], "7": [21, 28, 36], "8": [21, 34, 36], "get_compil": 21, "place": [22, 26, 30, 35, 36], "global": [22, 30, 36], "preced": 22, "prefer": 22, "serv": 22, "alphabet": 22, "facilit": 22, "easier": 22, "fulli": [22, 24], "outsid": 22, "globalcontract": 22, "fantom": [22, 28, 30, 36], "0x5fbdb2315678afecb367f032d93f642f64180aa3": 22, "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512": 22, "localhost": [22, 27], "5030": 22, "whole": 22, "default_network": [22, 30], "mainnet_fork": 22, "default_provid": [22, 30], "numer": [22, 29, 30], "16": [22, 30], "1234": [22, 30], "0x1234": [22, 30], "eth_estimatega": 22, "shouldn": 22, "0b2": 22, "1647323479": 23, "reflect": 23, "61": 23, "ape_console_extra": 23, "intern": [23, 36], "underscor": [23, 35], "_": [23, 35], "eth_util": 23, "encode_hex": 23, "decode_hex": 23, "getattr": 23, "weth_address": 23, "14388241": 23, "0x68f768988e9bd4be971d527f72483f321975fa52aff9692b6d0e0af71fb77aaf": 23, "ape_init_extra": 23, "web3": [23, 27, 34], "close": 23, "reopen": 23, "autoreload": 23, "ape_consol": 23, "embed": 23, "load_ext": 23, "h": 23, "databas": [23, 25], "okai": [23, 27], "human": 23, "readabl": [23, 36], "metamask0": 23, "00040634": 23, "0xe3747e6341e0d3430e6ea9e2346cddcc2f8a4b5b": 23, "mysmartcontract": 24, "__init__": [24, 27], "arg1": 24, "arg2": 24, "pleas": [24, 34, 37], "basic": 24, "contract2": 24, "higher": [24, 30, 36], "why": [24, 30, 37], "notic": [24, 30, 31, 36], "complex": [24, 31], "possibli": 24, "repeat": 24, "fashion": 24, "perhap": 24, "simpli": 24, "copi": 24, "review": 24, "mere": [24, 27], "onc": [24, 26, 27, 30, 33, 36], "top": [24, 27, 36], "0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45": 24, "v2": 24, "registri": [24, 27], "ychad": 24, "keep": [24, 27, 36], "On": [24, 25], "rinkebi": 24, "pure": 24, "extern": [24, 36], "get_static_list": 24, "dynarrai": 24, "set_numb": 24, "num": 24, "prevnumb": 24, "mynumb": 24, "monei": 24, "storag": 24, "At": [24, 36], "eth_cal": 24, "eth_sendtransact": 24, "eth_sendrawtransact": 24, "demonstr": [24, 35, 36, 37], "123": [24, 33], "successfulli": [24, 33], "vice": 24, "addbal": 24, "new_bal": 24, "simul": [24, 30, 31], "forward": 24, "measur": 24, "getmodifiedbal": 24, "analyz": 24, "0x123": [24, 33], "40000": 24, "0x3fb5c1cb00000000000000000000000000000000000000000000000000000000000000de": 24, "bytes_valu": 24, "3fb5c1c": 24, "selector_str": 24, "input_dict": 24, "unit256": 24, "method_id": 24, "multical": 24, "multicall3": 24, "0xf4b8a02d4e8d76070bd7092b54d2cbbe90fa72e9": 24, "0x80067013d7f7af4e86b3890489acafe79f31a4cb": 24, "pool": 24, "ipool": 24, "getreserv": 24, "applydiscount": 24, "acct": [24, 25, 37], "larg": [25, 30], "rout": 25, "our": [25, 27, 34, 35, 36], "incorpor": 25, "few": [25, 26, 36], "df": 25, "stuff": [25, 29, 30], "sum": 25, "sent": [25, 30], "foohappen": 25, "beta": 25, "constant": 25, "plan": 25, "stage": 25, "sqlite": 25, "tabl": [25, 36, 37], "dataclass": 25, "contract_ev": 25, "untouch": 26, "box": [26, 28, 30, 36], "still": [26, 32, 36, 37], "highlight": 26, "zeppelin": 26, "offici": 26, "uniswap": 26, "v3": 26, "retri": [26, 30], "mydepend": 26, "suitabl": 26, "sometim": [26, 30, 36], "node_modul": 26, "myorg": 26, "v4": 26, "6": [26, 28, 36], "vault": 26, "master": [26, 34], "v0": 26, "gh": 26, "abbrevi": 26, "backend": 26, "guidelin": 26, "dapptoolserc20": 26, "dappnix": 26, "evm_vers": 26, "pari": 26, "involv": 26, "import_remap": 26, "erc721": 26, "dependency_contract": 26, "my_depend": 26, "dependencycontracttyp": 26, "deployed_contract": 26, "include_depend": 26, "ape_": 27, "ape_cli_subcommand": 27, "setup": [27, 36], "intend": 27, "tokenlist": 27, "As": [27, 30, 36], "primarili": 27, "team": 27, "good": 27, "qualiti": 27, "compos": [27, 34], "benefit": 27, "interchang": 27, "httpprovid": 27, "_web3": 27, "1337": [27, 37], "finish": 27, "ti": 27, "site": [27, 34], "loop": 27, "potenti": [27, 29, 30], "ones": [27, 37], "accord": 27, "_cli": 27, "my_sub_cmd": 27, "subcommand": 27, "entrypoint": 27, "entry_point": 27, "ape_myplugin": 27, "race": 27, "condit": 27, "prevent": 27, "my_cmd": [27, 29], "indiffer": 27, "my_ledger_account": 27, "ledger_0": 27, "my_trezor_account": 27, "trezor_0": 27, "my_script": 27, "my_provider_plugin": 27, "short_help": 27, "off": [27, 36], "my_command": 27, "architectur": 28, "trust": [28, 30], "constraint": 28, "throughout": 29, "21": 29, "30": 29, "yellow": 29, "40": 29, "shown": 29, "loglevel": 29, "set_level": 29, "arbitrum": 30, "tester": [30, 36], "discuss": [30, 36], "triplet": 30, "polygon": 30, "anvil": [30, 36], "altogeth": 30, "commonli": 30, "testnet": 30, "cut": 30, "talk": 30, "maintain": 30, "small": 30, "improv": 30, "wherea": 30, "matic": 30, "avalanch": 30, "optmism": 30, "zkevm": 30, "proper": 30, "remaind": 30, "familiar": 30, "109": 30, "shibarium": 30, "base_ecosystem_plugin": 30, "paragraph": 30, "recal": 30, "fro": 30, "closer": 30, "henc": 30, "default_": 30, "remot": 30, "care": [30, 37], "correctli": 30, "likewis": 30, "tell": 30, "apenet": 30, "closest": 30, "www": 30, "shibrpc": 30, "customnetwork": 30, "31337": 30, "rate_limit": 30, "sens": 30, "scan": 30, "api_uri": 30, "consult": 30, "readm": 30, "clarifi": 30, "saw": 30, "default_transaction_typ": 30, "fly": 30, "itself": [30, 31, 36], "integr": 30, "better": 30, "uncommon": 30, "placehold": 30, "unsur": 30, "ident": 30, "ethtest": 30, "ephemer": 30, "strai": 30, "though": 30, "120": 30, "decentr": 30, "max_receipt_retri": 30, "tend": 30, "caus": [30, 36], "reject": 30, "decis": 30, "middl": 30, "start_provid": 30, "jump": [30, 34], "bridg": 30, "continu": 30, "effect": 30, "smart_contract_exampl": 31, "sampl": [31, 36], "test_sampl": 31, "autom": 31, "my_account_alia": 31, "job": 31, "popular": 31, "minim": 32, "1167": 32, "1967": 32, "beacon": 32, "uup": 32, "1822": 32, "9": 32, "create_forwarder_to": 32, "0xsplit": 32, "formerli": 32, "oz": 32, "897": 32, "zeroag": 32, "soladypush0": 32, "push0": 32, "host": 32, "influenc": 33, "walk": 33, "0x12c17f958d2ee523a2206206994597c13d831e34": 33, "With": 34, "ltd": 34, "discord": 34, "server": 34, "stai": 34, "date": 34, "tutori": [34, 37], "technic": 34, "deeper": [34, 36], "understand": [34, 36], "academ": 34, "platform": 34, "challeng": 34, "linux": [34, 36], "maco": [34, 36], "11": 34, "window": 34, "subsystem": 34, "wsl": 34, "python3": 34, "three": [34, 36], "advis": 34, "1558": 34, "virtualenv": 34, "venv": 34, "interf": 34, "o": [34, 37], "env": 34, "homebrew": 34, "instruct": 34, "visit": [34, 37], "dockerhub": 34, "volum": 34, "haramb": 34, "vvm": 34, "solcx": 34, "pwd": 34, "sdk": 34, "interoper": 34, "experi": 34, "3rd": 34, "risk": 34, "bundl": [34, 36], "softwar": 34, "acc0": 34, "acc1": 34, "k": 34, "test_only_one_th": 34, "advantag": 35, "submodul": 35, "world": 35, "subdirectori": 35, "flexibl": 35, "cli_2": 35, "shownet": 35, "dist": 36, "cov": 36, "becom": 36, "intuit": 36, "fact": 36, "regular": 36, "test_": 36, "test_add": 36, "left": 36, "divis": 36, "phase": 36, "piec": 36, "encompass": 36, "enact": 36, "behav": 36, "authorized_method": 36, "test_author": 36, "not_own": 36, "set_own": 36, "scope": 36, "disabl": 36, "flow": 36, "dive": 36, "syntax": 36, "exactli": 36, "test_my_method": 36, "sustain": 36, "despit": 36, "vitalik": 36, "0xab5801a7d398351b8be11c439e05c5b3259aec9b": 36, "other_contract": 36, "othercontract": 36, "test_in_futur": 36, "86000": 36, "test_multi_chain": 36, "inspect": 36, "academi": 36, "conftest": 36, "test_mint": 36, "nft": 36, "test_account_bal": 36, "quantiti": 36, "mint": [36, 37], "balanceof": [36, 37], "earlier": 36, "assertionerror": 36, "shorter": 36, "comment": 36, "check_valu": 36, "_valu": 36, "reli": 36, "explictli": 36, "cairo": 36, "due": 36, "_x": 36, "sqrt": 36, "incorrect": 36, "reentri": 36, "nonreentr": 36, "_foo_intern": 36, "introduc": 36, "spdx": 36, "gpl": 36, "unauthor": 36, "unauth_address": 36, "withdraw": 36, "disallow": 36, "hacker": 36, "test_unauthorized_withdraw": 36, "test_unauthor": 36, "test_error_on_deploi": 36, "mycustomerror": 36, "haserror": 36, "rev": 36, "captur": 36, "grab": 36, "isinst": 36, "myerror": 36, "use_network": 36, "marker": 36, "test_my_fantom_test": 36, "test_my_ethereum_test": 36, "mid": 36, "test_my_multichain_test": 36, "stark_contract": 36, "mystarknetcontract": 36, "test_starknet_th": 36, "stark_account": 36, "fundm": 36, "median": [36, 37], "57198": 36, "91398": 36, "82848": 36, "28307": 36, "38679": 36, "33493": 36, "changeonstatu": 36, "23827": 36, "45739": 36, "34783": 36, "getsecret": 36, "24564": 36, "test0": 36, "2400": 36, "9100": 36, "5750": 36, "testcontract": 36, "setnumb": 36, "51021": 36, "debug_": 36, "mocktoken": 36, "poolcontract": 36, "reset_": 36, "comma": 36, "interv": 36, "press": 36, "ctrl": 36, "undo": 36, "stmt": 36, "85": 36, "71": 36, "80": 36, "htmlcov": 36, "__builtin__": 36, "_immutable_numb": 36, "_number": 36, "foo_method": 36, "view_method": 36, "distinguish": 36, "myaccount": 37, "shell": 37, "contract_method_defined_in_contract": 37, "depth": 37, "apeacademi": 37, "london": 37, "got": 37, "broken": 37, "fundmycontract": 37, "prioriti": 37, "beforehand": 37, "plu": 37, "priorit": 37, "highest": 37, "0x00": 37, "0x0": 37, "fooevent": 37, "barev": 37, "foomethod": 37, "event_typ": 37, "baz": 37, "longer": 37, "600": 37, "show_trac": 37, "methodwithoutargu": 37, "0x43abb1fdadfdae68f84ce8cd2582af6ab02412f686ee2544aa998db662a5ef50": 37, "0x1e59ce931b4cfea3fe4b875411e280e173cb7a9c": 37, "contracta": 37, "7a9c": 37, "469604": 37, "superclust": 37, "234444": 37, "23523523235235": 37, "11111111111": 37, "345345347789999991": 37, "99999998888882": 37, "345457847457457458457457457": 37, "92222229999998888882": 37, "3454": 37, "111145345347789999991": 37, "333399998888882": 37, "234545457847457457458457457457": 37, "461506": 37, "methodb1": 37, "lolol": 37, "ic": 37, "cream": 37, "dynamo": 37, "402067": 37, "contractc": 37, "getsomelist": 37, "3425311345134513461345134534531452345": 37, "111344445534535353": 37, "993453434534534534534977788884443333": 37, "370103": 37, "methodc1": 37, "windows95": 37, "simpler": 37, "jamaica": 37, "cardin": 37, "363869": 37, "callm": 37, "233432": 37, "methodb2": 37, "trombon": 37, "231951": 37, "paperwork": 37, "countri": 37, "wing": 37, "227360": 37, "222263": 37, "methodc2": 37, "147236": 37, "122016": 37, "addresstovalu": 37, "100305": 37, "bandpractic": 37, "94270": 37, "lemondrop": 37, "92321": 37, "86501": 37, "82729": 37, "snitches_get_stich": 37, "111": 37, "55252": 37, "52079": 37, "48306": 37, "0x053cba5c12172654d894f66d5670bab6215517a94189a9ffc09bc40a589ec04d": 37, "show_gas_report": 37, "dai": 37, "1302": 37, "13028": 37, "1377": 37, "approv": 37, "22414": 37, "burn": 37, "11946": 37, "25845": 37, "contract_a": 37, "methodtocal": 37, "txn_cost": 37, "mymutablemethod": 37, "view_cost": 37, "myviewmethod": 37}, "objects": {"": [[10, 0, 0, "-", "ape"]], "ape": [[10, 1, 1, "", "Contract"], [10, 2, 1, "", "Project"], [10, 3, 1, "", "accounts"], [10, 3, 1, "", "chain"], [10, 3, 1, "", "compilers"], [10, 3, 1, "", "config"], [10, 1, 1, "", "convert"], [14, 0, 0, "-", "exceptions"], [10, 3, 1, "", "networks"], [16, 0, 0, "-", "plugins"], [10, 3, 1, "", "project"], [10, 2, 1, "", "reverts"], [17, 0, 0, "-", "types"], [18, 0, 0, "-", "utils"]], "ape.api": [[11, 0, 0, "-", "accounts"], [11, 0, 0, "-", "address"], [11, 0, 0, "-", "compiler"], [11, 0, 0, "-", "config"], [11, 0, 0, "-", "convert"], [11, 0, 0, "-", "explorers"], [11, 0, 0, "-", "networks"], [11, 0, 0, "-", "projects"], [11, 0, 0, "-", "providers"], [11, 0, 0, "-", "query"]], "ape.api.accounts": [[11, 4, 1, "", "AccountAPI"], [11, 4, 1, "", "AccountContainerAPI"], [11, 4, 1, "", "ImpersonatedAccount"], [11, 4, 1, "", "TestAccountAPI"], [11, 4, 1, "", "TestAccountContainerAPI"]], "ape.api.accounts.AccountAPI": [[11, 5, 1, "", "__dir__"], [11, 6, 1, "", "alias"], [11, 5, 1, "", "call"], [11, 5, 1, "", "check_signature"], [11, 5, 1, "", "declare"], [11, 5, 1, "", "deploy"], [11, 5, 1, "", "prepare_transaction"], [11, 5, 1, "", "sign_message"], [11, 5, 1, "", "sign_transaction"], [11, 5, 1, "", "transfer"]], "ape.api.accounts.AccountContainerAPI": [[11, 5, 1, "", "__contains__"], [11, 5, 1, "", "__delitem__"], [11, 5, 1, "", "__getitem__"], [11, 5, 1, "", "__len__"], [11, 6, 1, "", "accounts"], [11, 6, 1, "", "aliases"], [11, 5, 1, "", "append"], [11, 5, 1, "", "remove"]], "ape.api.accounts.ImpersonatedAccount": [[11, 6, 1, "", "address"], [11, 5, 1, "", "call"], [11, 5, 1, "", "sign_message"], [11, 5, 1, "", "sign_transaction"]], "ape.api.accounts.TestAccountContainerAPI": [[11, 5, 1, "", "generate_account"]], "ape.api.address": [[11, 4, 1, "", "Address"], [11, 4, 1, "", "BaseAddress"]], "ape.api.address.Address": [[11, 6, 1, "", "address"]], "ape.api.address.BaseAddress": [[11, 6, 1, "", "address"], [11, 6, 1, "", "balance"], [11, 6, 1, "", "code"], [11, 6, 1, "", "codesize"], [11, 6, 1, "", "history"], [11, 6, 1, "", "is_contract"], [11, 6, 1, "", "nonce"]], "ape.api.compiler": [[11, 4, 1, "", "CompilerAPI"]], "ape.api.compiler.CompilerAPI": [[11, 5, 1, "", "compile"], [11, 2, 1, "", "compiler_settings"], [11, 6, 1, "", "config"], [11, 5, 1, "", "enrich_error"], [11, 5, 1, "", "get_versions"], [11, 6, 1, "", "name"], [11, 6, 1, "", "settings"], [11, 6, 1, "", "supports_source_tracing"]], "ape.api.config": [[11, 4, 1, "", "ConfigEnum"], [11, 4, 1, "", "GenericConfig"], [11, 4, 1, "", "PluginConfig"]], "ape.api.convert": [[11, 4, 1, "", "ConverterAPI"]], "ape.api.convert.ConverterAPI": [[11, 5, 1, "", "convert"], [11, 5, 1, "", "is_convertible"]], "ape.api.explorers": [[11, 4, 1, "", "ExplorerAPI"]], "ape.api.explorers.ExplorerAPI": [[11, 5, 1, "", "get_address_url"], [11, 5, 1, "", "get_contract_type"], [11, 5, 1, "", "get_transaction_url"], [11, 5, 1, "", "publish_contract"]], "ape.api.networks": [[11, 4, 1, "", "EcosystemAPI"], [11, 4, 1, "", "ForkedNetworkAPI"], [11, 4, 1, "", "NetworkAPI"], [11, 4, 1, "", "ProviderContextManager"], [11, 4, 1, "", "ProxyInfoAPI"], [11, 1, 1, "", "create_network_type"]], "ape.api.networks.EcosystemAPI": [[11, 5, 1, "", "__ape_extra_attributes__"], [11, 5, 1, "", "add_network"], [11, 6, 1, "", "config"], [11, 5, 1, "", "create_transaction"], [11, 6, 1, "", "custom_network"], [11, 2, 1, "", "data_folder"], [11, 5, 1, "", "decode_address"], [11, 5, 1, "", "decode_block"], [11, 5, 1, "", "decode_calldata"], [11, 5, 1, "", "decode_logs"], [11, 5, 1, "", "decode_receipt"], [11, 5, 1, "", "decode_returndata"], [11, 6, 1, "", "default_network_name"], [11, 5, 1, "", "encode_address"], [11, 5, 1, "", "encode_calldata"], [11, 5, 1, "", "encode_deployment"], [11, 5, 1, "", "encode_transaction"], [11, 5, 1, "", "enrich_calltree"], [11, 2, 1, "", "fee_token_decimals"], [11, 2, 1, "", "fee_token_symbol"], [11, 5, 1, "", "get_method_selector"], [11, 5, 1, "", "get_network"], [11, 5, 1, "", "get_network_data"], [11, 5, 1, "", "get_proxy_info"], [11, 2, 1, "", "name"], [11, 6, 1, "", "networks"], [11, 2, 1, "", "request_header"], [11, 5, 1, "", "serialize_transaction"], [11, 5, 1, "", "set_default_network"]], "ape.api.networks.ForkedNetworkAPI": [[11, 6, 1, "", "upstream_chain_id"], [11, 6, 1, "", "upstream_network"], [11, 6, 1, "", "upstream_provider"], [11, 5, 1, "", "use_upstream_provider"]], "ape.api.networks.NetworkAPI": [[11, 6, 1, "", "auto_gas_multiplier"], [11, 6, 1, "", "base_fee_multiplier"], [11, 6, 1, "", "block_time"], [11, 6, 1, "", "chain_id"], [11, 6, 1, "", "config"], [11, 2, 1, "", "data_folder"], [11, 6, 1, "", "default_provider_name"], [11, 2, 1, "", "ecosystem"], [11, 6, 1, "", "explorer"], [11, 5, 1, "", "get_provider"], [11, 6, 1, "", "is_adhoc"], [11, 6, 1, "", "is_dev"], [11, 6, 1, "", "is_fork"], [11, 6, 1, "", "is_local"], [11, 2, 1, "", "name"], [11, 6, 1, "", "network_id"], [11, 6, 1, "", "providers"], [11, 5, 1, "", "publish_contract"], [11, 2, 1, "", "request_header"], [11, 6, 1, "", "required_confirmations"], [11, 5, 1, "", "set_default_provider"], [11, 6, 1, "", "transaction_acceptance_timeout"], [11, 5, 1, "", "use_default_provider"], [11, 5, 1, "", "use_provider"], [11, 5, 1, "", "verify_chain_id"]], "ape.api.networks.ProviderContextManager": [[11, 6, 1, "", "empty"]], "ape.api.networks.ProxyInfoAPI": [[11, 2, 1, "", "target"]], "ape.api.projects": [[11, 4, 1, "", "DependencyAPI"], [11, 4, 1, "", "ProjectAPI"]], "ape.api.projects.DependencyAPI": [[11, 6, 1, "", "cached_manifest"], [11, 5, 1, "", "compile"], [11, 2, 1, "", "config_override"], [11, 6, 1, "", "contracts"], [11, 2, 1, "", "contracts_folder"], [11, 2, 1, "", "exclude"], [11, 5, 1, "", "extract_manifest"], [11, 2, 1, "", "name"], [11, 6, 1, "", "uri"], [11, 2, 1, "", "version"], [11, 6, 1, "", "version_id"]], "ape.api.projects.ProjectAPI": [[11, 5, 1, "", "add_compiler_data"], [11, 6, 1, "", "cached_manifest"], [11, 2, 1, "", "contracts_folder"], [11, 5, 1, "", "create_manifest"], [11, 6, 1, "", "is_valid"], [11, 6, 1, "", "manifest_cachefile"], [11, 2, 1, "", "name"], [11, 2, 1, "", "path"], [11, 5, 1, "", "process_config_file"], [11, 5, 1, "", "replace_manifest"], [11, 5, 1, "", "update_manifest"], [11, 2, 1, "", "version"]], "ape.api.providers": [[11, 4, 1, "", "BlockAPI"], [11, 4, 1, "", "ProviderAPI"], [11, 4, 1, "", "SubprocessProvider"], [11, 4, 1, "", "TestProviderAPI"], [11, 4, 1, "", "UpstreamProvider"]], "ape.api.providers.ProviderAPI": [[11, 6, 1, "", "base_fee"], [11, 2, 1, "", "block_page_size"], [11, 6, 1, "", "chain_id"], [11, 2, 1, "", "concurrency"], [11, 6, 1, "", "config"], [11, 5, 1, "", "connect"], [11, 6, 1, "", "connection_id"], [11, 6, 1, "", "connection_str"], [11, 2, 1, "", "data_folder"], [11, 5, 1, "", "disconnect"], [11, 5, 1, "", "estimate_gas_cost"], [11, 6, 1, "", "gas_price"], [11, 5, 1, "", "get_balance"], [11, 5, 1, "", "get_block"], [11, 5, 1, "", "get_code"], [11, 5, 1, "", "get_contract_logs"], [11, 5, 1, "", "get_nonce"], [11, 5, 1, "", "get_receipt"], [11, 5, 1, "", "get_transactions_by_block"], [11, 5, 1, "", "get_virtual_machine_error"], [11, 6, 1, "", "http_uri"], [11, 6, 1, "", "is_connected"], [11, 6, 1, "", "max_gas"], [11, 2, 1, "", "name"], [11, 2, 1, "", "network"], [11, 6, 1, "", "network_choice"], [11, 5, 1, "", "prepare_transaction"], [11, 6, 1, "", "priority_fee"], [11, 2, 1, "", "provider_settings"], [11, 2, 1, "", "request_header"], [11, 5, 1, "", "send_call"], [11, 5, 1, "", "send_private_transaction"], [11, 5, 1, "", "send_transaction"], [11, 6, 1, "", "settings"], [11, 6, 1, "", "supports_tracing"], [11, 5, 1, "", "update_settings"], [11, 6, 1, "", "ws_uri"]], "ape.api.providers.SubprocessProvider": [[11, 5, 1, "", "build_command"], [11, 5, 1, "", "connect"], [11, 6, 1, "", "connection_id"], [11, 5, 1, "", "disconnect"], [11, 6, 1, "", "process_name"], [11, 5, 1, "", "start"], [11, 5, 1, "", "stop"]], "ape.api.providers.TestProviderAPI": [[11, 5, 1, "", "mine"], [11, 5, 1, "", "revert"], [11, 5, 1, "", "set_timestamp"], [11, 5, 1, "", "snapshot"]], "ape.api.query": [[11, 4, 1, "", "AccountTransactionQuery"], [11, 4, 1, "", "BlockQuery"], [11, 4, 1, "", "BlockTransactionQuery"], [11, 4, 1, "", "ContractCreationQuery"], [11, 4, 1, "", "ContractEventQuery"], [11, 4, 1, "", "ContractMethodQuery"], [11, 4, 1, "", "QueryAPI"]], "ape.api.query.QueryAPI": [[11, 5, 1, "", "estimate_query"], [11, 5, 1, "", "perform_query"], [11, 5, 1, "", "update_cache"]], "ape.api.transactions": [[11, 4, 1, "", "ReceiptAPI"], [11, 4, 1, "", "TransactionAPI"]], "ape.api.transactions.ReceiptAPI": [[11, 5, 1, "", "await_confirmations"], [11, 5, 1, "", "decode_logs"], [11, 6, 1, "", "events"], [11, 6, 1, "", "failed"], [11, 6, 1, "", "method_called"], [11, 5, 1, "", "raise_for_status"], [11, 6, 1, "", "ran_out_of_gas"], [11, 6, 1, "", "return_value"], [11, 6, 1, "", "total_fees_paid"], [11, 6, 1, "", "trace"], [11, 5, 1, "", "track_coverage"], [11, 5, 1, "", "track_gas"]], "ape.api.transactions.TransactionAPI": [[11, 6, 1, "", "receipt"], [11, 5, 1, "", "serialize_transaction"], [11, 6, 1, "", "total_transfer_value"], [11, 6, 1, "", "trace"], [11, 6, 1, "", "txn_hash"]], "ape.cli": [[12, 0, 0, "-", "arguments"], [12, 0, 0, "-", "choices"], [12, 0, 0, "-", "commands"], [12, 0, 0, "-", "options"], [12, 0, 0, "-", "paramtype"], [12, 0, 0, "-", "utils"]], "ape.cli.arguments": [[12, 1, 1, "", "contract_file_paths_argument"], [12, 1, 1, "", "existing_alias_argument"], [12, 1, 1, "", "non_existing_alias_argument"]], "ape.cli.choices": [[12, 4, 1, "", "AccountAliasPromptChoice"], [12, 4, 1, "", "Alias"], [12, 4, 1, "", "NetworkChoice"], [12, 4, 1, "", "OutputFormat"], [12, 4, 1, "", "PromptChoice"], [12, 1, 1, "", "get_user_selected_account"], [12, 1, 1, "", "output_format_choice"], [12, 1, 1, "", "select_account"]], "ape.cli.choices.AccountAliasPromptChoice": [[12, 5, 1, "", "convert"], [12, 5, 1, "", "print_choices"], [12, 5, 1, "", "select_account"]], "ape.cli.choices.Alias": [[12, 2, 1, "", "name"]], "ape.cli.choices.NetworkChoice": [[12, 5, 1, "", "convert"], [12, 5, 1, "", "get_metavar"]], "ape.cli.choices.OutputFormat": [[12, 2, 1, "", "TREE"], [12, 2, 1, "", "YAML"]], "ape.cli.choices.PromptChoice": [[12, 5, 1, "", "convert"], [12, 5, 1, "", "print_choices"]], "ape.cli.commands": [[12, 4, 1, "", "ConnectedProviderCommand"], [12, 4, 1, "", "NetworkBoundCommand"]], "ape.cli.commands.ConnectedProviderCommand": [[12, 5, 1, "", "invoke"], [12, 5, 1, "", "parse_args"]], "ape.cli.options": [[12, 4, 1, "", "ApeCliContextObject"], [12, 4, 1, "", "NetworkOption"], [12, 1, 1, "", "account_option"], [12, 1, 1, "", "ape_cli_context"], [12, 1, 1, "", "contract_option"], [12, 1, 1, "", "incompatible_with"], [12, 1, 1, "", "network_option"], [12, 1, 1, "", "output_format_option"], [12, 1, 1, "", "skip_confirmation_option"], [12, 1, 1, "", "verbosity_option"]], "ape.cli.options.ApeCliContextObject": [[12, 5, 1, "", "abort"]], "ape.cli.paramtype": [[12, 4, 1, "", "AllFilePaths"], [12, 4, 1, "", "Path"]], "ape.cli.paramtype.AllFilePaths": [[12, 5, 1, "", "convert"]], "ape.contracts.base": [[13, 4, 1, "", "ContractContainer"], [13, 4, 1, "", "ContractEvent"], [13, 4, 1, "", "ContractInstance"], [13, 4, 1, "", "ContractTypeWrapper"]], "ape.contracts.base.ContractContainer": [[13, 5, 1, "", "__call__"], [13, 5, 1, "", "__getattr__"], [13, 5, 1, "", "at"], [13, 5, 1, "", "deploy"], [13, 6, 1, "", "deployments"]], "ape.contracts.base.ContractEvent": [[13, 5, 1, "", "__call__"], [13, 5, 1, "", "__iter__"], [13, 5, 1, "", "from_receipt"], [13, 6, 1, "", "name"], [13, 5, 1, "", "poll_logs"], [13, 5, 1, "", "query"], [13, 5, 1, "", "range"]], "ape.contracts.base.ContractInstance": [[13, 5, 1, "", "__call__"], [13, 5, 1, "", "__dir__"], [13, 5, 1, "", "__getattr__"], [13, 6, 1, "", "address"], [13, 5, 1, "", "call_view_method"], [13, 5, 1, "", "get_error_by_signature"], [13, 5, 1, "", "get_event_by_signature"], [13, 5, 1, "", "invoke_transaction"], [13, 6, 1, "", "receipt"]], "ape.contracts.base.ContractTypeWrapper": [[13, 5, 1, "", "decode_input"], [13, 6, 1, "", "source_path"]], "ape.exceptions": [[14, 7, 1, "", "APINotImplementedError"], [14, 7, 1, "", "Abort"], [14, 7, 1, "", "AccountsError"], [14, 7, 1, "", "AliasAlreadyInUseError"], [14, 7, 1, "", "ApeAttributeError"], [14, 7, 1, "", "ApeException"], [14, 7, 1, "", "ApeIndexError"], [14, 7, 1, "", "ArgumentsLengthError"], [14, 7, 1, "", "BlockNotFoundError"], [14, 7, 1, "", "ChainError"], [14, 7, 1, "", "CompilerError"], [14, 7, 1, "", "ConfigError"], [14, 7, 1, "", "ContractDataError"], [14, 7, 1, "", "ContractLogicError"], [14, 7, 1, "", "ContractNotFoundError"], [14, 7, 1, "", "ConversionError"], [14, 7, 1, "", "CustomError"], [14, 7, 1, "", "DecodingError"], [14, 7, 1, "", "EcosystemNotFoundError"], [14, 7, 1, "", "MethodNonPayableError"], [14, 7, 1, "", "NetworkError"], [14, 7, 1, "", "NetworkMismatchError"], [14, 7, 1, "", "NetworkNotFoundError"], [14, 7, 1, "", "OutOfGasError"], [14, 7, 1, "", "ProjectError"], [14, 7, 1, "", "ProviderError"], [14, 7, 1, "", "ProviderNotConnectedError"], [14, 7, 1, "", "ProviderNotFoundError"], [14, 7, 1, "", "QueryEngineError"], [14, 7, 1, "", "RPCTimeoutError"], [14, 7, 1, "", "SignatureError"], [14, 7, 1, "", "SubprocessError"], [14, 7, 1, "", "SubprocessTimeoutError"], [14, 7, 1, "", "TransactionError"], [14, 7, 1, "", "TransactionNotFoundError"], [14, 7, 1, "", "UnknownSnapshotError"], [14, 7, 1, "", "UnknownVersionError"], [14, 7, 1, "", "VirtualMachineError"], [14, 1, 1, "", "handle_ape_exception"]], "ape.exceptions.Abort": [[14, 5, 1, "", "show"]], "ape.exceptions.ContractLogicError": [[14, 6, 1, "", "dev_message"], [14, 5, 1, "", "from_error"]], "ape.exceptions.CustomError": [[14, 6, 1, "", "name"]], "ape.managers": [[15, 0, 0, "-", "accounts"], [15, 0, 0, "-", "compilers"], [15, 0, 0, "-", "config"], [15, 0, 0, "-", "converters"], [15, 0, 0, "-", "networks"], [15, 0, 0, "-", "query"]], "ape.managers.accounts": [[15, 4, 1, "", "AccountManager"], [15, 4, 1, "", "TestAccountManager"]], "ape.managers.accounts.AccountManager": [[15, 5, 1, "", "__contains__"], [15, 5, 1, "", "__len__"], [15, 6, 1, "", "aliases"], [15, 6, 1, "", "containers"], [15, 5, 1, "", "get_accounts_by_type"], [15, 5, 1, "", "load"], [15, 6, 1, "", "test_accounts"]], "ape.managers.accounts.TestAccountManager": [[15, 5, 1, "", "__contains__"], [15, 5, 1, "", "__getitem__"], [15, 5, 1, "", "__iter__"], [15, 5, 1, "", "__len__"]], "ape.managers.chain": [[15, 4, 1, "", "AccountHistory"], [15, 4, 1, "", "BlockContainer"], [15, 4, 1, "", "ChainManager"], [15, 4, 1, "", "ContractCache"], [15, 4, 1, "", "TransactionHistory"]], "ape.managers.chain.AccountHistory": [[15, 5, 1, "", "__iter__"], [15, 5, 1, "", "__len__"], [15, 2, 1, "", "address"], [15, 5, 1, "", "append"], [15, 6, 1, "", "outgoing"], [15, 5, 1, "", "query"], [15, 5, 1, "", "revert_to_block"], [15, 2, 1, "", "sessional"]], "ape.managers.chain.BlockContainer": [[15, 5, 1, "", "__getitem__"], [15, 5, 1, "", "__iter__"], [15, 5, 1, "", "__len__"], [15, 6, 1, "", "head"], [15, 6, 1, "", "height"], [15, 5, 1, "", "poll_blocks"], [15, 5, 1, "", "query"], [15, 5, 1, "", "range"]], "ape.managers.chain.ChainManager": [[15, 6, 1, "", "base_fee"], [15, 6, 1, "", "blocks"], [15, 6, 1, "", "chain_id"], [15, 6, 1, "", "gas_price"], [15, 5, 1, "", "get_receipt"], [15, 6, 1, "", "history"], [15, 5, 1, "", "isolate"], [15, 5, 1, "", "mine"], [15, 6, 1, "", "pending_timestamp"], [15, 5, 1, "", "restore"], [15, 5, 1, "", "snapshot"]], "ape.managers.chain.ContractCache": [[15, 5, 1, "", "__delitem__"], [15, 5, 1, "", "__setitem__"], [15, 5, 1, "", "cache_blueprint"], [15, 5, 1, "", "cache_deployment"], [15, 5, 1, "", "cache_proxy_info"], [15, 5, 1, "", "clear_local_caches"], [15, 5, 1, "", "get"], [15, 5, 1, "", "get_blueprint"], [15, 5, 1, "", "get_container"], [15, 5, 1, "", "get_creation_receipt"], [15, 5, 1, "", "get_deployments"], [15, 5, 1, "", "get_multiple"], [15, 5, 1, "", "get_proxy_info"], [15, 5, 1, "", "instance_at"], [15, 5, 1, "", "instance_from_receipt"]], "ape.managers.chain.TransactionHistory": [[15, 5, 1, "", "append"], [15, 5, 1, "", "revert_to_block"]], "ape.managers.compilers": [[15, 4, 1, "", "CompilerManager"]], "ape.managers.compilers.CompilerManager": [[15, 5, 1, "", "can_trace_source"], [15, 5, 1, "", "compile"], [15, 5, 1, "", "compile_source"], [15, 5, 1, "", "enrich_error"], [15, 5, 1, "", "flatten_contract"], [15, 5, 1, "", "get_imports"], [15, 5, 1, "", "get_references"], [15, 6, 1, "", "registered_compilers"]], "ape.managers.config": [[15, 4, 1, "", "ConfigManager"], [15, 4, 1, "", "DeploymentConfig"], [15, 4, 1, "", "DeploymentConfigCollection"]], "ape.managers.config.ConfigManager": [[15, 2, 1, "", "DATA_FOLDER"], [15, 2, 1, "", "PROJECT_FOLDER"], [15, 2, 1, "", "contracts_folder"], [15, 2, 1, "", "default_ecosystem"], [15, 2, 1, "", "dependencies"], [15, 2, 1, "", "deployments"], [15, 5, 1, "", "get_config"], [15, 5, 1, "", "load"], [15, 2, 1, "", "meta"], [15, 2, 1, "", "name"], [15, 5, 1, "", "using_project"], [15, 2, 1, "", "version"]], "ape.managers.converters": [[15, 4, 1, "", "AccountIntConverter"], [15, 4, 1, "", "AddressAPIConverter"], [15, 4, 1, "", "BytesAddressConverter"], [15, 4, 1, "", "ConversionManager"], [15, 4, 1, "", "HexAddressConverter"], [15, 4, 1, "", "HexConverter"], [15, 4, 1, "", "HexIntConverter"], [15, 4, 1, "", "IntAddressConverter"], [15, 4, 1, "", "StringIntConverter"], [15, 4, 1, "", "TimestampConverter"]], "ape.managers.converters.AccountIntConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.AddressAPIConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.BytesAddressConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.ConversionManager": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_type"]], "ape.managers.converters.HexAddressConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.HexConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.HexIntConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.IntAddressConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.StringIntConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.TimestampConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.networks": [[15, 4, 1, "", "NetworkManager"]], "ape.managers.networks.NetworkManager": [[15, 6, 1, "", "active_provider"], [15, 5, 1, "", "create_custom_provider"], [15, 6, 1, "", "default_ecosystem"], [15, 6, 1, "", "ecosystem"], [15, 6, 1, "", "ecosystem_names"], [15, 6, 1, "", "ecosystems"], [15, 5, 1, "", "fork"], [15, 5, 1, "", "get_ecosystem"], [15, 5, 1, "", "get_network_choices"], [15, 5, 1, "", "get_provider_from_choice"], [15, 6, 1, "", "network"], [15, 6, 1, "", "network_data"], [15, 6, 1, "", "network_names"], [15, 6, 1, "", "networks_yaml"], [15, 5, 1, "", "parse_network_choice"], [15, 6, 1, "", "provider_names"], [15, 5, 1, "", "set_default_ecosystem"]], "ape.managers.project": [[15, 0, 0, "-", "dependency"], [15, 0, 0, "-", "manager"]], "ape.managers.project.dependency": [[15, 4, 1, "", "GithubDependency"], [15, 4, 1, "", "LocalDependency"], [15, 4, 1, "", "NpmDependency"]], "ape.managers.project.dependency.GithubDependency": [[15, 5, 1, "", "extract_manifest"], [15, 2, 1, "", "github"], [15, 2, 1, "", "ref"], [15, 6, 1, "", "uri"], [15, 6, 1, "", "version_id"]], "ape.managers.project.dependency.LocalDependency": [[15, 5, 1, "", "extract_manifest"], [15, 6, 1, "", "uri"], [15, 2, 1, "", "version"], [15, 6, 1, "", "version_id"]], "ape.managers.project.dependency.NpmDependency": [[15, 5, 1, "", "extract_manifest"], [15, 2, 1, "", "npm"], [15, 6, 1, "", "uri"], [15, 6, 1, "", "version_from_json"], [15, 6, 1, "", "version_from_local_json"], [15, 6, 1, "", "version_id"]], "ape.managers.project.manager": [[15, 4, 1, "", "ProjectManager"]], "ape.managers.project.manager.ProjectManager": [[15, 5, 1, "", "__getattr__"], [15, 5, 1, "", "__str__"], [15, 6, 1, "", "compiler_data"], [15, 6, 1, "", "contracts"], [15, 6, 1, "", "contracts_folder"], [15, 6, 1, "", "dependencies"], [15, 5, 1, "", "extensions_with_missing_compilers"], [15, 5, 1, "", "extract_manifest"], [15, 5, 1, "", "get_compiler_data"], [15, 5, 1, "", "get_contract"], [15, 5, 1, "", "get_project"], [15, 6, 1, "", "interfaces_folder"], [15, 5, 1, "", "load_contracts"], [15, 5, 1, "", "lookup_path"], [15, 6, 1, "", "meta"], [15, 2, 1, "", "path"], [15, 6, 1, "", "project_types"], [15, 6, 1, "", "scripts_folder"], [15, 6, 1, "", "source_paths"], [15, 6, 1, "", "sources"], [15, 6, 1, "", "sources_missing"], [15, 6, 1, "", "tests_folder"], [15, 5, 1, "", "track_deployment"], [15, 6, 1, "", "tracked_deployments"]], "ape.managers.project.types": [[15, 4, 1, "", "ApeProject"], [15, 4, 1, "", "BaseProject"], [15, 4, 1, "", "BrownieProject"]], "ape.managers.project.types.BaseProject": [[15, 5, 1, "", "create_manifest"], [15, 6, 1, "", "is_valid"], [15, 5, 1, "", "process_config_file"], [15, 6, 1, "", "source_paths"]], "ape.managers.project.types.BrownieProject": [[15, 6, 1, "", "is_valid"], [15, 5, 1, "", "process_config_file"]], "ape.managers.query": [[15, 4, 1, "", "DefaultQueryProvider"], [15, 4, 1, "", "QueryManager"]], "ape.managers.query.DefaultQueryProvider": [[15, 5, 1, "", "estimate_query"], [15, 5, 1, "", "perform_query"]], "ape.managers.query.QueryManager": [[15, 6, 1, "", "engines"], [15, 5, 1, "", "query"]], "ape.plugins": [[16, 0, 0, "-", "account"], [16, 0, 0, "-", "compiler"], [16, 0, 0, "-", "config"], [16, 0, 0, "-", "converter"], [16, 0, 0, "-", "network"], [16, 0, 0, "-", "pluggy_patch"], [16, 0, 0, "-", "project"], [16, 0, 0, "-", "query"], [16, 1, 1, "", "register"]], "ape.plugins.account": [[16, 4, 1, "", "AccountPlugin"]], "ape.plugins.account.AccountPlugin": [[16, 5, 1, "", "account_types"]], "ape.plugins.compiler": [[16, 4, 1, "", "CompilerPlugin"]], "ape.plugins.compiler.CompilerPlugin": [[16, 5, 1, "", "register_compiler"]], "ape.plugins.config": [[16, 4, 1, "", "Config"]], "ape.plugins.config.Config": [[16, 5, 1, "", "config_class"]], "ape.plugins.converter": [[16, 4, 1, "", "ConversionPlugin"]], "ape.plugins.converter.ConversionPlugin": [[16, 5, 1, "", "converters"]], "ape.plugins.network": [[16, 4, 1, "", "EcosystemPlugin"], [16, 4, 1, "", "ExplorerPlugin"], [16, 4, 1, "", "NetworkPlugin"], [16, 4, 1, "", "ProviderPlugin"]], "ape.plugins.network.EcosystemPlugin": [[16, 5, 1, "", "ecosystems"]], "ape.plugins.network.ExplorerPlugin": [[16, 5, 1, "", "explorers"]], "ape.plugins.network.NetworkPlugin": [[16, 5, 1, "", "networks"]], "ape.plugins.network.ProviderPlugin": [[16, 5, 1, "", "providers"]], "ape.plugins.pluggy_patch": [[16, 4, 1, "", "PluginType"], [16, 3, 1, "", "plugin_manager"]], "ape.plugins.project": [[16, 4, 1, "", "DependencyPlugin"], [16, 4, 1, "", "ProjectPlugin"]], "ape.plugins.project.DependencyPlugin": [[16, 5, 1, "", "dependencies"]], "ape.plugins.project.ProjectPlugin": [[16, 5, 1, "", "projects"]], "ape.plugins.query": [[16, 4, 1, "", "QueryPlugin"]], "ape.plugins.query.QueryPlugin": [[16, 5, 1, "", "query_engines"]], "ape.types": [[17, 4, 1, "", "BaseContractLog"], [17, 3, 1, "", "BlockID"], [17, 4, 1, "", "ContractLog"], [17, 4, 1, "", "MockContractLog"], [17, 0, 0, "-", "address"], [17, 0, 0, "-", "coverage"]], "ape.types.BaseContractLog": [[17, 2, 1, "", "contract_address"], [17, 2, 1, "", "event_arguments"], [17, 2, 1, "", "event_name"]], "ape.types.ContractLog": [[17, 2, 1, "", "block_hash"], [17, 2, 1, "", "block_number"], [17, 2, 1, "", "log_index"], [17, 6, 1, "", "timestamp"], [17, 2, 1, "", "transaction_hash"], [17, 2, 1, "", "transaction_index"]], "ape.types.address": [[17, 3, 1, "", "AddressType"], [17, 3, 1, "", "RawAddress"]], "ape.types.coverage": [[17, 4, 1, "", "ContractCoverage"], [17, 4, 1, "", "ContractSourceCoverage"], [17, 4, 1, "", "CoverageProject"], [17, 4, 1, "", "CoverageReport"], [17, 4, 1, "", "CoverageStatement"], [17, 4, 1, "", "FunctionCoverage"]], "ape.types.coverage.ContractCoverage": [[17, 6, 1, "", "function_hits"], [17, 6, 1, "", "function_rate"], [17, 2, 1, "", "functions"], [17, 6, 1, "", "line_rate"], [17, 6, 1, "", "lines_covered"], [17, 6, 1, "", "lines_valid"], [17, 6, 1, "", "miss_count"], [17, 5, 1, "", "model_dump"], [17, 2, 1, "", "name"], [17, 6, 1, "", "statements"]], "ape.types.coverage.ContractSourceCoverage": [[17, 2, 1, "", "contracts"], [17, 6, 1, "", "function_hits"], [17, 6, 1, "", "function_rate"], [17, 5, 1, "", "include"], [17, 6, 1, "", "line_rate"], [17, 6, 1, "", "lines_covered"], [17, 6, 1, "", "lines_valid"], [17, 6, 1, "", "miss_count"], [17, 5, 1, "", "model_dump"], [17, 2, 1, "", "source_id"], [17, 6, 1, "", "statements"], [17, 6, 1, "", "total_functions"]], "ape.types.coverage.CoverageProject": [[17, 6, 1, "", "function_hits"], [17, 6, 1, "", "function_rate"], [17, 6, 1, "", "line_rate"], [17, 6, 1, "", "lines_covered"], [17, 6, 1, "", "lines_valid"], [17, 6, 1, "", "miss_count"], [17, 5, 1, "", "model_dump"], [17, 2, 1, "", "name"], [17, 2, 1, "", "sources"], [17, 6, 1, "", "statements"], [17, 6, 1, "", "total_functions"]], "ape.types.coverage.CoverageReport": [[17, 6, 1, "", "function_hits"], [17, 6, 1, "", "function_rate"], [17, 5, 1, "", "get_html"], [17, 5, 1, "", "get_xml"], [17, 6, 1, "", "line_rate"], [17, 6, 1, "", "lines_covered"], [17, 6, 1, "", "lines_valid"], [17, 6, 1, "", "miss_count"], [17, 5, 1, "", "model_dump"], [17, 2, 1, "", "projects"], [17, 2, 1, "", "source_folders"], [17, 6, 1, "", "sources"], [17, 6, 1, "", "statements"], [17, 2, 1, "", "timestamp"], [17, 6, 1, "", "total_functions"]], "ape.types.coverage.CoverageStatement": [[17, 2, 1, "", "hit_count"], [17, 2, 1, "", "location"], [17, 2, 1, "", "pcs"], [17, 2, 1, "", "tag"]], "ape.types.coverage.FunctionCoverage": [[17, 2, 1, "", "full_name"], [17, 2, 1, "", "hit_count"], [17, 6, 1, "", "line_rate"], [17, 6, 1, "", "lines_covered"], [17, 6, 1, "", "lines_valid"], [17, 6, 1, "", "miss_count"], [17, 5, 1, "", "model_dump"], [17, 2, 1, "", "name"], [17, 5, 1, "", "profile_statement"], [17, 2, 1, "", "statements"]], "ape.types.signatures": [[17, 4, 1, "", "MessageSignature"], [17, 4, 1, "", "SignableMessage"], [17, 4, 1, "", "TransactionSignature"], [17, 5, 1, "", "recover_signer"]], "ape.types.signatures.SignableMessage": [[17, 2, 1, "", "body"], [17, 2, 1, "", "header"], [17, 2, 1, "", "version"]], "ape.utils": [[18, 4, 1, "", "BaseInterface"], [18, 4, 1, "", "BaseInterfaceModel"], [18, 4, 1, "", "ExtraAttributesMixin"], [18, 4, 1, "", "ExtraModelAttributes"], [18, 4, 1, "", "GeneratedDevAccount"], [18, 4, 1, "", "GithubClient"], [18, 4, 1, "", "JoinableQueue"], [18, 4, 1, "", "Struct"], [18, 4, 1, "", "StructParser"], [18, 4, 1, "", "TraceStyles"], [18, 1, 1, "", "add_padding_to_strings"], [18, 1, 1, "", "allow_disconnected"], [18, 1, 1, "", "expand_environment_variables"], [18, 1, 1, "", "extract_nested_value"], [18, 1, 1, "", "gas_estimation_error_message"], [18, 1, 1, "", "generate_dev_accounts"], [18, 1, 1, "", "get_all_files_in_directory"], [18, 1, 1, "", "get_current_timestamp_ms"], [18, 1, 1, "", "get_package_version"], [18, 1, 1, "", "get_relative_path"], [18, 4, 1, "", "injected_before_use"], [18, 1, 1, "", "is_array"], [18, 1, 1, "", "is_evm_precompile"], [18, 1, 1, "", "is_named_tuple"], [18, 1, 1, "", "is_struct"], [18, 1, 1, "", "is_zero_hex"], [18, 1, 1, "", "load_config"], [18, 1, 1, "", "pragma_str_to_specifier_set"], [18, 1, 1, "", "raises_not_implemented"], [18, 1, 1, "", "returns_array"], [18, 1, 1, "", "run_until_complete"], [18, 4, 1, "", "singledispatchmethod"], [18, 1, 1, "", "spawn"], [18, 1, 1, "", "stream_response"], [18, 4, 1, "", "use_temp_sys_path"]], "ape.utils.BaseInterfaceModel": [[18, 2, 1, "", "model_config"], [18, 2, 1, "", "model_fields"]], "ape.utils.ExtraModelAttributes": [[18, 2, 1, "", "additional_error_message"], [18, 2, 1, "", "attributes"], [18, 5, 1, "", "get"], [18, 2, 1, "", "include_getattr"], [18, 2, 1, "", "include_getitem"], [18, 2, 1, "", "model_config"], [18, 2, 1, "", "model_fields"], [18, 2, 1, "", "name"]], "ape.utils.GeneratedDevAccount": [[18, 2, 1, "", "address"], [18, 2, 1, "", "private_key"]], "ape.utils.GithubClient": [[18, 6, 1, "", "ape_org"], [18, 6, 1, "", "available_plugins"], [18, 5, 1, "", "clone_repo"], [18, 5, 1, "", "download_package"], [18, 5, 1, "", "get_release"], [18, 5, 1, "", "get_repo"]], "ape.utils.JoinableQueue": [[18, 5, 1, "", "join"]], "ape.utils.Struct": [[18, 5, 1, "", "items"]], "ape.utils.StructParser": [[18, 5, 1, "", "decode_output"], [18, 6, 1, "", "default_name"], [18, 5, 1, "", "encode_input"]], "ape.utils.TraceStyles": [[18, 2, 1, "", "CONTRACTS"], [18, 2, 1, "", "DELEGATE"], [18, 2, 1, "", "GAS_COST"], [18, 2, 1, "", "INPUTS"], [18, 2, 1, "", "METHODS"], [18, 2, 1, "", "OUTPUTS"], [18, 2, 1, "", "VALUE"]], "ape.utils.singledispatchmethod": [[18, 5, 1, "", "register"]], "accounts-change-password": [[0, 8, 1, "cmdoption-accounts-change-password-v", "--verbosity"], [0, 8, 1, "cmdoption-accounts-change-password-v", "-v"], [0, 8, 1, "cmdoption-accounts-change-password-arg-ALIAS", "ALIAS"]], "accounts-delete": [[0, 8, 1, "cmdoption-accounts-delete-v", "--verbosity"], [0, 8, 1, "cmdoption-accounts-delete-v", "-v"], [0, 8, 1, "cmdoption-accounts-delete-arg-ALIAS", "ALIAS"]], "accounts-export": [[0, 8, 1, "cmdoption-accounts-export-v", "--verbosity"], [0, 8, 1, "cmdoption-accounts-export-v", "-v"], [0, 8, 1, "cmdoption-accounts-export-arg-ALIAS", "ALIAS"]], "accounts-generate": [[0, 8, 1, "cmdoption-accounts-generate-hd-path", "--hd-path"], [0, 8, 1, "cmdoption-accounts-generate-hide-mnemonic", "--hide-mnemonic"], [0, 8, 1, "cmdoption-accounts-generate-v", "--verbosity"], [0, 8, 1, "cmdoption-accounts-generate-word-count", "--word-count"], [0, 8, 1, "cmdoption-accounts-generate-v", "-v"], [0, 8, 1, "cmdoption-accounts-generate-arg-ALIAS", "ALIAS"]], "accounts-import": [[0, 8, 1, "cmdoption-accounts-import-hd-path", "--hd-path"], [0, 8, 1, "cmdoption-accounts-import-use-mnemonic", "--use-mnemonic"], [0, 8, 1, "cmdoption-accounts-import-v", "--verbosity"], [0, 8, 1, "cmdoption-accounts-import-v", "-v"], [0, 8, 1, "cmdoption-accounts-import-arg-ALIAS", "ALIAS"]], "accounts-list": [[0, 8, 1, "cmdoption-accounts-list-all", "--all"], [0, 8, 1, "cmdoption-accounts-list-v", "--verbosity"], [0, 8, 1, "cmdoption-accounts-list-v", "-v"]], "compile": [[1, 8, 1, "cmdoption-compile-f", "--force"], [1, 8, 1, "cmdoption-compile-include-dependencies", "--include-dependencies"], [1, 8, 1, "cmdoption-compile-s", "--size"], [1, 8, 1, "cmdoption-compile-v", "--verbosity"], [1, 8, 1, "cmdoption-compile-f", "-f"], [1, 8, 1, "cmdoption-compile-s", "-s"], [1, 8, 1, "cmdoption-compile-v", "-v"], [1, 8, 1, "cmdoption-compile-arg-FILE_PATHS", "FILE_PATHS"]], "console": [[2, 8, 1, "cmdoption-console-v", "--verbosity"], [2, 8, 1, "cmdoption-console-v", "-v"]], "init": [[3, 8, 1, "cmdoption-init-github", "--github"], [3, 8, 1, "cmdoption-init-v", "--verbosity"], [3, 8, 1, "cmdoption-init-v", "-v"]], "networks-list": [[4, 8, 1, "cmdoption-networks-list-ecosystem", "--ecosystem"], [4, 8, 1, "cmdoption-networks-list-format", "--format"], [4, 8, 1, "cmdoption-networks-list-network", "--network"], [4, 8, 1, "cmdoption-networks-list-provider", "--provider"], [4, 8, 1, "cmdoption-networks-list-v", "--verbosity"], [4, 8, 1, "cmdoption-networks-list-v", "-v"]], "networks-run": [[4, 8, 1, "cmdoption-networks-run-network", "--network"], [4, 8, 1, "cmdoption-networks-run-v", "--verbosity"], [4, 8, 1, "cmdoption-networks-run-v", "-v"]], "plugins-install": [[5, 8, 1, "cmdoption-plugins-install-U", "--upgrade"], [5, 8, 1, "cmdoption-plugins-install-v", "--verbosity"], [5, 8, 1, "cmdoption-plugins-install-y", "--yes"], [5, 8, 1, "cmdoption-plugins-install-U", "-U"], [5, 8, 1, "cmdoption-plugins-install-v", "-v"], [5, 8, 1, "cmdoption-plugins-install-y", "-y"], [5, 8, 1, "cmdoption-plugins-install-arg-PLUGIN-NAMES", "PLUGIN-NAMES"]], "plugins-list": [[5, 8, 1, "cmdoption-plugins-list-a", "--all"], [5, 8, 1, "cmdoption-plugins-list-v", "--verbosity"], [5, 8, 1, "cmdoption-plugins-list-a", "-a"], [5, 8, 1, "cmdoption-plugins-list-v", "-v"]], "plugins-uninstall": [[5, 8, 1, "cmdoption-plugins-uninstall-v", "--verbosity"], [5, 8, 1, "cmdoption-plugins-uninstall-y", "--yes"], [5, 8, 1, "cmdoption-plugins-uninstall-v", "-v"], [5, 8, 1, "cmdoption-plugins-uninstall-y", "-y"], [5, 8, 1, "cmdoption-plugins-uninstall-arg-PLUGIN-NAMES", "PLUGIN-NAMES"]], "pm-compile": [[6, 8, 1, "cmdoption-pm-compile-f", "--force"], [6, 8, 1, "cmdoption-pm-compile-v", "--verbosity"], [6, 8, 1, "cmdoption-pm-compile-version", "--version"], [6, 8, 1, "cmdoption-pm-compile-f", "-f"], [6, 8, 1, "cmdoption-pm-compile-v", "-v"], [6, 8, 1, "cmdoption-pm-compile-arg-NAME", "NAME"]], "pm-install": [[6, 8, 1, "cmdoption-pm-install-f", "--force"], [6, 8, 1, "cmdoption-pm-install-name", "--name"], [6, 8, 1, "cmdoption-pm-install-ref", "--ref"], [6, 8, 1, "cmdoption-pm-install-v", "--verbosity"], [6, 8, 1, "cmdoption-pm-install-version", "--version"], [6, 8, 1, "cmdoption-pm-install-f", "-f"], [6, 8, 1, "cmdoption-pm-install-v", "-v"], [6, 8, 1, "cmdoption-pm-install-arg-PACKAGE", "PACKAGE"]], "pm-list": [[6, 8, 1, "cmdoption-pm-list-all", "--all"], [6, 8, 1, "cmdoption-pm-list-v", "--verbosity"], [6, 8, 1, "cmdoption-pm-list-v", "-v"]], "pm-remove": [[6, 8, 1, "cmdoption-pm-remove-v", "--verbosity"], [6, 8, 1, "cmdoption-pm-remove-y", "--yes"], [6, 8, 1, "cmdoption-pm-remove-v", "-v"], [6, 8, 1, "cmdoption-pm-remove-y", "-y"], [6, 8, 1, "cmdoption-pm-remove-arg-PACKAGE", "PACKAGE"], [6, 8, 1, "cmdoption-pm-remove-arg-VERSIONS", "VERSIONS"]], "run": [[7, 8, 1, "cmdoption-run-I", "--interactive"], [7, 8, 1, "cmdoption-run-I", "-I"]], "test": [[8, 8, 1, "cmdoption-test-v", "--verbosity"], [8, 8, 1, "cmdoption-test-w", "--watch"], [8, 8, 1, "cmdoption-test-watch-delay", "--watch-delay"], [8, 8, 1, "cmdoption-test-watch-folders", "--watch-folders"], [8, 8, 1, "cmdoption-test-v", "-v"], [8, 8, 1, "cmdoption-test-w", "-w"], [8, 8, 1, "cmdoption-test-arg-PYTEST_ARGS", "PYTEST_ARGS"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:attribute", "3": "py:data", "4": "py:class", "5": "py:method", "6": "py:property", "7": "py:exception", "8": "std:cmdoption"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "data", "Python data"], "4": ["py", "class", "Python class"], "5": ["py", "method", "Python method"], "6": ["py", "property", "Python property"], "7": ["py", "exception", "Python exception"], "8": ["std", "cmdoption", "program option"]}, "titleterms": {"account": [0, 11, 15, 16, 19, 20, 25, 34, 36], "chang": 0, "password": 0, "delet": 0, "export": 0, "gener": 0, "import": [0, 27], "list": [0, 4, 5, 6, 26], "compil": [1, 6, 11, 15, 16, 21, 26, 31, 33, 34], "consol": [2, 23, 34, 37], "init": [3, 23], "network": [4, 11, 15, 16, 19, 20, 22, 30, 34, 36], "run": [4, 7, 30], "plugin": [5, 16, 21, 22, 27, 28, 31, 34], "instal": [5, 6, 26, 28, 34], "uninstal": 5, "pm": 6, "remov": [6, 26], "test": [8, 19, 22, 31, 34, 36], "ap": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 22, 23, 31, 34, 36, 37], "doc": 9, "user": 9, "guid": 9, "cli": [9, 12, 20, 26, 27, 29, 30, 35], "refer": 9, "python": [9, 29], "api": [11, 27], "address": [11, 17, 24], "config": [11, 15, 16, 26, 30], "convert": [11, 15, 16], "explor": [11, 30, 33], "project": [11, 15, 16, 24, 27, 31, 34, 36], "provid": [11, 30, 36], "transact": [11, 24, 25, 30, 36, 37], "queri": [11, 15, 16, 25], "argument": 12, "choic": 12, "command": [12, 23, 36], "option": 12, "paramet": 12, "type": [12, 17, 26, 28, 30], "util": [12, 18], "contract": [13, 22, 24, 25, 26, 31, 32, 36], "except": 14, "manag": [15, 26, 30], "chain": [15, 36], "base": 16, "signatur": [17, 19], "coverag": [17, 36], "miscellan": 17, "us": [19, 25, 27], "outsid": 19, "creat": 19, "new": 19, "default": [19, 22, 24], "sender": 19, "support": [19, 36], "live": [19, 30], "keyfil": 19, "sign": 19, "messag": 19, "eip": 19, "712": 19, "verifi": 19, "autom": 19, "hardwar": 19, "wallet": 19, "context": [20, 30], "decor": 20, "tool": 20, "The": 21, "json": 21, "other": 21, "ignor": 21, "file": [21, 26], "depend": [21, 22, 26, 31], "set": 21, "sourc": 21, "code": 21, "configur": [22, 23, 30], "folder": [22, 26], "ecosystem": 22, "deploy": [22, 24, 33, 37], "geth": 22, "namespac": 23, "extra": 23, "function": [23, 36], "global": 23, "magic": 23, "bal": 23, "from": [24, 27, 37], "deploi": [24, 31], "script": [24, 31, 34, 35], "publish": [24, 33], "ani": 24, "abi": 24, "previou": 24, "interact": [24, 30], "call": 24, "fallback": 24, "direct": 24, "privat": 24, "decod": 24, "encod": 24, "input": 24, "multi": [24, 36], "data": 25, "get": 25, "block": [25, 30], "event": 25, "cach": 25, "github": 26, "local": [26, 30], "npm": 26, "packag": 26, "misc": 26, "custom": [26, 30, 36], "exclus": 26, "overrid": 26, "solid": 26, "remap": 26, "develop": [27, 31], "initi": 27, "implement": 27, "class": 27, "regist": 27, "log": [27, 29, 34, 37], "logger": 27, "modul": 27, "ape_cli_context": 27, "core": 28, "select": 30, "l2": 30, "connect": 30, "By": 30, "rpc": 30, "url": 30, "time": 30, "more": 30, "process": 30, "fork": 30, "ad": 31, "proxi": 32, "track": 33, "overview": 34, "document": 34, "prerequisit": 34, "consider": 34, "via": 34, "pipx": 34, "pip": 34, "docker": 34, "plai": 34, "modular": 34, "system": 34, "main": 35, "method": 35, "pytest": 36, "structur": 36, "pattern": 36, "fixtur": 36, "advanc": 36, "tip": 36, "failur": 36, "expected_messag": 36, "dev_messag": 36, "caveat": 36, "languag": 36, "inlin": 36, "non": 36, "reentrant": 36, "error": 36, "ga": [36, 37], "report": [36, 37], "iter": 36, "make": 37, "dynam": 37, "fee": 37, "static": 37, "accept": 37, "timeout": 37, "trace": 37, "estim": 37, "cost": 37}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"accounts": [[0, "accounts"]], "change-password": [[0, "accounts-change-password"]], "delete": [[0, "accounts-delete"]], "export": [[0, "accounts-export"]], "generate": [[0, "accounts-generate"]], "import": [[0, "accounts-import"]], "list": [[0, "accounts-list"], [4, "networks-list"], [5, "plugins-list"], [6, "pm-list"], [26, "list"]], "compile": [[1, "compile"], [6, "pm-compile"], [26, "compile"]], "console": [[2, "console"], [2, "console"]], "init": [[3, "init"]], "networks": [[4, "networks"]], "run": [[4, "networks-run"], [7, "run"], [7, "run"]], "plugins": [[5, "plugins"]], "install": [[5, "plugins-install"], [6, "pm-install"], [26, "install"]], "uninstall": [[5, "plugins-uninstall"]], "pm": [[6, "pm"]], "remove": [[6, "pm-remove"], [26, "remove"]], "test": [[8, "test"]], "Ape-Docs": [[9, "ape-docs"]], "User Guides": [[9, null]], "CLI Reference": [[9, null]], "Python Reference": [[9, null]], "ape": [[10, "module-ape"]], "ape.api": [[11, "ape-api"]], "Accounts": [[11, "module-ape.api.accounts"], [15, "module-ape.managers.accounts"], [16, "module-ape.plugins.account"], [19, "accounts"], [34, "accounts"]], "Address": [[11, "module-ape.api.address"], [17, "module-ape.types.address"]], "Compiler": [[11, "module-ape.api.compiler"], [16, "module-ape.plugins.compiler"]], "Config": [[11, "module-ape.api.config"], [15, "module-ape.managers.config"], [16, "module-ape.plugins.config"]], "Convert": [[11, "module-ape.api.convert"]], "Explorers": [[11, "module-ape.api.explorers"]], "Networks": [[11, "module-ape.api.networks"], [15, "module-ape.managers.networks"], [22, "networks"], [30, "networks"], [34, "networks"]], "Projects": [[11, "module-ape.api.projects"], [34, "projects"]], "Providers": [[11, "module-ape.api.providers"]], "Transactions": [[11, "transactions"], [24, "transactions"]], "Query": [[11, "module-ape.api.query"], [15, "module-ape.managers.query"], [16, "module-ape.plugins.query"]], "ape.cli": [[12, "ape-cli"]], "Arguments": [[12, "module-ape.cli.arguments"]], "Choices": [[12, "module-ape.cli.choices"]], "Commands": [[12, "module-ape.cli.commands"]], "Options": [[12, "module-ape.cli.options"]], "Parameter Types": [[12, "module-ape.cli.paramtype"]], "Utilities": [[12, "module-ape.cli.utils"]], "ape.contracts": [[13, "ape-contracts"]], "ape.exceptions": [[14, "module-ape.exceptions"]], "ape.managers": [[15, "ape-managers"]], "Compilers": [[15, "module-ape.managers.compilers"]], "Chain": [[15, "chain"]], "Converters": [[15, "module-ape.managers.converters"]], "Project": [[15, "module-ape.managers.project.manager"], [16, "module-ape.plugins.project"]], "ape.plugins": [[16, "module-ape.plugins"]], "Base": [[16, "module-ape.plugins.pluggy_patch"]], "Converter": [[16, "module-ape.plugins.converter"]], "Network": [[16, "module-ape.plugins.network"]], "ape.types": [[17, "ape-types"]], "Signatures": [[17, "signatures"]], "Coverage": [[17, "module-ape.types.coverage"]], "Miscellaneous": [[17, "module-ape.types"]], "ape.utils": [[18, "module-ape.utils"]], "Test Accounts": [[19, "test-accounts"]], "Use test accounts in tests": [[19, "use-test-accounts-in-tests"]], "Use test accounts outside of tests": [[19, "use-test-accounts-outside-of-tests"]], "Creating new test accounts": [[19, "creating-new-test-accounts"]], "Default Sender Support": [[19, "default-sender-support"], [19, "id1"]], "Live Network Accounts": [[19, "live-network-accounts"]], "Keyfile Accounts": [[19, "keyfile-accounts"]], "Signing Messages": [[19, "signing-messages"]], "EIP-712": [[19, "eip-712"]], "Verifying Signature": [[19, "verifying-signature"]], "Automation": [[19, "automation"]], "Hardware Wallets": [[19, "hardware-wallets"]], "CLIs": [[20, "clis"]], "Ape Context Decorator": [[20, "ape-context-decorator"]], "Network Tools": [[20, "network-tools"]], "Account Tools": [[20, "account-tools"]], "Compile": [[21, "compile"]], "The JSON Compiler": [[21, "the-json-compiler"]], "Other Compiler Plugins": [[21, "other-compiler-plugins"]], "Ignore Files": [[21, "ignore-files"]], "Dependencies": [[21, "dependencies"], [22, "dependencies"], [26, "dependencies"], [31, "dependencies"]], "Settings": [[21, "settings"]], "Compile Source Code": [[21, "compile-source-code"]], "Configure Ape": [[22, "configure-ape"]], "Contracts Folder": [[22, "contracts-folder"]], "Default Ecosystem": [[22, "default-ecosystem"]], "Deployments": [[22, "deployments"]], "Geth": [[22, "geth"]], "Plugins": [[22, "plugins"], [28, "plugins"], [34, "plugins"]], "Testing": [[22, "testing"], [31, "testing"], [34, "testing"], [36, "testing"]], "Ape Console": [[23, "ape-console"]], "Ape Namespace": [[23, "ape-namespace"]], "Namespace Extras": [[23, "namespace-extras"]], "Init Function": [[23, "init-function"]], "Global Extras": [[23, "global-extras"]], "Configure": [[23, "configure"]], "Magic Commands": [[23, "magic-commands"]], "%ape": [[23, "ape"]], "%bal": [[23, "bal"]], "Contracts": [[24, "contracts"]], "From Deploy": [[24, "from-deploy"]], "Deploy Scripts": [[24, "deploy-scripts"]], "Publishing": [[24, "publishing"], [33, "publishing"]], "From Project Contract Address": [[24, "from-project-contract-address"]], "From Any Address": [[24, "from-any-address"]], "From ABIs": [[24, "from-abis"]], "From Previous Deployment": [[24, "from-previous-deployment"]], "Contract Interaction": [[24, "contract-interaction"]], "Calls": [[24, "calls"]], "Calling Transactions and Transacting Calls": [[24, "calling-transactions-and-transacting-calls"]], "Default, Fallback, and Direct Calls": [[24, "default-fallback-and-direct-calls"]], "Private Transactions": [[24, "private-transactions"]], "Decoding and Encoding Inputs": [[24, "decoding-and-encoding-inputs"]], "Multi-Call and Multi-Transaction": [[24, "multi-call-and-multi-transaction"]], "Querying Data": [[25, "querying-data"]], "Getting Block Data": [[25, "getting-block-data"]], "Getting Account Transaction Data": [[25, "getting-account-transaction-data"]], "Getting Contract Event Data": [[25, "getting-contract-event-data"]], "Using the Cache": [[25, "using-the-cache"]], "Types of Dependencies": [[26, "types-of-dependencies"]], "GitHub": [[26, "github"]], "Local": [[26, "local"]], "NPM": [[26, "npm"]], "Package Management CLI": [[26, "package-management-cli"]], "Misc": [[26, "misc"]], "Custom Contracts Folder": [[26, "custom-contracts-folder"]], "File Exclusions": [[26, "file-exclusions"]], "Config Override": [[26, "config-override"]], "Solidity Remappings": [[26, "solidity-remappings"]], "Compiling Dependencies": [[26, "compiling-dependencies"]], "Developing Plugins": [[27, "developing-plugins"]], "Initialize a Plugin Project": [[27, "initialize-a-plugin-project"]], "Implementing API Classes": [[27, "implementing-api-classes"]], "Registering API Classes": [[27, "registering-api-classes"]], "CLI Plugins": [[27, "cli-plugins"]], "Using Plugins": [[27, "using-plugins"]], "Logging": [[27, "logging"], [29, "logging"], [34, "logging"]], "Import the logger from the logging module": [[27, "import-the-logger-from-the-logging-module"]], "Use the logger from the @ape_cli_context": [[27, "use-the-logger-from-the-ape-cli-context"]], "Core Plugins": [[28, "core-plugins"]], "Installing Plugins": [[28, "installing-plugins"]], "Plugin Types": [[28, "plugin-types"]], "CLI Logging": [[29, "cli-logging"]], "Python Logging": [[29, "python-logging"]], "Selecting a Network": [[30, "selecting-a-network"]], "L2 Networks": [[30, "l2-networks"]], "Custom Network Connection": [[30, "custom-network-connection"]], "Custom Networks By Config": [[30, "custom-networks-by-config"]], "RPC URL": [[30, "rpc-url"]], "Explorer URL": [[30, "explorer-url"]], "Block time, transaction type, and more config": [[30, "block-time-transaction-type-and-more-config"]], "Custom Networks by CLI": [[30, "custom-networks-by-cli"]], "Configuring Networks": [[30, "configuring-networks"]], "Local Network": [[30, "local-network"]], "Live Networks": [[30, "live-networks"]], "Network Config": [[30, "network-config"]], "Running a Network Process": [[30, "running-a-network-process"]], "Provider Interaction": [[30, "provider-interaction"]], "Provider Context Manager": [[30, "provider-context-manager"]], "Forked Context": [[30, "forked-context"]], "Developing Projects with Ape": [[31, "developing-projects-with-ape"]], "Adding Plugins": [[31, "adding-plugins"]], "Compiling Contracts": [[31, "compiling-contracts"]], "Deploying Contracts": [[31, "deploying-contracts"]], "Scripts": [[31, "scripts"], [34, "scripts"]], "Proxy Contracts": [[32, "proxy-contracts"]], "Compilation": [[33, "compilation"]], "Tracking Deployments": [[33, "tracking-deployments"]], "Publishing to Explorer": [[33, "publishing-to-explorer"]], "Overview": [[34, "overview"]], "Documentation": [[34, "documentation"]], "Prerequisite": [[34, "prerequisite"]], "Installation": [[34, "installation"]], "Considerations for Installing:": [[34, "considerations-for-installing"]], "via pipx or pip": [[34, "via-pipx-or-pip"]], "via docker": [[34, "via-docker"]], "Playing with Ape": [[34, "playing-with-ape"]], "Ape Modular Plugin System:": [[34, "ape-modular-plugin-system"]], "Compiling": [[34, "compiling"]], "Console": [[34, "console"]], "Scripting": [[35, "scripting"]], "CLI Scripts": [[35, "cli-scripts"]], "Main Method Scripts": [[35, "main-method-scripts"]], "Pytest": [[36, "pytest"]], "Test Structure": [[36, "test-structure"]], "Test Pattern": [[36, "test-pattern"]], "Fixtures": [[36, "fixtures"]], "accounts fixture": [[36, "accounts-fixture"]], "chain fixture": [[36, "chain-fixture"]], "networks fixture": [[36, "networks-fixture"]], "project fixture": [[36, "project-fixture"]], "Contract fixture": [[36, "contract-fixture"]], "Ape testing commands": [[36, "ape-testing-commands"]], "Test Providers": [[36, "test-providers"]], "Advanced Testing Tips": [[36, "advanced-testing-tips"]], "Testing Transaction Failures": [[36, "testing-transaction-failures"]], "expected_message": [[36, "expected-message"]], "dev_message": [[36, "dev-message"]], "Caveats": [[36, "caveats"]], "Language Support": [[36, "language-support"]], "Inlining": [[36, "inlining"]], "Non-reentrant Functions": [[36, "non-reentrant-functions"]], "Custom Errors": [[36, "custom-errors"]], "Multi-chain Testing": [[36, "multi-chain-testing"]], "Gas Reporting": [[36, "gas-reporting"]], "Iterative Testing": [[36, "iterative-testing"]], "Contract Coverage": [[36, "contract-coverage"]], "Making Transactions": [[37, "making-transactions"]], "Deployment": [[37, "deployment"]], "Deployment from Ape Console": [[37, "deployment-from-ape-console"]], "Dynamic-Fee Transactions": [[37, "dynamic-fee-transactions"]], "Static-Fee Transactions": [[37, "static-fee-transactions"]], "Transaction Logs": [[37, "transaction-logs"]], "Transaction Acceptance Timeout": [[37, "transaction-acceptance-timeout"]], "Traces": [[37, "traces"]], "Gas Reports": [[37, "gas-reports"]], "Estimate Gas Cost": [[37, "estimate-gas-cost"]]}, "indexentries": {"--all": [[0, "cmdoption-accounts-list-all"], [5, "cmdoption-plugins-list-a"], [6, "cmdoption-pm-list-all"]], "--hd-path": [[0, "cmdoption-accounts-generate-hd-path"], [0, "cmdoption-accounts-import-hd-path"]], "--hide-mnemonic": [[0, "cmdoption-accounts-generate-hide-mnemonic"]], "--use-mnemonic": [[0, "cmdoption-accounts-import-use-mnemonic"]], "--verbosity": [[0, "cmdoption-accounts-change-password-v"], [0, "cmdoption-accounts-delete-v"], [0, "cmdoption-accounts-export-v"], [0, "cmdoption-accounts-generate-v"], [0, "cmdoption-accounts-import-v"], [0, "cmdoption-accounts-list-v"], [1, "cmdoption-compile-v"], [2, "cmdoption-console-v"], [3, "cmdoption-init-v"], [4, "cmdoption-networks-list-v"], [4, "cmdoption-networks-run-v"], [5, "cmdoption-plugins-install-v"], [5, "cmdoption-plugins-list-v"], [5, "cmdoption-plugins-uninstall-v"], [6, "cmdoption-pm-compile-v"], [6, "cmdoption-pm-install-v"], [6, "cmdoption-pm-list-v"], [6, "cmdoption-pm-remove-v"], [8, "cmdoption-test-v"]], "--word-count": [[0, "cmdoption-accounts-generate-word-count"]], "-v": [[0, "cmdoption-accounts-change-password-v"], [0, "cmdoption-accounts-delete-v"], [0, "cmdoption-accounts-export-v"], [0, "cmdoption-accounts-generate-v"], [0, "cmdoption-accounts-import-v"], [0, "cmdoption-accounts-list-v"], [1, "cmdoption-compile-v"], [2, "cmdoption-console-v"], [3, "cmdoption-init-v"], [4, "cmdoption-networks-list-v"], [4, "cmdoption-networks-run-v"], [5, "cmdoption-plugins-install-v"], [5, "cmdoption-plugins-list-v"], [5, "cmdoption-plugins-uninstall-v"], [6, "cmdoption-pm-compile-v"], [6, "cmdoption-pm-install-v"], [6, "cmdoption-pm-list-v"], [6, "cmdoption-pm-remove-v"], [8, "cmdoption-test-v"]], "alias": [[0, "cmdoption-accounts-change-password-arg-ALIAS"], [0, "cmdoption-accounts-delete-arg-ALIAS"], [0, "cmdoption-accounts-export-arg-ALIAS"], [0, "cmdoption-accounts-generate-arg-ALIAS"], [0, "cmdoption-accounts-import-arg-ALIAS"]], "accounts-change-password command line option": [[0, "cmdoption-accounts-change-password-arg-ALIAS"], [0, "cmdoption-accounts-change-password-v"]], "accounts-delete command line option": [[0, "cmdoption-accounts-delete-arg-ALIAS"], [0, "cmdoption-accounts-delete-v"]], "accounts-export command line option": [[0, "cmdoption-accounts-export-arg-ALIAS"], [0, "cmdoption-accounts-export-v"]], "accounts-generate command line option": [[0, "cmdoption-accounts-generate-arg-ALIAS"], [0, "cmdoption-accounts-generate-hd-path"], [0, "cmdoption-accounts-generate-hide-mnemonic"], [0, "cmdoption-accounts-generate-v"], [0, "cmdoption-accounts-generate-word-count"]], "accounts-import command line option": [[0, "cmdoption-accounts-import-arg-ALIAS"], [0, "cmdoption-accounts-import-hd-path"], [0, "cmdoption-accounts-import-use-mnemonic"], [0, "cmdoption-accounts-import-v"]], "accounts-list command line option": [[0, "cmdoption-accounts-list-all"], [0, "cmdoption-accounts-list-v"]], "--force": [[1, "cmdoption-compile-f"], [6, "cmdoption-pm-compile-f"], [6, "cmdoption-pm-install-f"]], "--include-dependencies": [[1, "cmdoption-compile-include-dependencies"]], "--size": [[1, "cmdoption-compile-s"]], "-f": [[1, "cmdoption-compile-f"], [6, "cmdoption-pm-compile-f"], [6, "cmdoption-pm-install-f"]], "-s": [[1, "cmdoption-compile-s"]], "file_paths": [[1, "cmdoption-compile-arg-FILE_PATHS"]], "compile command line option": [[1, "cmdoption-compile-arg-FILE_PATHS"], [1, "cmdoption-compile-f"], [1, "cmdoption-compile-include-dependencies"], [1, "cmdoption-compile-s"], [1, "cmdoption-compile-v"]], "console command line option": [[2, "cmdoption-console-v"]], "--github": [[3, "cmdoption-init-github"]], "init command line option": [[3, "cmdoption-init-github"], [3, "cmdoption-init-v"]], "--ecosystem": [[4, "cmdoption-networks-list-ecosystem"]], "--format": [[4, "cmdoption-networks-list-format"]], "--network": [[4, "cmdoption-networks-list-network"], [4, "cmdoption-networks-run-network"]], "--provider": [[4, "cmdoption-networks-list-provider"]], "networks-list command line option": [[4, "cmdoption-networks-list-ecosystem"], [4, "cmdoption-networks-list-format"], [4, "cmdoption-networks-list-network"], [4, "cmdoption-networks-list-provider"], [4, "cmdoption-networks-list-v"]], "networks-run command line option": [[4, "cmdoption-networks-run-network"], [4, "cmdoption-networks-run-v"]], "--upgrade": [[5, "cmdoption-plugins-install-U"]], "--yes": [[5, "cmdoption-plugins-install-y"], [5, "cmdoption-plugins-uninstall-y"], [6, "cmdoption-pm-remove-y"]], "-u": [[5, "cmdoption-plugins-install-U"]], "-a": [[5, "cmdoption-plugins-list-a"]], "-y": [[5, "cmdoption-plugins-install-y"], [5, "cmdoption-plugins-uninstall-y"], [6, "cmdoption-pm-remove-y"]], "plugin-names": [[5, "cmdoption-plugins-install-arg-PLUGIN-NAMES"], [5, "cmdoption-plugins-uninstall-arg-PLUGIN-NAMES"]], "plugins-install command line option": [[5, "cmdoption-plugins-install-U"], [5, "cmdoption-plugins-install-arg-PLUGIN-NAMES"], [5, "cmdoption-plugins-install-v"], [5, "cmdoption-plugins-install-y"]], "plugins-list command line option": [[5, "cmdoption-plugins-list-a"], [5, "cmdoption-plugins-list-v"]], "plugins-uninstall command line option": [[5, "cmdoption-plugins-uninstall-arg-PLUGIN-NAMES"], [5, "cmdoption-plugins-uninstall-v"], [5, "cmdoption-plugins-uninstall-y"]], "--name": [[6, "cmdoption-pm-install-name"]], "--ref": [[6, "cmdoption-pm-install-ref"]], "--version": [[6, "cmdoption-pm-compile-version"], [6, "cmdoption-pm-install-version"]], "name": [[6, "cmdoption-pm-compile-arg-NAME"]], "package": [[6, "cmdoption-pm-install-arg-PACKAGE"], [6, "cmdoption-pm-remove-arg-PACKAGE"]], "versions": [[6, "cmdoption-pm-remove-arg-VERSIONS"]], "pm-compile command line option": [[6, "cmdoption-pm-compile-arg-NAME"], [6, "cmdoption-pm-compile-f"], [6, "cmdoption-pm-compile-v"], [6, "cmdoption-pm-compile-version"]], "pm-install command line option": [[6, "cmdoption-pm-install-arg-PACKAGE"], [6, "cmdoption-pm-install-f"], [6, "cmdoption-pm-install-name"], [6, "cmdoption-pm-install-ref"], [6, "cmdoption-pm-install-v"], [6, "cmdoption-pm-install-version"]], "pm-list command line option": [[6, "cmdoption-pm-list-all"], [6, "cmdoption-pm-list-v"]], "pm-remove command line option": [[6, "cmdoption-pm-remove-arg-PACKAGE"], [6, "cmdoption-pm-remove-arg-VERSIONS"], [6, "cmdoption-pm-remove-v"], [6, "cmdoption-pm-remove-y"]], "--interactive": [[7, "cmdoption-run-I"]], "-i": [[7, "cmdoption-run-I"]], "run command line option": [[7, "cmdoption-run-I"]], "--watch": [[8, "cmdoption-test-w"]], "--watch-delay": [[8, "cmdoption-test-watch-delay"]], "--watch-folders": [[8, "cmdoption-test-watch-folders"]], "-w": [[8, "cmdoption-test-w"]], "pytest_args": [[8, "cmdoption-test-arg-PYTEST_ARGS"]], "test command line option": [[8, "cmdoption-test-arg-PYTEST_ARGS"], [8, "cmdoption-test-v"], [8, "cmdoption-test-w"], [8, "cmdoption-test-watch-delay"], [8, "cmdoption-test-watch-folders"]], "contract() (in module ape)": [[10, "ape.Contract"]], "project (in module ape)": [[10, "ape.Project"], [10, "ape.project"]], "accounts (in module ape)": [[10, "ape.accounts"]], "ape": [[10, "module-ape"]], "chain (in module ape)": [[10, "ape.chain"]], "compilers (in module ape)": [[10, "ape.compilers"]], "config (in module ape)": [[10, "ape.config"]], "convert() (in module ape)": [[10, "ape.convert"]], "module": [[10, "module-ape"], [11, "module-ape.api.accounts"], [11, "module-ape.api.address"], [11, "module-ape.api.compiler"], [11, "module-ape.api.config"], [11, "module-ape.api.convert"], [11, "module-ape.api.explorers"], [11, "module-ape.api.networks"], [11, "module-ape.api.projects"], [11, "module-ape.api.providers"], [11, "module-ape.api.query"], [12, "module-ape.cli.arguments"], [12, "module-ape.cli.choices"], [12, "module-ape.cli.commands"], [12, "module-ape.cli.options"], [12, "module-ape.cli.paramtype"], [12, "module-ape.cli.utils"], [14, "module-ape.exceptions"], [15, "module-ape.managers.accounts"], [15, "module-ape.managers.compilers"], [15, "module-ape.managers.config"], [15, "module-ape.managers.converters"], [15, "module-ape.managers.networks"], [15, "module-ape.managers.project.dependency"], [15, "module-ape.managers.project.manager"], [15, "module-ape.managers.query"], [16, "module-ape.plugins"], [16, "module-ape.plugins.account"], [16, "module-ape.plugins.compiler"], [16, "module-ape.plugins.config"], [16, "module-ape.plugins.converter"], [16, "module-ape.plugins.network"], [16, "module-ape.plugins.pluggy_patch"], [16, "module-ape.plugins.project"], [16, "module-ape.plugins.query"], [17, "module-ape.types"], [17, "module-ape.types.address"], [17, "module-ape.types.coverage"], [18, "module-ape.utils"]], "networks (in module ape)": [[10, "ape.networks"]], "reverts (in module ape)": [[10, "ape.reverts"]], "accountapi (class in ape.api.accounts)": [[11, "ape.api.accounts.AccountAPI"]], "accountcontainerapi (class in ape.api.accounts)": [[11, "ape.api.accounts.AccountContainerAPI"]], "accounttransactionquery (class in ape.api.query)": [[11, "ape.api.query.AccountTransactionQuery"]], "address (class in ape.api.address)": [[11, "ape.api.address.Address"]], "baseaddress (class in ape.api.address)": [[11, "ape.api.address.BaseAddress"]], "blockapi (class in ape.api.providers)": [[11, "ape.api.providers.BlockAPI"]], "blockquery (class in ape.api.query)": [[11, "ape.api.query.BlockQuery"]], "blocktransactionquery (class in ape.api.query)": [[11, "ape.api.query.BlockTransactionQuery"]], "compilerapi (class in ape.api.compiler)": [[11, "ape.api.compiler.CompilerAPI"]], "configenum (class in ape.api.config)": [[11, "ape.api.config.ConfigEnum"]], "contractcreationquery (class in ape.api.query)": [[11, "ape.api.query.ContractCreationQuery"]], "contracteventquery (class in ape.api.query)": [[11, "ape.api.query.ContractEventQuery"]], "contractmethodquery (class in ape.api.query)": [[11, "ape.api.query.ContractMethodQuery"]], "converterapi (class in ape.api.convert)": [[11, "ape.api.convert.ConverterAPI"]], "dependencyapi (class in ape.api.projects)": [[11, "ape.api.projects.DependencyAPI"]], "ecosystemapi (class in ape.api.networks)": [[11, "ape.api.networks.EcosystemAPI"]], "explorerapi (class in ape.api.explorers)": [[11, "ape.api.explorers.ExplorerAPI"]], "forkednetworkapi (class in ape.api.networks)": [[11, "ape.api.networks.ForkedNetworkAPI"]], "genericconfig (class in ape.api.config)": [[11, "ape.api.config.GenericConfig"]], "impersonatedaccount (class in ape.api.accounts)": [[11, "ape.api.accounts.ImpersonatedAccount"]], "networkapi (class in ape.api.networks)": [[11, "ape.api.networks.NetworkAPI"]], "pluginconfig (class in ape.api.config)": [[11, "ape.api.config.PluginConfig"]], "projectapi (class in ape.api.projects)": [[11, "ape.api.projects.ProjectAPI"]], "providerapi (class in ape.api.providers)": [[11, "ape.api.providers.ProviderAPI"]], "providercontextmanager (class in ape.api.networks)": [[11, "ape.api.networks.ProviderContextManager"]], "proxyinfoapi (class in ape.api.networks)": [[11, "ape.api.networks.ProxyInfoAPI"]], "queryapi (class in ape.api.query)": [[11, "ape.api.query.QueryAPI"]], "receiptapi (class in ape.api.transactions)": [[11, "ape.api.transactions.ReceiptAPI"]], "subprocessprovider (class in ape.api.providers)": [[11, "ape.api.providers.SubprocessProvider"]], "testaccountapi (class in ape.api.accounts)": [[11, "ape.api.accounts.TestAccountAPI"]], "testaccountcontainerapi (class in ape.api.accounts)": [[11, "ape.api.accounts.TestAccountContainerAPI"]], "testproviderapi (class in ape.api.providers)": [[11, "ape.api.providers.TestProviderAPI"]], "transactionapi (class in ape.api.transactions)": [[11, "ape.api.transactions.TransactionAPI"]], "upstreamprovider (class in ape.api.providers)": [[11, "ape.api.providers.UpstreamProvider"]], "__ape_extra_attributes__() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.__ape_extra_attributes__"]], "__contains__() (ape.api.accounts.accountcontainerapi method)": [[11, "ape.api.accounts.AccountContainerAPI.__contains__"]], "__delitem__() (ape.api.accounts.accountcontainerapi method)": [[11, "ape.api.accounts.AccountContainerAPI.__delitem__"]], "__dir__() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.__dir__"]], "__getitem__() (ape.api.accounts.accountcontainerapi method)": [[11, "ape.api.accounts.AccountContainerAPI.__getitem__"]], "__len__() (ape.api.accounts.accountcontainerapi method)": [[11, "ape.api.accounts.AccountContainerAPI.__len__"]], "accounts (ape.api.accounts.accountcontainerapi property)": [[11, "ape.api.accounts.AccountContainerAPI.accounts"]], "add_compiler_data() (ape.api.projects.projectapi method)": [[11, "ape.api.projects.ProjectAPI.add_compiler_data"]], "add_network() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.add_network"]], "address (ape.api.accounts.impersonatedaccount property)": [[11, "ape.api.accounts.ImpersonatedAccount.address"]], "address (ape.api.address.address property)": [[11, "ape.api.address.Address.address"]], "address (ape.api.address.baseaddress property)": [[11, "ape.api.address.BaseAddress.address"]], "alias (ape.api.accounts.accountapi property)": [[11, "ape.api.accounts.AccountAPI.alias"]], "aliases (ape.api.accounts.accountcontainerapi property)": [[11, "ape.api.accounts.AccountContainerAPI.aliases"]], "ape.api.accounts": [[11, "module-ape.api.accounts"]], "ape.api.address": [[11, "module-ape.api.address"]], "ape.api.compiler": [[11, "module-ape.api.compiler"]], "ape.api.config": [[11, "module-ape.api.config"]], "ape.api.convert": [[11, "module-ape.api.convert"]], "ape.api.explorers": [[11, "module-ape.api.explorers"]], "ape.api.networks": [[11, "module-ape.api.networks"]], "ape.api.projects": [[11, "module-ape.api.projects"]], "ape.api.providers": [[11, "module-ape.api.providers"]], "ape.api.query": [[11, "module-ape.api.query"]], "append() (ape.api.accounts.accountcontainerapi method)": [[11, "ape.api.accounts.AccountContainerAPI.append"]], "auto_gas_multiplier (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.auto_gas_multiplier"]], "await_confirmations() (ape.api.transactions.receiptapi method)": [[11, "ape.api.transactions.ReceiptAPI.await_confirmations"]], "balance (ape.api.address.baseaddress property)": [[11, "ape.api.address.BaseAddress.balance"]], "base_fee (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.base_fee"]], "base_fee_multiplier (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.base_fee_multiplier"]], "block_page_size (ape.api.providers.providerapi attribute)": [[11, "ape.api.providers.ProviderAPI.block_page_size"]], "block_time (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.block_time"]], "build_command() (ape.api.providers.subprocessprovider method)": [[11, "ape.api.providers.SubprocessProvider.build_command"]], "cached_manifest (ape.api.projects.dependencyapi property)": [[11, "ape.api.projects.DependencyAPI.cached_manifest"]], "cached_manifest (ape.api.projects.projectapi property)": [[11, "ape.api.projects.ProjectAPI.cached_manifest"]], "call() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.call"]], "call() (ape.api.accounts.impersonatedaccount method)": [[11, "ape.api.accounts.ImpersonatedAccount.call"]], "chain_id (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.chain_id"]], "chain_id (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.chain_id"]], "check_signature() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.check_signature"]], "code (ape.api.address.baseaddress property)": [[11, "ape.api.address.BaseAddress.code"]], "codesize (ape.api.address.baseaddress property)": [[11, "ape.api.address.BaseAddress.codesize"]], "compile() (ape.api.compiler.compilerapi method)": [[11, "ape.api.compiler.CompilerAPI.compile"]], "compile() (ape.api.projects.dependencyapi method)": [[11, "ape.api.projects.DependencyAPI.compile"]], "compiler_settings (ape.api.compiler.compilerapi attribute)": [[11, "ape.api.compiler.CompilerAPI.compiler_settings"]], "concurrency (ape.api.providers.providerapi attribute)": [[11, "ape.api.providers.ProviderAPI.concurrency"]], "config (ape.api.compiler.compilerapi property)": [[11, "ape.api.compiler.CompilerAPI.config"]], "config (ape.api.networks.ecosystemapi property)": [[11, "ape.api.networks.EcosystemAPI.config"]], "config (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.config"]], "config (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.config"]], "config_override (ape.api.projects.dependencyapi attribute)": [[11, "ape.api.projects.DependencyAPI.config_override"]], "connect() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.connect"]], "connect() (ape.api.providers.subprocessprovider method)": [[11, "ape.api.providers.SubprocessProvider.connect"]], "connection_id (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.connection_id"]], "connection_id (ape.api.providers.subprocessprovider property)": [[11, "ape.api.providers.SubprocessProvider.connection_id"]], "connection_str (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.connection_str"]], "contracts (ape.api.projects.dependencyapi property)": [[11, "ape.api.projects.DependencyAPI.contracts"]], "contracts_folder (ape.api.projects.dependencyapi attribute)": [[11, "ape.api.projects.DependencyAPI.contracts_folder"]], "contracts_folder (ape.api.projects.projectapi attribute)": [[11, "ape.api.projects.ProjectAPI.contracts_folder"]], "convert() (ape.api.convert.converterapi method)": [[11, "ape.api.convert.ConverterAPI.convert"]], "create_manifest() (ape.api.projects.projectapi method)": [[11, "ape.api.projects.ProjectAPI.create_manifest"]], "create_network_type() (in module ape.api.networks)": [[11, "ape.api.networks.create_network_type"]], "create_transaction() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.create_transaction"]], "custom_network (ape.api.networks.ecosystemapi property)": [[11, "ape.api.networks.EcosystemAPI.custom_network"]], "data_folder (ape.api.networks.ecosystemapi attribute)": [[11, "ape.api.networks.EcosystemAPI.data_folder"]], "data_folder (ape.api.networks.networkapi attribute)": [[11, "ape.api.networks.NetworkAPI.data_folder"]], "data_folder (ape.api.providers.providerapi attribute)": [[11, "ape.api.providers.ProviderAPI.data_folder"]], "declare() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.declare"]], "decode_address() (ape.api.networks.ecosystemapi class method)": [[11, "ape.api.networks.EcosystemAPI.decode_address"]], "decode_block() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.decode_block"]], "decode_calldata() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.decode_calldata"]], "decode_logs() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.decode_logs"]], "decode_logs() (ape.api.transactions.receiptapi method)": [[11, "ape.api.transactions.ReceiptAPI.decode_logs"]], "decode_receipt() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.decode_receipt"]], "decode_returndata() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.decode_returndata"]], "default_network_name (ape.api.networks.ecosystemapi property)": [[11, "ape.api.networks.EcosystemAPI.default_network_name"]], "default_provider_name (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.default_provider_name"]], "deploy() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.deploy"]], "disconnect() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.disconnect"]], "disconnect() (ape.api.providers.subprocessprovider method)": [[11, "ape.api.providers.SubprocessProvider.disconnect"]], "ecosystem (ape.api.networks.networkapi attribute)": [[11, "ape.api.networks.NetworkAPI.ecosystem"]], "empty (ape.api.networks.providercontextmanager property)": [[11, "ape.api.networks.ProviderContextManager.empty"]], "encode_address() (ape.api.networks.ecosystemapi class method)": [[11, "ape.api.networks.EcosystemAPI.encode_address"]], "encode_calldata() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.encode_calldata"]], "encode_deployment() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.encode_deployment"]], "encode_transaction() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.encode_transaction"]], "enrich_calltree() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.enrich_calltree"]], "enrich_error() (ape.api.compiler.compilerapi method)": [[11, "ape.api.compiler.CompilerAPI.enrich_error"]], "estimate_gas_cost() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.estimate_gas_cost"]], "estimate_query() (ape.api.query.queryapi method)": [[11, "ape.api.query.QueryAPI.estimate_query"]], "events (ape.api.transactions.receiptapi property)": [[11, "ape.api.transactions.ReceiptAPI.events"]], "exclude (ape.api.projects.dependencyapi attribute)": [[11, "ape.api.projects.DependencyAPI.exclude"]], "explorer (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.explorer"]], "extract_manifest() (ape.api.projects.dependencyapi method)": [[11, "ape.api.projects.DependencyAPI.extract_manifest"]], "failed (ape.api.transactions.receiptapi property)": [[11, "ape.api.transactions.ReceiptAPI.failed"]], "fee_token_decimals (ape.api.networks.ecosystemapi attribute)": [[11, "ape.api.networks.EcosystemAPI.fee_token_decimals"]], "fee_token_symbol (ape.api.networks.ecosystemapi attribute)": [[11, "ape.api.networks.EcosystemAPI.fee_token_symbol"]], "gas_price (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.gas_price"]], "generate_account() (ape.api.accounts.testaccountcontainerapi method)": [[11, "ape.api.accounts.TestAccountContainerAPI.generate_account"]], "get_address_url() (ape.api.explorers.explorerapi method)": [[11, "ape.api.explorers.ExplorerAPI.get_address_url"]], "get_balance() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_balance"]], "get_block() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_block"]], "get_code() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_code"]], "get_contract_logs() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_contract_logs"]], "get_contract_type() (ape.api.explorers.explorerapi method)": [[11, "ape.api.explorers.ExplorerAPI.get_contract_type"]], "get_method_selector() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.get_method_selector"]], "get_network() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.get_network"]], "get_network_data() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.get_network_data"]], "get_nonce() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_nonce"]], "get_provider() (ape.api.networks.networkapi method)": [[11, "ape.api.networks.NetworkAPI.get_provider"]], "get_proxy_info() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.get_proxy_info"]], "get_receipt() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_receipt"]], "get_transaction_url() (ape.api.explorers.explorerapi method)": [[11, "ape.api.explorers.ExplorerAPI.get_transaction_url"]], "get_transactions_by_block() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_transactions_by_block"]], "get_versions() (ape.api.compiler.compilerapi method)": [[11, "ape.api.compiler.CompilerAPI.get_versions"]], "get_virtual_machine_error() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_virtual_machine_error"]], "history (ape.api.address.baseaddress property)": [[11, "ape.api.address.BaseAddress.history"]], "http_uri (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.http_uri"]], "is_adhoc (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.is_adhoc"]], "is_connected (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.is_connected"]], "is_contract (ape.api.address.baseaddress property)": [[11, "ape.api.address.BaseAddress.is_contract"]], "is_convertible() (ape.api.convert.converterapi method)": [[11, "ape.api.convert.ConverterAPI.is_convertible"]], "is_dev (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.is_dev"]], "is_fork (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.is_fork"]], "is_local (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.is_local"]], "is_valid (ape.api.projects.projectapi property)": [[11, "ape.api.projects.ProjectAPI.is_valid"]], "manifest_cachefile (ape.api.projects.projectapi property)": [[11, "ape.api.projects.ProjectAPI.manifest_cachefile"]], "max_gas (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.max_gas"]], "method_called (ape.api.transactions.receiptapi property)": [[11, "ape.api.transactions.ReceiptAPI.method_called"]], "mine() (ape.api.providers.testproviderapi method)": [[11, "ape.api.providers.TestProviderAPI.mine"]], "name (ape.api.compiler.compilerapi property)": [[11, "ape.api.compiler.CompilerAPI.name"]], "name (ape.api.networks.ecosystemapi attribute)": [[11, "ape.api.networks.EcosystemAPI.name"]], "name (ape.api.networks.networkapi attribute)": [[11, "ape.api.networks.NetworkAPI.name"]], "name (ape.api.projects.dependencyapi attribute)": [[11, "ape.api.projects.DependencyAPI.name"]], "name (ape.api.projects.projectapi attribute)": [[11, "ape.api.projects.ProjectAPI.name"]], "name (ape.api.providers.providerapi attribute)": [[11, "ape.api.providers.ProviderAPI.name"]], "network (ape.api.providers.providerapi attribute)": [[11, "ape.api.providers.ProviderAPI.network"]], "network_choice (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.network_choice"]], "network_id (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.network_id"]], "networks (ape.api.networks.ecosystemapi property)": [[11, "ape.api.networks.EcosystemAPI.networks"]], "nonce (ape.api.address.baseaddress property)": [[11, "ape.api.address.BaseAddress.nonce"]], "path (ape.api.projects.projectapi attribute)": [[11, "ape.api.projects.ProjectAPI.path"]], "perform_query() (ape.api.query.queryapi method)": [[11, "ape.api.query.QueryAPI.perform_query"]], "prepare_transaction() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.prepare_transaction"]], "prepare_transaction() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.prepare_transaction"]], "priority_fee (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.priority_fee"]], "process_config_file() (ape.api.projects.projectapi method)": [[11, "ape.api.projects.ProjectAPI.process_config_file"]], "process_name (ape.api.providers.subprocessprovider property)": [[11, "ape.api.providers.SubprocessProvider.process_name"]], "provider_settings (ape.api.providers.providerapi attribute)": [[11, "ape.api.providers.ProviderAPI.provider_settings"]], "providers (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.providers"]], "publish_contract() (ape.api.explorers.explorerapi method)": [[11, "ape.api.explorers.ExplorerAPI.publish_contract"]], "publish_contract() (ape.api.networks.networkapi method)": [[11, "ape.api.networks.NetworkAPI.publish_contract"]], "raise_for_status() (ape.api.transactions.receiptapi method)": [[11, "ape.api.transactions.ReceiptAPI.raise_for_status"]], "ran_out_of_gas (ape.api.transactions.receiptapi property)": [[11, "ape.api.transactions.ReceiptAPI.ran_out_of_gas"]], "receipt (ape.api.transactions.transactionapi property)": [[11, "ape.api.transactions.TransactionAPI.receipt"]], "remove() (ape.api.accounts.accountcontainerapi method)": [[11, "ape.api.accounts.AccountContainerAPI.remove"]], "replace_manifest() (ape.api.projects.projectapi method)": [[11, "ape.api.projects.ProjectAPI.replace_manifest"]], "request_header (ape.api.networks.ecosystemapi attribute)": [[11, "ape.api.networks.EcosystemAPI.request_header"]], "request_header (ape.api.networks.networkapi attribute)": [[11, "ape.api.networks.NetworkAPI.request_header"]], "request_header (ape.api.providers.providerapi attribute)": [[11, "ape.api.providers.ProviderAPI.request_header"]], "required_confirmations (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.required_confirmations"]], "return_value (ape.api.transactions.receiptapi property)": [[11, "ape.api.transactions.ReceiptAPI.return_value"]], "revert() (ape.api.providers.testproviderapi method)": [[11, "ape.api.providers.TestProviderAPI.revert"]], "send_call() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.send_call"]], "send_private_transaction() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.send_private_transaction"]], "send_transaction() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.send_transaction"]], "serialize_transaction() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.serialize_transaction"]], "serialize_transaction() (ape.api.transactions.transactionapi method)": [[11, "ape.api.transactions.TransactionAPI.serialize_transaction"]], "set_default_network() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.set_default_network"]], "set_default_provider() (ape.api.networks.networkapi method)": [[11, "ape.api.networks.NetworkAPI.set_default_provider"]], "set_timestamp() (ape.api.providers.testproviderapi method)": [[11, "ape.api.providers.TestProviderAPI.set_timestamp"]], "settings (ape.api.compiler.compilerapi property)": [[11, "ape.api.compiler.CompilerAPI.settings"]], "settings (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.settings"]], "sign_message() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.sign_message"]], "sign_message() (ape.api.accounts.impersonatedaccount method)": [[11, "ape.api.accounts.ImpersonatedAccount.sign_message"]], "sign_transaction() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.sign_transaction"]], "sign_transaction() (ape.api.accounts.impersonatedaccount method)": [[11, "ape.api.accounts.ImpersonatedAccount.sign_transaction"]], "snapshot() (ape.api.providers.testproviderapi method)": [[11, "ape.api.providers.TestProviderAPI.snapshot"]], "start() (ape.api.providers.subprocessprovider method)": [[11, "ape.api.providers.SubprocessProvider.start"]], "stop() (ape.api.providers.subprocessprovider method)": [[11, "ape.api.providers.SubprocessProvider.stop"]], "supports_source_tracing (ape.api.compiler.compilerapi property)": [[11, "ape.api.compiler.CompilerAPI.supports_source_tracing"]], "supports_tracing (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.supports_tracing"]], "target (ape.api.networks.proxyinfoapi attribute)": [[11, "ape.api.networks.ProxyInfoAPI.target"]], "total_fees_paid (ape.api.transactions.receiptapi property)": [[11, "ape.api.transactions.ReceiptAPI.total_fees_paid"]], "total_transfer_value (ape.api.transactions.transactionapi property)": [[11, "ape.api.transactions.TransactionAPI.total_transfer_value"]], "trace (ape.api.transactions.receiptapi property)": [[11, "ape.api.transactions.ReceiptAPI.trace"]], "trace (ape.api.transactions.transactionapi property)": [[11, "ape.api.transactions.TransactionAPI.trace"]], "track_coverage() (ape.api.transactions.receiptapi method)": [[11, "ape.api.transactions.ReceiptAPI.track_coverage"]], "track_gas() (ape.api.transactions.receiptapi method)": [[11, "ape.api.transactions.ReceiptAPI.track_gas"]], "transaction_acceptance_timeout (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.transaction_acceptance_timeout"]], "transfer() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.transfer"]], "txn_hash (ape.api.transactions.transactionapi property)": [[11, "ape.api.transactions.TransactionAPI.txn_hash"]], "update_cache() (ape.api.query.queryapi method)": [[11, "ape.api.query.QueryAPI.update_cache"]], "update_manifest() (ape.api.projects.projectapi method)": [[11, "ape.api.projects.ProjectAPI.update_manifest"]], "update_settings() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.update_settings"]], "upstream_chain_id (ape.api.networks.forkednetworkapi property)": [[11, "ape.api.networks.ForkedNetworkAPI.upstream_chain_id"]], "upstream_network (ape.api.networks.forkednetworkapi property)": [[11, "ape.api.networks.ForkedNetworkAPI.upstream_network"]], "upstream_provider (ape.api.networks.forkednetworkapi property)": [[11, "ape.api.networks.ForkedNetworkAPI.upstream_provider"]], "uri (ape.api.projects.dependencyapi property)": [[11, "ape.api.projects.DependencyAPI.uri"]], "use_default_provider() (ape.api.networks.networkapi method)": [[11, "ape.api.networks.NetworkAPI.use_default_provider"]], "use_provider() (ape.api.networks.networkapi method)": [[11, "ape.api.networks.NetworkAPI.use_provider"]], "use_upstream_provider() (ape.api.networks.forkednetworkapi method)": [[11, "ape.api.networks.ForkedNetworkAPI.use_upstream_provider"]], "verify_chain_id() (ape.api.networks.networkapi method)": [[11, "ape.api.networks.NetworkAPI.verify_chain_id"]], "version (ape.api.projects.dependencyapi attribute)": [[11, "ape.api.projects.DependencyAPI.version"]], "version (ape.api.projects.projectapi attribute)": [[11, "ape.api.projects.ProjectAPI.version"]], "version_id (ape.api.projects.dependencyapi property)": [[11, "ape.api.projects.DependencyAPI.version_id"]], "ws_uri (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.ws_uri"]], "accountaliaspromptchoice (class in ape.cli.choices)": [[12, "ape.cli.choices.AccountAliasPromptChoice"]], "alias (class in ape.cli.choices)": [[12, "ape.cli.choices.Alias"]], "allfilepaths (class in ape.cli.paramtype)": [[12, "ape.cli.paramtype.AllFilePaths"]], "apeclicontextobject (class in ape.cli.options)": [[12, "ape.cli.options.ApeCliContextObject"]], "connectedprovidercommand (class in ape.cli.commands)": [[12, "ape.cli.commands.ConnectedProviderCommand"]], "networkboundcommand (class in ape.cli.commands)": [[12, "ape.cli.commands.NetworkBoundCommand"]], "networkchoice (class in ape.cli.choices)": [[12, "ape.cli.choices.NetworkChoice"]], "networkoption (class in ape.cli.options)": [[12, "ape.cli.options.NetworkOption"]], "outputformat (class in ape.cli.choices)": [[12, "ape.cli.choices.OutputFormat"]], "path (class in ape.cli.paramtype)": [[12, "ape.cli.paramtype.Path"]], "promptchoice (class in ape.cli.choices)": [[12, "ape.cli.choices.PromptChoice"]], "tree (ape.cli.choices.outputformat attribute)": [[12, "ape.cli.choices.OutputFormat.TREE"]], "yaml (ape.cli.choices.outputformat attribute)": [[12, "ape.cli.choices.OutputFormat.YAML"]], "abort() (ape.cli.options.apeclicontextobject static method)": [[12, "ape.cli.options.ApeCliContextObject.abort"]], "account_option() (in module ape.cli.options)": [[12, "ape.cli.options.account_option"]], "ape.cli.arguments": [[12, "module-ape.cli.arguments"]], "ape.cli.choices": [[12, "module-ape.cli.choices"]], "ape.cli.commands": [[12, "module-ape.cli.commands"]], "ape.cli.options": [[12, "module-ape.cli.options"]], "ape.cli.paramtype": [[12, "module-ape.cli.paramtype"]], "ape.cli.utils": [[12, "module-ape.cli.utils"]], "ape_cli_context() (in module ape.cli.options)": [[12, "ape.cli.options.ape_cli_context"]], "contract_file_paths_argument() (in module ape.cli.arguments)": [[12, "ape.cli.arguments.contract_file_paths_argument"]], "contract_option() (in module ape.cli.options)": [[12, "ape.cli.options.contract_option"]], "convert() (ape.cli.choices.accountaliaspromptchoice method)": [[12, "ape.cli.choices.AccountAliasPromptChoice.convert"]], "convert() (ape.cli.choices.networkchoice method)": [[12, "ape.cli.choices.NetworkChoice.convert"]], "convert() (ape.cli.choices.promptchoice method)": [[12, "ape.cli.choices.PromptChoice.convert"]], "convert() (ape.cli.paramtype.allfilepaths method)": [[12, "ape.cli.paramtype.AllFilePaths.convert"]], "existing_alias_argument() (in module ape.cli.arguments)": [[12, "ape.cli.arguments.existing_alias_argument"]], "get_metavar() (ape.cli.choices.networkchoice method)": [[12, "ape.cli.choices.NetworkChoice.get_metavar"]], "get_user_selected_account() (in module ape.cli.choices)": [[12, "ape.cli.choices.get_user_selected_account"]], "incompatible_with() (in module ape.cli.options)": [[12, "ape.cli.options.incompatible_with"]], "invoke() (ape.cli.commands.connectedprovidercommand method)": [[12, "ape.cli.commands.ConnectedProviderCommand.invoke"]], "name (ape.cli.choices.alias attribute)": [[12, "ape.cli.choices.Alias.name"]], "network_option() (in module ape.cli.options)": [[12, "ape.cli.options.network_option"]], "non_existing_alias_argument() (in module ape.cli.arguments)": [[12, "ape.cli.arguments.non_existing_alias_argument"]], "output_format_choice() (in module ape.cli.choices)": [[12, "ape.cli.choices.output_format_choice"]], "output_format_option() (in module ape.cli.options)": [[12, "ape.cli.options.output_format_option"]], "parse_args() (ape.cli.commands.connectedprovidercommand method)": [[12, "ape.cli.commands.ConnectedProviderCommand.parse_args"]], "print_choices() (ape.cli.choices.accountaliaspromptchoice method)": [[12, "ape.cli.choices.AccountAliasPromptChoice.print_choices"]], "print_choices() (ape.cli.choices.promptchoice method)": [[12, "ape.cli.choices.PromptChoice.print_choices"]], "select_account() (ape.cli.choices.accountaliaspromptchoice method)": [[12, "ape.cli.choices.AccountAliasPromptChoice.select_account"]], "select_account() (in module ape.cli.choices)": [[12, "ape.cli.choices.select_account"]], "skip_confirmation_option() (in module ape.cli.options)": [[12, "ape.cli.options.skip_confirmation_option"]], "verbosity_option() (in module ape.cli.options)": [[12, "ape.cli.options.verbosity_option"]], "contractcontainer (class in ape.contracts.base)": [[13, "ape.contracts.base.ContractContainer"]], "contractevent (class in ape.contracts.base)": [[13, "ape.contracts.base.ContractEvent"]], "contractinstance (class in ape.contracts.base)": [[13, "ape.contracts.base.ContractInstance"]], "contracttypewrapper (class in ape.contracts.base)": [[13, "ape.contracts.base.ContractTypeWrapper"]], "__call__() (ape.contracts.base.contractcontainer method)": [[13, "ape.contracts.base.ContractContainer.__call__"]], "__call__() (ape.contracts.base.contractevent method)": [[13, "ape.contracts.base.ContractEvent.__call__"]], "__call__() (ape.contracts.base.contractinstance method)": [[13, "ape.contracts.base.ContractInstance.__call__"]], "__dir__() (ape.contracts.base.contractinstance method)": [[13, "ape.contracts.base.ContractInstance.__dir__"]], "__getattr__() (ape.contracts.base.contractcontainer method)": [[13, "ape.contracts.base.ContractContainer.__getattr__"]], "__getattr__() (ape.contracts.base.contractinstance method)": [[13, "ape.contracts.base.ContractInstance.__getattr__"]], "__iter__() (ape.contracts.base.contractevent method)": [[13, "ape.contracts.base.ContractEvent.__iter__"]], "address (ape.contracts.base.contractinstance property)": [[13, "ape.contracts.base.ContractInstance.address"]], "at() (ape.contracts.base.contractcontainer method)": [[13, "ape.contracts.base.ContractContainer.at"]], "call_view_method() (ape.contracts.base.contractinstance method)": [[13, "ape.contracts.base.ContractInstance.call_view_method"]], "decode_input() (ape.contracts.base.contracttypewrapper method)": [[13, "ape.contracts.base.ContractTypeWrapper.decode_input"]], "deploy() (ape.contracts.base.contractcontainer method)": [[13, "ape.contracts.base.ContractContainer.deploy"]], "deployments (ape.contracts.base.contractcontainer property)": [[13, "ape.contracts.base.ContractContainer.deployments"]], "from_receipt() (ape.contracts.base.contractevent method)": [[13, "ape.contracts.base.ContractEvent.from_receipt"]], "get_error_by_signature() (ape.contracts.base.contractinstance method)": [[13, "ape.contracts.base.ContractInstance.get_error_by_signature"]], "get_event_by_signature() (ape.contracts.base.contractinstance method)": [[13, "ape.contracts.base.ContractInstance.get_event_by_signature"]], "invoke_transaction() (ape.contracts.base.contractinstance method)": [[13, "ape.contracts.base.ContractInstance.invoke_transaction"]], "name (ape.contracts.base.contractevent property)": [[13, "ape.contracts.base.ContractEvent.name"]], "poll_logs() (ape.contracts.base.contractevent method)": [[13, "ape.contracts.base.ContractEvent.poll_logs"]], "query() (ape.contracts.base.contractevent method)": [[13, "ape.contracts.base.ContractEvent.query"]], "range() (ape.contracts.base.contractevent method)": [[13, "ape.contracts.base.ContractEvent.range"]], "receipt (ape.contracts.base.contractinstance property)": [[13, "ape.contracts.base.ContractInstance.receipt"]], "source_path (ape.contracts.base.contracttypewrapper property)": [[13, "ape.contracts.base.ContractTypeWrapper.source_path"]], "apinotimplementederror": [[14, "ape.exceptions.APINotImplementedError"]], "abort": [[14, "ape.exceptions.Abort"]], "accountserror": [[14, "ape.exceptions.AccountsError"]], "aliasalreadyinuseerror": [[14, "ape.exceptions.AliasAlreadyInUseError"]], "apeattributeerror": [[14, "ape.exceptions.ApeAttributeError"]], "apeexception": [[14, "ape.exceptions.ApeException"]], "apeindexerror": [[14, "ape.exceptions.ApeIndexError"]], "argumentslengtherror": [[14, "ape.exceptions.ArgumentsLengthError"]], "blocknotfounderror": [[14, "ape.exceptions.BlockNotFoundError"]], "chainerror": [[14, "ape.exceptions.ChainError"]], "compilererror": [[14, "ape.exceptions.CompilerError"]], "configerror": [[14, "ape.exceptions.ConfigError"]], "contractdataerror": [[14, "ape.exceptions.ContractDataError"]], "contractlogicerror": [[14, "ape.exceptions.ContractLogicError"]], "contractnotfounderror": [[14, "ape.exceptions.ContractNotFoundError"]], "conversionerror": [[14, "ape.exceptions.ConversionError"]], "customerror": [[14, "ape.exceptions.CustomError"]], "decodingerror": [[14, "ape.exceptions.DecodingError"]], "ecosystemnotfounderror": [[14, "ape.exceptions.EcosystemNotFoundError"]], "methodnonpayableerror": [[14, "ape.exceptions.MethodNonPayableError"]], "networkerror": [[14, "ape.exceptions.NetworkError"]], "networkmismatcherror": [[14, "ape.exceptions.NetworkMismatchError"]], "networknotfounderror": [[14, "ape.exceptions.NetworkNotFoundError"]], "outofgaserror": [[14, "ape.exceptions.OutOfGasError"]], "projecterror": [[14, "ape.exceptions.ProjectError"]], "providererror": [[14, "ape.exceptions.ProviderError"]], "providernotconnectederror": [[14, "ape.exceptions.ProviderNotConnectedError"]], "providernotfounderror": [[14, "ape.exceptions.ProviderNotFoundError"]], "queryengineerror": [[14, "ape.exceptions.QueryEngineError"]], "rpctimeouterror": [[14, "ape.exceptions.RPCTimeoutError"]], "signatureerror": [[14, "ape.exceptions.SignatureError"]], "subprocesserror": [[14, "ape.exceptions.SubprocessError"]], "subprocesstimeouterror": [[14, "ape.exceptions.SubprocessTimeoutError"]], "transactionerror": [[14, "ape.exceptions.TransactionError"]], "transactionnotfounderror": [[14, "ape.exceptions.TransactionNotFoundError"]], "unknownsnapshoterror": [[14, "ape.exceptions.UnknownSnapshotError"]], "unknownversionerror": [[14, "ape.exceptions.UnknownVersionError"]], "virtualmachineerror": [[14, "ape.exceptions.VirtualMachineError"]], "ape.exceptions": [[14, "module-ape.exceptions"]], "dev_message (ape.exceptions.contractlogicerror property)": [[14, "ape.exceptions.ContractLogicError.dev_message"]], "from_error() (ape.exceptions.contractlogicerror class method)": [[14, "ape.exceptions.ContractLogicError.from_error"]], "handle_ape_exception() (in module ape.exceptions)": [[14, "ape.exceptions.handle_ape_exception"]], "name (ape.exceptions.customerror property)": [[14, "ape.exceptions.CustomError.name"]], "show() (ape.exceptions.abort method)": [[14, "ape.exceptions.Abort.show"]], "accounthistory (class in ape.managers.chain)": [[15, "ape.managers.chain.AccountHistory"]], "accountintconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.AccountIntConverter"]], "accountmanager (class in ape.managers.accounts)": [[15, "ape.managers.accounts.AccountManager"]], "addressapiconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.AddressAPIConverter"]], "apeproject (class in ape.managers.project.types)": [[15, "ape.managers.project.types.ApeProject"]], "baseproject (class in ape.managers.project.types)": [[15, "ape.managers.project.types.BaseProject"]], "blockcontainer (class in ape.managers.chain)": [[15, "ape.managers.chain.BlockContainer"]], "brownieproject (class in ape.managers.project.types)": [[15, "ape.managers.project.types.BrownieProject"]], "bytesaddressconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.BytesAddressConverter"]], "chainmanager (class in ape.managers.chain)": [[15, "ape.managers.chain.ChainManager"]], "compilermanager (class in ape.managers.compilers)": [[15, "ape.managers.compilers.CompilerManager"]], "configmanager (class in ape.managers.config)": [[15, "ape.managers.config.ConfigManager"]], "contractcache (class in ape.managers.chain)": [[15, "ape.managers.chain.ContractCache"]], "conversionmanager (class in ape.managers.converters)": [[15, "ape.managers.converters.ConversionManager"]], "data_folder (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.DATA_FOLDER"]], "defaultqueryprovider (class in ape.managers.query)": [[15, "ape.managers.query.DefaultQueryProvider"]], "deploymentconfig (class in ape.managers.config)": [[15, "ape.managers.config.DeploymentConfig"]], "deploymentconfigcollection (class in ape.managers.config)": [[15, "ape.managers.config.DeploymentConfigCollection"]], "githubdependency (class in ape.managers.project.dependency)": [[15, "ape.managers.project.dependency.GithubDependency"]], "hexaddressconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.HexAddressConverter"]], "hexconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.HexConverter"]], "hexintconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.HexIntConverter"]], "intaddressconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.IntAddressConverter"]], "localdependency (class in ape.managers.project.dependency)": [[15, "ape.managers.project.dependency.LocalDependency"]], "networkmanager (class in ape.managers.networks)": [[15, "ape.managers.networks.NetworkManager"]], "npmdependency (class in ape.managers.project.dependency)": [[15, "ape.managers.project.dependency.NpmDependency"]], "project_folder (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.PROJECT_FOLDER"]], "projectmanager (class in ape.managers.project.manager)": [[15, "ape.managers.project.manager.ProjectManager"]], "querymanager (class in ape.managers.query)": [[15, "ape.managers.query.QueryManager"]], "stringintconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.StringIntConverter"]], "testaccountmanager (class in ape.managers.accounts)": [[15, "ape.managers.accounts.TestAccountManager"]], "timestampconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.TimestampConverter"]], "transactionhistory (class in ape.managers.chain)": [[15, "ape.managers.chain.TransactionHistory"]], "__contains__() (ape.managers.accounts.accountmanager method)": [[15, "ape.managers.accounts.AccountManager.__contains__"]], "__contains__() (ape.managers.accounts.testaccountmanager method)": [[15, "ape.managers.accounts.TestAccountManager.__contains__"]], "__delitem__() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.__delitem__"]], "__getattr__() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.__getattr__"]], "__getitem__() (ape.managers.accounts.testaccountmanager method)": [[15, "ape.managers.accounts.TestAccountManager.__getitem__"]], "__getitem__() (ape.managers.chain.blockcontainer method)": [[15, "ape.managers.chain.BlockContainer.__getitem__"]], "__iter__() (ape.managers.accounts.testaccountmanager method)": [[15, "ape.managers.accounts.TestAccountManager.__iter__"]], "__iter__() (ape.managers.chain.accounthistory method)": [[15, "ape.managers.chain.AccountHistory.__iter__"]], "__iter__() (ape.managers.chain.blockcontainer method)": [[15, "ape.managers.chain.BlockContainer.__iter__"]], "__len__() (ape.managers.accounts.accountmanager method)": [[15, "ape.managers.accounts.AccountManager.__len__"]], "__len__() (ape.managers.accounts.testaccountmanager method)": [[15, "ape.managers.accounts.TestAccountManager.__len__"]], "__len__() (ape.managers.chain.accounthistory method)": [[15, "ape.managers.chain.AccountHistory.__len__"]], "__len__() (ape.managers.chain.blockcontainer method)": [[15, "ape.managers.chain.BlockContainer.__len__"]], "__setitem__() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.__setitem__"]], "__str__() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.__str__"]], "active_provider (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.active_provider"]], "address (ape.managers.chain.accounthistory attribute)": [[15, "ape.managers.chain.AccountHistory.address"]], "aliases (ape.managers.accounts.accountmanager property)": [[15, "ape.managers.accounts.AccountManager.aliases"]], "ape.managers.accounts": [[15, "module-ape.managers.accounts"]], "ape.managers.compilers": [[15, "module-ape.managers.compilers"]], "ape.managers.config": [[15, "module-ape.managers.config"]], "ape.managers.converters": [[15, "module-ape.managers.converters"]], "ape.managers.networks": [[15, "module-ape.managers.networks"]], "ape.managers.project.dependency": [[15, "module-ape.managers.project.dependency"]], "ape.managers.project.manager": [[15, "module-ape.managers.project.manager"]], "ape.managers.query": [[15, "module-ape.managers.query"]], "append() (ape.managers.chain.accounthistory method)": [[15, "ape.managers.chain.AccountHistory.append"]], "append() (ape.managers.chain.transactionhistory method)": [[15, "ape.managers.chain.TransactionHistory.append"]], "base_fee (ape.managers.chain.chainmanager property)": [[15, "ape.managers.chain.ChainManager.base_fee"]], "blocks (ape.managers.chain.chainmanager property)": [[15, "ape.managers.chain.ChainManager.blocks"]], "cache_blueprint() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.cache_blueprint"]], "cache_deployment() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.cache_deployment"]], "cache_proxy_info() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.cache_proxy_info"]], "can_trace_source() (ape.managers.compilers.compilermanager method)": [[15, "ape.managers.compilers.CompilerManager.can_trace_source"]], "chain_id (ape.managers.chain.chainmanager property)": [[15, "ape.managers.chain.ChainManager.chain_id"]], "clear_local_caches() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.clear_local_caches"]], "compile() (ape.managers.compilers.compilermanager method)": [[15, "ape.managers.compilers.CompilerManager.compile"]], "compile_source() (ape.managers.compilers.compilermanager method)": [[15, "ape.managers.compilers.CompilerManager.compile_source"]], "compiler_data (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.compiler_data"]], "containers (ape.managers.accounts.accountmanager property)": [[15, "ape.managers.accounts.AccountManager.containers"]], "contracts (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.contracts"]], "contracts_folder (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.contracts_folder"]], "contracts_folder (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.contracts_folder"]], "convert() (ape.managers.converters.accountintconverter method)": [[15, "ape.managers.converters.AccountIntConverter.convert"]], "convert() (ape.managers.converters.addressapiconverter method)": [[15, "ape.managers.converters.AddressAPIConverter.convert"]], "convert() (ape.managers.converters.bytesaddressconverter method)": [[15, "ape.managers.converters.BytesAddressConverter.convert"]], "convert() (ape.managers.converters.conversionmanager method)": [[15, "ape.managers.converters.ConversionManager.convert"]], "convert() (ape.managers.converters.hexaddressconverter method)": [[15, "ape.managers.converters.HexAddressConverter.convert"]], "convert() (ape.managers.converters.hexconverter method)": [[15, "ape.managers.converters.HexConverter.convert"]], "convert() (ape.managers.converters.hexintconverter method)": [[15, "ape.managers.converters.HexIntConverter.convert"]], "convert() (ape.managers.converters.intaddressconverter method)": [[15, "ape.managers.converters.IntAddressConverter.convert"]], "convert() (ape.managers.converters.stringintconverter method)": [[15, "ape.managers.converters.StringIntConverter.convert"]], "convert() (ape.managers.converters.timestampconverter method)": [[15, "ape.managers.converters.TimestampConverter.convert"]], "create_custom_provider() (ape.managers.networks.networkmanager method)": [[15, "ape.managers.networks.NetworkManager.create_custom_provider"]], "create_manifest() (ape.managers.project.types.baseproject method)": [[15, "ape.managers.project.types.BaseProject.create_manifest"]], "default_ecosystem (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.default_ecosystem"]], "default_ecosystem (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.default_ecosystem"]], "dependencies (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.dependencies"]], "dependencies (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.dependencies"]], "deployments (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.deployments"]], "ecosystem (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.ecosystem"]], "ecosystem_names (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.ecosystem_names"]], "ecosystems (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.ecosystems"]], "engines (ape.managers.query.querymanager property)": [[15, "ape.managers.query.QueryManager.engines"]], "enrich_error() (ape.managers.compilers.compilermanager method)": [[15, "ape.managers.compilers.CompilerManager.enrich_error"]], "estimate_query() (ape.managers.query.defaultqueryprovider method)": [[15, "ape.managers.query.DefaultQueryProvider.estimate_query"]], "extensions_with_missing_compilers() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.extensions_with_missing_compilers"]], "extract_manifest() (ape.managers.project.dependency.githubdependency method)": [[15, "ape.managers.project.dependency.GithubDependency.extract_manifest"]], "extract_manifest() (ape.managers.project.dependency.localdependency method)": [[15, "ape.managers.project.dependency.LocalDependency.extract_manifest"]], "extract_manifest() (ape.managers.project.dependency.npmdependency method)": [[15, "ape.managers.project.dependency.NpmDependency.extract_manifest"]], "extract_manifest() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.extract_manifest"]], "flatten_contract() (ape.managers.compilers.compilermanager method)": [[15, "ape.managers.compilers.CompilerManager.flatten_contract"]], "fork() (ape.managers.networks.networkmanager method)": [[15, "ape.managers.networks.NetworkManager.fork"]], "gas_price (ape.managers.chain.chainmanager property)": [[15, "ape.managers.chain.ChainManager.gas_price"]], "get() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.get"]], "get_accounts_by_type() (ape.managers.accounts.accountmanager method)": [[15, "ape.managers.accounts.AccountManager.get_accounts_by_type"]], "get_blueprint() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.get_blueprint"]], "get_compiler_data() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.get_compiler_data"]], "get_config() (ape.managers.config.configmanager method)": [[15, "ape.managers.config.ConfigManager.get_config"]], "get_container() (ape.managers.chain.contractcache class method)": [[15, "ape.managers.chain.ContractCache.get_container"]], "get_contract() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.get_contract"]], "get_creation_receipt() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.get_creation_receipt"]], "get_deployments() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.get_deployments"]], "get_ecosystem() (ape.managers.networks.networkmanager method)": [[15, "ape.managers.networks.NetworkManager.get_ecosystem"]], "get_imports() (ape.managers.compilers.compilermanager method)": [[15, "ape.managers.compilers.CompilerManager.get_imports"]], "get_multiple() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.get_multiple"]], "get_network_choices() (ape.managers.networks.networkmanager method)": [[15, "ape.managers.networks.NetworkManager.get_network_choices"]], "get_project() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.get_project"]], "get_provider_from_choice() (ape.managers.networks.networkmanager method)": [[15, "ape.managers.networks.NetworkManager.get_provider_from_choice"]], "get_proxy_info() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.get_proxy_info"]], "get_receipt() (ape.managers.chain.chainmanager method)": [[15, "ape.managers.chain.ChainManager.get_receipt"]], "get_references() (ape.managers.compilers.compilermanager method)": [[15, "ape.managers.compilers.CompilerManager.get_references"]], "github (ape.managers.project.dependency.githubdependency attribute)": [[15, "ape.managers.project.dependency.GithubDependency.github"]], "head (ape.managers.chain.blockcontainer property)": [[15, "ape.managers.chain.BlockContainer.head"]], "height (ape.managers.chain.blockcontainer property)": [[15, "ape.managers.chain.BlockContainer.height"]], "history (ape.managers.chain.chainmanager property)": [[15, "ape.managers.chain.ChainManager.history"]], "instance_at() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.instance_at"]], "instance_from_receipt() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.instance_from_receipt"]], "interfaces_folder (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.interfaces_folder"]], "is_convertible() (ape.managers.converters.accountintconverter method)": [[15, "ape.managers.converters.AccountIntConverter.is_convertible"]], "is_convertible() (ape.managers.converters.addressapiconverter method)": [[15, "ape.managers.converters.AddressAPIConverter.is_convertible"]], "is_convertible() (ape.managers.converters.bytesaddressconverter method)": [[15, "ape.managers.converters.BytesAddressConverter.is_convertible"]], "is_convertible() (ape.managers.converters.hexaddressconverter method)": [[15, "ape.managers.converters.HexAddressConverter.is_convertible"]], "is_convertible() (ape.managers.converters.hexconverter method)": [[15, "ape.managers.converters.HexConverter.is_convertible"]], "is_convertible() (ape.managers.converters.hexintconverter method)": [[15, "ape.managers.converters.HexIntConverter.is_convertible"]], "is_convertible() (ape.managers.converters.intaddressconverter method)": [[15, "ape.managers.converters.IntAddressConverter.is_convertible"]], "is_convertible() (ape.managers.converters.stringintconverter method)": [[15, "ape.managers.converters.StringIntConverter.is_convertible"]], "is_convertible() (ape.managers.converters.timestampconverter method)": [[15, "ape.managers.converters.TimestampConverter.is_convertible"]], "is_type() (ape.managers.converters.conversionmanager method)": [[15, "ape.managers.converters.ConversionManager.is_type"]], "is_valid (ape.managers.project.types.baseproject property)": [[15, "ape.managers.project.types.BaseProject.is_valid"]], "is_valid (ape.managers.project.types.brownieproject property)": [[15, "ape.managers.project.types.BrownieProject.is_valid"]], "isolate() (ape.managers.chain.chainmanager method)": [[15, "ape.managers.chain.ChainManager.isolate"]], "load() (ape.managers.accounts.accountmanager method)": [[15, "ape.managers.accounts.AccountManager.load"]], "load() (ape.managers.config.configmanager method)": [[15, "ape.managers.config.ConfigManager.load"]], "load_contracts() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.load_contracts"]], "lookup_path() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.lookup_path"]], "meta (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.meta"]], "meta (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.meta"]], "mine() (ape.managers.chain.chainmanager method)": [[15, "ape.managers.chain.ChainManager.mine"]], "name (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.name"]], "network (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.network"]], "network_data (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.network_data"]], "network_names (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.network_names"]], "networks_yaml (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.networks_yaml"]], "npm (ape.managers.project.dependency.npmdependency attribute)": [[15, "ape.managers.project.dependency.NpmDependency.npm"]], "outgoing (ape.managers.chain.accounthistory property)": [[15, "ape.managers.chain.AccountHistory.outgoing"]], "parse_network_choice() (ape.managers.networks.networkmanager method)": [[15, "ape.managers.networks.NetworkManager.parse_network_choice"]], "path (ape.managers.project.manager.projectmanager attribute)": [[15, "ape.managers.project.manager.ProjectManager.path"]], "pending_timestamp (ape.managers.chain.chainmanager property)": [[15, "ape.managers.chain.ChainManager.pending_timestamp"]], "perform_query() (ape.managers.query.defaultqueryprovider method)": [[15, "ape.managers.query.DefaultQueryProvider.perform_query"]], "poll_blocks() (ape.managers.chain.blockcontainer method)": [[15, "ape.managers.chain.BlockContainer.poll_blocks"]], "process_config_file() (ape.managers.project.types.baseproject method)": [[15, "ape.managers.project.types.BaseProject.process_config_file"]], "process_config_file() (ape.managers.project.types.brownieproject method)": [[15, "ape.managers.project.types.BrownieProject.process_config_file"]], "project_types (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.project_types"]], "provider_names (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.provider_names"]], "query() (ape.managers.chain.accounthistory method)": [[15, "ape.managers.chain.AccountHistory.query"]], "query() (ape.managers.chain.blockcontainer method)": [[15, "ape.managers.chain.BlockContainer.query"]], "query() (ape.managers.query.querymanager method)": [[15, "ape.managers.query.QueryManager.query"]], "range() (ape.managers.chain.blockcontainer method)": [[15, "ape.managers.chain.BlockContainer.range"]], "ref (ape.managers.project.dependency.githubdependency attribute)": [[15, "ape.managers.project.dependency.GithubDependency.ref"]], "registered_compilers (ape.managers.compilers.compilermanager property)": [[15, "ape.managers.compilers.CompilerManager.registered_compilers"]], "restore() (ape.managers.chain.chainmanager method)": [[15, "ape.managers.chain.ChainManager.restore"]], "revert_to_block() (ape.managers.chain.accounthistory method)": [[15, "ape.managers.chain.AccountHistory.revert_to_block"]], "revert_to_block() (ape.managers.chain.transactionhistory method)": [[15, "ape.managers.chain.TransactionHistory.revert_to_block"]], "scripts_folder (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.scripts_folder"]], "sessional (ape.managers.chain.accounthistory attribute)": [[15, "ape.managers.chain.AccountHistory.sessional"]], "set_default_ecosystem() (ape.managers.networks.networkmanager method)": [[15, "ape.managers.networks.NetworkManager.set_default_ecosystem"]], "snapshot() (ape.managers.chain.chainmanager method)": [[15, "ape.managers.chain.ChainManager.snapshot"]], "source_paths (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.source_paths"]], "source_paths (ape.managers.project.types.baseproject property)": [[15, "ape.managers.project.types.BaseProject.source_paths"]], "sources (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.sources"]], "sources_missing (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.sources_missing"]], "test_accounts (ape.managers.accounts.accountmanager property)": [[15, "ape.managers.accounts.AccountManager.test_accounts"]], "tests_folder (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.tests_folder"]], "track_deployment() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.track_deployment"]], "tracked_deployments (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.tracked_deployments"]], "uri (ape.managers.project.dependency.githubdependency property)": [[15, "ape.managers.project.dependency.GithubDependency.uri"]], "uri (ape.managers.project.dependency.localdependency property)": [[15, "ape.managers.project.dependency.LocalDependency.uri"]], "uri (ape.managers.project.dependency.npmdependency property)": [[15, "ape.managers.project.dependency.NpmDependency.uri"]], "using_project() (ape.managers.config.configmanager method)": [[15, "ape.managers.config.ConfigManager.using_project"]], "version (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.version"]], "version (ape.managers.project.dependency.localdependency attribute)": [[15, "ape.managers.project.dependency.LocalDependency.version"]], "version_from_json (ape.managers.project.dependency.npmdependency property)": [[15, "ape.managers.project.dependency.NpmDependency.version_from_json"]], "version_from_local_json (ape.managers.project.dependency.npmdependency property)": [[15, "ape.managers.project.dependency.NpmDependency.version_from_local_json"]], "version_id (ape.managers.project.dependency.githubdependency property)": [[15, "ape.managers.project.dependency.GithubDependency.version_id"]], "version_id (ape.managers.project.dependency.localdependency property)": [[15, "ape.managers.project.dependency.LocalDependency.version_id"]], "version_id (ape.managers.project.dependency.npmdependency property)": [[15, "ape.managers.project.dependency.NpmDependency.version_id"]], "accountplugin (class in ape.plugins.account)": [[16, "ape.plugins.account.AccountPlugin"]], "compilerplugin (class in ape.plugins.compiler)": [[16, "ape.plugins.compiler.CompilerPlugin"]], "config (class in ape.plugins.config)": [[16, "ape.plugins.config.Config"]], "conversionplugin (class in ape.plugins.converter)": [[16, "ape.plugins.converter.ConversionPlugin"]], "dependencyplugin (class in ape.plugins.project)": [[16, "ape.plugins.project.DependencyPlugin"]], "ecosystemplugin (class in ape.plugins.network)": [[16, "ape.plugins.network.EcosystemPlugin"]], "explorerplugin (class in ape.plugins.network)": [[16, "ape.plugins.network.ExplorerPlugin"]], "networkplugin (class in ape.plugins.network)": [[16, "ape.plugins.network.NetworkPlugin"]], "plugintype (class in ape.plugins.pluggy_patch)": [[16, "ape.plugins.pluggy_patch.PluginType"]], "projectplugin (class in ape.plugins.project)": [[16, "ape.plugins.project.ProjectPlugin"]], "providerplugin (class in ape.plugins.network)": [[16, "ape.plugins.network.ProviderPlugin"]], "queryplugin (class in ape.plugins.query)": [[16, "ape.plugins.query.QueryPlugin"]], "account_types() (ape.plugins.account.accountplugin method)": [[16, "ape.plugins.account.AccountPlugin.account_types"]], "ape.plugins": [[16, "module-ape.plugins"]], "ape.plugins.account": [[16, "module-ape.plugins.account"]], "ape.plugins.compiler": [[16, "module-ape.plugins.compiler"]], "ape.plugins.config": [[16, "module-ape.plugins.config"]], "ape.plugins.converter": [[16, "module-ape.plugins.converter"]], "ape.plugins.network": [[16, "module-ape.plugins.network"]], "ape.plugins.pluggy_patch": [[16, "module-ape.plugins.pluggy_patch"]], "ape.plugins.project": [[16, "module-ape.plugins.project"]], "ape.plugins.query": [[16, "module-ape.plugins.query"]], "config_class() (ape.plugins.config.config method)": [[16, "ape.plugins.config.Config.config_class"]], "converters() (ape.plugins.converter.conversionplugin method)": [[16, "ape.plugins.converter.ConversionPlugin.converters"]], "dependencies() (ape.plugins.project.dependencyplugin method)": [[16, "ape.plugins.project.DependencyPlugin.dependencies"]], "ecosystems() (ape.plugins.network.ecosystemplugin method)": [[16, "ape.plugins.network.EcosystemPlugin.ecosystems"]], "explorers() (ape.plugins.network.explorerplugin method)": [[16, "ape.plugins.network.ExplorerPlugin.explorers"]], "networks() (ape.plugins.network.networkplugin method)": [[16, "ape.plugins.network.NetworkPlugin.networks"]], "plugin_manager (in module ape.plugins.pluggy_patch)": [[16, "ape.plugins.pluggy_patch.plugin_manager"]], "projects() (ape.plugins.project.projectplugin method)": [[16, "ape.plugins.project.ProjectPlugin.projects"]], "providers() (ape.plugins.network.providerplugin method)": [[16, "ape.plugins.network.ProviderPlugin.providers"]], "query_engines() (ape.plugins.query.queryplugin method)": [[16, "ape.plugins.query.QueryPlugin.query_engines"]], "register() (in module ape.plugins)": [[16, "ape.plugins.register"]], "register_compiler() (ape.plugins.compiler.compilerplugin method)": [[16, "ape.plugins.compiler.CompilerPlugin.register_compiler"]], "addresstype (in module ape.types.address)": [[17, "ape.types.address.AddressType"]], "basecontractlog (class in ape.types)": [[17, "ape.types.BaseContractLog"]], "blockid (in module ape.types)": [[17, "ape.types.BlockID"]], "contractcoverage (class in ape.types.coverage)": [[17, "ape.types.coverage.ContractCoverage"]], "contractlog (class in ape.types)": [[17, "ape.types.ContractLog"]], "contractsourcecoverage (class in ape.types.coverage)": [[17, "ape.types.coverage.ContractSourceCoverage"]], "coverageproject (class in ape.types.coverage)": [[17, "ape.types.coverage.CoverageProject"]], "coveragereport (class in ape.types.coverage)": [[17, "ape.types.coverage.CoverageReport"]], "coveragestatement (class in ape.types.coverage)": [[17, "ape.types.coverage.CoverageStatement"]], "functioncoverage (class in ape.types.coverage)": [[17, "ape.types.coverage.FunctionCoverage"]], "messagesignature (class in ape.types.signatures)": [[17, "ape.types.signatures.MessageSignature"]], "mockcontractlog (class in ape.types)": [[17, "ape.types.MockContractLog"]], "rawaddress (in module ape.types.address)": [[17, "ape.types.address.RawAddress"]], "signablemessage (class in ape.types.signatures)": [[17, "ape.types.signatures.SignableMessage"]], "transactionsignature (class in ape.types.signatures)": [[17, "ape.types.signatures.TransactionSignature"]], "ape.types": [[17, "module-ape.types"]], "ape.types.address": [[17, "module-ape.types.address"]], "ape.types.coverage": [[17, "module-ape.types.coverage"]], "block_hash (ape.types.contractlog attribute)": [[17, "ape.types.ContractLog.block_hash"]], "block_number (ape.types.contractlog attribute)": [[17, "ape.types.ContractLog.block_number"]], "body (ape.types.signatures.signablemessage attribute)": [[17, "ape.types.signatures.SignableMessage.body"]], "contract_address (ape.types.basecontractlog attribute)": [[17, "ape.types.BaseContractLog.contract_address"]], "contracts (ape.types.coverage.contractsourcecoverage attribute)": [[17, "ape.types.coverage.ContractSourceCoverage.contracts"]], "event_arguments (ape.types.basecontractlog attribute)": [[17, "ape.types.BaseContractLog.event_arguments"]], "event_name (ape.types.basecontractlog attribute)": [[17, "ape.types.BaseContractLog.event_name"]], "full_name (ape.types.coverage.functioncoverage attribute)": [[17, "ape.types.coverage.FunctionCoverage.full_name"]], "function_hits (ape.types.coverage.contractcoverage property)": [[17, "ape.types.coverage.ContractCoverage.function_hits"]], "function_hits (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.function_hits"]], "function_hits (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.function_hits"]], "function_hits (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.function_hits"]], "function_rate (ape.types.coverage.contractcoverage property)": [[17, "ape.types.coverage.ContractCoverage.function_rate"]], "function_rate (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.function_rate"]], "function_rate (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.function_rate"]], "function_rate (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.function_rate"]], "functions (ape.types.coverage.contractcoverage attribute)": [[17, "ape.types.coverage.ContractCoverage.functions"]], "get_html() (ape.types.coverage.coveragereport method)": [[17, "ape.types.coverage.CoverageReport.get_html"]], "get_xml() (ape.types.coverage.coveragereport method)": [[17, "ape.types.coverage.CoverageReport.get_xml"]], "header (ape.types.signatures.signablemessage attribute)": [[17, "ape.types.signatures.SignableMessage.header"]], "hit_count (ape.types.coverage.coveragestatement attribute)": [[17, "ape.types.coverage.CoverageStatement.hit_count"]], "hit_count (ape.types.coverage.functioncoverage attribute)": [[17, "ape.types.coverage.FunctionCoverage.hit_count"]], "include() (ape.types.coverage.contractsourcecoverage method)": [[17, "ape.types.coverage.ContractSourceCoverage.include"]], "line_rate (ape.types.coverage.contractcoverage property)": [[17, "ape.types.coverage.ContractCoverage.line_rate"]], "line_rate (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.line_rate"]], "line_rate (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.line_rate"]], "line_rate (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.line_rate"]], "line_rate (ape.types.coverage.functioncoverage property)": [[17, "ape.types.coverage.FunctionCoverage.line_rate"]], "lines_covered (ape.types.coverage.contractcoverage property)": [[17, "ape.types.coverage.ContractCoverage.lines_covered"]], "lines_covered (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.lines_covered"]], "lines_covered (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.lines_covered"]], "lines_covered (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.lines_covered"]], "lines_covered (ape.types.coverage.functioncoverage property)": [[17, "ape.types.coverage.FunctionCoverage.lines_covered"]], "lines_valid (ape.types.coverage.contractcoverage property)": [[17, "ape.types.coverage.ContractCoverage.lines_valid"]], "lines_valid (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.lines_valid"]], "lines_valid (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.lines_valid"]], "lines_valid (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.lines_valid"]], "lines_valid (ape.types.coverage.functioncoverage property)": [[17, "ape.types.coverage.FunctionCoverage.lines_valid"]], "location (ape.types.coverage.coveragestatement attribute)": [[17, "ape.types.coverage.CoverageStatement.location"]], "log_index (ape.types.contractlog attribute)": [[17, "ape.types.ContractLog.log_index"]], "miss_count (ape.types.coverage.contractcoverage property)": [[17, "ape.types.coverage.ContractCoverage.miss_count"]], "miss_count (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.miss_count"]], "miss_count (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.miss_count"]], "miss_count (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.miss_count"]], "miss_count (ape.types.coverage.functioncoverage property)": [[17, "ape.types.coverage.FunctionCoverage.miss_count"]], "model_dump() (ape.types.coverage.contractcoverage method)": [[17, "ape.types.coverage.ContractCoverage.model_dump"]], "model_dump() (ape.types.coverage.contractsourcecoverage method)": [[17, "ape.types.coverage.ContractSourceCoverage.model_dump"]], "model_dump() (ape.types.coverage.coverageproject method)": [[17, "ape.types.coverage.CoverageProject.model_dump"]], "model_dump() (ape.types.coverage.coveragereport method)": [[17, "ape.types.coverage.CoverageReport.model_dump"]], "model_dump() (ape.types.coverage.functioncoverage method)": [[17, "ape.types.coverage.FunctionCoverage.model_dump"]], "name (ape.types.coverage.contractcoverage attribute)": [[17, "ape.types.coverage.ContractCoverage.name"]], "name (ape.types.coverage.coverageproject attribute)": [[17, "ape.types.coverage.CoverageProject.name"]], "name (ape.types.coverage.functioncoverage attribute)": [[17, "ape.types.coverage.FunctionCoverage.name"]], "pcs (ape.types.coverage.coveragestatement attribute)": [[17, "ape.types.coverage.CoverageStatement.pcs"]], "profile_statement() (ape.types.coverage.functioncoverage method)": [[17, "ape.types.coverage.FunctionCoverage.profile_statement"]], "projects (ape.types.coverage.coveragereport attribute)": [[17, "ape.types.coverage.CoverageReport.projects"]], "recover_signer() (ape.types.signatures method)": [[17, "ape.types.signatures.recover_signer"]], "source_folders (ape.types.coverage.coveragereport attribute)": [[17, "ape.types.coverage.CoverageReport.source_folders"]], "source_id (ape.types.coverage.contractsourcecoverage attribute)": [[17, "ape.types.coverage.ContractSourceCoverage.source_id"]], "sources (ape.types.coverage.coverageproject attribute)": [[17, "ape.types.coverage.CoverageProject.sources"]], "sources (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.sources"]], "statements (ape.types.coverage.contractcoverage property)": [[17, "ape.types.coverage.ContractCoverage.statements"]], "statements (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.statements"]], "statements (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.statements"]], "statements (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.statements"]], "statements (ape.types.coverage.functioncoverage attribute)": [[17, "ape.types.coverage.FunctionCoverage.statements"]], "tag (ape.types.coverage.coveragestatement attribute)": [[17, "ape.types.coverage.CoverageStatement.tag"]], "timestamp (ape.types.contractlog property)": [[17, "ape.types.ContractLog.timestamp"]], "timestamp (ape.types.coverage.coveragereport attribute)": [[17, "ape.types.coverage.CoverageReport.timestamp"]], "total_functions (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.total_functions"]], "total_functions (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.total_functions"]], "total_functions (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.total_functions"]], "transaction_hash (ape.types.contractlog attribute)": [[17, "ape.types.ContractLog.transaction_hash"]], "transaction_index (ape.types.contractlog attribute)": [[17, "ape.types.ContractLog.transaction_index"]], "version (ape.types.signatures.signablemessage attribute)": [[17, "ape.types.signatures.SignableMessage.version"]], "baseinterface (class in ape.utils)": [[18, "ape.utils.BaseInterface"]], "baseinterfacemodel (class in ape.utils)": [[18, "ape.utils.BaseInterfaceModel"]], "contracts (ape.utils.tracestyles attribute)": [[18, "ape.utils.TraceStyles.CONTRACTS"]], "delegate (ape.utils.tracestyles attribute)": [[18, "ape.utils.TraceStyles.DELEGATE"]], "extraattributesmixin (class in ape.utils)": [[18, "ape.utils.ExtraAttributesMixin"]], "extramodelattributes (class in ape.utils)": [[18, "ape.utils.ExtraModelAttributes"]], "gas_cost (ape.utils.tracestyles attribute)": [[18, "ape.utils.TraceStyles.GAS_COST"]], "generateddevaccount (class in ape.utils)": [[18, "ape.utils.GeneratedDevAccount"]], "githubclient (class in ape.utils)": [[18, "ape.utils.GithubClient"]], "inputs (ape.utils.tracestyles attribute)": [[18, "ape.utils.TraceStyles.INPUTS"]], "joinablequeue (class in ape.utils)": [[18, "ape.utils.JoinableQueue"]], "methods (ape.utils.tracestyles attribute)": [[18, "ape.utils.TraceStyles.METHODS"]], "outputs (ape.utils.tracestyles attribute)": [[18, "ape.utils.TraceStyles.OUTPUTS"]], "struct (class in ape.utils)": [[18, "ape.utils.Struct"]], "structparser (class in ape.utils)": [[18, "ape.utils.StructParser"]], "tracestyles (class in ape.utils)": [[18, "ape.utils.TraceStyles"]], "value (ape.utils.tracestyles attribute)": [[18, "ape.utils.TraceStyles.VALUE"]], "add_padding_to_strings() (in module ape.utils)": [[18, "ape.utils.add_padding_to_strings"]], "additional_error_message (ape.utils.extramodelattributes attribute)": [[18, "ape.utils.ExtraModelAttributes.additional_error_message"]], "address (ape.utils.generateddevaccount attribute)": [[18, "ape.utils.GeneratedDevAccount.address"]], "allow_disconnected() (in module ape.utils)": [[18, "ape.utils.allow_disconnected"]], "ape.utils": [[18, "module-ape.utils"]], "ape_org (ape.utils.githubclient property)": [[18, "ape.utils.GithubClient.ape_org"]], "attributes (ape.utils.extramodelattributes attribute)": [[18, "ape.utils.ExtraModelAttributes.attributes"]], "available_plugins (ape.utils.githubclient property)": [[18, "ape.utils.GithubClient.available_plugins"]], "clone_repo() (ape.utils.githubclient method)": [[18, "ape.utils.GithubClient.clone_repo"]], "decode_output() (ape.utils.structparser method)": [[18, "ape.utils.StructParser.decode_output"]], "default_name (ape.utils.structparser property)": [[18, "ape.utils.StructParser.default_name"]], "download_package() (ape.utils.githubclient method)": [[18, "ape.utils.GithubClient.download_package"]], "encode_input() (ape.utils.structparser method)": [[18, "ape.utils.StructParser.encode_input"]], "expand_environment_variables() (in module ape.utils)": [[18, "ape.utils.expand_environment_variables"]], "extract_nested_value() (in module ape.utils)": [[18, "ape.utils.extract_nested_value"]], "gas_estimation_error_message() (in module ape.utils)": [[18, "ape.utils.gas_estimation_error_message"]], "generate_dev_accounts() (in module ape.utils)": [[18, "ape.utils.generate_dev_accounts"]], "get() (ape.utils.extramodelattributes method)": [[18, "ape.utils.ExtraModelAttributes.get"]], "get_all_files_in_directory() (in module ape.utils)": [[18, "ape.utils.get_all_files_in_directory"]], "get_current_timestamp_ms() (in module ape.utils)": [[18, "ape.utils.get_current_timestamp_ms"]], "get_package_version() (in module ape.utils)": [[18, "ape.utils.get_package_version"]], "get_relative_path() (in module ape.utils)": [[18, "ape.utils.get_relative_path"]], "get_release() (ape.utils.githubclient method)": [[18, "ape.utils.GithubClient.get_release"]], "get_repo() (ape.utils.githubclient method)": [[18, "ape.utils.GithubClient.get_repo"]], "include_getattr (ape.utils.extramodelattributes attribute)": [[18, "ape.utils.ExtraModelAttributes.include_getattr"]], "include_getitem (ape.utils.extramodelattributes attribute)": [[18, "ape.utils.ExtraModelAttributes.include_getitem"]], "injected_before_use (class in ape.utils)": [[18, "ape.utils.injected_before_use"]], "is_array() (in module ape.utils)": [[18, "ape.utils.is_array"]], "is_evm_precompile() (in module ape.utils)": [[18, "ape.utils.is_evm_precompile"]], "is_named_tuple() (in module ape.utils)": [[18, "ape.utils.is_named_tuple"]], "is_struct() (in module ape.utils)": [[18, "ape.utils.is_struct"]], "is_zero_hex() (in module ape.utils)": [[18, "ape.utils.is_zero_hex"]], "items() (ape.utils.struct method)": [[18, "ape.utils.Struct.items"]], "join() (ape.utils.joinablequeue method)": [[18, "ape.utils.JoinableQueue.join"]], "load_config() (in module ape.utils)": [[18, "ape.utils.load_config"]], "model_config (ape.utils.baseinterfacemodel attribute)": [[18, "ape.utils.BaseInterfaceModel.model_config"]], "model_config (ape.utils.extramodelattributes attribute)": [[18, "ape.utils.ExtraModelAttributes.model_config"]], "model_fields (ape.utils.baseinterfacemodel attribute)": [[18, "ape.utils.BaseInterfaceModel.model_fields"]], "model_fields (ape.utils.extramodelattributes attribute)": [[18, "ape.utils.ExtraModelAttributes.model_fields"]], "name (ape.utils.extramodelattributes attribute)": [[18, "ape.utils.ExtraModelAttributes.name"]], "pragma_str_to_specifier_set() (in module ape.utils)": [[18, "ape.utils.pragma_str_to_specifier_set"]], "private_key (ape.utils.generateddevaccount attribute)": [[18, "ape.utils.GeneratedDevAccount.private_key"]], "raises_not_implemented() (in module ape.utils)": [[18, "ape.utils.raises_not_implemented"]], "register() (ape.utils.singledispatchmethod method)": [[18, "ape.utils.singledispatchmethod.register"]], "returns_array() (in module ape.utils)": [[18, "ape.utils.returns_array"]], "run_until_complete() (in module ape.utils)": [[18, "ape.utils.run_until_complete"]], "singledispatchmethod (class in ape.utils)": [[18, "ape.utils.singledispatchmethod"]], "spawn() (in module ape.utils)": [[18, "ape.utils.spawn"]], "stream_response() (in module ape.utils)": [[18, "ape.utils.stream_response"]], "use_temp_sys_path (class in ape.utils)": [[18, "ape.utils.use_temp_sys_path"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["commands/accounts", "commands/compile", "commands/console", "commands/init", "commands/networks", "commands/plugins", "commands/pm", "commands/run", "commands/test", "index", "methoddocs/ape", "methoddocs/api", "methoddocs/cli", "methoddocs/contracts", "methoddocs/exceptions", "methoddocs/managers", "methoddocs/plugins", "methoddocs/types", "methoddocs/utils", "userguides/accounts", "userguides/clis", "userguides/compile", "userguides/config", "userguides/console", "userguides/contracts", "userguides/data", "userguides/dependencies", "userguides/developing_plugins", "userguides/installing_plugins", "userguides/logging", "userguides/networks", "userguides/projects", "userguides/proxy", "userguides/publishing", "userguides/quickstart", "userguides/scripts", "userguides/testing", "userguides/transactions"], "filenames": ["commands/accounts.rst", "commands/compile.rst", "commands/console.rst", "commands/init.rst", "commands/networks.rst", "commands/plugins.rst", "commands/pm.rst", "commands/run.rst", "commands/test.rst", "index.md", "methoddocs/ape.md", "methoddocs/api.md", "methoddocs/cli.md", "methoddocs/contracts.md", "methoddocs/exceptions.md", "methoddocs/managers.md", "methoddocs/plugins.md", "methoddocs/types.md", "methoddocs/utils.md", "userguides/accounts.md", "userguides/clis.md", "userguides/compile.md", "userguides/config.md", "userguides/console.md", "userguides/contracts.md", "userguides/data.md", "userguides/dependencies.md", "userguides/developing_plugins.md", "userguides/installing_plugins.md", "userguides/logging.md", "userguides/networks.md", "userguides/projects.md", "userguides/proxy.md", "userguides/publishing.md", "userguides/quickstart.md", "userguides/scripts.md", "userguides/testing.md", "userguides/transactions.md"], "titles": ["accounts", "compile", "console", "init", "networks", "plugins", "pm", "run", "test", "Ape-Docs", "ape", "ape.api", "ape.cli", "ape.contracts", "ape.exceptions", "ape.managers", "ape.plugins", "ape.types", "ape.utils", "Accounts", "CLIs", "Compile", "Configure Ape", "Ape Console", "Contracts", "Querying Data", "Dependencies", "Developing Plugins", "Plugins", "Logging", "Networks", "Developing Projects with Ape", "Proxy Contracts", "Publishing", "Overview", "Scripting", "Testing", "Making Transactions"], "terms": {"command": [0, 4, 5, 6, 7, 11, 15, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 34, 35], "line": [0, 4, 5, 12, 15, 17, 34, 35, 36], "helper": [0, 4, 5], "manag": [0, 4, 5, 6, 9, 10, 11, 12, 13, 14, 16, 18, 19, 20, 22, 23, 24, 25, 27, 31, 33, 35, 36], "local": [0, 2, 4, 6, 10, 11, 13, 14, 15, 16, 18, 19, 21, 22, 23, 24, 25, 27, 28, 34, 36, 37], "you": [0, 1, 6, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "can": [0, 6, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "unlock": [0, 19], "from": [0, 3, 6, 7, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36], "script": [0, 7, 9, 12, 15, 19, 20, 23, 29, 30, 36, 37], "consol": [0, 7, 9, 19, 24, 25, 27, 30, 31, 36], "us": [0, 6, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "load": [0, 1, 12, 13, 15, 18, 19, 20, 23, 24, 25, 26, 27, 31, 33, 37], "method": [0, 7, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 24, 25, 27, 30, 32, 33, 36, 37], "option": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 13, 14, 15, 16, 17, 18, 19, 20, 23, 26, 27, 30, 34, 35, 36], "arg": [0, 4, 5, 6, 7, 11, 12, 13, 14, 17, 18, 23, 24, 25], "an": [0, 3, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 33, 34, 35, 36, 37], "exist": [0, 11, 12, 13, 15, 17, 18, 20, 21, 23, 27, 30, 33, 36], "v": [0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 17, 23, 26, 29], "verbos": [0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 17, 23, 29, 34, 36], "lvl": [0, 1, 2, 3, 4, 5, 6, 7, 8, 23], "One": [0, 1, 2, 3, 4, 5, 6, 7, 8, 23, 24, 36, 37], "error": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 15, 18, 20, 23, 24, 29, 30], "warn": [0, 1, 2, 3, 4, 5, 6, 7, 8, 13, 17, 18, 19, 21, 22, 23, 26, 27, 29, 30, 34], "success": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 23, 29, 34], "info": [0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 15, 20, 23, 27, 29, 36], "debug": [0, 1, 2, 3, 4, 5, 6, 7, 8, 19, 23, 25, 29, 30, 34], "argument": [0, 1, 5, 6, 8, 11, 13, 14, 15, 17, 18, 19, 20, 23, 24, 26, 27, 30, 33, 34, 35, 37], "alia": [0, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 23, 24, 26, 27, 33], "requir": [0, 6, 10, 11, 12, 13, 14, 15, 16, 18, 20, 22, 24, 26, 28, 30, 31, 34, 36, 37], "privat": [0, 11, 19, 34], "kei": [0, 11, 12, 13, 15, 16, 17, 18, 19, 21, 22, 23, 24, 26, 27, 34, 37], "creat": [0, 3, 11, 12, 14, 15, 16, 17, 18, 21, 22, 23, 24, 25, 27, 30, 31, 36], "random": [0, 19, 36], "mnemon": [0, 15, 18, 19, 22, 36], "seed": [0, 18, 19], "phrase": [0, 18, 19], "hide": [0, 19], "newli": [0, 19], "termin": [0, 12, 13, 14, 15, 34, 36], "word": [0, 18, 19], "count": [0, 15, 17, 18, 19], "word_count": 0, "number": [0, 11, 12, 13, 14, 15, 17, 18, 22, 23, 25, 30], "default": [0, 3, 4, 8, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 30, 35, 36, 37], "12": [0, 19], "hd": [0, 18, 19], "path": [0, 5, 10, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 24, 26, 30, 36], "custom_hd_path": 0, "specifi": [0, 11, 12, 15, 16, 17, 18, 19, 20, 22, 24, 26, 27, 28, 30, 35, 36, 37], "deriv": [0, 18, 30, 36], "m": [0, 18, 36], "44": [0, 18, 36], "60": [0, 18, 30, 36], "0": [0, 6, 8, 11, 12, 13, 15, 17, 18, 19, 20, 21, 22, 23, 24, 26, 28, 30, 32, 36, 37], "when": [0, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 30, 32, 34, 35, 36, 37], "avail": [0, 5, 11, 13, 15, 16, 17, 18, 19, 23, 24, 25, 26, 27, 28, 29, 36, 37], "all": [0, 1, 4, 5, 6, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 30, 31, 34, 36, 37], "output": [0, 12, 13, 14, 17, 18, 21, 23, 27, 29, 36, 37], "plugin": [0, 9, 11, 12, 15, 18, 19, 20, 23, 24, 25, 26, 30, 35, 36], "manifest": [1, 11, 15, 26, 33], "thi": [1, 6, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37], "project": [1, 2, 3, 5, 6, 7, 8, 9, 10, 12, 13, 14, 17, 18, 21, 22, 23, 26, 28, 30, 33, 35, 37], "save": [1, 15, 18, 24, 35], "result": [1, 4, 11, 12, 13, 15, 18, 22, 23, 24], "back": [1, 11, 13, 15, 24, 30], "note": [1, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37], "ap": [1, 3, 4, 6, 7, 8, 19, 21, 24, 25, 26, 27, 28, 29, 30, 32, 33, 35], "automat": [1, 6, 12, 15, 16, 20, 23, 24, 26, 30, 33, 35, 36], "recompil": [1, 26], "ani": [1, 7, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 22, 23, 26, 27, 30, 34, 35, 36, 37], "chang": [1, 8, 11, 12, 13, 15, 22, 23, 29, 30, 35, 36], "contract": [1, 8, 9, 10, 11, 12, 14, 15, 17, 18, 19, 21, 23, 30, 33, 34, 37], "each": [1, 11, 15, 16, 17, 18, 19, 22, 25, 26, 27, 30, 35, 36, 37], "time": [1, 11, 13, 15, 17, 19, 20, 22, 24, 26, 36, 37], "i": [1, 7, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "do": [1, 11, 14, 15, 18, 19, 22, 23, 24, 25, 26, 27, 29, 30, 32, 34, 35, 36], "have": [1, 11, 13, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 33, 34, 35, 36, 37], "manual": [1, 23, 30, 36], "trigger": [1, 36], "file_path": [1, 11, 15], "f": [1, 6, 12, 13, 15, 20, 27, 35], "forc": [1, 6, 11, 15, 26], "select": [1, 12, 13, 15, 19, 20, 23, 35], "": [1, 5, 6, 8, 11, 12, 13, 15, 16, 17, 18, 19, 21, 22, 24, 25, 26, 27, 28, 30, 31, 33, 35, 36, 37], "size": [1, 11, 15, 34], "show": [1, 11, 14, 18, 19, 20, 23, 28, 29, 30, 36, 37], "deploy": [1, 11, 13, 15, 31], "bytecod": [1, 11], "includ": [1, 5, 6, 11, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 26, 28, 33, 36, 37], "depend": [1, 6, 9, 11, 15, 16, 17, 18, 27], "also": [1, 6, 10, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 23, 24, 25, 26, 29, 30, 31, 33, 34, 35, 36, 37], "open": [2, 26, 34, 36], "allow": [3, 11, 12, 15, 16, 20, 22, 23, 24, 30, 32, 35, 36, 37], "user": [3, 10, 11, 12, 14, 15, 16, 17, 18, 20, 22, 24, 29, 34, 36], "folder": [3, 7, 8, 15, 17, 21, 23, 25, 31, 36, 37], "config": [3, 10, 18, 19, 21, 22, 23, 28, 31, 36, 37], "yaml": [3, 4, 11, 12, 15, 16, 18, 19, 21, 22, 23, 26, 28, 30, 31, 36, 37], "more": [3, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37], "inform": [3, 11, 15, 16, 17, 19, 21, 22, 23, 24, 25, 26, 29, 30, 31, 33, 36], "http": [3, 11, 15, 17, 18, 22, 27, 28, 29, 30, 34], "doc": [3, 11, 17, 18, 27], "apeworx": [3, 18, 27, 28, 30, 33, 34], "io": [3, 17], "stabl": 3, "userguid": 3, "html": [3, 17, 36], "github": [3, 6, 11, 15, 16, 18, 22, 28, 30, 34], "org": [3, 15, 26], "repo": [3, 15, 18], "clone": [3, 18, 26, 32], "templat": [3, 27], "regist": [4, 11, 15, 16, 18, 34, 35], "ecosystem": [4, 11, 12, 14, 15, 16, 20, 25, 30, 34, 35, 36], "provid": [4, 6, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 27, 28, 29, 33, 34, 35, 37], "format": [4, 11, 12, 15, 17, 18], "output_format": 4, "tree": [4, 11, 12, 18], "ecosystem_filt": [4, 15], "filter": [4, 11, 12, 13, 20], "ethereum": [4, 11, 15, 16, 18, 19, 20, 22, 23, 24, 25, 27, 28, 30, 32, 34, 35, 36, 37], "network_filt": [4, 15], "sepolia": [4, 20, 35], "fork": [4, 11, 15, 22, 36, 37], "mainnet": [4, 11, 15, 16, 20, 22, 23, 25, 30, 33, 34, 35, 37], "goerli": [4, 22, 30, 35, 37], "provider_filt": [4, 11, 15], "geth": [4, 11, 14, 15, 18, 24, 28, 30, 36, 37], "test": [4, 9, 11, 15, 17, 18, 20, 21, 23, 24, 26, 27, 30], "start": [4, 11, 13, 15, 17, 18, 20, 23, 27, 30, 33, 34, 35, 36], "subprocess": [4, 11, 14], "node": [4, 11, 15, 17, 22, 28, 30], "independ": 4, "stream": [4, 18], "stdout": 4, "stderr": 4, "overrid": [4, 11, 12, 14, 15, 17, 18, 21, 30], "see": [4, 10, 11, 15, 16, 17, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37], "name": [5, 6, 7, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 33, 34, 35, 36, 37], "dir": 5, "y": [5, 6, 15, 26], "ye": [5, 6, 12, 26], "don": [5, 15, 24, 27, 30, 36, 37], "t": [5, 11, 15, 17, 22, 24, 27, 30, 36, 37], "ask": [5, 11, 19, 26], "confirm": [5, 6, 11, 12, 13, 15, 19, 26], "u": 5, "upgrad": [5, 32, 34], "newest": 5, "version": [5, 6, 11, 14, 15, 17, 18, 20, 21, 22, 23, 24, 26, 28, 30, 34, 36], "displai": [5, 11, 13, 14, 17, 18, 19, 30, 34, 37], "core": [5, 11, 22, 24, 26, 27, 30, 31, 34], "packag": [6, 7, 11, 14, 15, 16, 18, 19, 21, 27, 33, 34], "tool": [6, 24, 34], "The": [6, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37], "re": [6, 8, 11, 15, 23, 26, 36], "download": [6, 11, 15, 16, 18, 26], "cach": [6, 10, 11, 15, 23, 26, 36], "ref": [6, 15, 26], "A": [6, 7, 11, 12, 13, 14, 15, 16, 17, 18, 22, 23, 24, 26, 27, 28, 30, 31, 32, 36, 37], "refer": [6, 11, 13, 15, 22, 24, 26, 27, 30, 34], "flag": [6, 11, 19, 20, 21, 26, 28, 29, 30, 34, 35, 36, 37], "branch": [6, 11, 15, 18, 26, 28], "tag": [6, 15, 17, 26], "instead": [6, 11, 12, 17, 18, 21, 22, 27, 30], "referenc": [6, 15, 26], "If": [6, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 23, 24, 26, 27, 29, 30, 33, 34, 35, 36, 37], "specif": [6, 11, 14, 15, 20, 30, 34, 36, 37], "ar": [6, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37], "onli": [6, 7, 11, 12, 13, 15, 17, 18, 20, 24, 25, 26, 35, 36, 37], "those": [6, 15, 17, 20, 24, 26, 27, 30, 36], "prompt": [6, 12, 19, 20, 26, 34], "choos": [6, 12, 15], "exampl": [6, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 33, 34, 35, 36, 37], "packagenam": 6, "1": [6, 10, 11, 13, 15, 17, 18, 19, 22, 23, 24, 25, 26, 30, 36, 37], "2": [6, 15, 17, 22, 23, 24, 25, 26, 28, 30, 32, 36, 37], "must": [7, 11, 12, 14, 15, 16, 18, 19, 21, 23, 24, 25, 26, 27, 30, 33, 36], "either": [7, 11, 12, 15, 18, 19, 20, 24, 27, 30], "defin": [7, 11, 13, 14, 16, 17, 18, 23, 27, 30, 34, 35, 36], "main": [7, 16, 24, 29, 30], "cli": [7, 11, 14, 15, 18, 19, 21, 23, 28, 34, 36], "click": [7, 12, 20, 27, 28, 30, 35], "group": [7, 17, 24, 27, 35], "object": [7, 10, 11, 12, 15, 16, 17, 18, 19, 20, 22, 23, 24, 31, 35, 36, 37], "call": [7, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 30, 32, 35, 36, 37], "network": [7, 9, 10, 12, 13, 14, 23, 24, 25, 27, 28, 33, 37], "given": [7, 8, 11, 12, 13, 14, 15, 18, 20, 22, 24, 30, 36], "should": [7, 11, 14, 15, 17, 18, 19, 26, 27, 36, 37], "import": [7, 11, 12, 13, 15, 18, 19, 20, 21, 22, 23, 24, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37], "mix": 7, "ins": 7, "necessari": [7, 12, 15], "oper": [7, 11, 14, 24, 29], "interact": [7, 11, 13, 15, 19, 23, 32, 34, 36, 37], "drop": [7, 18], "session": [7, 11, 15, 23, 30, 34], "after": [7, 11, 13, 15, 16, 19, 24, 30, 31, 34, 37], "py": [7, 14, 17, 18, 23, 27, 31, 35, 36], "launch": [8, 23, 30, 37], "pytest": [8, 10, 19, 23, 31, 34], "run": [8, 9, 11, 15, 17, 18, 20, 22, 23, 24, 25, 26, 28, 29, 31, 34, 35, 36, 37], "pytest_arg": 8, "w": [8, 11], "watch": [8, 36], "file": [8, 11, 12, 14, 15, 16, 17, 18, 19, 22, 23, 24, 25, 28, 30, 31, 34, 35, 36, 37], "suit": [8, 28, 36], "watch_fold": 8, "delai": [8, 30, 35], "watch_delai": 8, "between": [8, 11, 13, 15, 17, 30], "poll": [8, 13, 15, 30, 36], "cycl": 8, "5": [8, 17, 19, 22, 24, 26, 36, 37], "second": [8, 13, 14, 15, 24, 30, 36, 37], "overview": 9, "account": [9, 10, 12, 13, 14, 18, 21, 22, 23, 24, 26, 27, 30, 31, 32, 33, 37], "develop": [9, 10, 11, 15, 18, 20, 25, 28, 30, 34], "compil": [9, 10, 14, 17, 18, 22, 23, 24, 28, 36], "queri": [9, 10, 13, 14, 23], "data": [9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 23, 24, 30, 37], "configur": [9, 11, 13, 14, 15, 16, 18, 19, 21, 26, 31, 36], "make": [9, 11, 16, 19, 20, 22, 23, 24, 30, 34, 35, 36], "transact": [9, 13, 14, 15, 17, 18, 19, 22, 34], "proxi": [9, 11, 15], "publish": [9, 11, 13, 15, 36], "log": [9, 11, 12, 13, 15, 17], "pm": [9, 15, 26], "init": [9, 25, 31], "api": [9, 12, 14, 15, 16, 18, 19, 22, 26, 30, 32], "except": [9, 11, 12, 13, 15, 18, 30, 36], "type": [9, 10, 11, 13, 14, 15, 16, 18, 19, 20, 21, 23, 24, 27, 32, 33, 34, 36, 37], "util": [9, 10, 19, 20, 23, 27, 35], "address": [10, 13, 14, 15, 18, 19, 20, 21, 22, 23, 25, 26, 32, 36], "str": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 24, 27, 30], "checksumaddress": [10, 11, 13, 15, 17], "contract_typ": [10, 13, 15, 22, 26], "contracttyp": [10, 11, 13, 15], "none": [10, 11, 12, 13, 14, 15, 16, 17, 18, 27, 36], "txn_hash": [10, 11, 13, 14, 15, 37], "abi": [10, 11, 13, 14, 15, 16, 18, 21, 36, 37], "list": [10, 11, 12, 13, 14, 15, 17, 18, 20, 21, 22, 24, 25, 27, 28, 30, 34, 36], "constructorabi": [10, 11, 13, 14, 15, 18], "fallbackabi": [10, 15], "receiveabi": [10, 15], "methodabi": [10, 11, 13, 14, 15, 18], "eventabi": [10, 11, 13, 15, 18], "errorabi": [10, 13, 14, 15], "structabi": [10, 13, 15], "unprocessedabi": [10, 15], "dict": [10, 11, 12, 13, 14, 15, 16, 17, 18, 23, 24], "contractinst": [10, 11, 13, 15, 24, 37], "face": [10, 14], "class": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 30, 34], "instanti": [10, 21], "projectmanag": [10, 13, 15, 23, 36], "current": [10, 11, 12, 13, 15, 18, 30, 31], "accountmanag": [10, 15, 23], "chain": [10, 11, 14, 16, 18, 23, 24, 25, 30, 34, 35], "chainmanag": [10, 14, 15, 23, 36], "disconnect": [10, 11, 15, 20, 30, 36], "connect": [10, 11, 14, 15, 20, 22, 27, 28, 35, 36, 37], "blockchain": [10, 11, 14, 15, 16, 19, 24, 28, 30, 34, 36], "activ": [10, 11, 12, 13, 15, 23, 24, 35, 36], "purpos": [10, 11, 15, 17, 19, 22, 25, 29], "control": [10, 11, 15, 19, 20, 30, 35, 36, 37], "state": [10, 11, 13, 15, 19, 24], "handi": [10, 15], "about": [10, 11, 14, 15, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37], "compilermanag": [10, 15], "len": [10, 15], "registered_compil": [10, 15], "configmanag": [10, 11, 15, 16], "convert": [10, 12, 14, 18, 23, 24], "valu": [10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 23, 24, 25, 26, 28, 29, 30, 34, 36, 37], "tupl": [10, 13, 15, 16, 17, 18], "convers": [10, 11, 16], "function": [10, 11, 12, 13, 15, 17, 18, 19, 20, 24, 25, 30], "conversionmanag": [10, 15], "networkmanag": [10, 15, 23, 36], "revert": [10, 11, 14, 15, 18, 30, 36], "catch": 10, "expect": [10, 13, 15, 36, 37], "logic": [10, 11, 14, 15, 24, 27, 30], "resembl": 10, "rais": [10, 11, 14, 15, 18, 30, 36], "accountapi": [11, 12, 15, 16, 19, 20, 24, 27], "base": [11, 12, 13, 14, 15, 17, 18, 19, 22, 25, 27, 28, 30, 35, 36, 37], "baseinterfacemodel": [11, 13, 15, 18], "baseaddress": [11, 13, 15], "repres": [11, 12, 15, 16, 17, 18, 30, 36, 37], "__dir__": [11, 13], "ipython": [11, 13, 23, 34, 37], "tab": [11, 13], "complet": [11, 13, 15, 18, 35, 36], "return": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 30, 32, 36, 37], "properti": [11, 13, 14, 15, 17, 18, 19, 20, 24, 27, 30, 37], "shorten": [11, 15], "quicker": 11, "access": [11, 12, 13, 14, 15, 16, 18, 19, 20, 23, 24, 26, 27, 30, 31, 33, 35, 36, 37], "txn": [11, 14, 25, 30, 37], "transactionapi": [11, 13, 14, 15], "send_everyth": 11, "bool": [11, 12, 13, 14, 15, 17, 18, 19, 36], "fals": [11, 12, 13, 15, 17, 18, 36], "signer_opt": 11, "receiptapi": [11, 13, 14, 15, 24, 25, 37], "accountserror": [11, 14], "nonc": [11, 13, 15], "invalid": [11, 15, 17, 36], "sender": [11, 13, 15, 21, 24, 31, 32, 33, 36, 37], "doe": [11, 12, 13, 14, 15, 18, 20, 22, 24, 27, 30, 34, 36, 37], "enough": [11, 24], "fund": [11, 14, 19, 24, 36], "transactionerror": [11, 14], "neg": [11, 15], "signatureerror": [11, 14], "sign": [11, 14, 17], "apinotimplementederror": [11, 14], "set": [11, 12, 13, 15, 16, 17, 18, 19, 22, 23, 25, 26, 27, 29, 30, 31, 36, 37], "true": [11, 12, 14, 15, 18, 19, 20, 21, 24, 26, 30, 33, 36, 37], "support": [11, 15, 17, 18, 25, 28, 30, 32, 34, 37], "paramet": [11, 13, 14, 15, 16, 17, 18, 30, 36], "invok": [11, 12, 13, 15, 20, 23, 24, 36, 37], "send": [11, 14, 24, 30, 37], "differ": [11, 13, 15, 22, 26, 27, 28, 30, 32, 36], "balanc": [11, 13, 19, 23, 24, 36], "fee": [11, 25, 30], "send_private_transact": 11, "addit": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 26, 30, 37], "kwarg": [11, 12, 13, 14, 15, 17, 18, 19, 20, 24, 27, 30, 33, 36, 37], "signer": [11, 17, 19, 20, 24], "modifi": [11, 12, 17, 18, 23, 24, 30], "check_signatur": [11, 19], "signablemessag": [11, 17], "eip712messag": [11, 19], "int": [11, 13, 14, 15, 16, 17, 18, 19], "signatur": [11, 13, 24], "messagesignatur": [11, 17], "verifi": [11, 31], "messag": [11, 12, 14, 17, 18, 23, 27, 29, 30, 36], "wa": [11, 14, 15, 17, 18, 21, 24, 30], "union": [11, 12, 15, 17, 18], "noqa": [11, 15], "e501": [11, 15], "check": [11, 13, 15, 17, 18, 19, 24, 26, 32, 34, 36], "need": [11, 12, 15, 17, 18, 19, 20, 22, 23, 24, 26, 27, 30, 34, 35, 36, 37], "first": [11, 13, 15, 19, 20, 23, 24, 25, 26, 30, 33, 35], "otherwis": [11, 13, 15, 16, 17, 22, 23, 26, 30, 37], "declar": [11, 15, 22, 27, 37], "contractcontain": [11, 13, 15, 24], "deploi": [11, 13, 15, 21, 25, 26, 33, 34, 36, 37], "blueprint": [11, 15], "For": [11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 33, 34, 35, 36, 37], "evm": [11, 15, 24, 30], "like": [11, 13, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30, 31, 34, 36, 37], "mean": [11, 13, 19, 20, 36, 37], "eip": [11, 15, 17, 30, 32, 33, 37], "5202": [11, 15], "which": [11, 12, 13, 15, 16, 17, 18, 19, 22, 24, 25, 27, 30, 33, 36, 37], "implement": [11, 12, 14, 15, 16, 18, 19, 20, 26, 30, 32], "contain": [11, 12, 13, 15, 16, 17, 18, 21, 24, 30, 31, 33, 34, 36], "receipt": [11, 13, 15, 24, 30, 36, 37], "smart": [11, 13, 14, 17, 24, 31, 33, 34, 36, 37], "befor": [11, 13, 15, 18, 20, 24, 30, 35, 36, 37], "attempt": [11, 14, 26, 27, 32, 36], "verif": [11, 13], "instanc": [11, 13, 15, 17, 18, 20, 21, 22, 24, 33, 35, 36, 37], "prepare_transact": 11, "cannot": [11, 12, 34, 36, 37], "afford": 11, "prepar": 11, "abstract": [11, 14, 18, 24, 27, 30], "sign_messag": [11, 19], "msg": [11, 12, 17, 24, 36], "handl": [11, 14, 16, 18, 20, 23, 30], "variou": [11, 28, 32, 37], "keyfileaccount": [11, 16, 20], "byte": [11, 13, 15, 17, 18, 24], "correspond": [11, 13, 15, 17, 20, 30, 36], "sign_transact": 11, "mai": [11, 12, 13, 15, 17, 18, 19, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 34, 36, 37], "input": [11, 12, 13, 14, 18], "howev": [11, 13, 15, 19, 22, 24, 26, 27, 28, 30, 32, 35, 36, 37], "properli": [11, 15, 27], "here": [11, 16, 19, 20, 21, 22, 24, 27, 28, 30, 31, 34, 35, 36], "meant": [11, 17, 30], "execut": [11, 12, 13, 15, 17, 20, 23, 24, 29, 31, 35, 36], "wish": [11, 19, 21, 29, 30, 33], "transfer": [11, 24, 36], "addresstyp": [11, 13, 14, 15, 17], "receiv": [11, 15, 19, 24, 36], "amount": [11, 13, 15, 24, 25, 30, 37], "extra": [11, 18, 19, 26], "typic": [11, 15, 17, 19, 21, 27, 30, 36], "rpc": [11, 22, 24], "eth_sendprivatetransact": [11, 24], "achiev": [11, 24, 26, 30], "ignor": [11, 15, 26, 27], "accountcontainerapi": [11, 15, 16], "data_fold": [11, 15], "account_typ": [11, 12, 16, 20], "collect": [11, 12, 14, 15, 17], "__contains__": [11, 15], "indexerror": [11, 14, 15, 18], "__delitem__": [11, 15], "delet": [11, 15, 26, 27], "notimplementerror": 11, "overridden": [11, 14], "within": [11, 14, 18, 25, 27, 34, 35, 36], "__getitem__": [11, 15, 18], "get": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 24, 26, 30, 33, 34, 35, 36, 37], "__len__": [11, 15], "iter": [11, 13, 14, 15, 16], "over": [11, 15], "alias": [11, 12, 15, 20], "append": [11, 15, 18, 21], "add": [11, 12, 14, 15, 20, 21, 22, 23, 24, 26, 27, 28, 30, 34, 35, 36, 37], "alreadi": [11, 12, 14, 15, 19, 20, 23, 24, 26, 30, 33], "remov": [11, 15, 18, 34, 36], "known": [11, 13, 15, 18, 20], "impersonatedaccount": 11, "raw_address": 11, "subclass": [11, 12, 13, 15, 16, 18], "testaccountapi": [11, 19], "generateddevaccount": [11, 18], "directli": [11, 13, 15, 19, 20, 21, 24, 25, 26, 30], "how": [11, 12, 15, 18, 19, 21, 24, 25, 26, 30, 34, 35, 36, 37], "thei": [11, 13, 15, 16, 18, 23, 24, 26, 27, 29, 30, 35], "up": [11, 15, 18, 20, 22, 23, 30, 31, 34, 36, 37], "fixtur": [11, 15, 19, 30], "testaccountcontainerapi": 11, "gener": [11, 12, 15, 17, 18, 19, 21, 24, 26, 29, 30, 33, 34, 36], "generate_account": 11, "new": [11, 13, 15, 18, 20, 26, 30, 34], "we": [11, 15, 17, 18, 19, 20, 24, 25, 27, 30, 34, 35, 36, 37], "know": [11, 17, 20, 21, 24, 26, 27, 30, 36], "eoa": 11, "doesn": [11, 17], "person": [11, 19], "raw": [11, 15, 17, 21, 30], "baseinterfac": [11, 18], "total": [11, 13, 15, 17], "code": [11, 12, 14, 15, 17, 20, 24, 26, 27, 33, 36], "hexbyt": [11, 15, 17, 24], "codes": 11, "histori": [11, 15, 24, 25], "accounthistori": [11, 15], "ha": [11, 13, 14, 18, 24, 25, 33, 36, 37], "made": [11, 15, 22, 24, 25], "is_contract": 11, "associ": [11, 13, 15], "compilerapi": [11, 15, 16, 27, 28], "compiler_set": 11, "languag": [11, 24, 28, 34], "solid": [11, 15, 16, 21, 22, 24, 27, 28, 36], "vyper": [11, 16, 21, 24, 28, 32, 34, 36], "repositori": [11, 18], "contract_filepath": [11, 15], "sequenc": [11, 12, 15, 18], "base_path": [11, 14, 15], "sourc": [11, 12, 13, 14, 15, 17, 23, 24, 25, 26, 27, 28, 31, 32, 33, 34, 36], "pathlib": [11, 12, 15, 18, 21], "directori": [11, 12, 15, 18, 19, 22, 23, 25, 26, 27, 28, 30, 31, 33, 34, 35, 36], "via": [11, 12, 13, 14, 15, 16, 19, 22, 24, 26, 27, 30, 35, 36], "adhoc": [11, 12, 15, 21], "pluginconfig": [11, 15, 16], "enrich_error": [11, 15], "err": [11, 14, 15], "contractlogicerror": [11, 14, 15, 36], "enrich": [11, 15], "pc": [11, 15, 17], "locat": [11, 15, 17, 21, 22, 27, 30, 36], "runtim": [11, 12, 15], "get_vers": 11, "all_path": 11, "retriev": [11, 15, 18, 24, 32], "combin": [11, 15, 30, 36], "supports_source_trac": 11, "abl": [11, 15, 18, 19, 21, 24, 32, 36, 37], "traceback": 11, "trace": [11, 14, 15, 17, 18, 24, 36], "configenum": 11, "enum": [11, 12], "limit": [11, 12, 22, 30], "item": [11, 14, 15, 16, 17, 18, 23, 24, 26, 27, 35], "color": [11, 18, 29], "red": [11, 14, 29], "blue": [11, 29, 37], "green": [11, 29], "rather": [11, 15, 22, 26, 36], "than": [11, 13, 15, 17, 20, 22, 26, 30, 36, 37], "arbitrari": 11, "usag": [11, 12, 13, 15, 16, 17, 18, 19, 23, 27, 36, 37], "myenum": 11, "foo": [11, 12, 15, 18, 24, 30, 36], "bar": [11, 12, 18, 30, 36, 37], "myconfig": 11, "my_enum": 11, "model": [11, 15, 17, 18, 37], "genericconfig": 11, "configdict": [11, 18], "special": [11, 16, 19, 26], "_case_sensit": [11, 15], "_env_prefix": [11, 15], "_env_fil": [11, 15], "dotenvtyp": [11, 15], "posixpath": [11, 15], "_env_file_encod": [11, 15], "_env_nested_delimit": [11, 15], "_secrets_dir": [11, 15], "baseset": 11, "converterapi": [11, 15, 16], "convertedtyp": 11, "throw": [11, 15, 18], "conversionerror": [11, 14, 15], "fail": [11, 12, 14, 15, 18, 24, 26, 27, 30, 36], "is_convert": [11, 15], "string": [11, 12, 14, 15, 16, 17, 18, 19, 22, 24, 30, 36], "explorerapi": [11, 15, 16, 33], "networkapi": [11, 14, 15, 16], "particular": [11, 15, 36], "get_address_url": 11, "url": [11, 15, 22], "get_contract_typ": 11, "been": [11, 15, 17, 18, 36], "get_transaction_url": 11, "transaction_hash": [11, 15, 17], "hash": [11, 13, 15, 17, 23], "publish_contract": [11, 33], "ecosystemapi": [11, 15, 16, 28, 30], "request_head": [11, 15], "fee_token_symbol": 11, "fee_token_decim": 11, "18": 11, "extraattributesmixin": [11, 18], "relat": [11, 14, 15, 16], "__ape_extra_attributes__": 11, "extramodelattribut": [11, 18], "suppli": [11, 36], "attribut": [11, 13, 15, 18, 24], "__getattr__": [11, 13, 15, 18], "seri": 11, "add_network": 11, "network_nam": [11, 15, 35], "attach": [11, 12], "e": [11, 15, 18, 19, 22, 24, 26, 30, 36], "g": [11, 15, 18, 19, 22, 24, 26, 30, 36], "l2": 11, "optim": [11, 30, 36], "networkerror": [11, 14, 15], "create_transact": 11, "everyth": [11, 27], "initi": [11, 13, 15, 17, 23, 24, 25, 32, 35], "custom_network": 11, "custom": [11, 12, 14, 15, 17, 19, 20, 21, 22, 23, 27, 29], "where": [11, 13, 15, 18, 19, 20, 25, 26, 30, 32, 36, 37], "unspecifi": 11, "classmethod": [11, 14, 15], "decode_address": 11, "hashstr20": [11, 17], "hashbytes20": [11, 17], "nativ": 11, "rawaddress": [11, 17], "decode_block": 11, "blockapi": [11, 15, 25], "decod": [11, 13, 14, 18, 30], "dictionari": [11, 15, 17, 18, 24, 36], "decode_calldata": 11, "calldata": [11, 13, 24], "map": [11, 13, 14, 15, 16, 18, 24, 36], "anonym": 11, "stringifi": [11, 13, 24], "index": [11, 13, 17, 18, 20, 22, 24, 36], "decode_log": [11, 37], "event": [11, 13, 14, 17, 24, 37], "contractlog": [11, 13, 15, 17, 25, 37], "match": [11, 12, 13, 15, 17, 18, 30, 36], "definit": [11, 15, 30], "decode_receipt": 11, "decode_returndata": 11, "raw_data": 11, "default_network_nam": 11, "encode_address": 11, "integ": [11, 15], "encode_calldata": 11, "encod": [11, 17, 30], "encode_deploy": 11, "deployment_bytecod": 11, "other": [11, 12, 15, 17, 18, 19, 20, 23, 24, 28, 30, 31, 36, 37], "constructor": [11, 13, 24, 33], "interfac": [11, 15, 16, 21, 27, 30, 32, 35, 36], "encode_transact": 11, "addition": [11, 15, 20, 26, 28, 30, 34, 37], "updat": [11, 18, 36], "enrich_calltre": 11, "calltreenod": 11, "enhanc": 11, "help": [11, 12, 13, 18, 19, 22, 23, 26, 27, 28, 30, 34, 36], "decim": [11, 36], "token": [11, 26, 30, 36, 37], "symbol": [11, 23, 30, 37], "currenc": 11, "pai": 11, "eth": [11, 19, 23, 24, 25, 30, 34, 36], "get_method_selector": 11, "selector": [11, 13, 24, 36], "keccak": 11, "eth_pydantic_typ": [11, 24], "myecosystem": 11, "def": [11, 12, 15, 16, 18, 19, 20, 23, 24, 27, 29, 30, 35, 36, 37], "self": [11, 13, 15, 18, 20, 24, 27, 36], "simpl": [11, 22, 24, 37], "calcul": [11, 17], "get_network": [11, 35], "networknotfounderror": [11, 14], "present": [11, 15, 26], "get_network_data": 11, "ad": [11, 14, 15, 18, 19, 20, 23, 30, 36], "opinion": [11, 15], "order": [11, 15, 19, 20, 24], "nice": [11, 14, 15], "translat": [11, 15], "get_proxy_info": [11, 15], "proxyinfoapi": [11, 15], "pattern": [11, 18, 26, 30], "same": [11, 13, 15, 17, 18, 19, 24, 27, 30, 34, 36, 37], "shareabl": 11, "header": [11, 17], "request": [11, 16, 22, 26, 29, 30], "serialize_transact": 11, "serial": [11, 17], "set_default_network": 11, "switch": [11, 30, 35, 36], "forkednetworkapi": 11, "upstream_chain_id": 11, "id": [11, 13, 14, 15, 17, 21, 24, 26, 30], "upstream": 11, "alwai": [11, 21, 22, 24, 26, 35], "some": [11, 17, 19, 24, 28, 30, 36, 37], "while": [11, 14, 15, 26, 36], "regardless": [11, 23, 30, 37], "upstream_network": 11, "being": [11, 14, 17, 23], "upstream_provid": 11, "upstreamprovid": 11, "your": [11, 12, 13, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37], "under": [11, 15, 18, 19, 21, 35], "one": [11, 12, 13, 15, 16, 17, 19, 20, 22, 23, 26, 27, 30, 34, 36, 37], "use_upstream_provid": 11, "providercontextmanag": [11, 15, 30, 35], "wrapper": [11, 13, 14, 21], "around": [11, 13, 14, 21], "auto_gas_multipli": 11, "float": [11, 15, 17], "multipli": [11, 22, 30], "estim": [11, 15, 18, 22, 30, 36], "ga": [11, 14, 18, 22, 24, 30], "tx": [11, 24, 37], "insur": [11, 22], "base_fee_multipli": [11, 30], "appli": [11, 15, 27, 36, 37], "block_tim": [11, 13, 15, 30], "approxim": 11, "take": [11, 12, 20, 22, 24, 30, 35, 36], "block": [11, 13, 14, 15, 16, 17, 18, 22, 23, 27], "mine": [11, 15], "15": [11, 30], "chain_id": [11, 14, 15, 23, 30, 35], "unless": [11, 12, 13, 15, 29, 30], "providerapi": [11, 12, 15, 16, 18, 27, 28, 37], "default_provider_nam": 11, "get_provid": 11, "provider_nam": [11, 14, 15, 35], "provider_set": [11, 15], "is_adhoc": 11, "mostli": 11, "unknown": [11, 14, 15, 30], "is_dev": 11, "is_fork": 11, "is_loc": 11, "network_id": 11, "infura": [11, 16, 22, 25, 27, 30, 34], "alchemi": [11, 16, 20, 22, 28, 30, 35, 37], "partial": 11, "conveni": [11, 15], "required_confirm": [11, 13, 15], "recommend": [11, 15, 19, 20, 26, 30, 34, 35], "wait": [11, 13, 15, 30], "consid": [11, 15, 18, 30], "sinc": [11, 17, 24], "set_default_provid": 11, "found": [11, 13, 14, 15, 18, 19, 20, 21, 24, 26, 27, 30, 35, 36], "transaction_acceptance_timeout": [11, 30, 37], "accept": [11, 12, 19, 30, 33], "two": [11, 15, 19, 22, 27, 30, 34, 36, 37], "minut": [11, 30, 37], "smaller": 11, "timeout": [11, 14, 18], "use_default_provid": [11, 30], "disconnect_aft": [11, 15, 30], "temporarili": [11, 15], "enter": [11, 19, 29, 30, 36], "context": [11, 12, 14, 15, 17, 18, 19, 23, 27, 35, 36], "exit": [11, 15, 23, 36], "multipl": [11, 12, 17, 18, 26, 34], "whatev": [11, 30], "end": [11, 12, 13, 15, 18, 30, 36], "so": [11, 15, 19, 24, 26, 27, 30, 32, 36], "multi": [11, 18, 30], "scenario": [11, 13, 36], "use_provid": [11, 15, 30, 34, 35, 36], "disconnect_on_exit": [11, 15], "temporari": [11, 15, 30], "whether": [11, 12, 13, 15, 17, 18, 19, 30], "python": [11, 13, 15, 17, 21, 23, 24, 27, 30, 31, 33, 34, 35, 36], "verify_chain_id": 11, "networkmismatcherror": [11, 14], "hardcod": 11, "manageraccessmixin": [11, 12, 13, 18], "And": [11, 20, 30, 36], "providerpai": 11, "case": [11, 13, 14, 15, 20, 21, 22, 24, 26, 27, 30, 32, 35, 36], "veri": [11, 30], "Or": [11, 21, 23, 24, 27, 28], "choic": [11, 15, 20, 30], "parse_network_choic": [11, 15, 30, 36], "empti": [11, 16, 17, 18, 36], "target": [11, 16, 18, 32], "basemodel": [11, 17, 18], "create_network_typ": 11, "easili": [11, 30, 37], "dependencyapi": [11, 15, 16, 26], "contracts_fold": [11, 15, 21, 22, 26], "exclud": [11, 15, 17, 18, 21, 26, 36], "json": [11, 15, 16, 17, 18, 24, 26], "lock": [11, 15, 21, 36], "build": [11, 15, 33, 35, 36], "config_overrid": [11, 15, 26], "ipf": 11, "cached_manifest": 11, "packagemanifest": [11, 15, 16, 26, 33], "valid": [11, 15, 16, 17, 19, 30], "use_cach": [11, 15], "By": [11, 15, 21, 35, 37], "lazili": 11, "look": [11, 13, 15, 18, 20, 21, 22, 23, 27, 31, 36, 37], "glob": [11, 26], "extract_manifest": [11, 15], "presum": [11, 15], "project_manag": [11, 15], "get_project": [11, 15], "dynam": [11, 15], "correct": [11, 12, 15, 30, 36], "projectapi": [11, 15, 16], "structur": [11, 15, 17, 18, 19, 31, 35], "instal": [11, 14, 15, 19, 21, 22, 24, 25, 27, 30, 31, 35, 36], "uri": [11, 15, 22, 30], "omit": [11, 15, 20, 30, 37], "latest": [11, 13, 15, 17, 18, 23, 30, 34, 37], "version_id": [11, 15], "sub": [11, 12, 15], "most": [11, 13, 15, 19, 20, 22, 29, 30, 34], "often": [11, 13, 15, 24, 26], "config_file_nam": [11, 15], "work": [11, 13, 15, 16, 18, 24, 25, 26, 27, 28, 30, 34, 35, 36, 37], "extend": [11, 12, 20, 28, 31], "non": [11, 13, 14, 17, 18, 23, 29, 30], "add_compiler_data": 11, "compiler_data": [11, 15], "ethpm_typ": [11, 15, 17], "full": [11, 15, 18, 30, 36], "manifest_cachefil": 11, "create_manifest": [11, 15], "clear": [11, 15], "is_valid": [11, 15], "figur": [11, 15, 24], "out": [11, 14, 15, 18, 19, 23, 24, 26, 28, 30, 36], "best": [11, 15, 30, 34, 35], "share": [11, 17, 18, 30, 36], "upload": 11, "anoth": [11, 14, 15, 17, 30, 36, 37], "process_config_fil": [11, 15], "process": [11, 15, 16, 18, 24, 27], "had": [11, 15], "replace_manifest": 11, "replac": [11, 18, 30], "entir": [11, 24, 27, 30, 36], "update_manifest": 11, "part": [11, 15, 18, 20, 27, 30, 34, 36], "field": [11, 17, 18, 26, 28, 36], "whe": 11, "num_transact": 11, "parenthash": 11, "0x0000000000000000000000000000000000000000000000000000000000000000": 11, "timestamp": [11, 15, 17, 18, 23, 36], "its": [11, 12, 13, 14, 15, 16, 17, 18, 21, 22, 23, 24, 26, 27, 29, 30, 33, 36, 37], "block_page_s": 11, "100": [11, 36, 37], "concurr": [11, 15], "4": [11, 15, 22, 23, 24, 26, 30, 36, 37], "hardhat": [11, 22, 28, 30, 36, 37], "base_fe": [11, 15, 37], "minimum": [11, 15], "next": [11, 15, 30], "1559": [11, 15, 30, 37], "notimplementederror": [11, 14, 15, 37], "fetch": [11, 15, 24, 25, 30, 37], "respons": [11, 15, 16, 17, 18, 30], "particularli": 11, "across": [11, 15, 22, 23, 26, 30], "rang": [11, 13, 15], "chainlist": [11, 15], "comprehens": [11, 15], "mani": [11, 12, 25, 28, 30], "parallel": [11, 18], "thread": [11, 15, 18], "connection_id": 11, "uniqu": [11, 15, 17, 24, 30, 37], "identifi": [11, 13, 15, 24, 30, 36], "especi": 11, "dev": [11, 14, 15, 17, 24, 36, 37], "connection_str": [11, 15], "ipc": 11, "tear": 11, "down": [11, 17, 18, 34], "quit": [11, 13], "estimate_gas_cost": [11, 37], "block_id": [11, 14], "hexstr": [11, 17], "liter": [11, 17], "earliest": [11, 13, 15, 17], "pend": [11, 13, 15, 17, 30, 36], "cost": [11, 15, 24], "blockid": [11, 14, 17], "past": [11, 15, 22], "report": [11, 17, 30], "smallest": 11, "unit": 11, "wei": 11, "max": [11, 15, 22, 30, 36, 37], "maximum": [11, 22, 30], "gas_pric": [11, 15, 37], "price": [11, 15, 36], "what": [11, 15, 16, 19, 20, 23, 26, 27, 30, 35, 36], "pre": [11, 13, 18, 19, 21, 23, 34], "get_bal": 11, "get_block": [11, 23, 30], "blocknotfounderror": [11, 14], "get_cod": 11, "previou": [11, 15], "contractcod": 11, "get_contract_log": 11, "log_filt": 11, "logfilt": 11, "topic": [11, 13, 24, 31], "get_nonc": 11, "get_receipt": [11, 15, 37], "might": [11, 23, 37], "get_transactions_by_block": 11, "get_virtual_machine_error": 11, "virtualmachineerror": [11, 14], "virtual": [11, 14, 34], "machin": [11, 14, 15], "client": [11, 18], "went": 11, "wrong": [11, 14], "http_uri": 11, "is_connect": [11, 20], "max_ga": 11, "network_choic": [11, 15, 35], "priority_fe": [11, 37], "miner": [11, 37], "tip": 11, "incentiv": 11, "them": [11, 16, 19, 21, 23, 24, 26, 27, 30, 31, 35, 36], "send_cal": 11, "immedi": [11, 23, 30], "without": [11, 18, 19, 23, 24, 28, 30, 35, 37], "histor": [11, 13, 15], "point": [11, 15, 17, 18, 20, 26, 27, 32, 35, 36], "prior": [11, 15, 27], "through": [11, 13, 18, 25, 27, 33], "mempool": [11, 24], "send_transact": 11, "supports_trac": 11, "update_set": 11, "new_set": 11, "port": 11, "reconnect": 11, "ws_uri": 11, "wss": 11, "subprocessprovid": [11, 14], "process_wait_timeout": 11, "popen": 11, "is_stop": 11, "stdout_queu": 11, "joinablequeu": [11, 18], "stderr_queu": 11, "ganach": 11, "build_command": 11, "pass": [11, 12, 15, 18, 19, 20, 26, 27, 36, 37], "task": [11, 18, 36], "stop": [11, 13, 15, 20, 36], "process_nam": 11, "20": [11, 25, 29, 30, 37], "readi": [11, 15, 17], "kill": 11, "testproviderapi": 11, "snapshot": [11, 14, 15, 18], "num_block": [11, 15], "advanc": [11, 25], "allot": 11, "snapshot_id": [11, 14, 15], "regress": [11, 15], "go": [11, 15, 30], "set_timestamp": 11, "new_timestamp": 11, "record": [11, 15], "intent": [11, 15], "later": [11, 15, 36], "snapshotid": [11, 14, 15, 18], "contract_address": [11, 14, 17], "block_numb": [11, 13, 15, 17], "gas_us": [11, 24], "statu": 11, "await_confirm": 11, "now": [11, 19, 22, 26, 27, 30, 36], "contractev": [11, 13, 37], "contractlogcontain": 11, "were": [11, 15, 22, 24, 30, 36], "emit": [11, 17, 37], "method_cal": 11, "produc": [11, 17], "raise_for_statu": 11, "noreturn": [11, 12], "regard": 11, "transactionstatusenum": 11, "ran_out_of_ga": 11, "ran": [11, 14, 31, 36], "gas_limit": [11, 22, 30], "return_valu": [11, 24], "obtain": [11, 24, 36], "final": [11, 15, 18, 36], "total_fees_paid": [11, 25], "paid": [11, 25], "tracefram": [11, 14], "track_coverag": 11, "track": [11, 15, 17, 24, 36], "coverag": 11, "els": [11, 13, 15, 18, 29, 30, 35, 36], "level": [11, 12, 24, 27, 29, 30, 34], "track_ga": 11, "chainid": 11, "0x": [11, 15, 18, 24, 32], "max_fe": [11, 37], "max_priority_fe": [11, 37], "transactionsignatur": [11, 17], "schema": [11, 17], "permit": 11, "total_transfer_valu": 11, "could": [11, 23, 24], "determin": [11, 13, 15, 32], "submit": [11, 24], "accounttransactionqueri": [11, 15], "column": [11, 13, 15, 17], "start_nonc": [11, 15], "stop_nonc": [11, 15], "_basequeri": 11, "querytyp": [11, 15], "blockqueri": [11, 15], "start_block": [11, 13, 15, 25], "stop_block": [11, 13, 15, 25], "step": [11, 13, 15, 33], "_baseblockqueri": 11, "blocktransactionqueri": [11, 15], "insid": [11, 18, 25], "contractcreationqueri": [11, 15], "contracteventqueri": [11, 15], "search_top": [11, 13], "member": 11, "contractmethodqueri": [11, 15], "method_arg": 11, "queryapi": [11, 15, 16], "estimate_queri": [11, 15], "millisecond": [11, 15, 17, 18], "indic": [11, 15, 18, 24, 29], "engin": [11, 13, 14, 15], "unabl": [11, 14, 15, 21], "perform_queri": [11, 15], "perform": [11, 13, 15, 17, 19, 24], "update_cach": 11, "chanc": [11, 30, 34], "noth": [11, 14], "store": [11, 15, 18, 19, 24, 25], "namespac": [12, 15, 16, 27, 31, 35], "extens": [12, 15, 16, 23, 27, 33, 36], "reusabl": 12, "common": [12, 18, 22, 26, 27, 30, 31, 37], "resourc": [12, 15], "well": [12, 15, 16, 17, 18, 24, 27, 28, 31], "contract_file_paths_argu": 12, "callback": 12, "flatten": [12, 15], "existing_alias_argu": [12, 20, 27], "callabl": [12, 16, 18, 20], "non_existing_alias_argu": [12, 20], "yet": [12, 20, 27, 28, 35, 36], "accountaliaspromptchoic": 12, "prompt_messag": 12, "promptchoic": 12, "lessen": 12, "hard": [12, 18], "param": [12, 20], "ctx": 12, "miss": [12, 15, 17, 18, 36], "It": [12, 16, 19, 20, 24, 25, 27, 29, 30, 35, 36, 37], "compat": [12, 17], "certain": [12, 36, 37], "situat": 12, "descript": [12, 15, 27, 32], "arriv": 12, "print_choic": 12, "echo": [12, 20, 27, 35], "select_account": [12, 20], "networkchoic": 12, "case_sensit": 12, "base_typ": 12, "network_opt": [12, 20, 35], "get_metavar": 12, "metavar": 12, "outputformat": 12, "subset": [12, 15, 17], "output_format_choic": 12, "rich": 12, "text": [12, 14, 19], "view": [12, 13, 15, 24, 37], "standard": [12, 25, 26, 29, 32], "paramtyp": 12, "choice_callback": 12, "get_user_selected_choic": 12, "cmd": [12, 20, 30], "__expected_": 12, "get_user_selected_account": [12, 20], "deprec": [12, 15], "pick": 12, "want": [12, 15, 19, 21, 22, 24, 25, 26, 27, 29, 30, 33, 34, 36], "_outside_": 12, "account_opt": [12, 20], "connectedprovidercommand": [12, 20, 30, 35], "durat": [12, 15, 24], "right": [12, 36], "wai": [12, 15, 19, 22, 23, 24, 26, 30, 32, 34, 36, 37], "parse_arg": 12, "parser": [12, 16], "pars": [12, 15, 18, 20], "make_context": 12, "networkboundcommand": 12, "apeclicontextobject": [12, 20], "ape_cli_context": [12, 20, 35], "static": [12, 30], "abort": [12, 14, 20], "base_error": 12, "invoc": [12, 36], "preserv": 12, "stack": [12, 14], "networkopt": 12, "meth": 12, "anyth": [12, 20, 24, 27, 29], "default_log_level": 12, "obj_typ": [12, 20], "featur": [12, 19, 20, 22, 24, 25, 36], "verbosity_opt": 12, "contract_opt": 12, "contracterror": 12, "In": [12, 15, 17, 19, 20, 21, 22, 23, 24, 25, 30, 32, 34, 36, 37], "incompatible_with": 12, "incompatible_opt": 12, "factori": [12, 15, 24], "enforc": 12, "incompat": 12, "cl": [12, 18, 20, 35], "other_opt": 12, "auto": [12, 17, 19, 22, 30, 36], "normal": [12, 18, 28, 32], "output_format_opt": 12, "skip_confirmation_opt": 12, "skip": [12, 19, 26], "cli_logg": 12, "apelogg": 12, "decor": [12, 16, 18, 24, 27, 35, 36], "allfilepath": 12, "encourag": 12, "consist": 12, "path_typ": 12, "contracttypewrapp": 13, "decode_input": [13, 24], "prefix": [13, 14, 20, 22, 23, 24, 26, 28], "detect": [13, 14, 32], "find": [13, 14, 15, 17, 18, 19, 26, 27, 32, 36], "along": [13, 26], "identifier_lookup": [13, 24], "selector_identifi": [13, 24], "source_path": [13, 15], "belong": 13, "cross": 13, "source_id": [13, 15, 17], "That": [13, 24, 37], "necessarili": [13, 37], "mycontract": [13, 15, 21, 22, 24, 25, 31, 33, 36, 37], "__call__": 13, "handler": [13, 24, 37], "c": 13, "attr_nam": [13, 15], "vote": 13, "impli": 13, "call_view_method": 13, "method_nam": [13, 36], "get_error_by_signatur": 13, "customerror": [13, 14], "similar": [13, 27, 30, 36], "get_event_by_signatur": [13, 37], "come": [13, 15, 18, 19, 21, 23, 24, 26, 28, 29, 30, 31, 34, 36], "respect": [13, 15], "invoke_transact": 13, "contract_contain": [13, 15], "assum": [13, 15, 24, 30, 33, 35, 36, 37], "real": [13, 19, 37], "my_contract": [13, 24, 32, 36], "0xabc1230001112223334445566611855443322111": 13, "thing": [13, 20, 27, 30, 35], "actual": [13, 17, 24, 36], "my_event_typ": 13, "myevent": 13, "mockcontractlog": [13, 17], "__iter__": [13, 15], "occur": [13, 14, 15, 18, 29, 32, 36], "from_receipt": [13, 37], "poll_log": 13, "new_block_timeout": [13, 15], "daemon": [13, 15, 18], "new_log": 13, "print": [13, 14, 15, 20, 24, 26, 30, 35, 37], "futur": [13, 15], "never": [13, 15, 17, 19, 36], "yield": [13, 15, 16, 27, 36], "less": [13, 15, 29], "reorg": [13, 15], "10": [13, 15, 18, 21, 22, 29, 30], "50": [13, 15, 37], "live": [13, 15, 24, 37], "engine_to_us": [13, 15], "datafram": [13, 15], "last": [13, 15, 18, 24, 25, 36], "bypass": [13, 15, 26], "algorithm": [13, 15], "pd": [13, 15], "start_or_stop": [13, 15], "extra_address": 13, "search": [13, 18], "desir": 13, "deleg": [13, 15, 18, 32], "apeexcept": 14, "clickexcept": 14, "problem": 14, "aliasalreadyinuseerror": 14, "apeattributeerror": [14, 15], "projecterror": [14, 15], "attributeerror": [14, 37], "try": [14, 15, 18, 27, 35, 36], "apeindexerror": 14, "argumentslengtherror": 14, "arguments_length": 14, "contractdataerror": 14, "reason": [14, 30, 36], "providererror": 14, "chainerror": [14, 15], "compilererror": [14, 15], "configerror": 14, "issu": [14, 29, 34], "alik": 14, "revert_messag": 14, "source_traceback": 14, "sourcetraceback": 14, "base_err": 14, "assert": [14, 19, 24, 30, 36, 37], "statement": [14, 17, 36], "dev_messag": 14, "valueerror": [14, 15], "from_error": 14, "whenev": [14, 18], "possibl": [14, 15, 16, 18, 19, 30], "contractnotfounderror": [14, 15], "has_explor": 14, "decodingerror": 14, "ecosystemnotfounderror": 14, "methodnonpayableerror": 14, "payabl": [14, 24, 36], "outofgaserror": 14, "becaus": [14, 19, 24, 26, 27, 30, 35, 36], "providernotconnectederror": [14, 15, 18], "providernotfounderror": 14, "queryengineerror": [14, 15], "rpctimeouterror": 14, "subprocesstimeouterror": 14, "subprocesserror": 14, "whilst": 14, "exce": [14, 37], "inspir": [14, 17], "transactionnotfounderror": 14, "error_messsag": 14, "unknownsnapshoterror": [14, 15], "unknownversionerror": 14, "handle_ape_except": 14, "relev": [14, 17, 31], "frame": 14, "exc": 14, "someth": [14, 23, 30, 36, 37], "treat": [15, 24], "singleton": [15, 16], "root": [15, 18, 19, 20, 22, 23, 24, 28, 31, 36], "my_account": [15, 20, 26], "everi": [15, 17, 18, 29, 30, 32], "get_accounts_by_typ": 15, "type_": 15, "test_account": [15, 18, 19, 21, 36], "testaccountmanag": [15, 36], "These": [15, 24, 36], "subject": 15, "section": [15, 18, 20, 22, 24, 26, 30, 35, 36], "test_my_contract": [15, 36], "accountsmanag": 15, "testaccountcontain": 15, "account_id": 15, "slice": 15, "account_str": 15, "x": [15, 36, 37], "singl": [15, 18, 20, 24, 26, 35], "hood": [15, 19], "can_trace_sourc": 15, "filenam": 15, "both": [15, 16, 17, 18, 20, 23, 24, 27, 30, 34, 37], "trace_sourc": 15, "traceabl": 15, "sol": [15, 21, 26, 31, 36], "collis": [15, 24], "ensur": [15, 16, 17, 24, 30, 36], "compile_sourc": [15, 21], "compiler_nam": 15, "program": [15, 17], "fallback": 15, "statemut": [15, 24], "nonpay": [15, 24], "ethpm": [15, 33], "contractnam": [15, 21], "flatten_contract": 15, "content": [15, 18, 26], "get_import": 15, "import_source_id": 15, "get_refer": 15, "imports_dict": 15, "entri": [15, 27, 30], "referring_source_id": 15, "transactionhistori": 15, "txn_receipt": 15, "revert_to_block": 15, "outgo": 15, "short": [15, 29, 30, 32, 36], "circuit": 15, "greater": [15, 17], "contractcach": 15, "memori": [15, 18], "per": 15, "perman": [15, 18, 25], "disk": [15, 19], "faster": 15, "__setitem__": 15, "ecosystem_nam": [15, 35], "cache_blueprint": 15, "blueprint_id": 15, "would": [15, 19, 20, 25, 26, 30, 34, 35, 36], "starknet": [15, 28, 30, 36], "cache_deploy": 15, "contract_inst": [15, 25], "cache_proxy_info": 15, "proxy_info": 15, "proxyinfo": 15, "clear_local_cach": 15, "reset": 15, "blank": 15, "get_blueprint": 15, "get_contain": 15, "wrap": [15, 18], "get_creation_receipt": 15, "creation": [15, 20], "get_deploy": [15, 24], "read": [15, 20, 24, 30, 34], "_local_deployments_map": 15, "written": 15, "deployments_map": 15, "get_multipl": 15, "min": [15, 36, 37], "instance_at": 15, "typeerror": [15, 18], "en": [15, 16, 22, 24, 28], "domain": [15, 24], "instance_from_receipt": 15, "blockcontain": 15, "latest_block": 15, "head": [15, 23], "move": 15, "backward": 15, "height": 15, "poll_block": 15, "reorgan": 15, "even": [15, 29, 30], "previous": [15, 24, 26, 27, 36], "new_block": 15, "length": [15, 18, 19], "similarli": [15, 19, 20, 21, 24, 27, 36], "just": [15, 20, 24, 26, 30, 34], "mimic": 15, "behavior": [15, 29, 30], "built": [15, 27, 34, 36], "increment": [15, 17], "isol": [15, 36], "owner": [15, 21, 24, 25, 28, 36, 37], "foobar": [15, 28, 35], "deltatim": 15, "AND": 15, "design": [15, 17, 27], "begin": [15, 24], "pending_timestamp": [15, 36], "epoch": 15, "3600": 15, "restor": 15, "recent": 15, "project_fold": 15, "meta": 15, "packagemeta": 15, "author": [15, 24, 36], "licens": [15, 36], "keyword": [15, 23, 30], "link": [15, 36], "deploymentconfigcollect": 15, "default_ecosystem": [15, 22, 30], "parametr": 15, "test_mnemon": 15, "get_config": 15, "home": [15, 19, 22, 23, 25, 30, 34], "plugin_nam": 15, "force_reload": 15, "metadata": [15, 18], "using_project": 15, "project_path": 15, "contracts_path": 15, "my_project": 15, "deploymentconfig": 15, "rootmodelroottyp": 15, "pydanticundefin": 15, "accountintconvert": 15, "addressapiconvert": 15, "bytesaddressconvert": 15, "gwei": [15, 37], "appropri": 15, "long": [15, 27, 29], "is_typ": 15, "checksum": [15, 17], "against": [15, 16, 31, 36], "hexaddressconvert": 15, "hexconvert": 15, "hexintconvert": 15, "hex": [15, 18, 24], "intaddressconvert": 15, "stringintconvert": 15, "timestampconvert": 15, "datetim": 15, "timedelta": 15, "No": [15, 30], "timezon": 15, "utc": 15, "system": [15, 18, 19, 24, 25, 27, 30], "granular": 15, "active_provid": [15, 23], "create_custom_provid": 15, "provider_cl": 15, "ape_ethereum": [15, 24, 27], "ethereumnodeprovid": 15, "guess": 15, "set_default_ecosystem": 15, "get_ecosystem": 15, "get_network_choic": 15, "form": [15, 18, 24, 29, 36], "appear": [15, 18], "get_provider_from_choic": 15, "network_data": 15, "networks_yaml": 15, "load_contract": 15, "uniniti": 15, "mycontracttyp": 15, "mycontacttyp": 15, "To": [15, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37], "contractnamespac": 15, "__str__": 15, "mention": [15, 27, 30], "extensions_with_missing_compil": 15, "recurs": 15, "extract": 15, "get_compiler_data": 15, "compile_if_need": 15, "get_contract": [15, 24], "contract_nam": [15, 17, 36], "keyerror": 15, "interfaces_fold": 15, "lookup_path": 15, "key_contract_path": 15, "give": [15, 19, 20, 26, 32, 35], "helloworld": [15, 35], "absolut": [15, 18, 22], "2678": [15, 33], "project_typ": 15, "apeproject": [15, 16], "scripts_fold": 15, "sources_miss": 15, "anywher": [15, 24, 29], "tests_fold": 15, "track_deploy": [15, 33], "upon": [15, 24, 26, 33], "public": [15, 24, 36], "tracked_deploy": 15, "bip122uri": 15, "explicitli": [15, 17, 21, 36], "githubdepend": 15, "openzeppelin": [15, 18, 22, 26, 32], "organ": [15, 18, 27, 28, 33, 34], "follow": [15, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "dapphub": [15, 26], "erc20": [15, 26], "Will": [15, 20, 34], "localdepend": 15, "npmdepend": 15, "npm": 15, "safe": [15, 32], "gnosi": [15, 26, 32], "14": 15, "version_from_json": 15, "version_from_local_json": 15, "baseproject": 15, "brownieproject": 15, "browni": 15, "defaultqueryprovid": 15, "querymanag": [15, 23], "biggest_block_s": 15, "inaccess": 15, "plugin_typ": 16, "plugintyp": 16, "hookimpl_kwarg": 16, "accountplugin": 16, "accountcontain": 16, "pluggy_patch": 16, "There": [16, 19, 20, 22, 24, 26, 28, 30, 34, 35, 36, 37], "sever": [16, 20], "ecosystemplugin": 16, "hook": [16, 27], "registr": [16, 27], "overal": 16, "conform": [16, 18, 27], "much": [16, 21, 36, 37], "plugin_manag": 16, "pluggi": 16, "_manag": 16, "pluginmanag": 16, "own": [16, 22, 26, 29, 34, 36], "compilerplugin": 16, "register_compil": 16, "interfacecompil": 16, "document": [16, 19, 22], "config_class": 16, "deconstruct": 16, "inject": [16, 18], "mypluginconfig": 16, "conversionplugin": 16, "mweiconvers": 16, "explorerplugin": 16, "explor": [16, 24, 32], "etherscan": [16, 24, 28, 30], "myblockexplor": 16, "networkplugin": 16, "ropsten": 16, "happen": [16, 21, 24, 26, 30, 36], "soon": [16, 26], "shibachain": 16, "shibanetwork": 16, "providerplugin": [16, 27], "myprovid": [16, 27], "dependencyplugin": 16, "projectplugin": 16, "resolv": [16, 32], "gitmodul": 16, "queryplugin": 16, "query_engin": 16, "postgresengin": 16, "represent": [17, 23, 31], "bodi": 17, "namedtupl": 17, "191": 17, "compon": 17, "signabl": 17, "easi": [17, 20, 24, 34, 36], "origin": [17, 26, 34, 37], "think": 17, "712": 17, "hand": [17, 24], "encode_": 17, "modul": [17, 18, 23, 24, 29], "encode_structured_data": 17, "encode_intended_valid": 17, "encode_defunct": [17, 19], "r": [17, 36], "_signatur": 17, "ecdsa": 17, "vr": 17, "recover_sign": [17, 19], "sig": 17, "contractcoverag": 17, "functioncoverag": 17, "individu": [17, 28], "function_hit": 17, "hit": 17, "counter": 17, "zero": [17, 18, 36], "function_r": 17, "rate": [17, 30], "versu": [17, 22], "line_r": 17, "divid": 17, "lines_cov": 17, "lines_valid": 17, "miss_count": 17, "model_dump": 17, "pydant": [17, 18], "concept": [17, 36], "modelmodel_dump": 17, "mode": [17, 36], "to_python": 17, "serializ": 17, "by_alia": 17, "exclude_unset": 17, "exclude_default": 17, "exclude_non": 17, "round_trip": 17, "enabl": [17, 19, 24, 34, 36], "deseri": 17, "round": 17, "trip": 17, "encount": 17, "coveragestat": 17, "contractsourcecoverag": 17, "cover": [17, 24, 36], "total_funct": 17, "coverageproject": 17, "coveragereport": 17, "source_fold": 17, "get_html": 17, "get_xml": 17, "xml": [17, 36], "codecov": 17, "thu": [17, 20, 24, 30, 35, 36], "slightli": 17, "convent": [17, 22], "90": 17, "java": 17, "won": [17, 30, 36], "super": 17, "hit_count": 17, "dure": [17, 21, 26, 29, 35, 36], "segment": 17, "ast": 17, "occupi": 17, "builtin": 17, "mark": [17, 29, 36], "endlin": 17, "endcolumn": 17, "exact": [17, 36], "full_nam": 17, "contact": 17, "separ": [17, 19, 24, 27, 36], "getter": [17, 36], "profile_stat": 17, "profil": [17, 36], "accumul": 17, "sourcestat": 17, "detail": [17, 31, 34], "basecontractlog": 17, "event_nam": 17, "0x0000000000000000000000000000000000000000": 17, "event_argu": 17, "block_hash": 17, "log_index": 17, "transaction_index": 17, "unix": [17, 18], "lookup": [17, 36], "posit": [17, 36], "mock": [17, 26, 36], "compar": 17, "inherit": 17, "equal": [17, 18, 19, 37], "comparison": 17, "abc": 18, "model_config": 18, "classvar": 18, "arbitrary_types_allow": 18, "model_field": 18, "fieldinfo": 18, "__fields__": 18, "v1": [18, 26], "mixin": 18, "_before_": 18, "include_getattr": 18, "include_getitem": 18, "additional_error_messag": 18, "annot": 18, "nonetyp": 18, "accur": 18, "private_kei": 18, "pair": 18, "junk": [18, 19, 22, 36], "number_of_account": [18, 19, 22, 36], "githubcli": 18, "ape_org": 18, "com": [18, 28, 30, 34], "available_plugin": 18, "ape_plugin_nam": 18, "clone_repo": 18, "repo_path": 18, "target_path": 18, "scheme": 18, "git": [18, 26, 28], "ssh": 18, "download_packag": 18, "filesystem": 18, "get_releas": 18, "gitreleas": 18, "releas": [18, 25, 26, 28, 34], "get_repo": 18, "maxsiz": 18, "queue": 18, "join": [18, 34], "borrow": 18, "librari": [18, 19, 24, 27], "until": [18, 30], "gotten": 18, "unfinish": 18, "goe": [18, 30], "consum": 18, "task_don": 18, "unblock": 18, "struct": 18, "structpars": 18, "method_abi": 18, "decode_output": 18, "alter": [18, 23], "arrai": 18, "applic": [18, 26, 37], "default_nam": 18, "unnam": 18, "encode_input": [18, 24], "tracestyl": 18, "ff8c00": 18, "d75f00": 18, "gas_cost": 18, "dim": 18, "bright_magenta": 18, "bright_green": 18, "bright_blu": 18, "00afd7": 18, "add_padding_to_str": 18, "str_list": 18, "extra_spac": 18, "space_charact": 18, "space": 18, "pad": 18, "charact": 18, "allow_disconnect": 18, "fn": 18, "return_none_when_disconnect": 18, "try_snapshot": 18, "expand_environment_vari": 18, "substr": 18, "environ": [18, 19, 22, 23, 30, 34], "variabl": [18, 19, 22, 23, 36], "extract_nested_valu": 18, "dig": 18, "nest": 18, "gas_estimation_error_messag": 18, "tx_error": 18, "explan": [18, 31], "explain": [18, 30, 36], "generate_dev_account": 18, "hd_path": [18, 36], "start_index": 18, "genesi": [18, 30], "wallet": 18, "get_all_files_in_directori": 18, "dir_a": 18, "dir_b": 18, "file_a": 18, "file_b": 18, "file_c": 18, "interest": 18, "regex": 18, "get_current_timestamp_m": 18, "get_package_vers": 18, "obj": 18, "__version__": 18, "get_relative_path": 18, "anchor": 18, "comput": [18, 19], "rel": 18, "ancestor": 18, "injected_before_us": 18, "fget": 18, "fset": 18, "fdel": 18, "is_arrai": 18, "abi_typ": [18, 24], "abityp": 18, "probabl": 18, "is_evm_precompil": 18, "is_named_tupl": 18, "output_valu": 18, "is_struct": 18, "is_zero_hex": 18, "load_config": 18, "expand_envar": 18, "must_exist": 18, "oserror": 18, "expand": 18, "pragma_str_to_specifier_set": 18, "pragma_str": 18, "specifierset": 18, "pragma": [18, 36], "raises_not_impl": 18, "returns_arrai": 18, "run_until_complet": 18, "coroutin": 18, "async": 18, "await": 18, "asyncio": 18, "gather": 18, "singledispatchmethod": 18, "func": [18, 36], "dispatch": 18, "descriptor": 18, "generic_method": 18, "spawn": 18, "stream_respons": 18, "download_url": 18, "progress_bar_descript": 18, "progress": 18, "use_temp_sys_path": 18, "sy": 18, "secur": 19, "learn": [19, 21, 22, 24, 27, 28, 30, 31, 32, 33, 34, 35, 36], "ship": [19, 20, 21, 23, 28, 30], "assist": [19, 20, 27], "write": [19, 35, 36], "test_my_contract_method": 19, "prefund": 19, "put": [19, 29], "sole": 19, "generate_test_account": 19, "unfund": 19, "guid": [19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36], "action": [19, 34, 36], "1e18": 19, "ether": [19, 24, 25], "elimin": 19, "use_send": 19, "myfunct": 19, "imperson": [19, 36], "ledger": [19, 27], "trezor": [19, 27], "third": [19, 28], "parti": [19, 28, 34], "let": [19, 21, 23, 24, 30, 36], "premis": 19, "describ": [19, 30], "below": [19, 24, 26, 30, 36], "passphras": 19, "encrypt": 19, "password": 19, "browser": 19, "rest": [19, 27], "maxim": 19, "materi": 19, "entropi": 19, "increas": [19, 34, 36, 37], "n": 19, "altern": [19, 20, 21, 24, 26, 29, 30, 36], "elect": 19, "twice": 19, "sure": [19, 30, 34, 36], "rememb": 19, "hdpath": 19, "wordcount": 19, "togeth": [19, 27], "sai": [19, 24, 30, 37], "metamask": [19, 20], "export": 19, "secret": 19, "recoveri": 19, "d": [19, 36], "Then": [19, 23, 24, 26, 27, 36], "reduc": [19, 30], "repetit": 19, "eth_account": 19, "hello": [19, 35], "intention": 19, "decid": 19, "abov": [19, 24, 29, 30, 35, 36, 37], "eip712": 19, "eip712typ": 19, "mail": 19, "_chainid_": 19, "uint256": [19, 24, 36, 37], "_name_": 19, "_verifyingcontract_": 19, "0xcccccccccccccccccccccccccccccccccccccccc": 19, "_version_": 19, "alic": 19, "0xcd2a3d9f938e13cd947ec05abc7fe734df8dd826": 19, "bob": 19, "0xb0b0b0b0b0b0b000000000000000000000000000": 19, "recov": 19, "recovered_sign": 19, "ci": [19, 24], "cd": 19, "programmat": 19, "ape_accounts_": 19, "_passphras": 19, "subsequ": 19, "set_autosign": 19, "highli": 19, "approach": [19, 30, 35, 36], "avoid": [19, 24, 34, 35], "accident": 19, "leak": 19, "framework": [20, 24, 26, 29, 31, 34, 36, 37], "coupl": 20, "area": [20, 36], "showcas": 20, "endeavor": 20, "etc": 20, "logger": [20, 29], "gracefulli": 20, "cli_ctx": [20, 27, 35], "account_manag": 20, "bad": 20, "mymanag": 20, "my": [20, 24, 25, 26, 27, 30], "customcontext": 20, "my_manag": 20, "foundri": [20, 24, 30, 36], "leav": [20, 26, 36], "semi": 20, "colon": [20, 36], "cmd_2": 20, "afterward": [20, 36], "rare": 20, "peopl": 20, "index_of_test_account": 20, "matter": [20, 30], "alon": 20, "visa": 20, "versa": [20, 24], "delete_account": 20, "create_account": 20, "boolean": 20, "ape_account": 20, "application_prefix": 20, "foo_bar": 20, "cli_0": 20, "lambda": 20, "startswith": 20, "cli_1": 20, "me": [20, 37], "me2": 20, "selected_account": 20, "edit": [21, 22, 27, 28, 30], "src": [21, 22, 26], "myinterfac": 21, "my_interfac": 21, "0x1234556b5ed9202110d7ecd637a4581db8b9879f": 21, "my_method": [21, 24, 32, 36], "elsewher": [21, 22], "unwil": 21, "artifact": 21, "binari": 21, "larger": 21, "adjust": [21, 30, 31, 36], "vy": [21, 31, 36], "tsconfig": 21, "retain": 21, "use_depend": 21, "3": [21, 23, 24, 25, 26, 34, 36, 37], "7": [21, 28, 36], "8": [21, 34, 36], "get_compil": 21, "place": [22, 26, 30, 35, 36], "global": [22, 30, 36], "preced": 22, "prefer": 22, "serv": 22, "alphabet": 22, "facilit": 22, "easier": 22, "fulli": [22, 24], "outsid": 22, "globalcontract": 22, "fantom": [22, 28, 30, 36], "0x5fbdb2315678afecb367f032d93f642f64180aa3": 22, "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512": 22, "localhost": [22, 27], "5030": 22, "whole": 22, "default_network": [22, 30], "mainnet_fork": 22, "default_provid": [22, 30], "numer": [22, 29, 30], "16": [22, 30], "1234": [22, 30], "0x1234": [22, 30], "eth_estimatega": 22, "shouldn": 22, "0b2": 22, "1647323479": 23, "reflect": 23, "61": 23, "ape_console_extra": 23, "intern": [23, 36], "underscor": [23, 35], "_": [23, 35], "eth_util": 23, "encode_hex": 23, "decode_hex": 23, "getattr": 23, "weth_address": 23, "14388241": 23, "0x68f768988e9bd4be971d527f72483f321975fa52aff9692b6d0e0af71fb77aaf": 23, "ape_init_extra": 23, "web3": [23, 27, 34], "close": 23, "reopen": 23, "autoreload": 23, "ape_consol": 23, "embed": 23, "load_ext": 23, "h": 23, "databas": [23, 25], "okai": [23, 27], "human": 23, "readabl": [23, 36], "metamask0": 23, "00040634": 23, "0xe3747e6341e0d3430e6ea9e2346cddcc2f8a4b5b": 23, "mysmartcontract": 24, "__init__": [24, 27], "arg1": 24, "arg2": 24, "pleas": [24, 34, 37], "basic": 24, "contract2": 24, "higher": [24, 30, 36], "why": [24, 30, 37], "notic": [24, 30, 31, 35, 36], "complex": [24, 31], "possibli": 24, "repeat": 24, "fashion": 24, "perhap": 24, "simpli": 24, "copi": 24, "review": 24, "mere": [24, 27], "onc": [24, 26, 27, 30, 33, 36], "top": [24, 27, 36], "0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45": 24, "v2": 24, "registri": [24, 27], "ychad": 24, "keep": [24, 27, 36], "On": [24, 25], "rinkebi": 24, "pure": 24, "extern": [24, 36], "get_static_list": 24, "dynarrai": 24, "set_numb": 24, "num": 24, "prevnumb": 24, "mynumb": 24, "monei": 24, "storag": 24, "At": [24, 36], "eth_cal": 24, "eth_sendtransact": 24, "eth_sendrawtransact": 24, "demonstr": [24, 35, 36, 37], "123": [24, 33], "successfulli": [24, 33], "vice": 24, "addbal": 24, "new_bal": 24, "simul": [24, 30, 31], "forward": 24, "measur": 24, "getmodifiedbal": 24, "analyz": 24, "0x123": [24, 33], "40000": 24, "0x3fb5c1cb00000000000000000000000000000000000000000000000000000000000000de": 24, "bytes_valu": 24, "3fb5c1c": 24, "selector_str": 24, "input_dict": 24, "unit256": 24, "method_id": 24, "usdc": 24, "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": 24, "0x70a08231": 24, "balanceof": [24, 36, 37], "0x27e235e3": 24, "dump": 24, "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef": 24, "multical": 24, "multicall3": 24, "0xf4b8a02d4e8d76070bd7092b54d2cbbe90fa72e9": 24, "0x80067013d7f7af4e86b3890489acafe79f31a4cb": 24, "pool": 24, "ipool": 24, "getreserv": 24, "applydiscount": 24, "acct": [24, 25, 37], "larg": [25, 30], "rout": 25, "our": [25, 27, 34, 35, 36], "incorpor": 25, "few": [25, 26, 36], "df": 25, "stuff": [25, 29, 30], "sum": 25, "sent": [25, 30], "foohappen": 25, "beta": 25, "constant": 25, "plan": 25, "stage": 25, "sqlite": 25, "tabl": [25, 36, 37], "dataclass": 25, "contract_ev": 25, "untouch": 26, "box": [26, 28, 30, 36], "still": [26, 32, 36, 37], "highlight": 26, "zeppelin": 26, "offici": 26, "uniswap": 26, "v3": 26, "retri": [26, 30], "mydepend": 26, "suitabl": 26, "sometim": [26, 30, 36], "node_modul": 26, "myorg": 26, "v4": 26, "6": [26, 28, 36], "vault": 26, "master": [26, 34], "v0": 26, "gh": 26, "abbrevi": 26, "backend": 26, "guidelin": 26, "dapptoolserc20": 26, "dappnix": 26, "evm_vers": 26, "pari": 26, "involv": 26, "import_remap": 26, "erc721": 26, "dependency_contract": 26, "my_depend": 26, "dependencycontracttyp": 26, "deployed_contract": 26, "include_depend": 26, "ape_": 27, "ape_cli_subcommand": 27, "setup": [27, 36], "intend": 27, "tokenlist": 27, "As": [27, 30, 36], "primarili": 27, "team": 27, "good": 27, "qualiti": 27, "compos": [27, 34], "benefit": 27, "interchang": 27, "httpprovid": 27, "_web3": 27, "1337": [27, 37], "finish": 27, "ti": 27, "site": [27, 34], "loop": 27, "potenti": [27, 29, 30], "ones": [27, 37], "accord": 27, "_cli": 27, "my_sub_cmd": 27, "subcommand": 27, "entrypoint": 27, "entry_point": 27, "ape_myplugin": 27, "race": 27, "condit": 27, "prevent": 27, "my_cmd": [27, 29], "indiffer": 27, "my_ledger_account": 27, "ledger_0": 27, "my_trezor_account": 27, "trezor_0": 27, "my_script": 27, "my_provider_plugin": 27, "short_help": 27, "off": [27, 36], "my_command": 27, "architectur": 28, "trust": [28, 30], "constraint": 28, "throughout": 29, "21": 29, "30": 29, "yellow": 29, "40": 29, "shown": 29, "loglevel": 29, "set_level": 29, "arbitrum": 30, "tester": [30, 36], "discuss": [30, 36], "triplet": 30, "polygon": [30, 35], "anvil": [30, 36], "altogeth": 30, "commonli": 30, "testnet": [30, 35], "cut": 30, "talk": 30, "maintain": 30, "small": 30, "improv": 30, "wherea": 30, "matic": 30, "avalanch": 30, "optmism": 30, "zkevm": 30, "proper": 30, "remaind": 30, "familiar": 30, "109": 30, "shibarium": 30, "base_ecosystem_plugin": 30, "paragraph": 30, "recal": 30, "fro": 30, "closer": 30, "henc": 30, "default_": 30, "remot": 30, "care": [30, 37], "correctli": 30, "likewis": 30, "tell": 30, "apenet": 30, "closest": 30, "www": 30, "shibrpc": 30, "customnetwork": 30, "31337": 30, "rate_limit": 30, "sens": 30, "scan": 30, "api_uri": 30, "consult": 30, "readm": 30, "clarifi": 30, "saw": 30, "default_transaction_typ": 30, "fly": 30, "itself": [30, 31, 36], "integr": 30, "better": 30, "uncommon": 30, "placehold": 30, "unsur": 30, "ident": 30, "ethtest": 30, "ephemer": 30, "strai": 30, "though": 30, "120": 30, "decentr": 30, "max_receipt_retri": 30, "tend": 30, "caus": [30, 36], "reject": 30, "decis": 30, "middl": 30, "start_provid": 30, "jump": [30, 34], "bridg": 30, "continu": 30, "effect": 30, "smart_contract_exampl": 31, "sampl": [31, 36], "test_sampl": 31, "autom": 31, "my_account_alia": 31, "job": 31, "popular": 31, "minim": 32, "1167": 32, "1967": 32, "beacon": 32, "uup": 32, "1822": 32, "9": 32, "create_forwarder_to": 32, "0xsplit": 32, "formerli": 32, "oz": 32, "897": 32, "zeroag": 32, "soladypush0": 32, "push0": 32, "host": 32, "influenc": 33, "walk": 33, "0x12c17f958d2ee523a2206206994597c13d831e34": 33, "With": 34, "ltd": 34, "discord": 34, "server": 34, "stai": 34, "date": 34, "tutori": [34, 37], "technic": 34, "deeper": [34, 36], "understand": [34, 36], "academ": 34, "platform": 34, "challeng": 34, "linux": [34, 36], "maco": [34, 36], "11": 34, "window": 34, "subsystem": 34, "wsl": 34, "python3": 34, "three": [34, 36], "advis": 34, "1558": 34, "virtualenv": 34, "venv": 34, "interf": 34, "o": [34, 37], "env": 34, "homebrew": 34, "instruct": 34, "visit": [34, 37], "dockerhub": 34, "volum": 34, "haramb": 34, "vvm": 34, "solcx": 34, "pwd": 34, "sdk": 34, "interoper": 34, "experi": 34, "3rd": 34, "risk": 34, "bundl": [34, 36], "softwar": 34, "acc0": 34, "acc1": 34, "k": 34, "test_only_one_th": 34, "advantag": 35, "submodul": 35, "world": 35, "subdirectori": 35, "flexibl": 35, "cli_2": 35, "shownet": 35, "ideal": 35, "mumbai": 35, "nm": 35, "network_manag": 35, "hop": 35, "yourself": 35, "therefor": 35, "quick": 35, "workflow": 35, "suppos": 35, "stick": 35, "dist": 36, "cov": 36, "becom": 36, "intuit": 36, "fact": 36, "regular": 36, "test_": 36, "test_add": 36, "left": 36, "divis": 36, "phase": 36, "piec": 36, "encompass": 36, "enact": 36, "behav": 36, "authorized_method": 36, "test_author": 36, "not_own": 36, "set_own": 36, "scope": 36, "disabl": 36, "flow": 36, "dive": 36, "syntax": 36, "exactli": 36, "test_my_method": 36, "sustain": 36, "despit": 36, "vitalik": 36, "0xab5801a7d398351b8be11c439e05c5b3259aec9b": 36, "other_contract": 36, "othercontract": 36, "test_in_futur": 36, "86000": 36, "test_multi_chain": 36, "inspect": 36, "academi": 36, "conftest": 36, "test_mint": 36, "nft": 36, "test_account_bal": 36, "quantiti": 36, "mint": [36, 37], "earlier": 36, "assertionerror": 36, "shorter": 36, "comment": 36, "check_valu": 36, "_valu": 36, "reli": 36, "explictli": 36, "cairo": 36, "due": 36, "_x": 36, "sqrt": 36, "incorrect": 36, "reentri": 36, "nonreentr": 36, "_foo_intern": 36, "introduc": 36, "spdx": 36, "gpl": 36, "unauthor": 36, "unauth_address": 36, "withdraw": 36, "disallow": 36, "hacker": 36, "test_unauthorized_withdraw": 36, "test_unauthor": 36, "test_error_on_deploi": 36, "mycustomerror": 36, "haserror": 36, "rev": 36, "captur": 36, "grab": 36, "isinst": 36, "myerror": 36, "use_network": 36, "marker": 36, "test_my_fantom_test": 36, "test_my_ethereum_test": 36, "mid": 36, "test_my_multichain_test": 36, "stark_contract": 36, "mystarknetcontract": 36, "test_starknet_th": 36, "stark_account": 36, "fundm": 36, "median": [36, 37], "57198": 36, "91398": 36, "82848": 36, "28307": 36, "38679": 36, "33493": 36, "changeonstatu": 36, "23827": 36, "45739": 36, "34783": 36, "getsecret": 36, "24564": 36, "test0": 36, "2400": 36, "9100": 36, "5750": 36, "testcontract": 36, "setnumb": 36, "51021": 36, "debug_": 36, "mocktoken": 36, "poolcontract": 36, "reset_": 36, "comma": 36, "interv": 36, "press": 36, "ctrl": 36, "undo": 36, "stmt": 36, "85": 36, "71": 36, "80": 36, "htmlcov": 36, "__builtin__": 36, "_immutable_numb": 36, "_number": 36, "foo_method": 36, "view_method": 36, "distinguish": 36, "myaccount": 37, "shell": 37, "contract_method_defined_in_contract": 37, "depth": 37, "apeacademi": 37, "london": 37, "got": 37, "broken": 37, "fundmycontract": 37, "prioriti": 37, "beforehand": 37, "plu": 37, "priorit": 37, "highest": 37, "0x00": 37, "0x0": 37, "fooevent": 37, "barev": 37, "foomethod": 37, "event_typ": 37, "baz": 37, "longer": 37, "600": 37, "show_trac": 37, "methodwithoutargu": 37, "0x43abb1fdadfdae68f84ce8cd2582af6ab02412f686ee2544aa998db662a5ef50": 37, "0x1e59ce931b4cfea3fe4b875411e280e173cb7a9c": 37, "contracta": 37, "7a9c": 37, "469604": 37, "superclust": 37, "234444": 37, "23523523235235": 37, "11111111111": 37, "345345347789999991": 37, "99999998888882": 37, "345457847457457458457457457": 37, "92222229999998888882": 37, "3454": 37, "111145345347789999991": 37, "333399998888882": 37, "234545457847457457458457457457": 37, "461506": 37, "methodb1": 37, "lolol": 37, "ic": 37, "cream": 37, "dynamo": 37, "402067": 37, "contractc": 37, "getsomelist": 37, "3425311345134513461345134534531452345": 37, "111344445534535353": 37, "993453434534534534534977788884443333": 37, "370103": 37, "methodc1": 37, "windows95": 37, "simpler": 37, "jamaica": 37, "cardin": 37, "363869": 37, "callm": 37, "233432": 37, "methodb2": 37, "trombon": 37, "231951": 37, "paperwork": 37, "countri": 37, "wing": 37, "227360": 37, "222263": 37, "methodc2": 37, "147236": 37, "122016": 37, "addresstovalu": 37, "100305": 37, "bandpractic": 37, "94270": 37, "lemondrop": 37, "92321": 37, "86501": 37, "82729": 37, "snitches_get_stich": 37, "111": 37, "55252": 37, "52079": 37, "48306": 37, "0x053cba5c12172654d894f66d5670bab6215517a94189a9ffc09bc40a589ec04d": 37, "show_gas_report": 37, "dai": 37, "1302": 37, "13028": 37, "1377": 37, "approv": 37, "22414": 37, "burn": 37, "11946": 37, "25845": 37, "contract_a": 37, "methodtocal": 37, "txn_cost": 37, "mymutablemethod": 37, "view_cost": 37, "myviewmethod": 37}, "objects": {"": [[10, 0, 0, "-", "ape"]], "ape": [[10, 1, 1, "", "Contract"], [10, 2, 1, "", "Project"], [10, 3, 1, "", "accounts"], [10, 3, 1, "", "chain"], [10, 3, 1, "", "compilers"], [10, 3, 1, "", "config"], [10, 1, 1, "", "convert"], [14, 0, 0, "-", "exceptions"], [10, 3, 1, "", "networks"], [16, 0, 0, "-", "plugins"], [10, 3, 1, "", "project"], [10, 2, 1, "", "reverts"], [17, 0, 0, "-", "types"], [18, 0, 0, "-", "utils"]], "ape.api": [[11, 0, 0, "-", "accounts"], [11, 0, 0, "-", "address"], [11, 0, 0, "-", "compiler"], [11, 0, 0, "-", "config"], [11, 0, 0, "-", "convert"], [11, 0, 0, "-", "explorers"], [11, 0, 0, "-", "networks"], [11, 0, 0, "-", "projects"], [11, 0, 0, "-", "providers"], [11, 0, 0, "-", "query"]], "ape.api.accounts": [[11, 4, 1, "", "AccountAPI"], [11, 4, 1, "", "AccountContainerAPI"], [11, 4, 1, "", "ImpersonatedAccount"], [11, 4, 1, "", "TestAccountAPI"], [11, 4, 1, "", "TestAccountContainerAPI"]], "ape.api.accounts.AccountAPI": [[11, 5, 1, "", "__dir__"], [11, 6, 1, "", "alias"], [11, 5, 1, "", "call"], [11, 5, 1, "", "check_signature"], [11, 5, 1, "", "declare"], [11, 5, 1, "", "deploy"], [11, 5, 1, "", "prepare_transaction"], [11, 5, 1, "", "sign_message"], [11, 5, 1, "", "sign_transaction"], [11, 5, 1, "", "transfer"]], "ape.api.accounts.AccountContainerAPI": [[11, 5, 1, "", "__contains__"], [11, 5, 1, "", "__delitem__"], [11, 5, 1, "", "__getitem__"], [11, 5, 1, "", "__len__"], [11, 6, 1, "", "accounts"], [11, 6, 1, "", "aliases"], [11, 5, 1, "", "append"], [11, 5, 1, "", "remove"]], "ape.api.accounts.ImpersonatedAccount": [[11, 6, 1, "", "address"], [11, 5, 1, "", "call"], [11, 5, 1, "", "sign_message"], [11, 5, 1, "", "sign_transaction"]], "ape.api.accounts.TestAccountContainerAPI": [[11, 5, 1, "", "generate_account"]], "ape.api.address": [[11, 4, 1, "", "Address"], [11, 4, 1, "", "BaseAddress"]], "ape.api.address.Address": [[11, 6, 1, "", "address"]], "ape.api.address.BaseAddress": [[11, 6, 1, "", "address"], [11, 6, 1, "", "balance"], [11, 6, 1, "", "code"], [11, 6, 1, "", "codesize"], [11, 6, 1, "", "history"], [11, 6, 1, "", "is_contract"], [11, 6, 1, "", "nonce"]], "ape.api.compiler": [[11, 4, 1, "", "CompilerAPI"]], "ape.api.compiler.CompilerAPI": [[11, 5, 1, "", "compile"], [11, 2, 1, "", "compiler_settings"], [11, 6, 1, "", "config"], [11, 5, 1, "", "enrich_error"], [11, 5, 1, "", "get_versions"], [11, 6, 1, "", "name"], [11, 6, 1, "", "settings"], [11, 6, 1, "", "supports_source_tracing"]], "ape.api.config": [[11, 4, 1, "", "ConfigEnum"], [11, 4, 1, "", "GenericConfig"], [11, 4, 1, "", "PluginConfig"]], "ape.api.convert": [[11, 4, 1, "", "ConverterAPI"]], "ape.api.convert.ConverterAPI": [[11, 5, 1, "", "convert"], [11, 5, 1, "", "is_convertible"]], "ape.api.explorers": [[11, 4, 1, "", "ExplorerAPI"]], "ape.api.explorers.ExplorerAPI": [[11, 5, 1, "", "get_address_url"], [11, 5, 1, "", "get_contract_type"], [11, 5, 1, "", "get_transaction_url"], [11, 5, 1, "", "publish_contract"]], "ape.api.networks": [[11, 4, 1, "", "EcosystemAPI"], [11, 4, 1, "", "ForkedNetworkAPI"], [11, 4, 1, "", "NetworkAPI"], [11, 4, 1, "", "ProviderContextManager"], [11, 4, 1, "", "ProxyInfoAPI"], [11, 1, 1, "", "create_network_type"]], "ape.api.networks.EcosystemAPI": [[11, 5, 1, "", "__ape_extra_attributes__"], [11, 5, 1, "", "add_network"], [11, 6, 1, "", "config"], [11, 5, 1, "", "create_transaction"], [11, 6, 1, "", "custom_network"], [11, 2, 1, "", "data_folder"], [11, 5, 1, "", "decode_address"], [11, 5, 1, "", "decode_block"], [11, 5, 1, "", "decode_calldata"], [11, 5, 1, "", "decode_logs"], [11, 5, 1, "", "decode_receipt"], [11, 5, 1, "", "decode_returndata"], [11, 6, 1, "", "default_network_name"], [11, 5, 1, "", "encode_address"], [11, 5, 1, "", "encode_calldata"], [11, 5, 1, "", "encode_deployment"], [11, 5, 1, "", "encode_transaction"], [11, 5, 1, "", "enrich_calltree"], [11, 2, 1, "", "fee_token_decimals"], [11, 2, 1, "", "fee_token_symbol"], [11, 5, 1, "", "get_method_selector"], [11, 5, 1, "", "get_network"], [11, 5, 1, "", "get_network_data"], [11, 5, 1, "", "get_proxy_info"], [11, 2, 1, "", "name"], [11, 6, 1, "", "networks"], [11, 2, 1, "", "request_header"], [11, 5, 1, "", "serialize_transaction"], [11, 5, 1, "", "set_default_network"]], "ape.api.networks.ForkedNetworkAPI": [[11, 6, 1, "", "upstream_chain_id"], [11, 6, 1, "", "upstream_network"], [11, 6, 1, "", "upstream_provider"], [11, 5, 1, "", "use_upstream_provider"]], "ape.api.networks.NetworkAPI": [[11, 6, 1, "", "auto_gas_multiplier"], [11, 6, 1, "", "base_fee_multiplier"], [11, 6, 1, "", "block_time"], [11, 6, 1, "", "chain_id"], [11, 6, 1, "", "config"], [11, 2, 1, "", "data_folder"], [11, 6, 1, "", "default_provider_name"], [11, 2, 1, "", "ecosystem"], [11, 6, 1, "", "explorer"], [11, 5, 1, "", "get_provider"], [11, 6, 1, "", "is_adhoc"], [11, 6, 1, "", "is_dev"], [11, 6, 1, "", "is_fork"], [11, 6, 1, "", "is_local"], [11, 2, 1, "", "name"], [11, 6, 1, "", "network_id"], [11, 6, 1, "", "providers"], [11, 5, 1, "", "publish_contract"], [11, 2, 1, "", "request_header"], [11, 6, 1, "", "required_confirmations"], [11, 5, 1, "", "set_default_provider"], [11, 6, 1, "", "transaction_acceptance_timeout"], [11, 5, 1, "", "use_default_provider"], [11, 5, 1, "", "use_provider"], [11, 5, 1, "", "verify_chain_id"]], "ape.api.networks.ProviderContextManager": [[11, 6, 1, "", "empty"]], "ape.api.networks.ProxyInfoAPI": [[11, 2, 1, "", "target"]], "ape.api.projects": [[11, 4, 1, "", "DependencyAPI"], [11, 4, 1, "", "ProjectAPI"]], "ape.api.projects.DependencyAPI": [[11, 6, 1, "", "cached_manifest"], [11, 5, 1, "", "compile"], [11, 2, 1, "", "config_override"], [11, 6, 1, "", "contracts"], [11, 2, 1, "", "contracts_folder"], [11, 2, 1, "", "exclude"], [11, 5, 1, "", "extract_manifest"], [11, 2, 1, "", "name"], [11, 6, 1, "", "uri"], [11, 2, 1, "", "version"], [11, 6, 1, "", "version_id"]], "ape.api.projects.ProjectAPI": [[11, 5, 1, "", "add_compiler_data"], [11, 6, 1, "", "cached_manifest"], [11, 2, 1, "", "contracts_folder"], [11, 5, 1, "", "create_manifest"], [11, 6, 1, "", "is_valid"], [11, 6, 1, "", "manifest_cachefile"], [11, 2, 1, "", "name"], [11, 2, 1, "", "path"], [11, 5, 1, "", "process_config_file"], [11, 5, 1, "", "replace_manifest"], [11, 5, 1, "", "update_manifest"], [11, 2, 1, "", "version"]], "ape.api.providers": [[11, 4, 1, "", "BlockAPI"], [11, 4, 1, "", "ProviderAPI"], [11, 4, 1, "", "SubprocessProvider"], [11, 4, 1, "", "TestProviderAPI"], [11, 4, 1, "", "UpstreamProvider"]], "ape.api.providers.ProviderAPI": [[11, 6, 1, "", "base_fee"], [11, 2, 1, "", "block_page_size"], [11, 6, 1, "", "chain_id"], [11, 2, 1, "", "concurrency"], [11, 6, 1, "", "config"], [11, 5, 1, "", "connect"], [11, 6, 1, "", "connection_id"], [11, 6, 1, "", "connection_str"], [11, 2, 1, "", "data_folder"], [11, 5, 1, "", "disconnect"], [11, 5, 1, "", "estimate_gas_cost"], [11, 6, 1, "", "gas_price"], [11, 5, 1, "", "get_balance"], [11, 5, 1, "", "get_block"], [11, 5, 1, "", "get_code"], [11, 5, 1, "", "get_contract_logs"], [11, 5, 1, "", "get_nonce"], [11, 5, 1, "", "get_receipt"], [11, 5, 1, "", "get_transactions_by_block"], [11, 5, 1, "", "get_virtual_machine_error"], [11, 6, 1, "", "http_uri"], [11, 6, 1, "", "is_connected"], [11, 6, 1, "", "max_gas"], [11, 2, 1, "", "name"], [11, 2, 1, "", "network"], [11, 6, 1, "", "network_choice"], [11, 5, 1, "", "prepare_transaction"], [11, 6, 1, "", "priority_fee"], [11, 2, 1, "", "provider_settings"], [11, 2, 1, "", "request_header"], [11, 5, 1, "", "send_call"], [11, 5, 1, "", "send_private_transaction"], [11, 5, 1, "", "send_transaction"], [11, 6, 1, "", "settings"], [11, 6, 1, "", "supports_tracing"], [11, 5, 1, "", "update_settings"], [11, 6, 1, "", "ws_uri"]], "ape.api.providers.SubprocessProvider": [[11, 5, 1, "", "build_command"], [11, 5, 1, "", "connect"], [11, 6, 1, "", "connection_id"], [11, 5, 1, "", "disconnect"], [11, 6, 1, "", "process_name"], [11, 5, 1, "", "start"], [11, 5, 1, "", "stop"]], "ape.api.providers.TestProviderAPI": [[11, 5, 1, "", "mine"], [11, 5, 1, "", "revert"], [11, 5, 1, "", "set_timestamp"], [11, 5, 1, "", "snapshot"]], "ape.api.query": [[11, 4, 1, "", "AccountTransactionQuery"], [11, 4, 1, "", "BlockQuery"], [11, 4, 1, "", "BlockTransactionQuery"], [11, 4, 1, "", "ContractCreationQuery"], [11, 4, 1, "", "ContractEventQuery"], [11, 4, 1, "", "ContractMethodQuery"], [11, 4, 1, "", "QueryAPI"]], "ape.api.query.QueryAPI": [[11, 5, 1, "", "estimate_query"], [11, 5, 1, "", "perform_query"], [11, 5, 1, "", "update_cache"]], "ape.api.transactions": [[11, 4, 1, "", "ReceiptAPI"], [11, 4, 1, "", "TransactionAPI"]], "ape.api.transactions.ReceiptAPI": [[11, 5, 1, "", "await_confirmations"], [11, 5, 1, "", "decode_logs"], [11, 6, 1, "", "events"], [11, 6, 1, "", "failed"], [11, 6, 1, "", "method_called"], [11, 5, 1, "", "raise_for_status"], [11, 6, 1, "", "ran_out_of_gas"], [11, 6, 1, "", "return_value"], [11, 6, 1, "", "total_fees_paid"], [11, 6, 1, "", "trace"], [11, 5, 1, "", "track_coverage"], [11, 5, 1, "", "track_gas"]], "ape.api.transactions.TransactionAPI": [[11, 6, 1, "", "receipt"], [11, 5, 1, "", "serialize_transaction"], [11, 6, 1, "", "total_transfer_value"], [11, 6, 1, "", "trace"], [11, 6, 1, "", "txn_hash"]], "ape.cli": [[12, 0, 0, "-", "arguments"], [12, 0, 0, "-", "choices"], [12, 0, 0, "-", "commands"], [12, 0, 0, "-", "options"], [12, 0, 0, "-", "paramtype"], [12, 0, 0, "-", "utils"]], "ape.cli.arguments": [[12, 1, 1, "", "contract_file_paths_argument"], [12, 1, 1, "", "existing_alias_argument"], [12, 1, 1, "", "non_existing_alias_argument"]], "ape.cli.choices": [[12, 4, 1, "", "AccountAliasPromptChoice"], [12, 4, 1, "", "Alias"], [12, 4, 1, "", "NetworkChoice"], [12, 4, 1, "", "OutputFormat"], [12, 4, 1, "", "PromptChoice"], [12, 1, 1, "", "get_user_selected_account"], [12, 1, 1, "", "output_format_choice"], [12, 1, 1, "", "select_account"]], "ape.cli.choices.AccountAliasPromptChoice": [[12, 5, 1, "", "convert"], [12, 5, 1, "", "print_choices"], [12, 5, 1, "", "select_account"]], "ape.cli.choices.Alias": [[12, 2, 1, "", "name"]], "ape.cli.choices.NetworkChoice": [[12, 5, 1, "", "convert"], [12, 5, 1, "", "get_metavar"]], "ape.cli.choices.OutputFormat": [[12, 2, 1, "", "TREE"], [12, 2, 1, "", "YAML"]], "ape.cli.choices.PromptChoice": [[12, 5, 1, "", "convert"], [12, 5, 1, "", "print_choices"]], "ape.cli.commands": [[12, 4, 1, "", "ConnectedProviderCommand"], [12, 4, 1, "", "NetworkBoundCommand"]], "ape.cli.commands.ConnectedProviderCommand": [[12, 5, 1, "", "invoke"], [12, 5, 1, "", "parse_args"]], "ape.cli.options": [[12, 4, 1, "", "ApeCliContextObject"], [12, 4, 1, "", "NetworkOption"], [12, 1, 1, "", "account_option"], [12, 1, 1, "", "ape_cli_context"], [12, 1, 1, "", "contract_option"], [12, 1, 1, "", "incompatible_with"], [12, 1, 1, "", "network_option"], [12, 1, 1, "", "output_format_option"], [12, 1, 1, "", "skip_confirmation_option"], [12, 1, 1, "", "verbosity_option"]], "ape.cli.options.ApeCliContextObject": [[12, 5, 1, "", "abort"]], "ape.cli.paramtype": [[12, 4, 1, "", "AllFilePaths"], [12, 4, 1, "", "Path"]], "ape.cli.paramtype.AllFilePaths": [[12, 5, 1, "", "convert"]], "ape.contracts.base": [[13, 4, 1, "", "ContractContainer"], [13, 4, 1, "", "ContractEvent"], [13, 4, 1, "", "ContractInstance"], [13, 4, 1, "", "ContractTypeWrapper"]], "ape.contracts.base.ContractContainer": [[13, 5, 1, "", "__call__"], [13, 5, 1, "", "__getattr__"], [13, 5, 1, "", "at"], [13, 5, 1, "", "deploy"], [13, 6, 1, "", "deployments"]], "ape.contracts.base.ContractEvent": [[13, 5, 1, "", "__call__"], [13, 5, 1, "", "__iter__"], [13, 5, 1, "", "from_receipt"], [13, 6, 1, "", "name"], [13, 5, 1, "", "poll_logs"], [13, 5, 1, "", "query"], [13, 5, 1, "", "range"]], "ape.contracts.base.ContractInstance": [[13, 5, 1, "", "__call__"], [13, 5, 1, "", "__dir__"], [13, 5, 1, "", "__getattr__"], [13, 6, 1, "", "address"], [13, 5, 1, "", "call_view_method"], [13, 5, 1, "", "get_error_by_signature"], [13, 5, 1, "", "get_event_by_signature"], [13, 5, 1, "", "invoke_transaction"], [13, 6, 1, "", "receipt"]], "ape.contracts.base.ContractTypeWrapper": [[13, 5, 1, "", "decode_input"], [13, 6, 1, "", "identifier_lookup"], [13, 6, 1, "", "selector_identifiers"], [13, 6, 1, "", "source_path"]], "ape.exceptions": [[14, 7, 1, "", "APINotImplementedError"], [14, 7, 1, "", "Abort"], [14, 7, 1, "", "AccountsError"], [14, 7, 1, "", "AliasAlreadyInUseError"], [14, 7, 1, "", "ApeAttributeError"], [14, 7, 1, "", "ApeException"], [14, 7, 1, "", "ApeIndexError"], [14, 7, 1, "", "ArgumentsLengthError"], [14, 7, 1, "", "BlockNotFoundError"], [14, 7, 1, "", "ChainError"], [14, 7, 1, "", "CompilerError"], [14, 7, 1, "", "ConfigError"], [14, 7, 1, "", "ContractDataError"], [14, 7, 1, "", "ContractLogicError"], [14, 7, 1, "", "ContractNotFoundError"], [14, 7, 1, "", "ConversionError"], [14, 7, 1, "", "CustomError"], [14, 7, 1, "", "DecodingError"], [14, 7, 1, "", "EcosystemNotFoundError"], [14, 7, 1, "", "MethodNonPayableError"], [14, 7, 1, "", "NetworkError"], [14, 7, 1, "", "NetworkMismatchError"], [14, 7, 1, "", "NetworkNotFoundError"], [14, 7, 1, "", "OutOfGasError"], [14, 7, 1, "", "ProjectError"], [14, 7, 1, "", "ProviderError"], [14, 7, 1, "", "ProviderNotConnectedError"], [14, 7, 1, "", "ProviderNotFoundError"], [14, 7, 1, "", "QueryEngineError"], [14, 7, 1, "", "RPCTimeoutError"], [14, 7, 1, "", "SignatureError"], [14, 7, 1, "", "SubprocessError"], [14, 7, 1, "", "SubprocessTimeoutError"], [14, 7, 1, "", "TransactionError"], [14, 7, 1, "", "TransactionNotFoundError"], [14, 7, 1, "", "UnknownSnapshotError"], [14, 7, 1, "", "UnknownVersionError"], [14, 7, 1, "", "VirtualMachineError"], [14, 1, 1, "", "handle_ape_exception"]], "ape.exceptions.Abort": [[14, 5, 1, "", "show"]], "ape.exceptions.ContractLogicError": [[14, 6, 1, "", "dev_message"], [14, 5, 1, "", "from_error"]], "ape.exceptions.CustomError": [[14, 6, 1, "", "name"]], "ape.managers": [[15, 0, 0, "-", "accounts"], [15, 0, 0, "-", "compilers"], [15, 0, 0, "-", "config"], [15, 0, 0, "-", "converters"], [15, 0, 0, "-", "networks"], [15, 0, 0, "-", "query"]], "ape.managers.accounts": [[15, 4, 1, "", "AccountManager"], [15, 4, 1, "", "TestAccountManager"]], "ape.managers.accounts.AccountManager": [[15, 5, 1, "", "__contains__"], [15, 5, 1, "", "__len__"], [15, 6, 1, "", "aliases"], [15, 6, 1, "", "containers"], [15, 5, 1, "", "get_accounts_by_type"], [15, 5, 1, "", "load"], [15, 6, 1, "", "test_accounts"]], "ape.managers.accounts.TestAccountManager": [[15, 5, 1, "", "__contains__"], [15, 5, 1, "", "__getitem__"], [15, 5, 1, "", "__iter__"], [15, 5, 1, "", "__len__"]], "ape.managers.chain": [[15, 4, 1, "", "AccountHistory"], [15, 4, 1, "", "BlockContainer"], [15, 4, 1, "", "ChainManager"], [15, 4, 1, "", "ContractCache"], [15, 4, 1, "", "TransactionHistory"]], "ape.managers.chain.AccountHistory": [[15, 5, 1, "", "__iter__"], [15, 5, 1, "", "__len__"], [15, 2, 1, "", "address"], [15, 5, 1, "", "append"], [15, 6, 1, "", "outgoing"], [15, 5, 1, "", "query"], [15, 5, 1, "", "revert_to_block"], [15, 2, 1, "", "sessional"]], "ape.managers.chain.BlockContainer": [[15, 5, 1, "", "__getitem__"], [15, 5, 1, "", "__iter__"], [15, 5, 1, "", "__len__"], [15, 6, 1, "", "head"], [15, 6, 1, "", "height"], [15, 5, 1, "", "poll_blocks"], [15, 5, 1, "", "query"], [15, 5, 1, "", "range"]], "ape.managers.chain.ChainManager": [[15, 6, 1, "", "base_fee"], [15, 6, 1, "", "blocks"], [15, 6, 1, "", "chain_id"], [15, 6, 1, "", "gas_price"], [15, 5, 1, "", "get_receipt"], [15, 6, 1, "", "history"], [15, 5, 1, "", "isolate"], [15, 5, 1, "", "mine"], [15, 6, 1, "", "pending_timestamp"], [15, 5, 1, "", "restore"], [15, 5, 1, "", "snapshot"]], "ape.managers.chain.ContractCache": [[15, 5, 1, "", "__delitem__"], [15, 5, 1, "", "__setitem__"], [15, 5, 1, "", "cache_blueprint"], [15, 5, 1, "", "cache_deployment"], [15, 5, 1, "", "cache_proxy_info"], [15, 5, 1, "", "clear_local_caches"], [15, 5, 1, "", "get"], [15, 5, 1, "", "get_blueprint"], [15, 5, 1, "", "get_container"], [15, 5, 1, "", "get_creation_receipt"], [15, 5, 1, "", "get_deployments"], [15, 5, 1, "", "get_multiple"], [15, 5, 1, "", "get_proxy_info"], [15, 5, 1, "", "instance_at"], [15, 5, 1, "", "instance_from_receipt"]], "ape.managers.chain.TransactionHistory": [[15, 5, 1, "", "append"], [15, 5, 1, "", "revert_to_block"]], "ape.managers.compilers": [[15, 4, 1, "", "CompilerManager"]], "ape.managers.compilers.CompilerManager": [[15, 5, 1, "", "can_trace_source"], [15, 5, 1, "", "compile"], [15, 5, 1, "", "compile_source"], [15, 5, 1, "", "enrich_error"], [15, 5, 1, "", "flatten_contract"], [15, 5, 1, "", "get_imports"], [15, 5, 1, "", "get_references"], [15, 6, 1, "", "registered_compilers"]], "ape.managers.config": [[15, 4, 1, "", "ConfigManager"], [15, 4, 1, "", "DeploymentConfig"], [15, 4, 1, "", "DeploymentConfigCollection"]], "ape.managers.config.ConfigManager": [[15, 2, 1, "", "DATA_FOLDER"], [15, 2, 1, "", "PROJECT_FOLDER"], [15, 2, 1, "", "contracts_folder"], [15, 2, 1, "", "default_ecosystem"], [15, 2, 1, "", "dependencies"], [15, 2, 1, "", "deployments"], [15, 5, 1, "", "get_config"], [15, 5, 1, "", "load"], [15, 2, 1, "", "meta"], [15, 2, 1, "", "name"], [15, 5, 1, "", "using_project"], [15, 2, 1, "", "version"]], "ape.managers.converters": [[15, 4, 1, "", "AccountIntConverter"], [15, 4, 1, "", "AddressAPIConverter"], [15, 4, 1, "", "BytesAddressConverter"], [15, 4, 1, "", "ConversionManager"], [15, 4, 1, "", "HexAddressConverter"], [15, 4, 1, "", "HexConverter"], [15, 4, 1, "", "HexIntConverter"], [15, 4, 1, "", "IntAddressConverter"], [15, 4, 1, "", "StringIntConverter"], [15, 4, 1, "", "TimestampConverter"]], "ape.managers.converters.AccountIntConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.AddressAPIConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.BytesAddressConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.ConversionManager": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_type"]], "ape.managers.converters.HexAddressConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.HexConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.HexIntConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.IntAddressConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.StringIntConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.TimestampConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.networks": [[15, 4, 1, "", "NetworkManager"]], "ape.managers.networks.NetworkManager": [[15, 6, 1, "", "active_provider"], [15, 5, 1, "", "create_custom_provider"], [15, 6, 1, "", "default_ecosystem"], [15, 6, 1, "", "ecosystem"], [15, 6, 1, "", "ecosystem_names"], [15, 6, 1, "", "ecosystems"], [15, 5, 1, "", "fork"], [15, 5, 1, "", "get_ecosystem"], [15, 5, 1, "", "get_network_choices"], [15, 5, 1, "", "get_provider_from_choice"], [15, 6, 1, "", "network"], [15, 6, 1, "", "network_data"], [15, 6, 1, "", "network_names"], [15, 6, 1, "", "networks_yaml"], [15, 5, 1, "", "parse_network_choice"], [15, 6, 1, "", "provider_names"], [15, 5, 1, "", "set_default_ecosystem"]], "ape.managers.project": [[15, 0, 0, "-", "dependency"], [15, 0, 0, "-", "manager"]], "ape.managers.project.dependency": [[15, 4, 1, "", "GithubDependency"], [15, 4, 1, "", "LocalDependency"], [15, 4, 1, "", "NpmDependency"]], "ape.managers.project.dependency.GithubDependency": [[15, 5, 1, "", "extract_manifest"], [15, 2, 1, "", "github"], [15, 2, 1, "", "ref"], [15, 6, 1, "", "uri"], [15, 6, 1, "", "version_id"]], "ape.managers.project.dependency.LocalDependency": [[15, 5, 1, "", "extract_manifest"], [15, 6, 1, "", "uri"], [15, 2, 1, "", "version"], [15, 6, 1, "", "version_id"]], "ape.managers.project.dependency.NpmDependency": [[15, 5, 1, "", "extract_manifest"], [15, 2, 1, "", "npm"], [15, 6, 1, "", "uri"], [15, 6, 1, "", "version_from_json"], [15, 6, 1, "", "version_from_local_json"], [15, 6, 1, "", "version_id"]], "ape.managers.project.manager": [[15, 4, 1, "", "ProjectManager"]], "ape.managers.project.manager.ProjectManager": [[15, 5, 1, "", "__getattr__"], [15, 5, 1, "", "__str__"], [15, 6, 1, "", "compiler_data"], [15, 6, 1, "", "contracts"], [15, 6, 1, "", "contracts_folder"], [15, 6, 1, "", "dependencies"], [15, 5, 1, "", "extensions_with_missing_compilers"], [15, 5, 1, "", "extract_manifest"], [15, 5, 1, "", "get_compiler_data"], [15, 5, 1, "", "get_contract"], [15, 5, 1, "", "get_project"], [15, 6, 1, "", "interfaces_folder"], [15, 5, 1, "", "load_contracts"], [15, 5, 1, "", "lookup_path"], [15, 6, 1, "", "meta"], [15, 2, 1, "", "path"], [15, 6, 1, "", "project_types"], [15, 6, 1, "", "scripts_folder"], [15, 6, 1, "", "source_paths"], [15, 6, 1, "", "sources"], [15, 6, 1, "", "sources_missing"], [15, 6, 1, "", "tests_folder"], [15, 5, 1, "", "track_deployment"], [15, 6, 1, "", "tracked_deployments"]], "ape.managers.project.types": [[15, 4, 1, "", "ApeProject"], [15, 4, 1, "", "BaseProject"], [15, 4, 1, "", "BrownieProject"]], "ape.managers.project.types.BaseProject": [[15, 5, 1, "", "create_manifest"], [15, 6, 1, "", "is_valid"], [15, 5, 1, "", "process_config_file"], [15, 6, 1, "", "source_paths"]], "ape.managers.project.types.BrownieProject": [[15, 6, 1, "", "is_valid"], [15, 5, 1, "", "process_config_file"]], "ape.managers.query": [[15, 4, 1, "", "DefaultQueryProvider"], [15, 4, 1, "", "QueryManager"]], "ape.managers.query.DefaultQueryProvider": [[15, 5, 1, "", "estimate_query"], [15, 5, 1, "", "perform_query"]], "ape.managers.query.QueryManager": [[15, 6, 1, "", "engines"], [15, 5, 1, "", "query"]], "ape.plugins": [[16, 0, 0, "-", "account"], [16, 0, 0, "-", "compiler"], [16, 0, 0, "-", "config"], [16, 0, 0, "-", "converter"], [16, 0, 0, "-", "network"], [16, 0, 0, "-", "pluggy_patch"], [16, 0, 0, "-", "project"], [16, 0, 0, "-", "query"], [16, 1, 1, "", "register"]], "ape.plugins.account": [[16, 4, 1, "", "AccountPlugin"]], "ape.plugins.account.AccountPlugin": [[16, 5, 1, "", "account_types"]], "ape.plugins.compiler": [[16, 4, 1, "", "CompilerPlugin"]], "ape.plugins.compiler.CompilerPlugin": [[16, 5, 1, "", "register_compiler"]], "ape.plugins.config": [[16, 4, 1, "", "Config"]], "ape.plugins.config.Config": [[16, 5, 1, "", "config_class"]], "ape.plugins.converter": [[16, 4, 1, "", "ConversionPlugin"]], "ape.plugins.converter.ConversionPlugin": [[16, 5, 1, "", "converters"]], "ape.plugins.network": [[16, 4, 1, "", "EcosystemPlugin"], [16, 4, 1, "", "ExplorerPlugin"], [16, 4, 1, "", "NetworkPlugin"], [16, 4, 1, "", "ProviderPlugin"]], "ape.plugins.network.EcosystemPlugin": [[16, 5, 1, "", "ecosystems"]], "ape.plugins.network.ExplorerPlugin": [[16, 5, 1, "", "explorers"]], "ape.plugins.network.NetworkPlugin": [[16, 5, 1, "", "networks"]], "ape.plugins.network.ProviderPlugin": [[16, 5, 1, "", "providers"]], "ape.plugins.pluggy_patch": [[16, 4, 1, "", "PluginType"], [16, 3, 1, "", "plugin_manager"]], "ape.plugins.project": [[16, 4, 1, "", "DependencyPlugin"], [16, 4, 1, "", "ProjectPlugin"]], "ape.plugins.project.DependencyPlugin": [[16, 5, 1, "", "dependencies"]], "ape.plugins.project.ProjectPlugin": [[16, 5, 1, "", "projects"]], "ape.plugins.query": [[16, 4, 1, "", "QueryPlugin"]], "ape.plugins.query.QueryPlugin": [[16, 5, 1, "", "query_engines"]], "ape.types": [[17, 4, 1, "", "BaseContractLog"], [17, 3, 1, "", "BlockID"], [17, 4, 1, "", "ContractLog"], [17, 4, 1, "", "MockContractLog"], [17, 0, 0, "-", "address"], [17, 0, 0, "-", "coverage"]], "ape.types.BaseContractLog": [[17, 2, 1, "", "contract_address"], [17, 2, 1, "", "event_arguments"], [17, 2, 1, "", "event_name"]], "ape.types.ContractLog": [[17, 2, 1, "", "block_hash"], [17, 2, 1, "", "block_number"], [17, 2, 1, "", "log_index"], [17, 6, 1, "", "timestamp"], [17, 2, 1, "", "transaction_hash"], [17, 2, 1, "", "transaction_index"]], "ape.types.address": [[17, 3, 1, "", "AddressType"], [17, 3, 1, "", "RawAddress"]], "ape.types.coverage": [[17, 4, 1, "", "ContractCoverage"], [17, 4, 1, "", "ContractSourceCoverage"], [17, 4, 1, "", "CoverageProject"], [17, 4, 1, "", "CoverageReport"], [17, 4, 1, "", "CoverageStatement"], [17, 4, 1, "", "FunctionCoverage"]], "ape.types.coverage.ContractCoverage": [[17, 6, 1, "", "function_hits"], [17, 6, 1, "", "function_rate"], [17, 2, 1, "", "functions"], [17, 6, 1, "", "line_rate"], [17, 6, 1, "", "lines_covered"], [17, 6, 1, "", "lines_valid"], [17, 6, 1, "", "miss_count"], [17, 5, 1, "", "model_dump"], [17, 2, 1, "", "name"], [17, 6, 1, "", "statements"]], "ape.types.coverage.ContractSourceCoverage": [[17, 2, 1, "", "contracts"], [17, 6, 1, "", "function_hits"], [17, 6, 1, "", "function_rate"], [17, 5, 1, "", "include"], [17, 6, 1, "", "line_rate"], [17, 6, 1, "", "lines_covered"], [17, 6, 1, "", "lines_valid"], [17, 6, 1, "", "miss_count"], [17, 5, 1, "", "model_dump"], [17, 2, 1, "", "source_id"], [17, 6, 1, "", "statements"], [17, 6, 1, "", "total_functions"]], "ape.types.coverage.CoverageProject": [[17, 6, 1, "", "function_hits"], [17, 6, 1, "", "function_rate"], [17, 6, 1, "", "line_rate"], [17, 6, 1, "", "lines_covered"], [17, 6, 1, "", "lines_valid"], [17, 6, 1, "", "miss_count"], [17, 5, 1, "", "model_dump"], [17, 2, 1, "", "name"], [17, 2, 1, "", "sources"], [17, 6, 1, "", "statements"], [17, 6, 1, "", "total_functions"]], "ape.types.coverage.CoverageReport": [[17, 6, 1, "", "function_hits"], [17, 6, 1, "", "function_rate"], [17, 5, 1, "", "get_html"], [17, 5, 1, "", "get_xml"], [17, 6, 1, "", "line_rate"], [17, 6, 1, "", "lines_covered"], [17, 6, 1, "", "lines_valid"], [17, 6, 1, "", "miss_count"], [17, 5, 1, "", "model_dump"], [17, 2, 1, "", "projects"], [17, 2, 1, "", "source_folders"], [17, 6, 1, "", "sources"], [17, 6, 1, "", "statements"], [17, 2, 1, "", "timestamp"], [17, 6, 1, "", "total_functions"]], "ape.types.coverage.CoverageStatement": [[17, 2, 1, "", "hit_count"], [17, 2, 1, "", "location"], [17, 2, 1, "", "pcs"], [17, 2, 1, "", "tag"]], "ape.types.coverage.FunctionCoverage": [[17, 2, 1, "", "full_name"], [17, 2, 1, "", "hit_count"], [17, 6, 1, "", "line_rate"], [17, 6, 1, "", "lines_covered"], [17, 6, 1, "", "lines_valid"], [17, 6, 1, "", "miss_count"], [17, 5, 1, "", "model_dump"], [17, 2, 1, "", "name"], [17, 5, 1, "", "profile_statement"], [17, 2, 1, "", "statements"]], "ape.types.signatures": [[17, 4, 1, "", "MessageSignature"], [17, 4, 1, "", "SignableMessage"], [17, 4, 1, "", "TransactionSignature"], [17, 5, 1, "", "recover_signer"]], "ape.types.signatures.SignableMessage": [[17, 2, 1, "", "body"], [17, 2, 1, "", "header"], [17, 2, 1, "", "version"]], "ape.utils": [[18, 4, 1, "", "BaseInterface"], [18, 4, 1, "", "BaseInterfaceModel"], [18, 4, 1, "", "ExtraAttributesMixin"], [18, 4, 1, "", "ExtraModelAttributes"], [18, 4, 1, "", "GeneratedDevAccount"], [18, 4, 1, "", "GithubClient"], [18, 4, 1, "", "JoinableQueue"], [18, 4, 1, "", "Struct"], [18, 4, 1, "", "StructParser"], [18, 4, 1, "", "TraceStyles"], [18, 1, 1, "", "add_padding_to_strings"], [18, 1, 1, "", "allow_disconnected"], [18, 1, 1, "", "expand_environment_variables"], [18, 1, 1, "", "extract_nested_value"], [18, 1, 1, "", "gas_estimation_error_message"], [18, 1, 1, "", "generate_dev_accounts"], [18, 1, 1, "", "get_all_files_in_directory"], [18, 1, 1, "", "get_current_timestamp_ms"], [18, 1, 1, "", "get_package_version"], [18, 1, 1, "", "get_relative_path"], [18, 4, 1, "", "injected_before_use"], [18, 1, 1, "", "is_array"], [18, 1, 1, "", "is_evm_precompile"], [18, 1, 1, "", "is_named_tuple"], [18, 1, 1, "", "is_struct"], [18, 1, 1, "", "is_zero_hex"], [18, 1, 1, "", "load_config"], [18, 1, 1, "", "pragma_str_to_specifier_set"], [18, 1, 1, "", "raises_not_implemented"], [18, 1, 1, "", "returns_array"], [18, 1, 1, "", "run_until_complete"], [18, 4, 1, "", "singledispatchmethod"], [18, 1, 1, "", "spawn"], [18, 1, 1, "", "stream_response"], [18, 4, 1, "", "use_temp_sys_path"]], "ape.utils.BaseInterfaceModel": [[18, 2, 1, "", "model_config"], [18, 2, 1, "", "model_fields"]], "ape.utils.ExtraModelAttributes": [[18, 2, 1, "", "additional_error_message"], [18, 2, 1, "", "attributes"], [18, 5, 1, "", "get"], [18, 2, 1, "", "include_getattr"], [18, 2, 1, "", "include_getitem"], [18, 2, 1, "", "model_config"], [18, 2, 1, "", "model_fields"], [18, 2, 1, "", "name"]], "ape.utils.GeneratedDevAccount": [[18, 2, 1, "", "address"], [18, 2, 1, "", "private_key"]], "ape.utils.GithubClient": [[18, 6, 1, "", "ape_org"], [18, 6, 1, "", "available_plugins"], [18, 5, 1, "", "clone_repo"], [18, 5, 1, "", "download_package"], [18, 5, 1, "", "get_release"], [18, 5, 1, "", "get_repo"]], "ape.utils.JoinableQueue": [[18, 5, 1, "", "join"]], "ape.utils.Struct": [[18, 5, 1, "", "items"]], "ape.utils.StructParser": [[18, 5, 1, "", "decode_output"], [18, 6, 1, "", "default_name"], [18, 5, 1, "", "encode_input"]], "ape.utils.TraceStyles": [[18, 2, 1, "", "CONTRACTS"], [18, 2, 1, "", "DELEGATE"], [18, 2, 1, "", "GAS_COST"], [18, 2, 1, "", "INPUTS"], [18, 2, 1, "", "METHODS"], [18, 2, 1, "", "OUTPUTS"], [18, 2, 1, "", "VALUE"]], "ape.utils.singledispatchmethod": [[18, 5, 1, "", "register"]], "accounts-change-password": [[0, 8, 1, "cmdoption-accounts-change-password-v", "--verbosity"], [0, 8, 1, "cmdoption-accounts-change-password-v", "-v"], [0, 8, 1, "cmdoption-accounts-change-password-arg-ALIAS", "ALIAS"]], "accounts-delete": [[0, 8, 1, "cmdoption-accounts-delete-v", "--verbosity"], [0, 8, 1, "cmdoption-accounts-delete-v", "-v"], [0, 8, 1, "cmdoption-accounts-delete-arg-ALIAS", "ALIAS"]], "accounts-export": [[0, 8, 1, "cmdoption-accounts-export-v", "--verbosity"], [0, 8, 1, "cmdoption-accounts-export-v", "-v"], [0, 8, 1, "cmdoption-accounts-export-arg-ALIAS", "ALIAS"]], "accounts-generate": [[0, 8, 1, "cmdoption-accounts-generate-hd-path", "--hd-path"], [0, 8, 1, "cmdoption-accounts-generate-hide-mnemonic", "--hide-mnemonic"], [0, 8, 1, "cmdoption-accounts-generate-v", "--verbosity"], [0, 8, 1, "cmdoption-accounts-generate-word-count", "--word-count"], [0, 8, 1, "cmdoption-accounts-generate-v", "-v"], [0, 8, 1, "cmdoption-accounts-generate-arg-ALIAS", "ALIAS"]], "accounts-import": [[0, 8, 1, "cmdoption-accounts-import-hd-path", "--hd-path"], [0, 8, 1, "cmdoption-accounts-import-use-mnemonic", "--use-mnemonic"], [0, 8, 1, "cmdoption-accounts-import-v", "--verbosity"], [0, 8, 1, "cmdoption-accounts-import-v", "-v"], [0, 8, 1, "cmdoption-accounts-import-arg-ALIAS", "ALIAS"]], "accounts-list": [[0, 8, 1, "cmdoption-accounts-list-all", "--all"], [0, 8, 1, "cmdoption-accounts-list-v", "--verbosity"], [0, 8, 1, "cmdoption-accounts-list-v", "-v"]], "compile": [[1, 8, 1, "cmdoption-compile-f", "--force"], [1, 8, 1, "cmdoption-compile-include-dependencies", "--include-dependencies"], [1, 8, 1, "cmdoption-compile-s", "--size"], [1, 8, 1, "cmdoption-compile-v", "--verbosity"], [1, 8, 1, "cmdoption-compile-f", "-f"], [1, 8, 1, "cmdoption-compile-s", "-s"], [1, 8, 1, "cmdoption-compile-v", "-v"], [1, 8, 1, "cmdoption-compile-arg-FILE_PATHS", "FILE_PATHS"]], "console": [[2, 8, 1, "cmdoption-console-v", "--verbosity"], [2, 8, 1, "cmdoption-console-v", "-v"]], "init": [[3, 8, 1, "cmdoption-init-github", "--github"], [3, 8, 1, "cmdoption-init-v", "--verbosity"], [3, 8, 1, "cmdoption-init-v", "-v"]], "networks-list": [[4, 8, 1, "cmdoption-networks-list-ecosystem", "--ecosystem"], [4, 8, 1, "cmdoption-networks-list-format", "--format"], [4, 8, 1, "cmdoption-networks-list-network", "--network"], [4, 8, 1, "cmdoption-networks-list-provider", "--provider"], [4, 8, 1, "cmdoption-networks-list-v", "--verbosity"], [4, 8, 1, "cmdoption-networks-list-v", "-v"]], "networks-run": [[4, 8, 1, "cmdoption-networks-run-network", "--network"], [4, 8, 1, "cmdoption-networks-run-v", "--verbosity"], [4, 8, 1, "cmdoption-networks-run-v", "-v"]], "plugins-install": [[5, 8, 1, "cmdoption-plugins-install-U", "--upgrade"], [5, 8, 1, "cmdoption-plugins-install-v", "--verbosity"], [5, 8, 1, "cmdoption-plugins-install-y", "--yes"], [5, 8, 1, "cmdoption-plugins-install-U", "-U"], [5, 8, 1, "cmdoption-plugins-install-v", "-v"], [5, 8, 1, "cmdoption-plugins-install-y", "-y"], [5, 8, 1, "cmdoption-plugins-install-arg-PLUGIN-NAMES", "PLUGIN-NAMES"]], "plugins-list": [[5, 8, 1, "cmdoption-plugins-list-a", "--all"], [5, 8, 1, "cmdoption-plugins-list-v", "--verbosity"], [5, 8, 1, "cmdoption-plugins-list-a", "-a"], [5, 8, 1, "cmdoption-plugins-list-v", "-v"]], "plugins-uninstall": [[5, 8, 1, "cmdoption-plugins-uninstall-v", "--verbosity"], [5, 8, 1, "cmdoption-plugins-uninstall-y", "--yes"], [5, 8, 1, "cmdoption-plugins-uninstall-v", "-v"], [5, 8, 1, "cmdoption-plugins-uninstall-y", "-y"], [5, 8, 1, "cmdoption-plugins-uninstall-arg-PLUGIN-NAMES", "PLUGIN-NAMES"]], "pm-compile": [[6, 8, 1, "cmdoption-pm-compile-f", "--force"], [6, 8, 1, "cmdoption-pm-compile-v", "--verbosity"], [6, 8, 1, "cmdoption-pm-compile-version", "--version"], [6, 8, 1, "cmdoption-pm-compile-f", "-f"], [6, 8, 1, "cmdoption-pm-compile-v", "-v"], [6, 8, 1, "cmdoption-pm-compile-arg-NAME", "NAME"]], "pm-install": [[6, 8, 1, "cmdoption-pm-install-f", "--force"], [6, 8, 1, "cmdoption-pm-install-name", "--name"], [6, 8, 1, "cmdoption-pm-install-ref", "--ref"], [6, 8, 1, "cmdoption-pm-install-v", "--verbosity"], [6, 8, 1, "cmdoption-pm-install-version", "--version"], [6, 8, 1, "cmdoption-pm-install-f", "-f"], [6, 8, 1, "cmdoption-pm-install-v", "-v"], [6, 8, 1, "cmdoption-pm-install-arg-PACKAGE", "PACKAGE"]], "pm-list": [[6, 8, 1, "cmdoption-pm-list-all", "--all"], [6, 8, 1, "cmdoption-pm-list-v", "--verbosity"], [6, 8, 1, "cmdoption-pm-list-v", "-v"]], "pm-remove": [[6, 8, 1, "cmdoption-pm-remove-v", "--verbosity"], [6, 8, 1, "cmdoption-pm-remove-y", "--yes"], [6, 8, 1, "cmdoption-pm-remove-v", "-v"], [6, 8, 1, "cmdoption-pm-remove-y", "-y"], [6, 8, 1, "cmdoption-pm-remove-arg-PACKAGE", "PACKAGE"], [6, 8, 1, "cmdoption-pm-remove-arg-VERSIONS", "VERSIONS"]], "run-update_rpc": [[7, 8, 1, "cmdoption-run-update_rpc-v", "--verbosity"], [7, 8, 1, "cmdoption-run-update_rpc-v", "-v"]], "run": [[7, 8, 1, "cmdoption-run-I", "--interactive"], [7, 8, 1, "cmdoption-run-I", "-I"]], "test": [[8, 8, 1, "cmdoption-test-v", "--verbosity"], [8, 8, 1, "cmdoption-test-w", "--watch"], [8, 8, 1, "cmdoption-test-watch-delay", "--watch-delay"], [8, 8, 1, "cmdoption-test-watch-folders", "--watch-folders"], [8, 8, 1, "cmdoption-test-v", "-v"], [8, 8, 1, "cmdoption-test-w", "-w"], [8, 8, 1, "cmdoption-test-arg-PYTEST_ARGS", "PYTEST_ARGS"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:attribute", "3": "py:data", "4": "py:class", "5": "py:method", "6": "py:property", "7": "py:exception", "8": "std:cmdoption"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "data", "Python data"], "4": ["py", "class", "Python class"], "5": ["py", "method", "Python method"], "6": ["py", "property", "Python property"], "7": ["py", "exception", "Python exception"], "8": ["std", "cmdoption", "program option"]}, "titleterms": {"account": [0, 11, 15, 16, 19, 20, 25, 34, 36], "chang": 0, "password": 0, "delet": 0, "export": 0, "gener": 0, "import": [0, 27], "list": [0, 4, 5, 6, 26], "compil": [1, 6, 11, 15, 16, 21, 26, 31, 33, 34], "consol": [2, 23, 34, 37], "init": [3, 23], "network": [4, 11, 15, 16, 19, 20, 22, 30, 34, 35, 36], "run": [4, 7, 30], "plugin": [5, 16, 21, 22, 27, 28, 31, 34], "instal": [5, 6, 26, 28, 34], "uninstal": 5, "pm": 6, "remov": [6, 26], "update_rpc": 7, "test": [8, 19, 22, 31, 34, 36], "ap": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 22, 23, 31, 34, 36, 37], "doc": 9, "user": 9, "guid": 9, "cli": [9, 12, 20, 26, 27, 29, 30, 35], "refer": 9, "python": [9, 29], "api": [11, 27], "address": [11, 17, 24], "config": [11, 15, 16, 26, 30], "convert": [11, 15, 16], "explor": [11, 30, 33], "project": [11, 15, 16, 24, 27, 31, 34, 36], "provid": [11, 30, 36], "transact": [11, 24, 25, 30, 36, 37], "queri": [11, 15, 16, 25], "argument": 12, "choic": 12, "command": [12, 23, 36], "option": 12, "paramet": 12, "type": [12, 17, 26, 28, 30], "util": [12, 18], "contract": [13, 22, 24, 25, 26, 31, 32, 36], "except": 14, "manag": [15, 26, 30], "chain": [15, 36], "base": 16, "signatur": [17, 19], "coverag": [17, 36], "miscellan": 17, "us": [19, 25, 27], "outsid": 19, "creat": 19, "new": 19, "default": [19, 22, 24], "sender": 19, "support": [19, 36], "live": [19, 30], "keyfil": 19, "sign": 19, "messag": 19, "eip": 19, "712": 19, "verifi": 19, "autom": 19, "hardwar": 19, "wallet": 19, "context": [20, 30], "decor": 20, "tool": 20, "The": 21, "json": 21, "other": 21, "ignor": 21, "file": [21, 26], "depend": [21, 22, 26, 31], "set": 21, "sourc": 21, "code": 21, "configur": [22, 23, 30], "folder": [22, 26], "ecosystem": 22, "deploy": [22, 24, 33, 37], "geth": 22, "namespac": 23, "extra": 23, "function": [23, 36], "global": 23, "magic": 23, "bal": 23, "from": [24, 27, 37], "deploi": [24, 31], "script": [24, 31, 34, 35], "publish": [24, 33], "ani": 24, "abi": 24, "previou": 24, "interact": [24, 30], "call": 24, "fallback": 24, "direct": 24, "privat": 24, "decod": 24, "encod": 24, "input": 24, "interfac": 24, "introspect": 24, "multi": [24, 35, 36], "data": 25, "get": 25, "block": [25, 30], "event": 25, "cach": 25, "github": 26, "local": [26, 30], "npm": 26, "packag": 26, "misc": 26, "custom": [26, 30, 36], "exclus": 26, "overrid": 26, "solid": 26, "remap": 26, "develop": [27, 31], "initi": 27, "implement": 27, "class": 27, "regist": 27, "log": [27, 29, 34, 37], "logger": 27, "modul": 27, "ape_cli_context": 27, "core": 28, "select": 30, "l2": 30, "connect": 30, "By": 30, "rpc": 30, "url": 30, "time": 30, "more": 30, "process": 30, "fork": 30, "ad": 31, "proxi": 32, "track": 33, "overview": 34, "document": 34, "prerequisit": 34, "consider": 34, "via": 34, "pipx": 34, "pip": 34, "docker": 34, "plai": 34, "modular": 34, "system": 34, "main": 35, "method": 35, "pytest": 36, "structur": 36, "pattern": 36, "fixtur": 36, "advanc": 36, "tip": 36, "failur": 36, "expected_messag": 36, "dev_messag": 36, "caveat": 36, "languag": 36, "inlin": 36, "non": 36, "reentrant": 36, "error": 36, "ga": [36, 37], "report": [36, 37], "iter": 36, "make": 37, "dynam": 37, "fee": 37, "static": 37, "accept": 37, "timeout": 37, "trace": 37, "estim": 37, "cost": 37}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"accounts": [[0, "accounts"]], "change-password": [[0, "accounts-change-password"]], "delete": [[0, "accounts-delete"]], "export": [[0, "accounts-export"]], "generate": [[0, "accounts-generate"]], "import": [[0, "accounts-import"]], "list": [[0, "accounts-list"], [4, "networks-list"], [5, "plugins-list"], [6, "pm-list"], [26, "list"]], "compile": [[1, "compile"], [6, "pm-compile"], [26, "compile"]], "console": [[2, "console"], [2, "console"]], "init": [[3, "init"]], "networks": [[4, "networks"]], "run": [[4, "networks-run"], [7, "run"], [7, "run"]], "plugins": [[5, "plugins"]], "install": [[5, "plugins-install"], [6, "pm-install"], [26, "install"]], "uninstall": [[5, "plugins-uninstall"]], "pm": [[6, "pm"]], "remove": [[6, "pm-remove"], [26, "remove"]], "update_rpc": [[7, "run-update-rpc"]], "test": [[8, "test"]], "Ape-Docs": [[9, "ape-docs"]], "User Guides": [[9, null]], "CLI Reference": [[9, null]], "Python Reference": [[9, null]], "ape": [[10, "module-ape"]], "ape.api": [[11, "ape-api"]], "Accounts": [[11, "module-ape.api.accounts"], [15, "module-ape.managers.accounts"], [16, "module-ape.plugins.account"], [19, "accounts"], [34, "accounts"]], "Address": [[11, "module-ape.api.address"], [17, "module-ape.types.address"]], "Compiler": [[11, "module-ape.api.compiler"], [16, "module-ape.plugins.compiler"]], "Config": [[11, "module-ape.api.config"], [15, "module-ape.managers.config"], [16, "module-ape.plugins.config"]], "Convert": [[11, "module-ape.api.convert"]], "Explorers": [[11, "module-ape.api.explorers"]], "Networks": [[11, "module-ape.api.networks"], [15, "module-ape.managers.networks"], [22, "networks"], [30, "networks"], [34, "networks"]], "Projects": [[11, "module-ape.api.projects"], [34, "projects"]], "Providers": [[11, "module-ape.api.providers"]], "Transactions": [[11, "transactions"], [24, "transactions"]], "Query": [[11, "module-ape.api.query"], [15, "module-ape.managers.query"], [16, "module-ape.plugins.query"]], "ape.cli": [[12, "ape-cli"]], "Arguments": [[12, "module-ape.cli.arguments"]], "Choices": [[12, "module-ape.cli.choices"]], "Commands": [[12, "module-ape.cli.commands"]], "Options": [[12, "module-ape.cli.options"]], "Parameter Types": [[12, "module-ape.cli.paramtype"]], "Utilities": [[12, "module-ape.cli.utils"]], "ape.contracts": [[13, "ape-contracts"]], "ape.exceptions": [[14, "module-ape.exceptions"]], "ape.managers": [[15, "ape-managers"]], "Compilers": [[15, "module-ape.managers.compilers"]], "Chain": [[15, "chain"]], "Converters": [[15, "module-ape.managers.converters"]], "Project": [[15, "module-ape.managers.project.manager"], [16, "module-ape.plugins.project"]], "ape.plugins": [[16, "module-ape.plugins"]], "Base": [[16, "module-ape.plugins.pluggy_patch"]], "Converter": [[16, "module-ape.plugins.converter"]], "Network": [[16, "module-ape.plugins.network"]], "ape.types": [[17, "ape-types"]], "Signatures": [[17, "signatures"]], "Coverage": [[17, "module-ape.types.coverage"]], "Miscellaneous": [[17, "module-ape.types"]], "ape.utils": [[18, "module-ape.utils"]], "Test Accounts": [[19, "test-accounts"]], "Use test accounts in tests": [[19, "use-test-accounts-in-tests"]], "Use test accounts outside of tests": [[19, "use-test-accounts-outside-of-tests"]], "Creating new test accounts": [[19, "creating-new-test-accounts"]], "Default Sender Support": [[19, "default-sender-support"], [19, "id1"]], "Live Network Accounts": [[19, "live-network-accounts"]], "Keyfile Accounts": [[19, "keyfile-accounts"]], "Signing Messages": [[19, "signing-messages"]], "EIP-712": [[19, "eip-712"]], "Verifying Signature": [[19, "verifying-signature"]], "Automation": [[19, "automation"]], "Hardware Wallets": [[19, "hardware-wallets"]], "CLIs": [[20, "clis"]], "Ape Context Decorator": [[20, "ape-context-decorator"]], "Network Tools": [[20, "network-tools"]], "Account Tools": [[20, "account-tools"]], "Compile": [[21, "compile"]], "The JSON Compiler": [[21, "the-json-compiler"]], "Other Compiler Plugins": [[21, "other-compiler-plugins"]], "Ignore Files": [[21, "ignore-files"]], "Dependencies": [[21, "dependencies"], [22, "dependencies"], [26, "dependencies"], [31, "dependencies"]], "Settings": [[21, "settings"]], "Compile Source Code": [[21, "compile-source-code"]], "Configure Ape": [[22, "configure-ape"]], "Contracts Folder": [[22, "contracts-folder"]], "Default Ecosystem": [[22, "default-ecosystem"]], "Deployments": [[22, "deployments"]], "Geth": [[22, "geth"]], "Plugins": [[22, "plugins"], [28, "plugins"], [34, "plugins"]], "Testing": [[22, "testing"], [31, "testing"], [34, "testing"], [36, "testing"]], "Ape Console": [[23, "ape-console"]], "Ape Namespace": [[23, "ape-namespace"]], "Namespace Extras": [[23, "namespace-extras"]], "Init Function": [[23, "init-function"]], "Global Extras": [[23, "global-extras"]], "Configure": [[23, "configure"]], "Magic Commands": [[23, "magic-commands"]], "%ape": [[23, "ape"]], "%bal": [[23, "bal"]], "Contracts": [[24, "contracts"]], "From Deploy": [[24, "from-deploy"]], "Deploy Scripts": [[24, "deploy-scripts"]], "Publishing": [[24, "publishing"], [33, "publishing"]], "From Project Contract Address": [[24, "from-project-contract-address"]], "From Any Address": [[24, "from-any-address"]], "From ABIs": [[24, "from-abis"]], "From Previous Deployment": [[24, "from-previous-deployment"]], "Contract Interaction": [[24, "contract-interaction"]], "Calls": [[24, "calls"]], "Calling Transactions and Transacting Calls": [[24, "calling-transactions-and-transacting-calls"]], "Default, Fallback, and Direct Calls": [[24, "default-fallback-and-direct-calls"]], "Private Transactions": [[24, "private-transactions"]], "Decoding and Encoding Inputs": [[24, "decoding-and-encoding-inputs"]], "Contract Interface Introspection": [[24, "contract-interface-introspection"]], "Multi-Call and Multi-Transaction": [[24, "multi-call-and-multi-transaction"]], "Querying Data": [[25, "querying-data"]], "Getting Block Data": [[25, "getting-block-data"]], "Getting Account Transaction Data": [[25, "getting-account-transaction-data"]], "Getting Contract Event Data": [[25, "getting-contract-event-data"]], "Using the Cache": [[25, "using-the-cache"]], "Types of Dependencies": [[26, "types-of-dependencies"]], "GitHub": [[26, "github"]], "Local": [[26, "local"]], "NPM": [[26, "npm"]], "Package Management CLI": [[26, "package-management-cli"]], "Misc": [[26, "misc"]], "Custom Contracts Folder": [[26, "custom-contracts-folder"]], "File Exclusions": [[26, "file-exclusions"]], "Config Override": [[26, "config-override"]], "Solidity Remappings": [[26, "solidity-remappings"]], "Compiling Dependencies": [[26, "compiling-dependencies"]], "Developing Plugins": [[27, "developing-plugins"]], "Initialize a Plugin Project": [[27, "initialize-a-plugin-project"]], "Implementing API Classes": [[27, "implementing-api-classes"]], "Registering API Classes": [[27, "registering-api-classes"]], "CLI Plugins": [[27, "cli-plugins"]], "Using Plugins": [[27, "using-plugins"]], "Logging": [[27, "logging"], [29, "logging"], [34, "logging"]], "Import the logger from the logging module": [[27, "import-the-logger-from-the-logging-module"]], "Use the logger from the @ape_cli_context": [[27, "use-the-logger-from-the-ape-cli-context"]], "Core Plugins": [[28, "core-plugins"]], "Installing Plugins": [[28, "installing-plugins"]], "Plugin Types": [[28, "plugin-types"]], "CLI Logging": [[29, "cli-logging"]], "Python Logging": [[29, "python-logging"]], "Selecting a Network": [[30, "selecting-a-network"]], "L2 Networks": [[30, "l2-networks"]], "Custom Network Connection": [[30, "custom-network-connection"]], "Custom Networks By Config": [[30, "custom-networks-by-config"]], "RPC URL": [[30, "rpc-url"]], "Explorer URL": [[30, "explorer-url"]], "Block time, transaction type, and more config": [[30, "block-time-transaction-type-and-more-config"]], "Custom Networks by CLI": [[30, "custom-networks-by-cli"]], "Configuring Networks": [[30, "configuring-networks"]], "Local Network": [[30, "local-network"]], "Live Networks": [[30, "live-networks"]], "Network Config": [[30, "network-config"]], "Running a Network Process": [[30, "running-a-network-process"]], "Provider Interaction": [[30, "provider-interaction"]], "Provider Context Manager": [[30, "provider-context-manager"]], "Forked Context": [[30, "forked-context"]], "Developing Projects with Ape": [[31, "developing-projects-with-ape"]], "Adding Plugins": [[31, "adding-plugins"]], "Compiling Contracts": [[31, "compiling-contracts"]], "Deploying Contracts": [[31, "deploying-contracts"]], "Scripts": [[31, "scripts"], [34, "scripts"]], "Proxy Contracts": [[32, "proxy-contracts"]], "Compilation": [[33, "compilation"]], "Tracking Deployments": [[33, "tracking-deployments"]], "Publishing to Explorer": [[33, "publishing-to-explorer"]], "Overview": [[34, "overview"]], "Documentation": [[34, "documentation"]], "Prerequisite": [[34, "prerequisite"]], "Installation": [[34, "installation"]], "Considerations for Installing:": [[34, "considerations-for-installing"]], "via pipx or pip": [[34, "via-pipx-or-pip"]], "via docker": [[34, "via-docker"]], "Playing with Ape": [[34, "playing-with-ape"]], "Ape Modular Plugin System:": [[34, "ape-modular-plugin-system"]], "Compiling": [[34, "compiling"]], "Console": [[34, "console"]], "Scripting": [[35, "scripting"]], "CLI Scripts": [[35, "cli-scripts"]], "Multi-network Scripting": [[35, "multi-network-scripting"]], "Main Method Scripts": [[35, "main-method-scripts"]], "Pytest": [[36, "pytest"]], "Test Structure": [[36, "test-structure"]], "Test Pattern": [[36, "test-pattern"]], "Fixtures": [[36, "fixtures"]], "accounts fixture": [[36, "accounts-fixture"]], "chain fixture": [[36, "chain-fixture"]], "networks fixture": [[36, "networks-fixture"]], "project fixture": [[36, "project-fixture"]], "Contract fixture": [[36, "contract-fixture"]], "Ape testing commands": [[36, "ape-testing-commands"]], "Test Providers": [[36, "test-providers"]], "Advanced Testing Tips": [[36, "advanced-testing-tips"]], "Testing Transaction Failures": [[36, "testing-transaction-failures"]], "expected_message": [[36, "expected-message"]], "dev_message": [[36, "dev-message"]], "Caveats": [[36, "caveats"]], "Language Support": [[36, "language-support"]], "Inlining": [[36, "inlining"]], "Non-reentrant Functions": [[36, "non-reentrant-functions"]], "Custom Errors": [[36, "custom-errors"]], "Multi-chain Testing": [[36, "multi-chain-testing"]], "Gas Reporting": [[36, "gas-reporting"]], "Iterative Testing": [[36, "iterative-testing"]], "Contract Coverage": [[36, "contract-coverage"]], "Making Transactions": [[37, "making-transactions"]], "Deployment": [[37, "deployment"]], "Deployment from Ape Console": [[37, "deployment-from-ape-console"]], "Dynamic-Fee Transactions": [[37, "dynamic-fee-transactions"]], "Static-Fee Transactions": [[37, "static-fee-transactions"]], "Transaction Logs": [[37, "transaction-logs"]], "Transaction Acceptance Timeout": [[37, "transaction-acceptance-timeout"]], "Traces": [[37, "traces"]], "Gas Reports": [[37, "gas-reports"]], "Estimate Gas Cost": [[37, "estimate-gas-cost"]]}, "indexentries": {"--all": [[0, "cmdoption-accounts-list-all"], [5, "cmdoption-plugins-list-a"], [6, "cmdoption-pm-list-all"]], "--hd-path": [[0, "cmdoption-accounts-generate-hd-path"], [0, "cmdoption-accounts-import-hd-path"]], "--hide-mnemonic": [[0, "cmdoption-accounts-generate-hide-mnemonic"]], "--use-mnemonic": [[0, "cmdoption-accounts-import-use-mnemonic"]], "--verbosity": [[0, "cmdoption-accounts-change-password-v"], [0, "cmdoption-accounts-delete-v"], [0, "cmdoption-accounts-export-v"], [0, "cmdoption-accounts-generate-v"], [0, "cmdoption-accounts-import-v"], [0, "cmdoption-accounts-list-v"], [1, "cmdoption-compile-v"], [2, "cmdoption-console-v"], [3, "cmdoption-init-v"], [4, "cmdoption-networks-list-v"], [4, "cmdoption-networks-run-v"], [5, "cmdoption-plugins-install-v"], [5, "cmdoption-plugins-list-v"], [5, "cmdoption-plugins-uninstall-v"], [6, "cmdoption-pm-compile-v"], [6, "cmdoption-pm-install-v"], [6, "cmdoption-pm-list-v"], [6, "cmdoption-pm-remove-v"], [7, "cmdoption-run-update_rpc-v"], [8, "cmdoption-test-v"]], "--word-count": [[0, "cmdoption-accounts-generate-word-count"]], "-v": [[0, "cmdoption-accounts-change-password-v"], [0, "cmdoption-accounts-delete-v"], [0, "cmdoption-accounts-export-v"], [0, "cmdoption-accounts-generate-v"], [0, "cmdoption-accounts-import-v"], [0, "cmdoption-accounts-list-v"], [1, "cmdoption-compile-v"], [2, "cmdoption-console-v"], [3, "cmdoption-init-v"], [4, "cmdoption-networks-list-v"], [4, "cmdoption-networks-run-v"], [5, "cmdoption-plugins-install-v"], [5, "cmdoption-plugins-list-v"], [5, "cmdoption-plugins-uninstall-v"], [6, "cmdoption-pm-compile-v"], [6, "cmdoption-pm-install-v"], [6, "cmdoption-pm-list-v"], [6, "cmdoption-pm-remove-v"], [7, "cmdoption-run-update_rpc-v"], [8, "cmdoption-test-v"]], "alias": [[0, "cmdoption-accounts-change-password-arg-ALIAS"], [0, "cmdoption-accounts-delete-arg-ALIAS"], [0, "cmdoption-accounts-export-arg-ALIAS"], [0, "cmdoption-accounts-generate-arg-ALIAS"], [0, "cmdoption-accounts-import-arg-ALIAS"]], "accounts-change-password command line option": [[0, "cmdoption-accounts-change-password-arg-ALIAS"], [0, "cmdoption-accounts-change-password-v"]], "accounts-delete command line option": [[0, "cmdoption-accounts-delete-arg-ALIAS"], [0, "cmdoption-accounts-delete-v"]], "accounts-export command line option": [[0, "cmdoption-accounts-export-arg-ALIAS"], [0, "cmdoption-accounts-export-v"]], "accounts-generate command line option": [[0, "cmdoption-accounts-generate-arg-ALIAS"], [0, "cmdoption-accounts-generate-hd-path"], [0, "cmdoption-accounts-generate-hide-mnemonic"], [0, "cmdoption-accounts-generate-v"], [0, "cmdoption-accounts-generate-word-count"]], "accounts-import command line option": [[0, "cmdoption-accounts-import-arg-ALIAS"], [0, "cmdoption-accounts-import-hd-path"], [0, "cmdoption-accounts-import-use-mnemonic"], [0, "cmdoption-accounts-import-v"]], "accounts-list command line option": [[0, "cmdoption-accounts-list-all"], [0, "cmdoption-accounts-list-v"]], "--force": [[1, "cmdoption-compile-f"], [6, "cmdoption-pm-compile-f"], [6, "cmdoption-pm-install-f"]], "--include-dependencies": [[1, "cmdoption-compile-include-dependencies"]], "--size": [[1, "cmdoption-compile-s"]], "-f": [[1, "cmdoption-compile-f"], [6, "cmdoption-pm-compile-f"], [6, "cmdoption-pm-install-f"]], "-s": [[1, "cmdoption-compile-s"]], "file_paths": [[1, "cmdoption-compile-arg-FILE_PATHS"]], "compile command line option": [[1, "cmdoption-compile-arg-FILE_PATHS"], [1, "cmdoption-compile-f"], [1, "cmdoption-compile-include-dependencies"], [1, "cmdoption-compile-s"], [1, "cmdoption-compile-v"]], "console command line option": [[2, "cmdoption-console-v"]], "--github": [[3, "cmdoption-init-github"]], "init command line option": [[3, "cmdoption-init-github"], [3, "cmdoption-init-v"]], "--ecosystem": [[4, "cmdoption-networks-list-ecosystem"]], "--format": [[4, "cmdoption-networks-list-format"]], "--network": [[4, "cmdoption-networks-list-network"], [4, "cmdoption-networks-run-network"]], "--provider": [[4, "cmdoption-networks-list-provider"]], "networks-list command line option": [[4, "cmdoption-networks-list-ecosystem"], [4, "cmdoption-networks-list-format"], [4, "cmdoption-networks-list-network"], [4, "cmdoption-networks-list-provider"], [4, "cmdoption-networks-list-v"]], "networks-run command line option": [[4, "cmdoption-networks-run-network"], [4, "cmdoption-networks-run-v"]], "--upgrade": [[5, "cmdoption-plugins-install-U"]], "--yes": [[5, "cmdoption-plugins-install-y"], [5, "cmdoption-plugins-uninstall-y"], [6, "cmdoption-pm-remove-y"]], "-u": [[5, "cmdoption-plugins-install-U"]], "-a": [[5, "cmdoption-plugins-list-a"]], "-y": [[5, "cmdoption-plugins-install-y"], [5, "cmdoption-plugins-uninstall-y"], [6, "cmdoption-pm-remove-y"]], "plugin-names": [[5, "cmdoption-plugins-install-arg-PLUGIN-NAMES"], [5, "cmdoption-plugins-uninstall-arg-PLUGIN-NAMES"]], "plugins-install command line option": [[5, "cmdoption-plugins-install-U"], [5, "cmdoption-plugins-install-arg-PLUGIN-NAMES"], [5, "cmdoption-plugins-install-v"], [5, "cmdoption-plugins-install-y"]], "plugins-list command line option": [[5, "cmdoption-plugins-list-a"], [5, "cmdoption-plugins-list-v"]], "plugins-uninstall command line option": [[5, "cmdoption-plugins-uninstall-arg-PLUGIN-NAMES"], [5, "cmdoption-plugins-uninstall-v"], [5, "cmdoption-plugins-uninstall-y"]], "--name": [[6, "cmdoption-pm-install-name"]], "--ref": [[6, "cmdoption-pm-install-ref"]], "--version": [[6, "cmdoption-pm-compile-version"], [6, "cmdoption-pm-install-version"]], "name": [[6, "cmdoption-pm-compile-arg-NAME"]], "package": [[6, "cmdoption-pm-install-arg-PACKAGE"], [6, "cmdoption-pm-remove-arg-PACKAGE"]], "versions": [[6, "cmdoption-pm-remove-arg-VERSIONS"]], "pm-compile command line option": [[6, "cmdoption-pm-compile-arg-NAME"], [6, "cmdoption-pm-compile-f"], [6, "cmdoption-pm-compile-v"], [6, "cmdoption-pm-compile-version"]], "pm-install command line option": [[6, "cmdoption-pm-install-arg-PACKAGE"], [6, "cmdoption-pm-install-f"], [6, "cmdoption-pm-install-name"], [6, "cmdoption-pm-install-ref"], [6, "cmdoption-pm-install-v"], [6, "cmdoption-pm-install-version"]], "pm-list command line option": [[6, "cmdoption-pm-list-all"], [6, "cmdoption-pm-list-v"]], "pm-remove command line option": [[6, "cmdoption-pm-remove-arg-PACKAGE"], [6, "cmdoption-pm-remove-arg-VERSIONS"], [6, "cmdoption-pm-remove-v"], [6, "cmdoption-pm-remove-y"]], "--interactive": [[7, "cmdoption-run-I"]], "-i": [[7, "cmdoption-run-I"]], "run command line option": [[7, "cmdoption-run-I"]], "run-update_rpc command line option": [[7, "cmdoption-run-update_rpc-v"]], "--watch": [[8, "cmdoption-test-w"]], "--watch-delay": [[8, "cmdoption-test-watch-delay"]], "--watch-folders": [[8, "cmdoption-test-watch-folders"]], "-w": [[8, "cmdoption-test-w"]], "pytest_args": [[8, "cmdoption-test-arg-PYTEST_ARGS"]], "test command line option": [[8, "cmdoption-test-arg-PYTEST_ARGS"], [8, "cmdoption-test-v"], [8, "cmdoption-test-w"], [8, "cmdoption-test-watch-delay"], [8, "cmdoption-test-watch-folders"]], "contract() (in module ape)": [[10, "ape.Contract"]], "project (in module ape)": [[10, "ape.Project"], [10, "ape.project"]], "accounts (in module ape)": [[10, "ape.accounts"]], "ape": [[10, "module-ape"]], "chain (in module ape)": [[10, "ape.chain"]], "compilers (in module ape)": [[10, "ape.compilers"]], "config (in module ape)": [[10, "ape.config"]], "convert() (in module ape)": [[10, "ape.convert"]], "module": [[10, "module-ape"], [11, "module-ape.api.accounts"], [11, "module-ape.api.address"], [11, "module-ape.api.compiler"], [11, "module-ape.api.config"], [11, "module-ape.api.convert"], [11, "module-ape.api.explorers"], [11, "module-ape.api.networks"], [11, "module-ape.api.projects"], [11, "module-ape.api.providers"], [11, "module-ape.api.query"], [12, "module-ape.cli.arguments"], [12, "module-ape.cli.choices"], [12, "module-ape.cli.commands"], [12, "module-ape.cli.options"], [12, "module-ape.cli.paramtype"], [12, "module-ape.cli.utils"], [14, "module-ape.exceptions"], [15, "module-ape.managers.accounts"], [15, "module-ape.managers.compilers"], [15, "module-ape.managers.config"], [15, "module-ape.managers.converters"], [15, "module-ape.managers.networks"], [15, "module-ape.managers.project.dependency"], [15, "module-ape.managers.project.manager"], [15, "module-ape.managers.query"], [16, "module-ape.plugins"], [16, "module-ape.plugins.account"], [16, "module-ape.plugins.compiler"], [16, "module-ape.plugins.config"], [16, "module-ape.plugins.converter"], [16, "module-ape.plugins.network"], [16, "module-ape.plugins.pluggy_patch"], [16, "module-ape.plugins.project"], [16, "module-ape.plugins.query"], [17, "module-ape.types"], [17, "module-ape.types.address"], [17, "module-ape.types.coverage"], [18, "module-ape.utils"]], "networks (in module ape)": [[10, "ape.networks"]], "reverts (in module ape)": [[10, "ape.reverts"]], "accountapi (class in ape.api.accounts)": [[11, "ape.api.accounts.AccountAPI"]], "accountcontainerapi (class in ape.api.accounts)": [[11, "ape.api.accounts.AccountContainerAPI"]], "accounttransactionquery (class in ape.api.query)": [[11, "ape.api.query.AccountTransactionQuery"]], "address (class in ape.api.address)": [[11, "ape.api.address.Address"]], "baseaddress (class in ape.api.address)": [[11, "ape.api.address.BaseAddress"]], "blockapi (class in ape.api.providers)": [[11, "ape.api.providers.BlockAPI"]], "blockquery (class in ape.api.query)": [[11, "ape.api.query.BlockQuery"]], "blocktransactionquery (class in ape.api.query)": [[11, "ape.api.query.BlockTransactionQuery"]], "compilerapi (class in ape.api.compiler)": [[11, "ape.api.compiler.CompilerAPI"]], "configenum (class in ape.api.config)": [[11, "ape.api.config.ConfigEnum"]], "contractcreationquery (class in ape.api.query)": [[11, "ape.api.query.ContractCreationQuery"]], "contracteventquery (class in ape.api.query)": [[11, "ape.api.query.ContractEventQuery"]], "contractmethodquery (class in ape.api.query)": [[11, "ape.api.query.ContractMethodQuery"]], "converterapi (class in ape.api.convert)": [[11, "ape.api.convert.ConverterAPI"]], "dependencyapi (class in ape.api.projects)": [[11, "ape.api.projects.DependencyAPI"]], "ecosystemapi (class in ape.api.networks)": [[11, "ape.api.networks.EcosystemAPI"]], "explorerapi (class in ape.api.explorers)": [[11, "ape.api.explorers.ExplorerAPI"]], "forkednetworkapi (class in ape.api.networks)": [[11, "ape.api.networks.ForkedNetworkAPI"]], "genericconfig (class in ape.api.config)": [[11, "ape.api.config.GenericConfig"]], "impersonatedaccount (class in ape.api.accounts)": [[11, "ape.api.accounts.ImpersonatedAccount"]], "networkapi (class in ape.api.networks)": [[11, "ape.api.networks.NetworkAPI"]], "pluginconfig (class in ape.api.config)": [[11, "ape.api.config.PluginConfig"]], "projectapi (class in ape.api.projects)": [[11, "ape.api.projects.ProjectAPI"]], "providerapi (class in ape.api.providers)": [[11, "ape.api.providers.ProviderAPI"]], "providercontextmanager (class in ape.api.networks)": [[11, "ape.api.networks.ProviderContextManager"]], "proxyinfoapi (class in ape.api.networks)": [[11, "ape.api.networks.ProxyInfoAPI"]], "queryapi (class in ape.api.query)": [[11, "ape.api.query.QueryAPI"]], "receiptapi (class in ape.api.transactions)": [[11, "ape.api.transactions.ReceiptAPI"]], "subprocessprovider (class in ape.api.providers)": [[11, "ape.api.providers.SubprocessProvider"]], "testaccountapi (class in ape.api.accounts)": [[11, "ape.api.accounts.TestAccountAPI"]], "testaccountcontainerapi (class in ape.api.accounts)": [[11, "ape.api.accounts.TestAccountContainerAPI"]], "testproviderapi (class in ape.api.providers)": [[11, "ape.api.providers.TestProviderAPI"]], "transactionapi (class in ape.api.transactions)": [[11, "ape.api.transactions.TransactionAPI"]], "upstreamprovider (class in ape.api.providers)": [[11, "ape.api.providers.UpstreamProvider"]], "__ape_extra_attributes__() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.__ape_extra_attributes__"]], "__contains__() (ape.api.accounts.accountcontainerapi method)": [[11, "ape.api.accounts.AccountContainerAPI.__contains__"]], "__delitem__() (ape.api.accounts.accountcontainerapi method)": [[11, "ape.api.accounts.AccountContainerAPI.__delitem__"]], "__dir__() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.__dir__"]], "__getitem__() (ape.api.accounts.accountcontainerapi method)": [[11, "ape.api.accounts.AccountContainerAPI.__getitem__"]], "__len__() (ape.api.accounts.accountcontainerapi method)": [[11, "ape.api.accounts.AccountContainerAPI.__len__"]], "accounts (ape.api.accounts.accountcontainerapi property)": [[11, "ape.api.accounts.AccountContainerAPI.accounts"]], "add_compiler_data() (ape.api.projects.projectapi method)": [[11, "ape.api.projects.ProjectAPI.add_compiler_data"]], "add_network() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.add_network"]], "address (ape.api.accounts.impersonatedaccount property)": [[11, "ape.api.accounts.ImpersonatedAccount.address"]], "address (ape.api.address.address property)": [[11, "ape.api.address.Address.address"]], "address (ape.api.address.baseaddress property)": [[11, "ape.api.address.BaseAddress.address"]], "alias (ape.api.accounts.accountapi property)": [[11, "ape.api.accounts.AccountAPI.alias"]], "aliases (ape.api.accounts.accountcontainerapi property)": [[11, "ape.api.accounts.AccountContainerAPI.aliases"]], "ape.api.accounts": [[11, "module-ape.api.accounts"]], "ape.api.address": [[11, "module-ape.api.address"]], "ape.api.compiler": [[11, "module-ape.api.compiler"]], "ape.api.config": [[11, "module-ape.api.config"]], "ape.api.convert": [[11, "module-ape.api.convert"]], "ape.api.explorers": [[11, "module-ape.api.explorers"]], "ape.api.networks": [[11, "module-ape.api.networks"]], "ape.api.projects": [[11, "module-ape.api.projects"]], "ape.api.providers": [[11, "module-ape.api.providers"]], "ape.api.query": [[11, "module-ape.api.query"]], "append() (ape.api.accounts.accountcontainerapi method)": [[11, "ape.api.accounts.AccountContainerAPI.append"]], "auto_gas_multiplier (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.auto_gas_multiplier"]], "await_confirmations() (ape.api.transactions.receiptapi method)": [[11, "ape.api.transactions.ReceiptAPI.await_confirmations"]], "balance (ape.api.address.baseaddress property)": [[11, "ape.api.address.BaseAddress.balance"]], "base_fee (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.base_fee"]], "base_fee_multiplier (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.base_fee_multiplier"]], "block_page_size (ape.api.providers.providerapi attribute)": [[11, "ape.api.providers.ProviderAPI.block_page_size"]], "block_time (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.block_time"]], "build_command() (ape.api.providers.subprocessprovider method)": [[11, "ape.api.providers.SubprocessProvider.build_command"]], "cached_manifest (ape.api.projects.dependencyapi property)": [[11, "ape.api.projects.DependencyAPI.cached_manifest"]], "cached_manifest (ape.api.projects.projectapi property)": [[11, "ape.api.projects.ProjectAPI.cached_manifest"]], "call() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.call"]], "call() (ape.api.accounts.impersonatedaccount method)": [[11, "ape.api.accounts.ImpersonatedAccount.call"]], "chain_id (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.chain_id"]], "chain_id (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.chain_id"]], "check_signature() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.check_signature"]], "code (ape.api.address.baseaddress property)": [[11, "ape.api.address.BaseAddress.code"]], "codesize (ape.api.address.baseaddress property)": [[11, "ape.api.address.BaseAddress.codesize"]], "compile() (ape.api.compiler.compilerapi method)": [[11, "ape.api.compiler.CompilerAPI.compile"]], "compile() (ape.api.projects.dependencyapi method)": [[11, "ape.api.projects.DependencyAPI.compile"]], "compiler_settings (ape.api.compiler.compilerapi attribute)": [[11, "ape.api.compiler.CompilerAPI.compiler_settings"]], "concurrency (ape.api.providers.providerapi attribute)": [[11, "ape.api.providers.ProviderAPI.concurrency"]], "config (ape.api.compiler.compilerapi property)": [[11, "ape.api.compiler.CompilerAPI.config"]], "config (ape.api.networks.ecosystemapi property)": [[11, "ape.api.networks.EcosystemAPI.config"]], "config (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.config"]], "config (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.config"]], "config_override (ape.api.projects.dependencyapi attribute)": [[11, "ape.api.projects.DependencyAPI.config_override"]], "connect() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.connect"]], "connect() (ape.api.providers.subprocessprovider method)": [[11, "ape.api.providers.SubprocessProvider.connect"]], "connection_id (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.connection_id"]], "connection_id (ape.api.providers.subprocessprovider property)": [[11, "ape.api.providers.SubprocessProvider.connection_id"]], "connection_str (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.connection_str"]], "contracts (ape.api.projects.dependencyapi property)": [[11, "ape.api.projects.DependencyAPI.contracts"]], "contracts_folder (ape.api.projects.dependencyapi attribute)": [[11, "ape.api.projects.DependencyAPI.contracts_folder"]], "contracts_folder (ape.api.projects.projectapi attribute)": [[11, "ape.api.projects.ProjectAPI.contracts_folder"]], "convert() (ape.api.convert.converterapi method)": [[11, "ape.api.convert.ConverterAPI.convert"]], "create_manifest() (ape.api.projects.projectapi method)": [[11, "ape.api.projects.ProjectAPI.create_manifest"]], "create_network_type() (in module ape.api.networks)": [[11, "ape.api.networks.create_network_type"]], "create_transaction() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.create_transaction"]], "custom_network (ape.api.networks.ecosystemapi property)": [[11, "ape.api.networks.EcosystemAPI.custom_network"]], "data_folder (ape.api.networks.ecosystemapi attribute)": [[11, "ape.api.networks.EcosystemAPI.data_folder"]], "data_folder (ape.api.networks.networkapi attribute)": [[11, "ape.api.networks.NetworkAPI.data_folder"]], "data_folder (ape.api.providers.providerapi attribute)": [[11, "ape.api.providers.ProviderAPI.data_folder"]], "declare() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.declare"]], "decode_address() (ape.api.networks.ecosystemapi class method)": [[11, "ape.api.networks.EcosystemAPI.decode_address"]], "decode_block() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.decode_block"]], "decode_calldata() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.decode_calldata"]], "decode_logs() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.decode_logs"]], "decode_logs() (ape.api.transactions.receiptapi method)": [[11, "ape.api.transactions.ReceiptAPI.decode_logs"]], "decode_receipt() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.decode_receipt"]], "decode_returndata() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.decode_returndata"]], "default_network_name (ape.api.networks.ecosystemapi property)": [[11, "ape.api.networks.EcosystemAPI.default_network_name"]], "default_provider_name (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.default_provider_name"]], "deploy() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.deploy"]], "disconnect() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.disconnect"]], "disconnect() (ape.api.providers.subprocessprovider method)": [[11, "ape.api.providers.SubprocessProvider.disconnect"]], "ecosystem (ape.api.networks.networkapi attribute)": [[11, "ape.api.networks.NetworkAPI.ecosystem"]], "empty (ape.api.networks.providercontextmanager property)": [[11, "ape.api.networks.ProviderContextManager.empty"]], "encode_address() (ape.api.networks.ecosystemapi class method)": [[11, "ape.api.networks.EcosystemAPI.encode_address"]], "encode_calldata() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.encode_calldata"]], "encode_deployment() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.encode_deployment"]], "encode_transaction() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.encode_transaction"]], "enrich_calltree() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.enrich_calltree"]], "enrich_error() (ape.api.compiler.compilerapi method)": [[11, "ape.api.compiler.CompilerAPI.enrich_error"]], "estimate_gas_cost() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.estimate_gas_cost"]], "estimate_query() (ape.api.query.queryapi method)": [[11, "ape.api.query.QueryAPI.estimate_query"]], "events (ape.api.transactions.receiptapi property)": [[11, "ape.api.transactions.ReceiptAPI.events"]], "exclude (ape.api.projects.dependencyapi attribute)": [[11, "ape.api.projects.DependencyAPI.exclude"]], "explorer (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.explorer"]], "extract_manifest() (ape.api.projects.dependencyapi method)": [[11, "ape.api.projects.DependencyAPI.extract_manifest"]], "failed (ape.api.transactions.receiptapi property)": [[11, "ape.api.transactions.ReceiptAPI.failed"]], "fee_token_decimals (ape.api.networks.ecosystemapi attribute)": [[11, "ape.api.networks.EcosystemAPI.fee_token_decimals"]], "fee_token_symbol (ape.api.networks.ecosystemapi attribute)": [[11, "ape.api.networks.EcosystemAPI.fee_token_symbol"]], "gas_price (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.gas_price"]], "generate_account() (ape.api.accounts.testaccountcontainerapi method)": [[11, "ape.api.accounts.TestAccountContainerAPI.generate_account"]], "get_address_url() (ape.api.explorers.explorerapi method)": [[11, "ape.api.explorers.ExplorerAPI.get_address_url"]], "get_balance() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_balance"]], "get_block() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_block"]], "get_code() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_code"]], "get_contract_logs() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_contract_logs"]], "get_contract_type() (ape.api.explorers.explorerapi method)": [[11, "ape.api.explorers.ExplorerAPI.get_contract_type"]], "get_method_selector() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.get_method_selector"]], "get_network() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.get_network"]], "get_network_data() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.get_network_data"]], "get_nonce() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_nonce"]], "get_provider() (ape.api.networks.networkapi method)": [[11, "ape.api.networks.NetworkAPI.get_provider"]], "get_proxy_info() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.get_proxy_info"]], "get_receipt() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_receipt"]], "get_transaction_url() (ape.api.explorers.explorerapi method)": [[11, "ape.api.explorers.ExplorerAPI.get_transaction_url"]], "get_transactions_by_block() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_transactions_by_block"]], "get_versions() (ape.api.compiler.compilerapi method)": [[11, "ape.api.compiler.CompilerAPI.get_versions"]], "get_virtual_machine_error() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_virtual_machine_error"]], "history (ape.api.address.baseaddress property)": [[11, "ape.api.address.BaseAddress.history"]], "http_uri (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.http_uri"]], "is_adhoc (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.is_adhoc"]], "is_connected (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.is_connected"]], "is_contract (ape.api.address.baseaddress property)": [[11, "ape.api.address.BaseAddress.is_contract"]], "is_convertible() (ape.api.convert.converterapi method)": [[11, "ape.api.convert.ConverterAPI.is_convertible"]], "is_dev (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.is_dev"]], "is_fork (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.is_fork"]], "is_local (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.is_local"]], "is_valid (ape.api.projects.projectapi property)": [[11, "ape.api.projects.ProjectAPI.is_valid"]], "manifest_cachefile (ape.api.projects.projectapi property)": [[11, "ape.api.projects.ProjectAPI.manifest_cachefile"]], "max_gas (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.max_gas"]], "method_called (ape.api.transactions.receiptapi property)": [[11, "ape.api.transactions.ReceiptAPI.method_called"]], "mine() (ape.api.providers.testproviderapi method)": [[11, "ape.api.providers.TestProviderAPI.mine"]], "name (ape.api.compiler.compilerapi property)": [[11, "ape.api.compiler.CompilerAPI.name"]], "name (ape.api.networks.ecosystemapi attribute)": [[11, "ape.api.networks.EcosystemAPI.name"]], "name (ape.api.networks.networkapi attribute)": [[11, "ape.api.networks.NetworkAPI.name"]], "name (ape.api.projects.dependencyapi attribute)": [[11, "ape.api.projects.DependencyAPI.name"]], "name (ape.api.projects.projectapi attribute)": [[11, "ape.api.projects.ProjectAPI.name"]], "name (ape.api.providers.providerapi attribute)": [[11, "ape.api.providers.ProviderAPI.name"]], "network (ape.api.providers.providerapi attribute)": [[11, "ape.api.providers.ProviderAPI.network"]], "network_choice (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.network_choice"]], "network_id (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.network_id"]], "networks (ape.api.networks.ecosystemapi property)": [[11, "ape.api.networks.EcosystemAPI.networks"]], "nonce (ape.api.address.baseaddress property)": [[11, "ape.api.address.BaseAddress.nonce"]], "path (ape.api.projects.projectapi attribute)": [[11, "ape.api.projects.ProjectAPI.path"]], "perform_query() (ape.api.query.queryapi method)": [[11, "ape.api.query.QueryAPI.perform_query"]], "prepare_transaction() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.prepare_transaction"]], "prepare_transaction() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.prepare_transaction"]], "priority_fee (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.priority_fee"]], "process_config_file() (ape.api.projects.projectapi method)": [[11, "ape.api.projects.ProjectAPI.process_config_file"]], "process_name (ape.api.providers.subprocessprovider property)": [[11, "ape.api.providers.SubprocessProvider.process_name"]], "provider_settings (ape.api.providers.providerapi attribute)": [[11, "ape.api.providers.ProviderAPI.provider_settings"]], "providers (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.providers"]], "publish_contract() (ape.api.explorers.explorerapi method)": [[11, "ape.api.explorers.ExplorerAPI.publish_contract"]], "publish_contract() (ape.api.networks.networkapi method)": [[11, "ape.api.networks.NetworkAPI.publish_contract"]], "raise_for_status() (ape.api.transactions.receiptapi method)": [[11, "ape.api.transactions.ReceiptAPI.raise_for_status"]], "ran_out_of_gas (ape.api.transactions.receiptapi property)": [[11, "ape.api.transactions.ReceiptAPI.ran_out_of_gas"]], "receipt (ape.api.transactions.transactionapi property)": [[11, "ape.api.transactions.TransactionAPI.receipt"]], "remove() (ape.api.accounts.accountcontainerapi method)": [[11, "ape.api.accounts.AccountContainerAPI.remove"]], "replace_manifest() (ape.api.projects.projectapi method)": [[11, "ape.api.projects.ProjectAPI.replace_manifest"]], "request_header (ape.api.networks.ecosystemapi attribute)": [[11, "ape.api.networks.EcosystemAPI.request_header"]], "request_header (ape.api.networks.networkapi attribute)": [[11, "ape.api.networks.NetworkAPI.request_header"]], "request_header (ape.api.providers.providerapi attribute)": [[11, "ape.api.providers.ProviderAPI.request_header"]], "required_confirmations (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.required_confirmations"]], "return_value (ape.api.transactions.receiptapi property)": [[11, "ape.api.transactions.ReceiptAPI.return_value"]], "revert() (ape.api.providers.testproviderapi method)": [[11, "ape.api.providers.TestProviderAPI.revert"]], "send_call() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.send_call"]], "send_private_transaction() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.send_private_transaction"]], "send_transaction() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.send_transaction"]], "serialize_transaction() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.serialize_transaction"]], "serialize_transaction() (ape.api.transactions.transactionapi method)": [[11, "ape.api.transactions.TransactionAPI.serialize_transaction"]], "set_default_network() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.set_default_network"]], "set_default_provider() (ape.api.networks.networkapi method)": [[11, "ape.api.networks.NetworkAPI.set_default_provider"]], "set_timestamp() (ape.api.providers.testproviderapi method)": [[11, "ape.api.providers.TestProviderAPI.set_timestamp"]], "settings (ape.api.compiler.compilerapi property)": [[11, "ape.api.compiler.CompilerAPI.settings"]], "settings (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.settings"]], "sign_message() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.sign_message"]], "sign_message() (ape.api.accounts.impersonatedaccount method)": [[11, "ape.api.accounts.ImpersonatedAccount.sign_message"]], "sign_transaction() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.sign_transaction"]], "sign_transaction() (ape.api.accounts.impersonatedaccount method)": [[11, "ape.api.accounts.ImpersonatedAccount.sign_transaction"]], "snapshot() (ape.api.providers.testproviderapi method)": [[11, "ape.api.providers.TestProviderAPI.snapshot"]], "start() (ape.api.providers.subprocessprovider method)": [[11, "ape.api.providers.SubprocessProvider.start"]], "stop() (ape.api.providers.subprocessprovider method)": [[11, "ape.api.providers.SubprocessProvider.stop"]], "supports_source_tracing (ape.api.compiler.compilerapi property)": [[11, "ape.api.compiler.CompilerAPI.supports_source_tracing"]], "supports_tracing (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.supports_tracing"]], "target (ape.api.networks.proxyinfoapi attribute)": [[11, "ape.api.networks.ProxyInfoAPI.target"]], "total_fees_paid (ape.api.transactions.receiptapi property)": [[11, "ape.api.transactions.ReceiptAPI.total_fees_paid"]], "total_transfer_value (ape.api.transactions.transactionapi property)": [[11, "ape.api.transactions.TransactionAPI.total_transfer_value"]], "trace (ape.api.transactions.receiptapi property)": [[11, "ape.api.transactions.ReceiptAPI.trace"]], "trace (ape.api.transactions.transactionapi property)": [[11, "ape.api.transactions.TransactionAPI.trace"]], "track_coverage() (ape.api.transactions.receiptapi method)": [[11, "ape.api.transactions.ReceiptAPI.track_coverage"]], "track_gas() (ape.api.transactions.receiptapi method)": [[11, "ape.api.transactions.ReceiptAPI.track_gas"]], "transaction_acceptance_timeout (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.transaction_acceptance_timeout"]], "transfer() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.transfer"]], "txn_hash (ape.api.transactions.transactionapi property)": [[11, "ape.api.transactions.TransactionAPI.txn_hash"]], "update_cache() (ape.api.query.queryapi method)": [[11, "ape.api.query.QueryAPI.update_cache"]], "update_manifest() (ape.api.projects.projectapi method)": [[11, "ape.api.projects.ProjectAPI.update_manifest"]], "update_settings() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.update_settings"]], "upstream_chain_id (ape.api.networks.forkednetworkapi property)": [[11, "ape.api.networks.ForkedNetworkAPI.upstream_chain_id"]], "upstream_network (ape.api.networks.forkednetworkapi property)": [[11, "ape.api.networks.ForkedNetworkAPI.upstream_network"]], "upstream_provider (ape.api.networks.forkednetworkapi property)": [[11, "ape.api.networks.ForkedNetworkAPI.upstream_provider"]], "uri (ape.api.projects.dependencyapi property)": [[11, "ape.api.projects.DependencyAPI.uri"]], "use_default_provider() (ape.api.networks.networkapi method)": [[11, "ape.api.networks.NetworkAPI.use_default_provider"]], "use_provider() (ape.api.networks.networkapi method)": [[11, "ape.api.networks.NetworkAPI.use_provider"]], "use_upstream_provider() (ape.api.networks.forkednetworkapi method)": [[11, "ape.api.networks.ForkedNetworkAPI.use_upstream_provider"]], "verify_chain_id() (ape.api.networks.networkapi method)": [[11, "ape.api.networks.NetworkAPI.verify_chain_id"]], "version (ape.api.projects.dependencyapi attribute)": [[11, "ape.api.projects.DependencyAPI.version"]], "version (ape.api.projects.projectapi attribute)": [[11, "ape.api.projects.ProjectAPI.version"]], "version_id (ape.api.projects.dependencyapi property)": [[11, "ape.api.projects.DependencyAPI.version_id"]], "ws_uri (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.ws_uri"]], "accountaliaspromptchoice (class in ape.cli.choices)": [[12, "ape.cli.choices.AccountAliasPromptChoice"]], "alias (class in ape.cli.choices)": [[12, "ape.cli.choices.Alias"]], "allfilepaths (class in ape.cli.paramtype)": [[12, "ape.cli.paramtype.AllFilePaths"]], "apeclicontextobject (class in ape.cli.options)": [[12, "ape.cli.options.ApeCliContextObject"]], "connectedprovidercommand (class in ape.cli.commands)": [[12, "ape.cli.commands.ConnectedProviderCommand"]], "networkboundcommand (class in ape.cli.commands)": [[12, "ape.cli.commands.NetworkBoundCommand"]], "networkchoice (class in ape.cli.choices)": [[12, "ape.cli.choices.NetworkChoice"]], "networkoption (class in ape.cli.options)": [[12, "ape.cli.options.NetworkOption"]], "outputformat (class in ape.cli.choices)": [[12, "ape.cli.choices.OutputFormat"]], "path (class in ape.cli.paramtype)": [[12, "ape.cli.paramtype.Path"]], "promptchoice (class in ape.cli.choices)": [[12, "ape.cli.choices.PromptChoice"]], "tree (ape.cli.choices.outputformat attribute)": [[12, "ape.cli.choices.OutputFormat.TREE"]], "yaml (ape.cli.choices.outputformat attribute)": [[12, "ape.cli.choices.OutputFormat.YAML"]], "abort() (ape.cli.options.apeclicontextobject static method)": [[12, "ape.cli.options.ApeCliContextObject.abort"]], "account_option() (in module ape.cli.options)": [[12, "ape.cli.options.account_option"]], "ape.cli.arguments": [[12, "module-ape.cli.arguments"]], "ape.cli.choices": [[12, "module-ape.cli.choices"]], "ape.cli.commands": [[12, "module-ape.cli.commands"]], "ape.cli.options": [[12, "module-ape.cli.options"]], "ape.cli.paramtype": [[12, "module-ape.cli.paramtype"]], "ape.cli.utils": [[12, "module-ape.cli.utils"]], "ape_cli_context() (in module ape.cli.options)": [[12, "ape.cli.options.ape_cli_context"]], "contract_file_paths_argument() (in module ape.cli.arguments)": [[12, "ape.cli.arguments.contract_file_paths_argument"]], "contract_option() (in module ape.cli.options)": [[12, "ape.cli.options.contract_option"]], "convert() (ape.cli.choices.accountaliaspromptchoice method)": [[12, "ape.cli.choices.AccountAliasPromptChoice.convert"]], "convert() (ape.cli.choices.networkchoice method)": [[12, "ape.cli.choices.NetworkChoice.convert"]], "convert() (ape.cli.choices.promptchoice method)": [[12, "ape.cli.choices.PromptChoice.convert"]], "convert() (ape.cli.paramtype.allfilepaths method)": [[12, "ape.cli.paramtype.AllFilePaths.convert"]], "existing_alias_argument() (in module ape.cli.arguments)": [[12, "ape.cli.arguments.existing_alias_argument"]], "get_metavar() (ape.cli.choices.networkchoice method)": [[12, "ape.cli.choices.NetworkChoice.get_metavar"]], "get_user_selected_account() (in module ape.cli.choices)": [[12, "ape.cli.choices.get_user_selected_account"]], "incompatible_with() (in module ape.cli.options)": [[12, "ape.cli.options.incompatible_with"]], "invoke() (ape.cli.commands.connectedprovidercommand method)": [[12, "ape.cli.commands.ConnectedProviderCommand.invoke"]], "name (ape.cli.choices.alias attribute)": [[12, "ape.cli.choices.Alias.name"]], "network_option() (in module ape.cli.options)": [[12, "ape.cli.options.network_option"]], "non_existing_alias_argument() (in module ape.cli.arguments)": [[12, "ape.cli.arguments.non_existing_alias_argument"]], "output_format_choice() (in module ape.cli.choices)": [[12, "ape.cli.choices.output_format_choice"]], "output_format_option() (in module ape.cli.options)": [[12, "ape.cli.options.output_format_option"]], "parse_args() (ape.cli.commands.connectedprovidercommand method)": [[12, "ape.cli.commands.ConnectedProviderCommand.parse_args"]], "print_choices() (ape.cli.choices.accountaliaspromptchoice method)": [[12, "ape.cli.choices.AccountAliasPromptChoice.print_choices"]], "print_choices() (ape.cli.choices.promptchoice method)": [[12, "ape.cli.choices.PromptChoice.print_choices"]], "select_account() (ape.cli.choices.accountaliaspromptchoice method)": [[12, "ape.cli.choices.AccountAliasPromptChoice.select_account"]], "select_account() (in module ape.cli.choices)": [[12, "ape.cli.choices.select_account"]], "skip_confirmation_option() (in module ape.cli.options)": [[12, "ape.cli.options.skip_confirmation_option"]], "verbosity_option() (in module ape.cli.options)": [[12, "ape.cli.options.verbosity_option"]], "contractcontainer (class in ape.contracts.base)": [[13, "ape.contracts.base.ContractContainer"]], "contractevent (class in ape.contracts.base)": [[13, "ape.contracts.base.ContractEvent"]], "contractinstance (class in ape.contracts.base)": [[13, "ape.contracts.base.ContractInstance"]], "contracttypewrapper (class in ape.contracts.base)": [[13, "ape.contracts.base.ContractTypeWrapper"]], "__call__() (ape.contracts.base.contractcontainer method)": [[13, "ape.contracts.base.ContractContainer.__call__"]], "__call__() (ape.contracts.base.contractevent method)": [[13, "ape.contracts.base.ContractEvent.__call__"]], "__call__() (ape.contracts.base.contractinstance method)": [[13, "ape.contracts.base.ContractInstance.__call__"]], "__dir__() (ape.contracts.base.contractinstance method)": [[13, "ape.contracts.base.ContractInstance.__dir__"]], "__getattr__() (ape.contracts.base.contractcontainer method)": [[13, "ape.contracts.base.ContractContainer.__getattr__"]], "__getattr__() (ape.contracts.base.contractinstance method)": [[13, "ape.contracts.base.ContractInstance.__getattr__"]], "__iter__() (ape.contracts.base.contractevent method)": [[13, "ape.contracts.base.ContractEvent.__iter__"]], "address (ape.contracts.base.contractinstance property)": [[13, "ape.contracts.base.ContractInstance.address"]], "at() (ape.contracts.base.contractcontainer method)": [[13, "ape.contracts.base.ContractContainer.at"]], "call_view_method() (ape.contracts.base.contractinstance method)": [[13, "ape.contracts.base.ContractInstance.call_view_method"]], "decode_input() (ape.contracts.base.contracttypewrapper method)": [[13, "ape.contracts.base.ContractTypeWrapper.decode_input"]], "deploy() (ape.contracts.base.contractcontainer method)": [[13, "ape.contracts.base.ContractContainer.deploy"]], "deployments (ape.contracts.base.contractcontainer property)": [[13, "ape.contracts.base.ContractContainer.deployments"]], "from_receipt() (ape.contracts.base.contractevent method)": [[13, "ape.contracts.base.ContractEvent.from_receipt"]], "get_error_by_signature() (ape.contracts.base.contractinstance method)": [[13, "ape.contracts.base.ContractInstance.get_error_by_signature"]], "get_event_by_signature() (ape.contracts.base.contractinstance method)": [[13, "ape.contracts.base.ContractInstance.get_event_by_signature"]], "identifier_lookup (ape.contracts.base.contracttypewrapper property)": [[13, "ape.contracts.base.ContractTypeWrapper.identifier_lookup"]], "invoke_transaction() (ape.contracts.base.contractinstance method)": [[13, "ape.contracts.base.ContractInstance.invoke_transaction"]], "name (ape.contracts.base.contractevent property)": [[13, "ape.contracts.base.ContractEvent.name"]], "poll_logs() (ape.contracts.base.contractevent method)": [[13, "ape.contracts.base.ContractEvent.poll_logs"]], "query() (ape.contracts.base.contractevent method)": [[13, "ape.contracts.base.ContractEvent.query"]], "range() (ape.contracts.base.contractevent method)": [[13, "ape.contracts.base.ContractEvent.range"]], "receipt (ape.contracts.base.contractinstance property)": [[13, "ape.contracts.base.ContractInstance.receipt"]], "selector_identifiers (ape.contracts.base.contracttypewrapper property)": [[13, "ape.contracts.base.ContractTypeWrapper.selector_identifiers"]], "source_path (ape.contracts.base.contracttypewrapper property)": [[13, "ape.contracts.base.ContractTypeWrapper.source_path"]], "apinotimplementederror": [[14, "ape.exceptions.APINotImplementedError"]], "abort": [[14, "ape.exceptions.Abort"]], "accountserror": [[14, "ape.exceptions.AccountsError"]], "aliasalreadyinuseerror": [[14, "ape.exceptions.AliasAlreadyInUseError"]], "apeattributeerror": [[14, "ape.exceptions.ApeAttributeError"]], "apeexception": [[14, "ape.exceptions.ApeException"]], "apeindexerror": [[14, "ape.exceptions.ApeIndexError"]], "argumentslengtherror": [[14, "ape.exceptions.ArgumentsLengthError"]], "blocknotfounderror": [[14, "ape.exceptions.BlockNotFoundError"]], "chainerror": [[14, "ape.exceptions.ChainError"]], "compilererror": [[14, "ape.exceptions.CompilerError"]], "configerror": [[14, "ape.exceptions.ConfigError"]], "contractdataerror": [[14, "ape.exceptions.ContractDataError"]], "contractlogicerror": [[14, "ape.exceptions.ContractLogicError"]], "contractnotfounderror": [[14, "ape.exceptions.ContractNotFoundError"]], "conversionerror": [[14, "ape.exceptions.ConversionError"]], "customerror": [[14, "ape.exceptions.CustomError"]], "decodingerror": [[14, "ape.exceptions.DecodingError"]], "ecosystemnotfounderror": [[14, "ape.exceptions.EcosystemNotFoundError"]], "methodnonpayableerror": [[14, "ape.exceptions.MethodNonPayableError"]], "networkerror": [[14, "ape.exceptions.NetworkError"]], "networkmismatcherror": [[14, "ape.exceptions.NetworkMismatchError"]], "networknotfounderror": [[14, "ape.exceptions.NetworkNotFoundError"]], "outofgaserror": [[14, "ape.exceptions.OutOfGasError"]], "projecterror": [[14, "ape.exceptions.ProjectError"]], "providererror": [[14, "ape.exceptions.ProviderError"]], "providernotconnectederror": [[14, "ape.exceptions.ProviderNotConnectedError"]], "providernotfounderror": [[14, "ape.exceptions.ProviderNotFoundError"]], "queryengineerror": [[14, "ape.exceptions.QueryEngineError"]], "rpctimeouterror": [[14, "ape.exceptions.RPCTimeoutError"]], "signatureerror": [[14, "ape.exceptions.SignatureError"]], "subprocesserror": [[14, "ape.exceptions.SubprocessError"]], "subprocesstimeouterror": [[14, "ape.exceptions.SubprocessTimeoutError"]], "transactionerror": [[14, "ape.exceptions.TransactionError"]], "transactionnotfounderror": [[14, "ape.exceptions.TransactionNotFoundError"]], "unknownsnapshoterror": [[14, "ape.exceptions.UnknownSnapshotError"]], "unknownversionerror": [[14, "ape.exceptions.UnknownVersionError"]], "virtualmachineerror": [[14, "ape.exceptions.VirtualMachineError"]], "ape.exceptions": [[14, "module-ape.exceptions"]], "dev_message (ape.exceptions.contractlogicerror property)": [[14, "ape.exceptions.ContractLogicError.dev_message"]], "from_error() (ape.exceptions.contractlogicerror class method)": [[14, "ape.exceptions.ContractLogicError.from_error"]], "handle_ape_exception() (in module ape.exceptions)": [[14, "ape.exceptions.handle_ape_exception"]], "name (ape.exceptions.customerror property)": [[14, "ape.exceptions.CustomError.name"]], "show() (ape.exceptions.abort method)": [[14, "ape.exceptions.Abort.show"]], "accounthistory (class in ape.managers.chain)": [[15, "ape.managers.chain.AccountHistory"]], "accountintconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.AccountIntConverter"]], "accountmanager (class in ape.managers.accounts)": [[15, "ape.managers.accounts.AccountManager"]], "addressapiconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.AddressAPIConverter"]], "apeproject (class in ape.managers.project.types)": [[15, "ape.managers.project.types.ApeProject"]], "baseproject (class in ape.managers.project.types)": [[15, "ape.managers.project.types.BaseProject"]], "blockcontainer (class in ape.managers.chain)": [[15, "ape.managers.chain.BlockContainer"]], "brownieproject (class in ape.managers.project.types)": [[15, "ape.managers.project.types.BrownieProject"]], "bytesaddressconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.BytesAddressConverter"]], "chainmanager (class in ape.managers.chain)": [[15, "ape.managers.chain.ChainManager"]], "compilermanager (class in ape.managers.compilers)": [[15, "ape.managers.compilers.CompilerManager"]], "configmanager (class in ape.managers.config)": [[15, "ape.managers.config.ConfigManager"]], "contractcache (class in ape.managers.chain)": [[15, "ape.managers.chain.ContractCache"]], "conversionmanager (class in ape.managers.converters)": [[15, "ape.managers.converters.ConversionManager"]], "data_folder (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.DATA_FOLDER"]], "defaultqueryprovider (class in ape.managers.query)": [[15, "ape.managers.query.DefaultQueryProvider"]], "deploymentconfig (class in ape.managers.config)": [[15, "ape.managers.config.DeploymentConfig"]], "deploymentconfigcollection (class in ape.managers.config)": [[15, "ape.managers.config.DeploymentConfigCollection"]], "githubdependency (class in ape.managers.project.dependency)": [[15, "ape.managers.project.dependency.GithubDependency"]], "hexaddressconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.HexAddressConverter"]], "hexconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.HexConverter"]], "hexintconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.HexIntConverter"]], "intaddressconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.IntAddressConverter"]], "localdependency (class in ape.managers.project.dependency)": [[15, "ape.managers.project.dependency.LocalDependency"]], "networkmanager (class in ape.managers.networks)": [[15, "ape.managers.networks.NetworkManager"]], "npmdependency (class in ape.managers.project.dependency)": [[15, "ape.managers.project.dependency.NpmDependency"]], "project_folder (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.PROJECT_FOLDER"]], "projectmanager (class in ape.managers.project.manager)": [[15, "ape.managers.project.manager.ProjectManager"]], "querymanager (class in ape.managers.query)": [[15, "ape.managers.query.QueryManager"]], "stringintconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.StringIntConverter"]], "testaccountmanager (class in ape.managers.accounts)": [[15, "ape.managers.accounts.TestAccountManager"]], "timestampconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.TimestampConverter"]], "transactionhistory (class in ape.managers.chain)": [[15, "ape.managers.chain.TransactionHistory"]], "__contains__() (ape.managers.accounts.accountmanager method)": [[15, "ape.managers.accounts.AccountManager.__contains__"]], "__contains__() (ape.managers.accounts.testaccountmanager method)": [[15, "ape.managers.accounts.TestAccountManager.__contains__"]], "__delitem__() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.__delitem__"]], "__getattr__() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.__getattr__"]], "__getitem__() (ape.managers.accounts.testaccountmanager method)": [[15, "ape.managers.accounts.TestAccountManager.__getitem__"]], "__getitem__() (ape.managers.chain.blockcontainer method)": [[15, "ape.managers.chain.BlockContainer.__getitem__"]], "__iter__() (ape.managers.accounts.testaccountmanager method)": [[15, "ape.managers.accounts.TestAccountManager.__iter__"]], "__iter__() (ape.managers.chain.accounthistory method)": [[15, "ape.managers.chain.AccountHistory.__iter__"]], "__iter__() (ape.managers.chain.blockcontainer method)": [[15, "ape.managers.chain.BlockContainer.__iter__"]], "__len__() (ape.managers.accounts.accountmanager method)": [[15, "ape.managers.accounts.AccountManager.__len__"]], "__len__() (ape.managers.accounts.testaccountmanager method)": [[15, "ape.managers.accounts.TestAccountManager.__len__"]], "__len__() (ape.managers.chain.accounthistory method)": [[15, "ape.managers.chain.AccountHistory.__len__"]], "__len__() (ape.managers.chain.blockcontainer method)": [[15, "ape.managers.chain.BlockContainer.__len__"]], "__setitem__() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.__setitem__"]], "__str__() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.__str__"]], "active_provider (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.active_provider"]], "address (ape.managers.chain.accounthistory attribute)": [[15, "ape.managers.chain.AccountHistory.address"]], "aliases (ape.managers.accounts.accountmanager property)": [[15, "ape.managers.accounts.AccountManager.aliases"]], "ape.managers.accounts": [[15, "module-ape.managers.accounts"]], "ape.managers.compilers": [[15, "module-ape.managers.compilers"]], "ape.managers.config": [[15, "module-ape.managers.config"]], "ape.managers.converters": [[15, "module-ape.managers.converters"]], "ape.managers.networks": [[15, "module-ape.managers.networks"]], "ape.managers.project.dependency": [[15, "module-ape.managers.project.dependency"]], "ape.managers.project.manager": [[15, "module-ape.managers.project.manager"]], "ape.managers.query": [[15, "module-ape.managers.query"]], "append() (ape.managers.chain.accounthistory method)": [[15, "ape.managers.chain.AccountHistory.append"]], "append() (ape.managers.chain.transactionhistory method)": [[15, "ape.managers.chain.TransactionHistory.append"]], "base_fee (ape.managers.chain.chainmanager property)": [[15, "ape.managers.chain.ChainManager.base_fee"]], "blocks (ape.managers.chain.chainmanager property)": [[15, "ape.managers.chain.ChainManager.blocks"]], "cache_blueprint() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.cache_blueprint"]], "cache_deployment() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.cache_deployment"]], "cache_proxy_info() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.cache_proxy_info"]], "can_trace_source() (ape.managers.compilers.compilermanager method)": [[15, "ape.managers.compilers.CompilerManager.can_trace_source"]], "chain_id (ape.managers.chain.chainmanager property)": [[15, "ape.managers.chain.ChainManager.chain_id"]], "clear_local_caches() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.clear_local_caches"]], "compile() (ape.managers.compilers.compilermanager method)": [[15, "ape.managers.compilers.CompilerManager.compile"]], "compile_source() (ape.managers.compilers.compilermanager method)": [[15, "ape.managers.compilers.CompilerManager.compile_source"]], "compiler_data (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.compiler_data"]], "containers (ape.managers.accounts.accountmanager property)": [[15, "ape.managers.accounts.AccountManager.containers"]], "contracts (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.contracts"]], "contracts_folder (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.contracts_folder"]], "contracts_folder (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.contracts_folder"]], "convert() (ape.managers.converters.accountintconverter method)": [[15, "ape.managers.converters.AccountIntConverter.convert"]], "convert() (ape.managers.converters.addressapiconverter method)": [[15, "ape.managers.converters.AddressAPIConverter.convert"]], "convert() (ape.managers.converters.bytesaddressconverter method)": [[15, "ape.managers.converters.BytesAddressConverter.convert"]], "convert() (ape.managers.converters.conversionmanager method)": [[15, "ape.managers.converters.ConversionManager.convert"]], "convert() (ape.managers.converters.hexaddressconverter method)": [[15, "ape.managers.converters.HexAddressConverter.convert"]], "convert() (ape.managers.converters.hexconverter method)": [[15, "ape.managers.converters.HexConverter.convert"]], "convert() (ape.managers.converters.hexintconverter method)": [[15, "ape.managers.converters.HexIntConverter.convert"]], "convert() (ape.managers.converters.intaddressconverter method)": [[15, "ape.managers.converters.IntAddressConverter.convert"]], "convert() (ape.managers.converters.stringintconverter method)": [[15, "ape.managers.converters.StringIntConverter.convert"]], "convert() (ape.managers.converters.timestampconverter method)": [[15, "ape.managers.converters.TimestampConverter.convert"]], "create_custom_provider() (ape.managers.networks.networkmanager method)": [[15, "ape.managers.networks.NetworkManager.create_custom_provider"]], "create_manifest() (ape.managers.project.types.baseproject method)": [[15, "ape.managers.project.types.BaseProject.create_manifest"]], "default_ecosystem (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.default_ecosystem"]], "default_ecosystem (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.default_ecosystem"]], "dependencies (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.dependencies"]], "dependencies (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.dependencies"]], "deployments (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.deployments"]], "ecosystem (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.ecosystem"]], "ecosystem_names (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.ecosystem_names"]], "ecosystems (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.ecosystems"]], "engines (ape.managers.query.querymanager property)": [[15, "ape.managers.query.QueryManager.engines"]], "enrich_error() (ape.managers.compilers.compilermanager method)": [[15, "ape.managers.compilers.CompilerManager.enrich_error"]], "estimate_query() (ape.managers.query.defaultqueryprovider method)": [[15, "ape.managers.query.DefaultQueryProvider.estimate_query"]], "extensions_with_missing_compilers() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.extensions_with_missing_compilers"]], "extract_manifest() (ape.managers.project.dependency.githubdependency method)": [[15, "ape.managers.project.dependency.GithubDependency.extract_manifest"]], "extract_manifest() (ape.managers.project.dependency.localdependency method)": [[15, "ape.managers.project.dependency.LocalDependency.extract_manifest"]], "extract_manifest() (ape.managers.project.dependency.npmdependency method)": [[15, "ape.managers.project.dependency.NpmDependency.extract_manifest"]], "extract_manifest() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.extract_manifest"]], "flatten_contract() (ape.managers.compilers.compilermanager method)": [[15, "ape.managers.compilers.CompilerManager.flatten_contract"]], "fork() (ape.managers.networks.networkmanager method)": [[15, "ape.managers.networks.NetworkManager.fork"]], "gas_price (ape.managers.chain.chainmanager property)": [[15, "ape.managers.chain.ChainManager.gas_price"]], "get() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.get"]], "get_accounts_by_type() (ape.managers.accounts.accountmanager method)": [[15, "ape.managers.accounts.AccountManager.get_accounts_by_type"]], "get_blueprint() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.get_blueprint"]], "get_compiler_data() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.get_compiler_data"]], "get_config() (ape.managers.config.configmanager method)": [[15, "ape.managers.config.ConfigManager.get_config"]], "get_container() (ape.managers.chain.contractcache class method)": [[15, "ape.managers.chain.ContractCache.get_container"]], "get_contract() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.get_contract"]], "get_creation_receipt() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.get_creation_receipt"]], "get_deployments() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.get_deployments"]], "get_ecosystem() (ape.managers.networks.networkmanager method)": [[15, "ape.managers.networks.NetworkManager.get_ecosystem"]], "get_imports() (ape.managers.compilers.compilermanager method)": [[15, "ape.managers.compilers.CompilerManager.get_imports"]], "get_multiple() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.get_multiple"]], "get_network_choices() (ape.managers.networks.networkmanager method)": [[15, "ape.managers.networks.NetworkManager.get_network_choices"]], "get_project() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.get_project"]], "get_provider_from_choice() (ape.managers.networks.networkmanager method)": [[15, "ape.managers.networks.NetworkManager.get_provider_from_choice"]], "get_proxy_info() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.get_proxy_info"]], "get_receipt() (ape.managers.chain.chainmanager method)": [[15, "ape.managers.chain.ChainManager.get_receipt"]], "get_references() (ape.managers.compilers.compilermanager method)": [[15, "ape.managers.compilers.CompilerManager.get_references"]], "github (ape.managers.project.dependency.githubdependency attribute)": [[15, "ape.managers.project.dependency.GithubDependency.github"]], "head (ape.managers.chain.blockcontainer property)": [[15, "ape.managers.chain.BlockContainer.head"]], "height (ape.managers.chain.blockcontainer property)": [[15, "ape.managers.chain.BlockContainer.height"]], "history (ape.managers.chain.chainmanager property)": [[15, "ape.managers.chain.ChainManager.history"]], "instance_at() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.instance_at"]], "instance_from_receipt() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.instance_from_receipt"]], "interfaces_folder (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.interfaces_folder"]], "is_convertible() (ape.managers.converters.accountintconverter method)": [[15, "ape.managers.converters.AccountIntConverter.is_convertible"]], "is_convertible() (ape.managers.converters.addressapiconverter method)": [[15, "ape.managers.converters.AddressAPIConverter.is_convertible"]], "is_convertible() (ape.managers.converters.bytesaddressconverter method)": [[15, "ape.managers.converters.BytesAddressConverter.is_convertible"]], "is_convertible() (ape.managers.converters.hexaddressconverter method)": [[15, "ape.managers.converters.HexAddressConverter.is_convertible"]], "is_convertible() (ape.managers.converters.hexconverter method)": [[15, "ape.managers.converters.HexConverter.is_convertible"]], "is_convertible() (ape.managers.converters.hexintconverter method)": [[15, "ape.managers.converters.HexIntConverter.is_convertible"]], "is_convertible() (ape.managers.converters.intaddressconverter method)": [[15, "ape.managers.converters.IntAddressConverter.is_convertible"]], "is_convertible() (ape.managers.converters.stringintconverter method)": [[15, "ape.managers.converters.StringIntConverter.is_convertible"]], "is_convertible() (ape.managers.converters.timestampconverter method)": [[15, "ape.managers.converters.TimestampConverter.is_convertible"]], "is_type() (ape.managers.converters.conversionmanager method)": [[15, "ape.managers.converters.ConversionManager.is_type"]], "is_valid (ape.managers.project.types.baseproject property)": [[15, "ape.managers.project.types.BaseProject.is_valid"]], "is_valid (ape.managers.project.types.brownieproject property)": [[15, "ape.managers.project.types.BrownieProject.is_valid"]], "isolate() (ape.managers.chain.chainmanager method)": [[15, "ape.managers.chain.ChainManager.isolate"]], "load() (ape.managers.accounts.accountmanager method)": [[15, "ape.managers.accounts.AccountManager.load"]], "load() (ape.managers.config.configmanager method)": [[15, "ape.managers.config.ConfigManager.load"]], "load_contracts() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.load_contracts"]], "lookup_path() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.lookup_path"]], "meta (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.meta"]], "meta (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.meta"]], "mine() (ape.managers.chain.chainmanager method)": [[15, "ape.managers.chain.ChainManager.mine"]], "name (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.name"]], "network (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.network"]], "network_data (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.network_data"]], "network_names (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.network_names"]], "networks_yaml (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.networks_yaml"]], "npm (ape.managers.project.dependency.npmdependency attribute)": [[15, "ape.managers.project.dependency.NpmDependency.npm"]], "outgoing (ape.managers.chain.accounthistory property)": [[15, "ape.managers.chain.AccountHistory.outgoing"]], "parse_network_choice() (ape.managers.networks.networkmanager method)": [[15, "ape.managers.networks.NetworkManager.parse_network_choice"]], "path (ape.managers.project.manager.projectmanager attribute)": [[15, "ape.managers.project.manager.ProjectManager.path"]], "pending_timestamp (ape.managers.chain.chainmanager property)": [[15, "ape.managers.chain.ChainManager.pending_timestamp"]], "perform_query() (ape.managers.query.defaultqueryprovider method)": [[15, "ape.managers.query.DefaultQueryProvider.perform_query"]], "poll_blocks() (ape.managers.chain.blockcontainer method)": [[15, "ape.managers.chain.BlockContainer.poll_blocks"]], "process_config_file() (ape.managers.project.types.baseproject method)": [[15, "ape.managers.project.types.BaseProject.process_config_file"]], "process_config_file() (ape.managers.project.types.brownieproject method)": [[15, "ape.managers.project.types.BrownieProject.process_config_file"]], "project_types (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.project_types"]], "provider_names (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.provider_names"]], "query() (ape.managers.chain.accounthistory method)": [[15, "ape.managers.chain.AccountHistory.query"]], "query() (ape.managers.chain.blockcontainer method)": [[15, "ape.managers.chain.BlockContainer.query"]], "query() (ape.managers.query.querymanager method)": [[15, "ape.managers.query.QueryManager.query"]], "range() (ape.managers.chain.blockcontainer method)": [[15, "ape.managers.chain.BlockContainer.range"]], "ref (ape.managers.project.dependency.githubdependency attribute)": [[15, "ape.managers.project.dependency.GithubDependency.ref"]], "registered_compilers (ape.managers.compilers.compilermanager property)": [[15, "ape.managers.compilers.CompilerManager.registered_compilers"]], "restore() (ape.managers.chain.chainmanager method)": [[15, "ape.managers.chain.ChainManager.restore"]], "revert_to_block() (ape.managers.chain.accounthistory method)": [[15, "ape.managers.chain.AccountHistory.revert_to_block"]], "revert_to_block() (ape.managers.chain.transactionhistory method)": [[15, "ape.managers.chain.TransactionHistory.revert_to_block"]], "scripts_folder (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.scripts_folder"]], "sessional (ape.managers.chain.accounthistory attribute)": [[15, "ape.managers.chain.AccountHistory.sessional"]], "set_default_ecosystem() (ape.managers.networks.networkmanager method)": [[15, "ape.managers.networks.NetworkManager.set_default_ecosystem"]], "snapshot() (ape.managers.chain.chainmanager method)": [[15, "ape.managers.chain.ChainManager.snapshot"]], "source_paths (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.source_paths"]], "source_paths (ape.managers.project.types.baseproject property)": [[15, "ape.managers.project.types.BaseProject.source_paths"]], "sources (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.sources"]], "sources_missing (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.sources_missing"]], "test_accounts (ape.managers.accounts.accountmanager property)": [[15, "ape.managers.accounts.AccountManager.test_accounts"]], "tests_folder (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.tests_folder"]], "track_deployment() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.track_deployment"]], "tracked_deployments (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.tracked_deployments"]], "uri (ape.managers.project.dependency.githubdependency property)": [[15, "ape.managers.project.dependency.GithubDependency.uri"]], "uri (ape.managers.project.dependency.localdependency property)": [[15, "ape.managers.project.dependency.LocalDependency.uri"]], "uri (ape.managers.project.dependency.npmdependency property)": [[15, "ape.managers.project.dependency.NpmDependency.uri"]], "using_project() (ape.managers.config.configmanager method)": [[15, "ape.managers.config.ConfigManager.using_project"]], "version (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.version"]], "version (ape.managers.project.dependency.localdependency attribute)": [[15, "ape.managers.project.dependency.LocalDependency.version"]], "version_from_json (ape.managers.project.dependency.npmdependency property)": [[15, "ape.managers.project.dependency.NpmDependency.version_from_json"]], "version_from_local_json (ape.managers.project.dependency.npmdependency property)": [[15, "ape.managers.project.dependency.NpmDependency.version_from_local_json"]], "version_id (ape.managers.project.dependency.githubdependency property)": [[15, "ape.managers.project.dependency.GithubDependency.version_id"]], "version_id (ape.managers.project.dependency.localdependency property)": [[15, "ape.managers.project.dependency.LocalDependency.version_id"]], "version_id (ape.managers.project.dependency.npmdependency property)": [[15, "ape.managers.project.dependency.NpmDependency.version_id"]], "accountplugin (class in ape.plugins.account)": [[16, "ape.plugins.account.AccountPlugin"]], "compilerplugin (class in ape.plugins.compiler)": [[16, "ape.plugins.compiler.CompilerPlugin"]], "config (class in ape.plugins.config)": [[16, "ape.plugins.config.Config"]], "conversionplugin (class in ape.plugins.converter)": [[16, "ape.plugins.converter.ConversionPlugin"]], "dependencyplugin (class in ape.plugins.project)": [[16, "ape.plugins.project.DependencyPlugin"]], "ecosystemplugin (class in ape.plugins.network)": [[16, "ape.plugins.network.EcosystemPlugin"]], "explorerplugin (class in ape.plugins.network)": [[16, "ape.plugins.network.ExplorerPlugin"]], "networkplugin (class in ape.plugins.network)": [[16, "ape.plugins.network.NetworkPlugin"]], "plugintype (class in ape.plugins.pluggy_patch)": [[16, "ape.plugins.pluggy_patch.PluginType"]], "projectplugin (class in ape.plugins.project)": [[16, "ape.plugins.project.ProjectPlugin"]], "providerplugin (class in ape.plugins.network)": [[16, "ape.plugins.network.ProviderPlugin"]], "queryplugin (class in ape.plugins.query)": [[16, "ape.plugins.query.QueryPlugin"]], "account_types() (ape.plugins.account.accountplugin method)": [[16, "ape.plugins.account.AccountPlugin.account_types"]], "ape.plugins": [[16, "module-ape.plugins"]], "ape.plugins.account": [[16, "module-ape.plugins.account"]], "ape.plugins.compiler": [[16, "module-ape.plugins.compiler"]], "ape.plugins.config": [[16, "module-ape.plugins.config"]], "ape.plugins.converter": [[16, "module-ape.plugins.converter"]], "ape.plugins.network": [[16, "module-ape.plugins.network"]], "ape.plugins.pluggy_patch": [[16, "module-ape.plugins.pluggy_patch"]], "ape.plugins.project": [[16, "module-ape.plugins.project"]], "ape.plugins.query": [[16, "module-ape.plugins.query"]], "config_class() (ape.plugins.config.config method)": [[16, "ape.plugins.config.Config.config_class"]], "converters() (ape.plugins.converter.conversionplugin method)": [[16, "ape.plugins.converter.ConversionPlugin.converters"]], "dependencies() (ape.plugins.project.dependencyplugin method)": [[16, "ape.plugins.project.DependencyPlugin.dependencies"]], "ecosystems() (ape.plugins.network.ecosystemplugin method)": [[16, "ape.plugins.network.EcosystemPlugin.ecosystems"]], "explorers() (ape.plugins.network.explorerplugin method)": [[16, "ape.plugins.network.ExplorerPlugin.explorers"]], "networks() (ape.plugins.network.networkplugin method)": [[16, "ape.plugins.network.NetworkPlugin.networks"]], "plugin_manager (in module ape.plugins.pluggy_patch)": [[16, "ape.plugins.pluggy_patch.plugin_manager"]], "projects() (ape.plugins.project.projectplugin method)": [[16, "ape.plugins.project.ProjectPlugin.projects"]], "providers() (ape.plugins.network.providerplugin method)": [[16, "ape.plugins.network.ProviderPlugin.providers"]], "query_engines() (ape.plugins.query.queryplugin method)": [[16, "ape.plugins.query.QueryPlugin.query_engines"]], "register() (in module ape.plugins)": [[16, "ape.plugins.register"]], "register_compiler() (ape.plugins.compiler.compilerplugin method)": [[16, "ape.plugins.compiler.CompilerPlugin.register_compiler"]], "addresstype (in module ape.types.address)": [[17, "ape.types.address.AddressType"]], "basecontractlog (class in ape.types)": [[17, "ape.types.BaseContractLog"]], "blockid (in module ape.types)": [[17, "ape.types.BlockID"]], "contractcoverage (class in ape.types.coverage)": [[17, "ape.types.coverage.ContractCoverage"]], "contractlog (class in ape.types)": [[17, "ape.types.ContractLog"]], "contractsourcecoverage (class in ape.types.coverage)": [[17, "ape.types.coverage.ContractSourceCoverage"]], "coverageproject (class in ape.types.coverage)": [[17, "ape.types.coverage.CoverageProject"]], "coveragereport (class in ape.types.coverage)": [[17, "ape.types.coverage.CoverageReport"]], "coveragestatement (class in ape.types.coverage)": [[17, "ape.types.coverage.CoverageStatement"]], "functioncoverage (class in ape.types.coverage)": [[17, "ape.types.coverage.FunctionCoverage"]], "messagesignature (class in ape.types.signatures)": [[17, "ape.types.signatures.MessageSignature"]], "mockcontractlog (class in ape.types)": [[17, "ape.types.MockContractLog"]], "rawaddress (in module ape.types.address)": [[17, "ape.types.address.RawAddress"]], "signablemessage (class in ape.types.signatures)": [[17, "ape.types.signatures.SignableMessage"]], "transactionsignature (class in ape.types.signatures)": [[17, "ape.types.signatures.TransactionSignature"]], "ape.types": [[17, "module-ape.types"]], "ape.types.address": [[17, "module-ape.types.address"]], "ape.types.coverage": [[17, "module-ape.types.coverage"]], "block_hash (ape.types.contractlog attribute)": [[17, "ape.types.ContractLog.block_hash"]], "block_number (ape.types.contractlog attribute)": [[17, "ape.types.ContractLog.block_number"]], "body (ape.types.signatures.signablemessage attribute)": [[17, "ape.types.signatures.SignableMessage.body"]], "contract_address (ape.types.basecontractlog attribute)": [[17, "ape.types.BaseContractLog.contract_address"]], "contracts (ape.types.coverage.contractsourcecoverage attribute)": [[17, "ape.types.coverage.ContractSourceCoverage.contracts"]], "event_arguments (ape.types.basecontractlog attribute)": [[17, "ape.types.BaseContractLog.event_arguments"]], "event_name (ape.types.basecontractlog attribute)": [[17, "ape.types.BaseContractLog.event_name"]], "full_name (ape.types.coverage.functioncoverage attribute)": [[17, "ape.types.coverage.FunctionCoverage.full_name"]], "function_hits (ape.types.coverage.contractcoverage property)": [[17, "ape.types.coverage.ContractCoverage.function_hits"]], "function_hits (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.function_hits"]], "function_hits (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.function_hits"]], "function_hits (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.function_hits"]], "function_rate (ape.types.coverage.contractcoverage property)": [[17, "ape.types.coverage.ContractCoverage.function_rate"]], "function_rate (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.function_rate"]], "function_rate (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.function_rate"]], "function_rate (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.function_rate"]], "functions (ape.types.coverage.contractcoverage attribute)": [[17, "ape.types.coverage.ContractCoverage.functions"]], "get_html() (ape.types.coverage.coveragereport method)": [[17, "ape.types.coverage.CoverageReport.get_html"]], "get_xml() (ape.types.coverage.coveragereport method)": [[17, "ape.types.coverage.CoverageReport.get_xml"]], "header (ape.types.signatures.signablemessage attribute)": [[17, "ape.types.signatures.SignableMessage.header"]], "hit_count (ape.types.coverage.coveragestatement attribute)": [[17, "ape.types.coverage.CoverageStatement.hit_count"]], "hit_count (ape.types.coverage.functioncoverage attribute)": [[17, "ape.types.coverage.FunctionCoverage.hit_count"]], "include() (ape.types.coverage.contractsourcecoverage method)": [[17, "ape.types.coverage.ContractSourceCoverage.include"]], "line_rate (ape.types.coverage.contractcoverage property)": [[17, "ape.types.coverage.ContractCoverage.line_rate"]], "line_rate (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.line_rate"]], "line_rate (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.line_rate"]], "line_rate (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.line_rate"]], "line_rate (ape.types.coverage.functioncoverage property)": [[17, "ape.types.coverage.FunctionCoverage.line_rate"]], "lines_covered (ape.types.coverage.contractcoverage property)": [[17, "ape.types.coverage.ContractCoverage.lines_covered"]], "lines_covered (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.lines_covered"]], "lines_covered (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.lines_covered"]], "lines_covered (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.lines_covered"]], "lines_covered (ape.types.coverage.functioncoverage property)": [[17, "ape.types.coverage.FunctionCoverage.lines_covered"]], "lines_valid (ape.types.coverage.contractcoverage property)": [[17, "ape.types.coverage.ContractCoverage.lines_valid"]], "lines_valid (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.lines_valid"]], "lines_valid (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.lines_valid"]], "lines_valid (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.lines_valid"]], "lines_valid (ape.types.coverage.functioncoverage property)": [[17, "ape.types.coverage.FunctionCoverage.lines_valid"]], "location (ape.types.coverage.coveragestatement attribute)": [[17, "ape.types.coverage.CoverageStatement.location"]], "log_index (ape.types.contractlog attribute)": [[17, "ape.types.ContractLog.log_index"]], "miss_count (ape.types.coverage.contractcoverage property)": [[17, "ape.types.coverage.ContractCoverage.miss_count"]], "miss_count (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.miss_count"]], "miss_count (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.miss_count"]], "miss_count (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.miss_count"]], "miss_count (ape.types.coverage.functioncoverage property)": [[17, "ape.types.coverage.FunctionCoverage.miss_count"]], "model_dump() (ape.types.coverage.contractcoverage method)": [[17, "ape.types.coverage.ContractCoverage.model_dump"]], "model_dump() (ape.types.coverage.contractsourcecoverage method)": [[17, "ape.types.coverage.ContractSourceCoverage.model_dump"]], "model_dump() (ape.types.coverage.coverageproject method)": [[17, "ape.types.coverage.CoverageProject.model_dump"]], "model_dump() (ape.types.coverage.coveragereport method)": [[17, "ape.types.coverage.CoverageReport.model_dump"]], "model_dump() (ape.types.coverage.functioncoverage method)": [[17, "ape.types.coverage.FunctionCoverage.model_dump"]], "name (ape.types.coverage.contractcoverage attribute)": [[17, "ape.types.coverage.ContractCoverage.name"]], "name (ape.types.coverage.coverageproject attribute)": [[17, "ape.types.coverage.CoverageProject.name"]], "name (ape.types.coverage.functioncoverage attribute)": [[17, "ape.types.coverage.FunctionCoverage.name"]], "pcs (ape.types.coverage.coveragestatement attribute)": [[17, "ape.types.coverage.CoverageStatement.pcs"]], "profile_statement() (ape.types.coverage.functioncoverage method)": [[17, "ape.types.coverage.FunctionCoverage.profile_statement"]], "projects (ape.types.coverage.coveragereport attribute)": [[17, "ape.types.coverage.CoverageReport.projects"]], "recover_signer() (ape.types.signatures method)": [[17, "ape.types.signatures.recover_signer"]], "source_folders (ape.types.coverage.coveragereport attribute)": [[17, "ape.types.coverage.CoverageReport.source_folders"]], "source_id (ape.types.coverage.contractsourcecoverage attribute)": [[17, "ape.types.coverage.ContractSourceCoverage.source_id"]], "sources (ape.types.coverage.coverageproject attribute)": [[17, "ape.types.coverage.CoverageProject.sources"]], "sources (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.sources"]], "statements (ape.types.coverage.contractcoverage property)": [[17, "ape.types.coverage.ContractCoverage.statements"]], "statements (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.statements"]], "statements (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.statements"]], "statements (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.statements"]], "statements (ape.types.coverage.functioncoverage attribute)": [[17, "ape.types.coverage.FunctionCoverage.statements"]], "tag (ape.types.coverage.coveragestatement attribute)": [[17, "ape.types.coverage.CoverageStatement.tag"]], "timestamp (ape.types.contractlog property)": [[17, "ape.types.ContractLog.timestamp"]], "timestamp (ape.types.coverage.coveragereport attribute)": [[17, "ape.types.coverage.CoverageReport.timestamp"]], "total_functions (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.total_functions"]], "total_functions (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.total_functions"]], "total_functions (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.total_functions"]], "transaction_hash (ape.types.contractlog attribute)": [[17, "ape.types.ContractLog.transaction_hash"]], "transaction_index (ape.types.contractlog attribute)": [[17, "ape.types.ContractLog.transaction_index"]], "version (ape.types.signatures.signablemessage attribute)": [[17, "ape.types.signatures.SignableMessage.version"]], "baseinterface (class in ape.utils)": [[18, "ape.utils.BaseInterface"]], "baseinterfacemodel (class in ape.utils)": [[18, "ape.utils.BaseInterfaceModel"]], "contracts (ape.utils.tracestyles attribute)": [[18, "ape.utils.TraceStyles.CONTRACTS"]], "delegate (ape.utils.tracestyles attribute)": [[18, "ape.utils.TraceStyles.DELEGATE"]], "extraattributesmixin (class in ape.utils)": [[18, "ape.utils.ExtraAttributesMixin"]], "extramodelattributes (class in ape.utils)": [[18, "ape.utils.ExtraModelAttributes"]], "gas_cost (ape.utils.tracestyles attribute)": [[18, "ape.utils.TraceStyles.GAS_COST"]], "generateddevaccount (class in ape.utils)": [[18, "ape.utils.GeneratedDevAccount"]], "githubclient (class in ape.utils)": [[18, "ape.utils.GithubClient"]], "inputs (ape.utils.tracestyles attribute)": [[18, "ape.utils.TraceStyles.INPUTS"]], "joinablequeue (class in ape.utils)": [[18, "ape.utils.JoinableQueue"]], "methods (ape.utils.tracestyles attribute)": [[18, "ape.utils.TraceStyles.METHODS"]], "outputs (ape.utils.tracestyles attribute)": [[18, "ape.utils.TraceStyles.OUTPUTS"]], "struct (class in ape.utils)": [[18, "ape.utils.Struct"]], "structparser (class in ape.utils)": [[18, "ape.utils.StructParser"]], "tracestyles (class in ape.utils)": [[18, "ape.utils.TraceStyles"]], "value (ape.utils.tracestyles attribute)": [[18, "ape.utils.TraceStyles.VALUE"]], "add_padding_to_strings() (in module ape.utils)": [[18, "ape.utils.add_padding_to_strings"]], "additional_error_message (ape.utils.extramodelattributes attribute)": [[18, "ape.utils.ExtraModelAttributes.additional_error_message"]], "address (ape.utils.generateddevaccount attribute)": [[18, "ape.utils.GeneratedDevAccount.address"]], "allow_disconnected() (in module ape.utils)": [[18, "ape.utils.allow_disconnected"]], "ape.utils": [[18, "module-ape.utils"]], "ape_org (ape.utils.githubclient property)": [[18, "ape.utils.GithubClient.ape_org"]], "attributes (ape.utils.extramodelattributes attribute)": [[18, "ape.utils.ExtraModelAttributes.attributes"]], "available_plugins (ape.utils.githubclient property)": [[18, "ape.utils.GithubClient.available_plugins"]], "clone_repo() (ape.utils.githubclient method)": [[18, "ape.utils.GithubClient.clone_repo"]], "decode_output() (ape.utils.structparser method)": [[18, "ape.utils.StructParser.decode_output"]], "default_name (ape.utils.structparser property)": [[18, "ape.utils.StructParser.default_name"]], "download_package() (ape.utils.githubclient method)": [[18, "ape.utils.GithubClient.download_package"]], "encode_input() (ape.utils.structparser method)": [[18, "ape.utils.StructParser.encode_input"]], "expand_environment_variables() (in module ape.utils)": [[18, "ape.utils.expand_environment_variables"]], "extract_nested_value() (in module ape.utils)": [[18, "ape.utils.extract_nested_value"]], "gas_estimation_error_message() (in module ape.utils)": [[18, "ape.utils.gas_estimation_error_message"]], "generate_dev_accounts() (in module ape.utils)": [[18, "ape.utils.generate_dev_accounts"]], "get() (ape.utils.extramodelattributes method)": [[18, "ape.utils.ExtraModelAttributes.get"]], "get_all_files_in_directory() (in module ape.utils)": [[18, "ape.utils.get_all_files_in_directory"]], "get_current_timestamp_ms() (in module ape.utils)": [[18, "ape.utils.get_current_timestamp_ms"]], "get_package_version() (in module ape.utils)": [[18, "ape.utils.get_package_version"]], "get_relative_path() (in module ape.utils)": [[18, "ape.utils.get_relative_path"]], "get_release() (ape.utils.githubclient method)": [[18, "ape.utils.GithubClient.get_release"]], "get_repo() (ape.utils.githubclient method)": [[18, "ape.utils.GithubClient.get_repo"]], "include_getattr (ape.utils.extramodelattributes attribute)": [[18, "ape.utils.ExtraModelAttributes.include_getattr"]], "include_getitem (ape.utils.extramodelattributes attribute)": [[18, "ape.utils.ExtraModelAttributes.include_getitem"]], "injected_before_use (class in ape.utils)": [[18, "ape.utils.injected_before_use"]], "is_array() (in module ape.utils)": [[18, "ape.utils.is_array"]], "is_evm_precompile() (in module ape.utils)": [[18, "ape.utils.is_evm_precompile"]], "is_named_tuple() (in module ape.utils)": [[18, "ape.utils.is_named_tuple"]], "is_struct() (in module ape.utils)": [[18, "ape.utils.is_struct"]], "is_zero_hex() (in module ape.utils)": [[18, "ape.utils.is_zero_hex"]], "items() (ape.utils.struct method)": [[18, "ape.utils.Struct.items"]], "join() (ape.utils.joinablequeue method)": [[18, "ape.utils.JoinableQueue.join"]], "load_config() (in module ape.utils)": [[18, "ape.utils.load_config"]], "model_config (ape.utils.baseinterfacemodel attribute)": [[18, "ape.utils.BaseInterfaceModel.model_config"]], "model_config (ape.utils.extramodelattributes attribute)": [[18, "ape.utils.ExtraModelAttributes.model_config"]], "model_fields (ape.utils.baseinterfacemodel attribute)": [[18, "ape.utils.BaseInterfaceModel.model_fields"]], "model_fields (ape.utils.extramodelattributes attribute)": [[18, "ape.utils.ExtraModelAttributes.model_fields"]], "name (ape.utils.extramodelattributes attribute)": [[18, "ape.utils.ExtraModelAttributes.name"]], "pragma_str_to_specifier_set() (in module ape.utils)": [[18, "ape.utils.pragma_str_to_specifier_set"]], "private_key (ape.utils.generateddevaccount attribute)": [[18, "ape.utils.GeneratedDevAccount.private_key"]], "raises_not_implemented() (in module ape.utils)": [[18, "ape.utils.raises_not_implemented"]], "register() (ape.utils.singledispatchmethod method)": [[18, "ape.utils.singledispatchmethod.register"]], "returns_array() (in module ape.utils)": [[18, "ape.utils.returns_array"]], "run_until_complete() (in module ape.utils)": [[18, "ape.utils.run_until_complete"]], "singledispatchmethod (class in ape.utils)": [[18, "ape.utils.singledispatchmethod"]], "spawn() (in module ape.utils)": [[18, "ape.utils.spawn"]], "stream_response() (in module ape.utils)": [[18, "ape.utils.stream_response"]], "use_temp_sys_path (class in ape.utils)": [[18, "ape.utils.use_temp_sys_path"]]}}) \ No newline at end of file diff --git a/stable/userguides/accounts.html b/stable/userguides/accounts.html index f34a9f7c3d..2438e02f85 100644 --- a/stable/userguides/accounts.html +++ b/stable/userguides/accounts.html @@ -50,6 +50,7 @@ + diff --git a/stable/userguides/clis.html b/stable/userguides/clis.html index a662ef7aba..09e487e596 100644 --- a/stable/userguides/clis.html +++ b/stable/userguides/clis.html @@ -50,6 +50,7 @@ + diff --git a/stable/userguides/compile.html b/stable/userguides/compile.html index 43cf1bf9ea..5b22ab4bec 100644 --- a/stable/userguides/compile.html +++ b/stable/userguides/compile.html @@ -50,6 +50,7 @@ + diff --git a/stable/userguides/config.html b/stable/userguides/config.html index f35684768b..00b2677ac3 100644 --- a/stable/userguides/config.html +++ b/stable/userguides/config.html @@ -50,6 +50,7 @@ + diff --git a/stable/userguides/console.html b/stable/userguides/console.html index 883c9535b9..95f421d496 100644 --- a/stable/userguides/console.html +++ b/stable/userguides/console.html @@ -50,6 +50,7 @@ + diff --git a/stable/userguides/contracts.html b/stable/userguides/contracts.html index f6232fa3d9..28178e4a81 100644 --- a/stable/userguides/contracts.html +++ b/stable/userguides/contracts.html @@ -50,6 +50,7 @@ + @@ -164,6 +165,7 @@

  • Decoding and Encoding Inputs
  • +
  • Contract Interface Introspection
  • Multi-Call and Multi-Transaction
  • @@ -530,6 +532,30 @@

    Decoding and Encoding Inputs +

    Contract Interface Introspection

    +

    There may be times you need to figure out ABI selectors and method or event identifiers for a contract. +A contract instance provides properties to make this easy. +For instance, if you have a 4-byte hex method ID, you can return the ABI type for that method:

    +
    import ape
    +
    +usdc = ape.Contract("0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48")
    +
    +# ABI type for a hex method ID
    +assert usdc.identifier_lookup['0x70a08231'].selector == 'balanceOf(address)'
    +
    +# Also, selectors from method and event signatures
    +assert usdc.selector_identifiers["balances(address)"] == "0x27e235e3"
    +
    +# Or dump all selectors and IDs
    +for identifier, abi_type in usdc.identifier_lookup.items():
    +    print(identifier, abi_type)
    +    # 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef type='event' name='Transfer' inputs=...
    +    # ...
    +
    +
    +

    These include methods and error IDs, as well as event topics.

    +

    Multi-Call and Multi-Transaction

    The ape_ethereum core plugin comes with a multicall module containing tools for interacting with the multicall3 smart contract. diff --git a/stable/userguides/data.html b/stable/userguides/data.html index 2a1bb7edab..f93f13bf4d 100644 --- a/stable/userguides/data.html +++ b/stable/userguides/data.html @@ -50,6 +50,7 @@ + diff --git a/stable/userguides/dependencies.html b/stable/userguides/dependencies.html index 7ed25462ff..83a1753588 100644 --- a/stable/userguides/dependencies.html +++ b/stable/userguides/dependencies.html @@ -50,6 +50,7 @@ + diff --git a/stable/userguides/developing_plugins.html b/stable/userguides/developing_plugins.html index a37ff2499f..a45ccf4d82 100644 --- a/stable/userguides/developing_plugins.html +++ b/stable/userguides/developing_plugins.html @@ -50,6 +50,7 @@ + diff --git a/stable/userguides/installing_plugins.html b/stable/userguides/installing_plugins.html index 1c8782472c..fd79644bab 100644 --- a/stable/userguides/installing_plugins.html +++ b/stable/userguides/installing_plugins.html @@ -50,6 +50,7 @@ + diff --git a/stable/userguides/logging.html b/stable/userguides/logging.html index 4e9740f5af..7088bb3392 100644 --- a/stable/userguides/logging.html +++ b/stable/userguides/logging.html @@ -50,6 +50,7 @@ + diff --git a/stable/userguides/networks.html b/stable/userguides/networks.html index 6a1910ea63..b6da2f5a36 100644 --- a/stable/userguides/networks.html +++ b/stable/userguides/networks.html @@ -50,6 +50,7 @@ + diff --git a/stable/userguides/projects.html b/stable/userguides/projects.html index a20e61a349..363c9ede10 100644 --- a/stable/userguides/projects.html +++ b/stable/userguides/projects.html @@ -50,6 +50,7 @@ + diff --git a/stable/userguides/proxy.html b/stable/userguides/proxy.html index da3b319bc5..cd7508d0a7 100644 --- a/stable/userguides/proxy.html +++ b/stable/userguides/proxy.html @@ -50,6 +50,7 @@ + diff --git a/stable/userguides/publishing.html b/stable/userguides/publishing.html index b09c1cb62b..2fe346630c 100644 --- a/stable/userguides/publishing.html +++ b/stable/userguides/publishing.html @@ -50,6 +50,7 @@ + diff --git a/stable/userguides/quickstart.html b/stable/userguides/quickstart.html index af1c68eab8..bc8d048a50 100644 --- a/stable/userguides/quickstart.html +++ b/stable/userguides/quickstart.html @@ -50,6 +50,7 @@ + diff --git a/stable/userguides/scripts.html b/stable/userguides/scripts.html index 5c95eb0ecc..fe720fff25 100644 --- a/stable/userguides/scripts.html +++ b/stable/userguides/scripts.html @@ -50,6 +50,7 @@ + @@ -149,7 +150,10 @@

  • Proxy Contracts
  • Testing
  • Scripting
  • @@ -232,10 +236,10 @@

    CLI Scripts
    ape run hello helloworld
     
    -

    Note that by default, cli scripts do not have ape.cli.network_option installed, giving you more flexibility in how you define your scripts. +

    Note: By default, cli scripts do not have ape.cli.network_option installed, giving you more flexibility in how you define your scripts. However, you can add the network_option or ConnectedProviderCommand to your scripts by importing them from the ape.cli namespace:

    import click
    -from ape.cli import network_option, ConnectedProviderCommand
    +from ape.cli import ConnectedProviderCommand
     
     
     @click.command(cls=ConnectedProviderCommand)
    @@ -257,6 +261,43 @@ 

    CLI Scripts
    ape run shownet --network ethereum:mainnet:alchemy
     

    +
    +

    Multi-network Scripting

    +

    Because CLI-based scripts do not automatically connect to the provider before executing, they are ideal for multi-chain use-cases because they allow you to delay and manage the connection(s). +To learn more about how to control the network-context in Ape Pythonically, see this guide.

    +

    Here is an example of a multi-chain script:

    +
    import click
    +from ape.cli import ape_cli_context
    +
    +@click.command()
    +@ape_cli_context()
    +def cli(cli_ctx):        
    +    # There is no connection yet at this point.
    +    testnets = {
    +        "ethereum": ["sepolia", "goerli"],
    +        "polygon": ["mumbai"]
    +    }
    +    nm = cli_ctx.network_manager
    +
    +    for ecosystem_name, networks in testnets.items():
    +        ecosystem = nm.ecosystems[ecosystem_name]
    +
    +        for network_name in networks:
    +            # Start making connections.
    +            network = ecosystem.get_network(network_name)
    +
    +            with network.use_provider("alchemy") as provider:
    +                print(f"Connected to {provider.network_choice}")
    +
    +
    +

    Things to notice:

    +
      +
    1. It uses the CLI approach without cls=ConnectedProviderCommand; thus it is not connected before it makes the first call to .use_provider("alchemy").

    2. +
    3. It uses the @ape_cli_context() decorator to get access to Ape instances such as the network_manager.

    4. +
    5. Each network is only active during the context, thus allowing you to switch contexts and control chain-hopping in scripts.

    6. +
    7. You do not need to call .connect() on the provider yourself!

    8. +
    +

    Main Method Scripts

    @@ -266,12 +307,13 @@

    Main Method Scriptsprint("Hello world!") -

    NOTE: main-method scripts will always provide a network option to the call and thus will always connect to a network.

    +

    NOTE: main-method scripts will always provide a --network option and run in a connected-context. +Therefore, they are not ideal for multi-chain scripts. +main-method scripts work best for quick, single-network, connection-based workflows.

    To demonstrate, use the following script:

    +

    Suppose the name of the script is foobar, you can run it via:

    +
    ape run foobar
    +
    +
    +

    Without specifying --network, the script with connect to your default network. +Else, specify the network using the --network flag:

    +
    ape run foobar --network polygon:mumbai:alchemy
    +
    +
    +

    You can also change networks within the script using the ProviderContextManager (see examples in the CLI-script section above). +For multi-chain use-cases, we recommend sticking to the CLI based scripts to avoid the initial connection main-method scripts make.

    diff --git a/stable/userguides/testing.html b/stable/userguides/testing.html index 642bb2067f..a7fe614ecf 100644 --- a/stable/userguides/testing.html +++ b/stable/userguides/testing.html @@ -50,6 +50,7 @@ + diff --git a/stable/userguides/transactions.html b/stable/userguides/transactions.html index eb1e1f89dc..b4e71e9818 100644 --- a/stable/userguides/transactions.html +++ b/stable/userguides/transactions.html @@ -50,6 +50,7 @@ + diff --git a/v0.7.6/.buildinfo b/v0.7.6/.buildinfo new file mode 100644 index 0000000000..ee644f0558 --- /dev/null +++ b/v0.7.6/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 60db2b9bdc92843939bc2f12445a1cfa +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/v0.7.6/.doctrees/commands/accounts.doctree b/v0.7.6/.doctrees/commands/accounts.doctree new file mode 100644 index 0000000000..9c0baf5c31 Binary files /dev/null and b/v0.7.6/.doctrees/commands/accounts.doctree differ diff --git a/v0.7.6/.doctrees/commands/compile.doctree b/v0.7.6/.doctrees/commands/compile.doctree new file mode 100644 index 0000000000..4201b558c1 Binary files /dev/null and b/v0.7.6/.doctrees/commands/compile.doctree differ diff --git a/v0.7.6/.doctrees/commands/console.doctree b/v0.7.6/.doctrees/commands/console.doctree new file mode 100644 index 0000000000..a0134f955f Binary files /dev/null and b/v0.7.6/.doctrees/commands/console.doctree differ diff --git a/v0.7.6/.doctrees/commands/init.doctree b/v0.7.6/.doctrees/commands/init.doctree new file mode 100644 index 0000000000..d0df74dd26 Binary files /dev/null and b/v0.7.6/.doctrees/commands/init.doctree differ diff --git a/v0.7.6/.doctrees/commands/networks.doctree b/v0.7.6/.doctrees/commands/networks.doctree new file mode 100644 index 0000000000..aac5a287d3 Binary files /dev/null and b/v0.7.6/.doctrees/commands/networks.doctree differ diff --git a/v0.7.6/.doctrees/commands/plugins.doctree b/v0.7.6/.doctrees/commands/plugins.doctree new file mode 100644 index 0000000000..bd5ca404b9 Binary files /dev/null and b/v0.7.6/.doctrees/commands/plugins.doctree differ diff --git a/v0.7.6/.doctrees/commands/pm.doctree b/v0.7.6/.doctrees/commands/pm.doctree new file mode 100644 index 0000000000..0bd61e488c Binary files /dev/null and b/v0.7.6/.doctrees/commands/pm.doctree differ diff --git a/v0.7.6/.doctrees/commands/run.doctree b/v0.7.6/.doctrees/commands/run.doctree new file mode 100644 index 0000000000..ab72f1336b Binary files /dev/null and b/v0.7.6/.doctrees/commands/run.doctree differ diff --git a/v0.7.6/.doctrees/commands/test.doctree b/v0.7.6/.doctrees/commands/test.doctree new file mode 100644 index 0000000000..08907e5c00 Binary files /dev/null and b/v0.7.6/.doctrees/commands/test.doctree differ diff --git a/v0.7.6/.doctrees/environment.pickle b/v0.7.6/.doctrees/environment.pickle new file mode 100644 index 0000000000..033aa76b2a Binary files /dev/null and b/v0.7.6/.doctrees/environment.pickle differ diff --git a/v0.7.6/.doctrees/index.doctree b/v0.7.6/.doctrees/index.doctree new file mode 100644 index 0000000000..a46e102e56 Binary files /dev/null and b/v0.7.6/.doctrees/index.doctree differ diff --git a/v0.7.6/.doctrees/methoddocs/ape.doctree b/v0.7.6/.doctrees/methoddocs/ape.doctree new file mode 100644 index 0000000000..4db299f7ac Binary files /dev/null and b/v0.7.6/.doctrees/methoddocs/ape.doctree differ diff --git a/v0.7.6/.doctrees/methoddocs/api.doctree b/v0.7.6/.doctrees/methoddocs/api.doctree new file mode 100644 index 0000000000..8d6ce14971 Binary files /dev/null and b/v0.7.6/.doctrees/methoddocs/api.doctree differ diff --git a/v0.7.6/.doctrees/methoddocs/cli.doctree b/v0.7.6/.doctrees/methoddocs/cli.doctree new file mode 100644 index 0000000000..ac23b8f4b8 Binary files /dev/null and b/v0.7.6/.doctrees/methoddocs/cli.doctree differ diff --git a/v0.7.6/.doctrees/methoddocs/contracts.doctree b/v0.7.6/.doctrees/methoddocs/contracts.doctree new file mode 100644 index 0000000000..d5e67e9672 Binary files /dev/null and b/v0.7.6/.doctrees/methoddocs/contracts.doctree differ diff --git a/v0.7.6/.doctrees/methoddocs/exceptions.doctree b/v0.7.6/.doctrees/methoddocs/exceptions.doctree new file mode 100644 index 0000000000..e938babafe Binary files /dev/null and b/v0.7.6/.doctrees/methoddocs/exceptions.doctree differ diff --git a/v0.7.6/.doctrees/methoddocs/managers.doctree b/v0.7.6/.doctrees/methoddocs/managers.doctree new file mode 100644 index 0000000000..b325d4fead Binary files /dev/null and b/v0.7.6/.doctrees/methoddocs/managers.doctree differ diff --git a/v0.7.6/.doctrees/methoddocs/plugins.doctree b/v0.7.6/.doctrees/methoddocs/plugins.doctree new file mode 100644 index 0000000000..ee0b9092ac Binary files /dev/null and b/v0.7.6/.doctrees/methoddocs/plugins.doctree differ diff --git a/v0.7.6/.doctrees/methoddocs/types.doctree b/v0.7.6/.doctrees/methoddocs/types.doctree new file mode 100644 index 0000000000..982efc858a Binary files /dev/null and b/v0.7.6/.doctrees/methoddocs/types.doctree differ diff --git a/v0.7.6/.doctrees/methoddocs/utils.doctree b/v0.7.6/.doctrees/methoddocs/utils.doctree new file mode 100644 index 0000000000..db2a53b2f2 Binary files /dev/null and b/v0.7.6/.doctrees/methoddocs/utils.doctree differ diff --git a/v0.7.6/.doctrees/userguides/accounts.doctree b/v0.7.6/.doctrees/userguides/accounts.doctree new file mode 100644 index 0000000000..ab992347c8 Binary files /dev/null and b/v0.7.6/.doctrees/userguides/accounts.doctree differ diff --git a/v0.7.6/.doctrees/userguides/clis.doctree b/v0.7.6/.doctrees/userguides/clis.doctree new file mode 100644 index 0000000000..d55cbe5879 Binary files /dev/null and b/v0.7.6/.doctrees/userguides/clis.doctree differ diff --git a/v0.7.6/.doctrees/userguides/compile.doctree b/v0.7.6/.doctrees/userguides/compile.doctree new file mode 100644 index 0000000000..fc1690e719 Binary files /dev/null and b/v0.7.6/.doctrees/userguides/compile.doctree differ diff --git a/v0.7.6/.doctrees/userguides/config.doctree b/v0.7.6/.doctrees/userguides/config.doctree new file mode 100644 index 0000000000..aee21b062c Binary files /dev/null and b/v0.7.6/.doctrees/userguides/config.doctree differ diff --git a/v0.7.6/.doctrees/userguides/console.doctree b/v0.7.6/.doctrees/userguides/console.doctree new file mode 100644 index 0000000000..2fe4113750 Binary files /dev/null and b/v0.7.6/.doctrees/userguides/console.doctree differ diff --git a/v0.7.6/.doctrees/userguides/contracts.doctree b/v0.7.6/.doctrees/userguides/contracts.doctree new file mode 100644 index 0000000000..6e21c105ac Binary files /dev/null and b/v0.7.6/.doctrees/userguides/contracts.doctree differ diff --git a/v0.7.6/.doctrees/userguides/data.doctree b/v0.7.6/.doctrees/userguides/data.doctree new file mode 100644 index 0000000000..1045fff080 Binary files /dev/null and b/v0.7.6/.doctrees/userguides/data.doctree differ diff --git a/v0.7.6/.doctrees/userguides/dependencies.doctree b/v0.7.6/.doctrees/userguides/dependencies.doctree new file mode 100644 index 0000000000..25b5703d88 Binary files /dev/null and b/v0.7.6/.doctrees/userguides/dependencies.doctree differ diff --git a/v0.7.6/.doctrees/userguides/developing_plugins.doctree b/v0.7.6/.doctrees/userguides/developing_plugins.doctree new file mode 100644 index 0000000000..45268cb880 Binary files /dev/null and b/v0.7.6/.doctrees/userguides/developing_plugins.doctree differ diff --git a/v0.7.6/.doctrees/userguides/installing_plugins.doctree b/v0.7.6/.doctrees/userguides/installing_plugins.doctree new file mode 100644 index 0000000000..1ba3fafc2d Binary files /dev/null and b/v0.7.6/.doctrees/userguides/installing_plugins.doctree differ diff --git a/v0.7.6/.doctrees/userguides/logging.doctree b/v0.7.6/.doctrees/userguides/logging.doctree new file mode 100644 index 0000000000..98ac9d4af2 Binary files /dev/null and b/v0.7.6/.doctrees/userguides/logging.doctree differ diff --git a/v0.7.6/.doctrees/userguides/networks.doctree b/v0.7.6/.doctrees/userguides/networks.doctree new file mode 100644 index 0000000000..fdb457da54 Binary files /dev/null and b/v0.7.6/.doctrees/userguides/networks.doctree differ diff --git a/v0.7.6/.doctrees/userguides/projects.doctree b/v0.7.6/.doctrees/userguides/projects.doctree new file mode 100644 index 0000000000..3b95e07b68 Binary files /dev/null and b/v0.7.6/.doctrees/userguides/projects.doctree differ diff --git a/v0.7.6/.doctrees/userguides/proxy.doctree b/v0.7.6/.doctrees/userguides/proxy.doctree new file mode 100644 index 0000000000..2520911da0 Binary files /dev/null and b/v0.7.6/.doctrees/userguides/proxy.doctree differ diff --git a/v0.7.6/.doctrees/userguides/publishing.doctree b/v0.7.6/.doctrees/userguides/publishing.doctree new file mode 100644 index 0000000000..c24529a45a Binary files /dev/null and b/v0.7.6/.doctrees/userguides/publishing.doctree differ diff --git a/v0.7.6/.doctrees/userguides/quickstart.doctree b/v0.7.6/.doctrees/userguides/quickstart.doctree new file mode 100644 index 0000000000..73b8d06a0c Binary files /dev/null and b/v0.7.6/.doctrees/userguides/quickstart.doctree differ diff --git a/v0.7.6/.doctrees/userguides/scripts.doctree b/v0.7.6/.doctrees/userguides/scripts.doctree new file mode 100644 index 0000000000..b2b23da1fe Binary files /dev/null and b/v0.7.6/.doctrees/userguides/scripts.doctree differ diff --git a/v0.7.6/.doctrees/userguides/testing.doctree b/v0.7.6/.doctrees/userguides/testing.doctree new file mode 100644 index 0000000000..7451ae0a14 Binary files /dev/null and b/v0.7.6/.doctrees/userguides/testing.doctree differ diff --git a/v0.7.6/.doctrees/userguides/transactions.doctree b/v0.7.6/.doctrees/userguides/transactions.doctree new file mode 100644 index 0000000000..7674df7f59 Binary files /dev/null and b/v0.7.6/.doctrees/userguides/transactions.doctree differ diff --git a/v0.7.6/_sources/commands/accounts.rst.txt b/v0.7.6/_sources/commands/accounts.rst.txt new file mode 100644 index 0000000000..ccaf8eb417 --- /dev/null +++ b/v0.7.6/_sources/commands/accounts.rst.txt @@ -0,0 +1,3 @@ +.. click:: ape_accounts._cli:cli + :prog: accounts + :nested: full diff --git a/v0.7.6/_sources/commands/compile.rst.txt b/v0.7.6/_sources/commands/compile.rst.txt new file mode 100644 index 0000000000..d4a465592b --- /dev/null +++ b/v0.7.6/_sources/commands/compile.rst.txt @@ -0,0 +1,3 @@ +.. click:: ape_compile._cli:cli + :prog: compile + :nested: full diff --git a/v0.7.6/_sources/commands/console.rst.txt b/v0.7.6/_sources/commands/console.rst.txt new file mode 100644 index 0000000000..f4e2b909d0 --- /dev/null +++ b/v0.7.6/_sources/commands/console.rst.txt @@ -0,0 +1,6 @@ +console +******* + +.. click:: ape_console._cli:cli + :prog: console + :nested: full diff --git a/v0.7.6/_sources/commands/init.rst.txt b/v0.7.6/_sources/commands/init.rst.txt new file mode 100644 index 0000000000..bfa6166d7e --- /dev/null +++ b/v0.7.6/_sources/commands/init.rst.txt @@ -0,0 +1,3 @@ +.. click:: ape_init._cli:cli + :prog: init + :nested: full diff --git a/v0.7.6/_sources/commands/networks.rst.txt b/v0.7.6/_sources/commands/networks.rst.txt new file mode 100644 index 0000000000..bd732e1347 --- /dev/null +++ b/v0.7.6/_sources/commands/networks.rst.txt @@ -0,0 +1,3 @@ +.. click:: ape_networks._cli:cli + :prog: networks + :nested: full diff --git a/v0.7.6/_sources/commands/plugins.rst.txt b/v0.7.6/_sources/commands/plugins.rst.txt new file mode 100644 index 0000000000..ef365943b1 --- /dev/null +++ b/v0.7.6/_sources/commands/plugins.rst.txt @@ -0,0 +1,3 @@ +.. click:: ape_plugins._cli:cli + :prog: plugins + :nested: full diff --git a/v0.7.6/_sources/commands/pm.rst.txt b/v0.7.6/_sources/commands/pm.rst.txt new file mode 100644 index 0000000000..058b6bc3f2 --- /dev/null +++ b/v0.7.6/_sources/commands/pm.rst.txt @@ -0,0 +1,3 @@ +.. click:: ape_pm._cli:cli + :prog: pm + :nested: full diff --git a/v0.7.6/_sources/commands/run.rst.txt b/v0.7.6/_sources/commands/run.rst.txt new file mode 100644 index 0000000000..5b28636dfd --- /dev/null +++ b/v0.7.6/_sources/commands/run.rst.txt @@ -0,0 +1,6 @@ +run +*** + +.. click:: ape_run._cli:cli + :prog: run + :nested: full diff --git a/v0.7.6/_sources/commands/test.rst.txt b/v0.7.6/_sources/commands/test.rst.txt new file mode 100644 index 0000000000..9eea9191e4 --- /dev/null +++ b/v0.7.6/_sources/commands/test.rst.txt @@ -0,0 +1,3 @@ +.. click:: ape_test._cli:cli + :prog: test + :nested: full diff --git a/v0.7.6/_sources/index.md.txt b/v0.7.6/_sources/index.md.txt new file mode 100644 index 0000000000..6154bff3e5 --- /dev/null +++ b/v0.7.6/_sources/index.md.txt @@ -0,0 +1,59 @@ +# Ape-Docs + +```{eval-rst} +.. toctree:: + :caption: User Guides + :maxdepth: 1 + + userguides/quickstart + userguides/accounts + userguides/installing_plugins + userguides/projects + userguides/dependencies + userguides/compile + userguides/clis + userguides/data + userguides/networks + userguides/developing_plugins + userguides/config + userguides/transactions + userguides/console + userguides/contracts + userguides/proxy + userguides/testing + userguides/scripts + userguides/publishing + userguides/logging +``` + +```{eval-rst} +.. toctree:: + :caption: CLI Reference + :maxdepth: 1 + + commands/accounts.rst + commands/compile.rst + commands/pm.rst + commands/console.rst + commands/init.rst + commands/networks.rst + commands/plugins.rst + commands/run.rst + commands/test.rst +``` + +```{eval-rst} +.. toctree:: + :caption: Python Reference + :maxdepth: 1 + + methoddocs/ape.md + methoddocs/api.md + methoddocs/cli.md + methoddocs/contracts.md + methoddocs/exceptions.md + methoddocs/managers.md + methoddocs/plugins.md + methoddocs/types.md + methoddocs/utils.md +``` diff --git a/v0.7.6/_sources/methoddocs/ape.md.txt b/v0.7.6/_sources/methoddocs/ape.md.txt new file mode 100644 index 0000000000..8d85db052a --- /dev/null +++ b/v0.7.6/_sources/methoddocs/ape.md.txt @@ -0,0 +1,6 @@ +# ape + +```{eval-rst} +.. automodule:: ape + :members: +``` diff --git a/v0.7.6/_sources/methoddocs/api.md.txt b/v0.7.6/_sources/methoddocs/api.md.txt new file mode 100644 index 0000000000..4a7c268766 --- /dev/null +++ b/v0.7.6/_sources/methoddocs/api.md.txt @@ -0,0 +1,99 @@ +# ape.api + +## Accounts + +```{eval-rst} +.. automodule:: ape.api.accounts + :members: + :show-inheritance: + :special-members: +``` + +## Address + +```{eval-rst} +.. automodule:: ape.api.address + :members: + :show-inheritance: +``` + +## Compiler + +```{eval-rst} +.. automodule:: ape.api.compiler + :members: + :show-inheritance: +``` + +## Config + +```{eval-rst} +.. automodule:: ape.api.config + :members: + :show-inheritance: + :special-members: +``` + +## Convert + +```{eval-rst} +.. automodule:: ape.api.convert + :members: + :show-inheritance: +``` + +## Explorers + +```{eval-rst} +.. automodule:: ape.api.explorers + :members: + :show-inheritance: +``` + +## Networks + +```{eval-rst} +.. automodule:: ape.api.networks + :members: + :show-inheritance: + :special-members: +``` + +## Projects + +```{eval-rst} +.. automodule:: ape.api.projects + :members: + :show-inheritance: +``` + +## Providers + +```{eval-rst} +.. automodule:: ape.api.providers + :members: + :show-inheritance: +``` + +## Transactions + +```{eval-rst} +.. autoclass:: ape.api.transactions.ReceiptAPI + :members: + :show-inheritance: +``` + +```{eval-rst} +.. autoclass:: ape.api.transactions.TransactionAPI + :members: + :show-inheritance: +``` + +## Query + +```{eval-rst} +.. automodule:: ape.api.query + :members: + :show-inheritance: + :special-members: +``` diff --git a/v0.7.6/_sources/methoddocs/cli.md.txt b/v0.7.6/_sources/methoddocs/cli.md.txt new file mode 100644 index 0000000000..53dd7efa92 --- /dev/null +++ b/v0.7.6/_sources/methoddocs/cli.md.txt @@ -0,0 +1,53 @@ +# ape.cli + +The `ape.cli` namespace is a collection of `click` extensions and reusable implementations, such as common arguments / +options for accounts, project file-paths, and generic utilities. Use these resources in plugins as well as in CLI-based +scripts. + +## Arguments + +```{eval-rst} +.. automodule:: ape.cli.arguments + :members: + :show-inheritance: +``` + +## Choices + +```{eval-rst} +.. automodule:: ape.cli.choices + :members: + :show-inheritance: +``` + +## Commands + +```{eval-rst} +.. automodule:: ape.cli.commands + :members: + :show-inheritance: +``` + +## Options + +```{eval-rst} +.. automodule:: ape.cli.options + :members: + :show-inheritance: +``` + +## Parameter Types + +```{eval-rst} +.. automodule:: ape.cli.paramtype + :members: + :show-inheritance: +``` + +## Utilities + +```{eval-rst} +.. automodule:: ape.cli.utils + :members: + :show-inheritance: +``` diff --git a/v0.7.6/_sources/methoddocs/contracts.md.txt b/v0.7.6/_sources/methoddocs/contracts.md.txt new file mode 100644 index 0000000000..5368d1a88a --- /dev/null +++ b/v0.7.6/_sources/methoddocs/contracts.md.txt @@ -0,0 +1,29 @@ +# ape.contracts + +```{eval-rst} +.. autoclass:: ape.contracts.base.ContractTypeWrapper + :members: + :show-inheritance: + :special-members: +``` + +```{eval-rst} +.. autoclass:: ape.contracts.base.ContractInstance + :members: + :show-inheritance: + :special-members: +``` + +```{eval-rst} +.. autoclass:: ape.contracts.base.ContractContainer + :members: + :show-inheritance: + :special-members: +``` + +```{eval-rst} +.. autoclass:: ape.contracts.base.ContractEvent + :members: + :show-inheritance: + :special-members: +``` diff --git a/v0.7.6/_sources/methoddocs/exceptions.md.txt b/v0.7.6/_sources/methoddocs/exceptions.md.txt new file mode 100644 index 0000000000..18bab43df1 --- /dev/null +++ b/v0.7.6/_sources/methoddocs/exceptions.md.txt @@ -0,0 +1,7 @@ +# ape.exceptions + +```{eval-rst} +.. automodule:: ape.exceptions + :members: + :show-inheritance: +``` diff --git a/v0.7.6/_sources/methoddocs/managers.md.txt b/v0.7.6/_sources/methoddocs/managers.md.txt new file mode 100644 index 0000000000..d6f48b7263 --- /dev/null +++ b/v0.7.6/_sources/methoddocs/managers.md.txt @@ -0,0 +1,110 @@ +# ape.managers + +## Accounts + +```{eval-rst} +.. automodule:: ape.managers.accounts + :members: + :special-members: +``` + +## Compilers + +```{eval-rst} +.. automodule:: ape.managers.compilers + :members: +``` + +## Chain + +```{eval-rst} +.. autoclass:: ape.managers.chain.TransactionHistory + :members: + :special-members: +``` + +```{eval-rst} +.. autoclass:: ape.managers.chain.AccountHistory + :members: + :special-members: +``` + +```{eval-rst} +.. autoclass:: ape.managers.chain.ContractCache + :members: + :special-members: +``` + +```{eval-rst} +.. autoclass:: ape.managers.chain.BlockContainer + :members: + :special-members: +``` + +```{eval-rst} +.. autoclass:: ape.managers.chain.ChainManager + :members: + :special-members: +``` + +## Config + +```{eval-rst} +.. automodule:: ape.managers.config + :members: + :special-members: +``` + +## Converters + +```{eval-rst} +.. automodule:: ape.managers.converters + :members: +``` + +## Networks + +```{eval-rst} +.. automodule:: ape.managers.networks + :members: +``` + +## Project + +```{eval-rst} +.. automodule:: ape.managers.project.manager + :members: + :special-members: +``` + +```{eval-rst} +.. automodule:: ape.managers.project.dependency + :members: + :special-members: +``` + +```{eval-rst} +.. autoclass:: ape.managers.project.types.BaseProject + :members: + :special-members: +``` + +```{eval-rst} +.. autoclass:: ape.managers.project.types.ApeProject + :members: + :special-members: +``` + +```{eval-rst} +.. autoclass:: ape.managers.project.types.BrownieProject + :members: + :special-members: +``` + +## Query + +```{eval-rst} +.. automodule:: ape.managers.query + :members: + :special-members: +``` diff --git a/v0.7.6/_sources/methoddocs/plugins.md.txt b/v0.7.6/_sources/methoddocs/plugins.md.txt new file mode 100644 index 0000000000..322b10903c --- /dev/null +++ b/v0.7.6/_sources/methoddocs/plugins.md.txt @@ -0,0 +1,71 @@ +# ape.plugins + +```{eval-rst} +.. automodule:: ape.plugins + :members: + :show-inheritance: +``` + +## Base + +```{eval-rst} +.. automodule:: ape.plugins.pluggy_patch + :members: + :show-inheritance: +``` + +## Accounts + +```{eval-rst} +.. automodule:: ape.plugins.account + :members: + :show-inheritance: +``` + +## Compiler + +```{eval-rst} +.. automodule:: ape.plugins.compiler + :members: + :show-inheritance: +``` + +## Config + +```{eval-rst} +.. automodule:: ape.plugins.config + :members: + :show-inheritance: +``` + +## Converter + +```{eval-rst} +.. automodule:: ape.plugins.converter + :members: + :show-inheritance: +``` + +## Network + +```{eval-rst} +.. automodule:: ape.plugins.network + :members: + :show-inheritance: +``` + +## Project + +```{eval-rst} +.. automodule:: ape.plugins.project + :members: + :show-inheritance: +``` + +## Query + +```{eval-rst} +.. automodule:: ape.plugins.query + :members: + :show-inheritance: +``` diff --git a/v0.7.6/_sources/methoddocs/types.md.txt b/v0.7.6/_sources/methoddocs/types.md.txt new file mode 100644 index 0000000000..b5b2546ffd --- /dev/null +++ b/v0.7.6/_sources/methoddocs/types.md.txt @@ -0,0 +1,47 @@ +# ape.types + +## Address + +```{eval-rst} +.. automodule:: ape.types.address + :members: AddressType, RawAddress +``` + +## Signatures + +```{eval-rst} +.. autoclass:: ape.types.signatures.SignableMessage + :members: + :show-inheritance: +``` + +```{eval-rst} +.. autoclass:: ape.types.signatures.MessageSignature + :members: + :show-inheritance: +``` + +```{eval-rst} +.. autoclass:: ape.types.signatures.TransactionSignature + :members: + :show-inheritance: +``` + +```{eval-rst} +.. automethod:: ape.types.signatures.recover_signer +``` + +## Coverage + +```{eval-rst} +.. automodule:: ape.types.coverage + :members: + :show-inheritance: +``` + +## Miscellaneous + +```{eval-rst} +.. automodule:: ape.types + :members: BlockID, BaseContractLog, ContractLog, MockContractLog +``` diff --git a/v0.7.6/_sources/methoddocs/utils.md.txt b/v0.7.6/_sources/methoddocs/utils.md.txt new file mode 100644 index 0000000000..9eb96e3cee --- /dev/null +++ b/v0.7.6/_sources/methoddocs/utils.md.txt @@ -0,0 +1,8 @@ +# ape.utils + +```{eval-rst} +.. automodule:: ape.utils + :members: + :show-inheritance: + :exclude-members: abstractmethod, dataclass, __init__ +``` diff --git a/v0.7.6/_sources/userguides/accounts.md.txt b/v0.7.6/_sources/userguides/accounts.md.txt new file mode 100644 index 0000000000..973972e144 --- /dev/null +++ b/v0.7.6/_sources/userguides/accounts.md.txt @@ -0,0 +1,311 @@ +# Accounts + +Accounts in Ape come from [AccountAPI](../methoddocs/api.html#ape.api.accounts.AccountAPI) implementations (e.g. from plugins). +There are typically two types of accounts: + +1. Test accounts +2. Live network accounts + +Test accounts are useful for local network testing and debugging contracts. +Live network accounts are for interacting with live blockchains and should be secured. + +To learn more about Ethereum accounts, see [the Ethereum documentation](https://ethereum.org/en/developers/docs/accounts/). + +## Test Accounts + +Ape ships with pytest fixtures to assist in writing your tests. + +### Use test accounts in tests + +Pre-funded test accounts are accessible via the [accounts fixture](./testing.html#accounts-fixture). + +```python +def test_my_contract_method(accounts): + sender = accounts[0] + ... +``` + +### Use test accounts outside of tests + +To access the same prefunded accounts in your scripts or console, use the root `accounts` object and the [test_accounts](../methoddocs/managers.html#ape.managers.accounts.AccountManager.test_accounts) property: + +```python +from ape import accounts + +sender = accounts.test_accounts[0] +``` + +You can configure your test accounts using your `ape-config.yaml` file: + +```yaml +test: + mnemonic: test test test test test test test test test test test junk + number_of_accounts: 5 +``` + +**WARN**: NEVER put a seed phrase with real funds here. +The accounts generated from this seed are solely for testing and debugging purposes. + +### Creating new test accounts + +You can create a new test account by doing the following: + +```python +from ape import accounts + +account = accounts.test_accounts.generate_test_account() +``` + +**NOTE**: Creating a new test account means it will be unfunded by default. + +Learn more about test accounts from the [testing guide](./testing.html#accounts-fixture). + +If your testing provider supports this feature, it is possible to directly set the balances of any address by performing the following action: + +```python +account.balance += int(1e18) # Gives `account` 1 Ether +``` + +### Default Sender Support + +In order to eliminate the usage of sender in contract calls, you can use `use_sender` context manager. + +```python +with accounts.use_sender(0): # Use first account from test mnemonic + contract.myFunction(1) + +with accounts.use_sender("
    "): # Impersonate an account + contract.myFunction(1) + +with accounts.use_sender(a): # a is a `TestAccountAPI` object + contract.myFunction(1) +``` + +## Live Network Accounts + +When using live networks, you need to get your accounts into Ape. +To get your accounts in Ape, you must use an `accounts` plugin. +Ape ships with a keyfile-based account plugin, but you can use any account plugin such as `ape-ledger`, `ape-trezor`, or a third-party plugin. + +### Keyfile Accounts + +Ape ships with a keyfile-based account plugin that lets you import and generate accounts. +The premise of the plugin is that accounts are stored locally on your computer in the `$HOME/.ape/accounts` directory following the `keyfile` structure. +Under-the-hood, this structure comes from the [eth-keyfile library](https://github.com/ethereum/eth-keyfile) via the [eth-account](https://eth-account.readthedocs.io/en/stable/eth_account.html) package. +When Ape creates the keyfile, either from import or account-generation (described below!), it prompts you for a passphrase to use for encrypting the keyfile, similarly to how you would use a password in browser-based wallets. +The keyfile stores the private key in an encrypted-at-rest state, which maximizes security of the locally-stored key material. + +The `ape-accounts` plugin lets you use keyfile-based account to sign messages and transactions. +When signing a message or transaction using an account from `ape-accounts`, you will be prompted to enter the passphrase you specified when importing or generating that account. + +All the available CLI commands for this account's plugin can be found [here](../commands/accounts.html). +For example, you can [generate](../commands/accounts.html#accounts-generate) an account: + +```bash +ape accounts generate +``` + +Ape will prompt you for entropy which is used to increase randomness when creating your account. +Ape will then prompt you whether you want to show your mnemonic. +If you do not want to see your mnemonic you can select `n`. +Alternatively, you can use the `--hide-mnemonic` option to skip the prompt. + +```bash +ape accounts generate --hide-mnemonic +``` + +If you elected to show your mnemonic Ape will then show you your newly generated mnemonic. +Ape will then prompt you for a passphrase which you will need to enter twice to confirm. +This passphrase is used to encrypt your account on disk, for extra security. +You will be prompted for it each time you load your account, so make sure to remember it. +After entering the passphrase Ape will then show you your new account address, HDPath, and account alias. +If you want to use a custom HDPath, use the `--hd-path` option: + +```bash +ape accounts generate --hd-path +``` + +If you do not use the `--hd-path` option, Ape will use the default HDPath of (Ethereum network, first account). +If you want to use a custom mnemonic phrase word length, use the `--word-count` option: + +```bash +ape accounts generate --word-count +``` + +If you do not use the `--word-count` option, Ape will use the default word count of 12. +You can use all of these together or separately to control the way Ape creates and displays your account information. +If you already have an account and wish to import it into Ape (say, from Metamask), you can use the [import command](../commands/accounts.html#accounts-import): + +```bash +ape accounts import +``` + +It will prompt you for the private key. +If you need help exporting your private key from Metamask, see [this guide](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-export-an-account-s-private-key). +You can also import accounts from mnemonic seed by using the `--use-mnemonic` flag: + +```bash +ape accounts import --use-mnemonic +``` + +It will then prompt you for the [mnemonic seed](https://en.bitcoin.it/wiki/Seed_phrase). +If you need help finding your mnemonic seed (Secret Recovery Phrase) in Metamask, see [this guide](https://metamask.zendesk.com/hc/en-us/articles/360015290032-How-to-reveal-your-Secret-Recovery-Phrase). +In addition, you can also use a custom HDPath by using the `--hd-path` option: + +```bash +ape accounts import --use-mnemonic --hd-path +``` + +If you use the `--hd-path` option, you will need to pass the [HDPath](https://help.myetherwallet.com/en/articles/5867305-hd-wallets-and-derivation-paths) you'd like to use as an argument in the command. +If you do not use the `--hd-path` option, Ape will use the default HDPath of (Ethereum network, first account). +You can also [export](../commands/accounts.html#accounts-export) the private key of an account: + +```bash +ape accounts export +``` + +Ape will ask you for the password to the account and then give you the private key of that account. +You can then use that private key with [import](../commands/accounts.html#accounts-import). +You can alternatively load the private key into [Metamask wallet](https://metamask.zendesk.com/hc/en-us/articles/360015489331-How-to-import-an-account#h_01G01W07NV7Q94M7P1EBD5BYM4). +Then, in your scripts, you can [load](../methoddocs/managers.html#ape.managers.accounts.AccountManager.load) an account: + +```python +from ape import accounts + +account = accounts.load("") +``` + +### Default Sender Support + +In order to reduce repetition of adding `sender` in your contract calls, you can use `use_sender` context manager. + +```python +with accounts.use_sender(0): + contract.myFunction(1) + +with accounts.use_sender("
    "): + contract.myFunction(1) + +with accounts.use_sender(""): + contract.myFunction(1) + +with accounts.use_sender(a): # a is a `AccountAPI` object + contract.myFunction(1) +``` + +## Signing Messages + +You can sign messages with your accounts in Ape. +To do this, use the [sign_message](../methoddocs/api.html#ape.api.accounts.AccountAPI.sign_message) API. + +```python +from ape import accounts +from eth_account.messages import encode_defunct + +account = accounts.load("") +message = encode_defunct(text="Hello Apes!") +signature = account.sign_message(message) +``` + +**NOTE**: Ape's `sign_message` API intentionally accepts `Any` as the message argument type. +Account plugins decide what data-types to support. +Most Ethereum account plugins, such as `ape-account`, are able to sign messages like the example above. +However, you can also provide other types, such as a `str` directly: + +```python +from ape import accounts + +account = accounts.load("") +signature = account.sign_message("Hello Apes!") +``` + +### EIP-712 + +Some account plugins are able to sign EIP-712 structured message types by utilizing the `eip712` package. +Here is an example with custom EIP-712 classes: + +```python +from ape import accounts +from eip712.messages import EIP712Message, EIP712Type + +class Person(EIP712Type): + name: "string" + wallet: "address" + +class Mail(EIP712Message): + _chainId_: "uint256" = 1 + _name_: "string" = "Ether Mail" + _verifyingContract_: "address" = "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + _version_: "string" = "1" + + sender: Person + receiver: Person + +alice = Person(name="Alice", wallet="0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826") +bob = Person("Bob", "0xB0B0b0b0b0b0B000000000000000000000000000") +message = Mail(sender=alice, receiver=bob) + +account = accounts.load("") +account.sign_message(message) +``` + +### Verifying Signature + +Verify the signatures on your signed messages by using the [recover_signer](../methoddocs/types.html#ape.types.signatures.recover_signer) function or the [check_signature](../methoddocs/api.html#ape.api.accounts.AccountAPI.check_signature) function: + +```python +from ape import accounts +from ape.types.signatures import recover_signer +from eth_account.messages import encode_defunct + +account = accounts.load("") +message = encode_defunct(text="Hello Apes!") +signature = account.sign_message(message) + +# Validate the signature by recovering the signer and asserting it is equal to the sender. +recovered_signer = recover_signer(message, signature) +assert recovered_signer == account.address + +# NOTE: You can also use the `check_signature` method on an account, which returns a bool. +assert account.check_signature(message, signature) +``` + +## Automation + +If you use your keyfile accounts in automation, such as CI/CD, you may need to programmatically unlock them and enable auto-sign. +To do this, use a special environment variable for the account's passphrase: + +```bash +export APE_ACCOUNTS__PASSPHRASE="a" +``` + +Where `` is the name of the account you want to use. +Now, you can use your account to make any transactions without subsequently providing your passphrase. + +```py +from ape import accounts +from eth_account.messages import encode_defunct + +account = accounts.load("") +account.set_autosign(True) + +# Now, you will not be prompted to sign messages or transactions +message = encode_defunct(text="Hello Apes!") +signature = account.sign_message(message) +``` + +**NOTE**: Alternatively, you may use the `passphrase=` kwarg on methods `account.set_autosign()` and `account.unlock()`, but we highly recommend using the environment variable approach to avoid accidentally leaking your passphrase. + +## Hardware Wallets + +Because of the plugin system in Ape, we are able to support other types of accounts including hardware wallet accounts. +Check out these plugins: + +- [ape-ledger](https://github.com/ApeWorX/ape-ledger) +- [ape-trezor](https://github.com/ApeWorX/ape-trezor) + +To install one of these plugins, do the following: + +```bash +ape plugins install ledger +``` diff --git a/v0.7.6/_sources/userguides/clis.md.txt b/v0.7.6/_sources/userguides/clis.md.txt new file mode 100644 index 0000000000..803078d659 --- /dev/null +++ b/v0.7.6/_sources/userguides/clis.md.txt @@ -0,0 +1,220 @@ +# CLIs + +Ape uses the [click framework](https://click.palletsprojects.com/en/8.1.x/) for handling all CLI functionality. +There are CLIs found in a couple areas in the Ape framework: + +1. Plugins +2. Scripts + +Both plugins and scripts utilize `click` for their CLIs. + +For plugins, CLIs are an option for extending the framework. +You can read more about plugin development and CLIs in the [developing plugins guide](./developing_plugins.html). + +Scripts utilize CLIs as an option for users to develop their scripts. +You can read more about scripting and CLIs in the [scripting guide](./scripts.html). + +This guide is for showcasing utilities that ship with Ape to assist in your CLI development endeavors. + +## Ape Context Decorator + +The [@ape_cli_context](../methoddocs/cli.html#ape.cli.options.ape_cli_context) gives you access to all the root Ape objects (`accounts`, `networks` etc.), the ape logger, and an [abort](../methoddocs/cli.html#ape.cli.options.ApeCliContextObject.abort) method for stopping execution of your CLI gracefully. +Here is an example using all of those features from the `cli_ctx`: + +```python +import click +from ape.cli import ape_cli_context + + +@click.command() +@ape_cli_context() +def cmd(cli_ctx): + cli_ctx.logger.info("Test") + account = cli_ctx.account_manager.load("metamask") + cli_ctx.abort(f"Bad account: {account.address}") +``` + +In Ape, it is easy to extend the CLI context object and use the extended version in your CLIs: + +```python +from ape.cli import ApeCliContextObject, ape_cli_context +import click + +class MyManager: + """My custom manager.""" + +class CustomContext(ApeCliContextObject): + """Add new managers to your custom context""" + my_manager: MyManager = MyManager() + + @property + def signer(self): + """Utilize existing managers in your custom context.""" + return self.account_manager.load("my_account") + +@click.command() +@ape_cli_context(obj_type=CustomContext) +def cli(cli_ctx): + # Access your manager. + print(cli_ctx.my_manager) + # Access other Ape managers. + print(cli_ctx.account_manager) +``` + +## Network Tools + +The [@network_option()](../methoddocs/cli.html#ape.cli.options.network_option) allows you to select an ecosystem, network, and provider. +To specify the network option, use values like: + +```shell +--network ethereum +--network ethereum:sepolia +--network ethereum:mainnet:alchemy +--network ::foundry +``` + +To use default values automatically, omit sections of the choice, but leave the semi-colons for parsing. +For example, `::test` means use the default ecosystem and network and the `test` provider. + +Use `ecosystem`, `network`, and `provider` argument names in your command implementation to access their corresponding class instances: + +```python +import click +from ape.cli import network_option + +@click.command() +@network_option() +def cmd(provider): + # This command only needs the provider. + click.echo(provider.name) + +@click.command() +@network_option() +def cmd_2(ecosystem, network, provider): + # This command uses all parts of the parsed network choice. + click.echo(ecosystem.name) + click.echo(network.name) + click.echo(provider.name) +``` + +The [ConnectedProviderCommand](../methoddocs/cli.html#ape.cli.commands.ConnectedProviderCommand) automatically uses the `--network` option and connects to the network before any of your code executes and then disconnects afterward. +This is useful if your script or command requires a provider connection in order for it to run. +Additionally, specify `ecosystem`, `network`, or `provider` in your command function if you need any of those instances in your `ConnectedProviderCommand`, just like when using `network_option`. + +```python +import click +from ape.cli import ConnectedProviderCommand + +@click.command(cls=ConnectedProviderCommand) +def cmd(network, provider): + click.echo(network.name) + click.echo(provider.is_connected) # True + +@click.command(cls=ConnectedProviderCommand) +def cmd(provider): + click.echo(provider.is_connected) # True + +@click.command(cls=ConnectedProviderCommand) +def cmd(): + click.echo("Using params from ConnectedProviderCommand is optional") +``` + +## Account Tools + +Use the [@account_option()](../methoddocs/cli.html#ape.cli.options.account_option) for adding an option to your CLIs to select an account. +This option does several things: + +1. If you only have a single account in Ape (from both test accounts _and_ other accounts), it will use that account as the default. + (this case is rare, as most people have more than one test account by default). +2. If you have more than one account, it will prompt you to select the account to use. +3. You can pass in an account alias or index to the option flag to have it use that account. +4. It allows you to specify test accounts by using a choice of `TEST::{index_of_test_account}`. + +Thus, if you use this option, no matter what, your script will have an account to use by the time the script starts. +Here is an example: + +```python +import click +from ape.cli import account_option + + +@click.command() +@account_option() +def cmd(account): + # Will prompt the user to select an account if needed. + click.echo(account.alias) +``` + +And when invoking the command from the CLI, it would look like the following: +(where `` is either `ape run` for scripts or `ape ` for plugins) + +```shell + cmd # Use the default account. + cmd --account 0 # Use first account that would show up in `get_user_selected_account()`. + cmd --account metamask # Use account with alias "metamask". + cmd --account TEST::0 # Use the test account at index 0. +``` + +Alternatively, you can call the [get_user_selected_account()](../methoddocs/cli.html#ape.cli.choices.get_user_selected_account) directly to have more control of when the account gets selected: + +```python +import click +from ape.cli import select_account + + +@click.command() +def cmd(): + account = select_account("Select an account to use") + click.echo(f"You selected {account.address}.") +``` + +Similarly, there are a couple custom arguments for aliases alone that are useful when making CLIs for account creation. +If you use [@existing_alias_argument()](../methoddocs/cli.html#ape.cli.arguments.existing_alias_argument) and specify an alias does not already exist, it will error. +And visa-versa when using [@non_existing_alias_argument()](../methoddocs/cli.html#ape.cli.arguments.non_existing_alias_argument). + +```python +import click +from ape.cli import existing_alias_argument, non_existing_alias_argument + + +@click.command() +@existing_alias_argument() +def delete_account(alias): + # We know the alias is an existing account at this point. + click.echo(alias) + + +@click.command() +@non_existing_alias_argument() +def create_account(alias): + # We know the alias is not yet used in Ape at this point. + click.echo(alias) +``` + +You can control additional filtering of the accounts by using the `account_type` kwarg. +Use `account_type` to filter the choices by specific types of [AccountAPI](../methoddocs/api.html#ape.api.accounts.AccountAPI), or you can give it a list of already known accounts, or you can provide a callable-filter that takes an account and returns a boolean. + +```python +import click +from ape import accounts +from ape.cli import existing_alias_argument, get_user_selected_account +from ape_accounts.accounts import KeyfileAccount + +# NOTE: This is just an example and not anything specific or recommended. +APPLICATION_PREFIX = "" + +@click.command() +@existing_alias_argument(account_type=KeyfileAccount) +def cli_0(alias): + pass + +@click.command() +@existing_alias_argument(account_type=lambda a: a.alias.startswith(APPLICATION_PREFIX)) +def cli_1(alias): + pass + + +# Select from the given accounts directly. +my_accounts = [accounts.load("me"), accounts.load("me2")] +selected_account = get_user_selected_account(account_type=my_accounts) +``` diff --git a/v0.7.6/_sources/userguides/compile.md.txt b/v0.7.6/_sources/userguides/compile.md.txt new file mode 100644 index 0000000000..6524b17771 --- /dev/null +++ b/v0.7.6/_sources/userguides/compile.md.txt @@ -0,0 +1,135 @@ +# Compile + +Compile your project using the following command: + +```bash +ape compile +``` + +Configure the location Ape looks for contracts by editing the `contracts_folder` key in your project's `ape-config.yaml` file: + +```yaml +contracts_folder: src # Default is 'contracts/' +``` + +## The JSON Compiler + +Ape ships with a compiler that is able to compile `.json` files. +This compiler is useful for the following: + +1. **Interfaces**: If you know the address of an existing contract, you can include its ABI in your project and create a contract wrapper around it: + +```python +from ape import project + +# Comes from a file named `MyInterface.json` in the contracts/ folder. +my_interface = project.MyInterface +address = "0x1234556b5Ed9202110D7Ecd637A4581db8b9879F" + +# Instantiate a deployed contract using the local interface. +contract = my_interface.at(address) + +# Call a method named `my_method` found in the local contract ABI. +contract.my_method() +``` + +2. **Pre-existing Contract Types**: If you have a contract type JSON that was compiled elsewhere, you can include it in your project. + This is useful if you are unable or unwilling to install a compiler. + +3. **Raw Compiler Output**: If you have an artifact with binary compiled elsewhere, you can include it in your project. + This is useful if you want to use contracts from much larger projects as dependency for your test cases. + +**WARN**: You may have to adjust name and source ID similarly to raw contract-type output. + +## Other Compiler Plugins + +If your project includes Solidity (`.sol`) or Vyper (`.vy`) files, you will have to install additional compilers. +To include additional compilers in your project, you can add the plugins to the `plugins` list in your `ape-config.yaml` or install them using the CLI. +For information on how to configure plugins in your project, follow [this guide](./installing_plugins.html). + +## Ignore Files + +You can configure files to be ignored from compilation. +By default, Ape ignores files `package.json`, `package-lock.json`, `tsconfig.json`. +To override this list, edit your `ape-config.yaml` similarly: + +```yaml +compile: + exclude: + - "*package.json" + - "*package-lock.json" + - "*tsconfig.json" + - "*custom.json" # Append a custom ignore +``` + +**NOTE**: You must include the defaults in the list when overriding if you wish to retain them. + +## Dependencies + +In Ape, compiler plugins typically let you have dependencies. +See [this guide](./dependencies.html) to learn more about configuring dependencies in Ape. + +To always compile dependencies in Ape during the `ape compile` command, use the CLI flag `--include-dependencies`: + +```shell +ape compile --include-dependencies +``` + +Alternatively, configure it to always happen: + +```yaml +compile: + use_dependencies: true +``` + +## Settings + +Generally, configure compiler plugins using your `ape-config.yaml` file. +For example, when using the `vyper` plugin, you can configure settings under the `vyper` key: + +```yaml +vyper: + version: 0.3.10 +``` + +You can also configure adhoc settings in Python code: + +```python +from pathlib import Path +from ape import compilers + +settings = {"vyper": {"version": "0.3.7"}, "solidity": {"version": "0.8.0"}} +compilers.compile( + ["path/to/contract.vy", "path/to/contract.sol"], settings=settings +) + +# Or, more explicitly: +vyper = compilers.get_compiler("vyper", settings=settings["vyper"]) +vyper.compile([Path("path/to/contract.vy")]) + +solidity = compilers.get_compiler("solidity", settings=settings["solidity"]) +vyper.compile([Path("path/to/contract.sol")]) +``` + +## Compile Source Code + +Instead of compiling project source files, you can compile code (str) directly: + +```python +from ape import accounts, compilers + +CODE = """ + ... source code here +""" + +container = compilers.compile_source( + "vyper", + CODE, + settings={"vyper": {"version": "0.3.7"}}, + contractName="MyContract", +) + +owner = accounts.test_accounts[0] + +instance = container.deploy(sender=owner) +``` diff --git a/v0.7.6/_sources/userguides/config.md.txt b/v0.7.6/_sources/userguides/config.md.txt new file mode 100644 index 0000000000..0777ece80e --- /dev/null +++ b/v0.7.6/_sources/userguides/config.md.txt @@ -0,0 +1,174 @@ +# Configure Ape + +You can configure Ape using configuration files with the name `ape-config.yaml`. +There are two locations you can place an `ape-config.yaml` file. + +1. In the root of your project +2. In your `$HOME/.ape` directory (global) + +Project settings take precedent, but global settings allow you to configure preferences across all projects, such as your default mainnet provider (e.g. Alchemy versus running your own node). + +This guide serves as an index of the settings you can include in any `ape-config.yaml` file. +This guide is **PURPOSELY** alphabetized to facilitate easier look-up of keys. + +Most of the features in this guide are documented more-fully elsewhere in the user-guides. + +However, here is a list of common-use cases requiring the `ape-config.yaml` file to help you: + +1. Setting up a custom node RPC: See the [geth](#geth) section. +2. Setting up project dependencies: See the [dependencies](#dependencies) section. +3. Declaring your project's plugins: See the [plugins](#plugins) section. + +## Contracts Folder + +Specify a different path to your `contracts/` directory. +This is useful when using a different naming convention, such as `src/` rather than `contracts/`. + +```yaml +contracts_folder: src +``` + +You can also use an absolute path. +This is useful for projects that compile contracts outside their directory. + +```yaml +contracts_folder: "~/GlobalContracts" +``` + +## Default Ecosystem + +You can change the default ecosystem by including the following: + +```yaml +default_ecosystem: fantom +``` + +The default ecosystem is `ethereum`. + +## Dependencies + +Configure dependencies for your ape project. +To learn more about dependencies, see [this guide](./dependencies.html). + +A simple example of configuring dependencies looks like this: + +```yaml +dependencies: + - name: OpenZeppelin + github: OpenZeppelin/openzeppelin-contracts + version: 4.4.2 +``` + +## Deployments + +Set deployments that were made outside of Ape in your `ape-config.yaml` to create past-deployment-based contract instances in Ape: +(See [this example](./contracts.html#from-previous-deployment) for more information on this feature). + +Config example: + +```yaml +deployments: + ethereum: + mainnet: + - contract_type: MyContract + address: 0x5FbDB2315678afecb367f032d93F642f64180aa3 + goerli: + - contract_type: MyContract + address: 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512 +``` + +When connected to Ethereum mainnet, reference the deployment by doing: + +```python +from ape import project + +contract = project.MyContract.deployments[0] +``` + +**NOTE**: Ape does not add or edit deployments in your `ape-config.yaml` file. + +## Geth + +When using the `geth` provider, you can customize its settings. +For example, to change the URI for an Ethereum network, do: + +```yaml +geth: + ethereum: + mainnet: + uri: http://localhost:5030 +``` + +Now, the `ape-geth` core plugin will use the URL `http://localhost:5030` to connect and make requests. + +**WARN**: Instead of using `ape-geth` to connect to an Infura or Alchemy node, use the [ape-infura](https://github.com/ApeWorX/ape-infura) or [ape-alchemy](https://github.com/ApeWorX/ape-alchemy) provider plugins instead, which have their own way of managing API keys via environment variables. + +For more information on networking as a whole, see [this guide](./networks.html). + +## Networks + +Set default network and network providers: + +```yaml +ethereum: + default_network: mainnet-fork + mainnet_fork: + default_provider: hardhat +``` + +Set the gas limit for a given network: + +```yaml +ethereum: + default_network: mainnet-fork + mainnet_fork: + gas_limit: max +``` + +You may use one of: + +- `"auto"` - gas limit is estimated for each transaction +- `"max"` - the maximum block gas limit is used +- A number or numeric string, base 10 or 16 (e.g. `1234`, `"1234"`, `0x1234`, `"0x1234"`) +- An object with key `"auto"` for specifying an estimate-multiplier for transaction insurance + +To use the auto-multiplier, make your config like this: + +```yaml +ethereum: + mainnet: + gas_limit: + auto: + multiplier: 1.2 # Multiply 1.2 times the result of eth_estimateGas +``` + +For the local network configuration, the default is `"max"`. Otherwise, it is `"auto"`. + +## Plugins + +Set which `ape` plugins you want to always use. + +**NOTE**: The `ape-` prefix is not needed and shouldn't be included here. + +```yaml +plugins: + - name: solidity # ape-solidity plugin + version: 0.1.0b2 + - name: ens +``` + +Install these plugins by running command: + +```bash +ape plugins install . +``` + +## Testing + +Configure your test accounts: + +```yaml +test: + mnemonic: test test test test test test test test test test test junk + number_of_accounts: 5 +``` diff --git a/v0.7.6/_sources/userguides/console.md.txt b/v0.7.6/_sources/userguides/console.md.txt new file mode 100644 index 0000000000..2badd72fa4 --- /dev/null +++ b/v0.7.6/_sources/userguides/console.md.txt @@ -0,0 +1,161 @@ +# Ape Console + +Ape provides an [IPython](https://ipython.readthedocs.io/) interactive console with useful pre-defined locals to interact with your project. + +```bash +ape console --network ethereum:mainnet + +In [1]: chain.blocks.head.timestamp +Out[1]: 1647323479 +``` + +WARNING: Contract changes are not reflected in the active console session. +If you need to make changes to your contract, you must re-start your console session for the compiler to handle the changes. + +## Ape Namespace + +Your console comes with pre-initialized root ape objects in your namespace. + +| Name | Class | +| :--------: | :--------------------------------------------------------------------------------------------------------: | +| `accounts` | [AccountManager](../methoddocs/managers.html?highlight=accounts#module-ape.managers.accounts) | +| `networks` | [NetworkManager](../methoddocs/managers.html?highlight=networks#module-ape.managers.networks) | +| `chain` | [ChainManager](../methoddocs/managers.html?highlight=chain#module-ape.managers.chain) | +| `project` | [ProjectManager](../methoddocs/managers.html?highlight=project#module-ape.managers.project.manager) | +| `query` | [QueryManager](../methoddocs/managers.html?highlight=query#module-ape.managers.query) | +| `convert` | [convert](../methoddocs/managers.html?highlight=query#ape.managers.converters.AddressAPIConverter.convert) | +| `ape` | [ape](../methoddocs/ape.html) | + +You can access them as if they are already initialized: + +First, launch the console: + +```bash +ape console +``` + +Then, type the name of the item and you will see its Python representation: + +```python +In [1]: networks +Out[1]: > +``` + +**NOTE**: To change the network of the active console, use the `--network` option. +Follow [this guide](./networks.html) for more information on networks in Ape. + +## Namespace Extras + +You can also create scripts to be included in the console namespace by adding a file (`ape_console_extras.py`) to your root project directory. All non-internal symbols from this file will be included in the console namespace. Internal symbols are prefixed by an underscore (`_`). + +An example file might look something like this: + +```python +from eth_utils import encode_hex, decode_hex + + +def latest(key): + return getattr(networks.active_provider.get_block("latest"), key) +``` + +Then both imported util functions and `WETH_ADDRESS` will be available when you launch the console. + +```python +In [1]: latest('number') +Out[1]: 14388241 + +In [2]: encode_hex(latest('hash')) +Out[2]: '0x68f768988e9bd4be971d527f72483f321975fa52aff9692b6d0e0af71fb77aaf' +``` + +### Init Function + +If you include a function named `ape_init_extras`, it will be executed with the symbols from the existing namespace being provided as keyword arguments. This allows you to alter the scripts namespace using locals already included in the Ape namespace. If you return a `dict`, these values will be added to the console namespace. For example, you could set up an initialized Web3.py object by using one from an existing Ape Provider. + +```python +def ape_init_extras(chain): + return {"web3": chain.provider.web3} +``` + +Then `web3` will be available to use immediately. + +```python +In [1]: web3.eth.chain_id +Out[1]: 1 +``` + +### Global Extras + +You can also add an `ape_console_extras.py` file to the global ape data directory (`$HOME/.ape/ape_console_extras.py`) and it will execute regardless of what project context you are in. This may be useful for variables and utility functions you use across all of your projects. + +## Configure + +To automatically use other IPython extensions, add them to your `ape-config.yaml` file: + +```yaml +console: + plugins: + # A plugin that lets you modify Python modules without having close/reopen your console. + - autoreload +``` + +## Magic Commands + +The `ape-console` plugin ships with custom [magics](https://ipython.readthedocs.io/en/stable/interactive/magics.html#line-magics) that are available when running the `ape console` command or loading the `ape_console.plugin` IPython extension manually. +When starting an embedded console (from `-I` in `ape run` or `ape test`), you will have to load the extension manually. +To do this, run the following from _any_ `IPython` environment: + +```shell +In [1]: %load_ext ape_console.plugin +``` + +Or add the `ape_console.plugin` extension to your `IPython` config. + +Otherwise, when launching `ape console`, the magics are automatically available. + +### %ape + +The `%ape` magic invokes the CLI in your `ape-console` session: + +```shell +In [1]: %ape +Usage: cli [OPTIONS] COMMAND [ARGS]... + +Options: + -v, --verbosity LVL One of ERROR, WARNING, SUCCESS, INFO, or DEBUG + --version Show the version and exit. + --config Show configuration options (using `ape-config.yaml`) + -h, --help Show this message and exit. + +Commands: + accounts Manage local accounts + cache Query from caching database + compile Compile select contract source files + console Load the console + init Initalize an ape project + networks Manage networks + plugins Manage ape plugins + run Run scripts from the `scripts/` folder + test Launches pytest and runs the tests for a project + +Out[1]: +``` + +Run any CLI command this way without exiting your session. + +### %bal + +The `%bal` magic outputs a human-readable balance on an account, contract, address, or account alias. + +```shell +In [1]: account = accounts.load("metamask0") + +In [2]: %bal account +Out[2]: '0.00040634 ETH' + +In [3]: %bal metamask0 +Out[3]: '0.00040634 ETH' + +In [4]: %bal 0xE3747e6341E0d3430e6Ea9e2346cdDCc2F8a4b5b +Out[4]: '0.00040634 ETH' +``` diff --git a/v0.7.6/_sources/userguides/contracts.md.txt b/v0.7.6/_sources/userguides/contracts.md.txt new file mode 100644 index 0000000000..95b8fa3297 --- /dev/null +++ b/v0.7.6/_sources/userguides/contracts.md.txt @@ -0,0 +1,423 @@ +# Contracts + +You can interact with contracts pythonically using ape! +First, we need to obtain a contract instance. +One way to do this is to deploy a contract. +The other way is to initialize an already-deployed contract using its address. + +## From Deploy + +Deploy contracts from your project using the `project` root-level object. +You deploy contracts using Python functions such as [AccountAPI.deploy](../methoddocs/api.html#ape.api.accounts.AccountAPI.deploy) or [ContractContainer.deploy](../methoddocs/contracts.html#ape.contracts.base.ContractContainer.deploy). + +**NOTE**: You can run Ape's deploy functions from anywhere you run Python! + +You need both an account and a contract in order to deploy a contract, as the deployment process requires a transaction to submit the contract data to the blockchain. +To learn about accounts and how to use them, see the [Accounts Guide](./accounts.html). +You also need the contract. +You can access contract types from Ape's root-level `project` object (e.g. `project.MyContract`) and their types are [ContractContainer](../methoddocs/contracts.html#ape.contracts.base.ContractContainer). + +Let's assume you have a Vyper contract like this: + +```vyper +contract MySmartContract: + owner: public(address) + balance: public(uint256) + + @public + @payable + @public + def __init__(arg1: uint256, arg2: address): + self.owner = arg2 + self.balance = arg1 +``` + +Before you can deploy this contract, you must ensure it was compiled. +To learn about compiling in Ape, please see [this guide](./compile.html). + +After it is compiled, you can deploy it. +Here is a basic example of Python code to deploy a contract: + +```python +from ape import accounts, project + +# You need an account to deploy, as it requires a transaction. +account = accounts.load("") # NOTE: refers to your account alias! +contract = project.MyContract.deploy(1, account, sender=account) + +# NOTE: You can also do it this way: +contract2 = account.deploy(project.MyContract, 1, account) +``` + +The arguments to the constructor (`1, account`) can be in Python form. +Ape will automatically convert values in your transactions, thus allowing you to provide higher-level objects or abstractions as input types. +That is why, as you can see, the second argument is an `AccountAPI` object for the type `address` in the contract. + +Notice in the example, we use `project.MyContract` to access the contract type. +To avoid naming collisions with other properties on the `project` object, you can alternatively use the [get_contract()](../methoddocs/managers.html#ape.managers.project.manager.ProjectManager.get_contract) method to retrieve contract containers. + +```python +from ape import project + +contract = property.get_contract("MyContract") # Same as `project.MyContract`. +``` + +Notice when deploying, we have to specify the `sender=` kwarg because `deploy` operations are transactions. +To learn more about contract interaction via transactions, see the [Contract Interaction](#contract-interaction) section below and the [guide on transactions](./transactions.html). + +### Deploy Scripts + +Often time, the deployment process may be unique or complex. +Or possibly, you need to run the deploy-logic from CI or in a repeatable fashion. +Or perhaps, you just want to avoid having to invoking Python directly. +In those cases, you can use Ape's scripting system to save time and store your deployment logic. +Simply copy your Python logic into an Ape script and run it via: + +```shell +ape run +``` + +Learn how to do this and scripting in its entirity by reviewing [the scripting user-guide](./scripts.html). + +**There is no root `ape` command to deploy contracts; only the scripting-system, the `console`, or merely using Ape as a Python library**. + +If your deployment process is simple or only needs to happen once, it is easy to use `ape console` to achieve a deployment. +More information on how to use `ape console` can be found [here](./console.html). + +### Publishing + +You can also publish the contract source code to an explorer upon deployment using the `publish=` kwarg on the deploy methods. +More information on publishing contracts can be found in [this guide](./publishing.html). + +## From Project Contract Address + +You can also use the [at() method](../methoddocs/contracts.html#ape.contracts.base.ContractContainer.at) from the same top-level project manager when you know the address of an already-deployed contract: + +```python +from ape import project + +contract = project.MyContract.at("0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45") +``` + +## From Any Address + +If you already know the address of a contract, you can create instances of it using the `Contract` top-level factory: + +```python +from ape import Contract + +contract = Contract("0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45") +``` + +It will fetch the `contract-type` using the explorer plugin from the active network, such as [ape-etherscan](https://github.com/ApeWorX/ape-etherscan). + +If you have the [ENS plugin](https://github.com/ApeWorX/ape-ens) installed, you can use `.eth` domain names as the argument: + +```python +from ape import Contract + +contract = Contract("v2.registry.ychad.eth") +``` + +## From ABIs + +You can load contracts using their ABIs: + +```python +from ape import Contract + +address = "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45" + +# Using a JSON str: +contract = Contract( + address, abi='[{"name":"foo","type":"fallback", "stateMutability":"nonpayable"}]' +) + +# Using a JSON file path: +contract = Contract(address, abi="abi.json") + +# Using a Python dictionary from JSON: +contract = Contract( + address, + abi=[{"name":"foo","type":"fallback", "stateMutability":"nonpayable"}] +) +``` + +This will create the Contract instance from the given ABI. + +## From Previous Deployment + +Ape keeps track of your deployments for you so you can always refer back to a version that you deployed previously. +On live networks, this history of deployments is saved; on local networks, this history lasts for the duration of your script. + +Let's say you previously deployed a smart contract called `MyContract` on the rinkeby test network. +You could then refer back to it like so: + +```python +from ape import project, chain + +def main(): + my_contract = chain.contracts.get_deployments(project.MyContract)[-1] +``` + +or + +```python +from ape import project + +def main(): + my_contract = project.MyContract.deployments[-1] +``` + +`my_contract` will be of type `ContractInstance`. +`get_deployments` returns a list of deployments you made of that contract type. + +## Contract Interaction + +Then, after you have a contract instance, you can call methods on the contract. +For example, let's say you have a Vyper contract containing some functions: + +```python +@pure +@external +def get_static_list() -> DynArray[uint256, 3]: + return [1, 2, 3] + +@external +def set_number(num: uint256): + assert msg.sender == self.owner, "!authorized" + self.prevNumber = self.myNumber + self.myNumber = num +``` + +Notice the contract has both an external pure method and an external method that modifies state. +In EVM languages, methods that modify state require a transaction to execute because they cost money. +Modifying the storage of a contract requires gas and thus requires a sender with enough funding. +Contract calls, on the other hand, are read-operations and do not cost anything. +Thus, calls do not require specifying a `sender=` in Ape. + +At the RPC level, Ethereum calls are performed using the `eth_call` RPC and transactions are performed using the `eth_sendTransaction` or `eth_sendRawTransaction` RPCs. + +### Transactions + +The following example demonstrates invoking a contract's method in Ape as a transaction. +However, take note that there is a [separate guide](./transactions.html) which fully covers transactions in Ape. + +```python +from ape import accounts, Contract + +account = accounts.load("") +contract = Contract("0x...") # Assume is deployed version of code above + +# Transaction: Invoke the `set_number()` function, which costs Ether +receipt = contract.set_number(sender=account) +assert not receipt.failed + +# The receipt contains data such as `gas_used`. +print(receipt.gas_used) +``` + +Notice that transacting returns a [ReceiptAPI](../methoddocs/api.html#ape.api.transactions.ReceiptAPI) object which contains all the receipt data, such as `gas_used`. + +**NOTE**: If you need the `return_value` from a transaction, you have to either treat transaction as a call (see the section below!) or use a provider with tracing-features enabled (such as `ape-foundry` or `ape-geth`) and access the [return_value](../methoddocs/api.html#ape.api.transactions.ReceiptAPI.return_value) property on the receipt. + +```python +assert receipt.return_value == 123 +``` + +For more general information on transactions in the Ape framework, see [this guide](./transactions.html). + +### Calls + +In the Vyper code at the beginning of this section, the function `get_static_list()` is decorated as `@pure` indicating that it's read-only. +(Also in Vyper, `@view` methods are read-only). +Since `get_static_list()` is read-only, we can successfully call it without a `sender=` kwarg; no funds are required. +Here is an example of making a call by checking the result of `get_static_list()`: + +```python +from ape import accounts, Contract + +account = accounts.load("") +contract = Contract("0x...") + +# CALL: A sender is not required for calls! +assert contract.get_static_list() == [1, 2, 3] +``` + +### Calling Transactions and Transacting Calls + +You can treat transactions as calls and vice-versa. + +For example, let's say we have a Solidity function: + +```solidity +function addBalance(uint256 new_bal) external returns(uint256) { + balances[msg.sender] = new_bal; + return balances[msg.sender]; +} +``` + +To simulate the transaction without actually modifying any state, use the `.call` method from the contract transaction handler: + +```python +from ape import Contract + +contract = Contract("0x...") + +result = contract.addBalance.call(123) +assert result == "123" # The return value gets forwarded from the contract. +``` + +Similarly, you may want to measure a call as if it were a transaction, in which case you can use the `.transact` attribute on the contract call handler: + +Given the Solidity function: + +```solidity +function getModifiedBalance() external view returns(uint256) { + return balances[msg.sender] + 123; +} +``` + +You can treat it like a transaction by doing: + +```python +from ape import accounts, Contract + +account = accounts.load("") +contract = Contract("0x...") + +receipt = contract.getModifiedBalance.transact(sender=account) +assert not receipt.failed # Transactions return `ReceiptAPI` objects. +print(receipt.gas_used) # Analyze receipt gas from calls. +``` + +### Default, Fallback, and Direct Calls + +To directly call an address, such as invoking a contract's `fallback` or `receive` method, call a contract instance directly: + +```python +from ape import Contract, accounts + +sender = accounts.load("") # NOTE: refers to your account alias! +contract = Contract("0x123...") + +# Call the contract's fallback method. +receipt = contract(sender=sender, gas=40000, data="0x123") +``` + +### Private Transactions + +If you are using a provider that allows private mempool transactions, you are able to use the `private=True` kwarg to publish your transaction into a private mempool. +For example, EVM providers likely will use the `eth_sendPrivateTransaction` RPC to achieve this. + +To send a private transaction, do the following: + +```python +receipt = contract.set_number(sender=dev, private=True) +``` + +The `private=True` is available on all contract interactions. + +## Decoding and Encoding Inputs + +If you want to separately decode and encode inputs without sending a transaction or making a call, you can achieve this with Ape. +If you know the method you want to use when decoding or encoding, you can call methods `encode_input()` or `decode_input()` on the method handler from a contract: + +```python +from ape import Contract + +# HexBytes(0x3fb5c1cb00000000000000000000000000000000000000000000000000000000000000de) +contract = Contract("0x...") +bytes_value = contract.my_method.encode_input(0, 1, 2) +``` + +In the example above, the bytes value returned contains the method ID selector prefix `3fb5c1c`. +Alternatively, you can decode input: + +```python +from eth_pydantic_types import HexBytes +from ape import Contract + +contract = Contract("0x...") +selector_str, input_dict = contract.my_method.decode_input(HexBytes("0x123...")) +``` + +In the example above, `selector_str` is the string version of the method ID, e.g. `my_method(unit256,uint256)`. +The input dict is a mapping of input names to their decoded values, e.g `{"foo": 2, "owner": "0x123..."}`. +If an input does not have a name, its key is its stringified input index. + +If you don't know the method's ABI and you have calldata, you can use a `ContractInstance` or `ContractContainer` directly: + +```python +import ape + +# Fetch a contract +contract = ape.Contract("0x...") + +# Alternative, use a contract container from ape.project +# contract = ape.project.MyContract + +# Only works if unique amount of args. +bytes_value = contract.encode_input(0, 1, 2, 4, 5) +method_id, input_dict = contract.decode_input(bytes_value) +``` + +## Contract Interface Introspection + +There may be times you need to figure out ABI selectors and method or event identifiers for a contract. +A contract instance provides properties to make this easy. +For instance, if you have a 4-byte hex method ID, you can return the ABI type for that method: + +```python +import ape + +usdc = ape.Contract("0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48") + +# ABI type for a hex method ID +assert usdc.identifier_lookup['0x70a08231'].selector == 'balanceOf(address)' + +# Also, selectors from method and event signatures +assert usdc.selector_identifiers["balances(address)"] == "0x27e235e3" + +# Or dump all selectors and IDs +for identifier, abi_type in usdc.identifier_lookup.items(): + print(identifier, abi_type) + # 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef type='event' name='Transfer' inputs=... + # ... +``` + +These include methods and error IDs, as well as event topics. + +## Multi-Call and Multi-Transaction + +The `ape_ethereum` core plugin comes with a `multicall` module containing tools for interacting with the [multicall3 smart contract](https://github.com/mds1/multicall). +Multicall allows you to group function calls and transactions into a single call or transaction. + +Here is an example of how you can use the multicall module: + +```python +import ape +from ape_ethereum import multicall + + +ADDRESSES = ("0xF4b8A02D4e8D76070bD7092B54D2cBbe90fa72e9", "0x80067013d7F7aF4e86b3890489AcAFe79F31a4Cb") +POOLS = [ape.project.IPool.at(a) for a in ADDRESSES] + + +def main(): + # Use multi-call. + call = multicall.Call() + for pool in POOLS: + call.add(pool.getReserves) + + print(list(call())) + + # Use multi-transaction. + tx = multicall.Transaction() + for pool in POOLS: + tx.add(pool.ApplyDiscount, 123) + + acct = ape.accounts.load("signer") + for result in tx(sender=acct): + print(result) +``` diff --git a/v0.7.6/_sources/userguides/data.md.txt b/v0.7.6/_sources/userguides/data.md.txt new file mode 100644 index 0000000000..48d80a4619 --- /dev/null +++ b/v0.7.6/_sources/userguides/data.md.txt @@ -0,0 +1,78 @@ +# Querying Data + +Ape has advanced features for querying large amounts of on-chain data. +Ape provides this support through a number of standardized methods for working with data, +routed through our query management system, which incorporates data from many sources in +your set of installed plugins. + +## Getting Block Data + +Use `ape console`: + +```bash +ape console --network ethereum:mainnet:infura +``` + +Run a few queries: + +```python +In [1]: df = chain.blocks.query("*", stop_block=20) +In [2]: chain.blocks[-2].transactions # List of transactions in block +``` + +## Getting Account Transaction Data + +Each account within ape will also fetch and store transactional data that you can query. +To work with an account's transaction data, you can do stuff like this: + +```python +In [1]: chain.history["example.eth"].query("value").sum() # All value sent by this address +In [2]: acct = accounts.load("my-acct"); acct.history[-1] # Last txn `acct` made +In [3]: acct.history.query("total_fees_paid").sum() # Sum of ether paid for fees by `acct` +``` + +## Getting Contract Event Data + +On a deployed contract, you can query event history. + +For example, we have a contract with a `FooHappened` event that you want to query from. +This is how you would query the args from an event: + +```python +In [1]: df = contract_instance.FooHappened.query("*", start_block=-1) +``` + +where `contract_instance` is the return value of `owner.deploy(MyContract)` + +See [this guide](../userguides/contracts.html) for more information how to deploy or load contracts. + +## Using the Cache + +**Note**: This is in Beta release. +This functionality is in constant development and many features are in planning stages. +Use the cache plugin to store provider data in a sqlite database. + +To use the cache, first you must initialize it for each network you plan on caching data for: + +```bash +ape cache init --network : +``` + +**Note**: Caching only works for permanently available networks. It will not work with local development networks. + +For example, to initialize the cache database for the Ethereum mainnet network, you would do the following: + +```bash +ape cache init --network ethereum:mainnet +``` + +This creates a SQLite database file in ape's data folder inside your home directory. + +You can query the cache database directly, for debugging purposes. +The cache database has the following tables: + +| Table Name | Dataclass base | +| ----------------- | -------------- | +| `blocks` | `BlockAPI` | +| `transactions` | `ReceiptAPI` | +| `contract_events` | `ContractLog` | diff --git a/v0.7.6/_sources/userguides/dependencies.md.txt b/v0.7.6/_sources/userguides/dependencies.md.txt new file mode 100644 index 0000000000..b546c83ecc --- /dev/null +++ b/v0.7.6/_sources/userguides/dependencies.md.txt @@ -0,0 +1,286 @@ +# Dependencies + +Ape downloads and caches dependencies in the `.ape/packages//` directory where `` refers to the name of the dependency and `` refers to the version or branch of the package. +When first downloading dependencies, Ape only places the source contents in the `sources` field of the `PackageManifest` and leaves the `contract_types` field untouched. +This is because dependencies may not compile by Ape's standard out-of-the-box but their contract types can still be used in projects that do. + +To use dependencies in your projects, you must configure them in your `ape-config.yaml` file. + +## Types of Dependencies + +There are few dependency types that come with Ape. +The following section highlights how to use each of them and what their differences are. + +### GitHub + +You can use dependencies from GitHub. +For example, a common dependency for Solidity projects is [Open Zeppelin](https://github.com/OpenZeppelin/openzeppelin-contracts). +To use Open Zeppelin version 4.4.2 in your Ape Solidity project, add the following to your `ape-config.yaml` file: + +```yaml +dependencies: + - name: OpenZeppelin + github: OpenZeppelin/openzeppelin-contracts + version: 4.4.2 +``` + +Then, follow the guide below about `remappings` to use the dependency. + +**An important WARNING about the `version:` key for GitHub dependencies:** +The `version:` config first attempts to use an official GitHub release, but if the release is not found, it will check the release tags. +If you know the version is not available as an official release, bypass the original check by using the `ref:` key. +The `ref:` key is also used for installing branches. + +For example, to install a version available as a `git` tag, do the following: + +```yaml +dependencies: + - name: Uniswap + github: Uniswap/v3-core + ref: v1.0.0 +``` + +The `ref:` config installs the code from that reference; the `version:` config uses the official GitHub release API, and then only if that fails will it check the `git` references. +Often times, the `v` prefix is required when using tags. +However, if cloning the tag fails, `ape` will retry with a `v` prefix. +Bypass the original failing attempt by including a `v` in your dependency config. + +### Local + +You can use already-downloaded projects as dependencies by referencing them as local dependencies. + +```yaml +dependencies: + - name: MyDependency + local: local/path/to/MyDependency + contracts_folder: src/contracts +``` + +This is helpful when: + +- Working on multiple packages at once. +- When there is not a suitable `DependencyAPI` implementation available for downloading your dependency. +- Testing the framework. + +You can also reference local project manifests and use those as dependencies. +To do this, use a local value pointing to the manifest file, like this: + +```yaml +dependencies: + - name: MyDependency + local: ./my-dependency.json + version: 1.0.0 +``` + +### NPM + +You can use dependencies from NPM. +This is generally not recommended. +However, sometimes it is the only way to use a dependency. + +To use a dependency from NPM, you must have already run `npm install` and that package must be present in your local `node_modules` folder. +Then, add the following to your config so that Ape can find the dependency: + +```yaml +dependencies: + - name: MyDependency + npm: "@myorg/mydependency" + version: v1.3.0 +``` + +## Package Management CLI + +You can also install and / or compile dependencies using the `pm` CLI. + +### list + +To list information about the dependencies in your local project, run: + +```shell +ape pm list +``` + +To list information about all installed dependencies across all projects, run: + +```shell +ape pm list --all +``` + +You should see information like: + +```shell +Packages: + OpenZeppelin v4.6.0, compiled! + vault master + vault v0.4.5 + gnosis v1.3.0 +``` + +### install + +To install all dependencies in your project, run: + +```shell +ape pm install +``` + +If the dependencies are already cached and you want to re-install them, use the `--force` flag: + +```shell +ape pm install --force +``` + +To install a dependency that is not in your config, you can specify it directly along with `--name` and `--version`: + +```shell +ape pm install gh:OpenZeppelin/openzeppelin-contracts --name openzeppelin --version "4.6.0" +``` + +**NOTE**: The `gh:` prefix is used because this dependency is from GitHub. +For `npm` dependencies, you use an `npm:` prefix. +For local dependencies, you give it a path to the local dependency. +`--version` is not required when using a local dependency. + +### remove + +Remove previously installed packages using the `remove` command: + +```shell +ape pm remove OpenZeppelin +``` + +If there is a single version installed, the command will remove the single version. +If multiple versions are installed, pass additional arguments specifying the version(s) to be removed: + +```shell +ape pm remove OpenZeppelin 4.5.0 4.6.0 +``` + +To skip the confirmation prompts, use the `--yes` flag (abbreviated as `-y`): + +```shell +ape pm remove OpenZeppelin all --yes +``` + +**NOTE**: Additionally, use the `all` special version key to delete all versions. + +### compile + +Dependencies are not compiled when they are installed. +Dependencies are only compiled if you need them to be. +This is because often times a dependency will not compile in Ape on its own but its contract types can still be used in your project. +However, when working with dependency contracts directly, they will need to be compiled. +Ape compiles them as soon as you request the contracts from them, so it generally happens on the backend automatically. +**However**, you may want to recompile the dependencies, like when using a new compiler version or settings. +You can use the CLI to recompile. + +```shell +ape pm compile OpenZeppelin --version 4.6.0 --force +``` + +**NOTE**: You only need to specify a version if you have more than one version of a dependency installed. +Otherwise, you just give it the name. + +To compile all dependencies in your local project, run the command with no arguments while in your project: + +```shell +ape pm compile +``` + +Alternatively, you can compile dependencies along with your project's contracts by using the `--include-dependencies` flag in `ape-compile`: + +```shell +ape compile --include-dependencies +``` + +## Misc + +The following guidelines are applicable to **ALL** dependency types. + +### Custom Contracts Folder + +You can set the name of the dependency's contracts folder, e.g.: + +```yaml +dependencies: + - name: DappToolsERC20 + github: dapphub/erc20 + ref: dappnix + contracts_folder: src +``` + +### File Exclusions + +To ignore files from a dependency project, use the `exclude` setting to specify glob patterns: + +```yaml +dependencies: + - name: dependency-project-name + github: org-name/dependency-project-name + exclude: + - package.json # Ignore package.json files. + - mocks/**/* # Ignore all files in the 'mocks' directory +``` + +### Config Override + +To use any extra config item for a dependency, such as configurations for compilers needed during compiling, use the `config_override` setting: + +```yaml +dependencies: + - name: dependency + github: org-name/dependency-project-name + config_override: + solidity: + evm_version: paris +``` + +### Solidity Remappings + +A common use-case for dependencies involves the Solidity plugin. +To use your dependencies in the `ape-solidity` plugin, configure `import_remappings` to refer to them: + +```yaml +dependencies: + - name: OpenZeppelin + github: OpenZeppelin/openzeppelin-contracts + version: 4.4.2 + +solidity: + import_remapping: + - "@openzeppelin=OpenZeppelin/4.4.2" +``` + +Now, in your solidity files, import `OpenZeppelin` sources via: + +```solidity +import "@openzeppelin/token/ERC721/ERC721.sol"; +``` + +### Compiling Dependencies + +Sometimes, you may need to access types (such as contract types) from dependencies. +You can achieve this using the project manager: + +```python +from ape import accounts, project + +# NOTE: This will compile the dependency +dependency_contract = project.dependencies["my_dependency"]["1.0.0"].DependencyContractType +my_account = accounts.load("alias") +deployed_contract = my_account.deploy(dependency_contract, "argument") +print(deployed_contract.address) +``` + +If you would like to always compile dependencies during `ape compile` rather than only have them get compiled upon asking for contract types, you can use the config option `include_dependencies` from the `compile` config: + +```yaml +compile: + include_dependencies: true +``` + +Alternatively, use the `--include-dependencies` CLI flag: + +```shell +ape compile --include-dependencies +``` diff --git a/v0.7.6/_sources/userguides/developing_plugins.md.txt b/v0.7.6/_sources/userguides/developing_plugins.md.txt new file mode 100644 index 0000000000..8d3a364384 --- /dev/null +++ b/v0.7.6/_sources/userguides/developing_plugins.md.txt @@ -0,0 +1,185 @@ +# Developing Plugins + +Your plugin project can be any type of python project, so long as its package name starts with `ape-` (such as `ape-ethereum`). +The module and plugin directory name must start with `ape_` (such as `ape_ethereum`). +To create an `ape` plugin, implement one or more API classes from the `ape.api` namespace and/or add key +`ape_cli_subcommands` to your entry-points list in your project's `setup.py`, depending on what type of plugin you want to create. +This guide is intended to assist in both of those use cases. + +The following is a list of example plugins to use as a reference when developing plugins: + +- [the Solidity plugin](https://github.com/apeworx/ape-solidity), an example `CompilerAPI` +- [the Infura plugin](https://github.com/apeworx/ape-infura), an example `ProviderAPI` +- [the Trezor plugin](https://github.com/apeworx/ape-trezor), an example `AccountAPI` +- [the Tokenlists plugin](https://github.com/apeworx/ape-tokens), an example CLI Extension + +## Initialize a Plugin Project + +As previously mentioned, a plugin project is merely a python project. +However, you can optionally use this [project template](https://github.com/ApeWorX/project-template) for initializing your plugin. +**NOTE**: this template is primarily designed for plugins built within the ApeWorX team organization; not everything may apply. +It is okay to delete anything that does not work or that you don't find helpful. +The template may be good to follow if you want to keep your plugin of similar quality to plugins developed by the ApeWorX team. + +## Implementing API Classes + +API classes (classes from the `ape.api` namespace) are primarily composed of abstract methods and properties that plugins must implement. +A benefit of the plugin system is that each plugin can implement these however they need, so long as they conform to the API interface. +Two plugins with the same API may do entirely different things and yet be interchangeable in their usage. + +To implement an API, import its class and use it as a base-class in your implementation class. +**WARNING**: The plugin will fail to work properly if you do not implement all the abstract methods. + +```python +from ape.api import ProviderAPI +from web3 import Web3, HTTPProvider + + +class MyProvider(ProviderAPI): + _web3: Web3 = None # type: ignore + + def connect(self): + self._web3 = Web3(HTTPProvider(str("https://localhost:1337"))) + + """Implement rest of abstract methods""" +``` + +### Registering API Classes + +Once you have finished implementing your API classes, you need to register them using the [@plugins.register](../methoddocs/plugins.html#ape.plugins.register) method decorator. + +```python +from ape import plugins + +# Here, we register our provider plugin so we can use it in 'ape'. +@plugins.register(plugins.ProviderPlugin) +def providers(): + # NOTE: 'MyProvider' defined in a prior code-block. + yield "ethereum", "local", MyProvider +``` + +This decorator hooks into ape core and ties everything together by looking for all local installed site-packages that start with `ape_`. +Then, it will loop through these potential `ape` plugins and see which ones have created a plugin type registration. +If the plugin type registration is found, then `ape` knows this package is a plugin and attempts to process it according to its registration interface. + +### CLI Plugins + +The `ape` CLI is built using the python package [click](https://palletsprojects.com/p/click/). +To create a CLI plugin, create any type of `click` command (such as a `click.group` or a `click.command`). + +`_cli.py`: + +```python +import click + +@click.group +def cli(): + """My custom commands.""" + + +@cli.command() +def my_sub_cmd(): + """My subcommand.""" +``` + +Then, register it using `entrypoints`, which is a built-in python registry of items declared in `setup.py`. + +`setup.py`: + +```python +... +entry_points={ + "ape_cli_subcommands": [ + "ape_myplugin=ape_myplugin._cli:cli", + ], +}, +... +``` + +**NOTE**: Typically, a `_cli.py` module is used instead of a `__init__.py` module for the location of the Click CLI group because it is logically separate from the Python module loading process. +If you try to define them together and use `ape` as a library as well, there is a race condition in the loading process that will prevent the CLI plugin from working. + +For common `click` usages, use the `ape.cli` namespace. +For example, use the [@existing_alias_argument() decorator](../methoddocs/cli.html#ape.cli.arguments.existing_alias_argument)) when you need a CLI argument for specifying an existing account alias: +Follow [this guide](./clis.html) to learn more about what you can do with the utilities found in `ape.cli`. + +```python +import click +from ape.cli import existing_alias_argument + +@click.command() +@existing_alias_argument() +def my_cmd(alias): + click.echo(f"{alias} is an existing account!") +``` + +## Using Plugins + +Once you have finished implementing and registering your API classes, they will now be part of `ape`. For example, +if you implemented the `AccountAPI`, you can now use accounts created from this plugin. The top-level `ape` manager +classes are indifferent about the source of the plugin. + +```python +from ape import accounts + +# The manager can load accounts from any account-based plugin. +my_ledger_account = accounts.load("ledger_0") # Created using the 'ape-ledger' plugin +my_trezor_account = accounts.load("trezor_0") # Created using the 'ape-trezor' plugin +``` + +Similarly, if you implemented a `ProviderAPI`, that provider is now accessible in the CLI via the `--network` option: + +```bash +ape console my_script --network ethereum:local:my_provider_plugin +``` + +**NOTE**: The `--network` option is available on the commands `test` and `console` as well as any CLI command that uses the [network option decorator](../methoddocs/cli.html?highlight=network_option#ape.cli.options.network_option). +To learn more about networks in Ape, follow [this guide](./networks.html). + +When creating the CLI-based plugins, you should see your CLI command as a top-level command in the `ape --help` output: + +``` +Commands: + ... + my-plugin Utilities for my plugin + ... +``` + +To edit the description of the CLI command (or group), you can either set the `short_help` kwarg or use a doc-str on the command: + +```python +import click + + +@click.command(short_help="Utilities for my plugin") +def cli(): + pass + +""" Or """ + +@click.command() +def cli(): + """Utilities for my plugin""" +``` + +## Logging + +Use Ape's logger in your plugin by importing it from the `ape.logging` module or by using it off the CLI context (from using the `@ape_cli_context` decorator). + +### Import the logger from the logging module + +```python +from ape.logging import logger + +logger.info("This is a log message") +``` + +### Use the logger from the `@ape_cli_context` + +```python +from ape.cli import ape_cli_context + +@ape_cli_context() +def my_command(cli_ctx): + cli_ctx.logger.info("my log message") +``` diff --git a/v0.7.6/_sources/userguides/installing_plugins.md.txt b/v0.7.6/_sources/userguides/installing_plugins.md.txt new file mode 100644 index 0000000000..32d20adcfe --- /dev/null +++ b/v0.7.6/_sources/userguides/installing_plugins.md.txt @@ -0,0 +1,70 @@ +# Plugins + +Plugins are core to Ape's architecture. +Here are some plugin examples in Ape: + +- `CompilerAPI`: For supporting various languages, like Vyper or Solidity. +- `ProviderAPI`: For connecting the blockchain, such as Alchemy, Geth, or a local Hardhat node. +- `EcosystemAPI`: A suite of networks, such as Ethereum, Fantom, or Starknet. +- CLI plugins: Extending the `click` CLI in Ape. + +## Core Plugins + +Ape ships with core plugins to help Ape work out-of-the-box. +To see the core plugins that come with Ape, run the following command: + +```bash +ape plugins list --all +``` + +Normally, the `ape plugins list` command shows you all the plugins you have installed. +However, when you include the `--all` flag, it shows the core plugins and the available plugins as well. +**NOTE**: The available plugins list is trusted and from the ApeWorX organization, however you can install third-party plugins from other sources as well. + +## Installing Plugins + +To add plugins to your project, edit your `ape-config.yaml` file: + +```yaml +plugins: + - name: solidity + version: 0.6.0 + - name: hardhat + - name: ens + - name: etherscan + version: ">=0.6.2,<0.7" +``` + +The `name` field is required. +Additionally, you may specify a `version` with or without constraints. + +To install the plugins listed in your project, run the following command from the project's root directory: + +```bash +ape plugins install . +``` + +To install plugins individually, run the following command: + +```bash +ape plugins install vyper "solidity>=0.6,<0.7" +``` + +To install a plugin from a branch that is not yet released, you can use a `git+` prefixed value for the version: + +```yaml +plugins: + - name: foobar + version: git+https://github.com//ape-foobar.git@ +``` + +Or from the CLI like: + +```shell +ape plugins install "foobar@git+https://github.com//ape-foobar.git@" +``` + +## Plugin Types + +There are many types of plugins available, including compilers, providers, networks, and CLI-based plugins. +To learn more about the different types of plugins, see the [Developing a Plugin Guide](./developing_plugins.html). diff --git a/v0.7.6/_sources/userguides/logging.md.txt b/v0.7.6/_sources/userguides/logging.md.txt new file mode 100644 index 0000000000..3ca6b77dbd --- /dev/null +++ b/v0.7.6/_sources/userguides/logging.md.txt @@ -0,0 +1,49 @@ +# Logging + +Ape provides a logger and uses it to show messages throughout the execution of its modules. +Every CLI command comes with the logger in Ape, even custom user scripts (unless they change the behavior of `--verbosity`). + +The following log levels are available with Ape: + +| Log Level | Numeric Value | Purpose | Color | +| --------- | ------------- | ------------------------------ | ------ | +| DEBUG | 10 | Debug stuff | Blue | +| INFO | 20 | General information | Blue | +| SUCCESS | 21 | To mark a successful operation | Green | +| WARNING | 30 | Indicates a potential issue | Yellow | +| ERROR | 40 | An error occurred | Red | + +**NOTE**: `SUCCESS` is a non-standard verbosity level custom to the framework. +It is shown during `INFO` but not shown if set to `WARNING` or above. + +## CLI Logging + +If you are running into issues and wish to see more information logged, you likely want to run your command with `--verbosity DEBUG` or `-v debug`: + +```bash +ape --verbosity DEBUG my_cmd # long form +ape -v debug my_cmd # short form +``` + +This will output HTTP requests and anything else with a `DEBUG` logging verbosity in Ape. + +Alternatively, you may wish to log less and show important logs, such as `ERROR` logs. +To do this, use the `ERROR` verbosity: + +```bash +ape my_cmd -v ERROR +``` + +*NOTE*: You can put the verbosity flag anywhere in your CLI command for _most_ commands. + +## Python Logging + +You can also import and use the logger in your own Python scripts or commands: + +```python +from ape.logging import logger, LogLevel + +def main(): + logger.info("You have entered `main()`.") + logger.set_level(LogLevel.WARNING) +``` diff --git a/v0.7.6/_sources/userguides/networks.md.txt b/v0.7.6/_sources/userguides/networks.md.txt new file mode 100644 index 0000000000..09cf8bec4b --- /dev/null +++ b/v0.7.6/_sources/userguides/networks.md.txt @@ -0,0 +1,486 @@ +# Networks + +When interacting with a blockchain, you will have to select an ecosystem (e.g. Ethereum, Arbitrum, or Fantom), a network (e.g. Mainnet or Goerli) and a provider (e.g. Eth-Tester, Geth, or Alchemy). +Networks are part of ecosystems and typically defined in plugins. +For example, the `ape-ethereum` plugin comes with Ape and can be used for handling EVM-like behavior. + +## Selecting a Network + +Before discussing how to add custom networks or install L2 network plugins, you need to know how to specify the network choice. +No matter what type of network you are using in Ape, you specify the network using a "network choice" triplet value: + +```python +"::" +``` + +Where `ecosystem-name` refers to the ecosystem, e.g. `ethereum`, `polygon`, `fantom`, or any valid ecosystem plugin name. +The `network-name` refers to a network such as `mainnet`, `local`, or something else defined by your ecosystem or custom network config. +And `provider-name` refers to the provider plugin in Ape, such as `geth` for a generic node or `foundry` if the network is more Anvil-based, or a different plugin altogether. + +Commonly, the network triplet value is specified via the `--network` option in Ape CLI commands. +The following is a list of common Ape commands that can use the `--network` option: + +```bash +ape test --network ethereum:local:foundry +ape console --network arbitrum:testnet:alchemy # NOTICE: All networks, even from other ecosystems, use this. +``` + +To see all possible values for `--network`, run the command: + +```shell +ape networks list +``` + +You can also use the `--network` option on scripts that use the `main()` method approach or scripts that implement that `ConnectedProviderCommand` command type. +See [the scripting guide](./scripts.html) to learn more about scripts and how to add the network option. + +Also, you can omit values to use defaults. +For example, the default ecosystem is `ethereum` and the default network is `local`, so you can do: + +```bash +ape run --network ::foundry +``` + +as a short-cut for `ethereum:local:foundry`. +(note: `` refers to the name of a script that uses the network option or is a `ConnectedProviderCommand`. +See the [scripting guide](./scripts.html) for more information). + +Next, we will talk about how to add additional networks to your Ape environment. + +## L2 Networks + +Common L2 networks, such as Arbitrum, Polygon, Optimism, or Fantom, have ApeWorX-maintained (trusted) plugins that override the Ethereum ecosystem API class and change any defaults that are needed. +You can install these plugins by doing: + +```shell +ape plugins install arbitrum polygon optimism fantom +``` + +Each plugin does different things. +In general, L2 plugins are very small and override the Ethereum ecosystem class. +Here are some examples of changes L2 plugins make that allow improved support for these networks: + +1. Networks that don't support EIP-1559 transactions use Static-fee transaction types by default whereas `ape-ethereum` will use EIP-1559 transactions by default. +2. Some networks, such as `ape-arbitrum`, have unique transaction types (and receipt types!) that are handled in the plugin. + This logic does not have to live in the base `ape-ethereum` plugin but can live in the network's custom plugin. +3. Fee token information: When displaying gas reports or other data, network plugins can use the correct fee-token symbols, such as Polygon MATIC. + +Here is a list of all L2 network plugins supported by Ape: + +| Name | GitHub Path | +| ----------------- | ------------------------------------------------------------------------- | +| ape-avalanche | [ApeWorX/ape-avalanche](https://github.com/ApeWorX/ape-avalanche) | +| ape-arbitrum | [ApeWorX/ape-arbitrum](https://github.com/ApeWorX/ape-arbitrum) | +| ape-base | [ApeWorX/ape-base](https://github.com/ApeWorX/ape-base) | +| ape-fantom | [ApeWorX/ape-fantom](https://github.com/ApeWorX/ape-fantom) | +| ape-optmism | [ApeWorX/ape-optimism](https://github.com/ApeWorX/ape-optimism) | +| ape-polygon | [ApeWorX/ape-polygon](https://github.com/ApeWorX/ape-polygon) | +| ape-polygon-zkevm | [ApeWorX/ape-polygon-zkevm](https://github.com/ApeWorX/ape-polygon-zkevm) | + +**NOTE**: If you are connecting an L2 network or any other network that does not have a plugin, you can use the custom network support, which is described in the [next section](#custom-network-connection). + +Once you have the L2 network plugin installed, you can configure its node's URI by setting the values in the `geth` (default node) core plugin via your `ape-config.yaml` file: + +```yaml +geth: + : + : + uri: https://path.to.node.example.com +``` + +To see proper ecosystem and network names needed for configuration, run the command: + +```shell +ape networks list +``` + +In the remainder of this guide, any example below using Ethereum, you can replace with an L2 ecosystem's name and network combination. + +## Custom Network Connection + +You can add custom networks to Ape without creating a plugin. +The two ways to do this are: + +1. Create custom network configurations in your `ape-config.yaml` file (typically your global one). +2. Use the `--network` flag with a raw URI string. + +### Custom Networks By Config + +The most familiar way to use custom networks (non-plugin-based networks) in Ape is to use the `networks: custom` configuration. +Generally, you want to use the global `ape-config.yaml`, which is located in your `$HOME/.ape/` directory. +By configuring networks globally, you can share them across all your projects. +More information about configuring Ape (in general) can be found [here](./contracts.html). + +To add custom networks to your `ape-config.yaml` file, follow this pattern: + +```yaml +networks: + custom: + - name: mainnet # Required + chain_id: 109 # Required + ecosystem: shibarium # The ecosystem name, can either be new or an existing + base_ecosystem_plugin: polygon # The ecosystem base-class, defaults to the default ecosystem + default_provider: geth # Default is the generic node provider +``` + +The following paragraphs explain the different parameters of the custom network config. + +**name**: The `name` of the network is the same identifier you use in the network triplet for the "network" (second) section. +Read more on the network option [here](#selecting-a-network). + +**chain_id**: The chain ID is required for config-based custom networks. +It ensures you are on the correct network when making transactions and is very important! + +**ecosystem**: Specify your custom network's ecosystem. +This can either be an existing ecosystem or a new name entirely. +Recall, you refer to your network via the network-triplet `ecosystem:network:provider` option-str. +The ecosystem class is largely responsible for decoding and encoding data to-and-fro the blockchain but also contains all the networks. +More information about the EcosystemAPI can be found [here](../methoddocs/api.html#ape.api.networks.EcosystemAPI). +If your custom network is part of a new ecosystem, such as Shibarium, use the name of the new ecosystem, e.g. `"shibarium"`. +You may want to also adjust the `base_ecosystem_plugin` config to change the base-class used. + +**base_ecosystem_plugin**: The plugin that defines the base-class to your custom ecosystem containing your custom network(s). +If your custom network's ecosystem matches closer to another L2 instead of Ethereum, use that ecosystem name as your `base_ecosystem_plugin` in your custom network config. +For example, take note that `"ethereum"` assumes EIP-1559 exists (unless configured otherwise). +If your custom network is closer to Fantom, Polygon, Avalanche, or any other L2, you may want to consider using one of those plugins as the `base_ecosystem_plugin` to your custom network. +Alternatively, you can configure your custom network the same way you configure any other network in the config (see [this section](#block-time-transaction-type-and-more-config)). + +**default_provider**: The default provider is the provider class used for making the connection to your custom network, unless you specify a different provider (hence the `default_`). +Generally, you won't change this and can use the default EVM node provider. +Many provider plugins won't function here, such as `ape-infura` or `ape-alchemy`. +If you are using one of their networks, it is best to edit and use the plugins directly. +If you are using a developer-node remotely, such as a custom Anvil node, you can specify the default provider to be `foundry` instead. +However, take care in making sure you set up Foundry to correctly connect to your node. +Likewise, when using the default Ethereum node provider, you will need to tell it the RPC URL. + +#### RPC URL + +To configure the RPC URL for a custom network, use the configuration of the provider. +For example, if the RPC URL is `https://apenet.example.com/rpc`, configure it by doing: + +```yaml +default_ecosystem: shibarium + +networks: + custom: + - name: mainnet + ecosystem: shibarium + base_ecosystem_plugin: polygon # Closest base class. + chain_id: 109 # This must be correct or txns will fail. + +geth: + shibarium: + mainnet: + uri: https://www.shibrpc.com +``` + +Now, when using `ethereum:apenet:geth`, it will connect to the RPC URL `https://apenet.example.com/rpc`. + +#### Explorer URL + +To configure explorer URLs for your custom network, use the explorer's plugin config. +For example, let's say you added the following network: + +```yaml +networks: + custom: + - name: customnetwork + chain_id: 31337 + default_provider: geth +``` + +To add a corresponding entry in `ape-etherscan` (assuming you are using `ape-etherscan` as your explorer plugin), add the following to your `ape-config.yaml` file: + +```yaml +etherscan: + ethereum: + rate_limit: 15 # Configure a rate limit that makes sense for retry logic. + + # The name of the entry is the same as your custom network! + customnetwork: + uri: https://custom.scan # URL used for showing transactions + api_uri: https://api.custom.scan/api # URL used for making API requests. +``` + +**NOTE**: Every explorer plugin may be different in how you configure custom networks. +Consult the plugin's README to clarify. + +#### Block time, transaction type, and more config + +Configuring network properties in Ape is the same regardless of whether it is custom or not. +As you saw above, we set the RPC URL of the custom network the same as if a plugin existed for that network. +The same is true for network config properties such as `block_time`, `default_transaction_type`, `transaction_acceptance_timeout` and more. + +For example, let's say I want to change the default transaction type for the `apenet` custom network (defined in examples above). +I do this the same way as if I were changing the default transaction type on mainnet. + +```yaml +ethereum: + apenet: + default_transaction_type: 0 # Use static-fee transactions for my custom network! +``` + +For a full list of network configurations like this (for both custom and plugin-based networks), [see this section](#configuring-networks). + +### Custom Networks by CLI + +Ape also lets you connect to custom networks on-the-fly! +If you would like to connect to a URI using an existing ecosystem plugin, you can specify a URI in the provider-section for the `--network` option: + +```bash +ape run script --network ::https://foo.bar +``` + +Additionally, if you want to connect to an unknown ecosystem or network, you can use the URI by itself. +This uses the default Ethereum ecosystem class. + +```bash +ape run script --network https://foo.bar +``` + +**WARNING**: The recommended approach is to use an L2 plugin when one exists, as it will integrate better in the Ape ecosystem. + +Here are some general reason why Network plugins are recommended: + +1. You may need to integrate with other plugins, such as explorer plugins for getting contract types. +2. Some chains may not implement EIP-1559 or may have forked from a specific configuration. +3. Response differences in uncommon blocks, such as the `"pending"` block or the genesis block. +4. Revert messages and exception-handling differences. +5. You can handle chain differences such as different transaction types in Arbitrum, non-EVM chains and behaviors like Starknet. + +## Configuring Networks + +Change network defaults using your project's `ape-config.yaml` file. +The following configuration changes the default ecosystem, network, and provider such that if you omitted the `--network` option on connected-provider commands, it would use the value `::`. + +```yaml +default_ecosystem: + +: + default_network: + : + default_provider: +``` + +As mentioned [above](#l2-networks), ecosystems and networks typically come from plugins and their names and values are defined in those plugins. +The ecosystem name goes in placeholder `` and the network names go in place for ``. + +**If you are unsure of the values to place here, run the following command**: + +```shell +ape networks list +``` + +This command lists all the ecosystem names and networks names installed currently in Ape. +Place the identical name in the config to configure that ecosystem or network. + +You may also configure a specific gas limit for a given network: + +```yaml +: + default_network: + : + gas_limit: "max" +``` + +You may use one of: + +- `"auto"` - gas limit is estimated for each transaction +- `"max"` - the maximum block gas limit is used +- A number or numeric string, base 10 or 16 (e.g. `1234`, `"1234"`, `0x1234`, `"0x1234"`) + +For the local network configuration, the default is `"max"`. Otherwise, it is `"auto"`. + +## Local Network + +The default network in Ape is the local network (keyword `"local"`). +It is meant for running tests and debugging contracts. +Out-of-the-box, Ape ships with two development providers you can use for the `local` network: + +- [EthTester](https://github.com/ethereum/eth-tester) +- An Ephemeral Geth process + +```bash +ape test --network ::test +ape test --network ::geth # Launch a local development geth process +``` + +To learn more about testing in ape, follow [this guide](./testing.html). + +## Live Networks + +Use the core plugin `ape-geth` to connect to local or remote nodes via URI. +The geth plugin is abstract in that it represents any node, not just geth nodes. +However, it will work best when connected to a geth node. +To configure network URIs in geth, you can use the `ape-config.yaml` file: + +```yaml +geth: + ethereum: + mainnet: + uri: https://foo.node.bar +``` + +## Network Config + +There are many ways to configure your networks. +Most of the time, Ape and its L2 plugins configure the best defaults automatically. +Thus, you most likely won't need to modify these configurations. +However, you do need to configure these if you wish to stray from a network's defaults. +The following example shows how to do this. +(note: even though this example uses `ethereum:mainnet`, you can use any of the L2 networks mentioned above, as they all have these config properties). + +```yaml +ethereum: + mainnet: + # Ethereum mainnet in Ape uses EIP-1559 by default, + # but we can change that here. Note: most plugins + # use type 0 by default already, so you don't need + # to change this if using an `ape-` plugin. + default_transaction_type: 0 + + # The amount of time to wait for a transaction to be + # accepted after sending it before raising an error. + # Most networks use 120 seconds (2 minutes). + transaction_acceptance_timeout: 60 + + # The amount of times to retry fetching a receipt. This is useful + # because decentralized systems may show the transaction accepted + # on some nodes but not on others, and potentially RPC requests + # won't return a receipt immediately after sending its transaction. + # This config accounts for such delay. The default is `20`. + max_receipt_retries: 10 + + # Set a gas limit here, or use the default of "auto" which + # estimates gas. Note: local networks tend to use "max" here + # by default. + gas_limit: auto + + # Base-fee multipliers are useful for times when the base fee changes + # before a transaction is sent but after the base fee was derived, + # thus causing rejection. A multiplier reduces the chance of + # rejection. The default for live networks is `1.4` times the base fee. + base_fee_multiplier: 1.2 + + # The block time helps Ape make decisions about + # polling chain data. + block_time: 10 +``` + +## Running a Network Process + +To run a network with a process, use the `ape networks run` command: + +```shell +ape networks run +``` + +By default, `ape networks run` runs a development Geth process. +To use a different network, such as `hardhat` or Anvil nodes, use the `--network` flag: + +```shell +ape networks run --network ethereum:local:foundry +``` + +## Provider Interaction + +Once you are connected to a network, you now have access to a `.provider`. +The provider class is what higher level Manager classes in Ape use to interface with the blockchain. +You can call methods directly from the provider, like this: + +```python +from ape import chain + +block = chain.provider.get_block("latest") +``` + +## Provider Context Manager + +Use the [ProviderContextManager](../methoddocs/api.html#ape.api.networks.ProviderContextManager) to change the network-context in Python. +When entering a network for the first time, it will connect to that network. +**You do not need to call `.connect()` or `.disconnect()` manually**. + +For example, if you are using a script with a default network connection, you can change connection in the middle of the script by using the provider context manager: + +```python +from ape import chain, networks + +def main(): + start_provider = chain.provider.name + with networks.ethereum.mainnet.use_provider("geth") as provider: + # We are using a different provider than the one we started with. + assert start_provider != provider.name +``` + +Jump between networks to simulate multi-chain behavior. + +```python +import click +from ape import networks + +@click.command() +def cli(): + with networks.polygon.mainnet.use_provider("geth"): + ... + with networks.ethereum.mainnet.use_provider("geth"): + ... +``` + +The argument to [use_provider()](../methoddocs/api.html#ape.api.networks.NetworkAPI.use_provider) is the name of the provider you want to use. +You can also tell Ape to use the default provider by calling method [use_default_provider()](../methoddocs/api.html#ape.api.networks.NetworkAPI.use_default_provider) instead. +This will use whatever provider is set as default for your ecosystem / network combination (via one of your `ape-config.yaml` files). + +For example, let's say I have a default provider set like this: + +```yaml +arbitrum: + mainnet: + default_provider: alchemy +``` + +```python +import ape + +# Use the provider configured as the default for the arbitrum::mainnet network. +# In this case, it will use the "alchemy" provider. +with ape.networks.arbitrum.mainnet.use_default_provider(): + ... +``` + +You can also use the [parse_network_choice()](../methoddocs/managers.html#ape.managers.networks.NetworkManager.parse_network_choice) method when working with network choice strings: + +```python +from ape import networks + +# Same as doing `networks.ethereum.local.use_provider("test")`. +with networks.parse_network_choice("ethereum:local:test") as provider: + print(provider) +``` + +**A note about disconnect**: Providers do not disconnect until the very end of your Python session. +This is so you can easily switch network contexts in a bridge or multi-chain environment, which happens in fixtures and other sessions out of Ape's control. +However, sometimes you may definitely want your temporary network session to end before continuing, in which case you can use the `disconnect_after=True` kwarg: + +```python +from ape import networks + +with networks.parse_network_choice("ethereum:local:foundry", disconnect_after=True) as provider: + print(provider) +``` + +### Forked Context + +Using the `networks.fork()` method, you can achieve similar effects to using a forked network with `disconnect_after=True`. +For example, let's say we are running the following script on the network `ethereum:mainnet`. +We can switch to a forked network by doing this: + +```python +from ape import networks + +def main(): + with networks.fork("foundry"): + ... + # Do stuff on a local, forked version of mainnet + + # Switch back to mainnet. +``` diff --git a/v0.7.6/_sources/userguides/projects.md.txt b/v0.7.6/_sources/userguides/projects.md.txt new file mode 100644 index 0000000000..e792b785bd --- /dev/null +++ b/v0.7.6/_sources/userguides/projects.md.txt @@ -0,0 +1,80 @@ +# Developing Projects with Ape + +Use `ape init` to create your project. +A common project structure looks like this: + +``` +project # The root project directory +├── contracts/ # Project source files, such as '.sol' or '.vy' files +│ └── smart_contract_example.sol # Sample of a smart contract +├── tests/ # Project tests, ran using the 'ape test' command +│ └── test_sample.py # Sample of a test to run against your sample contract +├── scripts/ # Project scripts, such as deploy scripts, ran using the 'ape run <`name>' command +│ └── deploy.py # Sample script to automate a deployment of an ape project +└── ape-config.yaml # The ape project configuration file +``` + +Notice that you can configure you ape project using the `ape-config.yaml` file. +See the [configuration guide](./config.html) for a more detailed explanation of settings you can adjust. + +## Adding Plugins + +Your project may require plugins. +To install plugins, use the `ape plugins install .` command. +Learn more about configuring your project's required plugins by following [this guide](./installing_plugins.html). + +## Compiling Contracts + +The project manager object is a representation of your current project. +Access it from the root `ape` namespace: + +```python +from ape import project +``` + +Your `project` contains all the "relevant" files, such as source files in the `contracts/` directory. +Use the following command to compile all contracts in the `contracts/` directory: + +```bash +ape compile +``` + +For more information on compiling your project, see [this guide](./compile.html). + +## Deploying Contracts + +After compiling, the contract containers are accessible from the `project` manager. +Deploy them in the `console` or in scripts; for example: + +```python +from ape import accounts, project + +account = accounts.load("my_account_alias") +account.deploy(project.MyContract) +``` + +**NOTE**: You can also deploy contracts from the container itself: + +```python +from ape import accounts, project + +account = accounts.load("my_account_alias") +project.MyContract.deploy(sender=account) +``` + +### Dependencies + +To set up and use dependencies in your project, follow [this guide](./dependencies.html). + +## Scripts + +The scripts folder contains project automation scripts, such as deploy scripts, as well as other executable jobs, such as scripts for running simulations. +To learn more about scripting in Ape, see [the scripting guide](./scripts.html). + +## Testing + +Use tests to verify your project. +You can test your project using the `ape test` command. +The `ape test` command comes with the core-plugin `ape-test`. +The `ape-test` plugin extends the popular python testing framework [pytest](https://docs.pytest.org/en/6.2.x/contents.html). +Testing is a complex topic; learn more about testing using Ape framework [here](./testing.html). diff --git a/v0.7.6/_sources/userguides/proxy.md.txt b/v0.7.6/_sources/userguides/proxy.md.txt new file mode 100644 index 0000000000..a4a9d023fe --- /dev/null +++ b/v0.7.6/_sources/userguides/proxy.md.txt @@ -0,0 +1,38 @@ +# Proxy Contracts + +Ape is able to detect proxy contracts so that it uses the target interface when interacting with a contract. +The following proxies are supporting in `ape-ethereum`: + +| Proxy Type | Short Description | +| ------------ | --------------------------------- | +| Minimal | EIP-1167 | +| Standard | EIP-1967 | +| Beacon | EIP-1967 | +| UUPS | EIP-1822 | +| Vyper | vyper \<0.2.9 create_forwarder_to | +| Clones | 0xsplits clones | +| Safe | Formerly Gnosis Safe | +| OpenZeppelin | OZ Upgradable | +| Delegate | EIP-897 | +| ZeroAge | A minimal proxy | +| SoladyPush0 | Uses PUSH0 | + +Proxy detection occurs when attempting to retrieve contract types in Ape. +Ape uses various sources to find contract types, such as explorer APIs. +See [this guide](./contracts.html) to learn more about initializing contracts. + +```python +from ape import Contract + +my_contract = Contract("0x...") +``` + +Ape will check the address you give it and detect if hosts a proxy contract. +In the case where it determines the address is a proxy contract, it resolves the address of the implementation (every proxy is different) and returns the interface for the implementation contract. +This allows you to still call methods as you normally do on proxy contracts. + +```python +# `my_contract` address points to a proxy with no methods in the interface +# However, Ape detected the implementation type and can find methods to call that way. +my_contract.my_method(sender=account) +``` diff --git a/v0.7.6/_sources/userguides/publishing.md.txt b/v0.7.6/_sources/userguides/publishing.md.txt new file mode 100644 index 0000000000..3cfe4d905c --- /dev/null +++ b/v0.7.6/_sources/userguides/publishing.md.txt @@ -0,0 +1,60 @@ +# Publishing + +Publishing smart-contract packages using Ape is influenced from [EIP-2678](https://eips.ethereum.org/EIPS/eip-2678) and uses the [ethpm-types](https://github.com/ApeWorX/ethpm-types) Python package extensively (which is also managed by the ApeWorX organization). +This guide exists to walk through the steps of publishing your project. + +## Compilation + +First, your project must compile. + +```bash +ape compile +``` + +To learn more about project compilation, follow [this guide](./compile.html). +Once your project has successfully compiled, you will have the start of your `PackageManifest` generated in your project's `.build/` directory. + +## Tracking Deployments + +If your project contains deployments that you wish to include in its package manifest, use the [track_deployment()](../methoddocs/managers.html#ape.managers.project.manager.ProjectManager.track_deployment) method. +Example: + +```python +from ape import accounts, project + +account = accounts.load("mainnet-account") + +# Assume your project has a contract named 'MyContract' with constructor that accepts argument '123'. +contract = project.MyContract.deploy(123, sender=account) +project.track_deployment(contract) +``` + +If the contract is already deployed, you can use [Contract](../methoddocs/ape.html#ape.Contract) to get a contract instance: + +```python +from ape import Contract, project + +contract = Contract("0x12c17f958d2ee523a2206206994597c13d831e34") +project.track_deployment(contract) +``` + +For more information on accessing contract instances, follow [this guide](./contracts.html). + +## Publishing to Explorer + +If you want to publish your contracts to an explorer, you can use the [publish_contract](../methoddocs/api.html#ape.explorers.ExplorerAPI.publish_contract) on the `ExplorerAPI`. + +```python +from ape import networks + +networks.provider.network.explorer.publish_contract("0x123...") +``` + +If you want to automatically publish the source code upon deployment, you can use the `publish=` kwarg on the `deploy` methods: + +```python +from ape import accounts, project + +account = accounts.load("") +account.deploy(project.MyContract, publish=True) +``` diff --git a/v0.7.6/_sources/userguides/quickstart.md.txt b/v0.7.6/_sources/userguides/quickstart.md.txt new file mode 100644 index 0000000000..c7719d82ff --- /dev/null +++ b/v0.7.6/_sources/userguides/quickstart.md.txt @@ -0,0 +1,2 @@ +```{include} ../../README.md +``` diff --git a/v0.7.6/_sources/userguides/scripts.md.txt b/v0.7.6/_sources/userguides/scripts.md.txt new file mode 100644 index 0000000000..b5bad41b88 --- /dev/null +++ b/v0.7.6/_sources/userguides/scripts.md.txt @@ -0,0 +1,144 @@ +# Scripting + +You can write scripts that run using the `ape run` command. +The `ape run` command will register and run Python files defined under the `scripts/` directory that do not start with an `_` underscore. + +## CLI Scripts + +Place scripts in your project's `scripts/` directory. +Follow [this guide](./projects.html) to learn more about the Ape project structure. +If your scripts take advantage of utilities from our [`ape.cli`](../methoddocs/cli.html#ape-cli) submodule, you can build a [Click](https://click.palletsprojects.com/) command line interface by defining a `click.Command` or `click.Group` object called `cli` in your file: +Follow [this guide](./clis.html) to learn more about what you can do with the utilities found in `ape.cli`. + +```python +import click + +@click.command() +def cli(): + print("Hello world!") +``` + +Assume we named the script `helloworld.py`. +To execute the script, run the following: + +```bash +ape run helloworld +``` + +You can also execute scripts in subdirectories. +For example, assuming we have script `/scripts/hello/helloworld.py`, we would execute it by running: + +```bash +ape run hello helloworld +``` + +**Note**: By default, `cli` scripts do not have [`ape.cli.network_option`](../methoddocs/cli.html?highlight=options#ape.cli.options.network_option) installed, giving you more flexibility in how you define your scripts. +However, you can add the `network_option` or `ConnectedProviderCommand` to your scripts by importing them from the `ape.cli` namespace: + +```python +import click +from ape.cli import ConnectedProviderCommand + + +@click.command(cls=ConnectedProviderCommand) +def cli(ecosystem, network): + click(f"You selected a provider on ecosystem '{ecosystem.name}' and {network.name}.") + +@click.command(cls=ConnectedProviderCommand) +def cli(network, provider): + click.echo(f"You are connected to network '{network.name}'.") + click.echo(provider.chain_id) + +@click.command(cls=ConnectedProviderCommand) +def cli_2(): + click.echo(f"Using any network-based argument is completely optional.") +``` + +Assume we saved this script as `shownet.py` and have the [ape-alchemy](https://github.com/ApeWorX/ape-alchemy) plugin installed. +Try changing the network using the `--network` option: + +```bash +ape run shownet --network ethereum:mainnet:alchemy +``` + +### Multi-network Scripting + +Because CLI-based scripts do not automatically connect to the provider before executing, they are ideal for multi-chain use-cases because they allow you to delay and manage the connection(s). +To learn more about how to control the network-context in Ape Pythonically, see [this guide](https://docs.apeworx.io/ape/stable/userguides/networks.html#provider-context-manager). + +Here is an example of a multi-chain script: + +```python +import click +from ape.cli import ape_cli_context + +@click.command() +@ape_cli_context() +def cli(cli_ctx): + # There is no connection yet at this point. + testnets = { + "ethereum": ["sepolia", "goerli"], + "polygon": ["mumbai"] + } + nm = cli_ctx.network_manager + + for ecosystem_name, networks in testnets.items(): + ecosystem = nm.ecosystems[ecosystem_name] + + for network_name in networks: + # Start making connections. + network = ecosystem.get_network(network_name) + + with network.use_provider("alchemy") as provider: + print(f"Connected to {provider.network_choice}") +``` + +Things to notice: + +1. It uses the CLI approach _without_ `cls=ConnectedProviderCommand`; thus it is not connected before it makes the first call to `.use_provider("alchemy")`. +2. It uses the `@ape_cli_context()` decorator to get access to Ape instances such as the `network_manager`. +3. Each network is only active during the context, thus allowing you to switch contexts and control chain-hopping in scripts. +4. **You do not need to call `.connect()` on the provider yourself!** + +## Main Method Scripts + +You can also use the main-method approach when defining scripts. +To do this, define a method named `main()` in your script: + +```python +def main(): + print("Hello world!") +``` + +**NOTE**: main-method scripts will always provide a `--network` option and run in a connected-context. +Therefore, they are not ideal for multi-chain scripts. +`main`-method scripts work best for quick, single-network, connection-based workflows. + +To demonstrate, use the following script: + +```python +from ape import networks +import click + +def main(): + ecosystem_name = networks.provider.network.ecosystem.name + network_name = networks.provider.network.name + provider_name = networks.provider.name + click.echo(f"You are connected to network '{ecosystem_name}:{network_name}:{provider_name}'.") +``` + +Suppose the name of the script is `foobar`, you can run it via: + +```shell +ape run foobar +``` + +Without specifying `--network`, the script with connect to your default network. +Else, specify the network using the `--network` flag: + +```shell +ape run foobar --network polygon:mumbai:alchemy +``` + +You can also change networks within the script using the `ProviderContextManager` (see examples in the CLI-script section above). +For multi-chain use-cases, we recommend sticking to the CLI based scripts to avoid the initial connection `main`-method scripts make. diff --git a/v0.7.6/_sources/userguides/testing.md.txt b/v0.7.6/_sources/userguides/testing.md.txt new file mode 100644 index 0000000000..5ce2e31c6b --- /dev/null +++ b/v0.7.6/_sources/userguides/testing.md.txt @@ -0,0 +1,697 @@ +# Testing + +Testing an ape project is important and easy. + +## Pytest + +Before learning how testing works in Ape, you should have an understanding of [the pytest framework](https://docs.pytest.org/en/7.4.x/) and its concepts such as fixtures, mark-decorators, and pytest plugins such as x-dist, pytest-mock, and pytest-cov. +Once you have learned about pytest, Ape testing becomes intuitive because it is built on top of pytest. +In fact, `ape-test` is itself a `pytest` plugin! + +You write your smart-contracts much like you write regular Python tests. + +## Test Structure + +Tests must be located in a project's `tests/` directory. Each **test file** must start with `test_` and have the `.py` extension, such as `test_my_contract.py`. +Each **test method** within the file must also start with `test_`. +The following is an example test: + +```python +def test_add(): + assert 1 + 1 == 2 +``` + +**NOTE**: `pytest` assumes the *actual* value is on the left and the *expected* value is on the right. + +## Test Pattern + +Tests are generally divisible into three parts: + +1. Set-up +2. Invocation +3. Assertion + +An example of the setup-phase would be creating a `pytest.fixture` that deploys our smart contract. +(To learn more about pytest fixtures in Ape, see the `Fixtures` section below!) +For now, what you need to know is that it's a piece of code that executes before the test runs, and it is decorated with a `@pytest.fixture`. + +The second phase is `Invocation`, which encompasses invoking the function we are testing. +The last phase, `Assertion`, requires enacting on the expectation about how the code should behave. +Let's assume there is an `authorized_method()` that requires the owner of the contract to make the transaction. +If the sender of the transaction is not the owner, the transaction will fail to complete and will revert. +We use `assert` statements in Ape (and `pytest`) to check that our expectations are correct. +A test passes if all the `assert` statements are `True` and it fails if any are `False`. + +This is an example of how that test may look: + +```python +import ape +import pytest + +# SETUP PHASE +# NOTE: More on fixtures is discussed in later sections of this guide! +@pytest.fixture +def owner(accounts): + return accounts[0] + +@pytest.fixture +def my_contract(owner, project): + return owner.deploy(project.MyContract) + +def test_authorization(my_contract, owner, not_owner): + # INVOCATION PHASE + my_contract.set_owner(sender=owner) + assert owner == my_contract.owner() + + # ASSERTION PHASE + with ape.reverts("!authorized"): + my_contract.authorized_method(sender=not_owner) +``` + +```{note} +Ape has built-in test and fixture isolation for all pytest scopes. +To disable isolation add the `--disable-isolation` flag when running `ape test` +``` + +## Fixtures + +Now that we have discussed the full flow of a test, let's dive deeper into the specific parts, starting with `pytest.fixtures`. + +You can define and use `pytest` fixtures in your Ape tests. +Learn more about fixtures from [this guide](https://docs.pytest.org/en/7.1.x/explanation/fixtures.html). +The syntax and functionalities of fixtures work exactly the same in Ape as it does with `pytest`. + +The `ape-test` plugin comes with fixtures you will likely want to use. +The following guide explains each fixture that comes with Ape. + +### accounts fixture + +You have access to test accounts. +These accounts are automatically funded, and you can use them to transact in your tests. +Access each [test account](../methoddocs/api.html?highlight=testaccount#ape.api.accounts.TestAccountAPI) by index from the `accounts` fixture: + +```python +def test_my_method(accounts): + owner = accounts[0] + receiver = accounts[1] +``` + +For code readability and sustainability, create your own fixtures using the `accounts` fixture: + +```python +import pytest + +@pytest.fixture +def owner(accounts): + return accounts[0] + + +@pytest.fixture +def receiver(accounts): + return accounts[1] + + +def test_my_method(owner, receiver): + ... +``` + +You can configure your accounts by changing the `mnemonic` or `number_of_accounts` settings in the `test` section of your `ape-config.yaml` file: + +```yaml +test: + mnemonic: test test test test test test test test test test test junk + number_of_accounts: 5 +``` + +If you are running tests against `anvil`, your generated test accounts may not correspond to the `anvil`'s default generated accounts despite using the same mnemonic. In such a case, you are able to specify a custom derivation path in `ape-config.yaml`: + +```yaml +test: + mnemonic: test test test test test test test test test test test junk + number_of_accounts: 5 + hd_path: "m/44'/60'/0'/0/{}" +``` + +If you are using a fork-provider, such as [Hardhat](https://github.com/ApeWorX/ape-hardhat), you can use impersonated accounts by accessing random addresses off the fixture: + +```python +@pytest.fixture +def vitalik(accounts): + return accounts["0xab5801a7d398351b8be11c439e05c5b3259aec9b"] +``` + +Using a fork-provider such as [Hardhat](https://github.com/ApeWorX/ape-hardhat), when using a contract instance as the sender in a transaction, it will be automatically impersonated: + +```python +def test_my_method(project, accounts): + contract = project.MyContract.deploy(sender=accounts[0]) + other_contract = project.OtherContract.deploy(sender=accounts[0]) + contract.my_method(sender=other_contract) +``` + +It has the same interface as the [TestAccountManager](../methoddocs/managers.html#ape.managers.accounts.TestAccountManager), (same as doing `accounts.test_accounts` in a script or the console). + +### chain fixture + +Use the chain fixture to access the connected provider or adjust blockchain settings. + +For example, increase the pending timestamp: + +```python +def test_in_future(chain): + chain.pending_timestamp += 86000 + assert "Something" + chain.pending_timestamp += 86000 + assert "Something else" +``` + +It has the same interface as the [ChainManager](../methoddocs/managers.html#ape.managers.chain.ChainManager). + +### networks fixture + +Use the `networks` fixture to change the active provider in tests. + +```python +def test_multi_chain(networks): + assert "Something" # Make assertion in root network + + # NOTE: Assume have ecosystem named "foo" with network "local" and provider "bar" + with networks.foo.local.use_provider("bar"): + assert "Something else" +``` + +It has the same interface as the [NetworkManager](../methoddocs/managers.html#ape.managers.networks.NetworkManager). + +### project fixture + +You also have access to the `project` you are testing. You will need this to deploy your contracts in your tests. + +```python +import pytest + + +@pytest.fixture +def owner(accounts): + return accounts[0] + + +@pytest.fixture +def my_contract(project, owner): + # ^ use the 'project' fixture from the 'ape-test' plugin + return owner.deploy(project.MyContract) +``` + +It has the same interface as the [ProjectManager](../methoddocs/managers.html#module-ape.managers.project.manager). + +### Contract fixture + +Use the `Contract` fixture to create contract instances: + +```python +@pytest.fixture +def my_contract(Contract): + return Contract(
    ) +``` + +It has the same interface as the [ChainManager](../methoddocs/managers.html#ape.managers.chain.ChainManager). + +## Ape testing commands + +```bash +ape test +``` + +To run a particular test: + +```bash +ape test test_my_contract +``` + +Use ape test `-I` to open the interactive mode at the point of exception. This allows the user to inspect the point of failure in your tests. + +```bash +ape test test_my_contract -I -s +``` + +## Test Providers + +Out-of-the-box, your tests run using the `eth-tester` provider, which comes bundled with ape. If you have `geth` installed, you can use the `ape-geth` plugin that also comes with ape. + +```bash +ape test --network ethereum:local:geth +``` + +Each testing plugin should work the same way. You will have access to the same test accounts. + +Another option for testing providers is the [ape-hardhat](https://github.com/ApeWorX/ape-hardhat) plugin, which does not come with `ape` but can be installed by including it in the `plugins` list in your `ape-config.yaml` file or manually installing it using the command: + +```bash +ape plugins install hardhat +``` + +## Advanced Testing Tips + +If you want to use sample projects, follow this link to [Ape Academy](https://github.com/ApeAcademy). + +``` +project # The root project directory +└── tests/ # Project tests folder, ran using the 'ape test' command to run all tests within the folder. + └── conftest.py # A file to define global variable for testing + └── test_accounts.py # A test file, if you want to ONLY run one test file you can use 'ape test test_accounts.py' command + └── test_mint.py # A test file +``` + +Here is an example of a test function from a sample [NFT project](https://github.com/ApeAcademy/ERC721) + +```python +def test_account_balance(project, owner, receiver, nft): + quantity = 1 + nft.mint(receiver, quantity, ["0"], value=nft.PRICE() * quantity, sender=owner) + actual = project.balanceOf(receiver) + expect = quantity + assert actual == expect +``` + +## Testing Transaction Failures + +Similar to `pytest.raises()`, you can use `ape.reverts()` to assert that contract transactions fail and revert. + +From our earlier example we can see this in action: + +```python +def test_authorization(my_contract, owner, not_owner): + my_contract.set_owner(sender=owner) + assert owner == my_contract.owner() + + with ape.reverts("!authorized"): + my_contract.authorized_method(sender=not_owner) +``` + +`reverts()` takes two optional parameters: + +### `expected_message` + +This is the expected revert reason given when the transaction fails. +If the message in the `ContractLogicError` raised by the transaction failure is empty or does not match the `expected_message`, then `ape.reverts()` will raise an `AssertionError`. + +You may also supply an `re.Pattern` object to assert on a message pattern, rather than on an exact match. + +```python +# Matches explicitly "foo" or "bar" +with ape.reverts(re.compile(r"^(foo|bar)$")): + ... +``` + +### `dev_message` + +This is the expected dev message corresponding to the line in the contract's source code where the error occurred. +These can be helpful in optimizing for gas usage and keeping revert reason strings shorter. + +Dev messages take the form of a comment in Vyper, and should be placed on the line that may cause a transaction revert: + +```python +assert x != 0 # dev: invalid value +``` + +Take for example: + +```python +# @version 0.3.7 + +@external +def check_value(_value: uint256) -> bool: + assert _value != 0 # dev: invalid value + return True +``` + +We can explicitly cause a transaction revert and check the failed line by supplying an expected `dev_message`: + +```python +def test_authorization(my_contract, owner): + with ape.reverts(dev_message="dev: invalid value"): + my_contract.check_value(sender=owner) +``` + +When the transaction reverts and `ContractLogicError` is raised, `ape.reverts()` will check the source contract to see if the failed line contains a message. + +There are a few scenarios where `AssertionError` will be raised when using `dev_message`: + +- If the line in the source contract has a different dev message or no dev message +- If the contract source cannot be obtained +- If the transaction trace cannot be obtained + +Because `dev_message` relies on transaction tracing to function, you must use a provider like [ape-hardhat](https://github.com/ApeWorX/ape-hardhat) when testing with `dev_message`. + +You may also supply an `re.Pattern` object to assert on a dev message pattern, rather than on an exact match. + +```python +# Matches explictly "dev: foo" or "dev: bar" +with ape.reverts(dev_message=re.compile(r"^dev: (foo|bar)$")): + ... +``` + +### Caveats + +#### Language Support + +As of `ape` version `0.5.6`, `dev_messages` assertions are available for contracts compiled with [ape-vyper](https://github.com/ApeWorX/ape-vyper), but not for those compiled with [ape-solidity](https://github.com/ApeWorX/ape-solidity) or [ape-cairo](https://github.com/ApeWorX/ape-cairo). + +#### Inlining + +Due to function inlining, the position of the `# dev: ...` message may sometimes be one line higher than expected: + +```python +@external +def foo(_x: decimal) -> decimal: # dev: correct location + return sqrt(_x) # dev: incorrect location +``` + +This typically only applies when trying to add dev messages to statements containing built-in function calls. + +#### Non-reentrant Functions + +Similarly, if you require dev assertions for non-reentrant functions you must be sure to leave the comment on the function that should not have reentry: + +```python +@internal +@nonreentrant('lock') +def _foo_internal(): # dev: correct location + pass + +@external +@nonreentrant('lock') +def foo(): + self._foo_internal() # dev: incorrect location +``` + +### Custom Errors + +As of Solidity 0.8.4, custom errors have been introduced to the ABI. +To make assertions on custom errors, you can use the types defined on your contracts. + +For example, if I have a contract called `MyContract.sol`: + +```solidity +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.4; + +error Unauthorized(address unauth_address); + +contract MyContract { + address payable owner = payable(msg.sender); + function withdraw() public { + if (msg.sender != owner) + revert Unauthorized(msg.sender); + owner.transfer(address(this).balance); + } +} +``` + +I can ensure unauthorized withdraws are disallowed by writing the following test: + +```python +import ape +import pytest + +@pytest.fixture +def owner(accounts): + return accounts[0] + +@pytest.fixture +def hacker(accounts): + return accounts[1] + +@pytest.fixture +def contract(owner, project): + return owner.deploy(project.MyContract) + +def test_unauthorized_withdraw(contract, hacker): + with ape.reverts(contract.Unauthorized, unauth_address=hacker.address): + contract.withdraw(sender=hacker) +``` + +You can also use custom error types from the contract container (from `ape.project` or the `project` fixture): + +```python +import ape + +def test_unauthorized(contract, hacker, project): + with ape.reverts(project.MyContract.Unauthorized, unauth_address=hacker.address): + contract.withdraw(sender=hacker) +``` + +You may need to use the container approach for asserting on custom errors that occur during failing `deploy` transactions because you won't have access to the contract instance yet. +Here is an example of what that may look like: + +```python +import ape + +def test_error_on_deploy(account, project): + with ape.reverts(project.Token.MyCustomError): + ape.project.HasError.deploy(sender=account) +``` + +Alternatively, you can attempt to use the address from the revert error to find the error type. +**NOTE**: The address will only exist for transactions that were published (e.g. not for failures during estimating gas), and this may only work on certain providers. + +```python +import ape + +def test_error_on_deploy(account): + # NOTE: We are using `as rev` here to capture the revert info + # so we can attempt to lookup the contract later. + with ape.reverts() as rev: + ape.project.HasError.deploy(sender=account) + + assert rev.value.address is not None, "Receipt never found, contract never cached" + + # Grab the cached instance using the error's address + # and assert the custom error this way. + contract = ape.Contract(rev.value.address) + assert isinstance(rev.value, contract.MyError) +``` + +## Multi-chain Testing + +The Ape framework supports connecting to alternative networks / providers in tests. + +To run an entire test using a specific network / provider combination, use the `use_network` pytest marker: + +```python +import pytest + + +@pytest.mark.use_network("fantom:local:test") +def test_my_fantom_test(chain): + assert chain.provider.network.ecosystem.name == "fantom" + + +@pytest.mark.use_network("ethereum:local:test") +def test_my_ethereum_test(chain): + assert chain.provider.network.ecosystem.name == "ethereum" +``` + +To switch networks mid-test, use the `networks` context-manager: + +```python +# Switch to Fantom mid test +def test_my_multichain_test(networks): + # The test starts in 1 ecosystem but switches to another + assert networks.provider.network.ecosystem.name == "ethereum" + + with networks.fantom.local.use_provider("test") as provider: + assert provider.network.ecosystem.name == "fantom" + + # You can also use the context manager like this: + with networks.parse_network_choice("fantom:local:test") as provider: + assert provider.network.ecosystem.name == "fantom" +``` + +You can also set the network context in a pytest fixture. +This is useful if certain fixtures must run in certain networks. + +```python +import pytest + + +@pytest.fixture +def stark_contract(networks, project): + with networks.parse_network_choice("starknet:local"): + yield project.MyStarknetContract.deploy() + + +def test_starknet_thing(stark_contract, stark_account): + # Uses the starknet connection via the stark_contract fixture + receipt = stark_contract.my_method(sender=stark_account) + assert not receipt.failed +``` + +When you exit a provider's context, Ape **does not** disconnect the provider. +When you re-enter that provider's context, Ape uses the previously-connected provider. +At the end of the tests, Ape disconnects all the providers. +Thus, you can enter and exit a provider's context as much as you need in tests. + +## Gas Reporting + +To include a gas report at the end of your tests, you can use the `--gas` flag. +**NOTE**: This feature requires using a provider with tracing support, such as [ape-hardhat](https://github.com/ApeWorX/ape-hardhat). + +```bash +ape test --network ethereum:local:hardhat --gas +``` + +At the end of test suite, you will see tables such as: + +```sh + FundMe Gas + + Method Times called Min. Max. Mean Median + ──────────────────────────────────────────────────────────────── + fund 8 57198 91398 82848 91398 + withdraw 2 28307 38679 33493 33493 + changeOnStatus 2 23827 45739 34783 34783 + getSecret 1 24564 24564 24564 24564 + + Transferring ETH Gas + + Method Times called Min. Max. Mean Median + ─────────────────────────────────────────────────────── + to:test0 2 2400 9100 5750 5750 + + TestContract Gas + + Method Times called Min. Max. Mean Median + ─────────────────────────────────────────────────────────── + setNumber 1 51021 51021 51021 51021 +``` + +The following demonstrates how to use the `ape-config.yaml` file to exclude contracts and / or methods from the gas report: + +```yaml +test: + gas: + exclude: + - method_name: DEBUG_* # Exclude all methods starting with `DEBUG_`. + - contract_name: MockToken # Exclude all methods in contract named `MockToken`. + - contract_name: PoolContract # Exclude methods starting with `reset_` in `PoolContract`. + method_name: reset_* +``` + +Similarly, you can exclude sources via the CLI option `--gas-exclude`. +The value `--gas-exclude` takes is a comma-separated list of colon-separated values representing the structure similar as above, except you must explicitly use `*` where meaning "all". +For example to exclude all methods starting with `DEBUG_`, you would do: + +```bash +ape test --gas --gas-exclude "*:DEBUG_*". +``` + +To exclude all methods in the `MockToken` contract, do: + +```bash +ape test --gas --gas-exclude MockToken +``` + +And finally, to exclude all methods starting with `reset_` in `PoolContract`, do: + +```bash +ape test --gas --gas-exclude "PoolContract:reset_*" +``` + +## Iterative Testing + +Ape has a set of flags that controls running your test suite locally in a "watch" mode, +which means watching for updates to files in your project and re-triggering the test suite. + +To enable this mode, run `ape test --watch` to set up this mode using the default settings. +While in this mode, any time a `.py` file (i.e. your tests) or smart contract source file +(i.e. any files that get compiled using your installed compiler plugins) is added, removed, +or changed, then the `ape test` task will be re-triggered, based on a polling interval. + +To exit this mode, press Ctrl+D (on Linux or macOS) to stop the execution and undo it. + +## Contract Coverage + +To get contract coverage, use the `--coverage` flag when running `ape test`: + +```shell +ape test --coverage +``` + +**NOTE**: Some types of coverage require using a provider that supports transaction tracing, such as `ape-hardhat` or `ape-foundry`. + +Afterwards, you should see a coverage report looking something like: + +```shell +============================================= Coverage Profile ============================================= + Contract Coverage + + Name Stmts Miss Cover Funcs + ───────────────────────────────────────────── + Contract.vy 7 1 85.71% 80.0% +``` + +To generate other coverage reports such as XML or HTML, configure it like so: + +```yaml +test: + coverage: + reports: + terminal: False # Disable the terminal table (True by default) + xml: True # Enable XML report (.build/coverage.xml) + html: True # Enable HTML report (.build/htmlcov) +``` + +To see a much more verbose coverage report, set the `terminal` field to a dictionary that includes `"verbose": true`: + +```yaml +test: + coverage: + reports: + terminal: + verbose: true # Show verbose coverage information in the terminal. +``` + +Then, you will see table outputs like this: + +```shell +===================================== Coverage Profile ======================================== + MyContract Coverage + + Func Stmts Miss Cover + ───────────────────────────────────────────────────── + __builtin__ 2 0 100.0% + _immutable_number 0 0 100.0% + _number 0 0 100.0% + foo_method() 1 0 100.0% + foo_method(uint256) 1 0 100.0% + foo_method(uint256,uint256) 3 0 100.0% + view_method 1 0 100.0% + + line=0.0%, func=0.0% +``` + +This is useful when trying to find the missing areas to cover. +The HTML report also supports `verbose: true` and it will show similar tables. + +**NOTE**: You may notice methods with zero statements. +One example of a method with zero statements may be from an auto-generated getter method for a public variable; certain versions of Vyper do not contain source mappings for these methods. +However, Ape will still check to see if this method has been called in your tests. +To get 100% coverage, you must call these methods in your tests. + +**NOTE**: Notice some methods use the full selector while others don't. +Methods that use the selector mean that their short name is shared with other methods. +This happens in Vyper from auto-generated kwarg-based methods. +Thus, the full selector is used to distinguish the methods in the coverage (and gas) reports. + +Much like gas reporting, you can also exclude contracts and methods from tracking coverage using your `ape-config.yaml` file. +The following demonstrates how to do this: + +```yaml +test: + coverage: + exclude: + - method_name: DEBUG_* # Exclude all methods starting with `DEBUG_`. + - contract_name: MockToken # Exclude all methods in contract named `MockToken`. + - contract_name: PoolContract # Exclude methods starting with `reset_` in `PoolContract`. + method_name: reset_* +``` diff --git a/v0.7.6/_sources/userguides/transactions.md.txt b/v0.7.6/_sources/userguides/transactions.md.txt new file mode 100644 index 0000000000..b0bceba996 --- /dev/null +++ b/v0.7.6/_sources/userguides/transactions.md.txt @@ -0,0 +1,286 @@ +# Making Transactions + +Regardless of how you are using `ape`, you will likely be making transactions. +There are various types of transactions you can make with `ape`. A simple example is deploying a contract. + +## Deployment + +Deploying a smart contract is a unique type of transaction where we don't necessarily care about the receipt as much +as we care about the contract instance. That is why the return value from +[the deploy method](../methoddocs/api.html?highlight=accountapi#ape.api.accounts.AccountAPI.deploy) is a +[ContractInstance](../methoddocs/contracts.html?highlight=contractinstance#ape.contracts.base.ContractInstance). + +The following example demonstrates a simple deployment script: + +```python +from ape import accounts, project + + +def deploy(): + account = accounts.load("MyAccount") + # Assume you have a contract named `MyContract` in your project's contracts folder. + return account.deploy(project.MyContract) +``` + +To get the receipt of a `deploy` transaction, use the [ContractInstance.receipt](../methoddocs/contracts.html#ape.contracts.base.ContractInstance.receipt) property: + +```python +from ape import accounts, project + +dev = accounts.load("dev") +contract = project.MyContract.deploy(sender=dev) + +# The receipt is available on the contract instance and has the expected sender. +receipt = contract.receipt +assert receipt.sender == dev +``` + +### Deployment from Ape Console + +Deploying from [ape console](./console.html) allows you to interact with a contract in real time. You can also use the `--network` flag to connect a live network. + +```bash +ape console --network ethereum:goerli:alchemy +``` + +This will launch an IPython shell: + +```python +In [1]: dev = accounts.load("dev") +In [2]: token = dev.deploy(project.Token) +In [3]: token.contract_method_defined_in_contract() +``` + +For an in depth tutorial on how to deploy, please visit [ApeAcademy](https://academy.apeworx.io/). + +## Dynamic-Fee Transactions + +Before [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559), all transactions used a `gas_price`. +After the London fork of Ethereum, the `gas_price` got broken up into two values, `max_fee` and `max_priority_fee`. +The `ape` framework supports both types of transactions. By default, transactions use the dynamic-fee model. +Making contract calls without specifying any additional `kwargs` will use a dynamic-fee transaction. + +Calling certain methods on a deployed-contract is one way to transact. + +```python +contract = deploy() # Example from above, that returns a contract instance. +contract.fundMyContract(value="1 gwei", sender=sender) # Assuming there is a method named 'fundMyContract' on MyContract. +``` + +In the example above, the call to `fundMyContract()` invokes a dynamic-fee transaction. +To have more control of the fee-values, you can specify the `max_fee`, the `max_priority_fee`, or both. + +```python +contract.fundMyContract(value="1 gwei", max_priority_fee="50 gwei", max_fee="100 gwei", sender=sender) +``` + +The `max_priority_fee` cannot exceed the `max_fee`, as the `max_fee` includes both the base fee and the priority fee. +The `max_priority_fee`, when omitted, defaults to the return value from the +[ProviderAPI.priority_fee](../methoddocs/api.html?highlight=accountapi#ape.api.providers.ProviderAPI.priority_fee) +method property. +The `max_fee`, when omitted, defaults to the `priority_fee` (which gets its default applied beforehand) plus the latest +the value returned from the +[ProviderAPI.base_fee](../methoddocs/api.html?highlight=accountapi#ape.api.providers.ProviderAPI.base_fee) method +property. + +## Static-Fee Transactions + +Static-fee transactions are the transactions that Ethereum used before the London-fork +(before [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559)). +**However, some applications may still require using static-fee transactions.** + +One way to use a static-fee transaction is by specifying the `gas_price` as a key-value argument: + +```python +contract.fundMyContract(value="1 gwei", gas_price="100 gwei", sender=sender) +``` + +**NOTE**: Miners prioritize static-fee transactions based on the highest `gas_price`. + +Another way to use a static-fee transaction (without having to provide `gas_price`) is to set the key-value +argument `type` equal to `0x00`. + +```python +contract.fundMyContract(value="1 gwei", type="0x0", sender=sender) +``` + +When declaring `type="0x0"` and _not_ specifying a `gas_price`, the `gas_price` gets set using the provider's estimation. + +## Transaction Logs + +In Ape, you can easily get all the events on a receipt. +Use the `.events` property to access the ([ContractLog](../methoddocs/types.html#ape.types.ContractLog)) objects. +Each object represents an event emitted from the call. + +```python +receipt = contract.fundMyContract(value="1 gwei", type="0x0", sender=sender) +print(receipt.events) +``` + +To only get specific log types, use the `decode_logs()` method and pass the event ABIs as arguments: + +```python +for log in receipt.decode_logs(contract.FooEvent.abi, contract.BarEvent.abi): + print(log.amount) # Assuming 'amount' is a property on the event. +``` + +You can also use the [ContractEvent.from_receipt(receipt)](../methoddocs/contracts.html?highlight=contractevent#ape.contracts.base.ContractEvent.from_receipt) method: + +```python +receipt = contract.fooMethod(value="1 gwei", type="0x0", sender=sender) +for log in contract.FooEvent.from_receipt(receipt): + print(log.amount) # Assuming 'amount' is a property on the event. +``` + +**NOTE**: If you have more than event with the same name in your contract type's ABI, you can access the events by using the [get_event_by_signature()](../methoddocs/contracts.html?highlight=contractinstance#ape.contracts.base.ContractInstance.get_event_by_signature) method: + +```python +event_type = contract.get_event_by_signature("FooEvent(uint256 bar, uint256 baz)") +receipt.decode_logs(event_type.abi) +``` + +Otherwise, you will get an `AttributeError`. + +## Transaction Acceptance Timeout + +**NOTE** For longer running scripts, you may need to increase the transaction acceptance timeout. +The default value is 2 minutes for live networks and 20 seconds for local networks. +In your `ape-config.yaml` file, add the following: + +```yaml +ethereum: + mainnet: + transaction_acceptance_timeout: 600 # 5 minutes +``` + +## Traces + +If you are using a provider that is able to fetch transaction traces, such as the [ape-hardhat](https://github.com/ApeWorX/ape-hardhat) provider, you can call the [`ReceiptAPI.show_trace()`](../methoddocs/api.html?highlight=receiptapi#ape.api.transactions.ReceiptAPI.show_trace) method. + +```python +from ape import accounts, project + +owner = accounts.load("acct") +contract = project.Contract.deploy(sender=owner) +receipt = contract.methodWithoutArguments() +receipt.show_trace() +``` + +**NOTE**: If your provider does not support traces, you will see a `NotImplementedError` saying that the method is not supported. + +The trace might look something like: + +```bash +Call trace for '0x43abb1fdadfdae68f84ce8cd2582af6ab02412f686ee2544aa998db662a5ef50' +txn.origin=0x1e59ce931B4CFea3fe4B875411e280e173cB7A9C +ContractA.methodWithoutArguments() -> 0x00..7a9c [469604 gas] +├── SYMBOL.supercluster(x=234444) -> [ +│ [23523523235235, 11111111111, 234444], +│ [ +│ 345345347789999991, +│ 99999998888882, +│ 345457847457457458457457457 +│ ], +│ [234444, 92222229999998888882, 3454], +│ [ +│ 111145345347789999991, +│ 333399998888882, +│ 234545457847457457458457457457 +│ ] +│ ] [461506 gas] +├── SYMBOL.methodB1(lolol="ice-cream", dynamo=345457847457457458457457457) [402067 gas] +│ ├── ContractC.getSomeList() -> [ +│ │ 3425311345134513461345134534531452345, +│ │ 111344445534535353, +│ │ 993453434534534534534977788884443333 +│ │ ] [370103 gas] +│ └── ContractC.methodC1( +│ windows95="simpler", +│ jamaica=345457847457457458457457457, +│ cardinal=ContractA +│ ) [363869 gas] +├── SYMBOL.callMe(blue=tx.origin) -> tx.origin [233432 gas] +├── SYMBOL.methodB2(trombone=tx.origin) [231951 gas] +│ ├── ContractC.paperwork(ContractA) -> ( +│ │ os="simpler", +│ │ country=345457847457457458457457457, +│ │ wings=ContractA +│ │ ) [227360 gas] +│ ├── ContractC.methodC1(windows95="simpler", jamaica=0, cardinal=ContractC) [222263 gas] +│ ├── ContractC.methodC2() [147236 gas] +│ └── ContractC.methodC2() [122016 gas] +├── ContractC.addressToValue(tx.origin) -> 0 [100305 gas] +├── SYMBOL.bandPractice(tx.origin) -> 0 [94270 gas] +├── SYMBOL.methodB1(lolol="lemondrop", dynamo=0) [92321 gas] +│ ├── ContractC.getSomeList() -> [ +│ │ 3425311345134513461345134534531452345, +│ │ 111344445534535353, +│ │ 993453434534534534534977788884443333 +│ │ ] [86501 gas] +│ └── ContractC.methodC1(windows95="simpler", jamaica=0, cardinal=ContractA) [82729 gas] +└── SYMBOL.methodB1(lolol="snitches_get_stiches", dynamo=111) [55252 gas] + ├── ContractC.getSomeList() -> [ + │ 3425311345134513461345134534531452345, + │ 111344445534535353, + │ 993453434534534534534977788884443333 + │ ] [52079 gas] + └── ContractC.methodC1(windows95="simpler", jamaica=111, cardinal=ContractA) [48306 gas] +``` + +Additionally, you can view the traces of other transactions on your network. + +```python +from ape import networks + +txn_hash = "0x053cba5c12172654d894f66d5670bab6215517a94189a9ffc09bc40a589ec04d" +receipt = networks.provider.get_receipt(txn_hash) +receipt.show_trace() +``` + +In Ape, you can also show the trace for a call. +Use the `show_trace=` kwarg on a contract call and Ape will display the trace before returning the data. + +```python +token.balanceOf(account, show_trace=True) +``` + +**NOTE**: This may not work on all providers, but it should work on common ones such as `ape-hardhat` or `ape-geth`. + +## Gas Reports + +To view the gas report of a transaction receipt, use the [`ReceiptAPI.show_gas_report()`](../methoddocs/api.html?highlight=receiptapi#ape.api.transactions.ReceiptAPI.show_gas_report) method: + +```python +from ape import networks + +txn_hash = "0x053cba5c12172654d894f66d5670bab6215517a94189a9ffc09bc40a589ec04d" +receipt = networks.provider.get_receipt(txn_hash) +receipt.show_gas_report() +``` + +It will output tables of contracts and methods with gas usages that look like this: + +```bash + DAI Gas + + Method Times called Min. Max. Mean Median + ──────────────────────────────────────────────────────────────── + balanceOf 4 1302 13028 1302 1302 + allowance 2 1377 1377 1337 1337 +│ approve 1 22414 22414 22414 22414 +│ burn 1 11946 11946 11946 11946 +│ mint 1 25845 25845 25845 25845 +``` + +## Estimate Gas Cost + +To estimate the gas cost on a transaction or call without sending it, use the `estimate_gas_cost()` method from the contract's transaction / call handler: +(Assume I have a contract instance named `contract_a` that has a method named `methodToCall`) + +```python +txn_cost = contract_a.myMutableMethod.estimate_gas_cost(1, sender=accounts.load("me")) +print(txn_cost) + +view_cost = contract_a.myViewMethod.estimate_gas_cost() +print(view_cost) +``` diff --git a/v0.7.6/_static/_sphinx_javascript_frameworks_compat.js b/v0.7.6/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 0000000000..81415803ec --- /dev/null +++ b/v0.7.6/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,123 @@ +/* Compatability shim for jQuery and underscores.js. + * + * Copyright Sphinx contributors + * Released under the two clause BSD licence + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/v0.7.6/_static/basic.css b/v0.7.6/_static/basic.css new file mode 100644 index 0000000000..7577acb1ad --- /dev/null +++ b/v0.7.6/_static/basic.css @@ -0,0 +1,903 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/v0.7.6/_static/css/badge_only.css b/v0.7.6/_static/css/badge_only.css new file mode 100644 index 0000000000..c718cee441 --- /dev/null +++ b/v0.7.6/_static/css/badge_only.css @@ -0,0 +1 @@ +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/v0.7.6/_static/css/theme.css b/v0.7.6/_static/css/theme.css new file mode 100644 index 0000000000..19a446a0e7 --- /dev/null +++ b/v0.7.6/_static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/v0.7.6/_static/custom.css b/v0.7.6/_static/custom.css new file mode 100644 index 0000000000..bea5d91c77 --- /dev/null +++ b/v0.7.6/_static/custom.css @@ -0,0 +1,311 @@ +@import url("https://fonts.cdnfonts.com/css/barlow"); + +html { + font-weight: 400; + font-family: "Barlow", sans-serif; + min-height: 100%; + background: rgb(244, 244, 244); + font-size: 17px; +} + +#version-picker-label { + color: #000000; + display: inline; + font-size: 16px; + + font-family: "Barlow", sans-serif; + font-weight: 600; + width: 100%; +} + +body { + font-weight: 400; + font-family: "Barlow", sans-serif; + min-height: 100%; + background: rgb(244, 244, 244); + font-size: 17px; +} + +p { + font-weight: 400; + font-family: "Barlow", sans-serif; + font-size: 18px; +} + +h1 { + font-size: 60px; + line-height: 54px; + font-weight: 600; + font-family: "Barlow", sans-serif; + text-transform: uppercase; + letter-spacing: -0.05em; + color: #000000; + padding: 0 !important; +} + +h2 { + font-size: 32px; + line-height: 32px; + font-family: "Barlow", sans-serif; + letter-spacing: -0.02em; + padding: 0; + color: #000000; +} + +h3 { + font-size: 24px; + line-height: 24px; + font-family: "Barlow", sans-serif; + letter-spacing: -0.05em; + font-weight: 300; + color: #000000; +} + +.wy-nav-content-wrap { + margin-left: 300px; + background: #fff; + min-height: 100%; + padding: 20px; +} + +.wy-side-scroll { + width: 320px; + background-color: #ffffff; + position: relative; + overflow-x: hidden; + overflow-y: scroll; + height: 100%; + padding: 20px; +} + +.wy-nav-top { + display: block; + background-color: rgb(255, 255, 255); + padding: 0.4045em 0.809em; + position: relative; + line-height: 50px; + text-align: center; + font-size: 100%; + font-family: "Barlow", sans-serif; + color: black; +} + +.wy-side-nav-search { + display: block; + width: 300px; + /*padding: 0.809em; + margin-bottom: 0.809em;*/ + z-index: 200; + background-color: #000000; + text-align: center; + color: #fafafa; +} + +.wy-menu-vertical header, +.wy-menu-vertical p.caption { + color: #000000; + font-family: "Barlow", sans-serif; + height: 32px; + line-height: 32px; + display: block; + font-weight: 700; + text-transform: uppercase; + font-size: 20px; + white-space: nowrap; + background-color: rgb(255, 255, 255); +} + +.wy-menu-vertical a { + line-height: 18px; + padding: 0.4045em 1.618em; + display: block; + position: relative; + font-size: 90%; + color: #000000; +} + +.rst-content code.literal, +.rst-content tt.literal { + color: #000000; +} + +footer { + color: rgb(0, 0, 0); + display: none; +} + +.wy-nav-top { + display: none; + background: #ffffff; + color: rgb(0, 0, 0); + padding: 0.4045em 0.809em; + position: relative; + line-height: 50px; + text-align: center; + font-size: 100%; +} + +.wy-nav-side { + position: fixed; + top: 0; + bottom: 0; + left: 0; + padding-bottom: 2em; + width: 300px; + overflow-x: hidden; + overflow-y: hidden; + min-height: 100%; + background-color: #ffffff; + z-index: 200; +} + +@media only screen and (min-device-width: 320px) and (max-device-width: 480px) { + .wy-nav-side { + display: none; + } + .wy-nav-side.shift { + display: block; + } + .wy-nav-content-wrap { + margin-left: 0; + background-color: #f2f3f8; + min-height: 100%; + } + .wy-nav-top { + display: block; + color: #fff; + padding: 0.4045em 0.809em; + position: relative; + line-height: 50px; + text-align: center; + font-size: 100%; + } + + .wy-side-nav-search { + display: block; + width: 300px; + /*padding: 0.809em;*/ + margin-bottom: 0.809em; + z-index: 200; + background-color: #000000; + text-align: center; + color: #fafafa; + } + + h1 { + font-size: 32px; + line-height: 32px; + font-family: "Barlow", sans-serif; + text-transform: uppercase; + letter-spacing: -0.05em; + color: #000000; + } + + h2 { + font-size: 34px; + line-height: 34px; + font-family: "Barlow", sans-serif; + letter-spacing: -0.05em; + } +} + +a { + color: rgb(93, 0, 255); + cursor: pointer; +} + +@media only screen and (min-device-width: 320px) and (max-device-width: 480px) { + a { + color: rgb(93, 0, 255); + cursor: pointer; + } +} +.toctree-l3 { + color: red; +} + +.caption-text { + color: black; + margin: -10px; + font-family: "Barlow", sans-serif; + font-weight: 600; + font-size: 24px; + padding: 0 !important; +} + +.reference { + color: rgb(93, 0, 255); +} + +.wy-menu-vertical li.current a { + background: #ff969600; +} + +.wy-menu-vertical a { + line-height: 28px; + font-weight: 400; + font-family: "Barlow", sans-serif; + padding: 0.4045em 1.618em; + display: block; + position: relative; + font-size: 100%; + color: #000000; +} + +.wy-menu-vertical a:hover { + line-height: 28px; + font-weight: 400; + font-family: "Barlow", sans-serif; + display: block; + position: relative; + font-size: 100%; + color: #000000; + background-color: rgba(247, 247, 247, 0.961); + cursor: pointer; +} + +.logo { + filter: invert(0.85); + width: 250px !important; + height: auto; + position: relative; + top: 20px !important; + left: 20px !important; + margin-left: -10px; + z-index: 240; +} + +.wy-side-nav-search { + display: block; + width: 300px; + + z-index: 200; + background-color: transparent; + text-align: center; + color: #fafafa; +} + +.wy-side-nav-search input[type="text"] { + width: 80%; + border-radius: 25px; + padding: 6px 12px; + border: 1.5em #000000; +} + +.wy-menu-vertical li.current a { + background: #ffffff; + border-style: none; +} + +.wy-menu-vertical li.current a:hover { + background-color: rgba(247, 247, 247, 0.961); + border-style: none; +} + +.wy-menu-vertical li.toctree-l2 button.toctree-expand { + display: none; +} + +.icon { + display: none; +} diff --git a/v0.7.6/_static/custom.js b/v0.7.6/_static/custom.js new file mode 100644 index 0000000000..cd46bcd82b --- /dev/null +++ b/v0.7.6/_static/custom.js @@ -0,0 +1,36 @@ +function getSelectedDocsVersion(pathname) { + if (!pathname) { + pathname = document.location.pathname + } + let parts = pathname.split('/').filter(item => item !== ""); + if (parts.length === 1) { + if (parts[0] === PROJECT) { + // '/ape/' (return 'stable') + return "stable"; + } else { + // '/latest/' (return 'latest') + return parts[0]; + } + } else if (parts[0] === PROJECT) { + // '/ape/latest/more' (return 'latest') + return parts[1]; + } else { + // '/latest/more' (return 'latest') + return parts[0] + } +} + +$(document).ready(function () { + // Version picker logic + let current = getSelectedDocsVersion(); + $("option[value='" + current + "']").attr("selected", "selected"); + $("select").change(function () { + if (this.value === "") { + return false; + } + let current = getSelectedDocsVersion(); + let selected = $(this).val(); + $("option[value='" + selected + "']").attr("selected", "selected"); + window.location = document.URL.replace(current, selected); + }); +}); diff --git a/v0.7.6/_static/doctools.js b/v0.7.6/_static/doctools.js new file mode 100644 index 0000000000..d06a71d751 --- /dev/null +++ b/v0.7.6/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/v0.7.6/_static/documentation_options.js b/v0.7.6/_static/documentation_options.js new file mode 100644 index 0000000000..b57ae3b839 --- /dev/null +++ b/v0.7.6/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/v0.7.6/_static/favicon.ico b/v0.7.6/_static/favicon.ico new file mode 100644 index 0000000000..05f17aa6ab Binary files /dev/null and b/v0.7.6/_static/favicon.ico differ diff --git a/v0.7.6/_static/file.png b/v0.7.6/_static/file.png new file mode 100644 index 0000000000..a858a410e4 Binary files /dev/null and b/v0.7.6/_static/file.png differ diff --git a/v0.7.6/_static/jquery.js b/v0.7.6/_static/jquery.js new file mode 100644 index 0000000000..c4c6022f29 --- /dev/null +++ b/v0.7.6/_static/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/v0.7.6/_static/js/html5shiv.min.js b/v0.7.6/_static/js/html5shiv.min.js new file mode 100644 index 0000000000..cd1c674f5e --- /dev/null +++ b/v0.7.6/_static/js/html5shiv.min.js @@ -0,0 +1,4 @@ +/** +* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/v0.7.6/_static/js/theme.js b/v0.7.6/_static/js/theme.js new file mode 100644 index 0000000000..1fddb6ee4a --- /dev/null +++ b/v0.7.6/_static/js/theme.js @@ -0,0 +1 @@ +!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
    "),n("table.docutils.footnote").wrap("
    "),n("table.docutils.citation").wrap("
    "),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/v0.7.6/_static/logo.gif b/v0.7.6/_static/logo.gif new file mode 100644 index 0000000000..b3a1bcc2d7 Binary files /dev/null and b/v0.7.6/_static/logo.gif differ diff --git a/v0.7.6/_static/minus.png b/v0.7.6/_static/minus.png new file mode 100644 index 0000000000..d96755fdaf Binary files /dev/null and b/v0.7.6/_static/minus.png differ diff --git a/v0.7.6/_static/plus.png b/v0.7.6/_static/plus.png new file mode 100644 index 0000000000..7107cec93a Binary files /dev/null and b/v0.7.6/_static/plus.png differ diff --git a/v0.7.6/_static/pygments.css b/v0.7.6/_static/pygments.css new file mode 100644 index 0000000000..84ab3030a9 --- /dev/null +++ b/v0.7.6/_static/pygments.css @@ -0,0 +1,75 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #008000; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #9C6500 } /* Comment.Preproc */ +.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #E40000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #008400 } /* Generic.Inserted */ +.highlight .go { color: #717171 } /* Generic.Output */ +.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #008000 } /* Keyword.Pseudo */ +.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #B00040 } /* Keyword.Type */ +.highlight .m { color: #666666 } /* Literal.Number */ +.highlight .s { color: #BA2121 } /* Literal.String */ +.highlight .na { color: #687822 } /* Name.Attribute */ +.highlight .nb { color: #008000 } /* Name.Builtin */ +.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ +.highlight .no { color: #880000 } /* Name.Constant */ +.highlight .nd { color: #AA22FF } /* Name.Decorator */ +.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0000FF } /* Name.Function */ +.highlight .nl { color: #767600 } /* Name.Label */ +.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #19177C } /* Name.Variable */ +.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #666666 } /* Literal.Number.Bin */ +.highlight .mf { color: #666666 } /* Literal.Number.Float */ +.highlight .mh { color: #666666 } /* Literal.Number.Hex */ +.highlight .mi { color: #666666 } /* Literal.Number.Integer */ +.highlight .mo { color: #666666 } /* Literal.Number.Oct */ +.highlight .sa { color: #BA2121 } /* Literal.String.Affix */ +.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ +.highlight .sc { color: #BA2121 } /* Literal.String.Char */ +.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ +.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #BA2121 } /* Literal.String.Double */ +.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ +.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ +.highlight .sx { color: #008000 } /* Literal.String.Other */ +.highlight .sr { color: #A45A77 } /* Literal.String.Regex */ +.highlight .s1 { color: #BA2121 } /* Literal.String.Single */ +.highlight .ss { color: #19177C } /* Literal.String.Symbol */ +.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0000FF } /* Name.Function.Magic */ +.highlight .vc { color: #19177C } /* Name.Variable.Class */ +.highlight .vg { color: #19177C } /* Name.Variable.Global */ +.highlight .vi { color: #19177C } /* Name.Variable.Instance */ +.highlight .vm { color: #19177C } /* Name.Variable.Magic */ +.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/v0.7.6/_static/searchtools.js b/v0.7.6/_static/searchtools.js new file mode 100644 index 0000000000..97d56a74d8 --- /dev/null +++ b/v0.7.6/_static/searchtools.js @@ -0,0 +1,566 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = docUrlRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = docUrlRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/v0.7.6/_static/sphinx_highlight.js b/v0.7.6/_static/sphinx_highlight.js new file mode 100644 index 0000000000..aae669d7ea --- /dev/null +++ b/v0.7.6/_static/sphinx_highlight.js @@ -0,0 +1,144 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + parent.insertBefore( + span, + parent.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(SphinxHighlight.highlightSearchWords); +_ready(SphinxHighlight.initEscapeListener); diff --git a/v0.7.6/commands/accounts.html b/v0.7.6/commands/accounts.html new file mode 100644 index 0000000000..44d462d721 --- /dev/null +++ b/v0.7.6/commands/accounts.html @@ -0,0 +1,429 @@ + + + + + + + accounts — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    accounts

    +

    Command-line helper for managing local accounts. You can unlock local accounts from +scripts or the console using the accounts.load() method.

    +
    accounts [OPTIONS] COMMAND [ARGS]...
    +
    +
    +
    +

    change-password

    +

    Change the password of an existing account

    +
    accounts change-password [OPTIONS] {}
    +
    +
    +

    Options

    +
    +
    +-v, --verbosity <LVL>
    +

    One of ERROR, WARNING, SUCCESS, INFO, or DEBUG

    +
    + +

    Arguments

    +
    +
    +ALIAS
    +

    Required argument

    +
    + +
    +
    +

    delete

    +

    Delete an existing account

    +
    accounts delete [OPTIONS] {}
    +
    +
    +

    Options

    +
    +
    +-v, --verbosity <LVL>
    +

    One of ERROR, WARNING, SUCCESS, INFO, or DEBUG

    +
    + +

    Arguments

    +
    +
    +ALIAS
    +

    Required argument

    +
    + +
    +
    +

    export

    +

    Export an account private key

    +
    accounts export [OPTIONS] {}
    +
    +
    +

    Options

    +
    +
    +-v, --verbosity <LVL>
    +

    One of ERROR, WARNING, SUCCESS, INFO, or DEBUG

    +
    + +

    Arguments

    +
    +
    +ALIAS
    +

    Required argument

    +
    + +
    +
    +

    generate

    +

    Create an account with a random mnemonic seed phrase

    +
    accounts generate [OPTIONS] ALIAS
    +
    +
    +

    Options

    +
    +
    +--hide-mnemonic
    +

    Hide the newly generated mnemonic from the terminal

    +
    + +
    +
    +--word-count <word_count>
    +

    Number of words to use to generate seed phrase

    +
    +
    Default:
    +

    12

    +
    +
    +
    + +
    +
    +--hd-path <custom_hd_path>
    +

    Specify an HD path for deriving seed phrase

    +
    +
    Default:
    +

    m/44'/60'/0'/0/0

    +
    +
    +
    + +
    +
    +-v, --verbosity <LVL>
    +

    One of ERROR, WARNING, SUCCESS, INFO, or DEBUG

    +
    + +

    Arguments

    +
    +
    +ALIAS
    +

    Required argument

    +
    + +
    +
    +

    import

    +

    Import an account by private key or seed phrase

    +
    accounts import [OPTIONS] ALIAS
    +
    +
    +

    Options

    +
    +
    +--use-mnemonic
    +

    Import a key from a mnemonic

    +
    + +
    +
    +--hd-path <custom_hd_path>
    +

    Account HD path to use when importing by mnemonic

    +
    +
    Default:
    +

    m/44'/60'/0'/0/0

    +
    +
    +
    + +
    +
    +-v, --verbosity <LVL>
    +

    One of ERROR, WARNING, SUCCESS, INFO, or DEBUG

    +
    + +

    Arguments

    +
    +
    +ALIAS
    +

    Required argument

    +
    + +
    +
    +

    list

    +

    List available local accounts

    +
    accounts list [OPTIONS]
    +
    +
    +

    Options

    +
    +
    +--all
    +

    Output accounts from all plugins

    +
    + +
    +
    +-v, --verbosity <LVL>
    +

    One of ERROR, WARNING, SUCCESS, INFO, or DEBUG

    +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/commands/compile.html b/v0.7.6/commands/compile.html new file mode 100644 index 0000000000..8e8d0ff5a9 --- /dev/null +++ b/v0.7.6/commands/compile.html @@ -0,0 +1,285 @@ + + + + + + + compile — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    compile

    +

    Compiles the manifest for this project and saves the results +back to the manifest.

    +

    Note that ape automatically recompiles any changed contracts each time +a project is loaded. You do not have to manually trigger a recompile.

    +
    compile [OPTIONS] [FILE_PATHS]...
    +
    +
    +

    Options

    +
    +
    +-f, --force
    +

    Force recompiling selected contracts

    +
    + +
    +
    +-s, --size
    +

    Show deployment bytecode size for all contracts

    +
    + +
    +
    +--include-dependencies
    +

    Also compile dependencies

    +
    + +
    +
    +-v, --verbosity <LVL>
    +

    One of ERROR, WARNING, SUCCESS, INFO, or DEBUG

    +
    + +

    Arguments

    +
    +
    +FILE_PATHS
    +

    Optional argument(s)

    +
    + +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/commands/console.html b/v0.7.6/commands/console.html new file mode 100644 index 0000000000..e460f0b270 --- /dev/null +++ b/v0.7.6/commands/console.html @@ -0,0 +1,263 @@ + + + + + + + console — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    console

    +
    +

    console

    +

    Opens a console for the local project.

    +
    console [OPTIONS]
    +
    +
    +

    Options

    +
    +
    +-v, --verbosity <LVL>
    +

    One of ERROR, WARNING, SUCCESS, INFO, or DEBUG

    +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/commands/init.html b/v0.7.6/commands/init.html new file mode 100644 index 0000000000..de042cf4ac --- /dev/null +++ b/v0.7.6/commands/init.html @@ -0,0 +1,266 @@ + + + + + + + init — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    init

    +

    ape init allows the user to create an ape project with +default folders and ape-config.yaml

    +

    From more information: +https://docs.apeworx.io/ape/stable/userguides/config.html

    +
    init [OPTIONS]
    +
    +
    +

    Options

    +
    +
    +-v, --verbosity <LVL>
    +

    One of ERROR, WARNING, SUCCESS, INFO, or DEBUG

    +
    + +
    +
    +--github <github-org/repo>
    +

    Clone a template from Github

    +
    + +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/commands/networks.html b/v0.7.6/commands/networks.html new file mode 100644 index 0000000000..9343f6a71b --- /dev/null +++ b/v0.7.6/commands/networks.html @@ -0,0 +1,337 @@ + + + + + + + networks — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    networks

    +

    Command-line helper for managing networks.

    +
    networks [OPTIONS] COMMAND [ARGS]...
    +
    +
    +
    +

    list

    +

    List all the registered ecosystems, networks, and providers.

    +
    networks list [OPTIONS]
    +
    +
    +

    Options

    +
    +
    +-v, --verbosity <LVL>
    +

    One of ERROR, WARNING, SUCCESS, INFO, or DEBUG

    +
    + +
    +
    +--format <output_format>
    +
    +
    Options:
    +

    TREE | YAML

    +
    +
    +
    + +
    +
    +--ecosystem <ecosystem_filter>
    +

    Filter the results by ecosystem

    +
    +
    Options:
    +

    ethereum

    +
    +
    +
    + +
    +
    +--network <network_filter>
    +

    Filter the results by network

    +
    +
    Options:
    +

    sepolia-fork | mainnet-fork | sepolia | mainnet | local | goerli | goerli-fork

    +
    +
    +
    + +
    +
    +--provider <provider_filter>
    +

    Filter the results by provider

    +
    +
    Options:
    +

    geth | test

    +
    +
    +
    + +
    +
    +

    run

    +

    Start a subprocess node as if running independently +and stream stdout and stderr.

    +
    networks run [OPTIONS]
    +
    +
    +

    Options

    +
    +
    +-v, --verbosity <LVL>
    +

    One of ERROR, WARNING, SUCCESS, INFO, or DEBUG

    +
    + +
    +
    +--network <network>
    +

    Override the default network and provider. (see ape networks list for options)

    +
    +
    Options:
    +

    :mainnet:geth | ethereum:mainnet:geth | :mainnet | ethereum:mainnet | :goerli:geth | ethereum:goerli:geth | :goerli | ethereum:goerli | :sepolia:geth | ethereum:sepolia:geth | :sepolia | ethereum:sepolia | ::test | :local:test | ethereum::test | ethereum:local:test | ::geth | :local:geth | ethereum::geth | ethereum:local:geth | :local | ethereum:local | ethereum

    +
    +
    +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/commands/plugins.html b/v0.7.6/commands/plugins.html new file mode 100644 index 0000000000..61185103a2 --- /dev/null +++ b/v0.7.6/commands/plugins.html @@ -0,0 +1,335 @@ + + + + + + + plugins — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    plugins

    +

    Command-line helper for managing plugins.

    +
    plugins [OPTIONS] COMMAND [ARGS]...
    +
    +
    +
    +

    install

    +

    Install plugins

    +
    plugins install [OPTIONS] PLUGIN-NAMES or path/to/project-dir
    +
    +
    +

    Options

    +
    +
    +-v, --verbosity <LVL>
    +

    One of ERROR, WARNING, SUCCESS, INFO, or DEBUG

    +
    + +
    +
    +-y, --yes
    +

    Don’t ask for confirmation to install the plugins

    +
    + +
    +
    +-U, --upgrade
    +

    Upgrade the plugin to the newest available version

    +
    + +

    Arguments

    +
    +
    +PLUGIN-NAMES or path/to/project-dir
    +

    Optional argument(s)

    +
    + +
    +
    +

    list

    +

    Display plugins

    +
    plugins list [OPTIONS]
    +
    +
    +

    Options

    +
    +
    +-a, --all
    +

    Display all plugins installed and available (including Core)

    +
    + +
    +
    +-v, --verbosity <LVL>
    +

    One of ERROR, WARNING, SUCCESS, INFO, or DEBUG

    +
    + +
    +
    +

    uninstall

    +

    Uninstall plugins

    +
    plugins uninstall [OPTIONS] PLUGIN-NAMES or path/to/project-dir
    +
    +
    +

    Options

    +
    +
    +-v, --verbosity <LVL>
    +

    One of ERROR, WARNING, SUCCESS, INFO, or DEBUG

    +
    + +
    +
    +-y, --yes
    +

    Don’t ask for confirmation to install the plugins

    +
    + +

    Arguments

    +
    +
    +PLUGIN-NAMES or path/to/project-dir
    +

    Optional argument(s)

    +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/commands/pm.html b/v0.7.6/commands/pm.html new file mode 100644 index 0000000000..8f8837da59 --- /dev/null +++ b/v0.7.6/commands/pm.html @@ -0,0 +1,397 @@ + + + + + + + pm — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    pm

    +

    Package management tools

    +
    pm [OPTIONS] COMMAND [ARGS]...
    +
    +
    +
    +

    compile

    +

    Compile a package

    +
    pm compile [OPTIONS] [NAME]
    +
    +
    +

    Options

    +
    +
    +-v, --verbosity <LVL>
    +

    One of ERROR, WARNING, SUCCESS, INFO, or DEBUG

    +
    + +
    +
    +--version <VERSION>
    +

    The dependency version

    +
    + +
    +
    +-f, --force
    +

    Force a re-compile

    +
    + +

    Arguments

    +
    +
    +NAME
    +

    Optional argument

    +
    + +
    +
    +

    install

    +

    Download and cache packages

    +
    pm install [OPTIONS] [PACKAGE]
    +
    +
    +

    Options

    +
    +
    +-v, --verbosity <LVL>
    +

    One of ERROR, WARNING, SUCCESS, INFO, or DEBUG

    +
    + +
    +
    +--name <NAME>
    +

    The name of the dependency

    +
    + +
    +
    +--version <VERSION>
    +

    The dependency’s version

    +
    + +
    +
    +--ref <REF>
    +

    A reference flag, used for GitHub branches or tags instead of version

    +
    + +
    +
    +-f, --force
    +

    Force a re-install

    +
    + +

    Arguments

    +
    +
    +PACKAGE
    +

    Optional argument

    +
    + +
    +
    +

    list

    +

    List installed packages

    +
    pm list [OPTIONS]
    +
    +
    +

    Options

    +
    +
    +-v, --verbosity <LVL>
    +

    One of ERROR, WARNING, SUCCESS, INFO, or DEBUG

    +
    + +
    +
    +--all
    +

    Include packages not referenced by the local project

    +
    + +
    +
    +

    remove

    +

    Remove a package

    +

    This command removes a package from the installed packages.

    +

    If specific versions are provided, only those versions of the package will be +removed. If no versions are provided, the command will prompt you to choose +versions to remove. You can also choose to remove all versions of the package.

    +

    Examples:

    +
      +
    • Remove specific versions: ape pm remove <PackageName> “1.0.0” “2.0.0”

    • +
    • Prompt to choose versions: ape pm remove <PackageName>

    • +
    • Remove all versions: ape pm remove <PackageName> -y

    • +
    +
    pm remove [OPTIONS] PACKAGE [VERSIONS]...
    +
    +
    +

    Options

    +
    +
    +-v, --verbosity <LVL>
    +

    One of ERROR, WARNING, SUCCESS, INFO, or DEBUG

    +
    + +
    +
    +-y, --yes
    +

    Automatically confirm the removal of the package(s)

    +
    + +

    Arguments

    +
    +
    +PACKAGE
    +

    Required argument

    +
    + +
    +
    +VERSIONS
    +

    Optional argument(s)

    +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/commands/run.html b/v0.7.6/commands/run.html new file mode 100644 index 0000000000..de8d153f43 --- /dev/null +++ b/v0.7.6/commands/run.html @@ -0,0 +1,284 @@ + + + + + + + run — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    run

    +
    +

    run

    +

    Run scripts from the “scripts/” folder of a project. A script must either define a main() +method, or define a command named cli that is a click.Command or click.Group object. +Scripts with only a main() method will be called with a network option given to the command. +Scripts with a cli command should import any mix-ins necessary to operate from the +ape.cli package.

    +
    run [OPTIONS] COMMAND [ARGS]...
    +
    +
    +

    Options

    +
    +
    +-I, --interactive
    +

    Drop into interactive console session after running

    +
    + +
    +

    update_rpc

    +

    Run ‘scripts/update_rpc.py:main’

    +
    run update_rpc [OPTIONS]
    +
    +
    +

    Options

    +
    +
    +-v, --verbosity <LVL>
    +

    One of ERROR, WARNING, SUCCESS, INFO, or DEBUG

    +
    + +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/commands/test.html b/v0.7.6/commands/test.html new file mode 100644 index 0000000000..d64f0090f1 --- /dev/null +++ b/v0.7.6/commands/test.html @@ -0,0 +1,282 @@ + + + + + + + test — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    test

    +

    Launches pytest and runs the tests for a project

    +
    test [OPTIONS] [PYTEST_ARGS]...
    +
    +
    +

    Options

    +
    +
    +-v, --verbosity <LVL>
    +

    One of ERROR, WARNING, SUCCESS, INFO, or DEBUG

    +
    + +
    +
    +-w, --watch
    +

    Watch for changes to project files and re-run the test suite with the given options.

    +
    + +
    +
    +--watch-folders <watch_folders>
    +

    Folders to watch for changes using ape test –watch. Defaults to contracts/ and tests/

    +
    + +
    +
    +--watch-delay <watch_delay>
    +

    Delay between polling cycles for ape test –watch. Defaults to 0.5 seconds.

    +
    + +

    Arguments

    +
    +
    +PYTEST_ARGS
    +

    Optional argument(s)

    +
    + +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/genindex.html b/v0.7.6/genindex.html new file mode 100644 index 0000000000..ab3809ea18 --- /dev/null +++ b/v0.7.6/genindex.html @@ -0,0 +1,3113 @@ + + + + + + Index — ape documentation + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + + +

    Index

    + +
    + Symbols + | _ + | A + | B + | C + | D + | E + | F + | G + | H + | I + | J + | L + | M + | N + | O + | P + | Q + | R + | S + | T + | U + | V + | W + | Y + +
    +

    Symbols

    + + + +
    + +

    _

    + + + +
    + +

    A

    + + + +
    + +

    B

    + + + +
    + +

    C

    + + + +
    + +

    D

    + + + +
    + +

    E

    + + + +
    + +

    F

    + + + +
    + +

    G

    + + + +
    + +

    H

    + + + +
    + +

    I

    + + + +
    + +

    J

    + + + +
    + +

    L

    + + + +
    + +

    M

    + + +
    + +

    N

    + + + +
    + +

    O

    + + + +
    + +

    P

    + + + +
    + +

    Q

    + + + +
    + +

    R

    + + + +
    + +

    S

    + + + +
    + +

    T

    + + + +
    + +

    U

    + + + +
    + +

    V

    + + + +
    + +

    W

    + + +
    + +

    Y

    + + +
    + + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/index.html b/v0.7.6/index.html new file mode 100644 index 0000000000..9382bcfe49 --- /dev/null +++ b/v0.7.6/index.html @@ -0,0 +1,296 @@ + + + + + + + Ape-Docs — ape documentation + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    + + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/methoddocs/ape.html b/v0.7.6/methoddocs/ape.html new file mode 100644 index 0000000000..0f8e58f0ec --- /dev/null +++ b/v0.7.6/methoddocs/ape.html @@ -0,0 +1,322 @@ + + + + + + + ape — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    ape

    +
    +
    +ape.Contract(address: str | ChecksumAddress, contract_type: ContractType | None = None, txn_hash: str | None = None, abi: List[ConstructorABI | FallbackABI | ReceiveABI | MethodABI | EventABI | ErrorABI | StructABI | UnprocessedABI] | Dict | str | Path | None = None) ContractInstance
    +

    User-facing class for instantiating contracts.

    +
    + +
    +
    +ape.Project
    +

    alias of ProjectManager

    +
    + +
    +
    +ape.accounts = []
    +

    Manages accounts for the current project. See ape.managers.accounts.AccountManager.

    +
    + +
    +
    +ape.chain = <ChainManager (disconnected)>
    +

    The current connected blockchain; requires an active provider. +Useful for development purposes, such as controlling the state of the blockchain. +Also handy for querying data about the chain and managing local caches.

    +
    + +
    +
    +ape.compilers = <CompilerManager len(registered_compilers)=1>
    +

    Manages compilers for the current project. See +ape.managers.compilers.CompilerManager.

    +
    + +
    +
    +ape.config = <ConfigManager project=ape>
    +

    The active configs for the current project. See ape.managers.config.ConfigManager.

    +
    + +
    +
    +ape.convert(value: Any, type: Type | Tuple | List) Any
    +

    Conversion utility function. See ape.managers.converters.ConversionManager.

    +
    + +
    +
    +ape.networks = <NetworkManager>
    +

    Manages the networks for the current project. See +ape.managers.networks.NetworkManager.

    +
    + +
    +
    +ape.project = <ape.managers.project.manager.ProjectManager object>
    +

    The currently active project. See ape.managers.project.ProjectManager.

    +
    + +
    +
    +ape.reverts
    +

    Catch and expect contract logic reverts. Resembles pytest.raises().

    +
    + +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/methoddocs/api.html b/v0.7.6/methoddocs/api.html new file mode 100644 index 0000000000..2f196eb6f9 --- /dev/null +++ b/v0.7.6/methoddocs/api.html @@ -0,0 +1,3238 @@ + + + + + + + ape.api — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    ape.api

    +
    +

    Accounts

    +
    +
    +class ape.api.accounts.AccountAPI
    +

    Bases: BaseInterfaceModel, BaseAddress

    +

    An API class representing an account.

    +
    +
    +__dir__() List[str]
    +

    Display methods to IPython on a.[TAB] tab completion.

    +
    +
    Returns:
    +

    Method names that IPython uses for tab completion.

    +
    +
    Return type:
    +

    List[str]

    +
    +
    +
    + +
    +
    +property alias: str | None
    +

    A shortened-name for quicker access to the account.

    +
    + +
    +
    +call(txn: TransactionAPI, send_everything: bool = False, private: bool = False, **signer_options) ReceiptAPI
    +

    Make a transaction call.

    +
    +
    Raises:
    +
      +
    • AccountsError – When the nonce is invalid or the sender does + not have enough funds.

    • +
    • TransactionError – When the required confirmations are negative.

    • +
    • SignatureError – When the user does not sign the transaction.

    • +
    • APINotImplementedError – When setting private=True and using + a provider that does not support private transactions.

    • +
    +
    +
    Parameters:
    +
      +
    • txn (TransactionAPI) – An invoke-transaction.

    • +
    • send_everything (bool) – True will send the difference from balance and fee. +Defaults to False.

    • +
    • private (bool) – True will use the +send_private_transaction() method.

    • +
    • **signer_options – Additional kwargs given to the signer to modify the signing operation.

    • +
    +
    +
    Returns:
    +

    ReceiptAPI

    +
    +
    +
    + +
    +
    +check_signature(data: SignableMessage | TransactionAPI | str | EIP712Message | int, signature: MessageSignature | None = None) bool
    +

    Verify a message or transaction was signed by this account.

    +
    +
    Parameters:
    +
      +
    • data (Union[SignableMessage, TransactionAPI]) – # noqa: E501 +The message or transaction to verify.

    • +
    • signature (Optional[MessageSignature]) – The signature to check. Defaults to None and is not needed when the first +argument is a transaction class.

    • +
    +
    +
    Returns:
    +

    True if the data was signed by this account. False otherwise.

    +
    +
    Return type:
    +

    bool

    +
    +
    +
    + +
    +
    +declare(contract: ContractContainer, *args, **kwargs) ReceiptAPI
    +

    Deploy the “blueprint” of a contract type. For EVM providers, this likely means +using EIP-5202, which is implemented +in the core ape-ethereum plugin.

    +
    +
    Parameters:
    +

    contract (ContractContainer) – The contract container +to declare.

    +
    +
    Returns:
    +

    The receipt of the declare transaction.

    +
    +
    Return type:
    +

    ReceiptAPI

    +
    +
    +
    + +
    +
    +deploy(contract: ContractContainer, *args, publish: bool = False, **kwargs) ContractInstance
    +

    Create a smart contract on the blockchain. The smart contract must compile before +deploying and a provider must be active.

    +
    +
    Parameters:
    +
      +
    • contract (ContractContainer) – The type of contract to +deploy.

    • +
    • publish (bool) – Set to True to attempt explorer contract verification. +Defaults to False.

    • +
    +
    +
    Returns:
    +

    An instance of the deployed contract.

    +
    +
    Return type:
    +

    ContractInstance

    +
    +
    +
    + +
    +
    +prepare_transaction(txn: TransactionAPI) TransactionAPI
    +

    Set default values on a transaction.

    +
    +
    Raises:
    +
      +
    • AccountsError – When the account cannot afford the transaction + or the nonce is invalid.

    • +
    • TransactionError – When given negative required confirmations.

    • +
    +
    +
    Parameters:
    +

    txn (TransactionAPI) – The transaction to prepare.

    +
    +
    Returns:
    +

    TransactionAPI

    +
    +
    +
    + +
    +
    +abstract sign_message(msg: Any, **signer_options) MessageSignature | None
    +

    Sign a message.

    +
    +
    Parameters:
    +
      +
    • msg (Any) – The message to sign. Account plugins can handle various types of messages. +For example, KeyfileAccount can handle +SignableMessage, str, int, and bytes. +See these +docs # noqa: E501 +for more type information on the SignableMessage type.

    • +
    • **signer_options – Additional kwargs given to the signer to modify the signing operation.

    • +
    +
    +
    Returns:
    +

    The signature corresponding to the message.

    +
    +
    Return type:
    +

    MessageSignature (optional)

    +
    +
    +
    + +
    +
    +abstract sign_transaction(txn: TransactionAPI, **signer_options) TransactionAPI | None
    +

    Sign a transaction.

    +
    +
    Parameters:
    +
      +
    • txn (TransactionAPI) – The transaction to sign.

    • +
    • **signer_options – Additional kwargs given to the signer to modify the signing operation.

    • +
    +
    +
    Returns:
    +

    +
    A signed transaction.

    The TransactionAPI returned by this method may not correspond to txn given as +input, however returning a properly-formatted transaction here is meant to be executed. +Returns None if the account does not have a transaction it wishes to execute.

    +
    +
    +

    +
    +
    Return type:
    +

    TransactionAPI (optional)

    +
    +
    +
    + +
    +
    +transfer(account: str | ChecksumAddress | BaseAddress, value: str | int | None = None, data: bytes | str | None = None, private: bool = False, **kwargs) ReceiptAPI
    +

    Send funds to an account.

    +
    +
    Raises:
    +

    APINotImplementedError – When setting private=True + and using a provider that does not support private transactions.

    +
    +
    Parameters:
    +
      +
    • account (Union[str, AddressType, BaseAddress]) – The receiver of the funds.

    • +
    • value (Optional[Union[str, int]]) – The amount to send.

    • +
    • data (Optional[Union[bytes, str]]) – Extra data to include in the transaction.

    • +
    • private (bool) – True asks the provider to make the transaction +private. For example, EVM providers typically use the RPC +eth_sendPrivateTransaction to achieve this. Local providers may ignore +this value.

    • +
    +
    +
    Returns:
    +

    ReceiptAPI

    +
    +
    +
    + +
    + +
    +
    +class ape.api.accounts.AccountContainerAPI(*, data_folder: Path, account_type: Type[AccountAPI])
    +

    Bases: BaseInterfaceModel

    +

    An API class representing a collection of AccountAPI +instances.

    +
    +
    +__contains__(address: ChecksumAddress) bool
    +

    Check if the address is an existing account in ape.

    +
    +
    Raises:
    +

    IndexError – When the given account address is not in this container.

    +
    +
    Parameters:
    +

    address (AddressType) – An account address.

    +
    +
    Returns:
    +

    True if ape manages the account with the given address.

    +
    +
    Return type:
    +

    bool

    +
    +
    +
    + +
    +
    +__delitem__(address: ChecksumAddress)
    +

    Delete an account.

    +
    +
    Raises:
    +

    NotImplementError – When not overridden within a plugin.

    +
    +
    Parameters:
    +

    address (AddressType) – The address of the account to delete.

    +
    +
    +
    + +
    +
    +__getitem__(address: ChecksumAddress) AccountAPI
    +

    Get an account by address.

    +
    +
    Parameters:
    +

    address (AddressType) – The address to get. The type is an alias to +ChecksumAddress. # noqa: E501

    +
    +
    Raises:
    +

    IndexError – When there is no local account with the given address.

    +
    +
    Returns:
    +

    AccountAPI

    +
    +
    +
    + +
    +
    +abstract __len__() int
    +

    Number of accounts.

    +
    + +
    +
    +abstract property accounts: Iterator[AccountAPI]
    +

    Iterate over all accounts.

    +
    +
    Returns:
    +

    Iterator[AccountAPI]

    +
    +
    +
    + +
    +
    +abstract property aliases: Iterator[str]
    +

    Iterate over all available aliases.

    +
    +
    Returns:
    +

    Iterator[str]

    +
    +
    +
    + +
    +
    +append(account: AccountAPI)
    +

    Add an account to the container.

    +
    +
    Raises:
    +

    AccountsError – When the account is already in the container.

    +
    +
    Parameters:
    +

    account (AccountAPI) – The account to add.

    +
    +
    +
    + +
    +
    +remove(account: AccountAPI)
    +

    Delete an account.

    +
    +
    Raises:
    +

    AccountsError – When the account is not known to ape.

    +
    +
    Parameters:
    +

    account (AccountAPI) – The account to remove.

    +
    +
    +
    + +
    + +
    +
    +class ape.api.accounts.ImpersonatedAccount(*, raw_address: ChecksumAddress)
    +

    Bases: AccountAPI

    +

    An account to use that does not require signing.

    +
    +
    +property address: ChecksumAddress
    +

    The address of this account. Subclasses must override and provide this value.

    +
    + +
    +
    +call(txn: TransactionAPI, send_everything: bool = False, private: bool = False, **kwargs) ReceiptAPI
    +

    Make a transaction call.

    +
    +
    Raises:
    +
      +
    • AccountsError – When the nonce is invalid or the sender does + not have enough funds.

    • +
    • TransactionError – When the required confirmations are negative.

    • +
    • SignatureError – When the user does not sign the transaction.

    • +
    • APINotImplementedError – When setting private=True and using + a provider that does not support private transactions.

    • +
    +
    +
    Parameters:
    +
      +
    • txn (TransactionAPI) – An invoke-transaction.

    • +
    • send_everything (bool) – True will send the difference from balance and fee. +Defaults to False.

    • +
    • private (bool) – True will use the +send_private_transaction() method.

    • +
    • **signer_options – Additional kwargs given to the signer to modify the signing operation.

    • +
    +
    +
    Returns:
    +

    ReceiptAPI

    +
    +
    +
    + +
    +
    +sign_message(msg: Any, **signer_options) MessageSignature | None
    +

    Sign a message.

    +
    +
    Parameters:
    +
      +
    • msg (Any) – The message to sign. Account plugins can handle various types of messages. +For example, KeyfileAccount can handle +SignableMessage, str, int, and bytes. +See these +docs # noqa: E501 +for more type information on the SignableMessage type.

    • +
    • **signer_options – Additional kwargs given to the signer to modify the signing operation.

    • +
    +
    +
    Returns:
    +

    The signature corresponding to the message.

    +
    +
    Return type:
    +

    MessageSignature (optional)

    +
    +
    +
    + +
    +
    +sign_transaction(txn: TransactionAPI, **signer_options) TransactionAPI | None
    +

    Sign a transaction.

    +
    +
    Parameters:
    +
      +
    • txn (TransactionAPI) – The transaction to sign.

    • +
    • **signer_options – Additional kwargs given to the signer to modify the signing operation.

    • +
    +
    +
    Returns:
    +

    +
    A signed transaction.

    The TransactionAPI returned by this method may not correspond to txn given as +input, however returning a properly-formatted transaction here is meant to be executed. +Returns None if the account does not have a transaction it wishes to execute.

    +
    +
    +

    +
    +
    Return type:
    +

    TransactionAPI (optional)

    +
    +
    +
    + +
    + +
    +
    +class ape.api.accounts.TestAccountAPI
    +

    Bases: AccountAPI

    +

    Test accounts for ape test (such accounts that use +GeneratedDevAccounts) should implement this API +instead of AccountAPI directly. This is how they show up in the accounts test fixture.

    +
    + +
    +
    +class ape.api.accounts.TestAccountContainerAPI(*, data_folder: Path, account_type: Type[AccountAPI])
    +

    Bases: AccountContainerAPI

    +

    Test account containers for ape test (such containers that generate accounts using +GeneratedDevAccounts) should implement this API instead of +AccountContainerAPI directly. This is how they show up in the accounts test fixture.

    +
    +
    +abstract generate_account() TestAccountAPI
    +

    Generate a new test account

    +
    + +
    + +
    +
    +

    Address

    +
    +
    +class ape.api.address.Address(address: ChecksumAddress)
    +

    Bases: BaseAddress

    +

    A generic blockchain address.

    +

    Typically, this is used when we do not know the contract type at a given address, +or to refer to an EOA the user doesn’t personally control.

    +
    +
    +property address: ChecksumAddress
    +

    The raw address type.

    +
    +
    Returns:
    +

    An alias to +ChecksumAddress. # noqa: E501

    +
    +
    Return type:
    +

    AddressType

    +
    +
    +
    + +
    + +
    +
    +class ape.api.address.BaseAddress
    +

    Bases: BaseInterface

    +

    A base address API class. All account-types subclass this type.

    +
    +
    +abstract property address: ChecksumAddress
    +

    The address of this account. Subclasses must override and provide this value.

    +
    + +
    +
    +property balance: int
    +

    The total balance of the account.

    +
    + +
    +
    +property code: str | bytes | HexBytes
    +

    The raw bytes of the smart-contract code at the address.

    +
    + +
    +
    +property codesize: int
    +

    The number of bytes in the smart contract.

    +
    + +
    +
    +property history: AccountHistory
    +

    The list of transactions that this account has made on the current chain.

    +
    + +
    +
    +property is_contract: bool
    +

    True when there is code associated with the address.

    +
    + +
    +
    +property nonce: int
    +

    The number of transactions associated with the address.

    +
    + +
    + +
    +
    +

    Compiler

    +
    +
    +class ape.api.compiler.CompilerAPI(*, compiler_settings: Dict = {})
    +

    Bases: BaseInterfaceModel

    +

    Compiler plugins, such as for languages like +Solidity or +Vyper, implement this API.

    +

    See the repository for the ape-solidity plugin or +the ape-vyper plugin as example implementations of +this API.

    +
    +
    +abstract compile(contract_filepaths: Sequence[Path], base_path: Path | None) List[ContractType]
    +

    Compile the given source files. All compiler plugins must implement this function.

    +
    +
    Parameters:
    +
      +
    • contract_filepaths (Sequence[pathlib.Path]) – A list of source file paths to compile.

    • +
    • base_path (Optional[pathlib.Path]) – Optionally provide the base path, such as the +project contracts/ directory. Defaults to None. When using in a project +via ape compile, gets set to the project’s contracts/ directory.

    • +
    +
    +
    Returns:
    +

    List[ContractType]

    +
    +
    +
    + +
    +
    +compiler_settings: Dict
    +

    Adhoc compiler settings.

    +
    + +
    +
    +property config: PluginConfig
    +

    The provider’s configuration.

    +
    + +
    +
    +enrich_error(err: ContractLogicError) ContractLogicError
    +

    Enrich a contract logic error using compiler information, such as +known PC locations for compiler runtime errors.

    +
    +
    Parameters:
    +

    err (ContractLogicError) – The exception +to enrich.

    +
    +
    Returns:
    +

    The enriched exception.

    +
    +
    Return type:
    +

    ContractLogicError

    +
    +
    +
    + +
    +
    +abstract get_versions(all_paths: Sequence[Path]) Set[str]
    +

    Retrieve the set of available compiler versions for this plugin to compile all_paths.

    +
    +
    Parameters:
    +

    all_paths (Sequence[pathlib.Path]) – The list of paths.

    +
    +
    Returns:
    +

    A set of available compiler versions.

    +
    +
    Return type:
    +

    Set[str]

    +
    +
    +
    + +
    +
    +abstract property name: str
    +

    The name of the compiler.

    +
    + +
    +
    +property settings: PluginConfig
    +

    The combination of settings from ape-config.yaml and .compiler_settings.

    +
    + +
    +
    +property supports_source_tracing: bool
    +

    Returns True if this compiler is able to provider a source +traceback for a given trace.

    +
    + +
    + +
    +
    +

    Config

    +
    +
    +class ape.api.config.ConfigEnum(value)
    +

    Bases: str, Enum

    +

    A configuration Enum type. +Use this to limit the values of a config item, such as colors "RED", "BLUE", +"GREEN", rather than any arbitrary str.

    +

    Usage example:

    +
    class MyEnum(ConfigEnum):
    +    FOO = "FOO"
    +    BAR = "BAR"
    +
    +class MyConfig(PluginConfig):
    +    my_enum: MyEnum
    +
    +model = MyConfig(my_enum="FOO")
    +
    +
    +
    + +
    +
    +class ape.api.config.GenericConfig
    +

    Bases: ConfigDict

    +

    The default class used when no specialized class is used.

    +
    + +
    +
    +class ape.api.config.PluginConfig(_case_sensitive: bool | None = None, _env_prefix: str | None = None, _env_file: DotenvType | None = PosixPath('.'), _env_file_encoding: str | None = None, _env_nested_delimiter: str | None = None, _secrets_dir: str | Path | None = None)
    +

    Bases: BaseSettings

    +

    A base plugin configuration class. Each plugin that includes +a config API must register a subclass of this class.

    +
    + +
    +
    +

    Convert

    +
    +
    +class ape.api.convert.ConverterAPI
    +

    Bases: BaseInterfaceModel, Generic[ConvertedType]

    +
    +
    +abstract convert(value: Any) ConvertedType
    +

    Convert the given value to the type specified as the generic for this class. +Implementations of this API must throw a ConversionError +when the item fails to convert properly.

    +
    + +
    +
    +abstract is_convertible(value: Any) bool
    +

    Returns True if string value provided by value is convertible using +ape.api.convert.ConverterAPI.convert().

    +
    +
    Parameters:
    +

    value (Any) – The value to check.

    +
    +
    Returns:
    +

    True when the given value can be converted.

    +
    +
    Return type:
    +

    bool

    +
    +
    +
    + +
    + +
    +
    +

    Explorers

    +
    +
    +class ape.api.explorers.ExplorerAPI(*, name: str, network: NetworkAPI)
    +

    Bases: BaseInterfaceModel

    +

    An API class representing a blockchain explorer for a particular network +in a particular ecosystem.

    +
    +
    +abstract get_address_url(address: ChecksumAddress) str
    +

    Get an address URL, such as for a transaction.

    +
    +
    Parameters:
    +

    address (AddressType) – The address.

    +
    +
    Returns:
    +

    The URL.

    +
    +
    Return type:
    +

    str

    +
    +
    +
    + +
    +
    +abstract get_contract_type(address: ChecksumAddress) ContractType | None
    +

    Get the contract type for a given address if it has been published to this explorer.

    +
    +
    Parameters:
    +

    address (AddressType) – The contract address.

    +
    +
    Returns:
    +

    If not published, returns None.

    +
    +
    Return type:
    +

    Optional[ContractType]

    +
    +
    +
    + +
    +
    +abstract get_transaction_url(transaction_hash: str) str
    +

    Get the transaction URL for the given transaction.

    +
    +
    Parameters:
    +

    transaction_hash (str) – The transaction hash.

    +
    +
    Returns:
    +

    The URL.

    +
    +
    Return type:
    +

    str

    +
    +
    +
    + +
    +
    +abstract publish_contract(address: ChecksumAddress)
    +

    Publish a contract to the explorer.

    +
    +
    Parameters:
    +

    address (AddressType) – The address of the deployed contract.

    +
    +
    +
    + +
    + +
    +
    +

    Networks

    +
    +
    +class ape.api.networks.EcosystemAPI(*, name: str, data_folder: Path, request_header: Dict, fee_token_symbol: str, fee_token_decimals: int = 18)
    +

    Bases: ExtraAttributesMixin, BaseInterfaceModel

    +

    A set of related networks, such as Ethereum.

    +
    +
    +__ape_extra_attributes__() Iterator[ExtraModelAttributes]
    +

    Override this method to supply extra attributes +to a model in Ape; this allow more properties +to be available when invoking __getattr__.

    +
    +
    Returns:
    +

    A +series of instances defining extra model attributes.

    +
    +
    Return type:
    +

    Iterator[ExtraModelAttributes]

    +
    +
    +
    + +
    +
    +add_network(network_name: str, network: NetworkAPI)
    +

    Attach a new network to an ecosystem (e.g. L2 networks like Optimism).

    +
    +
    Raises:
    +

    NetworkError – When the network already exists.

    +
    +
    Parameters:
    +
      +
    • network_name (str) – The name of the network to add.

    • +
    • network (NetworkAPI) – The network to add.

    • +
    +
    +
    +
    + +
    +
    +property config: PluginConfig
    +

    The configuration of the ecosystem. See ape.managers.config.ConfigManager +for more information on plugin configurations.

    +
    +
    Returns:
    +

    ape.api.config.PluginConfig

    +
    +
    +
    + +
    +
    +abstract create_transaction(**kwargs) TransactionAPI
    +

    Create a transaction using key-value arguments.

    +
    +
    Parameters:
    +

    **kwargs – Everything the transaction needs initialize.

    +
    +
    Returns:
    +

    ~ape.api.transactions.TransactionAPI

    +
    +
    Return type:
    +

    class

    +
    +
    +
    + +
    +
    +property custom_network: NetworkAPI
    +

    A NetworkAPI for custom networks where the +network is either not known, unspecified, or does not have an Ape plugin.

    +
    + +
    +
    +data_folder: Path
    +

    The path to the .ape directory.

    +
    + +
    +
    +abstract classmethod decode_address(raw_address: str | int | HashStr20 | HashBytes20) ChecksumAddress
    +

    Convert a raw address to the ecosystem’s native address type.

    +
    +
    Parameters:
    +

    raw_address (RawAddress) – The address to +convert.

    +
    +
    Returns:
    +

    AddressType

    +
    +
    +
    + +
    +
    +abstract decode_block(data: Dict) BlockAPI
    +

    Decode data to a BlockAPI.

    +
    +
    Parameters:
    +

    data (Dict) – A dictionary of data to decode.

    +
    +
    Returns:
    +

    BlockAPI

    +
    +
    +
    + +
    +
    +abstract decode_calldata(abi: ConstructorABI | MethodABI, calldata: bytes) Dict
    +

    Decode method calldata.

    +
    +
    Parameters:
    +
      +
    • abi (Union[ConstructorABI, MethodABI]) – The method called.

    • +
    • calldata (bytes) – The raw calldata bytes.

    • +
    +
    +
    Returns:
    +

    A mapping of input names to decoded values. +If an input is anonymous, it should use the stringified +index of the input as the key.

    +
    +
    Return type:
    +

    Dict

    +
    +
    +
    + +
    +
    +abstract decode_logs(logs: Sequence[Dict], *events: EventABI) Iterator[ContractLog]
    +

    Decode any contract logs that match the given event ABI from the raw log data.

    +
    +
    Parameters:
    +
      +
    • logs (Sequence[Dict]) – A list of raw log data from the chain.

    • +
    • *events (EventABI) – Event definitions to decode.

    • +
    +
    +
    Returns:
    +

    Iterator[ContractLog]

    +
    +
    +
    + +
    +
    +abstract decode_receipt(data: Dict) ReceiptAPI
    +

    Convert data to ReceiptAPI.

    +
    +
    Parameters:
    +

    data (Dict) – A dictionary of Receipt properties.

    +
    +
    Returns:
    +

    ReceiptAPI

    +
    +
    +
    + +
    +
    +abstract decode_returndata(abi: MethodABI, raw_data: bytes) Any
    +

    Get the result of a contract call.

    +
    +
    Arg:

    abi (MethodABI): The method called. +raw_data (bytes): Raw returned data.

    +
    +
    +
    +
    Returns:
    +

    All of the values returned from the contract function.

    +
    +
    Return type:
    +

    Any

    +
    +
    +
    + +
    +
    +property default_network_name: str
    +

    The name of the default network in this ecosystem.

    +
    +
    Returns:
    +

    str

    +
    +
    +
    + +
    +
    +abstract classmethod encode_address(address: ChecksumAddress) str | int | HashStr20 | HashBytes20
    +

    Convert the ecosystem’s native address type to a raw integer or str address.

    +
    +
    Parameters:
    +

    address (AddressType) – The address to convert.

    +
    +
    Returns:
    +

    RawAddress

    +
    +
    +
    + +
    +
    +abstract encode_calldata(abi: ConstructorABI | MethodABI, *args: Any) HexBytes
    +

    Encode method calldata.

    +
    +
    Parameters:
    +
      +
    • abi (Union[ConstructorABI, MethodABI]) – The ABI of the method called.

    • +
    • *args (Any) – The arguments given to the method.

    • +
    +
    +
    Returns:
    +

    The encoded calldata of the arguments to the given method.

    +
    +
    Return type:
    +

    HexBytes

    +
    +
    +
    + +
    +
    +abstract encode_deployment(deployment_bytecode: HexBytes, abi: ConstructorABI, *args, **kwargs) TransactionAPI
    +

    Create a deployment transaction in the given ecosystem. +This may require connecting to other networks.

    +
    +
    Parameters:
    +
      +
    • deployment_bytecode (HexBytes) – The bytecode to deploy.

    • +
    • abi (ConstructorABI) – The constructor interface of the contract.

    • +
    • *args (Any) – Constructor arguments.

    • +
    • **kwargs (Any) – Transaction arguments.

    • +
    +
    +
    Returns:
    +

    ~ape.api.transactions.TransactionAPI

    +
    +
    Return type:
    +

    class

    +
    +
    +
    + +
    +
    +abstract encode_transaction(address: ChecksumAddress, abi: MethodABI, *args, **kwargs) TransactionAPI
    +

    Encode a transaction object from a contract function’s ABI and call arguments. +Additionally, update the transaction arguments with the overrides in kwargs.

    +
    +
    Parameters:
    +
      +
    • address (AddressType) – The address of the contract.

    • +
    • abi (MethodABI) – The function to call on the contract.

    • +
    • *args (Any) – Function arguments.

    • +
    • **kwargs (Any) – Transaction arguments.

    • +
    +
    +
    Returns:
    +

    ~ape.api.transactions.TransactionAPI

    +
    +
    Return type:
    +

    class

    +
    +
    +
    + +
    +
    +enrich_calltree(call: CallTreeNode, **kwargs) CallTreeNode
    +

    Enhance the data in the call tree using information about the ecosystem.

    +
    +
    Parameters:
    +
      +
    • call (CallTreeNode) – The call tree node to enrich.

    • +
    • kwargs – Additional kwargs to help with enrichment.

    • +
    +
    +
    Returns:
    +

    CallTreeNode

    +
    +
    +
    + +
    +
    +fee_token_decimals: int
    +

    The number of the decimals the fee token has.

    +
    + +
    +
    +fee_token_symbol: str
    +

    The token symbol for the currency that pays for fees, such as ETH.

    +
    + +
    +
    +get_method_selector(abi: MethodABI) HexBytes
    +

    Get a contract method selector, typically via hashing such as keccak. +Defaults to using keccak but can be overridden in different ecosystems.

    +

    Override example:

    +
    from ape.api import EcosystemAPI
    +from eth_pydantic_types import HexBytes
    +
    +class MyEcosystem(EcosystemAPI):
    +    def get_method_selector(self, abi: MethodABI) -> HexBytes:
    +        return HexBytes(abi.selector.encode())  # Simple bytes selector
    +
    +
    +
    +
    Parameters:
    +

    abi (MethodABI) – The ABI object to use when calculating the +selector bytes.

    +
    +
    Returns:
    +

    The hashed method selector value.

    +
    +
    Return type:
    +

    HexBytes

    +
    +
    +
    + +
    +
    +get_network(network_name: str) NetworkAPI
    +

    Get the network for the given name.

    +
    +
    Parameters:
    +

    network_name (str) – The name of the network to get.

    +
    +
    Raises:
    +

    NetworkNotFoundError – When the network is not present.

    +
    +
    Returns:
    +

    NetworkAPI

    +
    +
    +
    + +
    +
    +get_network_data(network_name: str, provider_filter: Collection[str] | None = None) Dict
    +

    Get a dictionary of data about providers in the network.

    +

    NOTE: The keys are added in an opinionated order for nicely +translating into yaml.

    +
    +
    Parameters:
    +
      +
    • network_name (str) – The name of the network to get provider data from.

    • +
    • provider_filter (Optional[Collection[str]]) – Optionally filter the providers +by name.

    • +
    +
    +
    Returns:
    +

    A dictionary containing the providers in a network.

    +
    +
    Return type:
    +

    dict

    +
    +
    +
    + +
    +
    +get_proxy_info(address: ChecksumAddress) ProxyInfoAPI | None
    +

    Information about a proxy contract such as proxy type and implementation address.

    +
    +
    Parameters:
    +

    address (AddressType) – The address of the contract.

    +
    +
    Returns:
    +

    Returns None if the contract +does not use any known proxy pattern.

    +
    +
    Return type:
    +

    Optional[ProxyInfoAPI]

    +
    +
    +
    + +
    +
    +name: str
    +

    The name of the ecosystem. This should be set the same name as the plugin.

    +
    + +
    +
    +property networks: Dict[str, NetworkAPI]
    +

    A dictionary of network names mapped to their API implementation.

    +
    +
    Returns:
    +

    Dict[str, NetworkAPI]

    +
    +
    +
    + +
    +
    +request_header: Dict
    +

    A shareable HTTP header for network requests.

    +
    + +
    +
    +serialize_transaction() bytes
    +

    Serialize a transaction to bytes.

    +
    +
    Returns:
    +

    bytes

    +
    +
    +
    + +
    +
    +set_default_network(network_name: str)
    +

    Change the default network.

    +
    +
    Raises:
    +

    NetworkError – When the network does not exist.

    +
    +
    Parameters:
    +

    network_name (str) – The name of the default network to switch to.

    +
    +
    +
    + +
    + +
    +
    +class ape.api.networks.ForkedNetworkAPI(*, name: str, ecosystem: EcosystemAPI, data_folder: Path, request_header: Dict)
    +

    Bases: NetworkAPI

    +
    +
    +property upstream_chain_id: int
    +

    The chain Id of the upstream network. +For example, when on mainnet-fork, this should always +return the chain ID for mainnet. Some providers may use +a different chain ID for forked networks while some do not. +This property should ALWAYS be that of the forked network, regardless.

    +
    + +
    +
    +property upstream_network: NetworkAPI
    +

    The network being forked.

    +
    + +
    +
    +property upstream_provider: UpstreamProvider
    +

    The provider used when requesting data before the local fork. +Set this in your config under the network settings. +When not set, will attempt to use the default provider, if one +exists.

    +
    + +
    +
    +use_upstream_provider() ProviderContextManager
    +

    Connect to the upstream provider.

    +
    +
    Returns:
    +

    ProviderContextManager

    +
    +
    +
    + +
    + +
    +
    +class ape.api.networks.NetworkAPI(*, name: str, ecosystem: EcosystemAPI, data_folder: Path, request_header: Dict)
    +

    Bases: BaseInterfaceModel

    +

    A wrapper around a provider for a specific ecosystem.

    +
    +
    +property auto_gas_multiplier: float
    +

    The value to multiply estimated gas by for tx-insurance.

    +
    + +
    +
    +property base_fee_multiplier: float
    +

    A multiplier to apply to a transaction base fee.

    +
    + +
    +
    +property block_time: int
    +

    The approximate amount of time it takes for a new block to get mined to the chain. +Configure in your ape-config.yaml file.

    +

    Config example:

    +
    ethereum:
    +  mainnet:
    +    block_time: 15
    +
    +
    +
    + +
    +
    +property chain_id: int
    +

    The ID of the blockchain.

    +

    NOTE: Unless overridden, returns same as +ape.api.providers.ProviderAPI.chain_id.

    +
    + +
    +
    +property config: PluginConfig
    +

    The configuration of the network. See ConfigManager +for more information on plugin configurations.

    +
    + +
    +
    +data_folder: Path
    +

    The path to the .ape directory.

    +
    + +
    +
    +property default_provider_name: str | None
    +

    The name of the default provider or None.

    +
    +
    Returns:
    +

    Optional[str]

    +
    +
    +
    + +
    +
    +ecosystem: EcosystemAPI
    +

    The ecosystem of the network.

    +
    + +
    +
    +property explorer: ExplorerAPI | None
    +

    The block-explorer for the given network.

    +
    +
    Returns:
    +

    ape.api.explorers.ExplorerAPI, optional

    +
    +
    +
    + +
    +
    +get_provider(provider_name: str | None = None, provider_settings: Dict | None = None)
    +

    Get a provider for the given name. If given None, returns the default provider.

    +
    +
    Parameters:
    +
      +
    • provider_name (str, optional) – The name of the provider to get. Defaults to None. +When None, returns the default provider.

    • +
    • provider_settings (dict, optional) – Settings to apply to the provider. Defaults to +None.

    • +
    +
    +
    Returns:
    +

    ProviderAPI

    +
    +
    +
    + +
    +
    +property is_adhoc: bool
    +

    Is a custom network from CLI only, e.g. was not configured +in any CLI value and is mostly an “unknown” network.

    +
    + +
    +
    +property is_dev: bool
    +

    True when using a local network, including forks.

    +
    + +
    +
    +property is_fork: bool
    +

    True when using a forked network.

    +
    + +
    +
    +property is_local: bool
    +

    True when using the local network.

    +
    + +
    +
    +name: str
    +

    The name of the network.

    +
    + +
    +
    +property network_id: int
    +

    The ID of the network.

    +

    NOTE: Unless overridden, returns same as +chain_id.

    +
    + +
    +
    +property providers
    +

    The providers of the network, such as Infura, Alchemy, or Geth.

    +
    +
    Returns:
    +

    Dict[str, partial[ProviderAPI]]

    +
    +
    +
    + +
    +
    +publish_contract(address: ChecksumAddress)
    +

    A convenience method to publish a contract to the explorer.

    +
    +
    Raises:
    +

    NetworkError – When there is no explorer for this network.

    +
    +
    Parameters:
    +

    address (AddressType) – The address of the contract.

    +
    +
    +
    + +
    +
    +request_header: Dict
    +

    A shareable network HTTP header.

    +
    + +
    +
    +property required_confirmations: int
    +

    The default amount of confirmations recommended to wait +before considering a transaction “confirmed”. Confirmations +refer to the number of blocks that have been added since the +transaction’s block.

    +
    + +
    +
    +set_default_provider(provider_name: str)
    +

    Change the default provider.

    +
    +
    Raises:
    +

    NetworkError – When the given provider is not found.

    +
    +
    Parameters:
    +

    provider_name (str) – The name of the provider to switch to.

    +
    +
    +
    + +
    +
    +property transaction_acceptance_timeout: int
    +

    The amount of time to wait for a transaction to be accepted on the network. +Does not include waiting for block-confirmations. Defaults to two minutes. +Local networks use smaller timeouts.

    +
    + +
    +
    +use_default_provider(provider_settings: Dict | None = None, disconnect_after: bool = False) ProviderContextManager
    +

    Temporarily connect and use the default provider. When entering the context, it calls +method ape.api.providers.ProviderAPI.connect() and when exiting, it calls +method ape.api.providers.ProviderAPI.disconnect().

    +

    NOTE: If multiple providers exist, uses whatever was “first” registered.

    +

    Usage example:

    +
    from ape import networks
    +mainnet = networks.ethereum.mainnet  # An instance of NetworkAPI
    +with mainnet.use_default_provider():
    +    ...
    +
    +
    +
    +
    Parameters:
    +
      +
    • provider_settings (dict, optional) – Settings to override the provider.

    • +
    • disconnect_after (bool) – Set to True to force a disconnect after ending +the context. This defaults to False so you can re-connect to the +same network, such as in a multi-chain testing scenario.

    • +
    +
    +
    Returns:
    +

    ProviderContextManager

    +
    +
    +
    + +
    +
    +use_provider(provider: str | ProviderAPI, provider_settings: Dict | None = None, disconnect_after: bool = False, disconnect_on_exit: bool = True) ProviderContextManager
    +

    Use and connect to a provider in a temporary context. When entering the context, it calls +method ape.api.providers.ProviderAPI.connect() and when exiting, it calls +method ape.api.providers.ProviderAPI.disconnect().

    +

    Usage example:

    +
    from ape import networks
    +
    +mainnet = networks.ethereum.mainnet  # An instance of NetworkAPI
    +with mainnet.use_provider("infura"):
    +    ...
    +
    +
    +
    +
    Parameters:
    +
      +
    • provider (Union[str, ProviderAPI]) – The provider +instance or the name of the provider to use.

    • +
    • provider_settings (dict, optional) – Settings to apply to the provider. +Defaults to None.

    • +
    • disconnect_after (bool) – Set to True to force a disconnect after ending +the context. This defaults to False so you can re-connect to the +same network, such as in a multi-chain testing scenario.

    • +
    • disconnect_on_exit (bool) – Whether to disconnect on the exit of the python +session. Defaults to True.

    • +
    +
    +
    Returns:
    +

    ProviderContextManager

    +
    +
    +
    + +
    +
    +verify_chain_id(chain_id: int)
    +

    Verify a chain ID for this network.

    +
    +
    Parameters:
    +

    chain_id (int) – The chain ID to verify.

    +
    +
    Raises:
    +

    NetworkMismatchError – When the network is + not local or adhoc and has a different hardcoded chain ID than + the given one.

    +
    +
    +
    + +
    + +
    +
    +class ape.api.networks.ProviderContextManager(provider: ProviderAPI, disconnect_after: bool = False, disconnect_on_exit: bool = True)
    +

    Bases: ManagerAccessMixin

    +

    A context manager for temporarily connecting to a network. +When entering the context, calls the ape.api.providers.ProviderAPI.connect() method. +And conversely, when exiting, calls the ape.api.providers.ProviderPAI.disconnect() +method, unless in a multi-chain context, in which case it disconnects all providers at +the very end of the Python session.

    +

    The method ape.api.networks.NetworkAPI.use_provider() returns +an instance of this context manager.

    +

    Usage example:

    +
    from ape import networks
    +
    +mainnet = networks.ethereum.mainnet  # An instance of NetworkAPI
    +with mainnet.use_provider("infura"):
    +    ...
    +
    +# Or, using choice-strings:
    +
    +with networks.parse_network_choice("ethereum:local:test"):
    +    ...
    +
    +
    +
    +
    +property empty: bool
    +

    True when there are no providers in the context.

    +
    + +
    + +
    +
    +class ape.api.networks.ProxyInfoAPI(*, target: ChecksumAddress)
    +

    Bases: BaseModel

    +

    Information about a proxy contract.

    +
    +
    +target: ChecksumAddress
    +

    The address of the implementation contract.

    +
    + +
    + +
    +
    +ape.api.networks.create_network_type(chain_id: int, network_id: int) Type[NetworkAPI]
    +

    Easily create a NetworkAPI subclass.

    +
    + +
    +
    +

    Projects

    +
    +
    +class ape.api.projects.DependencyAPI(*, name: str, version: str | None = None, contracts_folder: str = 'contracts', exclude: List[str] = ['package.json', 'package-lock.json', '**/.build/**/*.json'], config_override: Dict = {})
    +

    Bases: ExtraAttributesMixin, BaseInterfaceModel

    +

    A base-class for dependency sources, such as GitHub or IPFS.

    +
    +
    +property cached_manifest: PackageManifest | None
    +

    The manifest from the .ape/packages/<dependency-name>/<version-id> +if it exists and is valid.

    +
    + +
    +
    +compile(use_cache: bool = True) PackageManifest
    +

    Compile the contract types in this dependency into +a package manifest.

    +
    +
    Parameters:
    +

    use_cache (bool) – Defaults to True. Set to False to force +a re-compile.

    +
    +
    +

    NOTE: By default, dependency’s compile lazily.

    +
    + +
    +
    +config_override: Dict
    +

    Extra settings to include in the dependency’s configuration.

    +
    + +
    +
    +property contracts: Dict[str, ContractContainer]
    +

    A mapping of name to contract type of all the contracts +in this dependency.

    +
    + +
    +
    +contracts_folder: str
    +

    The name of the dependency’s contracts/ directory. +This is where ape will look for source files when compiling +the manifest for this dependency.

    +

    NOTE: This must be the name of a directory in the project.

    +
    + +
    +
    +exclude: List[str]
    +

    A list of glob-patterns for excluding files in dependency projects.

    +
    + +
    +
    +abstract extract_manifest(use_cache: bool = True) PackageManifest
    +

    Create a PackageManifest definition, +presumably by downloading and compiling the dependency.

    +

    Implementations may use self.project_manager to call method +get_project() +to dynamically get the correct ProjectAPI. +based on the project’s structure.

    +
    +
    Parameters:
    +

    use_cache (bool) – Defaults to True. Set to False to force +a re-install.

    +
    +
    Returns:
    +

    PackageManifest

    +
    +
    +
    + +
    +
    +name: str
    +

    The name of the dependency.

    +
    + +
    +
    +abstract property uri: Url
    +

    The URI to use when listing in a PackageManifest.

    +
    + +
    +
    +version: str | None
    +

    The version of the dependency. Omit to use the latest.

    +
    + +
    +
    +abstract property version_id: str
    +

    The ID to use as the sub-directory in the download cache. +Most often, this is either a version number or a branch name.

    +
    + +
    + +
    +
    +class ape.api.projects.ProjectAPI(*, path: Path, contracts_folder: Path, name: str | None = None, version: str | None = None, config_file_name: str = 'ape-config.yaml')
    +

    Bases: BaseInterfaceModel

    +

    An abstract base-class for working with projects. +This class can also be extended to a plugin for supporting non-ape projects.

    +
    +
    +add_compiler_data(compiler_data: Sequence[Compiler]) List[Compiler]
    +

    Add compiler data to the existing cached manifest.

    +
    +
    Parameters:
    +

    compiler_data (List[ethpm_types.Compiler]) – Compilers to add.

    +
    +
    Returns:
    +

    The full list of compilers.

    +
    +
    Return type:
    +

    List[ethpm_types.source.Compiler]

    +
    +
    +
    + +
    +
    +property cached_manifest: PackageManifest | None
    +

    The PackageManifest at manifest_cachefile +if it exists and is valid.

    +
    + +
    +
    +contracts_folder: Path
    +

    The path to the contracts in the project.

    +
    + +
    +
    +abstract create_manifest(file_paths: Sequence[Path] | None = None, use_cache: bool = True) PackageManifest
    +

    Create a manifest from the project.

    +
    +
    Parameters:
    +
      +
    • file_paths (Optional[Sequence[Path]]) – An optional list of paths to compile +from this project.

    • +
    • use_cache (bool) – Set to False to clear caches and force a re-compile.

    • +
    +
    +
    Returns:
    +

    PackageManifest

    +
    +
    +
    + +
    +
    +abstract property is_valid: bool
    +

    True if the project at the given path matches this project type. +Useful for figuring out the best ProjectAPI to use when compiling a project.

    +
    + +
    +
    +property manifest_cachefile: Path
    +

    The path to the project’s cached manifest. The manifest +is a cached file representing the project and is useful +for sharing, such as uploading to IPFS.

    +
    +
    Returns:
    +

    pathlib.Path

    +
    +
    +
    + +
    +
    +name: str | None
    +

    The name of this project when another project uses it as a dependency.

    +
    + +
    +
    +path: Path
    +

    The project path.

    +
    + +
    +
    +process_config_file(**kwargs) bool
    +

    Process the project’s config file. +Returns True if had to create a temporary ape-config.yaml file.

    +
    + +
    +
    +replace_manifest(manifest: PackageManifest) PackageManifest
    +

    Replace the entire cached manifest.

    +
    +
    Parameters:
    +

    manifest (ethpm_types.manifest.PackageManifest) – The manifest +to use.

    +
    +
    +
    + +
    +
    +update_manifest(**kwargs) PackageManifest
    +

    Add additional package manifest parts to the cache.

    +
    +
    Parameters:
    +

    **kwargs – Fields from ethpm_types.manifest.PackageManifest.

    +
    +
    +
    + +
    +
    +version: str | None
    +

    The version of the project whe another project uses it as a dependency.

    +
    + +
    + +
    +
    +

    Providers

    +
    +
    +class ape.api.providers.BlockAPI(*, num_transactions: int = 0, hash: Any | None = None, number: int | None = None, parentHash: Any = HexBytes('0x0000000000000000000000000000000000000000000000000000000000000000'), size: int, timestamp: int)
    +

    Bases: BaseInterfaceModel

    +

    An abstract class representing a block and its attributes.

    +
    + +
    +
    +class ape.api.providers.ProviderAPI(*, name: str, network: NetworkAPI, provider_settings: Dict = {}, data_folder: Path, request_header: Dict, block_page_size: int = 100, concurrency: int = 4)
    +

    Bases: BaseInterfaceModel

    +

    An abstraction of a connection to a network in an ecosystem. Example ProviderAPI +implementations include the ape-infura +plugin or the ape-hardhat plugin.

    +
    +
    +property base_fee: int
    +

    The minimum value required to get your transaction included on the next block. +Only providers that implement EIP-1559 +will use this property.

    +
    +
    Raises:
    +

    NotImplementedError – When this provider does not implement + EIP-1559.

    +
    +
    +
    + +
    +
    +block_page_size: int
    +

    The amount of blocks to fetch in a response, as a default. +This is particularly useful for querying logs across a block range.

    +
    + +
    +
    +abstract property chain_id: int
    +

    The blockchain ID. +See ChainList for a comprehensive list of IDs.

    +
    + +
    +
    +concurrency: int
    +

    How many parallel threads to use when fetching logs.

    +
    + +
    +
    +property config: PluginConfig
    +

    The provider’s configuration.

    +
    + +
    +
    +abstract connect()
    +

    Connect a to a provider, such as start-up a process or create an HTTP connection.

    +
    + +
    +
    +property connection_id: str | None
    +

    A connection ID to uniquely identify and manage multiple +connections to providers, especially when working with multiple +providers of the same type, like multiple Geth –dev nodes.

    +
    + +
    +
    +property connection_str: str
    +

    The str representing how to connect +to the node, such as an HTTP URL +or an IPC path.

    +
    + +
    +
    +data_folder: Path
    +

    The path to the .ape directory.

    +
    + +
    +
    +abstract disconnect()
    +

    Disconnect from a provider, such as tear-down a process or quit an HTTP session.

    +
    + +
    +
    +abstract estimate_gas_cost(txn: TransactionAPI, block_id: int | HexStr | HexBytes | Literal['earliest', 'latest', 'pending'] | None = None) int
    +

    Estimate the cost of gas for a transaction.

    +
    +
    Parameters:
    +
      +
    • txn (TransactionAPI) – The transaction to estimate the gas for.

    • +
    • block_id (Optional[BlockID]) – The block ID +to use when estimating the transaction. Useful for checking a +past estimation cost of a transaction.

    • +
    +
    +
    Returns:
    +

    The estimated cost of gas to execute the transaction +reported in the fee-currency’s smallest unit, e.g. Wei. If the +provider’s network has been configured with a gas limit override, it +will be returned. If the gas limit configuration is “max” this will +return the block maximum gas limit.

    +
    +
    Return type:
    +

    int

    +
    +
    +
    + +
    +
    +abstract property gas_price: int
    +

    The price for what it costs to transact +(pre-EIP-1559).

    +
    + +
    +
    +abstract get_balance(address: ChecksumAddress, block_id: int | HexStr | HexBytes | Literal['earliest', 'latest', 'pending'] | None = None) int
    +

    Get the balance of an account.

    +
    +
    Parameters:
    +
      +
    • address (AddressType) – The address of the account.

    • +
    • block_id (BlockID) – Optionally specify a block +ID. Defaults to using the latest block.

    • +
    +
    +
    Returns:
    +

    The account balance.

    +
    +
    Return type:
    +

    int

    +
    +
    +
    + +
    +
    +abstract get_block(block_id: int | HexStr | HexBytes | Literal['earliest', 'latest', 'pending']) BlockAPI
    +

    Get a block.

    +
    +
    Parameters:
    +

    block_id (BlockID) – The ID of the block to get. +Can be "latest", "earliest", "pending", a block hash or a block number.

    +
    +
    Raises:
    +

    BlockNotFoundError – Likely the exception raised when a block + is not found (depends on implementation).

    +
    +
    Returns:
    +

    The block for the given ID.

    +
    +
    Return type:
    +

    BlockID

    +
    +
    +
    + +
    +
    +abstract get_code(address: ChecksumAddress, block_id: int | HexStr | HexBytes | Literal['earliest', 'latest', 'pending'] | None = None) str | bytes | HexBytes
    +

    Get the bytes a contract.

    +
    +
    Parameters:
    +
      +
    • address (AddressType) – The address of the contract.

    • +
    • block_id (Optional[BlockID]) – The block ID +for checking a previous account nonce.

    • +
    +
    +
    Returns:
    +

    The contract bytecode.

    +
    +
    Return type:
    +

    ContractCode

    +
    +
    +
    + +
    +
    +abstract get_contract_logs(log_filter: LogFilter) Iterator[ContractLog]
    +

    Get logs from contracts.

    +
    +
    Parameters:
    +

    log_filter (LogFilter) – A mapping of event ABIs to +topic filters. Defaults to getting all events.

    +
    +
    Returns:
    +

    Iterator[ContractLog]

    +
    +
    +
    + +
    +
    +abstract get_nonce(address: ChecksumAddress, block_id: int | HexStr | HexBytes | Literal['earliest', 'latest', 'pending'] | None = None) int
    +

    Get the number of times an account has transacted.

    +
    +
    Parameters:
    +
      +
    • address (AddressType) – The address of the account.

    • +
    • block_id (Optional[BlockID]) – The block ID +for checking a previous account nonce.

    • +
    +
    +
    Returns:
    +

    int

    +
    +
    +
    + +
    +
    +abstract get_receipt(txn_hash: str, **kwargs) ReceiptAPI
    +

    Get the information about a transaction from a transaction hash.

    +
    +
    Parameters:
    +
      +
    • txn_hash (str) – The hash of the transaction to retrieve.

    • +
    • kwargs – Any other kwargs that other providers might allow when fetching a receipt.

    • +
    +
    +
    Returns:
    +

    The receipt of the transaction with the given hash.

    +
    +
    Return type:
    +

    ReceiptAPI

    +
    +
    +
    + +
    +
    +abstract get_transactions_by_block(block_id: int | HexStr | HexBytes | Literal['earliest', 'latest', 'pending']) Iterator[TransactionAPI]
    +

    Get the information about a set of transactions from a block.

    +
    +
    Parameters:
    +

    block_id (BlockID) – The ID of the block.

    +
    +
    Returns:
    +

    class: ~ape.api.transactions.TransactionAPI]

    +
    +
    Return type:
    +

    Iterator[

    +
    +
    +
    + +
    +
    +get_virtual_machine_error(exception: Exception, **kwargs) VirtualMachineError
    +

    Get a virtual machine error from an error returned from your RPC.

    +
    +
    Parameters:
    +

    exception (Exception) – The error returned from your RPC client.

    +
    +
    Returns:
    +

    +
    An error representing what

    went wrong in the call.

    +
    +
    +

    +
    +
    Return type:
    +

    VirtualMachineError

    +
    +
    +
    + +
    +
    +property http_uri: str | None
    +

    Return the raw HTTP/HTTPS URI to connect to this provider, if supported.

    +
    + +
    +
    +abstract property is_connected: bool
    +

    True if currently connected to the provider. False otherwise.

    +
    + +
    +
    +abstract property max_gas: int
    +

    The max gas limit value you can use.

    +
    + +
    +
    +name: str
    +

    The name of the provider (should be the plugin name).

    +
    + +
    +
    +network: NetworkAPI
    +

    A reference to the network this provider provides.

    +
    + +
    +
    +property network_choice: str
    +

    The connected network choice string.

    +
    + +
    +
    +prepare_transaction(txn: TransactionAPI) TransactionAPI
    +

    Set default values on the transaction.

    +
    +
    Raises:
    +

    TransactionError – When given negative required confirmations.

    +
    +
    Parameters:
    +

    txn (TransactionAPI) – The transaction to prepare.

    +
    +
    Returns:
    +

    TransactionAPI

    +
    +
    +
    + +
    +
    +property priority_fee: int
    +

    A miner tip to incentivize them to include your transaction in a block.

    +
    +
    Raises:
    +

    NotImplementedError – When the provider does not implement + EIP-1559 typed transactions.

    +
    +
    +
    + +
    +
    +provider_settings: Dict
    +

    The settings for the provider, as overrides to the configuration.

    +
    + +
    +
    +request_header: Dict
    +

    A header to set on HTTP/RPC requests.

    +
    + +
    +
    +abstract send_call(txn: TransactionAPI, block_id: int | HexStr | HexBytes | Literal['earliest', 'latest', 'pending'] | None = None, state: Dict | None = None, **kwargs) HexBytes
    +

    Execute a new transaction call immediately without creating a +transaction on the block chain.

    +
    +
    Parameters:
    +
      +
    • txnTransactionAPI

    • +
    • block_id (Optional[BlockID]) – The block ID +to use to send a call at a historical point of a contract. +Useful for checking a past estimation cost of a transaction.

    • +
    • state (Optional[Dict]) – Modify the state of the blockchain +prior to sending the call, for testing purposes.

    • +
    • **kwargs – Provider-specific extra kwargs.

    • +
    +
    +
    Returns:
    +

    The result of the transaction call.

    +
    +
    Return type:
    +

    str

    +
    +
    +
    + +
    +
    +send_private_transaction(txn: TransactionAPI, **kwargs) ReceiptAPI
    +

    Send a transaction through a private mempool (if supported by the Provider).

    +
    +
    Raises:
    +

    APINotImplementedError – If using a non-local + network and not implemented by the provider.

    +
    +
    Parameters:
    +
      +
    • txn (TransactionAPI) – The transaction +to privately publish.

    • +
    • **kwargs – Additional kwargs to be optionally handled by the provider.

    • +
    +
    +
    Returns:
    +

    ReceiptAPI

    +
    +
    +
    + +
    +
    +abstract send_transaction(txn: TransactionAPI) ReceiptAPI
    +

    Send a transaction to the network.

    +
    +
    Parameters:
    +

    txn (TransactionAPI) – The transaction to send.

    +
    +
    Returns:
    +

    ReceiptAPI

    +
    +
    +
    + +
    +
    +property settings: PluginConfig
    +

    The combination of settings from ape-config.yaml and .provider_settings.

    +
    + +
    +
    +property supports_tracing: bool
    +

    True when the provider can provide transaction traces.

    +
    + +
    +
    +abstract update_settings(new_settings: Dict)
    +

    Change a provider’s setting, such as configure a new port to run on. +May require a reconnect.

    +
    +
    Parameters:
    +

    new_settings (Dict) – The new provider settings.

    +
    +
    +
    + +
    +
    +property ws_uri: str | None
    +

    Return the raw WS/WSS URI to connect to this provider, if supported.

    +
    + +
    + +
    +
    +class ape.api.providers.SubprocessProvider(*, name: str, network: NetworkAPI, provider_settings: Dict = {}, data_folder: Path, request_header: Dict, block_page_size: int = 100, concurrency: int = 4, PROCESS_WAIT_TIMEOUT: int = 15, process: Popen | None = None, is_stopping: bool = False, stdout_queue: JoinableQueue | None = None, stderr_queue: JoinableQueue | None = None)
    +

    Bases: ProviderAPI

    +

    A provider that manages a process, such as for ganache.

    +
    +
    +abstract build_command() List[str]
    +

    Get the command as a list of str. +Subclasses should override and add command arguments if needed.

    +
    +
    Returns:
    +

    The command to pass to subprocess.Popen.

    +
    +
    Return type:
    +

    List[str]

    +
    +
    +
    + +
    +
    +connect()
    +

    Start the process and connect to it. +Subclasses handle the connection-related tasks.

    +
    + +
    +
    +property connection_id: str | None
    +

    A connection ID to uniquely identify and manage multiple +connections to providers, especially when working with multiple +providers of the same type, like multiple Geth –dev nodes.

    +
    + +
    +
    +disconnect()
    +

    Stop the process if it exists. +Subclasses override this method to do provider-specific disconnection tasks.

    +
    + +
    +
    +abstract property process_name: str
    +

    The name of the process, such as Hardhat node.

    +
    + +
    +
    +start(timeout: int = 20)
    +

    Start the process and wait for its RPC to be ready.

    +
    + +
    +
    +stop()
    +

    Kill the process.

    +
    + +
    + +
    +
    +class ape.api.providers.TestProviderAPI(*, name: str, network: NetworkAPI, provider_settings: Dict = {}, data_folder: Path, request_header: Dict, block_page_size: int = 100, concurrency: int = 4)
    +

    Bases: ProviderAPI

    +

    An API for providers that have development functionality, such as snapshotting.

    +
    +
    +abstract mine(num_blocks: int = 1)
    +

    Advance by the given number of blocks.

    +
    +
    Parameters:
    +

    num_blocks (int) – The number of blocks allotted to mine. Defaults to 1.

    +
    +
    +
    + +
    +
    +abstract revert(snapshot_id: str | int | bytes)
    +

    Regress the current call using the given snapshot ID. +Allows developers to go back to a previous state.

    +
    +
    Parameters:
    +

    snapshot_id (str) – The snapshot ID.

    +
    +
    +
    + +
    +
    +abstract set_timestamp(new_timestamp: int)
    +

    Change the pending timestamp.

    +
    +
    Parameters:
    +

    new_timestamp (int) – The timestamp to set.

    +
    +
    Returns:
    +

    The new timestamp.

    +
    +
    Return type:
    +

    int

    +
    +
    +
    + +
    +
    +abstract snapshot() str | int | bytes
    +

    Record the current state of the blockchain with intent to later +call the method revert() +to go back to this point. This method is for local networks only.

    +
    +
    Returns:
    +

    The snapshot ID.

    +
    +
    Return type:
    +

    SnapshotID

    +
    +
    +
    + +
    + +
    +
    +class ape.api.providers.UpstreamProvider(*, name: str, network: NetworkAPI, provider_settings: Dict = {}, data_folder: Path, request_header: Dict, block_page_size: int = 100, concurrency: int = 4)
    +

    Bases: ProviderAPI

    +

    A provider that can also be set as another provider’s upstream.

    +
    + +
    +
    +

    Transactions

    +
    +
    +class ape.api.transactions.ReceiptAPI(*, contract_address: ChecksumAddress | None = None, block_number: int, gas_used: int, logs: List[dict] = [], status: int, txn_hash: str, transaction: TransactionAPI)
    +

    Bases: ExtraAttributesMixin, BaseInterfaceModel

    +

    An abstract class to represent a transaction receipt. The receipt +contains information about the transaction, such as the status +and required confirmations.

    +

    NOTE: Use a required_confirmations of 0 in your transaction +to not wait for confirmations.

    +

    Get a receipt by making transactions in ape, such as interacting with +a ape.contracts.base.ContractInstance.

    +
    +
    +await_confirmations() ReceiptAPI
    +

    Wait for a transaction to be considered confirmed.

    +
    +
    Returns:
    +

    The receipt that is now confirmed.

    +
    +
    Return type:
    +

    ReceiptAPI

    +
    +
    +
    + +
    +
    +abstract decode_logs(abi: List[EventABI | ContractEvent] | EventABI | ContractEvent | None = None) ContractLogContainer
    +

    Decode the logs on the receipt.

    +
    +
    Parameters:
    +

    abi (EventABI) – The ABI of the event to decode into logs.

    +
    +
    Returns:
    +

    List[ContractLog]

    +
    +
    +
    + +
    +
    +property events: ContractLogContainer
    +

    All the events that were emitted from this call.

    +
    + +
    +
    +property failed: bool
    +

    Whether the receipt represents a failing transaction. +Ecosystem plugins override this property when their receipts +are able to be failing.

    +
    + +
    +
    +property method_called: MethodABI | None
    +

    The method ABI of the method called to produce this receipt.

    +
    + +
    +
    +raise_for_status() NoReturn | None
    +

    Handle provider-specific errors regarding a non-successful +TransactionStatusEnum.

    +
    + +
    +
    +abstract property ran_out_of_gas: bool
    +

    Check if a transaction ran out of gas and failed.

    +
    +
    Returns:
    +

    True when the transaction failed and used the +same amount of gas as the given gas_limit.

    +
    +
    Return type:
    +

    bool

    +
    +
    +
    + +
    +
    +property return_value: Any
    +

    Obtain the final return value of the call. Requires tracing to function, +since this is not available from the receipt object.

    +
    + +
    +
    +abstract property total_fees_paid: int
    +

    The total amount of fees paid for the transaction.

    +
    + +
    +
    +property trace: Iterator[TraceFrame]
    +

    The trace of the transaction, if available from your provider.

    +
    + +
    +
    +track_coverage()
    +

    Track this receipt’s source code coverage in the on-going +session coverage report. Requires using a provider that supports +transaction traces to track full coverage. Else, is limited +to receipt-level tracking. This gets called when running tests with +the --coverage flag.

    +
    + +
    +
    +track_gas()
    +

    Track this receipt’s gas in the on-going session gas-report. +Requires using a provider that supports transaction traces +to get full data. Else, is limited to receipt-level data. +This gets called when running tests with the --gas flag.

    +
    + +
    + +
    +
    +class ape.api.transactions.TransactionAPI(*, chainId: int | None = 0, to: ChecksumAddress | None = None, sender: ChecksumAddress | None = None, gas: int | None = None, nonce: int | None = None, value: int = 0, data: HexBytes = HexBytes('0x'), type: int, max_fee: int | None = None, max_priority_fee: int | None = None, required_confirmations: int | None = None, signature: TransactionSignature | None = None)
    +

    Bases: BaseInterfaceModel

    +

    An API class representing a transaction. +Ecosystem plugins implement one or more of transaction APIs +depending on which schemas they permit, +such as typed-transactions from EIP-1559.

    +
    +
    +property receipt: ReceiptAPI | None
    +

    This transaction’s associated published receipt, if it exists.

    +
    + +
    +
    +abstract serialize_transaction() bytes
    +

    Serialize the transaction

    +
    + +
    +
    +property total_transfer_value: int
    +

    The total amount of WEI that a transaction could use. +Useful for determining if an account balance can afford +to submit the transaction.

    +
    + +
    +
    +property trace: Iterator[TraceFrame]
    +

    The transaction trace. Only works if this transaction was published +and you are using a provider that support tracing.

    +
    +
    Raises:
    +

    APINotImplementedError – When using a provider + that does not support tracing.

    +
    +
    +
    + +
    +
    +abstract property txn_hash: HexBytes
    +

    The calculated hash of the transaction.

    +
    + +
    + +
    +
    +

    Query

    +
    +
    +class ape.api.query.AccountTransactionQuery(*, columns: Sequence[str], account: ChecksumAddress, start_nonce: int = 0, stop_nonce: int)
    +

    Bases: _BaseQuery

    +

    A QueryType that collects properties of TransactionAPI over a range +of transactions made by account between start_nonce and stop_nonce.

    +
    + +
    +
    +class ape.api.query.BlockQuery(*, columns: Sequence[str], start_block: int = 0, stop_block: int, step: int = 1)
    +

    Bases: _BaseBlockQuery

    +

    A QueryType that collects properties of BlockAPI over a range of +blocks between start_block and stop_block.

    +
    + +
    +
    +class ape.api.query.BlockTransactionQuery(*, columns: Sequence[str], block_id: Any)
    +

    Bases: _BaseQuery

    +

    A QueryType that collects properties of TransactionAPI over a range of +transactions collected inside the BlockAPI` object represented by ``block_id.

    +
    + +
    +
    +class ape.api.query.ContractCreationQuery(*, columns: Sequence[str], start_block: int = 0, stop_block: int, step: int = 1, contract: ChecksumAddress)
    +

    Bases: _BaseBlockQuery

    +
    + +
    +
    +class ape.api.query.ContractEventQuery(*, columns: Sequence[str], start_block: int = 0, stop_block: int, step: int = 1, contract: List[ChecksumAddress] | ChecksumAddress, event: EventABI, search_topics: Dict[str, Any] | None = None)
    +

    Bases: _BaseBlockQuery

    +

    A QueryType that collects members from event over a range of +logs emitted by contract between start_block and stop_block.

    +
    + +
    +
    +class ape.api.query.ContractMethodQuery(*, columns: Sequence[str], start_block: int = 0, stop_block: int, step: int = 1, contract: ChecksumAddress, method: MethodABI, method_args: Dict[str, Any])
    +

    Bases: _BaseBlockQuery

    +

    A QueryType that collects return values from calling method in contract +over a range of blocks between start_block and stop_block.

    +
    + +
    +
    +class ape.api.query.QueryAPI
    +

    Bases: BaseInterface

    +
    +
    +abstract estimate_query(query: BlockQuery | BlockTransactionQuery | AccountTransactionQuery | ContractCreationQuery | ContractEventQuery | ContractMethodQuery) int | None
    +

    Estimation of time needed to complete the query. The estimation is returned +as an int representing milliseconds. A value of None indicates that the +query engine is not available for use or is unable to complete the query.

    +
    +
    Parameters:
    +

    query (QueryType) – Query to estimate.

    +
    +
    Returns:
    +

    Represents milliseconds, returns None if unable to execute.

    +
    +
    Return type:
    +

    Optional[int]

    +
    +
    +
    + +
    +
    +abstract perform_query(query: BlockQuery | BlockTransactionQuery | AccountTransactionQuery | ContractCreationQuery | ContractEventQuery | ContractMethodQuery) Iterator
    +

    Executes the query using best performing estimate_query query engine.

    +
    +
    Parameters:
    +

    query (QueryType) – query to execute

    +
    +
    Returns:
    +

    Iterator

    +
    +
    +
    + +
    +
    +update_cache(query: BlockQuery | BlockTransactionQuery | AccountTransactionQuery | ContractCreationQuery | ContractEventQuery | ContractMethodQuery, result: Iterator[BaseInterfaceModel])
    +

    Allows a query plugin the chance to update any cache using the results obtained +from other query plugins. Defaults to doing nothing, override to store cache data.

    +
    +
    Parameters:
    +
      +
    • query (QueryType) – query that was executed

    • +
    • result (Iterator) – the result of the query

    • +
    +
    +
    +
    + +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/methoddocs/cli.html b/v0.7.6/methoddocs/cli.html new file mode 100644 index 0000000000..49de5cccb9 --- /dev/null +++ b/v0.7.6/methoddocs/cli.html @@ -0,0 +1,803 @@ + + + + + + + ape.cli — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    ape.cli

    +

    The ape.cli namespace is a collection of click extensions and reusable implementations, such as common arguments / +options for accounts, project file-paths, and generic utilities. Use these resources in plugins as well as in CLI-based +scripts.

    +
    +

    Arguments

    +
    +
    +ape.cli.arguments.contract_file_paths_argument()
    +

    A click.argument representing contract source file paths. +This argument takes 0-to-many values.

    +

    The return type from the callback is a flattened list of +source file-paths.

    +
    + +
    +
    +ape.cli.arguments.existing_alias_argument(account_type: None | Sequence[AccountAPI] | Type[AccountAPI] | Callable[[AccountAPI], bool] = None, **kwargs)
    +

    A click.argument for an existing account alias.

    +
    +
    Parameters:
    +
      +
    • account_type (Type[AccountAPI], optional) – If given, limits the type of account the user may choose from.

    • +
    • **kwargs – click.argument overrides.

    • +
    +
    +
    +
    + +
    +
    +ape.cli.arguments.non_existing_alias_argument(**kwargs)
    +

    A click.argument for an account alias that does not yet exist in ape.

    +
    +
    Parameters:
    +

    **kwargs – click.argument overrides.

    +
    +
    +
    + +
    +
    +

    Choices

    +
    +
    +class ape.cli.choices.AccountAliasPromptChoice(key: None | Sequence[AccountAPI] | Type[AccountAPI] | Callable[[AccountAPI], bool] = None, prompt_message: str | None = None, name: str = 'account')
    +

    Bases: PromptChoice

    +

    Prompts the user to select an alias from their accounts. +Useful for adhoc scripts to lessen the need to hard-code aliases.

    +
    +
    +convert(value: Any, param: Parameter | None, ctx: Context | None) AccountAPI | None
    +

    Convert the value to the correct type. This is not called if +the value is None (the missing value).

    +

    This must accept string values from the command line, as well as +values that are already the correct type. It may also convert +other compatible types.

    +

    The param and ctx arguments may be None in certain +situations, such as when converting prompt input.

    +

    If the value cannot be converted, call fail() with a +descriptive message.

    +
    +
    Parameters:
    +
      +
    • value – The value to convert.

    • +
    • param – The parameter that is using this type to convert +its value. May be None.

    • +
    • ctx – The current context that arrived at this value. May +be None.

    • +
    +
    +
    +
    + +
    +
    +print_choices()
    +

    Echo the choices to the terminal.

    +
    + +
    +
    +select_account() AccountAPI
    +

    Returns the selected account.

    +
    +
    Returns:
    +

    AccountAPI

    +
    +
    +
    + +
    + +
    +
    +class ape.cli.choices.Alias(key: None | Sequence[AccountAPI] | Type[AccountAPI] | Callable[[AccountAPI], bool] = None)
    +

    Bases: Choice

    +

    A click.Choice for loading account aliases for the active project at runtime.

    +

    Provide an account_type to limit the type of account to choose from. +Defaults to all account types in choices().

    +
    +
    +name: str = 'alias'
    +

    the descriptive name of this type

    +
    + +
    + +
    +
    +class ape.cli.choices.NetworkChoice(case_sensitive=True, ecosystem: ~typing.List[str] | str | None = None, network: ~typing.List[str] | str | None = None, provider: ~typing.List[str] | str | None = None, base_type: ~typing.Type = <class 'ape.api.providers.ProviderAPI'>, callback: ~typing.Callable | None = None)
    +

    Bases: Choice

    +

    A click.Choice to provide network choice defaults for the active project.

    +

    Optionally provide a list of ecosystem names, network names, or provider names +to filter the results by.

    +

    This is used in network_option().

    +
    +
    +convert(value: Any, param: Parameter | None, ctx: Context | None) Any
    +

    Convert the value to the correct type. This is not called if +the value is None (the missing value).

    +

    This must accept string values from the command line, as well as +values that are already the correct type. It may also convert +other compatible types.

    +

    The param and ctx arguments may be None in certain +situations, such as when converting prompt input.

    +

    If the value cannot be converted, call fail() with a +descriptive message.

    +
    +
    Parameters:
    +
      +
    • value – The value to convert.

    • +
    • param – The parameter that is using this type to convert +its value. May be None.

    • +
    • ctx – The current context that arrived at this value. May +be None.

    • +
    +
    +
    +
    + +
    +
    +get_metavar(param)
    +

    Returns the metavar default for this param if it provides one.

    +
    + +
    + +
    +
    +class ape.cli.choices.OutputFormat(value)
    +

    Bases: Enum

    +

    An enum representing output formats, such as TREE or YAML. +Use this to select a subset of common output formats to use +when creating a output_format_choice().

    +
    +
    +TREE = 'TREE'
    +

    A rich text tree view of the data.

    +
    + +
    +
    +YAML = 'YAML'
    +

    A standard .yaml format of the data.

    +
    + +
    + +
    +
    +class ape.cli.choices.PromptChoice(choices: Sequence[str], name: str | None = None)
    +

    Bases: ParamType

    +

    A choice option or argument from user selection.

    +

    Usage example:

    +
    def choice_callback(ctx, param, value):
    +    return param.type.get_user_selected_choice()
    +
    +@click.command()
    +@click.option(
    +    "--choice",
    +    type=PromptChoice(["foo", "bar"]),
    +    callback=choice_callback,
    +)
    +def cmd(choice):
    +    click.echo(f"__expected_{choice}")
    +
    +
    +
    +
    +convert(value: Any, param: Parameter | None, ctx: Context | None) Any | None
    +

    Convert the value to the correct type. This is not called if +the value is None (the missing value).

    +

    This must accept string values from the command line, as well as +values that are already the correct type. It may also convert +other compatible types.

    +

    The param and ctx arguments may be None in certain +situations, such as when converting prompt input.

    +

    If the value cannot be converted, call fail() with a +descriptive message.

    +
    +
    Parameters:
    +
      +
    • value – The value to convert.

    • +
    • param – The parameter that is using this type to convert +its value. May be None.

    • +
    • ctx – The current context that arrived at this value. May +be None.

    • +
    +
    +
    +
    + +
    +
    +print_choices()
    +

    Echo the choices to the terminal.

    +
    + +
    + +
    +
    +ape.cli.choices.get_user_selected_account(prompt_message: str | None = None, account_type: None | Sequence[AccountAPI] | Type[AccountAPI] | Callable[[AccountAPI], bool] = None) AccountAPI
    +

    DEPRECATED: Use select_account() instead.

    +
    + +
    +
    +ape.cli.choices.output_format_choice(options: List[OutputFormat] | None = None) Choice
    +

    Returns a click.Choice() type for the given options.

    +
    +
    Parameters:
    +

    options (List[OutputFormat], optional) – Limit the formats to accept. Defaults to allowing all formats.

    +
    +
    Returns:
    +

    click.Choice

    +
    +
    +
    + +
    +
    +ape.cli.choices.select_account(prompt_message: str | None = None, key: None | Sequence[AccountAPI] | Type[AccountAPI] | Callable[[AccountAPI], bool] = None) AccountAPI
    +

    Prompt the user to pick from their accounts and return that account. +Use this method if you want to prompt users to select accounts _outside_ +of CLI options. For CLI options, use +account_option().

    +
    +
    Parameters:
    +
      +
    • prompt_message (Optional[str]) – Customize the prompt message.

    • +
    • key (Union[None, Type[AccountAPI], Callable[[AccountAPI], bool]]) – If given, the user may only select a matching account. You can provide +a list of accounts, an account class type, or a callable for filtering +the accounts.

    • +
    +
    +
    Returns:
    +

    AccountAPI

    +
    +
    +
    + +
    +
    +

    Commands

    +
    +
    +class ape.cli.commands.ConnectedProviderCommand(*args, **kwargs)
    +

    Bases: Command

    +

    A command that uses the network_option(). +It will automatically set the network for the duration of the command execution.

    +
    +
    +invoke(ctx: Context) Any
    +

    Given a context, this invokes the attached callback (if it exists) +in the right way.

    +
    + +
    +
    +parse_args(ctx: Context, args: List[str]) List[str]
    +

    Given a context and a list of arguments this creates the parser +and parses the arguments, then modifies the context as necessary. +This is automatically invoked by make_context().

    +
    + +
    + +
    +
    +class ape.cli.commands.NetworkBoundCommand(*args, **kwargs)
    +

    Bases: ConnectedProviderCommand

    +
    + +
    +
    +

    Options

    +
    +
    +class ape.cli.options.ApeCliContextObject
    +

    Bases: ManagerAccessMixin, dict

    +

    A click context object class. Use via ape_cli_context(). +It provides common CLI utilities for ape, such as logging or +access to the managers.

    +
    +
    +static abort(msg: str, base_error: Exception | None = None) NoReturn
    +

    End execution of the current command invocation.

    +
    +
    Parameters:
    +
      +
    • msg (str) – A message to output to the terminal.

    • +
    • base_error (Exception, optional) – Optionally provide +an error to preserve the exception stack.

    • +
    +
    +
    +
    + +
    + +
    +
    +class ape.cli.options.NetworkOption(*args, **kwargs)
    +

    Bases: Option

    +

    The class used in :meth:~ape.cli.options.network_option.

    +
    + +
    +
    +ape.cli.options.account_option(account_type: None | Sequence[AccountAPI] | Type[AccountAPI] | Callable[[AccountAPI], bool] = None) Callable
    +

    A CLI option that accepts either the account alias or the account number. +If not given anything, it will prompt the user to select an account.

    +
    + +
    +
    +ape.cli.options.ape_cli_context(default_log_level: str = 'INFO', obj_type: ~typing.Type = <class 'ape.cli.options.ApeCliContextObject'>) Callable
    +

    A click context object with helpful utilities. +Use in your commands to get access to common utility features, +such as logging or accessing managers.

    +
    +
    Parameters:
    +
      +
    • default_log_level (str) – The log-level value to pass to +verbosity_option().

    • +
    • obj_type (Type) – The context object type. Defaults to +ApeCliContextObject. Sub-class +the context to extend its functionality in your CLIs, +such as if you want to add additional manager classes +to the context.

    • +
    +
    +
    +
    + +
    +
    +ape.cli.options.contract_option(help=None, required=False, multiple=False) Callable
    +

    Contract(s) from the current project. +If you pass multiple=True, you will get a list of contract types from the callback.

    +
    +

    ContractError: In the callback when it fails to load the contracts.

    +
    +
    + +
    +
    +ape.cli.options.incompatible_with(incompatible_opts) Type[Option]
    +

    Factory for creating custom click.Option subclasses that +enforce incompatibility with the option strings passed to this function.

    +

    Usage example:

    +
    import click
    +
    +@click.command()
    +@click.option("--option", cls=incompatible_with(["other_option"]))
    +def cmd(option, other_option):
    +    ....
    +
    +
    +
    + +
    +
    +ape.cli.options.network_option(default: str | Callable | None = 'auto', ecosystem: List[str] | str | None = None, network: List[str] | str | None = None, provider: List[str] | str | None = None, required: bool = False, **kwargs) Callable
    +

    A click.option for specifying a network.

    +
    +
    Parameters:
    +
      +
    • default (Optional[str]) – Optionally, change which network to +use as the default. Defaults to how ape normally +selects a default network unless required=True, then defaults to None.

    • +
    • ecosystem (Optional[Union[List[str], str]]) – Filter the options by ecosystem. +Defaults to getting all ecosystems.

    • +
    • network (Optional[Union[List[str], str]]) – Filter the options by network. +Defaults to getting all networks in ecosystems.

    • +
    • provider (Optional[Union[List[str], str]]) – Filter the options by provider. +Defaults to getting all providers in networks.

    • +
    • required (bool) – Whether the option is required. Defaults to False. +When set to True, the default value is None.

    • +
    • kwargs – Additional overrides to click.option.

    • +
    +
    +
    +
    + +
    +
    +ape.cli.options.output_format_option(default: OutputFormat = OutputFormat.TREE) Callable
    +

    A click.option for specifying a format to use when outputting data.

    +
    +
    Parameters:
    +

    default (OutputFormat) – Defaults to TREE format.

    +
    +
    +
    + +
    +
    +ape.cli.options.skip_confirmation_option(help='') Callable
    +

    A click.option for skipping confirmation (--yes).

    +
    +
    Parameters:
    +

    help (str) – CLI option help text. Defaults to "".

    +
    +
    +
    + +
    +
    +ape.cli.options.verbosity_option(cli_logger: ApeLogger | None = None, default: str = 'INFO') Callable
    +

    A decorator that adds a –verbosity, -v option to the decorated +command.

    +
    + +
    +
    +

    Parameter Types

    +
    +
    +class ape.cli.paramtype.AllFilePaths(*args, **kwargs)
    +

    Bases: Path

    +

    Either all the file paths in the given directory, +or a list containing only the given file.

    +
    +
    +convert(value: Any, param: Parameter | None, ctx: Context | None) List[Path]
    +

    Convert the value to the correct type. This is not called if +the value is None (the missing value).

    +

    This must accept string values from the command line, as well as +values that are already the correct type. It may also convert +other compatible types.

    +

    The param and ctx arguments may be None in certain +situations, such as when converting prompt input.

    +

    If the value cannot be converted, call fail() with a +descriptive message.

    +
    +
    Parameters:
    +
      +
    • value – The value to convert.

    • +
    • param – The parameter that is using this type to convert +its value. May be None.

    • +
    • ctx – The current context that arrived at this value. May +be None.

    • +
    +
    +
    +
    + +
    + +
    +
    +class ape.cli.paramtype.Path(*args, **kwargs)
    +

    Bases: Path

    +

    This class exists to encourage the consistent usage +of pathlib.Path for path_type.

    +
    + +
    +
    +

    Utilities

    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/methoddocs/contracts.html b/v0.7.6/methoddocs/contracts.html new file mode 100644 index 0000000000..74363e724b --- /dev/null +++ b/v0.7.6/methoddocs/contracts.html @@ -0,0 +1,721 @@ + + + + + + + ape.contracts — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    ape.contracts

    +
    +
    +class ape.contracts.base.ContractTypeWrapper
    +

    Bases: ManagerAccessMixin

    +
    +
    +decode_input(calldata: bytes) Tuple[str, Dict[str, Any]]
    +

    Decode the given calldata using this contract. +If the calldata has a method ID prefix, Ape will detect it and find +the corresponding method, else it will error.

    +
    +
    Parameters:
    +

    calldata (bytes) – The calldata to decode.

    +
    +
    Returns:
    +

    A tuple containing the method selector +along a mapping of input names to their decoded values. +If an input does not have a number, it will have the stringified +index as its key.

    +
    +
    Return type:
    +

    Tuple[str, Dict[str, Any]]

    +
    +
    +
    + +
    +
    +property identifier_lookup: Dict[str, ConstructorABI | MethodABI | EventABI | StructABI | ErrorABI]
    +

    Provides a mapping of method, error, and event selector identifiers to +ABI Types.

    +
    + +
    +
    +property selector_identifiers: Dict[str, str]
    +

    Provides a mapping of function signatures (pre-hashed selectors) to +selector identifiers.

    +
    + +
    +
    +property source_path: Path | None
    +

    Returns the path to the local contract if determined that this container +belongs to the active project by cross checking source_id.

    +

    WARN: The will return a path if the contract has the same +source ID as one in the current project. That does not necessarily mean +they are the same contract, however.

    +
    + +
    + +
    +
    +class ape.contracts.base.ContractInstance(address: ChecksumAddress, contract_type: ContractType, txn_hash: str | None = None)
    +

    Bases: BaseAddress, ContractTypeWrapper

    +

    An interactive instance of a smart contract. +After you deploy a contract using the deploy method, +you get back a contract instance.

    +

    Usage example:

    +
    from ape import accounts, project
    +
    +a = accounts.load("alias")  # Load an account by alias
    +contract = a.deploy(project.MyContract)  # The result of 'deploy()' is a ContractInstance
    +
    +
    +
    +
    +__call__(*args, **kwargs) ReceiptAPI
    +

    Call this address directly. For contracts, this may mean invoking their +default handler.

    +
    +
    Parameters:
    +

    **kwargs – Transaction arguments, such as sender or data.

    +
    +
    Returns:
    +

    ReceiptAPI

    +
    +
    +
    + +
    +
    +__dir__() List[str]
    +

    Display methods to IPython on c.[TAB] tab completion.

    +
    +
    Returns:
    +

    List[str]

    +
    +
    +
    + +
    +
    +__getattr__(attr_name: str) Any
    +

    Access a method, property, event, or error on the contract using . access.

    +

    Usage example:

    +
    result = contract.vote()  # Implies a method named "vote" exists on the contract.
    +
    +
    +
    +
    Parameters:
    +

    attr_name (str) – The name of the method or property to access.

    +
    +
    Returns:
    +

    The return value from the contract call, or a transaction receipt.

    +
    +
    Return type:
    +

    Any

    +
    +
    +
    + +
    +
    +property address: ChecksumAddress
    +

    The address of the contract.

    +
    +
    Returns:
    +

    AddressType

    +
    +
    +
    + +
    +
    +call_view_method(method_name: str, *args, **kwargs) Any
    +

    Call a contract’s view function directly using the method_name. +This is helpful in the scenario where the contract has a +method name matching an attribute of the +BaseAddress class, such as nonce +or balance

    +
    +
    Parameters:
    +
      +
    • method_name (str) – The contract method name to be called

    • +
    • *args – Contract method arguments.

    • +
    • **kwargs – Transaction values, such as value or sender

    • +
    +
    +
    Returns:
    +

    Output of smart contract view call.

    +
    +
    Return type:
    +

    Any

    +
    +
    +
    + +
    +
    +get_error_by_signature(signature: str) Type[CustomError]
    +

    Get an error by its signature, similar to +get_event_by_signature().

    +
    +
    Parameters:
    +

    signature (str) – The signature of the error.

    +
    +
    Returns:
    +

    CustomError

    +
    +
    +
    + +
    +
    +get_event_by_signature(signature: str) ContractEvent
    +

    Get an event by its signature. Most often, you can use the +__getattr__() +method on this class to access events. However, in the case +when you have more than one event with the same name, such +as the case where one event is coming from a base contract, +you can use this method to access the respective events.

    +
    +
    Parameters:
    +

    signature (str) – The signature of the event.

    +
    +
    Returns:
    +

    ContractEvent

    +
    +
    +
    + +
    +
    +invoke_transaction(method_name: str, *args, **kwargs) ReceiptAPI
    +

    Call a contract’s function directly using the method_name. +This function is for non-view function’s which may change +contract state and will execute a transaction. +This is helpful in the scenario where the contract has a +method name matching an attribute of the +BaseAddress class, such as nonce +or balance

    +
    +
    Parameters:
    +
      +
    • method_name (str) – The contract method name to be called

    • +
    • *args – Contract method arguments.

    • +
    • **kwargs – Transaction values, such as value or sender

    • +
    +
    +
    Returns:
    +

    Output of smart contract interaction.

    +
    +
    Return type:
    +

    ReceiptAPI

    +
    +
    +
    + +
    +
    +property receipt: ReceiptAPI
    +

    The receipt associated with deploying the contract instance, +if it is known and exists.

    +
    + +
    + +
    +
    +class ape.contracts.base.ContractContainer(contract_type: ContractType)
    +

    Bases: ContractTypeWrapper

    +

    A wrapper around the contract type that has access to the provider. +When you import your contracts from the ape.managers.project.ProjectManager, you +are using this class.

    +

    Usage example:

    +
    from ape import project
    +
    +contract_container = project.MyContract  # Assuming there is a contract named "MyContract"
    +
    +
    +
    +
    +__call__(*args, **kwargs) TransactionAPI
    +

    Call self as a function.

    +
    + +
    +
    +__getattr__(name: str) Any
    +

    Access a contract error or event type via its ABI name using . access.

    +
    +
    Parameters:
    +

    name (str) – The name of the event or error.

    +
    +
    Returns:
    +

    ContractEvent or a subclass of CustomError +or any real attribute of the class.

    +
    +
    +
    + +
    +
    +at(address: ChecksumAddress, txn_hash: str | None = None) ContractInstance
    +

    Get a contract at the given address.

    +

    Usage example:

    +
    from ape import project
    +
    +my_contract = project.MyContract.at("0xAbC1230001112223334445566611855443322111")
    +
    +
    +
    +
    Parameters:
    +
      +
    • address (str) – The address to initialize a contract. +NOTE: Things will not work as expected if the contract is not actually +deployed to this address or if the contract at the given address has +a different ABI than contract_type.

    • +
    • txn_hash (str) – The hash of the transaction that deployed the contract, if +available. Defaults to None.

    • +
    +
    +
    Returns:
    +

    ContractInstance

    +
    +
    +
    + +
    +
    +deploy(*args, publish: bool = False, **kwargs) ContractInstance
    +

    Deploy a contract.

    +
    +
    Parameters:
    +
      +
    • *args (Any) – The contract’s constructor arguments as Python types.

    • +
    • publish (bool) – Whether to also perform contract-verification. +Defaults to False.

    • +
    +
    +
    Returns:
    +

    ContractInstance

    +
    +
    +
    + +
    +
    +property deployments
    +

    Contract deployments.

    +

    Usage example:

    +
    # Get the latest deployment
    +my_contract = project.MyContract.deployments[-1]
    +
    +
    +
    + +
    + +
    +
    +class ape.contracts.base.ContractEvent
    +

    Bases: BaseInterfaceModel

    +

    The types of events on a ContractInstance. +Use the event types via . access on the contract instances.

    +

    Usage example:

    +
    # 'my_contract' refers to a ContractInstance in this case.
    +my_event_type = my_contract.MyEvent
    +
    +
    +
    +
    +__call__(*args: Any, **kwargs: Any) MockContractLog
    +

    Call self as a function.

    +
    + +
    +
    +__iter__() Iterator[ContractLog]
    +

    Get all logs that have occurred for this event.

    +
    + +
    +
    +from_receipt(receipt: ReceiptAPI) List[ContractLog]
    +

    Get all the events from the given receipt.

    +
    +
    Parameters:
    +

    receipt (ReceiptAPI) – The receipt containing the logs.

    +
    +
    Returns:
    +

    List[ContractLog]

    +
    +
    +
    + +
    +
    +property name: str
    +

    The name of the contract event, as defined in the contract.

    +
    + +
    +
    +poll_logs(start_block: int | None = None, stop_block: int | None = None, required_confirmations: int | None = None, new_block_timeout: int | None = None) Iterator[ContractLog]
    +

    Poll new blocks. Optionally set a start block to include historical blocks.

    +

    NOTE: This is a daemon method; it does not terminate unless an exception occurs.

    +

    Usage example:

    +
    for new_log in contract.MyEvent.poll_logs():
    +    print(f"New event log found: block_number={new_log.block_number}")
    +
    +
    +
    +
    Parameters:
    +
      +
    • start_block (Optional[int]) – The block number to start with. Defaults to the pending +block number.

    • +
    • stop_block (Optional[int]) – Optionally set a future block number to stop at. +Defaults to never-ending.

    • +
    • required_confirmations (Optional[int]) – The amount of confirmations to wait +before yielding the block. The more confirmations, the less likely a reorg will occur. +Defaults to the network’s configured required confirmations.

    • +
    • new_block_timeout (Optional[int]) – The amount of time to wait for a new block before +quitting. Defaults to 10 seconds for local networks or 50 * block_time for live +networks.

    • +
    +
    +
    Returns:
    +

    Iterator[ContractLog]

    +
    +
    +
    + +
    +
    +query(*columns: str, start_block: int = 0, stop_block: int | None = None, step: int = 1, engine_to_use: str | None = None) DataFrame
    +

    Iterate through blocks for log events

    +
    +
    Parameters:
    +
      +
    • *columns (str) – *-based argument for columns in the DataFrame to +return.

    • +
    • start_block (int) – The first block, by number, to include in the +query. Defaults to 0.

    • +
    • stop_block (Optional[int]) – The last block, by number, to include +in the query. Defaults to the latest block.

    • +
    • step (int) – The number of blocks to iterate between block numbers. +Defaults to 1.

    • +
    • engine_to_use (Optional[str]) – query engine to use, bypasses query +engine selection algorithm.

    • +
    +
    +
    Returns:
    +

    pd.DataFrame

    +
    +
    +
    + +
    +
    +range(start_or_stop: int, stop: int | None = None, search_topics: Dict[str, Any] | None = None, extra_addresses: List | None = None) Iterator[ContractLog]
    +

    Search through the logs for this event using the given filter parameters.

    +
    +
    Parameters:
    +
      +
    • start_or_stop (int) – When also given stop, this is the earliest +block number in the desired log set. +Otherwise, it is the total amount of blocks to get starting from 0.

    • +
    • stop (Optional[int]) – The latest block number in the +desired log set. Defaults to delegating to provider.

    • +
    • search_topics (Optional[Dict]) – Search topics, such as indexed event inputs, +to query by. Defaults to getting all events.

    • +
    • extra_addresses (Optional[List[AddressType]]) – Additional contract addresses containing the same event type. Defaults to +only looking at the contract instance where this event is defined.

    • +
    +
    +
    Returns:
    +

    Iterator[ContractLog]

    +
    +
    +
    + +
    + +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/methoddocs/exceptions.html b/v0.7.6/methoddocs/exceptions.html new file mode 100644 index 0000000000..8894a48557 --- /dev/null +++ b/v0.7.6/methoddocs/exceptions.html @@ -0,0 +1,631 @@ + + + + + + + ape.exceptions — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    ape.exceptions

    +
    +
    +exception ape.exceptions.APINotImplementedError
    +

    Bases: ApeException, NotImplementedError

    +

    An error raised when an API class does not implement an abstract method.

    +
    + +
    +
    +exception ape.exceptions.Abort(message: str | None = None)
    +

    Bases: ClickException

    +

    A wrapper around a CLI exception. When you raise this error, +the error is nicely printed to the terminal. This is +useful for all user-facing errors.

    +
    +
    +show(file=None)
    +

    Override default show to print CLI errors in red text.

    +
    + +
    + +
    +
    +exception ape.exceptions.AccountsError
    +

    Bases: ApeException

    +

    Raised when a problem occurs when using accounts.

    +
    + +
    +
    +exception ape.exceptions.AliasAlreadyInUseError(alias: str)
    +

    Bases: AccountsError

    +

    Raised when attempting to add an account using an alias +that already maps to another account.

    +
    + +
    +
    +exception ape.exceptions.ApeAttributeError
    +

    Bases: ProjectError, AttributeError

    +

    Raised when trying to access items via . access.

    +
    + +
    +
    +exception ape.exceptions.ApeException
    +

    Bases: Exception

    +

    An exception raised by ape.

    +
    + +
    +
    +exception ape.exceptions.ApeIndexError
    +

    Bases: ApeException, IndexError

    +

    An exception that is also an IndexError. +Useful for nicely displaying IndexErrors.

    +
    + +
    +
    +exception ape.exceptions.ArgumentsLengthError(arguments_length: int, inputs: MethodABI | ConstructorABI | int | List | None = None, **kwargs)
    +

    Bases: ContractDataError

    +

    Raised when calling a contract method with the wrong number of arguments.

    +
    + +
    +
    +exception ape.exceptions.BlockNotFoundError(block_id: BlockID, reason: str | None = None)
    +

    Bases: ProviderError

    +

    Raised when unable to find a block.

    +
    + +
    +
    +exception ape.exceptions.ChainError
    +

    Bases: ApeException

    +

    Raised when problems occur in the ChainManager.

    +
    + +
    +
    +exception ape.exceptions.CompilerError
    +

    Bases: ApeException

    +

    Raised when unable to compile.

    +
    + +
    +
    +exception ape.exceptions.ConfigError
    +

    Bases: ApeException

    +

    Raised when a problem occurs from the configuration file.

    +
    + +
    +
    +exception ape.exceptions.ContractDataError
    +

    Bases: ApeException

    +

    Raised when issues occur with local contract. +NOTE: This error has nothing to do with on-chain +contract logic errors; it is more about ABI-related +issues and alike.

    +
    + +
    +
    +exception ape.exceptions.ContractLogicError(revert_message: str | None = None, txn: TransactionAPI | ReceiptAPI | None = None, trace: Iterator[TraceFrame] | None = None, contract_address: AddressType | None = None, source_traceback: SourceTraceback | None = None, base_err: Exception | None = None)
    +

    Bases: VirtualMachineError

    +

    Raised when there is a contract-defined revert, +such as from an assert/require statement.

    +
    +
    +property dev_message: str | None
    +

    The dev-string message of the exception.

    +
    +
    Raises:
    +

    ValueError – When unable to get dev message.

    +
    +
    +
    + +
    +
    +classmethod from_error(err: Exception)
    +

    Creates this class from the error message of the given +error.

    +

    This should be overridden whenever possible to handle +provider-specific use-cases for raising this error.

    +
    + +
    + +
    +
    +exception ape.exceptions.ContractNotFoundError(address: AddressType, has_explorer: bool, provider_name: str)
    +

    Bases: ChainError

    +

    Raised when a contract is not found at an address.

    +
    + +
    +
    +exception ape.exceptions.ConversionError
    +

    Bases: ApeException

    +

    Raised when unable to convert a value.

    +
    + +
    +
    +exception ape.exceptions.CustomError(abi: ErrorABI, inputs: Dict[str, Any], txn: TransactionAPI | ReceiptAPI | None = None, trace: Iterator[TraceFrame] | None = None, contract_address: AddressType | None = None, base_err: Exception | None = None, source_traceback: SourceTraceback | None = None)
    +

    Bases: ContractLogicError

    +

    An error defined in a smart contract.

    +
    +
    +property name: str
    +

    The name of the error.

    +
    + +
    + +
    +
    +exception ape.exceptions.DecodingError(message: str | None = None)
    +

    Bases: ContractDataError

    +

    Raised when issues occur while decoding data from +a contract call, transaction, or event.

    +
    + +
    +
    +exception ape.exceptions.EcosystemNotFoundError(ecosystem: str, options: Collection[str] | None = None)
    +

    Bases: NetworkError

    +

    Raised when the ecosystem with the given name was not found.

    +
    + +
    +
    +exception ape.exceptions.MethodNonPayableError
    +

    Bases: ContractDataError

    +

    Raises when sending funds to a non-payable method

    +
    + +
    +
    +exception ape.exceptions.NetworkError
    +

    Bases: ApeException

    +

    Raised when a problem occurs when using blockchain networks.

    +
    + +
    +
    +exception ape.exceptions.NetworkMismatchError(chain_id: int, network: NetworkAPI)
    +

    Bases: ProviderError

    +

    Raised when connecting a provider to the wrong network.

    +
    + +
    +
    +exception ape.exceptions.NetworkNotFoundError(network: str, ecosystem: str | None = None, options: Collection[str] | None = None)
    +

    Bases: NetworkError

    +

    Raised when the network with the given name was not found.

    +
    + +
    +
    +exception ape.exceptions.OutOfGasError(code: int | None = None, txn: TransactionAPI | ReceiptAPI | None = None, base_err: Exception | None = None)
    +

    Bases: VirtualMachineError

    +

    Raised when detecting a transaction failed because it ran +out of gas.

    +
    + +
    +
    +exception ape.exceptions.ProjectError
    +

    Bases: ApeException

    +

    Raised when problems occur in a project.

    +
    + +
    +
    +exception ape.exceptions.ProviderError
    +

    Bases: ApeException

    +

    Raised when a problem occurs when using providers.

    +
    + +
    +
    +exception ape.exceptions.ProviderNotConnectedError
    +

    Bases: ProviderError

    +

    Raised when not connected to a provider.

    +
    + +
    +
    +exception ape.exceptions.ProviderNotFoundError(provider: str, network: str | None = None, ecosystem: str | None = None, options: Collection[str] | None = None)
    +

    Bases: NetworkError

    +

    Raised when the provider with the given name was not found.

    +
    + +
    +
    +exception ape.exceptions.QueryEngineError
    +

    Bases: ApeException

    +

    Raised when issues occur in a query engine.

    +
    + +
    +
    +exception ape.exceptions.RPCTimeoutError(provider: SubprocessProvider, seconds: int | None = None, exception: Exception | None = None, *args, **kwargs)
    +

    Bases: SubprocessTimeoutError

    +
    + +
    +
    +exception ape.exceptions.SignatureError
    +

    Bases: AccountsError

    +

    Raised when there are issues with signing.

    +
    + +
    +
    +exception ape.exceptions.SubprocessError
    +

    Bases: ApeException

    +

    An error raised whilst managing a subprocess.

    +
    + +
    +
    +exception ape.exceptions.SubprocessTimeoutError(provider: SubprocessProvider, message: str | None = None, seconds: int | None = None, exception: Exception | None = None, *args, **kwargs)
    +

    Bases: SubprocessError

    +

    A context-manager exception that raises if its operations exceed +the given timeout seconds.

    +

    This implementation was inspired from py-geth.

    +
    + +
    +
    +exception ape.exceptions.TransactionError(message: str | None = None, base_err: Exception | None = None, code: int | None = None, txn: TransactionAPI | ReceiptAPI | None = None, trace: Iterator[TraceFrame] | None = None, contract_address: AddressType | None = None, source_traceback: SourceTraceback | None = None)
    +

    Bases: ApeException

    +

    Raised when issues occur related to transactions.

    +
    + +
    +
    +exception ape.exceptions.TransactionNotFoundError(txn_hash: str, error_messsage: str | None = None)
    +

    Bases: ProviderError

    +

    Raised when unable to find a transaction.

    +
    + +
    +
    +exception ape.exceptions.UnknownSnapshotError(snapshot_id: SnapshotID)
    +

    Bases: ChainError

    +

    Raised when given an unknown snapshot ID.

    +
    + +
    +
    +exception ape.exceptions.UnknownVersionError(version: str, name: str)
    +

    Bases: ProjectError

    +

    Raised when trying to install an unknown version of a package.

    +
    + +
    +
    +exception ape.exceptions.VirtualMachineError(message: str | None = None, base_err: Exception | None = None, code: int | None = None, txn: TransactionAPI | ReceiptAPI | None = None, trace: Iterator[TraceFrame] | None = None, contract_address: AddressType | None = None, source_traceback: SourceTraceback | None = None)
    +

    Bases: TransactionError

    +

    Raised when a transaction error occurs in a virtual machine.

    +
    + +
    +
    +ape.exceptions.handle_ape_exception(err: ApeException, base_paths: List[Path]) bool
    +

    Handle a transaction error by showing relevant stack frames, +including custom contract frames added to the exception. +This method must be called within an except block or with +an exception on the exc-stack.

    +
    +
    Parameters:
    +
      +
    • err (TransactionError) – The transaction error +being handled.

    • +
    • base_paths (Optional[List[Path]]) – Optionally include additional +source-path prefixes to use when finding relevant frames.

    • +
    +
    +
    Returns:
    +

    True if outputted something.

    +
    +
    Return type:
    +

    bool

    +
    +
    +
    + +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/methoddocs/managers.html b/v0.7.6/methoddocs/managers.html new file mode 100644 index 0000000000..bd2f190c3c --- /dev/null +++ b/v0.7.6/methoddocs/managers.html @@ -0,0 +1,3092 @@ + + + + + + + ape.managers — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    ape.managers

    +
    +

    Accounts

    +
    +
    +class ape.managers.accounts.AccountManager
    +

    The AccountManager is a container of containers for +AccountAPI objects. +All containers must subclass AccountContainerAPI +and are treated as singletons.

    +

    Import the accounts manager singleton from the root ape namespace.

    +

    Usage example:

    +
    from ape import accounts  # "accounts" is the AccountManager singleton
    +
    +my_accounts = accounts.load("dev")
    +
    +
    +
    +
    +__contains__(address: ChecksumAddress) bool
    +

    Determine if the given address matches an account in ape.

    +
    +
    Parameters:
    +

    address (AddressType) – The address to check.

    +
    +
    Returns:
    +

    True when the given address is found.

    +
    +
    Return type:
    +

    bool

    +
    +
    +
    + +
    +
    +__len__() int
    +

    The number of accounts managed by all account plugins.

    +
    +
    Returns:
    +

    int

    +
    +
    +
    + +
    +
    +property aliases: Iterator[str]
    +

    All account aliases from every account-related plugin. The “alias” +is part of the AccountAPI. Use the +account alias to load an account using method +load().

    +
    +
    Returns:
    +

    Iterator[str]

    +
    +
    +
    + +
    +
    +property containers: Dict[str, AccountContainerAPI]
    +

    A dict of all AccountContainerAPI instances +across all installed plugins.

    +
    +
    Returns:
    +

    dict[str, AccountContainerAPI]

    +
    +
    +
    + +
    +
    +get_accounts_by_type(type_: Type[AccountAPI]) List[AccountAPI]
    +

    Get a list of accounts by their type.

    +
    +
    Parameters:
    +

    type (Type[AccountAPI]) – The type of account +to get.

    +
    +
    Returns:
    +

    List[AccountAPI]

    +
    +
    +
    + +
    +
    +load(alias: str) AccountAPI
    +

    Get an account by its alias.

    +
    +
    Raises:
    +

    IndexError – When there is no local account with the given alias.

    +
    +
    Returns:
    +

    AccountAPI

    +
    +
    +
    + +
    +
    +property test_accounts: TestAccountManager
    +

    Accounts generated from the configured test mnemonic. These accounts +are also the subject of a fixture available in the test plugin called +accounts. Configure these accounts, such as the mnemonic and / or +number-of-accounts using the test section of the ape-config.yaml file.

    +

    Usage example:

    +
    def test_my_contract(accounts):
    +   # The "accounts" fixture uses the AccountsManager.test_accounts()
    +   sender = accounts[0]
    +   receiver = accounts[1]
    +   ...
    +
    +
    +
    +
    Returns:
    +

    TestAccountContainer

    +
    +
    +
    + +
    + +
    +
    +class ape.managers.accounts.TestAccountManager(iterable=(), /)
    +
    +
    +__contains__(address: ChecksumAddress) bool
    +

    Return key in self.

    +
    + +
    +
    +__getitem__(account_id)
    +
    +__getitem__(account_id: int)
    +
    +__getitem__(account_id: slice)
    +
    +__getitem__(account_str: str)
    +

    x.__getitem__(y) <==> x[y]

    +
    + +
    +
    +__iter__() Iterator[AccountAPI]
    +

    Implement iter(self).

    +
    + +
    +
    +__len__() int
    +

    Return len(self).

    +
    + +
    + +
    +
    +

    Compilers

    +
    +
    +class ape.managers.compilers.CompilerManager
    +

    The singleton that manages CompilerAPI instances. +Each compiler plugin typically contains a single CompilerAPI.

    +

    NOTE: Typically, users compile their projects using the CLI via ape compile, +which uses the CompilerAPI under-the-hood.

    +

    Usage example:

    +
    from ape import compilers  # "compilers" is the CompilerManager singleton
    +
    +
    +
    +
    +can_trace_source(filename: str) bool
    +

    Check if Ape is able trace the source lines for the given file. +Checks that both the compiler is registered and that it supports +the trace_source() API method.

    +
    +
    Parameters:
    +

    filename (str) – The file to check.

    +
    +
    Returns:
    +

    True when the source is traceable.

    +
    +
    Return type:
    +

    bool

    +
    +
    +
    + +
    +
    +compile(contract_filepaths: Sequence[Path | str], settings: Dict | None = None) Dict[str, ContractType]
    +

    Invoke ape.ape.compiler.CompilerAPI.compile() for each of the given files. +For example, use the ape-solidity plugin +to compile '.sol' files.

    +
    +
    Raises:
    +

    CompilerError – When there is no compiler found for the given + file-extension as well as when there are contract-type collisions across compilers.

    +
    +
    Parameters:
    +
      +
    • contract_filepaths (Sequence[Union[pathlib.Path], str]) – The files to compile, +as pathlib.Path objects or path-strs.

    • +
    • settings (Optional[Dict]) – Adhoc compiler settings. Defaults to None. +Ensure the compiler name key is present in the dict for it to work.

    • +
    +
    +
    Returns:
    +

    A mapping of contract names to their type.

    +
    +
    Return type:
    +

    Dict[str, ContractType]

    +
    +
    +
    + +
    +
    +compile_source(compiler_name: str, code: str, settings: Dict | None = None, **kwargs) ContractContainer
    +

    Compile the given program.

    +

    Usage example:

    +
    code = '[{"name":"foo","type":"fallback", "stateMutability":"nonpayable"}]'
    +contract_type = compilers.compile_source(
    +    "ethpm",
    +    code,
    +    contractName="MyContract",
    +)
    +
    +
    +
    +
    Parameters:
    +
      +
    • compiler_name (str) – The name of the compiler to use.

    • +
    • code (str) – The source code to compile.

    • +
    • settings (Optional[Dict]) – Compiler settings.

    • +
    • **kwargs (Any) – Additional overrides for the ethpm_types.ContractType model.

    • +
    +
    +
    Returns:
    +

    A contract container ready to be deployed.

    +
    +
    Return type:
    +

    ContractContainer

    +
    +
    +
    + +
    +
    +enrich_error(err: ContractLogicError) ContractLogicError
    +

    Enrich a contract logic error using compiler information, such +known PC locations for compiler runtime errors.

    +
    +
    Parameters:
    +

    err (ContractLogicError) – The exception +to enrich.

    +
    +
    Returns:
    +

    The enriched exception.

    +
    +
    Return type:
    +

    ContractLogicError

    +
    +
    +
    + +
    +
    +flatten_contract(path: Path) Content
    +

    Get the flattened version of a contract via its source path. +Delegates to the matching CompilerAPI.

    +
    +
    Parameters:
    +

    path (pathlib.Path) – The source path of the contract.

    +
    +
    Returns:
    +

    The flattened contract content.

    +
    +
    Return type:
    +

    ethpm_types.source.Content

    +
    +
    +
    + +
    +
    +get_imports(contract_filepaths: Sequence[Path], base_path: Path | None = None) Dict[str, List[str]]
    +

    Combine import dicts from all compilers, where the key is a contract’s source_id +and the value is a list of import source_ids.

    +
    +
    Parameters:
    +
      +
    • contract_filepaths (Sequence[pathlib.Path]) – A list of source file paths to compile.

    • +
    • base_path (Optional[pathlib.Path]) – Optionally provide the base path, such as the +project contracts/ directory. Defaults to None. When using in a project +via ape compile, gets set to the project’s contracts/ directory.

    • +
    +
    +
    Returns:
    +

    A dictionary like {source_id: [import_source_id, ...], ...}

    +
    +
    Return type:
    +

    Dict[str, List[str]]

    +
    +
    +
    + +
    +
    +get_references(imports_dict: Dict[str, List[str]]) Dict[str, List[str]]
    +

    Provide a mapping containing all referenced source_ids for a given project. +Each entry contains a source_id as a key and list of source_ids that reference a +given contract.

    +
    +
    Parameters:
    +

    imports_dict (Dict[str, List[str]]) – A dictionary of source_ids from all compilers.

    +
    +
    Returns:
    +

    A dictionary like {source_id: [referring_source_id, ...], ...}

    +
    +
    Return type:
    +

    Dict[str, List[str]]

    +
    +
    +
    + +
    +
    +property registered_compilers: Dict[str, CompilerAPI]
    +

    Each compile-able file extension mapped to its respective +CompilerAPI instance.

    +
    +
    Returns:
    +

    The mapping of file-extensions +to compiler API classes.

    +
    +
    Return type:
    +

    Dict[str, CompilerAPI]

    +
    +
    +
    + +
    + +
    +
    +

    Chain

    +
    +
    +class ape.managers.chain.TransactionHistory
    +

    A container mapping Transaction History to the transaction from the active session.

    +
    +
    +append(txn_receipt: ReceiptAPI)
    +

    Add a transaction to the cache This is useful for sessional-transactions.

    +
    +
    Raises:
    +

    ChainError – When trying to append a transaction + receipt that is already in the list.

    +
    +
    Parameters:
    +

    txn_receipt (ReceiptAPI) – The transaction receipt.

    +
    +
    +
    + +
    +
    +revert_to_block(block_number: int)
    +

    Remove all receipts past the given block number.

    +
    +
    Parameters:
    +

    block_number (int) – The block number to revert to.

    +
    +
    +
    + +
    + +
    +
    +class ape.managers.chain.AccountHistory(*, address: ChecksumAddress, sessional: List[ReceiptAPI] = [])
    +

    A container mapping account addresses to the transaction from the active session.

    +
    +
    +__iter__() Iterator[ReceiptAPI]
    +

    So dict(model) works.

    +
    + +
    +
    +__len__() int
    +

    The transaction count of the address.

    +
    + +
    +
    +address: ChecksumAddress
    +

    The address to get history for.

    +
    + +
    +
    +append(receipt: ReceiptAPI)
    +

    Add a receipt to the sessional cache.

    +
    +
    Parameters:
    +

    receipt (ReceiptAPI) – The receipt to append.

    +
    +
    +
    + +
    +
    +property outgoing: Iterator[ReceiptAPI]
    +

    All outgoing transactions, from earliest to latest.

    +
    + +
    +
    +query(*columns: str, start_nonce: int = 0, stop_nonce: int | None = None, engine_to_use: str | None = None) DataFrame
    +

    A method for querying transactions made by an account and returning an Iterator. +If you do not provide a starting nonce, the first transaction is assumed. +If you do not provide a stopping block, the last transaction is assumed. +You can pass engine_to_use to short-circuit engine selection.

    +
    +
    Raises:
    +

    ChainError – When stop_nonce is greater + than the account’s current nonce.

    +
    +
    Parameters:
    +
      +
    • *columns (str) – columns in the DataFrame to return

    • +
    • start_nonce (int) – The first transaction, by nonce, to include in the +query. Defaults to 0.

    • +
    • stop_nonce (Optional[int]) – The last transaction, by nonce, to include +in the query. Defaults to the latest transaction.

    • +
    • engine_to_use (Optional[str]) – query engine to use, bypasses query +engine selection algorithm.

    • +
    +
    +
    Returns:
    +

    pd.DataFrame

    +
    +
    +
    + +
    +
    +revert_to_block(block_number: int)
    +

    Remove all receipts after the given block number.

    +
    +
    Parameters:
    +

    block_number (int) – The block number to revert to.

    +
    +
    +
    + +
    +
    +sessional: List[ReceiptAPI]
    +

    The receipts from the current Python session.

    +
    + +
    + +
    +
    +class ape.managers.chain.ContractCache
    +

    A collection of cached contracts. Contracts can be cached in two ways:

    +
      +
    1. An in-memory cache of locally deployed contracts

    2. +
    3. A cache of contracts per network (only permanent networks are stored this way)

    4. +
    +

    When retrieving a contract, if a ExplorerAPI is used, +it will be cached to disk for faster look-up next time.

    +
    +
    +__delitem__(address: ChecksumAddress)
    +

    Delete a cached contract. +If using a live network, it will also delete the file-cache for the contract.

    +
    +
    Parameters:
    +

    address (AddressType) – The address to remove from the cache.

    +
    +
    +
    + +
    +
    +__setitem__(address: ChecksumAddress, contract_type: ContractType)
    +

    Cache the given contract type. Contracts are cached in memory per session. +In live networks, contracts also get cached to disk at +.ape/{ecosystem_name}/{network_name}/contract_types/{address}.json +for faster look-up next time.

    +
    +
    Parameters:
    +
      +
    • address (AddressType) – The on-chain address of the contract.

    • +
    • contract_type (ContractType) – The contract’s type.

    • +
    +
    +
    +
    + +
    +
    +cache_blueprint(blueprint_id: str, contract_type: ContractType)
    +

    Cache a contract blueprint.

    +
    +
    Parameters:
    +
      +
    • blueprint_id (str) – The ID of the blueprint. For example, in EIP-5202, +it would be the address of the deployed blueprint. For Starknet, it would +be the class identifier.

    • +
    • contract_type (ContractType) – The contract type associated with the blueprint.

    • +
    +
    +
    +
    + +
    +
    +cache_deployment(contract_instance: ContractInstance)
    +

    Cache the given contract instance’s type and deployment information.

    +
    +
    Parameters:
    +

    contract_instance (ContractInstance) – The contract +to cache.

    +
    +
    +
    + +
    +
    +cache_proxy_info(address: ChecksumAddress, proxy_info: ProxyInfoAPI)
    +

    Cache proxy info for a particular address, useful for plugins adding already +deployed proxies. When you deploy a proxy locally, it will also call this method.

    +
    +
    Parameters:
    +
      +
    • address (AddressType) – The address of the proxy contract.

    • +
    • proxy_info (ProxyInfo) – The proxy info class +to cache.

    • +
    +
    +
    +
    + +
    +
    +clear_local_caches()
    +

    Reset local caches to a blank state.

    +
    + +
    +
    +get(address: ChecksumAddress, default: ContractType | None = None) ContractType | None
    +

    Get a contract type by address. +If the contract is cached, it will return the contract from the cache. +Otherwise, if on a live network, it fetches it from the +ExplorerAPI.

    +
    +
    Parameters:
    +
      +
    • address (AddressType) – The address of the contract.

    • +
    • default (Optional[ContractType]) – A default contract when none is found. +Defaults to None.

    • +
    +
    +
    Returns:
    +

    +
    The contract type if it was able to get one,

    otherwise the default parameter.

    +
    +
    +

    +
    +
    Return type:
    +

    Optional[ContractType]

    +
    +
    +
    + +
    +
    +get_blueprint(blueprint_id: str) ContractType | None
    +

    Get a cached blueprint contract type.

    +
    +
    Parameters:
    +

    blueprint_id (str) – The unique identifier used when caching +the blueprint.

    +
    +
    Returns:
    +

    ContractType

    +
    +
    +
    + +
    +
    +classmethod get_container(contract_type: ContractType) ContractContainer
    +

    Get a contract container for the given contract type.

    +
    +
    Parameters:
    +

    contract_type (ContractType) – The contract type to wrap.

    +
    +
    Returns:
    +

    A container object you can deploy.

    +
    +
    Return type:
    +

    ContractContainer

    +
    +
    +
    + +
    +
    +get_creation_receipt(address: ChecksumAddress, start_block: int = 0, stop_block: int | None = None) ReceiptAPI
    +

    Get the receipt responsible for the initial creation of the contract.

    +
    +
    Parameters:
    +
      +
    • address (AddressType) – The address of the contract.

    • +
    • start_block (int) – The block to start looking from.

    • +
    • stop_block (Optional[int]) – The block to stop looking at.

    • +
    +
    +
    Returns:
    +

    ReceiptAPI

    +
    +
    +
    + +
    +
    +get_deployments(contract_container: ContractContainer) List[ContractInstance]
    +

    Retrieves previous deployments of a contract container or contract type. +Locally deployed contracts are saved for the duration of the script and read from +_local_deployments_mapping, while those deployed on a live network are written to +disk in deployments_map.json.

    +
    +
    Parameters:
    +

    contract_container (ContractContainer) – The +ContractContainer with deployments.

    +
    +
    Returns:
    +

    Returns a list of contracts that +have been deployed.

    +
    +
    Return type:
    +

    List[ContractInstance]

    +
    +
    +
    + +
    +
    +get_multiple(addresses: Collection[ChecksumAddress], concurrency: int | None = None) Dict[ChecksumAddress, ContractType]
    +

    Get contract types for all given addresses.

    +
    +
    Parameters:
    +
      +
    • addresses (List[AddressType) – A list of addresses to get contract types for.

    • +
    • concurrency (Optional[int]) – The number of threads to use. Defaults to +min(4, len(addresses)).

    • +
    +
    +
    Returns:
    +

    A mapping of addresses to their respective +contract types.

    +
    +
    Return type:
    +

    Dict[AddressType, ContractType]

    +
    +
    +
    + +
    +
    +get_proxy_info(address: ChecksumAddress) ProxyInfoAPI | None
    +

    Get proxy information about a contract using its address, +either from a local cache, a disk cache, or the provider.

    +
    +
    Parameters:
    +

    address (AddressType) – The address of the proxy contract.

    +
    +
    Returns:
    +

    Optional[ProxyInfoAPI]

    +
    +
    +
    + +
    +
    +instance_at(address: str | ChecksumAddress, contract_type: ContractType | None = None, txn_hash: str | None = None, abi: List[ConstructorABI | FallbackABI | ReceiveABI | MethodABI | EventABI | ErrorABI | StructABI | UnprocessedABI] | Dict | str | Path | None = None) ContractInstance
    +

    Get a contract at the given address. If the contract type of the contract is known, +either from a local deploy or a ExplorerAPI, it will use that +contract type. You can also provide the contract type from which it will cache and use +next time.

    +
    +
    Raises:
    +
      +
    • TypeError – When passing an invalid type for the contract_type arguments + (expects ContractType).

    • +
    • ContractNotFoundError – When the contract type is not found.

    • +
    +
    +
    Parameters:
    +
      +
    • address (Union[str, AddressType]) – The address of the plugin. If you are using the ENS +plugin, you can also provide an ENS domain name.

    • +
    • contract_type (Optional[ContractType]) – Optionally provide the contract type +in case it is not already known.

    • +
    • txn_hash (Optional[str]) – The hash of the transaction responsible for deploying the +contract, if known. Useful for publishing. Defaults to None.

    • +
    • abi (Optional[Union[List[ABI], Dict, str, Path]]) – Use an ABI str, dict, path, +or ethpm models to create a contract instance class.

    • +
    +
    +
    Returns:
    +

    ContractInstance

    +
    +
    +
    + +
    +
    +instance_from_receipt(receipt: ReceiptAPI, contract_type: ContractType) ContractInstance
    +

    A convenience method for creating instances from receipts.

    +
    +
    Parameters:
    +

    receipt (ReceiptAPI) – The receipt.

    +
    +
    Returns:
    +

    ContractInstance

    +
    +
    +
    + +
    + +
    +
    +class ape.managers.chain.BlockContainer
    +

    A list of blocks on the chain.

    +

    Usages example:

    +
    from ape import chain
    +
    +latest_block = chain.blocks[-1]
    +
    +
    +
    +
    +__getitem__(block_number: int) BlockAPI
    +

    Get a block by number. Negative numbers start at the chain head and +move backwards. For example, -1 would be the latest block and +-2 would be the block prior to that one, and so on.

    +
    +
    Parameters:
    +

    block_number (int) – The number of the block to get.

    +
    +
    Returns:
    +

    BlockAPI

    +
    +
    +
    + +
    +
    +__iter__() Iterator[BlockAPI]
    +

    Iterate over all the current blocks.

    +
    +
    Returns:
    +

    Iterator[BlockAPI]

    +
    +
    +
    + +
    +
    +__len__() int
    +

    The number of blocks in the chain.

    +
    +
    Returns:
    +

    int

    +
    +
    +
    + +
    +
    +property head: BlockAPI
    +

    The latest block.

    +
    + +
    +
    +property height: int
    +

    The latest block number.

    +
    + +
    +
    +poll_blocks(start_block: int | None = None, stop_block: int | None = None, required_confirmations: int | None = None, new_block_timeout: int | None = None) Iterator[BlockAPI]
    +

    Poll new blocks. Optionally set a start block to include historical blocks.

    +

    NOTE: When a chain reorganization occurs, this method logs an error and +yields the missed blocks, even if they were previously yielded with different +block numbers.

    +

    NOTE: This is a daemon method; it does not terminate unless an exception occurs +or a stop_block is given.

    +

    Usage example:

    +
    from ape import chain
    +
    +for new_block in chain.blocks.poll_blocks():
    +    print(f"New block found: number={new_block.number}")
    +
    +
    +
    +
    Parameters:
    +
      +
    • start_block (Optional[int]) – The block number to start with. Defaults to the pending +block number.

    • +
    • stop_block (Optional[int]) – Optionally set a future block number to stop at. +Defaults to never-ending.

    • +
    • required_confirmations (Optional[int]) – The amount of confirmations to wait +before yielding the block. The more confirmations, the less likely a reorg will occur. +Defaults to the network’s configured required confirmations.

    • +
    • new_block_timeout (Optional[float]) – The amount of time to wait for a new block before +timing out. Defaults to 10 seconds for local networks or 50 * block_time for live +networks.

    • +
    +
    +
    Returns:
    +

    Iterator[BlockAPI]

    +
    +
    +
    + +
    +
    +query(*columns: str, start_block: int = 0, stop_block: int | None = None, step: int = 1, engine_to_use: str | None = None) DataFrame
    +

    A method for querying blocks and returning an Iterator. If you +do not provide a starting block, the 0 block is assumed. If you do not +provide a stopping block, the last block is assumed. You can pass +engine_to_use to short-circuit engine selection.

    +
    +
    Raises:
    +

    ChainError – When stop_block is greater + than the chain length.

    +
    +
    Parameters:
    +
      +
    • *columns (str) – columns in the DataFrame to return

    • +
    • start_block (int) – The first block, by number, to include in the +query. Defaults to 0.

    • +
    • stop_block (Optional[int]) – The last block, by number, to include +in the query. Defaults to the latest block.

    • +
    • step (int) – The number of blocks to iterate between block numbers. +Defaults to 1.

    • +
    • engine_to_use (Optional[str]) – query engine to use, bypasses query +engine selection algorithm.

    • +
    +
    +
    Returns:
    +

    pd.DataFrame

    +
    +
    +
    + +
    +
    +range(start_or_stop: int, stop: int | None = None, step: int = 1, engine_to_use: str | None = None) Iterator[BlockAPI]
    +

    Iterate over blocks. Works similarly to python range().

    +
    +
    Raises:
    +
      +
    • ChainError – When stop is greater + than the chain length.

    • +
    • ChainError – When stop is less + than start_block.

    • +
    • ChainError – When stop is less + than 0.

    • +
    • ChainError – When start is less + than 0.

    • +
    +
    +
    Parameters:
    +
      +
    • start_or_stop (int) – When given just a single value, it is the stop. +Otherwise, it is the start. This mimics the behavior of range +built-in Python function.

    • +
    • stop (Optional[int]) – The block number to stop before. Also the total +number of blocks to get. If not setting a start value, is set by +the first argument.

    • +
    • step (Optional[int]) – The value to increment by. Defaults to 1. +number of blocks to get. Defaults to the latest block.

    • +
    • engine_to_use (Optional[str]) – query engine to use, bypasses query +engine selection algorithm.

    • +
    +
    +
    Returns:
    +

    Iterator[BlockAPI]

    +
    +
    +
    + +
    + +
    +
    +class ape.managers.chain.ChainManager
    +

    A class for managing the state of the active blockchain. +Also handy for querying data about the chain and managing local caches. +Access the chain manager singleton from the root ape namespace.

    +

    Usage example:

    +
    from ape import chain
    +
    +
    +
    +
    +property base_fee: int
    +

    The minimum value required to get your transaction included on the next block. +Only providers that implement EIP-1559 +will use this property.

    +
    +
    Raises:
    +

    NotImplementedError – When this provider does not implement + EIP-1559.

    +
    +
    +
    + +
    +
    +property blocks: BlockContainer
    +

    The list of blocks on the chain.

    +
    + +
    +
    +property chain_id: int
    +

    The blockchain ID. +See ChainList for a comprehensive list of IDs.

    +
    + +
    +
    +property gas_price: int
    +

    The price for what it costs to transact.

    +
    + +
    +
    +get_receipt(transaction_hash: str) ReceiptAPI
    +

    Get a transaction receipt from the chain.

    +
    +
    Parameters:
    +

    transaction_hash (str) – The hash of the transaction.

    +
    +
    Returns:
    +

    ReceiptAPI

    +
    +
    +
    + +
    +
    +property history: TransactionHistory
    +

    A mapping of transactions from the active session to the account responsible.

    +
    + +
    +
    +isolate()
    +

    Run code in an isolated context. +Requires using a local provider that supports snapshotting.

    +

    Usages example:

    +
    owner = accounts[0]
    +with chain.isolate():
    +    contract = owner.deploy(project.MyContract)
    +    receipt = contract.fooBar(sender=owner)
    +
    +
    +
    + +
    +
    +mine(num_blocks: int = 1, timestamp: int | None = None, deltatime: int | None = None) None
    +

    Mine any given number of blocks.

    +
    +
    Raises:
    +

    ValueError – When a timestamp AND a deltatime argument are both passed

    +
    +
    Parameters:
    +
      +
    • num_blocks (int) – Choose the number of blocks to mine. +Defaults to 1 block.

    • +
    • timestamp (Optional[int]) – Designate a time (in seconds) to begin mining. +Defaults to None.

    • +
    • deltatime (Optional[int]) – Designate a change in time (in seconds) to begin mining. +Defaults to None.

    • +
    +
    +
    +
    + +
    +
    +property pending_timestamp: int
    +

    The current epoch time of the chain, as an int. +You can also set the timestamp for development purposes.

    +

    Usage example:

    +
    from ape import chain
    +chain.pending_timestamp += 3600
    +
    +
    +
    + +
    +
    +restore(snapshot_id: str | int | bytes | None = None)
    +

    Regress the current call using the given snapshot ID. +Allows developers to go back to a previous state.

    +
    +
    Raises:
    +
      +
    • NotImplementedError – When the active provider does not support + snapshotting.

    • +
    • UnknownSnapshotError – When the snapshot ID is not cached.

    • +
    • ChainError – When there are no snapshot IDs to select from.

    • +
    +
    +
    Parameters:
    +

    snapshot_id (Optional[SnapshotID]) – The snapshot ID. Defaults +to the most recent snapshot ID.

    +
    +
    +
    + +
    +
    +snapshot() str | int | bytes
    +

    Record the current state of the blockchain with intent to later +call the method revert() +to go back to this point. This method is for local networks only.

    +
    +
    Raises:
    +

    NotImplementedError – When the active provider does not support + snapshotting.

    +
    +
    Returns:
    +

    The snapshot ID.

    +
    +
    Return type:
    +

    SnapshotID

    +
    +
    +
    + +
    + +
    +
    +

    Config

    +
    +
    +class ape.managers.config.ConfigManager(*, DATA_FOLDER: Path, REQUEST_HEADER: Dict, PROJECT_FOLDER: Path, name: str = '', version: str = '', meta: PackageMeta = PackageMeta(authors=None, license=None, description=None, keywords=None, links=None), contracts_folder: Path = None, dependencies: List[DependencyAPI] = [], deployments: DeploymentConfigCollection | None = None, default_ecosystem: str = 'ethereum')
    +

    The singleton responsible for managing the ape-config.yaml project file. +The config manager is useful for loading plugin configurations which contain +settings that determine how ape functions. When developing plugins, +you may want to have settings that control how the plugin works. When developing +scripts in a project, you may want to parametrize how it runs. The config manager +is how you can access those settings at runtime.

    +

    Access the ConfigManager from the ape namespace directly via:

    +

    Usage example:

    +
    from ape import config  # "config" is the ConfigManager singleton
    +
    +# Example: load the "ape-test" plugin and access the mnemonic
    +test_mnemonic = config.get_config("test").mnemonic
    +
    +
    +
    +
    +DATA_FOLDER: Path
    +

    The path to the ape directory such as $HOME/.ape.

    +
    + +
    +
    +PROJECT_FOLDER: Path
    +

    The path to the ape project.

    +
    + +
    +
    +contracts_folder: Path
    +

    The path to the project’s contracts/ directory +(differs by project structure).

    +
    + +
    +
    +default_ecosystem: str
    +

    The default ecosystem to use. Defaults to "ethereum".

    +
    + +
    +
    +dependencies: List[DependencyAPI]
    +

    A list of project dependencies.

    +
    + +
    +
    +deployments: DeploymentConfigCollection | None
    +

    A dict of contract deployments by address and contract type.

    +
    + +
    +
    +get_config(plugin_name: str) PluginConfig
    +

    Get a plugin config.

    +
    +
    Parameters:
    +

    plugin_name (str) – The name of the plugin to get the config for.

    +
    +
    Returns:
    +

    PluginConfig

    +
    +
    +
    + +
    +
    +load(force_reload: bool = False) ConfigManager
    +

    Load the user config file and return this class.

    +
    + +
    +
    +meta: PackageMeta
    +

    Metadata about the project.

    +
    + +
    +
    +name: str
    +

    The name of the project.

    +
    + +
    +
    +using_project(project_folder: Path, contracts_folder: Path | None = None, **config) Generator[ProjectManager, None, None]
    +

    Temporarily change the project context.

    +

    Usage example:

    +
    from pathlib import Path
    +from ape import config, Project
    +
    +project_path = Path("path/to/project")
    +contracts_path = project_path / "contracts"
    +
    +with config.using_project(project_path):
    +    my_project = Project(project_path)
    +
    +
    +
    +
    Parameters:
    +
      +
    • project_folder (pathlib.Path) – The path of the context’s project.

    • +
    • contracts_folder (Optional[pathlib.Path]) – The path to the context’s source files. +Defaults to <project_path>/contracts.

    • +
    +
    +
    Returns:
    +

    Generator

    +
    +
    +
    + +
    +
    +version: str
    +

    The project’s version.

    +
    + +
    + +
    +
    +class ape.managers.config.DeploymentConfig(_case_sensitive: bool | None = None, _env_prefix: str | None = None, _env_file: DotenvType | None = PosixPath('.'), _env_file_encoding: str | None = None, _env_nested_delimiter: str | None = None, _secrets_dir: str | Path | None = None, *, address: str | bytes, contract_type: str)
    +
    + +
    +
    +class ape.managers.config.DeploymentConfigCollection(root: RootModelRootType = PydanticUndefined)
    +
    + +
    +
    +

    Converters

    +
    +
    +class ape.managers.converters.AccountIntConverter
    +
    +
    +convert(value: BaseAddress) int
    +

    Convert the given value to the type specified as the generic for this class. +Implementations of this API must throw a ConversionError +when the item fails to convert properly.

    +
    + +
    +
    +is_convertible(value: Any) bool
    +

    Returns True if string value provided by value is convertible using +ape.api.convert.ConverterAPI.convert().

    +
    +
    Parameters:
    +

    value (Any) – The value to check.

    +
    +
    Returns:
    +

    True when the given value can be converted.

    +
    +
    Return type:
    +

    bool

    +
    +
    +
    + +
    + +
    +
    +class ape.managers.converters.AddressAPIConverter
    +

    A converter that converts an BaseAddress +to a :class`~ape.types.address.AddressType`.

    +
    +
    +convert(value: BaseAddress) ChecksumAddress
    +

    Convert the given value to AddressType.

    +
    +
    Parameters:
    +

    value (str) – The value to convert.

    +
    +
    Returns:
    +

    An alias to +ChecksumAddress. # noqa: E501

    +
    +
    Return type:
    +

    AddressType

    +
    +
    +
    + +
    +
    +is_convertible(value: Any) bool
    +

    Returns True if string value provided by value is convertible using +ape.api.convert.ConverterAPI.convert().

    +
    +
    Parameters:
    +

    value (Any) – The value to check.

    +
    +
    Returns:
    +

    True when the given value can be converted.

    +
    +
    Return type:
    +

    bool

    +
    +
    +
    + +
    + +
    +
    +class ape.managers.converters.BytesAddressConverter
    +

    A converter that converts a raw bytes address to an AddressType.

    +
    +
    +convert(value: bytes) ChecksumAddress
    +

    Convert the given value to the type specified as the generic for this class. +Implementations of this API must throw a ConversionError +when the item fails to convert properly.

    +
    + +
    +
    +is_convertible(value: Any) bool
    +

    Returns True if string value provided by value is convertible using +ape.api.convert.ConverterAPI.convert().

    +
    +
    Parameters:
    +

    value (Any) – The value to check.

    +
    +
    Returns:
    +

    True when the given value can be converted.

    +
    +
    Return type:
    +

    bool

    +
    +
    +
    + +
    + +
    +
    +class ape.managers.converters.ConversionManager
    +

    A singleton that manages all the converters.

    +

    NOTE: typically, users will not interact with this class directly, +but rather its convert() method, which is accessible from +the root ape namespace.

    +

    Usage example:

    +
    from ape import convert
    +
    +amount = convert("1 gwei", int)
    +
    +
    +
    +
    +convert(value: Any, type: Type | Tuple | List) Any
    +

    Convert the given value to the given type. This method accesses +all ConverterAPI instances known to +ape` and selects the appropriate one, so long that it exists.

    +
    +
    Raises:
    +

    ConversionError – When there is not a registered + converter for the given arguments.

    +
    +
    Parameters:
    +
      +
    • value (any) – The value to convert.

    • +
    • type (type) – The type to convert the value to.

    • +
    +
    +
    Returns:
    +

    The same given value but with the new given type.

    +
    +
    Return type:
    +

    any

    +
    +
    +
    + +
    +
    +is_type(value: Any, type: Type) bool
    +

    Check if the value is the given type. +If given an AddressType, will also check +that it is checksummed.

    +
    +
    Parameters:
    +
      +
    • value (any) – The value to check.

    • +
    • type (type) – The type to check against.

    • +
    +
    +
    Returns:
    +

    True when we consider the given value to be the given type.

    +
    +
    Return type:
    +

    bool

    +
    +
    +
    + +
    + +
    +
    +class ape.managers.converters.HexAddressConverter
    +

    A converter that converts a checksummed address str to a +AddressType.

    +
    +
    +convert(value: str) ChecksumAddress
    +

    Convert the given value to a AddressType.

    +
    +
    Parameters:
    +

    value (str) – The address str to convert.

    +
    +
    Returns:
    +

    AddressType

    +
    +
    +
    + +
    +
    +is_convertible(value: Any) bool
    +

    Returns True if string value provided by value is convertible using +ape.api.convert.ConverterAPI.convert().

    +
    +
    Parameters:
    +

    value (Any) – The value to check.

    +
    +
    Returns:
    +

    True when the given value can be converted.

    +
    +
    Return type:
    +

    bool

    +
    +
    +
    + +
    + +
    +
    +class ape.managers.converters.HexConverter
    +

    A converter that converts str to HexBytes.

    +
    +
    +convert(value: str) bytes
    +

    Convert the given value to HexBytes.

    +
    +
    Parameters:
    +

    value (str) – The value to convert.

    +
    +
    Returns:
    +

    bytes

    +
    +
    +
    + +
    +
    +is_convertible(value: Any) bool
    +

    Returns True if string value provided by value is convertible using +ape.api.convert.ConverterAPI.convert().

    +
    +
    Parameters:
    +

    value (Any) – The value to check.

    +
    +
    Returns:
    +

    True when the given value can be converted.

    +
    +
    Return type:
    +

    bool

    +
    +
    +
    + +
    + +
    +
    +class ape.managers.converters.HexIntConverter
    +

    Convert hex values to integers.

    +

    NOTE If value is a str, it must begin with “0x”.

    +
    +
    +convert(value: Any) int
    +

    Convert the given value to the type specified as the generic for this class. +Implementations of this API must throw a ConversionError +when the item fails to convert properly.

    +
    + +
    +
    +is_convertible(value: Any) bool
    +

    Returns True if string value provided by value is convertible using +ape.api.convert.ConverterAPI.convert().

    +
    +
    Parameters:
    +

    value (Any) – The value to check.

    +
    +
    Returns:
    +

    True when the given value can be converted.

    +
    +
    Return type:
    +

    bool

    +
    +
    +
    + +
    + +
    +
    +class ape.managers.converters.IntAddressConverter
    +

    A converter that converts an integer address to an AddressType.

    +
    +
    +convert(value: Any) ChecksumAddress
    +

    Convert the given value to the type specified as the generic for this class. +Implementations of this API must throw a ConversionError +when the item fails to convert properly.

    +
    + +
    +
    +is_convertible(value: Any) bool
    +

    Returns True if string value provided by value is convertible using +ape.api.convert.ConverterAPI.convert().

    +
    +
    Parameters:
    +

    value (Any) – The value to check.

    +
    +
    Returns:
    +

    True when the given value can be converted.

    +
    +
    Return type:
    +

    bool

    +
    +
    +
    + +
    + +
    +
    +class ape.managers.converters.StringIntConverter
    +
    +
    +convert(value: str) int
    +

    Convert the given value to the type specified as the generic for this class. +Implementations of this API must throw a ConversionError +when the item fails to convert properly.

    +
    + +
    +
    +is_convertible(value: Any) bool
    +

    Returns True if string value provided by value is convertible using +ape.api.convert.ConverterAPI.convert().

    +
    +
    Parameters:
    +

    value (Any) – The value to check.

    +
    +
    Returns:
    +

    True when the given value can be converted.

    +
    +
    Return type:
    +

    bool

    +
    +
    +
    + +
    + +
    +
    +class ape.managers.converters.TimestampConverter
    +

    Converts either a string, datetime object, or a timedelta object to a timestamp. +No timezone required, but should be formatted to UTC.

    +
    +
    +convert(value: str | datetime | timedelta) int
    +

    Convert the given value to the type specified as the generic for this class. +Implementations of this API must throw a ConversionError +when the item fails to convert properly.

    +
    + +
    +
    +is_convertible(value: str | datetime | timedelta) bool
    +

    Returns True if string value provided by value is convertible using +ape.api.convert.ConverterAPI.convert().

    +
    +
    Parameters:
    +

    value (Any) – The value to check.

    +
    +
    Returns:
    +

    True when the given value can be converted.

    +
    +
    Return type:
    +

    bool

    +
    +
    +
    + +
    + +
    +
    +

    Networks

    +
    +
    +class ape.managers.networks.NetworkManager
    +

    The set of all blockchain network ecosystems registered from the plugin system. +Typically, you set the provider via the --network command line option. +However, use this singleton for more granular access to networks.

    +

    Usage example:

    +
    from ape import networks
    +
    +# "networks" is the NetworkManager singleton
    +with networks.ethereum.mainnet.use_provider("geth"):
    +   ...
    +
    +
    +
    +
    +property active_provider: ProviderAPI | None
    +

    The currently connected provider if one exists. Otherwise, returns None.

    +
    + +
    +
    +create_custom_provider(connection_str: str, provider_cls: ~typing.Type[~ape.api.providers.ProviderAPI] = <class 'ape_ethereum.provider.EthereumNodeProvider'>, provider_name: str | None = None) ProviderAPI
    +

    Create a custom connection to a URI using the EthereumNodeProvider provider. +NOTE: This provider will assume EVM-like behavior and this is generally not recommended. +Use plugins when possible!

    +
    +
    Parameters:
    +
      +
    • connection_str (str) – The connection string of the node, such as its URI +when using HTTP.

    • +
    • provider_cls (Type[ProviderAPI]) – Defaults to +EthereumNodeProvider.

    • +
    • provider_name (Optional[str]) – The name of the provider. Defaults to best guess.

    • +
    +
    +
    Returns:
    +

    +
    The Geth provider

    implementation that comes with Ape.

    +
    +
    +

    +
    +
    Return type:
    +

    ProviderAPI

    +
    +
    +
    + +
    +
    +property default_ecosystem: EcosystemAPI
    +

    The default ecosystem. Call +set_default_ecosystem() to +change the default ecosystem. If a default is not set and there is +only a single ecosystem installed, such as Ethereum, then get +that ecosystem.

    +
    + +
    +
    +property ecosystem: EcosystemAPI
    +

    The current ecosystem if connected to one.

    +
    +
    Raises:
    +

    ProviderNotConnectedError – When there is + no active provider at runtime.

    +
    +
    Returns:
    +

    ProviderAPI

    +
    +
    +
    + +
    +
    +property ecosystem_names: Set[str]
    +

    The set of all ecosystem names in ape.

    +
    + +
    +
    +property ecosystems: Dict[str, EcosystemAPI]
    +

    All the registered ecosystems in ape, such as ethereum.

    +
    + +
    +
    +fork(provider_name: str | None = None, provider_settings: Dict | None = None) ProviderContextManager
    +

    Fork the currently connected network.

    +
    +
    Parameters:
    +
      +
    • provider_name (str, optional) – The name of the provider to get. Defaults to None. +When None, returns the default provider.

    • +
    • provider_settings (dict, optional) – Settings to apply to the provider. Defaults to +None.

    • +
    +
    +
    Returns:
    +

    ProviderContextManager

    +
    +
    +
    + +
    +
    +get_ecosystem(ecosystem_name: str) EcosystemAPI
    +

    Get the ecosystem for the given name.

    +
    +
    Parameters:
    +

    ecosystem_name (str) – The name of the ecosystem to get.

    +
    +
    Raises:
    +

    NetworkError – When the ecosystem is not found.

    +
    +
    Returns:
    +

    EcosystemAPI

    +
    +
    +
    + +
    +
    +get_network_choices(ecosystem_filter: List[str] | str | None = None, network_filter: List[str] | str | None = None, provider_filter: List[str] | str | None = None) Iterator[str]
    +

    The set of all possible network choices available as a “network selection” +e.g. --network [ECOSYSTEM:NETWORK:PROVIDER].

    +

    Each value is in the form ecosystem:network:provider and shortened options also +appear in the list. For example, ::geth would default to :ethereum:local:geth +and both will be in the returned list. The values come from each +ProviderAPI that is installed.

    +

    Use the CLI command ape networks list to list all the possible network +combinations.

    +
    +
    Parameters:
    +
      +
    • ecosystem_filter (Optional[Union[List[str], str]]) – Get only the specified ecosystems. +Defaults to getting all ecosystems.

    • +
    • network_filter (Optional[Union[List[str], str]]) – Get only the specified networks. +Defaults to getting all networks in ecosystems.

    • +
    • provider_filter (Optional[Union[List[str], str]]) – Get only the specified providers. +Defaults to getting all providers in networks.

    • +
    +
    +
    Returns:
    +

    An iterator over all the network-choice possibilities.

    +
    +
    Return type:
    +

    Iterator[str]

    +
    +
    +
    + +
    +
    +get_provider_from_choice(network_choice: str | None = None, provider_settings: Dict | None = None) ProviderAPI
    +

    Get a ProviderAPI from a network choice. +A network choice is any value returned from +get_network_choices(). Use the +CLI command ape networks list to list all the possible network +combinations.

    +
    +
    Raises:
    +

    NetworkError – When the given network choice does not + match any known network.

    +
    +
    Parameters:
    +
      +
    • network_choice (str, optional) – The network choice +(see get_network_choices()). +Defaults to the default ecosystem, network, and provider combination.

    • +
    • provider_settings (dict, optional) – Settings for the provider. Defaults to None.

    • +
    +
    +
    Returns:
    +

    ProviderAPI

    +
    +
    +
    + +
    +
    +property network: NetworkAPI
    +

    The current network if connected to one.

    +
    +
    Raises:
    +

    ProviderNotConnectedError – When there is + no active provider at runtime.

    +
    +
    Returns:
    +

    NetworkAPI

    +
    +
    +
    + +
    +
    +property network_data: Dict
    +

    Get a dictionary containing data about networks in the ecosystem.

    +

    NOTE: The keys are added in an opinionated order for nicely +translating into yaml.

    +
    +
    Returns:
    +

    dict

    +
    +
    +
    + +
    +
    +property network_names: Set[str]
    +

    The set of all network names in ape.

    +
    + +
    +
    +property networks_yaml: str
    +

    Get a yaml str representing all the networks +in all the ecosystems. +NOTE: Deprecated.

    +

    View the result via CLI command ape networks list --format yaml.

    +
    +
    Returns:
    +

    str

    +
    +
    +
    + +
    +
    +parse_network_choice(network_choice: str | None = None, provider_settings: Dict | None = None, disconnect_after: bool = False, disconnect_on_exit: bool = True) ProviderContextManager
    +

    Parse a network choice into a context manager for managing a temporary +connection to a provider. See +get_network_choices() for all +available choices (or use CLI command ape networks list).

    +
    +
    Raises:
    +

    NetworkError – When the given network choice does not + match any known network.

    +
    +
    Parameters:
    +
      +
    • network_choice (str, optional) – The network choice +(see get_network_choices()). +Defaults to the default ecosystem, network, and provider combination.

    • +
    • provider_settings (dict, optional) – Settings for the provider. Defaults to None.

    • +
    • disconnect_after (bool) – Set to True to terminate the connection completely +at the end of context. NOTE: May only work if the network was also started +from this session.

    • +
    • disconnect_on_exit (bool) – Whether to disconnect on the exit of the python +session. Defaults to True.

    • +
    +
    +
    Returns:
    +

    ProviderContextManager

    +
    +
    +
    + +
    +
    +property provider_names: Set[str]
    +

    The set of all provider names in ape.

    +
    + +
    +
    +set_default_ecosystem(ecosystem_name: str)
    +

    Change the default ecosystem.

    +
    +
    Raises:
    +

    NetworkError – When the given ecosystem name is unknown.

    +
    +
    Parameters:
    +

    ecosystem_name (str) – The name of the ecosystem to set +as the default.

    +
    +
    +
    + +
    + +
    +
    +

    Project

    +
    +
    +class ape.managers.project.manager.ProjectManager(path: Path)
    +

    A manager for accessing contract-types, dependencies, and other project resources. +Additionally, compile contracts using the +load_contracts() method.

    +

    Use ape.project to reference the current project and ape.Project to reference +this class uninitialized.

    +
    +
    Raises:
    +

    ProjectError – When the project’s dependencies are invalid.

    +
    +
    +

    Usage example:

    +
    from ape import project  # "project" is the ProjectManager for the active project
    +from ape import Project  # Is a ProjectManager
    +
    +# MyContractType (example) is contract type in the active project
    +contract_type = project.MyContactType
    +
    +
    +
    +
    +__getattr__(attr_name: str) Any
    +

    Get a contract container from an existing contract type in +the local project using . access.

    +

    NOTE: To get a dependency contract, use +dependencies.

    +

    Usage example:

    +
    from ape import project
    +
    +contract = project.MyContract
    +
    +
    +
    +
    Raises:
    +

    ApeAttributeError – When the given name is not + a contract in the project.

    +
    +
    Parameters:
    +

    attr_name (str) – The name of the contract in the project.

    +
    +
    Returns:
    +

    ContractContainer, +a ContractNamespace, or any attribute.

    +
    +
    +
    + +
    +
    +__str__() str
    +

    Return str(self).

    +
    + +
    +
    +property compiler_data: List[Compiler]
    +

    A list of Compiler objects representing the raw-data specifics of a compiler.

    +
    + +
    +
    +property contracts: Dict[str, ContractType]
    +

    A dictionary of contract names to their type. +See load_contracts() for more information.

    +
    +
    Returns:
    +

    Dict[str, ContractType]

    +
    +
    +
    + +
    +
    +property contracts_folder: Path
    +

    The path to project’s contracts/ directory.

    +
    +
    Returns:
    +

    pathlib.Path

    +
    +
    +
    + +
    +
    +property dependencies: Dict[str, Dict[str, DependencyAPI]]
    +

    The package manifests of all dependencies mentioned +in this project’s ape-config.yaml file.

    +
    + +
    +
    +extensions_with_missing_compilers(extensions: List[str] | None = None) Set[str]
    +

    All file extensions in the contracts/ directory (recursively) +that do not correspond to a registered compiler.

    +
    +
    Parameters:
    +

    extensions (List[str], optional) – If provided, returns only extensions that +are in this list. Useful for checking against a subset of source files.

    +
    +
    Returns:
    +

    A list of file extensions found in the contracts/ directory +that do not have associated compilers installed.

    +
    +
    Return type:
    +

    Set[str]

    +
    +
    +
    + +
    +
    +extract_manifest() PackageManifest
    +

    Extracts a package manifest from the project.

    +
    +
    Returns:
    +

    ethpm_types.manifest.PackageManifest

    +
    +
    +
    + +
    +
    +get_compiler_data(compile_if_needed: bool = True) List[Compiler]
    +

    A list of Compiler objects representing the raw-data specifics of a compiler.

    +
    +
    Parameters:
    +

    compile_if_needed (bool) – Set to False to only return cached compiler data. +Defaults to True.

    +
    +
    Returns:
    +

    List[Compiler]

    +
    +
    +
    + +
    +
    +get_contract(contract_name: str) ContractContainer
    +

    Get a contract container from an existing contract type in +the local project by name.

    +

    NOTE: To get a dependency contract, use +dependencies.

    +
    +
    Raises:
    +

    KeyError – When the given name is not a contract in the project.

    +
    +
    Parameters:
    +

    contract_name (str) – The name of the contract in the project.

    +
    +
    Returns:
    +

    ContractContainer

    +
    +
    +
    + +
    +
    +get_project(path: Path, contracts_folder: Path | None = None, name: str | None = None, version: str | None = None) ProjectAPI
    +

    Get the project at the given path. +Returns the first ProjectAPI it finds where it +is valid.

    +
    +
    Parameters:
    +
      +
    • path (pathlib.Path) – The path to the project.

    • +
    • contracts_folder (pathlib.Path) – The path to the contracts folder. Defaults +to <path>/contracts.

    • +
    • name (str) – The name of the project. Only necessary when this project is +a dependency. Defaults to None.

    • +
    • version (str) – The project’s version. Only necessary when this project is +a dependency. Defaults to None.

    • +
    +
    +
    Returns:
    +

    ProjectAPI

    +
    +
    +
    + +
    +
    +property interfaces_folder: Path
    +

    The path to the interfaces/ directory of the project.

    +
    +
    Returns:
    +

    pathlib.Path

    +
    +
    +
    + +
    +
    +load_contracts(file_paths: Iterable[Path] | Path | None = None, use_cache: bool = True) Dict[str, ContractType]
    +

    Compile and get the contract types in the project. +This is called when invoking the CLI command ape compile as well as prior to running +scripts or tests in ape, such as from ape run or ape test.

    +
    +
    Parameters:
    +
      +
    • file_paths (Optional[Union[Iterable[Path], Path]]) – Provide one or more contract file-paths to load. If excluded, +will load all the contracts.

    • +
    • use_cache (Optional[bool]) – Set to False to force a re-compile. +Defaults to True.

    • +
    +
    +
    Returns:
    +

    A dictionary of contract names to their +types for each compiled contract.

    +
    +
    Return type:
    +

    Dict[str, ContractType]

    +
    +
    +
    + +
    +
    +lookup_path(key_contract_path: Path | str) Path | None
    +

    Figure out the full path of the contract from the given key_contract_path.

    +

    For example, give it HelloWorld and it returns +<absolute-project-path>/<contracts-folder>/HelloWorld.sol.

    +

    Another example is to give it contracts/HelloWorld.sol and it also +returns <absolute-project-path>/<contracts-folder>/HelloWorld.sol.

    +
    +
    Parameters:
    +

    key_contract_path (pathlib.Path, str) – A sub-path to a contract or a source ID.

    +
    +
    Returns:
    +

    The path if it exists, else None.

    +
    +
    Return type:
    +

    pathlib.Path

    +
    +
    +
    + +
    +
    +property meta: PackageMeta
    +

    Metadata about the active project as per EIP +https://eips.ethereum.org/EIPS/eip-2678#the-package-meta-object +Use when publishing your package manifest.

    +
    + +
    +
    +path: Path
    +

    The project path.

    +
    + +
    +
    +property project_types: List[Type[ProjectAPI]]
    +

    The available ProjectAPI types available, +such as ApeProject, which is the default.

    +
    + +
    +
    +property scripts_folder: Path
    +

    The path to the scripts/ directory of the project.

    +
    +
    Returns:
    +

    pathlib.Path

    +
    +
    +
    + +
    +
    +property source_paths: List[Path]
    +

    All the source files in the project. +Excludes files with extensions that don’t have a registered compiler.

    +
    +
    Returns:
    +

    A list of a source file paths in the project.

    +
    +
    Return type:
    +

    List[pathlib.Path]

    +
    +
    +
    + +
    +
    +property sources: Dict[str, Source]
    +

    A mapping of source identifier to ethpm_types.Source object.

    +
    + +
    +
    +property sources_missing: bool
    +

    True when there are no contracts anywhere to be found +in the project. False otherwise.

    +
    + +
    +
    +property tests_folder: Path
    +

    The path to the tests/ directory of the project.

    +
    +
    Returns:
    +

    pathlib.Path

    +
    +
    +
    + +
    +
    +track_deployment(contract: ContractInstance)
    +

    Indicate that a contract deployment should be included in the package manifest +upon publication.

    +

    NOTE: Deployments are automatically tracked for contracts. However, only +deployments passed to this method are included in the final, publishable manifest.

    +
    +
    Parameters:
    +

    contract (ContractInstance) – The contract +to track as a deployment of the project.

    +
    +
    +
    + +
    +
    +property tracked_deployments: Dict[Bip122Uri, Dict[str, ContractInstance]]
    +

    Deployments that have been explicitly tracked via +track_deployment(). +These deployments will be included in the final package manifest upon publication +of this package.

    +
    + +
    + +
    +
    +class ape.managers.project.dependency.GithubDependency(*, name: str, version: str | None = None, contracts_folder: str = 'contracts', exclude: List[str] = ['package.json', 'package-lock.json', '**/.build/**/*.json'], config_override: Dict = {}, github: str, ref: str | None = None)
    +

    A dependency from Github. Use the github key in your dependencies: +section of your ape-config.yaml file to declare a dependency from GitHub.

    +

    Config example:

    +
    dependencies:
    +  - name: OpenZeppelin
    +    github: OpenZeppelin/openzeppelin-contracts
    +    version: 4.4.0
    +
    +
    +
    +
    +extract_manifest(use_cache: bool = True) PackageManifest
    +

    Create a PackageManifest definition, +presumably by downloading and compiling the dependency.

    +

    Implementations may use self.project_manager to call method +get_project() +to dynamically get the correct ProjectAPI. +based on the project’s structure.

    +
    +
    Parameters:
    +

    use_cache (bool) – Defaults to True. Set to False to force +a re-install.

    +
    +
    Returns:
    +

    PackageManifest

    +
    +
    +
    + +
    +
    +github: str
    +

    The Github repo ID e.g. the organization name followed by the repo name, +such as dapphub/erc20.

    +
    + +
    +
    +ref: str | None
    +

    The branch or tag to use.

    +

    NOTE: Will be ignored if given a version.

    +
    + +
    +
    +property uri: Url
    +

    The URI to use when listing in a PackageManifest.

    +
    + +
    +
    +property version_id: str
    +

    The ID to use as the sub-directory in the download cache. +Most often, this is either a version number or a branch name.

    +
    + +
    + +
    +
    +class ape.managers.project.dependency.LocalDependency(*, name: str, version: str = 'local', contracts_folder: str = 'contracts', exclude: List[str] = ['package.json', 'package-lock.json', '**/.build/**/*.json'], config_override: Dict = {}, local: str)
    +

    A dependency that is already downloaded on the local machine.

    +

    Config example:

    +
    dependencies:
    +  - name: Dependency
    +    local: path/to/dependency
    +
    +
    +
    +
    +extract_manifest(use_cache: bool = True) PackageManifest
    +

    Create a PackageManifest definition, +presumably by downloading and compiling the dependency.

    +

    Implementations may use self.project_manager to call method +get_project() +to dynamically get the correct ProjectAPI. +based on the project’s structure.

    +
    +
    Parameters:
    +

    use_cache (bool) – Defaults to True. Set to False to force +a re-install.

    +
    +
    Returns:
    +

    PackageManifest

    +
    +
    +
    + +
    +
    +property uri: Url
    +

    The URI to use when listing in a PackageManifest.

    +
    + +
    +
    +version: str
    +

    The version of the dependency. Omit to use the latest.

    +
    + +
    +
    +property version_id: str
    +

    The ID to use as the sub-directory in the download cache. +Most often, this is either a version number or a branch name.

    +
    + +
    + +
    +
    +class ape.managers.project.dependency.NpmDependency(*, name: str, version: str | None = None, contracts_folder: str = 'contracts', exclude: List[str] = ['package.json', 'package-lock.json', '**/.build/**/*.json'], config_override: Dict = {}, npm: str)
    +

    A dependency from the Node Package Manager (NPM).

    +

    Config example:

    +
    dependencies:
    +  - name: safe-singleton-factory
    +    npm: "@gnosis.pm/safe-singleton-factory"
    +    version: 1.0.14
    +
    +
    +
    +
    +extract_manifest(use_cache: bool = True) PackageManifest
    +

    Create a PackageManifest definition, +presumably by downloading and compiling the dependency.

    +

    Implementations may use self.project_manager to call method +get_project() +to dynamically get the correct ProjectAPI. +based on the project’s structure.

    +
    +
    Parameters:
    +

    use_cache (bool) – Defaults to True. Set to False to force +a re-install.

    +
    +
    Returns:
    +

    PackageManifest

    +
    +
    +
    + +
    +
    +npm: str
    +

    The NPM repo ID e.g. the organization name followed by the repo name, +such as "@gnosis.pm/safe-singleton-factory".

    +
    + +
    +
    +property uri: Url
    +

    The URI to use when listing in a PackageManifest.

    +
    + +
    +
    +property version_from_json: str | None
    +

    The version from package.json in the installed package. +Requires having run npm install.

    +
    + +
    +
    +property version_from_local_json: str | None
    +

    The version from your project’s package.json, if exists.

    +
    + +
    +
    +property version_id: str
    +

    The ID to use as the sub-directory in the download cache. +Most often, this is either a version number or a branch name.

    +
    + +
    + +
    +
    +class ape.managers.project.types.BaseProject(*, path: Path, contracts_folder: Path, name: str | None = None, version: str | None = None, config_file_name: str = 'ape-config.yaml')
    +
    +
    +create_manifest(file_paths: Sequence[Path] | None = None, use_cache: bool = True) PackageManifest
    +

    Create a manifest from the project.

    +
    +
    Parameters:
    +
      +
    • file_paths (Optional[Sequence[Path]]) – An optional list of paths to compile +from this project.

    • +
    • use_cache (bool) – Set to False to clear caches and force a re-compile.

    • +
    +
    +
    Returns:
    +

    PackageManifest

    +
    +
    +
    + +
    +
    +property is_valid: bool
    +

    True if the project at the given path matches this project type. +Useful for figuring out the best ProjectAPI to use when compiling a project.

    +
    + +
    +
    +process_config_file(**kwargs) bool
    +

    Process the project’s config file. +Returns True if had to create a temporary ape-config.yaml file.

    +
    + +
    +
    +property source_paths: List[Path]
    +

    All the source files in the project. +Excludes files with extensions that don’t have a registered compiler.

    +
    +
    Returns:
    +

    A list of a source file paths in the project.

    +
    +
    Return type:
    +

    List[pathlib.Path]

    +
    +
    +
    + +
    + +
    +
    +class ape.managers.project.types.ApeProject(*, path: Path, contracts_folder: Path, name: str | None = None, version: str | None = None, config_file_name: str = 'ape-config.yaml')
    +

    The default implementation of the ProjectAPI. +By default, the :class:`~ape.managers.project.ProjectManager uses an +ApeProject at the current-working directory.

    +
    + +
    +
    +class ape.managers.project.types.BrownieProject(*, path: Path, contracts_folder: Path, name: str | None = None, version: str | None = None, config_file_name: str = 'brownie-config.yaml')
    +
    +
    +property is_valid: bool
    +

    True if the project at the given path matches this project type. +Useful for figuring out the best ProjectAPI to use when compiling a project.

    +
    + +
    +
    +process_config_file(**kwargs) bool
    +

    Process the project’s config file. +Returns True if had to create a temporary ape-config.yaml file.

    +
    + +
    + +
    +
    +

    Query

    +
    +
    +class ape.managers.query.DefaultQueryProvider
    +

    Default implementation of the QueryAPI. +Allows for the query of blockchain data using connected provider.

    +
    +
    +estimate_query(query: BlockQuery | BlockTransactionQuery | AccountTransactionQuery | ContractCreationQuery | ContractEventQuery | ContractMethodQuery) int | None
    +
    +estimate_query(query: BlockQuery) int | None
    +
    +estimate_query(query: BlockTransactionQuery) int
    +
    +estimate_query(query: ContractCreationQuery) int
    +
    +estimate_query(query: ContractEventQuery) int
    +
    +estimate_query(query: AccountTransactionQuery) int
    +

    Estimation of time needed to complete the query. The estimation is returned +as an int representing milliseconds. A value of None indicates that the +query engine is not available for use or is unable to complete the query.

    +
    +
    Parameters:
    +

    query (QueryType) – Query to estimate.

    +
    +
    Returns:
    +

    Represents milliseconds, returns None if unable to execute.

    +
    +
    Return type:
    +

    Optional[int]

    +
    +
    +
    + +
    +
    +perform_query(query: BlockQuery | BlockTransactionQuery | AccountTransactionQuery | ContractCreationQuery | ContractEventQuery | ContractMethodQuery) Iterator
    +
    +perform_query(query: BlockQuery) Iterator
    +
    +perform_query(query: BlockTransactionQuery) Iterator[TransactionAPI]
    +
    +perform_query(query: ContractCreationQuery) Iterator[ReceiptAPI]
    +
    +perform_query(query: ContractEventQuery) Iterator[ContractLog]
    +
    +perform_query(query: AccountTransactionQuery) Iterator[ReceiptAPI]
    +

    Executes the query using best performing estimate_query query engine.

    +
    +
    Parameters:
    +

    query (QueryType) – query to execute

    +
    +
    Returns:
    +

    Iterator

    +
    +
    +
    + +
    + +
    +
    +class ape.managers.query.QueryManager
    +

    A singleton that manages query engines and performs queries.

    +
    +
    Parameters:
    +

    query (QueryType) – query to execute

    +
    +
    +

    Usage example:

    +
    biggest_block_size = chain.blocks.query("size").max()
    +
    +
    +
    +
    +property engines: Dict[str, QueryAPI]
    +

    A dict of all QueryAPI instances across all +installed plugins.

    +
    +
    Returns:
    +

    dict[str, QueryAPI]

    +
    +
    +
    + +
    +
    +query(query: BlockQuery | BlockTransactionQuery | AccountTransactionQuery | ContractCreationQuery | ContractEventQuery | ContractMethodQuery, engine_to_use: str | None = None) Iterator[BaseInterfaceModel]
    +
    +
    Parameters:
    +
      +
    • query (QueryType) – The type of query to execute

    • +
    • engine_to_use (Optional[str]) – Short-circuit selection logic using +a specific engine. Defaults is set by performance-based selection logic.

    • +
    +
    +
    +
    +
    Raises: QueryEngineError: When given an invalid or

    inaccessible engine_to_use value.

    +
    +
    +
    +
    Returns:
    +

    Iterator[BaseInterfaceModel]

    +
    +
    +
    + +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/methoddocs/plugins.html b/v0.7.6/methoddocs/plugins.html new file mode 100644 index 0000000000..585d93027c --- /dev/null +++ b/v0.7.6/methoddocs/plugins.html @@ -0,0 +1,684 @@ + + + + + + + ape.plugins — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    ape.plugins

    +
    +
    +ape.plugins.register(plugin_type: Type[PluginType], **hookimpl_kwargs) Callable
    +

    Register your plugin to ape. You must call this decorator to get your plugins +included in ape’s plugin ecosystem.

    +

    Usage example:

    +
    @plugins.register(plugins.AccountPlugin)  # 'register()' example
    +def account_types():
    +    return AccountContainer, KeyfileAccount
    +
    +
    +
    +
    Parameters:
    +
      +
    • plugin_type (Type[PluginType]) – The plugin +type to register.

    • +
    • hookimpl_kwargs – Return-values required by the plugin type.

    • +
    +
    +
    Returns:
    +

    Callable

    +
    +
    +
    + +
    +

    Base

    +
    +
    +class ape.plugins.pluggy_patch.PluginType
    +

    Bases: object

    +

    The base plugin class in ape. There are several types of plugins available in ape, such +as the Config or EcosystemPlugin. +Each one of them subclass this class. It is used to namespace the plugin hooks for the +registration process, and to ensure overall conformance to type interfaces as much as possible.

    +
    + +
    +
    +ape.plugins.pluggy_patch.plugin_manager = <pluggy._manager.PluginManager object>
    +

    A manager responsible for registering and accessing plugins (singleton).

    +
    + +
    +
    +

    Accounts

    +
    +
    +class ape.plugins.account.AccountPlugin
    +

    Bases: PluginType

    +

    An account-related plugin. The plugin must register both +an ape.api.accounts.AccountContainerAPI as well as an +ape.api.accounts.AccountAPI.

    +
    +
    +account_types() Tuple[Type[AccountContainerAPI], Type[AccountAPI]]
    +

    A hook for returning a tuple of an account container and an account type. +Each account-base plugin defines and returns their own types here.

    +

    Usage example:

    +
    @plugins.register(plugins.AccountPlugin)
    +def account_types():
    +    return AccountContainer, KeyfileAccount
    +
    +
    +
    +
    Returns:
    +

    Tuple[Type[AccountContainerAPI], +Type[AccountAPI]]

    +
    +
    +
    + +
    + +
    +
    +

    Compiler

    +
    +
    +class ape.plugins.compiler.CompilerPlugin
    +

    Bases: PluginType

    +

    A plugin that implements the ape.api.CompilerAPI, such +as the ape-solidity plugin +or the ape-vyper plugin.

    +
    +
    +register_compiler() Tuple[Tuple[str], Type[CompilerAPI]]
    +

    A hook for returning the set of file extensions the plugin handles +and the compiler class that can be used to compile them.

    +

    Usage example:

    +
    @plugins.register(plugins.CompilerPlugin)
    +def register_compiler():
    +    return (".json",), InterfaceCompiler
    +
    +
    +
    +
    Returns:
    +

    Tuple[Tuple[str], Type[CompilerAPI]]

    +
    +
    +
    + +
    + +
    +
    +

    Config

    +
    +
    +class ape.plugins.config.Config
    +

    Bases: PluginType

    +

    A registered config item. Plugins register config implementations +when they allow additional user-configuration, set in the ape-config.yaml. +See the ConfigManager documentation for more +information on the ape-config.yaml.

    +
    +
    +config_class() Type[PluginConfig]
    +

    A hook that returns a PluginConfig parser class that can be +used to deconstruct the user config options for this plugins.

    +

    NOTE: If none are specified, all injected ape.api.config.PluginConfig’s +are empty.

    +

    Usage example:

    +
    @plugins.register(plugins.Config)
    +def config_class():
    +    return MyPluginConfig
    +
    +
    +
    +
    Returns:
    +

    Type[PluginConfig]

    +
    +
    +
    + +
    + +
    +
    +

    Converter

    +
    +
    +class ape.plugins.converter.ConversionPlugin
    +

    Bases: PluginType

    +

    A plugin for converting values. The ape-ens +plugin is an example of a conversion-plugin.

    +
    +
    +converters() Iterator[Tuple[str, Type[ConverterAPI]]]
    +

    A hook that returns an iterator of tuples of a string ABI type and a +ConverterAPI subclass.

    +

    Usage example:

    +
    @plugins.register(plugins.ConversionPlugin)
    +def converters():
    +    yield int, MweiConversions
    +
    +
    +
    +
    Returns:
    +

    Iterator[tuple[str, Type[ConverterAPI]]]

    +
    +
    +
    + +
    + +
    +
    +

    Network

    +
    +
    +class ape.plugins.network.EcosystemPlugin
    +

    Bases: PluginType

    +

    An ecosystem plugin, such as ape-ethereum. See the +ape.api.networks.EcosystemAPI for more information on +what is required to implement an ecosystem plugin.

    +
    +
    +ecosystems() Iterator[Type[EcosystemAPI]]
    +

    A hook that must return an iterator of ape.api.networks.EcosystemAPI +subclasses.

    +

    Usage example:

    +
    @plugins.register(plugins.EcosystemPlugin)
    +def ecosystems():
    +    yield Ethereum
    +
    +
    +
    +
    Returns:
    +

    Iterator[Type[EcosystemAPI]]

    +
    +
    +
    + +
    + +
    +
    +class ape.plugins.network.ExplorerPlugin
    +

    Bases: PluginType

    +

    A plugin for a blockchain explorer, such as +ape-etherscan.

    +
    +
    +explorers() Iterator[Tuple[str, str, Type[ExplorerAPI]]]
    +

    A hook that must return an iterator of tuples of:

    +
      +
    • the target ecosystem plugin’s name

    • +
    • the network it works with (which must be valid network in the ecosystem)

    • +
    • a ExplorerAPI subclass

    • +
    +

    Usage example:

    +
    @plugins.register(plugins.ExplorerPlugin)
    +def explorers():
    +    yield "ethereum", "mainnet", MyBlockExplorer
    +
    +
    +
    +
    Returns:
    +

    Iterator[tuple[str, str, Type[ape.api.explorers.ExplorerAPI]]]

    +
    +
    +
    + +
    + +
    +
    +class ape.plugins.network.NetworkPlugin
    +

    Bases: PluginType

    +

    A network plugin, such as mainnet or ropsten. Likely, registering networks +will happen soon after registering the ecosystem, as an ecosystem requires +networks.

    +
    +
    +networks() Iterator[Tuple[str, str, Type[NetworkAPI]]]
    +

    A hook that must return an iterator of tuples of:

    + +

    Usage example:

    +
    @plugins.register(plugins.NetworkPlugin)
    +def networks():
    +    yield "ethereum", "ShibaChain", ShibaNetwork
    +
    +
    +
    +
    Returns:
    +

    Iterator[tuple[str, str, Type[NetworkAPI]]]

    +
    +
    +
    + +
    + +
    +
    +class ape.plugins.network.ProviderPlugin
    +

    Bases: PluginType

    +

    A plugin representing a network provider, which is the main API responsible +for making requests against a blockchain. Example provider plugins projects +include ape-infura as well as +ape-alchemy.

    +
    +
    +providers() Iterator[Tuple[str, str, Type[ProviderAPI]]]
    +

    A hook that must return an iterator of tuples of:

    +
      +
    • the target ecosystem plugin’s name

    • +
    • the network it works with (which must be valid network in the ecosystem)

    • +
    • a ape.api.providers.ProviderAPI subclass

    • +
    +

    Usage example:

    +
    @plugins.register(plugins.ProviderPlugin)
    +def providers():
    +    yield "ethereum", "local", MyProvider
    +
    +
    +
    +
    Returns:
    +

    Iterator[tuple[str, str, Type[ProviderAPI]]]

    +
    +
    +
    + +
    + +
    +
    +

    Project

    +
    +
    +class ape.plugins.project.DependencyPlugin
    +

    Bases: PluginType

    +

    A plugin for downloading packages and creating +ProjectPlugin implementations.

    +
    +
    +dependencies() Dict[str, Type[DependencyAPI]]
    +

    A hook that returns a DependencyAPI mapped +to its ape-config.yaml file dependencies special key. For example, +when configuring GitHub dependencies, you set the github key in +the dependencies: block of your ape-config.yaml file and it +will automatically use this DependencyAPI implementation.

    +
    +
    Returns:
    +

    Type[DependencyAPI]

    +
    +
    +
    + +
    + +
    +
    +class ape.plugins.project.ProjectPlugin
    +

    Bases: PluginType

    +

    A plugin for converting files to a PackageManifest. +The default project plugin is the ApeProject. +Otherwise, you can define your own project implementation for converting +a set of files to a PackageManifest, such as one that resolves dependencies +via .gitmodules.

    +
    +
    +projects() Iterator[Type[ProjectAPI]]
    +

    A hook that returns a ProjectAPI subclass type.

    +
    +
    Returns:
    +

    Type[ProjectAPI]

    +
    +
    +
    + +
    + +
    +
    +

    Query

    +
    +
    +class ape.plugins.query.QueryPlugin
    +

    Bases: PluginType

    +

    A plugin for querying chains.

    +
    +
    +query_engines() Iterator[Type[QueryAPI]]
    +

    A hook that returns an iterator of types of a QueryAPI subclasses

    +

    Usage example:

    +
    @plugins.register(plugins.QueryPlugin)
    +def query_engines():
    +    yield PostgresEngine
    +
    +
    +
    +
    Returns:
    +

    Iterator[Type[QueryAPI]]

    +
    +
    +
    + +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/methoddocs/types.html b/v0.7.6/methoddocs/types.html new file mode 100644 index 0000000000..36f01de2ac --- /dev/null +++ b/v0.7.6/methoddocs/types.html @@ -0,0 +1,1105 @@ + + + + + + + ape.types — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    ape.types

    +
    +

    Address

    +
    +
    +ape.types.address.AddressType
    +

    “A checksum address in Ape.”

    +

    alias of ChecksumAddress[ChecksumAddress]

    +
    + +
    +
    +ape.types.address.RawAddress
    +

    A raw data-type representation of an address.

    +

    alias of Union[str, int, HashStr20, HashBytes20]

    +
    + +
    +
    +

    Signatures

    +
    +
    +class ape.types.signatures.SignableMessage(version: bytes, header: bytes, body: bytes)
    +

    Bases: NamedTuple

    +

    A message compatible with EIP-191 that is ready to be signed.

    +

    The properties are components of an EIP-191 signable message. Other message formats +can be encoded into this format for easy signing. This data structure doesn’t need +to know about the original message format. For example, you can think of +EIP-712 as compiling down to an EIP-191 message.

    +

    In typical usage, you should never need to create these by hand. Instead, use +one of the available encode_* methods in this module, like:

    +
    +
      +
    • encode_structured_data()

    • +
    • encode_intended_validator()

    • +
    • encode_defunct()

    • +
    +
    +
    +
    +body: bytes
    +

    Alias for field number 2

    +
    + +
    +
    +header: bytes
    +

    Alias for field number 1

    +
    + +
    +
    +version: bytes
    +

    Alias for field number 0

    +
    + +
    + +
    +
    +class ape.types.signatures.MessageSignature(v: int, r: bytes, s: bytes)
    +

    Bases: _Signature

    +

    A ECDSA signature (vrs) of a message.

    +
    + +
    +
    +class ape.types.signatures.TransactionSignature(v: int, r: bytes, s: bytes)
    +

    Bases: _Signature

    +

    A ECDSA signature (vrs) of a transaction.

    +
    + +
    +
    +signatures.recover_signer(sig: MessageSignature) ChecksumAddress
    +

    Get the address of the signer.

    +
    +
    Parameters:
    +
      +
    • msg (SignableMessage) – A formatted and signable message.

    • +
    • sig (MessageSignature) – Signature of the message.

    • +
    +
    +
    Returns:
    +

    address of message signer.

    +
    +
    Return type:
    +

    AddressType

    +
    +
    +
    + +
    +
    +

    Coverage

    +
    +
    +class ape.types.coverage.ContractCoverage(*, name: str, functions: List[FunctionCoverage] = [])
    +

    Bases: BaseModel

    +

    An individual contract’s coverage.

    +
    +
    +property function_hits: int
    +

    The number of functions with a hit counter greater than zero.

    +
    + +
    +
    +property function_rate: float
    +

    The rate of functions hit versus total functions.

    +
    + +
    +
    +functions: List[FunctionCoverage]
    +

    The coverage of each function individually.

    +
    + +
    +
    +property line_rate: float
    +

    The number of lines hit divided by number of lines.

    +
    + +
    +
    +property lines_covered: int
    +

    All lines that have a hit count greater than zero.

    +
    + +
    +
    +property lines_valid: int
    +

    The number of lines valid for coverage.

    +
    + +
    +
    +property miss_count: int
    +

    The number of lines missed.

    +
    + +
    +
    +model_dump(*args, **kwargs) dict
    +

    Usage docs: https://docs.pydantic.dev/2.5/concepts/serialization/#modelmodel_dump

    +

    Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.

    +
    +
    Parameters:
    +
      +
    • mode – The mode in which to_python should run. +If mode is ‘json’, the dictionary will only contain JSON serializable types. +If mode is ‘python’, the dictionary may contain any Python objects.

    • +
    • include – A list of fields to include in the output.

    • +
    • exclude – A list of fields to exclude from the output.

    • +
    • by_alias – Whether to use the field’s alias in the dictionary key if defined.

    • +
    • exclude_unset – Whether to exclude fields that have not been explicitly set.

    • +
    • exclude_defaults – Whether to exclude fields that are set to their default value from the output.

    • +
    • exclude_none – Whether to exclude fields that have a value of None from the output.

    • +
    • round_trip – Whether to enable serialization and deserialization round-trip support.

    • +
    • warnings – Whether to log warnings when invalid fields are encountered.

    • +
    +
    +
    Returns:
    +

    A dictionary representation of the model.

    +
    +
    +
    + +
    +
    +name: str
    +

    The name of the contract.

    +
    + +
    +
    +property statements: List[CoverageStatement]
    +

    All valid coverage lines from every function in this contract.

    +
    + +
    + +
    +
    +class ape.types.coverage.ContractSourceCoverage(*, source_id: str, contracts: List[ContractCoverage] = [])
    +

    Bases: BaseModel

    +

    An individual source file with coverage collected.

    +
    +
    +contracts: List[ContractCoverage]
    +

    Coverage for each contract in the source file.

    +
    + +
    +
    +property function_hits: int
    +

    The number of functions with a hit counter greater than zero.

    +
    + +
    +
    +property function_rate: float
    +

    The rate of functions hit versus total functions.

    +
    + +
    +
    +include(contract_name: str) ContractCoverage
    +

    Ensure a contract is included in the report.

    +
    + +
    +
    +property line_rate: float
    +

    The number of lines hit divided by number of lines.

    +
    + +
    +
    +property lines_covered: int
    +

    All lines with a hit count greater than zero from every function +in every contract in this source.

    +
    + +
    +
    +property lines_valid: int
    +

    The number of lines valid for coverage.

    +
    + +
    +
    +property miss_count: int
    +

    The number of lines missed.

    +
    + +
    +
    +model_dump(*args, **kwargs) dict
    +

    Usage docs: https://docs.pydantic.dev/2.5/concepts/serialization/#modelmodel_dump

    +

    Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.

    +
    +
    Parameters:
    +
      +
    • mode – The mode in which to_python should run. +If mode is ‘json’, the dictionary will only contain JSON serializable types. +If mode is ‘python’, the dictionary may contain any Python objects.

    • +
    • include – A list of fields to include in the output.

    • +
    • exclude – A list of fields to exclude from the output.

    • +
    • by_alias – Whether to use the field’s alias in the dictionary key if defined.

    • +
    • exclude_unset – Whether to exclude fields that have not been explicitly set.

    • +
    • exclude_defaults – Whether to exclude fields that are set to their default value from the output.

    • +
    • exclude_none – Whether to exclude fields that have a value of None from the output.

    • +
    • round_trip – Whether to enable serialization and deserialization round-trip support.

    • +
    • warnings – Whether to log warnings when invalid fields are encountered.

    • +
    +
    +
    Returns:
    +

    A dictionary representation of the model.

    +
    +
    +
    + +
    +
    +source_id: str
    +

    The ID of the source covered.

    +
    + +
    +
    +property statements: List[CoverageStatement]
    +

    All valid coverage lines from every function in every contract in this source.

    +
    + +
    +
    +property total_functions: int
    +

    The total number of functions in this source.

    +
    + +
    + +
    +
    +class ape.types.coverage.CoverageProject(*, name: str, sources: List[ContractSourceCoverage] = [])
    +

    Bases: BaseModel

    +

    A project with coverage collected.

    +
    +
    +property function_hits: int
    +

    The number of functions with a hit counter greater than zero.

    +
    + +
    +
    +property function_rate: float
    +

    The rate of functions hit versus total functions.

    +
    + +
    +
    +property line_rate: float
    +

    The number of lines hit divided by number of lines.

    +
    + +
    +
    +property lines_covered: int
    +

    The number of lines with a hit count greater than zero from every function +in every contract in every source in this this project.

    +
    + +
    +
    +property lines_valid: int
    +

    The number of lines valid for coverage.

    +
    + +
    +
    +property miss_count: int
    +

    The number of lines missed.

    +
    + +
    +
    +model_dump(*args, **kwargs) dict
    +

    Usage docs: https://docs.pydantic.dev/2.5/concepts/serialization/#modelmodel_dump

    +

    Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.

    +
    +
    Parameters:
    +
      +
    • mode – The mode in which to_python should run. +If mode is ‘json’, the dictionary will only contain JSON serializable types. +If mode is ‘python’, the dictionary may contain any Python objects.

    • +
    • include – A list of fields to include in the output.

    • +
    • exclude – A list of fields to exclude from the output.

    • +
    • by_alias – Whether to use the field’s alias in the dictionary key if defined.

    • +
    • exclude_unset – Whether to exclude fields that have not been explicitly set.

    • +
    • exclude_defaults – Whether to exclude fields that are set to their default value from the output.

    • +
    • exclude_none – Whether to exclude fields that have a value of None from the output.

    • +
    • round_trip – Whether to enable serialization and deserialization round-trip support.

    • +
    • warnings – Whether to log warnings when invalid fields are encountered.

    • +
    +
    +
    Returns:
    +

    A dictionary representation of the model.

    +
    +
    +
    + +
    +
    +name: str
    +

    The name of the project being covered.

    +
    + +
    +
    +sources: List[ContractSourceCoverage]
    +

    Coverage for each source in the project.

    +
    + +
    +
    +property statements: List[CoverageStatement]
    +

    All valid coverage lines from every function in every contract in every source +in this project.

    +
    + +
    +
    +property total_functions: int
    +

    The total number of functions in this source.

    +
    + +
    + +
    +
    +class ape.types.coverage.CoverageReport(*, source_folders: List[Path], timestamp: int, projects: List[CoverageProject] = [])
    +

    Bases: BaseModel

    +

    Coverage report schema inspired from coverage.py.

    +
    +
    +property function_hits: int
    +

    The number of functions with a hit counter greater than zero.

    +
    + +
    +
    +property function_rate: float
    +

    The rate of functions hit versus total functions.

    +
    + +
    +
    +get_html(verbose: bool = False) str
    +

    The coverage HTML report as a string.

    +
    + +
    +
    +get_xml() str
    +

    The coverage XML report as a string. The XML coverage data schema is +meant to be compatible with codecov.io. Thus, some of coverage is modified +slightly, and some of the naming conventions (based on 90s Java) won’t be +super relevant to smart-contract projects.

    +
    + +
    +
    +property line_rate: float
    +

    The number of lines hit divided by number of lines.

    +
    + +
    +
    +property lines_covered: int
    +

    All lines with a hit count greater than zero from every function +in every contract in every source in every project in this report.

    +
    + +
    +
    +property lines_valid: int
    +

    The number of lines valid for coverage.

    +
    + +
    +
    +property miss_count: int
    +

    The number of lines missed.

    +
    + +
    +
    +model_dump(*args, **kwargs) dict
    +

    Usage docs: https://docs.pydantic.dev/2.5/concepts/serialization/#modelmodel_dump

    +

    Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.

    +
    +
    Parameters:
    +
      +
    • mode – The mode in which to_python should run. +If mode is ‘json’, the dictionary will only contain JSON serializable types. +If mode is ‘python’, the dictionary may contain any Python objects.

    • +
    • include – A list of fields to include in the output.

    • +
    • exclude – A list of fields to exclude from the output.

    • +
    • by_alias – Whether to use the field’s alias in the dictionary key if defined.

    • +
    • exclude_unset – Whether to exclude fields that have not been explicitly set.

    • +
    • exclude_defaults – Whether to exclude fields that are set to their default value from the output.

    • +
    • exclude_none – Whether to exclude fields that have a value of None from the output.

    • +
    • round_trip – Whether to enable serialization and deserialization round-trip support.

    • +
    • warnings – Whether to log warnings when invalid fields are encountered.

    • +
    +
    +
    Returns:
    +

    A dictionary representation of the model.

    +
    +
    +
    + +
    +
    +projects: List[CoverageProject]
    +

    Each project with individual coverage tracked.

    +
    + +
    +
    +source_folders: List[Path]
    +

    All source folders to use. This is needed for codecov.

    +
    + +
    +
    +property sources: List[str]
    +

    Every source ID in the report.

    +
    + +
    +
    +property statements: List[CoverageStatement]
    +

    All valid coverage lines from every function in every contract in every source +from every project in this report.

    +
    + +
    +
    +timestamp: int
    +

    The timestamp the report was generated, in milliseconds.

    +
    + +
    +
    +property total_functions: int
    +

    The total number of functions in this source.

    +
    + +
    + +
    +
    +class ape.types.coverage.CoverageStatement(*, location: Tuple[int, int, int, int] | None = None, pcs: Set[int], hit_count: int = 0, tag: str | None = None)
    +

    Bases: BaseModel

    +

    An item that can get hit during coverage. Examples of coverage items are +line segments, which are generally calculated from groupings of AST nodes +occupying the same location, that can be tracked by their PC values. During +a transaction’s trace, we find these values and we find the corresponding +coverage item and increment the hit count. Another example of a coverage item +is a compiler-builtin check, also marked by a PC value. If we encounter such +PC in a trace, its hit count is incremented. Builtin compiler checks may or +may not correspond to an actual location in the source code, depending on the +type of check.

    +
    +
    +hit_count: int
    +

    The times this node was hit.

    +
    + +
    +
    +location: Tuple[int, int, int, int] | None
    +

    The location of the item (line, column, endline, endcolumn). +If multiple PCs share an exact location, it is only tracked as one.

    +
    + +
    +
    +pcs: Set[int]
    +

    The PCs for this node.

    +
    + +
    +
    +tag: str | None
    +

    An additional tag to mark this statement with. +This is useful if the location field is empty.

    +
    + +
    + +
    +
    +class ape.types.coverage.FunctionCoverage(*, name: str, full_name: str, statements: List[CoverageStatement] = [], hit_count: int = 0)
    +

    Bases: BaseModel

    +

    The individual coverage of a function defined in a smart contact.

    +
    +
    +full_name: str
    +

    The unique name of the function.

    +
    + +
    +
    +hit_count: int
    +

    The times this function was called. +NOTE: This is needed as a separate data point since not all methods may have +statements (such as auto-getters).

    +
    + +
    +
    +property line_rate: float
    +

    The number of lines hit divided by number of lines.

    +
    + +
    +
    +property lines_covered: int
    +

    The number of lines with a hit counter greater than zero in this method.

    +
    + +
    +
    +property lines_valid: int
    +

    All lines valid for coverage in this method.

    +
    + +
    +
    +property miss_count: int
    +

    The number of lines missed.

    +
    + +
    +
    +model_dump(*args, **kwargs) dict
    +

    Usage docs: https://docs.pydantic.dev/2.5/concepts/serialization/#modelmodel_dump

    +

    Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.

    +
    +
    Parameters:
    +
      +
    • mode – The mode in which to_python should run. +If mode is ‘json’, the dictionary will only contain JSON serializable types. +If mode is ‘python’, the dictionary may contain any Python objects.

    • +
    • include – A list of fields to include in the output.

    • +
    • exclude – A list of fields to exclude from the output.

    • +
    • by_alias – Whether to use the field’s alias in the dictionary key if defined.

    • +
    • exclude_unset – Whether to exclude fields that have not been explicitly set.

    • +
    • exclude_defaults – Whether to exclude fields that are set to their default value from the output.

    • +
    • exclude_none – Whether to exclude fields that have a value of None from the output.

    • +
    • round_trip – Whether to enable serialization and deserialization round-trip support.

    • +
    • warnings – Whether to log warnings when invalid fields are encountered.

    • +
    +
    +
    Returns:
    +

    A dictionary representation of the model.

    +
    +
    +
    + +
    +
    +name: str
    +

    The display name of the function.

    +
    + +
    +
    +profile_statement(pc: int, location: Tuple[int, int, int, int] | None = None, tag: str | None = None)
    +

    Initialize a statement in the coverage profile with a hit count starting at zero. +This statement is ready to accumulate hits as tests execute.

    +
    +
    Parameters:
    +
      +
    • pc (int) – The program counter of the statement.

    • +
    • location (Optional[ethpm_types.source.SourceStatement]) – The location of the statement, +if it exists.

    • +
    • tag (Optional[str]) – Optionally provide more information about the statements being hit. +This is useful for builtin statements that may be missing context otherwise.

    • +
    +
    +
    +
    + +
    +
    +statements: List[CoverageStatement]
    +

    For statement coverage, these are the individual items. +See CoverageStatement for more details.

    +
    + +
    + +
    +
    +

    Miscellaneous

    +
    +
    +class ape.types.BaseContractLog(*, event_name: str, contract_address: ChecksumAddress = '0x0000000000000000000000000000000000000000', event_arguments: Dict[str, Any] = {})
    +

    Base class representing information relevant to an event instance.

    +
    +
    +contract_address: ChecksumAddress
    +

    The contract responsible for emitting the log.

    +
    + +
    +
    +event_arguments: Dict[str, Any]
    +

    The arguments to the event, including both indexed and non-indexed data.

    +
    + +
    +
    +event_name: str
    +

    The name of the event.

    +
    + +
    + +
    +
    +ape.types.BlockID
    +

    An ID that can match a block, such as the literals "earliest", "latest", or "pending" +as well as a block number or hash (HexBytes).

    +

    alias of Union[int, HexStr, HexBytes, Literal[‘earliest’, ‘latest’, ‘pending’]]

    +
    + +
    +
    +class ape.types.ContractLog(*, event_name: str, contract_address: ChecksumAddress = '0x0000000000000000000000000000000000000000', event_arguments: Dict[str, Any] = {}, transaction_hash: Any, block_number: int, block_hash: Any, log_index: int, transaction_index: int | None = None)
    +

    An instance of a log from a contract.

    +
    +
    +block_hash: Any
    +

    The hash of the block containing the transaction that produced this log.

    +
    + +
    +
    +block_number: int
    +

    The number of the block containing the transaction that produced this log.

    +
    + +
    +
    +log_index: int
    +

    The index of the log on the transaction.

    +
    + +
    +
    +property timestamp: int
    +

    The UNIX timestamp of when the event was emitted.

    +

    NOTE: This performs a block lookup.

    +
    + +
    +
    +transaction_hash: Any
    +

    The hash of the transaction containing this log.

    +
    + +
    +
    +transaction_index: int | None
    +

    The index of the transaction’s position when the log was created. +Is None when from the pending block.

    +
    + +
    + +
    +
    +class ape.types.MockContractLog(*, event_name: str, contract_address: ChecksumAddress = '0x0000000000000000000000000000000000000000', event_arguments: Dict[str, Any] = {})
    +

    A mock version of the ContractLog class used for testing purposes. +This class is designed to match a subset of event arguments in a ContractLog instance +by only comparing those event arguments that the user explicitly provides.

    +

    Inherits from BaseContractLog, and overrides the +equality method for custom comparison +of event arguments between a MockContractLog and a ContractLog instance.

    +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/methoddocs/utils.html b/v0.7.6/methoddocs/utils.html new file mode 100644 index 0000000000..26fe367aa6 --- /dev/null +++ b/v0.7.6/methoddocs/utils.html @@ -0,0 +1,1098 @@ + + + + + + + ape.utils — ape documentation + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    ape.utils

    +
    +
    +class ape.utils.BaseInterface
    +

    Bases: ManagerAccessMixin, ABC

    +

    Abstract class that has manager access.

    +
    + +
    +
    +class ape.utils.BaseInterfaceModel
    +

    Bases: BaseInterface, BaseModel

    +

    An abstract base-class with manager access on a pydantic base model.

    +
    +
    +model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    + +
    +
    +class ape.utils.ExtraAttributesMixin
    +

    Bases: object

    +

    A mixin to use on models that provide ExtraModelAttributes. +NOTE: Must come _before_ your base-model class in subclass tuple to function.

    +
    + +
    +
    +class ape.utils.ExtraModelAttributes(*, name: str, attributes: Dict[str, Any] | BaseModel, include_getattr: bool = True, include_getitem: bool = False, additional_error_message: str | None = None)
    +

    Bases: BaseModel

    +

    A class for defining extra model attributes.

    +
    +
    +additional_error_message: str | None
    +

    An additional error message to include at the end of +the normal IndexError message.

    +
    + +
    +
    +attributes: Dict[str, Any] | BaseModel
    +

    The attributes.

    +
    + +
    +
    +get(name: str) Any | None
    +

    Get an attribute.

    +
    +
    Parameters:
    +

    name (str) – The name of the attribute.

    +
    +
    Returns:
    +

    The attribute if it exists, else None.

    +
    +
    Return type:
    +

    Optional[Any]

    +
    +
    +
    + +
    +
    +include_getattr: bool
    +

    Whether to use these in __getattr__.

    +
    + +
    +
    +include_getitem: bool
    +

    Whether to use these in __getitem__.

    +
    + +
    +
    +model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}
    +

    Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

    +
    + +
    +
    +model_fields: ClassVar[dict[str, FieldInfo]] = {'additional_error_message': FieldInfo(annotation=Union[str, NoneType], required=False), 'attributes': FieldInfo(annotation=Union[Dict[str, Any], BaseModel], required=True), 'include_getattr': FieldInfo(annotation=bool, required=False, default=True), 'include_getitem': FieldInfo(annotation=bool, required=False, default=False), 'name': FieldInfo(annotation=str, required=True)}
    +

    Metadata about the fields defined on the model, +mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    +

    This replaces Model.__fields__ from Pydantic V1.

    +
    + +
    +
    +name: str
    +

    The name of the attributes. This is important +in instances such as when an attribute is missing, +we can show a more accurate exception message.

    +
    + +
    + +
    +
    +class ape.utils.GeneratedDevAccount(address, private_key)
    +

    Bases: tuple

    +

    An account key-pair generated from the test mnemonic. Set the test mnemonic +in your ape-config.yaml file under the test section. Access your test +accounts using the test_accounts property.

    +

    Config example:

    +
    test:
    +  mnemonic: test test test test test test test test test test test junk
    +  number_of_accounts: 10
    +
    +
    +
    +
    +address
    +

    Alias for field number 0

    +
    + +
    +
    +private_key
    +

    Alias for field number 1

    +
    + +
    + +
    +
    +class ape.utils.GithubClient
    +

    Bases: object

    +

    An HTTP client for the Github API.

    +
    +
    +property ape_org: Organization
    +

    //github.com/ApeWorX).

    +
    +
    Type:
    +

    The ApeWorX organization on Github (https

    +
    +
    +
    + +
    +
    +property available_plugins: Set[str]
    +

    The available ape plugins, found from looking at the ApeWorX Github organization.

    +
    +
    Returns:
    +

    The plugin names as 'ape_plugin_name' (module-like).

    +
    +
    Return type:
    +

    Set[str]

    +
    +
    +
    + +
    +
    +clone_repo(repo_path: str, target_path: Path, branch: str | None = None, scheme: str = 'http')
    +

    Clone a repository from Github.

    +
    +
    Parameters:
    +
      +
    • repo_path (str) – The path on Github to the repository, +e.g. OpenZeppelin/openzeppelin-contracts.

    • +
    • target_path (Path) – The local path to store the repo.

    • +
    • branch (Optional[str]) – The branch to clone. Defaults to the default branch.

    • +
    • scheme (str) – The git scheme to use when cloning. Defaults to ssh.

    • +
    +
    +
    +
    + +
    +
    +download_package(repo_path: str, version: str, target_path: Path)
    +

    Download a package from Github. This is useful for managing project dependencies.

    +
    +
    Parameters:
    +
      +
    • repo_path (str) – The path on Github to the repository, +such as OpenZeppelin/openzeppelin-contracts.

    • +
    • version (str) – Number to specify update types +to the downloaded package.

    • +
    • target_path (path) – A path in your local filesystem to save the downloaded package.

    • +
    +
    +
    +
    + +
    +
    +get_release(repo_path: str, version: str) GitRelease
    +

    Get a release from Github.

    +
    +
    Parameters:
    +
      +
    • repo_path (str) – The path on Github to the repository, +e.g. OpenZeppelin/openzeppelin-contracts.

    • +
    • version (str) – The version of the release to get. Pass in "latest" +to get the latest release.

    • +
    +
    +
    Returns:
    +

    github.GitRelease.GitRelease

    +
    +
    +
    + +
    +
    +get_repo(repo_path: str) Repository
    +

    Get a repository from GitHub.

    +
    +
    Parameters:
    +

    repo_path (str) – The path to the repository, such as +OpenZeppelin/openzeppelin-contracts.

    +
    +
    Returns:
    +

    github.Repository.Repository

    +
    +
    +
    + +
    + +
    +
    +class ape.utils.JoinableQueue(maxsize=0)
    +

    Bases: Queue

    +

    A queue that can be joined, useful for multi-processing. +Borrowed from the py-geth library.

    +
    +
    +join(timeout=None)
    +

    Blocks until all items in the Queue have been gotten and processed.

    +

    The count of unfinished tasks goes up whenever an item is added to the +queue. The count goes down whenever a consumer thread calls task_done() +to indicate the item was retrieved and all work on it is complete.

    +

    When the count of unfinished tasks drops to zero, join() unblocks.

    +
    + +
    + +
    +
    +class ape.utils.Struct
    +

    Bases: object

    +

    A class for contract return values using the struct data-structure.

    +
    +
    +items() Dict
    +

    Override

    +
    + +
    + +
    +
    +class ape.utils.StructParser(method_abi: ConstructorABI | MethodABI | EventABI)
    +

    Bases: object

    +

    A utility class responsible for parsing structs out of values.

    +
    +
    +decode_output(values: List | Tuple) Any
    +

    Parse a list of output types and values into structs. +Values are only altered when they are a struct. +This method also handles structs within structs as well as arrays of structs.

    +
    +
    Parameters:
    +

    values (Union[List, Tuple]) – A list of of output values.

    +
    +
    Returns:
    +

    The same input values only decoded into structs when applicable.

    +
    +
    Return type:
    +

    Any

    +
    +
    +
    + +
    +
    +property default_name: str
    +

    The default struct return name for unnamed structs. +This value is also used for named tuples where the tuple does not have a name +(but each item in the tuple does have a name).

    +
    + +
    +
    +encode_input(values: List | Tuple | Dict) Any
    +

    Convert dicts and other objects to struct inputs.

    +
    +
    Parameters:
    +

    values (Union[List, Tuple]) – A list of of input values.

    +
    +
    Returns:
    +

    The same input values only decoded into structs when applicable.

    +
    +
    Return type:
    +

    Any

    +
    +
    +
    + +
    + +
    +
    +class ape.utils.TraceStyles
    +

    Bases: object

    +

    Colors to use when displaying a call trace. +Each item in the class points to the part of +the trace it colors.

    +
    +
    +CONTRACTS = '#ff8c00'
    +

    Contract type names.

    +
    + +
    +
    +DELEGATE = '#d75f00'
    +

    The part ‘(delegate)’ that appears before delegate calls.

    +
    + +
    +
    +GAS_COST = 'dim'
    +

    The gas used of the call.

    +
    + +
    +
    +INPUTS = 'bright_magenta'
    +

    Method arguments.

    +
    + +
    +
    +METHODS = 'bright_green'
    +

    Method names; not including arguments or return values.

    +
    + +
    +
    +OUTPUTS = 'bright_blue'
    +

    Method return values.

    +
    + +
    +
    +VALUE = '#00afd7'
    +

    The transaction value, when it’s > 0.

    +
    + +
    + +
    +
    +ape.utils.add_padding_to_strings(str_list: List[str], extra_spaces: int = 0, space_character: str = ' ') List[str]
    +

    Append spacing to each string in a list of strings such that +they all have the same length.

    +
    +
    Parameters:
    +
      +
    • str_list (List[str]) – The list of strings that need padding.

    • +
    • extra_spaces (int) – Optionally append extra spacing. Defaults to 0.

    • +
    • space_character (str) – The character to use in the padding. Defaults to " ".

    • +
    +
    +
    Returns:
    +

    A list of equal-length strings with padded spaces.

    +
    +
    Return type:
    +

    List[str]

    +
    +
    +
    + +
    +
    +ape.utils.allow_disconnected(fn: Callable)
    +

    A decorator that instead of raising ProviderNotConnectedError +warns and returns None.

    +

    Usage example:

    +
    from typing import Optional
    +from ape.types import SnapshotID
    +from ape.utils import return_none_when_disconnected
    +
    +@allow_disconnected
    +def try_snapshot(self) -> Optional[SnapshotID]:
    +    return self.chain.snapshot()
    +
    +
    +
    + +
    +
    +ape.utils.expand_environment_variables(contents: str) str
    +

    Replace substrings of the form $name or ${name} in the given path +with the value of environment variable name.

    +
    +
    Parameters:
    +

    contents (str) – A path-like object representing a file system. +A path-like object is either a string or bytes object +representing a path.

    +
    +
    Returns:
    +

    The given content with all environment variables replaced with their values.

    +
    +
    Return type:
    +

    str

    +
    +
    +
    + +
    +
    +ape.utils.extract_nested_value(root: Mapping, *args: str) Dict | None
    +

    Dig through a nested dict using the given keys and return the +last-found object.

    +

    Usage example:

    +
    >>> extract_nested_value({"foo": {"bar": {"test": "VALUE"}}}, "foo", "bar", "test")
    +'VALUE'
    +
    +
    +
    +
    Parameters:
    +

    root (dict) – Nested keys to form arguments.

    +
    +
    Returns:
    +

    The final value if it exists +else None if the tree ends at any point.

    +
    +
    Return type:
    +

    dict, optional

    +
    +
    +
    + +
    +
    +ape.utils.gas_estimation_error_message(tx_error: Exception) str
    +

    Get an error message containing the given error and an explanation of how the +gas estimation failed, as in ape.api.providers.ProviderAPI implementations.

    +
    +
    Parameters:
    +

    tx_error (Exception) – The error that occurred when trying to estimate gas.

    +
    +
    Returns:
    +

    An error message explaining that the gas failed and that the transaction +will likely revert.

    +
    +
    Return type:
    +

    str

    +
    +
    +
    + +
    +
    +ape.utils.generate_dev_accounts(mnemonic: str = 'test test test test test test test test test test test junk', number_of_accounts: int = 10, hd_path: str = "m/44'/60'/0'/0", start_index: int = 0) List[GeneratedDevAccount]
    +

    Create accounts from the given test mnemonic. +Use these accounts (or the mnemonic) in chain-genesis +for testing providers.

    +
    +
    Parameters:
    +
      +
    • mnemonic (str) – mnemonic phrase or seed words.

    • +
    • number_of_accounts (int) – Number of accounts. Defaults to 10.

    • +
    • hd_path (str) – Hard Wallets/HD Keys derivation path format. +Defaults to "m/44'/60'/0'/0".

    • +
    • start_index (int) – The index to start from in the path. Defaults +to 0.

    • +
    +
    +
    Returns:
    +

    List of development accounts.

    +
    +
    Return type:
    +

    List[GeneratedDevAccount]

    +
    +
    +
    + +
    +
    +ape.utils.get_all_files_in_directory(path: Path, pattern: Pattern | str | None = None) List[Path]
    +

    Returns all the files in a directory structure.

    +

    For example, given a directory structure like:

    +
    dir_a: dir_b, file_a, file_b
    +dir_b: file_c
    +
    +
    +

    and you provide the path to dir_a, it will return a list containing +the paths to file_a, file_b and file_c.

    +
    +
    Parameters:
    +
      +
    • path (pathlib.Path) – A directory containing files of interest.

    • +
    • pattern (Optional[Union[Pattern, str]]) – Optionally provide a regex +pattern to match.

    • +
    +
    +
    Returns:
    +

    A list of files in the given directory.

    +
    +
    Return type:
    +

    List[pathlib.Path]

    +
    +
    +
    + +
    +
    +ape.utils.get_current_timestamp_ms() int
    +

    Get the current UNIX timestamp in milliseconds.

    +
    +
    Returns:
    +

    int

    +
    +
    +
    + +
    +
    +ape.utils.get_package_version(obj: Any) str
    +

    Get the version of a single package.

    +
    +
    Parameters:
    +

    obj – object to search inside for __version__.

    +
    +
    Returns:
    +

    version string.

    +
    +
    Return type:
    +

    str

    +
    +
    +
    + +
    +
    +ape.utils.get_relative_path(target: Path, anchor: Path) Path
    +

    Compute the relative path of target relative to anchor, +which may or may not share a common ancestor.

    +

    NOTE: Both paths must be absolute.

    +
    +
    Parameters:
    +
      +
    • target (pathlib.Path) – The path we are interested in.

    • +
    • anchor (pathlib.Path) – The path we are starting from.

    • +
    +
    +
    Returns:
    +

    The new path to the target path from the anchor path.

    +
    +
    Return type:
    +

    pathlib.Path

    +
    +
    +
    + +
    +
    +class ape.utils.injected_before_use(fget=None, fset=None, fdel=None, doc=None)
    +

    Bases: property

    +

    Injected properties are injected class variables that must be set before use.

    +

    NOTE: do not appear in a Pydantic model’s set of properties.

    +
    + +
    +
    +ape.utils.is_array(abi_type: str | ABIType) bool
    +

    Returns True if the given type is a probably an array.

    +
    +
    Parameters:
    +

    abi_type (Union[str, ABIType]) – The type to check.

    +
    +
    Returns:
    +

    bool

    +
    +
    +
    + +
    +
    +ape.utils.is_evm_precompile(address: str) bool
    +

    Returns True if the given address string is a known +Ethereum pre-compile address.

    +
    +
    Parameters:
    +

    address (str) –

    +
    +
    Returns:
    +

    bool

    +
    +
    +
    + +
    +
    +ape.utils.is_named_tuple(outputs: Sequence[ABIType], output_values: Sequence) bool
    +

    Returns True if the given output is a tuple where every item is named.

    +
    + +
    +
    +ape.utils.is_struct(outputs: ABIType | Sequence[ABIType]) bool
    +

    Returns True if the given output is a struct.

    +
    + +
    +
    +ape.utils.is_zero_hex(address: str) bool
    +

    Returns True if the hex str is only zero. +NOTE: Empty hexes like "0x" are considered zero.

    +
    +
    Parameters:
    +

    address (str) – The address to check.

    +
    +
    Returns:
    +

    bool

    +
    +
    +
    + +
    +
    +ape.utils.load_config(path: Path, expand_envars=True, must_exist=False) Dict
    +

    Load a configuration file into memory. +A file at the given path must exist or else it will throw OSError. +The configuration file must be a .json or .yaml or else it will throw TypeError.

    +
    +
    Parameters:
    +
      +
    • path (str) – path to filesystem to find.

    • +
    • expand_envars (bool) – True the variables in path +are able to expand to show full path.

    • +
    • must_exist (bool) – True will be set if the configuration file exist +and is able to be load.

    • +
    +
    +
    Returns:
    +

    Configured settings parsed from a config file.

    +
    +
    Return type:
    +

    Dict (dict)

    +
    +
    +
    + +
    +
    +ape.utils.pragma_str_to_specifier_set(pragma_str: str) SpecifierSet | None
    +

    Convert the given pragma str to a packaging.version.SpecifierSet +if possible.

    +
    +
    Parameters:
    +

    pragma_str (str) – The str to convert.

    +
    +
    Returns:
    +

    Optional[packaging.version.SpecifierSet]

    +
    +
    +
    + +
    +
    +ape.utils.raises_not_implemented(fn)
    +

    Decorator for raising helpful not implemented error.

    +
    + +
    +
    +ape.utils.returns_array(abi: MethodABI) bool
    +

    Returns True if the given method ABI likely returns an array.

    +
    +
    Parameters:
    +

    abi (MethodABI) – An ABI method.

    +
    +
    Returns:
    +

    bool

    +
    +
    +
    + +
    +
    +ape.utils.run_until_complete(*item: Any) Any
    +

    Completes the given coroutine and returns its value.

    +
    +
    Parameters:
    +

    *item (Any) – A coroutine or any return value from an async method. If +not given a coroutine, returns the given item. Provide multiple +coroutines to run tasks in parallel.

    +
    +
    Returns:
    +

    The value that results in awaiting the coroutine. +Else, item if item is not a coroutine. If given multiple coroutines, +returns the result from asyncio.gather.

    +
    +
    Return type:
    +

    (Any)

    +
    +
    +
    + +
    +
    +class ape.utils.singledispatchmethod(func)
    +

    Bases: object

    +

    Single-dispatch generic method descriptor.

    +

    Supports wrapping existing descriptors and handles non-descriptor +callables as instance methods.

    +
    +
    +register(cls, func) func
    +

    Registers a new implementation for the given cls on a generic_method.

    +
    + +
    + +
    +
    +ape.utils.spawn(target, *args, **kwargs)
    +

    Spawn a new daemon thread. Borrowed from the py-geth library.

    +
    + +
    +
    +ape.utils.stream_response(download_url: str, progress_bar_description: str = 'Downloading') bytes
    +

    Download HTTP content by streaming and returning the bytes. +Progress bar will be displayed in the CLI.

    +
    +
    Parameters:
    +
      +
    • download_url (str) – String to get files to download.

    • +
    • progress_bar_description (str) – Downloading word.

    • +
    +
    +
    Returns:
    +

    Content in bytes to show the progress.

    +
    +
    Return type:
    +

    bytes

    +
    +
    +
    + +
    +
    +class ape.utils.use_temp_sys_path(path: Path, exclude: List[Path] | None = None)
    +

    Bases: object

    +

    A context manager to manage injecting and removing paths from +a user’s sys paths without permanently modifying it.

    +
    + +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/objects.inv b/v0.7.6/objects.inv new file mode 100644 index 0000000000..56ccdb1826 Binary files /dev/null and b/v0.7.6/objects.inv differ diff --git a/v0.7.6/py-modindex.html b/v0.7.6/py-modindex.html new file mode 100644 index 0000000000..2aef569517 --- /dev/null +++ b/v0.7.6/py-modindex.html @@ -0,0 +1,447 @@ + + + + + + Python Module Index — ape documentation + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    +
      +
    • + +
    • +
    • +
    +
    +
    +
    +
    + + +

    Python Module Index

    + +
    + a +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
    + a
    + ape +
        + ape.api.accounts +
        + ape.api.address +
        + ape.api.compiler +
        + ape.api.config +
        + ape.api.convert +
        + ape.api.explorers +
        + ape.api.networks +
        + ape.api.projects +
        + ape.api.providers +
        + ape.api.query +
        + ape.cli.arguments +
        + ape.cli.choices +
        + ape.cli.commands +
        + ape.cli.options +
        + ape.cli.paramtype +
        + ape.cli.utils +
        + ape.exceptions +
        + ape.managers.accounts +
        + ape.managers.compilers +
        + ape.managers.config +
        + ape.managers.converters +
        + ape.managers.networks +
        + ape.managers.project.dependency +
        + ape.managers.project.manager +
        + ape.managers.query +
        + ape.plugins +
        + ape.plugins.account +
        + ape.plugins.compiler +
        + ape.plugins.config +
        + ape.plugins.converter +
        + ape.plugins.network +
        + ape.plugins.pluggy_patch +
        + ape.plugins.project +
        + ape.plugins.query +
        + ape.types +
        + ape.types.address +
        + ape.types.coverage +
        + ape.utils +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/search.html b/v0.7.6/search.html new file mode 100644 index 0000000000..a4fcb0180c --- /dev/null +++ b/v0.7.6/search.html @@ -0,0 +1,257 @@ + + + + + + Search — ape documentation + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    +
      +
    • + +
    • +
    • +
    +
    +
    +
    +
    + + + + +
    + +
    + +
    +
    + +
    +
    +
    +
    + + + + + + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/searchindex.js b/v0.7.6/searchindex.js new file mode 100644 index 0000000000..0d0a4854f0 --- /dev/null +++ b/v0.7.6/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["commands/accounts", "commands/compile", "commands/console", "commands/init", "commands/networks", "commands/plugins", "commands/pm", "commands/run", "commands/test", "index", "methoddocs/ape", "methoddocs/api", "methoddocs/cli", "methoddocs/contracts", "methoddocs/exceptions", "methoddocs/managers", "methoddocs/plugins", "methoddocs/types", "methoddocs/utils", "userguides/accounts", "userguides/clis", "userguides/compile", "userguides/config", "userguides/console", "userguides/contracts", "userguides/data", "userguides/dependencies", "userguides/developing_plugins", "userguides/installing_plugins", "userguides/logging", "userguides/networks", "userguides/projects", "userguides/proxy", "userguides/publishing", "userguides/quickstart", "userguides/scripts", "userguides/testing", "userguides/transactions"], "filenames": ["commands/accounts.rst", "commands/compile.rst", "commands/console.rst", "commands/init.rst", "commands/networks.rst", "commands/plugins.rst", "commands/pm.rst", "commands/run.rst", "commands/test.rst", "index.md", "methoddocs/ape.md", "methoddocs/api.md", "methoddocs/cli.md", "methoddocs/contracts.md", "methoddocs/exceptions.md", "methoddocs/managers.md", "methoddocs/plugins.md", "methoddocs/types.md", "methoddocs/utils.md", "userguides/accounts.md", "userguides/clis.md", "userguides/compile.md", "userguides/config.md", "userguides/console.md", "userguides/contracts.md", "userguides/data.md", "userguides/dependencies.md", "userguides/developing_plugins.md", "userguides/installing_plugins.md", "userguides/logging.md", "userguides/networks.md", "userguides/projects.md", "userguides/proxy.md", "userguides/publishing.md", "userguides/quickstart.md", "userguides/scripts.md", "userguides/testing.md", "userguides/transactions.md"], "titles": ["accounts", "compile", "console", "init", "networks", "plugins", "pm", "run", "test", "Ape-Docs", "ape", "ape.api", "ape.cli", "ape.contracts", "ape.exceptions", "ape.managers", "ape.plugins", "ape.types", "ape.utils", "Accounts", "CLIs", "Compile", "Configure Ape", "Ape Console", "Contracts", "Querying Data", "Dependencies", "Developing Plugins", "Plugins", "Logging", "Networks", "Developing Projects with Ape", "Proxy Contracts", "Publishing", "Overview", "Scripting", "Testing", "Making Transactions"], "terms": {"command": [0, 4, 5, 6, 7, 11, 15, 19, 20, 21, 22, 24, 26, 27, 28, 29, 30, 31, 34, 35], "line": [0, 4, 5, 12, 15, 17, 34, 35, 36], "helper": [0, 4, 5], "manag": [0, 4, 5, 6, 9, 10, 11, 12, 13, 14, 16, 18, 19, 20, 22, 23, 24, 25, 27, 31, 33, 35, 36], "local": [0, 2, 4, 6, 10, 11, 13, 14, 15, 16, 18, 19, 21, 22, 23, 24, 25, 27, 28, 34, 36, 37], "you": [0, 1, 6, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "can": [0, 6, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "unlock": [0, 19], "from": [0, 3, 6, 7, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36], "script": [0, 7, 9, 12, 15, 19, 20, 23, 29, 30, 36, 37], "consol": [0, 7, 9, 19, 24, 25, 27, 30, 31, 36], "us": [0, 6, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "load": [0, 1, 12, 13, 15, 18, 19, 20, 23, 24, 25, 26, 27, 31, 33, 37], "method": [0, 7, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 24, 25, 27, 30, 32, 33, 36, 37], "option": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 13, 14, 15, 16, 17, 18, 19, 20, 23, 26, 27, 30, 34, 35, 36], "arg": [0, 4, 5, 6, 7, 11, 12, 13, 14, 17, 18, 23, 24, 25], "an": [0, 3, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 33, 34, 35, 36, 37], "exist": [0, 11, 12, 13, 15, 17, 18, 20, 21, 23, 27, 30, 33, 36], "v": [0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 17, 23, 26, 29], "verbos": [0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 17, 23, 29, 34, 36], "lvl": [0, 1, 2, 3, 4, 5, 6, 7, 8, 23], "One": [0, 1, 2, 3, 4, 5, 6, 7, 8, 23, 24, 36, 37], "error": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 15, 18, 20, 23, 24, 29, 30], "warn": [0, 1, 2, 3, 4, 5, 6, 7, 8, 13, 17, 18, 19, 21, 22, 23, 26, 27, 29, 30, 34], "success": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 23, 29, 34], "info": [0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 15, 20, 23, 27, 29, 36], "debug": [0, 1, 2, 3, 4, 5, 6, 7, 8, 19, 23, 25, 29, 30, 34], "argument": [0, 1, 5, 6, 8, 11, 13, 14, 15, 17, 18, 19, 20, 23, 24, 26, 27, 30, 33, 34, 35, 37], "alia": [0, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 23, 24, 26, 27, 33], "requir": [0, 6, 10, 11, 12, 13, 14, 15, 16, 18, 20, 22, 24, 26, 28, 30, 31, 34, 36, 37], "privat": [0, 11, 19, 34], "kei": [0, 11, 12, 13, 15, 16, 17, 18, 19, 21, 22, 23, 24, 26, 27, 34, 37], "creat": [0, 3, 11, 12, 14, 15, 16, 17, 18, 21, 22, 23, 24, 25, 27, 30, 31, 36], "random": [0, 19, 36], "mnemon": [0, 15, 18, 19, 22, 36], "seed": [0, 18, 19], "phrase": [0, 18, 19], "hide": [0, 19], "newli": [0, 19], "termin": [0, 12, 13, 14, 15, 34, 36], "word": [0, 18, 19], "count": [0, 15, 17, 18, 19], "word_count": 0, "number": [0, 11, 12, 13, 14, 15, 17, 18, 22, 23, 25, 30], "default": [0, 3, 4, 8, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 30, 35, 36, 37], "12": [0, 19], "hd": [0, 18, 19], "path": [0, 5, 10, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 24, 26, 30, 36], "custom_hd_path": 0, "specifi": [0, 11, 12, 15, 16, 17, 18, 19, 20, 22, 24, 26, 27, 28, 30, 35, 36, 37], "deriv": [0, 18, 30, 36], "m": [0, 18, 36], "44": [0, 18, 36], "60": [0, 18, 30, 36], "0": [0, 6, 8, 11, 12, 13, 15, 17, 18, 19, 20, 21, 22, 23, 24, 26, 28, 30, 32, 36, 37], "when": [0, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 30, 32, 34, 35, 36, 37], "avail": [0, 5, 11, 13, 15, 16, 17, 18, 19, 23, 24, 25, 26, 27, 28, 29, 36, 37], "all": [0, 1, 4, 5, 6, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 30, 31, 34, 36, 37], "output": [0, 12, 13, 14, 17, 18, 21, 23, 27, 29, 36, 37], "plugin": [0, 9, 11, 12, 15, 18, 19, 20, 23, 24, 25, 26, 30, 35, 36], "manifest": [1, 11, 15, 26, 33], "thi": [1, 6, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37], "project": [1, 2, 3, 5, 6, 7, 8, 9, 10, 12, 13, 14, 17, 18, 21, 22, 23, 26, 28, 30, 33, 35, 37], "save": [1, 15, 18, 24, 35], "result": [1, 4, 11, 12, 13, 15, 18, 22, 23, 24], "back": [1, 11, 13, 15, 24, 30], "note": [1, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37], "ap": [1, 3, 4, 6, 7, 8, 19, 21, 24, 25, 26, 27, 28, 29, 30, 32, 33, 35], "automat": [1, 6, 12, 15, 16, 20, 23, 24, 26, 30, 33, 35, 36], "recompil": [1, 26], "ani": [1, 7, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 22, 23, 26, 27, 30, 34, 35, 36, 37], "chang": [1, 8, 11, 12, 13, 15, 22, 23, 29, 30, 35, 36], "contract": [1, 8, 9, 10, 11, 12, 14, 15, 17, 18, 19, 21, 23, 30, 33, 34, 37], "each": [1, 11, 15, 16, 17, 18, 19, 22, 25, 26, 27, 30, 35, 36, 37], "time": [1, 11, 13, 15, 17, 19, 20, 22, 24, 26, 36, 37], "i": [1, 7, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "do": [1, 11, 14, 15, 18, 19, 22, 23, 24, 25, 26, 27, 29, 30, 32, 34, 35, 36], "have": [1, 11, 13, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 33, 34, 35, 36, 37], "manual": [1, 23, 30, 36], "trigger": [1, 36], "file_path": [1, 11, 15], "f": [1, 6, 12, 13, 15, 20, 27, 35], "forc": [1, 6, 11, 15, 26], "select": [1, 12, 13, 15, 19, 20, 23, 35], "": [1, 5, 6, 8, 11, 12, 13, 15, 16, 17, 18, 19, 21, 22, 24, 25, 26, 27, 28, 30, 31, 33, 35, 36, 37], "size": [1, 11, 15, 34], "show": [1, 11, 14, 18, 19, 20, 23, 28, 29, 30, 36, 37], "deploy": [1, 11, 13, 15, 31], "bytecod": [1, 11], "includ": [1, 5, 6, 11, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 26, 28, 33, 36, 37], "depend": [1, 6, 9, 11, 15, 16, 17, 18, 27], "also": [1, 6, 10, 11, 12, 13, 14, 15, 17, 18, 19, 21, 22, 23, 24, 25, 26, 29, 30, 31, 33, 34, 35, 36, 37], "open": [2, 26, 34, 36], "allow": [3, 11, 12, 15, 16, 20, 22, 23, 24, 30, 32, 35, 36, 37], "user": [3, 10, 11, 12, 14, 15, 16, 17, 18, 20, 22, 24, 29, 34, 36], "folder": [3, 7, 8, 15, 17, 21, 23, 25, 31, 36, 37], "config": [3, 10, 18, 19, 21, 22, 23, 28, 31, 36, 37], "yaml": [3, 4, 11, 12, 15, 16, 18, 19, 21, 22, 23, 26, 28, 30, 31, 36, 37], "more": [3, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37], "inform": [3, 11, 15, 16, 17, 19, 21, 22, 23, 24, 25, 26, 29, 30, 31, 33, 36], "http": [3, 11, 15, 17, 18, 22, 27, 28, 29, 30, 34], "doc": [3, 11, 17, 18, 27], "apeworx": [3, 18, 27, 28, 30, 33, 34], "io": [3, 17], "stabl": 3, "userguid": 3, "html": [3, 17, 36], "github": [3, 6, 11, 15, 16, 18, 22, 28, 30, 34], "org": [3, 15, 26], "repo": [3, 15, 18], "clone": [3, 18, 26, 32], "templat": [3, 27], "regist": [4, 11, 15, 16, 18, 34, 35], "ecosystem": [4, 11, 12, 14, 15, 16, 20, 25, 30, 34, 35, 36], "provid": [4, 6, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 27, 28, 29, 33, 34, 35, 37], "format": [4, 11, 12, 15, 17, 18], "output_format": 4, "tree": [4, 11, 12, 18], "ecosystem_filt": [4, 15], "filter": [4, 11, 12, 13, 20], "ethereum": [4, 11, 15, 16, 18, 19, 20, 22, 23, 24, 25, 27, 28, 30, 32, 34, 35, 36, 37], "network_filt": [4, 15], "sepolia": [4, 20, 35], "fork": [4, 11, 15, 22, 36, 37], "mainnet": [4, 11, 15, 16, 20, 22, 23, 25, 30, 33, 34, 35, 37], "goerli": [4, 22, 30, 35, 37], "provider_filt": [4, 11, 15], "geth": [4, 11, 14, 15, 18, 24, 28, 30, 36, 37], "test": [4, 9, 11, 15, 17, 18, 20, 21, 23, 24, 26, 27, 30], "start": [4, 11, 13, 15, 17, 18, 20, 23, 27, 30, 33, 34, 35, 36], "subprocess": [4, 11, 14], "node": [4, 11, 15, 17, 22, 28, 30], "independ": 4, "stream": [4, 18], "stdout": 4, "stderr": 4, "overrid": [4, 11, 12, 14, 15, 17, 18, 21, 30], "see": [4, 10, 11, 15, 16, 17, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37], "name": [5, 6, 7, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 33, 34, 35, 36, 37], "dir": 5, "y": [5, 6, 15, 26], "ye": [5, 6, 12, 26], "don": [5, 15, 24, 27, 30, 36, 37], "t": [5, 11, 15, 17, 22, 24, 27, 30, 36, 37], "ask": [5, 11, 19, 26], "confirm": [5, 6, 11, 12, 13, 15, 19, 26], "u": 5, "upgrad": [5, 32, 34], "newest": 5, "version": [5, 6, 11, 14, 15, 17, 18, 20, 21, 22, 23, 24, 26, 28, 30, 34, 36], "displai": [5, 11, 13, 14, 17, 18, 19, 30, 34, 37], "core": [5, 11, 22, 24, 26, 27, 30, 31, 34], "packag": [6, 7, 11, 14, 15, 16, 18, 19, 21, 27, 33, 34], "tool": [6, 24, 34], "The": [6, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37], "re": [6, 8, 11, 15, 23, 26, 36], "download": [6, 11, 15, 16, 18, 26], "cach": [6, 10, 11, 15, 23, 26, 36], "ref": [6, 15, 26], "A": [6, 7, 11, 12, 13, 14, 15, 16, 17, 18, 22, 23, 24, 26, 27, 28, 30, 31, 32, 36, 37], "refer": [6, 11, 13, 15, 22, 24, 26, 27, 30, 34], "flag": [6, 11, 19, 20, 21, 26, 28, 29, 30, 34, 35, 36, 37], "branch": [6, 11, 15, 18, 26, 28], "tag": [6, 15, 17, 26], "instead": [6, 11, 12, 17, 18, 21, 22, 27, 30], "referenc": [6, 15, 26], "If": [6, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 23, 24, 26, 27, 29, 30, 33, 34, 35, 36, 37], "specif": [6, 11, 14, 15, 20, 30, 34, 36, 37], "ar": [6, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37], "onli": [6, 7, 11, 12, 13, 15, 17, 18, 20, 24, 25, 26, 35, 36, 37], "those": [6, 15, 17, 20, 24, 26, 27, 30, 36], "prompt": [6, 12, 19, 20, 26, 34], "choos": [6, 12, 15], "exampl": [6, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 33, 34, 35, 36, 37], "packagenam": 6, "1": [6, 10, 11, 13, 15, 17, 18, 19, 22, 23, 24, 25, 26, 30, 36, 37], "2": [6, 15, 17, 22, 23, 24, 25, 26, 28, 30, 32, 36, 37], "must": [7, 11, 12, 14, 15, 16, 18, 19, 21, 23, 24, 25, 26, 27, 30, 33, 36], "either": [7, 11, 12, 15, 18, 19, 20, 24, 27, 30], "defin": [7, 11, 13, 14, 16, 17, 18, 23, 27, 30, 34, 35, 36], "main": [7, 16, 24, 29, 30], "cli": [7, 11, 14, 15, 18, 19, 21, 23, 28, 34, 36], "click": [7, 12, 20, 27, 28, 30, 35], "group": [7, 17, 24, 27, 35], "object": [7, 10, 11, 12, 15, 16, 17, 18, 19, 20, 22, 23, 24, 31, 35, 36, 37], "call": [7, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 30, 32, 35, 36, 37], "network": [7, 9, 10, 12, 13, 14, 23, 24, 25, 27, 28, 33, 37], "given": [7, 8, 11, 12, 13, 14, 15, 18, 20, 22, 24, 30, 36], "should": [7, 11, 14, 15, 17, 18, 19, 26, 27, 36, 37], "import": [7, 11, 12, 13, 15, 18, 19, 20, 21, 22, 23, 24, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37], "mix": 7, "ins": 7, "necessari": [7, 12, 15], "oper": [7, 11, 14, 24, 29], "interact": [7, 11, 13, 15, 19, 23, 32, 34, 36, 37], "drop": [7, 18], "session": [7, 11, 15, 23, 30, 34], "after": [7, 11, 13, 15, 16, 19, 24, 30, 31, 34, 37], "py": [7, 14, 17, 18, 23, 27, 31, 35, 36], "launch": [8, 23, 30, 37], "pytest": [8, 10, 19, 23, 31, 34], "run": [8, 9, 11, 15, 17, 18, 20, 22, 23, 24, 25, 26, 28, 29, 31, 34, 35, 36, 37], "pytest_arg": 8, "w": [8, 11], "watch": [8, 36], "file": [8, 11, 12, 14, 15, 16, 17, 18, 19, 22, 23, 24, 25, 28, 30, 31, 34, 35, 36, 37], "suit": [8, 28, 36], "watch_fold": 8, "delai": [8, 30, 35], "watch_delai": 8, "between": [8, 11, 13, 15, 17, 30], "poll": [8, 13, 15, 30, 36], "cycl": 8, "5": [8, 17, 19, 22, 24, 26, 36, 37], "second": [8, 13, 14, 15, 24, 30, 36, 37], "overview": 9, "account": [9, 10, 12, 13, 14, 18, 21, 22, 23, 24, 26, 27, 30, 31, 32, 33, 37], "develop": [9, 10, 11, 15, 18, 20, 25, 28, 30, 34], "compil": [9, 10, 14, 17, 18, 22, 23, 24, 28, 36], "queri": [9, 10, 13, 14, 23], "data": [9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 23, 24, 30, 37], "configur": [9, 11, 13, 14, 15, 16, 18, 19, 21, 26, 31, 36], "make": [9, 11, 16, 19, 20, 22, 23, 24, 30, 34, 35, 36], "transact": [9, 13, 14, 15, 17, 18, 19, 22, 34], "proxi": [9, 11, 15], "publish": [9, 11, 13, 15, 36], "log": [9, 11, 12, 13, 15, 17], "pm": [9, 15, 26], "init": [9, 25, 31], "api": [9, 12, 14, 15, 16, 18, 19, 22, 26, 30, 32], "except": [9, 11, 12, 13, 15, 18, 30, 36], "type": [9, 10, 11, 13, 14, 15, 16, 18, 19, 20, 21, 23, 24, 27, 32, 33, 34, 36, 37], "util": [9, 10, 19, 20, 23, 27, 35], "address": [10, 13, 14, 15, 18, 19, 20, 21, 22, 23, 25, 26, 32, 36], "str": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 24, 27, 30], "checksumaddress": [10, 11, 13, 15, 17], "contract_typ": [10, 13, 15, 22, 26], "contracttyp": [10, 11, 13, 15], "none": [10, 11, 12, 13, 14, 15, 16, 17, 18, 27, 36], "txn_hash": [10, 11, 13, 14, 15, 37], "abi": [10, 11, 13, 14, 15, 16, 18, 21, 36, 37], "list": [10, 11, 12, 13, 14, 15, 17, 18, 20, 21, 22, 24, 25, 27, 28, 30, 34, 36], "constructorabi": [10, 11, 13, 14, 15, 18], "fallbackabi": [10, 15], "receiveabi": [10, 15], "methodabi": [10, 11, 13, 14, 15, 18], "eventabi": [10, 11, 13, 15, 18], "errorabi": [10, 13, 14, 15], "structabi": [10, 13, 15], "unprocessedabi": [10, 15], "dict": [10, 11, 12, 13, 14, 15, 16, 17, 18, 23, 24], "contractinst": [10, 11, 13, 15, 24, 37], "face": [10, 14], "class": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 30, 34], "instanti": [10, 21], "projectmanag": [10, 13, 15, 23, 36], "current": [10, 11, 12, 13, 15, 18, 30, 31], "accountmanag": [10, 15, 23], "chain": [10, 11, 14, 16, 18, 23, 24, 25, 30, 34, 35], "chainmanag": [10, 14, 15, 23, 36], "disconnect": [10, 11, 15, 20, 30, 36], "connect": [10, 11, 14, 15, 20, 22, 27, 28, 35, 36, 37], "blockchain": [10, 11, 14, 15, 16, 19, 24, 28, 30, 34, 36], "activ": [10, 11, 12, 13, 15, 23, 24, 35, 36], "purpos": [10, 11, 15, 17, 19, 22, 25, 29], "control": [10, 11, 15, 19, 20, 30, 35, 36, 37], "state": [10, 11, 13, 15, 19, 24], "handi": [10, 15], "about": [10, 11, 14, 15, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37], "compilermanag": [10, 15], "len": [10, 15], "registered_compil": [10, 15], "configmanag": [10, 11, 15, 16], "convert": [10, 12, 14, 18, 23, 24], "valu": [10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 23, 24, 25, 26, 28, 29, 30, 34, 36, 37], "tupl": [10, 13, 15, 16, 17, 18], "convers": [10, 11, 16], "function": [10, 11, 12, 13, 15, 17, 18, 19, 20, 24, 25, 30], "conversionmanag": [10, 15], "networkmanag": [10, 15, 23, 36], "revert": [10, 11, 14, 15, 18, 30, 36], "catch": 10, "expect": [10, 13, 15, 36, 37], "logic": [10, 11, 14, 15, 24, 27, 30], "resembl": 10, "rais": [10, 11, 14, 15, 18, 30, 36], "accountapi": [11, 12, 15, 16, 19, 20, 24, 27], "base": [11, 12, 13, 14, 15, 17, 18, 19, 22, 25, 27, 28, 30, 35, 36, 37], "baseinterfacemodel": [11, 13, 15, 18], "baseaddress": [11, 13, 15], "repres": [11, 12, 15, 16, 17, 18, 30, 36, 37], "__dir__": [11, 13], "ipython": [11, 13, 23, 34, 37], "tab": [11, 13], "complet": [11, 13, 15, 18, 35, 36], "return": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 30, 32, 36, 37], "properti": [11, 13, 14, 15, 17, 18, 19, 20, 24, 27, 30, 37], "shorten": [11, 15], "quicker": 11, "access": [11, 12, 13, 14, 15, 16, 18, 19, 20, 23, 24, 26, 27, 30, 31, 33, 35, 36, 37], "txn": [11, 14, 25, 30, 37], "transactionapi": [11, 13, 14, 15], "send_everyth": 11, "bool": [11, 12, 13, 14, 15, 17, 18, 19, 36], "fals": [11, 12, 13, 15, 17, 18, 36], "signer_opt": 11, "receiptapi": [11, 13, 14, 15, 24, 25, 37], "accountserror": [11, 14], "nonc": [11, 13, 15], "invalid": [11, 15, 17, 36], "sender": [11, 13, 15, 21, 24, 31, 32, 33, 36, 37], "doe": [11, 12, 13, 14, 15, 18, 20, 22, 24, 27, 30, 34, 36, 37], "enough": [11, 24], "fund": [11, 14, 19, 24, 36], "transactionerror": [11, 14], "neg": [11, 15], "signatureerror": [11, 14], "sign": [11, 14, 17], "apinotimplementederror": [11, 14], "set": [11, 12, 13, 15, 16, 17, 18, 19, 22, 23, 25, 26, 27, 29, 30, 31, 36, 37], "true": [11, 12, 14, 15, 18, 19, 20, 21, 24, 26, 30, 33, 36, 37], "support": [11, 15, 17, 18, 25, 28, 30, 32, 34, 37], "paramet": [11, 13, 14, 15, 16, 17, 18, 30, 36], "invok": [11, 12, 13, 15, 20, 23, 24, 36, 37], "send": [11, 14, 24, 30, 37], "differ": [11, 13, 15, 22, 26, 27, 28, 30, 32, 36], "balanc": [11, 13, 19, 23, 24, 36], "fee": [11, 25, 30], "send_private_transact": 11, "addit": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 26, 30, 37], "kwarg": [11, 12, 13, 14, 15, 17, 18, 19, 20, 24, 27, 30, 33, 36, 37], "signer": [11, 17, 19, 20, 24], "modifi": [11, 12, 17, 18, 23, 24, 30], "check_signatur": [11, 19], "signablemessag": [11, 17], "eip712messag": [11, 19], "int": [11, 13, 14, 15, 16, 17, 18, 19], "signatur": [11, 13, 24], "messagesignatur": [11, 17], "verifi": [11, 31], "messag": [11, 12, 14, 17, 18, 23, 27, 29, 30, 36], "wa": [11, 14, 15, 17, 18, 21, 24, 30], "union": [11, 12, 15, 17, 18], "noqa": [11, 15], "e501": [11, 15], "check": [11, 13, 15, 17, 18, 19, 24, 26, 32, 34, 36], "need": [11, 12, 15, 17, 18, 19, 20, 22, 23, 24, 26, 27, 30, 34, 35, 36, 37], "first": [11, 13, 15, 19, 20, 23, 24, 25, 26, 30, 33, 35], "otherwis": [11, 13, 15, 16, 17, 22, 23, 26, 30, 37], "declar": [11, 15, 22, 27, 37], "contractcontain": [11, 13, 15, 24], "deploi": [11, 13, 15, 21, 25, 26, 33, 34, 36, 37], "blueprint": [11, 15], "For": [11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 33, 34, 35, 36, 37], "evm": [11, 15, 24, 30], "like": [11, 13, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30, 31, 34, 36, 37], "mean": [11, 13, 19, 20, 36, 37], "eip": [11, 15, 17, 30, 32, 33, 37], "5202": [11, 15], "which": [11, 12, 13, 15, 16, 17, 18, 19, 22, 24, 25, 27, 30, 33, 36, 37], "implement": [11, 12, 14, 15, 16, 18, 19, 20, 26, 30, 32], "contain": [11, 12, 13, 15, 16, 17, 18, 21, 24, 30, 31, 33, 34, 36], "receipt": [11, 13, 15, 24, 30, 36, 37], "smart": [11, 13, 14, 17, 24, 31, 33, 34, 36, 37], "befor": [11, 13, 15, 18, 20, 24, 30, 35, 36, 37], "attempt": [11, 14, 26, 27, 32, 36], "verif": [11, 13], "instanc": [11, 13, 15, 17, 18, 20, 21, 22, 24, 33, 35, 36, 37], "prepare_transact": 11, "cannot": [11, 12, 34, 36, 37], "afford": 11, "prepar": 11, "abstract": [11, 14, 18, 24, 27, 30], "sign_messag": [11, 19], "msg": [11, 12, 17, 24, 36], "handl": [11, 14, 16, 18, 20, 23, 30], "variou": [11, 28, 32, 37], "keyfileaccount": [11, 16, 20], "byte": [11, 13, 15, 17, 18, 24], "correspond": [11, 13, 15, 17, 20, 30, 36], "sign_transact": 11, "mai": [11, 12, 13, 15, 17, 18, 19, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 34, 36, 37], "input": [11, 12, 13, 14, 18], "howev": [11, 13, 15, 19, 22, 24, 26, 27, 28, 30, 32, 35, 36, 37], "properli": [11, 15, 27], "here": [11, 16, 19, 20, 21, 22, 24, 27, 28, 30, 31, 34, 35, 36], "meant": [11, 17, 30], "execut": [11, 12, 13, 15, 17, 20, 23, 24, 29, 31, 35, 36], "wish": [11, 19, 21, 29, 30, 33], "transfer": [11, 24, 36], "addresstyp": [11, 13, 14, 15, 17], "receiv": [11, 15, 19, 24, 36], "amount": [11, 13, 15, 24, 25, 30, 37], "extra": [11, 18, 19, 26], "typic": [11, 15, 17, 19, 21, 27, 30, 36], "rpc": [11, 22, 24], "eth_sendprivatetransact": [11, 24], "achiev": [11, 24, 26, 30], "ignor": [11, 15, 26, 27], "accountcontainerapi": [11, 15, 16], "data_fold": [11, 15], "account_typ": [11, 12, 16, 20], "collect": [11, 12, 14, 15, 17], "__contains__": [11, 15], "indexerror": [11, 14, 15, 18], "__delitem__": [11, 15], "delet": [11, 15, 26, 27], "notimplementerror": 11, "overridden": [11, 14], "within": [11, 14, 18, 25, 27, 34, 35, 36], "__getitem__": [11, 15, 18], "get": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 24, 26, 30, 33, 34, 35, 36, 37], "__len__": [11, 15], "iter": [11, 13, 14, 15, 16], "over": [11, 15], "alias": [11, 12, 15, 20], "append": [11, 15, 18, 21], "add": [11, 12, 14, 15, 20, 21, 22, 23, 24, 26, 27, 28, 30, 34, 35, 36, 37], "alreadi": [11, 12, 14, 15, 19, 20, 23, 24, 26, 30, 33], "remov": [11, 15, 18, 34, 36], "known": [11, 13, 15, 18, 20], "impersonatedaccount": 11, "raw_address": 11, "subclass": [11, 12, 13, 15, 16, 18], "testaccountapi": [11, 19], "generateddevaccount": [11, 18], "directli": [11, 13, 15, 19, 20, 21, 24, 25, 26, 30], "how": [11, 12, 15, 18, 19, 21, 24, 25, 26, 30, 34, 35, 36, 37], "thei": [11, 13, 15, 16, 18, 23, 24, 26, 27, 29, 30, 35], "up": [11, 15, 18, 20, 22, 23, 30, 31, 34, 36, 37], "fixtur": [11, 15, 19, 30], "testaccountcontainerapi": 11, "gener": [11, 12, 15, 17, 18, 19, 21, 24, 26, 29, 30, 33, 34, 36], "generate_account": 11, "new": [11, 13, 15, 18, 20, 26, 30, 34], "we": [11, 15, 17, 18, 19, 20, 24, 25, 27, 30, 34, 35, 36, 37], "know": [11, 17, 20, 21, 24, 26, 27, 30, 36], "eoa": 11, "doesn": [11, 17], "person": [11, 19], "raw": [11, 15, 17, 21, 30], "baseinterfac": [11, 18], "total": [11, 13, 15, 17], "code": [11, 12, 14, 15, 17, 20, 24, 26, 27, 33, 36], "hexbyt": [11, 15, 17, 24], "codes": 11, "histori": [11, 15, 24, 25], "accounthistori": [11, 15], "ha": [11, 13, 14, 18, 24, 25, 33, 36, 37], "made": [11, 15, 22, 24, 25], "is_contract": 11, "associ": [11, 13, 15], "compilerapi": [11, 15, 16, 27, 28], "compiler_set": 11, "languag": [11, 24, 28, 34], "solid": [11, 15, 16, 21, 22, 24, 27, 28, 36], "vyper": [11, 16, 21, 24, 28, 32, 34, 36], "repositori": [11, 18], "contract_filepath": [11, 15], "sequenc": [11, 12, 15, 18], "base_path": [11, 14, 15], "sourc": [11, 12, 13, 14, 15, 17, 23, 24, 25, 26, 27, 28, 31, 32, 33, 34, 36], "pathlib": [11, 12, 15, 18, 21], "directori": [11, 12, 15, 18, 19, 22, 23, 25, 26, 27, 28, 30, 31, 33, 34, 35, 36], "via": [11, 12, 13, 14, 15, 16, 19, 22, 24, 26, 27, 30, 35, 36], "adhoc": [11, 12, 15, 21], "pluginconfig": [11, 15, 16], "enrich_error": [11, 15], "err": [11, 14, 15], "contractlogicerror": [11, 14, 15, 36], "enrich": [11, 15], "pc": [11, 15, 17], "locat": [11, 15, 17, 21, 22, 27, 30, 36], "runtim": [11, 12, 15], "get_vers": 11, "all_path": 11, "retriev": [11, 15, 18, 24, 32], "combin": [11, 15, 30, 36], "supports_source_trac": 11, "abl": [11, 15, 18, 19, 21, 24, 32, 36, 37], "traceback": 11, "trace": [11, 14, 15, 17, 18, 24, 36], "configenum": 11, "enum": [11, 12], "limit": [11, 12, 22, 30], "item": [11, 14, 15, 16, 17, 18, 23, 24, 26, 27, 35], "color": [11, 18, 29], "red": [11, 14, 29], "blue": [11, 29, 37], "green": [11, 29], "rather": [11, 15, 22, 26, 36], "than": [11, 13, 15, 17, 20, 22, 26, 30, 36, 37], "arbitrari": 11, "usag": [11, 12, 13, 15, 16, 17, 18, 19, 23, 27, 36, 37], "myenum": 11, "foo": [11, 12, 15, 18, 24, 30, 36], "bar": [11, 12, 18, 30, 36, 37], "myconfig": 11, "my_enum": 11, "model": [11, 15, 17, 18, 37], "genericconfig": 11, "configdict": [11, 18], "special": [11, 16, 19, 26], "_case_sensit": [11, 15], "_env_prefix": [11, 15], "_env_fil": [11, 15], "dotenvtyp": [11, 15], "posixpath": [11, 15], "_env_file_encod": [11, 15], "_env_nested_delimit": [11, 15], "_secrets_dir": [11, 15], "baseset": 11, "converterapi": [11, 15, 16], "convertedtyp": 11, "throw": [11, 15, 18], "conversionerror": [11, 14, 15], "fail": [11, 12, 14, 15, 18, 24, 26, 27, 30, 36], "is_convert": [11, 15], "string": [11, 12, 14, 15, 16, 17, 18, 19, 22, 24, 30, 36], "explorerapi": [11, 15, 16, 33], "networkapi": [11, 14, 15, 16], "particular": [11, 15, 36], "get_address_url": 11, "url": [11, 15, 22], "get_contract_typ": 11, "been": [11, 15, 17, 18, 36], "get_transaction_url": 11, "transaction_hash": [11, 15, 17], "hash": [11, 13, 15, 17, 23], "publish_contract": [11, 33], "ecosystemapi": [11, 15, 16, 28, 30], "request_head": [11, 15], "fee_token_symbol": 11, "fee_token_decim": 11, "18": 11, "extraattributesmixin": [11, 18], "relat": [11, 14, 15, 16], "__ape_extra_attributes__": 11, "extramodelattribut": [11, 18], "suppli": [11, 36], "attribut": [11, 13, 15, 18, 24], "__getattr__": [11, 13, 15, 18], "seri": 11, "add_network": 11, "network_nam": [11, 15, 35], "attach": [11, 12], "e": [11, 15, 18, 19, 22, 24, 26, 30, 36], "g": [11, 15, 18, 19, 22, 24, 26, 30, 36], "l2": 11, "optim": [11, 30, 36], "networkerror": [11, 14, 15], "create_transact": 11, "everyth": [11, 27], "initi": [11, 13, 15, 17, 23, 24, 25, 32, 35], "custom_network": 11, "custom": [11, 12, 14, 15, 17, 19, 20, 21, 22, 23, 27, 29], "where": [11, 13, 15, 18, 19, 20, 25, 26, 30, 32, 36, 37], "unspecifi": 11, "classmethod": [11, 14, 15], "decode_address": 11, "hashstr20": [11, 17], "hashbytes20": [11, 17], "nativ": 11, "rawaddress": [11, 17], "decode_block": 11, "blockapi": [11, 15, 25], "decod": [11, 13, 14, 18, 30], "dictionari": [11, 15, 17, 18, 24, 36], "decode_calldata": 11, "calldata": [11, 13, 24], "map": [11, 13, 14, 15, 16, 18, 24, 36], "anonym": 11, "stringifi": [11, 13, 24], "index": [11, 13, 17, 18, 20, 22, 24, 36], "decode_log": [11, 37], "event": [11, 13, 14, 17, 24, 37], "contractlog": [11, 13, 15, 17, 25, 37], "match": [11, 12, 13, 15, 17, 18, 30, 36], "definit": [11, 15, 30], "decode_receipt": 11, "decode_returndata": 11, "raw_data": 11, "default_network_nam": 11, "encode_address": 11, "integ": [11, 15], "encode_calldata": 11, "encod": [11, 17, 30], "encode_deploy": 11, "deployment_bytecod": 11, "other": [11, 12, 15, 17, 18, 19, 20, 23, 24, 28, 30, 31, 36, 37], "constructor": [11, 13, 24, 33], "interfac": [11, 15, 16, 21, 27, 30, 32, 35, 36], "encode_transact": 11, "addition": [11, 15, 20, 26, 28, 30, 34, 37], "updat": [11, 18, 36], "enrich_calltre": 11, "calltreenod": 11, "enhanc": 11, "help": [11, 12, 13, 18, 19, 22, 23, 26, 27, 28, 30, 34, 36], "decim": [11, 36], "token": [11, 26, 30, 36, 37], "symbol": [11, 23, 30, 37], "currenc": 11, "pai": 11, "eth": [11, 19, 23, 24, 25, 30, 34, 36], "get_method_selector": 11, "selector": [11, 13, 24, 36], "keccak": 11, "eth_pydantic_typ": [11, 24], "myecosystem": 11, "def": [11, 12, 15, 16, 18, 19, 20, 23, 24, 27, 29, 30, 35, 36, 37], "self": [11, 13, 15, 18, 20, 24, 27, 36], "simpl": [11, 22, 24, 37], "calcul": [11, 17], "get_network": [11, 35], "networknotfounderror": [11, 14], "present": [11, 15, 26], "get_network_data": 11, "ad": [11, 14, 15, 18, 19, 20, 23, 30, 36], "opinion": [11, 15], "order": [11, 15, 19, 20, 24], "nice": [11, 14, 15], "translat": [11, 15], "get_proxy_info": [11, 15], "proxyinfoapi": [11, 15], "pattern": [11, 18, 26, 30], "same": [11, 13, 15, 17, 18, 19, 24, 27, 30, 34, 36, 37], "shareabl": 11, "header": [11, 17], "request": [11, 16, 22, 26, 29, 30], "serialize_transact": 11, "serial": [11, 17], "set_default_network": 11, "switch": [11, 30, 35, 36], "forkednetworkapi": 11, "upstream_chain_id": 11, "id": [11, 13, 14, 15, 17, 21, 24, 26, 30], "upstream": 11, "alwai": [11, 21, 22, 24, 26, 35], "some": [11, 17, 19, 24, 28, 30, 36, 37], "while": [11, 14, 15, 26, 36], "regardless": [11, 23, 30, 37], "upstream_network": 11, "being": [11, 14, 17, 23], "upstream_provid": 11, "upstreamprovid": 11, "your": [11, 12, 13, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37], "under": [11, 15, 18, 19, 21, 35], "one": [11, 12, 13, 15, 16, 17, 19, 20, 22, 23, 26, 27, 30, 34, 36, 37], "use_upstream_provid": 11, "providercontextmanag": [11, 15, 30, 35], "wrapper": [11, 13, 14, 21], "around": [11, 13, 14, 21], "auto_gas_multipli": 11, "float": [11, 15, 17], "multipli": [11, 22, 30], "estim": [11, 15, 18, 22, 30, 36], "ga": [11, 14, 18, 22, 24, 30], "tx": [11, 24, 37], "insur": [11, 22], "base_fee_multipli": [11, 30], "appli": [11, 15, 27, 36, 37], "block_tim": [11, 13, 15, 30], "approxim": 11, "take": [11, 12, 20, 22, 24, 30, 35, 36], "block": [11, 13, 14, 15, 16, 17, 18, 22, 23, 27], "mine": [11, 15], "15": [11, 30], "chain_id": [11, 14, 15, 23, 30, 35], "unless": [11, 12, 13, 15, 29, 30], "providerapi": [11, 12, 15, 16, 18, 27, 28, 37], "default_provider_nam": 11, "get_provid": 11, "provider_nam": [11, 14, 15, 35], "provider_set": [11, 15], "is_adhoc": 11, "mostli": 11, "unknown": [11, 14, 15, 30], "is_dev": 11, "is_fork": 11, "is_loc": 11, "network_id": 11, "infura": [11, 16, 22, 25, 27, 30, 34], "alchemi": [11, 16, 20, 22, 28, 30, 35, 37], "partial": 11, "conveni": [11, 15], "required_confirm": [11, 13, 15], "recommend": [11, 15, 19, 20, 26, 30, 34, 35], "wait": [11, 13, 15, 30], "consid": [11, 15, 18, 30], "sinc": [11, 17, 24], "set_default_provid": 11, "found": [11, 13, 14, 15, 18, 19, 20, 21, 24, 26, 27, 30, 35, 36], "transaction_acceptance_timeout": [11, 30, 37], "accept": [11, 12, 19, 30, 33], "two": [11, 15, 19, 22, 27, 30, 34, 36, 37], "minut": [11, 30, 37], "smaller": 11, "timeout": [11, 14, 18], "use_default_provid": [11, 30], "disconnect_aft": [11, 15, 30], "temporarili": [11, 15], "enter": [11, 19, 29, 30, 36], "context": [11, 12, 14, 15, 17, 18, 19, 23, 27, 35, 36], "exit": [11, 15, 23, 36], "multipl": [11, 12, 17, 18, 26, 34], "whatev": [11, 30], "end": [11, 12, 13, 15, 18, 30, 36], "so": [11, 15, 19, 24, 26, 27, 30, 32, 36], "multi": [11, 18, 30], "scenario": [11, 13, 36], "use_provid": [11, 15, 30, 34, 35, 36], "disconnect_on_exit": [11, 15], "temporari": [11, 15, 30], "whether": [11, 12, 13, 15, 17, 18, 19, 30], "python": [11, 13, 15, 17, 21, 23, 24, 27, 30, 31, 33, 34, 35, 36], "verify_chain_id": 11, "networkmismatcherror": [11, 14], "hardcod": 11, "manageraccessmixin": [11, 12, 13, 18], "And": [11, 20, 30, 36], "providerpai": 11, "case": [11, 13, 14, 15, 20, 21, 22, 24, 26, 27, 30, 32, 35, 36], "veri": [11, 30], "Or": [11, 21, 23, 24, 27, 28], "choic": [11, 15, 20, 30], "parse_network_choic": [11, 15, 30, 36], "empti": [11, 16, 17, 18, 36], "target": [11, 16, 18, 32], "basemodel": [11, 17, 18], "create_network_typ": 11, "easili": [11, 30, 37], "dependencyapi": [11, 15, 16, 26], "contracts_fold": [11, 15, 21, 22, 26], "exclud": [11, 15, 17, 18, 21, 26, 36], "json": [11, 15, 16, 17, 18, 24, 26], "lock": [11, 15, 21, 36], "build": [11, 15, 33, 35, 36], "config_overrid": [11, 15, 26], "ipf": 11, "cached_manifest": 11, "packagemanifest": [11, 15, 16, 26, 33], "valid": [11, 15, 16, 17, 19, 30], "use_cach": [11, 15], "By": [11, 15, 21, 35, 37], "lazili": 11, "look": [11, 13, 15, 18, 20, 21, 22, 23, 27, 31, 36, 37], "glob": [11, 26], "extract_manifest": [11, 15], "presum": [11, 15], "project_manag": [11, 15], "get_project": [11, 15], "dynam": [11, 15], "correct": [11, 12, 15, 30, 36], "projectapi": [11, 15, 16], "structur": [11, 15, 17, 18, 19, 31, 35], "instal": [11, 14, 15, 19, 21, 22, 24, 25, 27, 30, 31, 35, 36], "uri": [11, 15, 22, 30], "omit": [11, 15, 20, 30, 37], "latest": [11, 13, 15, 17, 18, 23, 30, 34, 37], "version_id": [11, 15], "sub": [11, 12, 15], "most": [11, 13, 15, 19, 20, 22, 29, 30, 34], "often": [11, 13, 15, 24, 26], "config_file_nam": [11, 15], "work": [11, 13, 15, 16, 18, 24, 25, 26, 27, 28, 30, 34, 35, 36, 37], "extend": [11, 12, 20, 28, 31], "non": [11, 13, 14, 17, 18, 23, 29, 30], "add_compiler_data": 11, "compiler_data": [11, 15], "ethpm_typ": [11, 15, 17], "full": [11, 15, 18, 30, 36], "manifest_cachefil": 11, "create_manifest": [11, 15], "clear": [11, 15], "is_valid": [11, 15], "figur": [11, 15, 24], "out": [11, 14, 15, 18, 19, 23, 24, 26, 28, 30, 36], "best": [11, 15, 30, 34, 35], "share": [11, 17, 18, 30, 36], "upload": 11, "anoth": [11, 14, 15, 17, 30, 36, 37], "process_config_fil": [11, 15], "process": [11, 15, 16, 18, 24, 27], "had": [11, 15], "replace_manifest": 11, "replac": [11, 18, 30], "entir": [11, 24, 27, 30, 36], "update_manifest": 11, "part": [11, 15, 18, 20, 27, 30, 34, 36], "field": [11, 17, 18, 26, 28, 36], "whe": 11, "num_transact": 11, "parenthash": 11, "0x0000000000000000000000000000000000000000000000000000000000000000": 11, "timestamp": [11, 15, 17, 18, 23, 36], "its": [11, 12, 13, 14, 15, 16, 17, 18, 21, 22, 23, 24, 26, 27, 29, 30, 33, 36, 37], "block_page_s": 11, "100": [11, 36, 37], "concurr": [11, 15], "4": [11, 15, 22, 23, 24, 26, 30, 36, 37], "hardhat": [11, 22, 28, 30, 36, 37], "base_fe": [11, 15, 37], "minimum": [11, 15], "next": [11, 15, 30], "1559": [11, 15, 30, 37], "notimplementederror": [11, 14, 15, 37], "fetch": [11, 15, 24, 25, 30, 37], "respons": [11, 15, 16, 17, 18, 30], "particularli": 11, "across": [11, 15, 22, 23, 26, 30], "rang": [11, 13, 15], "chainlist": [11, 15], "comprehens": [11, 15], "mani": [11, 12, 25, 28, 30], "parallel": [11, 18], "thread": [11, 15, 18], "connection_id": 11, "uniqu": [11, 15, 17, 24, 30, 37], "identifi": [11, 13, 15, 24, 30, 36], "especi": 11, "dev": [11, 14, 15, 17, 24, 36, 37], "connection_str": [11, 15], "ipc": 11, "tear": 11, "down": [11, 17, 18, 34], "quit": [11, 13], "estimate_gas_cost": [11, 37], "block_id": [11, 14], "hexstr": [11, 17], "liter": [11, 17], "earliest": [11, 13, 15, 17], "pend": [11, 13, 15, 17, 30, 36], "cost": [11, 15, 24], "blockid": [11, 14, 17], "past": [11, 15, 22], "report": [11, 17, 30], "smallest": 11, "unit": 11, "wei": 11, "max": [11, 15, 22, 30, 36, 37], "maximum": [11, 22, 30], "gas_pric": [11, 15, 37], "price": [11, 15, 36], "what": [11, 15, 16, 19, 20, 23, 26, 27, 30, 35, 36], "pre": [11, 13, 18, 19, 21, 23, 34], "get_bal": 11, "get_block": [11, 23, 30], "blocknotfounderror": [11, 14], "get_cod": 11, "previou": [11, 15], "contractcod": 11, "get_contract_log": 11, "log_filt": 11, "logfilt": 11, "topic": [11, 13, 24, 31], "get_nonc": 11, "get_receipt": [11, 15, 37], "might": [11, 23, 37], "get_transactions_by_block": 11, "get_virtual_machine_error": 11, "virtualmachineerror": [11, 14], "virtual": [11, 14, 34], "machin": [11, 14, 15], "client": [11, 18], "went": 11, "wrong": [11, 14], "http_uri": 11, "is_connect": [11, 20], "max_ga": 11, "network_choic": [11, 15, 35], "priority_fe": [11, 37], "miner": [11, 37], "tip": 11, "incentiv": 11, "them": [11, 16, 19, 21, 23, 24, 26, 27, 30, 31, 35, 36], "send_cal": 11, "immedi": [11, 23, 30], "without": [11, 18, 19, 23, 24, 28, 30, 35, 37], "histor": [11, 13, 15], "point": [11, 15, 17, 18, 20, 26, 27, 32, 35, 36], "prior": [11, 15, 27], "through": [11, 13, 18, 25, 27, 33], "mempool": [11, 24], "send_transact": 11, "supports_trac": 11, "update_set": 11, "new_set": 11, "port": 11, "reconnect": 11, "ws_uri": 11, "wss": 11, "subprocessprovid": [11, 14], "process_wait_timeout": 11, "popen": 11, "is_stop": 11, "stdout_queu": 11, "joinablequeu": [11, 18], "stderr_queu": 11, "ganach": 11, "build_command": 11, "pass": [11, 12, 15, 18, 19, 20, 26, 27, 36, 37], "task": [11, 18, 36], "stop": [11, 13, 15, 20, 36], "process_nam": 11, "20": [11, 25, 29, 30, 37], "readi": [11, 15, 17], "kill": 11, "testproviderapi": 11, "snapshot": [11, 14, 15, 18], "num_block": [11, 15], "advanc": [11, 25], "allot": 11, "snapshot_id": [11, 14, 15], "regress": [11, 15], "go": [11, 15, 30], "set_timestamp": 11, "new_timestamp": 11, "record": [11, 15], "intent": [11, 15], "later": [11, 15, 36], "snapshotid": [11, 14, 15, 18], "contract_address": [11, 14, 17], "block_numb": [11, 13, 15, 17], "gas_us": [11, 24], "statu": 11, "await_confirm": 11, "now": [11, 19, 22, 26, 27, 30, 36], "contractev": [11, 13, 37], "contractlogcontain": 11, "were": [11, 15, 22, 24, 30, 36], "emit": [11, 17, 37], "method_cal": 11, "produc": [11, 17], "raise_for_statu": 11, "noreturn": [11, 12], "regard": 11, "transactionstatusenum": 11, "ran_out_of_ga": 11, "ran": [11, 14, 31, 36], "gas_limit": [11, 22, 30], "return_valu": [11, 24], "obtain": [11, 24, 36], "final": [11, 15, 18, 36], "total_fees_paid": [11, 25], "paid": [11, 25], "tracefram": [11, 14], "track_coverag": 11, "track": [11, 15, 17, 24, 36], "coverag": 11, "els": [11, 13, 15, 18, 29, 30, 35, 36], "level": [11, 12, 24, 27, 29, 30, 34], "track_ga": 11, "chainid": 11, "0x": [11, 15, 18, 24, 32], "max_fe": [11, 37], "max_priority_fe": [11, 37], "transactionsignatur": [11, 17], "schema": [11, 17], "permit": 11, "total_transfer_valu": 11, "could": [11, 23, 24], "determin": [11, 13, 15, 32], "submit": [11, 24], "accounttransactionqueri": [11, 15], "column": [11, 13, 15, 17], "start_nonc": [11, 15], "stop_nonc": [11, 15], "_basequeri": 11, "querytyp": [11, 15], "blockqueri": [11, 15], "start_block": [11, 13, 15, 25], "stop_block": [11, 13, 15, 25], "step": [11, 13, 15, 33], "_baseblockqueri": 11, "blocktransactionqueri": [11, 15], "insid": [11, 18, 25], "contractcreationqueri": [11, 15], "contracteventqueri": [11, 15], "search_top": [11, 13], "member": 11, "contractmethodqueri": [11, 15], "method_arg": 11, "queryapi": [11, 15, 16], "estimate_queri": [11, 15], "millisecond": [11, 15, 17, 18], "indic": [11, 15, 18, 24, 29], "engin": [11, 13, 14, 15], "unabl": [11, 14, 15, 21], "perform_queri": [11, 15], "perform": [11, 13, 15, 17, 19, 24], "update_cach": 11, "chanc": [11, 30, 34], "noth": [11, 14], "store": [11, 15, 18, 19, 24, 25], "namespac": [12, 15, 16, 27, 31, 35], "extens": [12, 15, 16, 23, 27, 33, 36], "reusabl": 12, "common": [12, 18, 22, 26, 27, 30, 31, 37], "resourc": [12, 15], "well": [12, 15, 16, 17, 18, 24, 27, 28, 31], "contract_file_paths_argu": 12, "callback": 12, "flatten": [12, 15], "existing_alias_argu": [12, 20, 27], "callabl": [12, 16, 18, 20], "non_existing_alias_argu": [12, 20], "yet": [12, 20, 27, 28, 35, 36], "accountaliaspromptchoic": 12, "prompt_messag": 12, "promptchoic": 12, "lessen": 12, "hard": [12, 18], "param": [12, 20], "ctx": 12, "miss": [12, 15, 17, 18, 36], "It": [12, 16, 19, 20, 24, 25, 27, 29, 30, 35, 36, 37], "compat": [12, 17], "certain": [12, 36, 37], "situat": 12, "descript": [12, 15, 27, 32], "arriv": 12, "print_choic": 12, "echo": [12, 20, 27, 35], "select_account": [12, 20], "networkchoic": 12, "case_sensit": 12, "base_typ": 12, "network_opt": [12, 20, 35], "get_metavar": 12, "metavar": 12, "outputformat": 12, "subset": [12, 15, 17], "output_format_choic": 12, "rich": 12, "text": [12, 14, 19], "view": [12, 13, 15, 24, 37], "standard": [12, 25, 26, 29, 32], "paramtyp": 12, "choice_callback": 12, "get_user_selected_choic": 12, "cmd": [12, 20, 30], "__expected_": 12, "get_user_selected_account": [12, 20], "deprec": [12, 15], "pick": 12, "want": [12, 15, 19, 21, 22, 24, 25, 26, 27, 29, 30, 33, 34, 36], "_outside_": 12, "account_opt": [12, 20], "connectedprovidercommand": [12, 20, 30, 35], "durat": [12, 15, 24], "right": [12, 36], "wai": [12, 15, 19, 22, 23, 24, 26, 30, 32, 34, 36, 37], "parse_arg": 12, "parser": [12, 16], "pars": [12, 15, 18, 20], "make_context": 12, "networkboundcommand": 12, "apeclicontextobject": [12, 20], "ape_cli_context": [12, 20, 35], "static": [12, 30], "abort": [12, 14, 20], "base_error": 12, "invoc": [12, 36], "preserv": 12, "stack": [12, 14], "networkopt": 12, "meth": 12, "anyth": [12, 20, 24, 27, 29], "default_log_level": 12, "obj_typ": [12, 20], "featur": [12, 19, 20, 22, 24, 25, 36], "verbosity_opt": 12, "contract_opt": 12, "contracterror": 12, "In": [12, 15, 17, 19, 20, 21, 22, 23, 24, 25, 30, 32, 34, 36, 37], "incompatible_with": 12, "incompatible_opt": 12, "factori": [12, 15, 24], "enforc": 12, "incompat": 12, "cl": [12, 18, 20, 35], "other_opt": 12, "auto": [12, 17, 19, 22, 30, 36], "normal": [12, 18, 28, 32], "output_format_opt": 12, "skip_confirmation_opt": 12, "skip": [12, 19, 26], "cli_logg": 12, "apelogg": 12, "decor": [12, 16, 18, 24, 27, 35, 36], "allfilepath": 12, "encourag": 12, "consist": 12, "path_typ": 12, "contracttypewrapp": 13, "decode_input": [13, 24], "prefix": [13, 14, 20, 22, 23, 24, 26, 28], "detect": [13, 14, 32], "find": [13, 14, 15, 17, 18, 19, 26, 27, 32, 36], "along": [13, 26], "identifier_lookup": [13, 24], "selector_identifi": [13, 24], "source_path": [13, 15], "belong": 13, "cross": 13, "source_id": [13, 15, 17], "That": [13, 24, 37], "necessarili": [13, 37], "mycontract": [13, 15, 21, 22, 24, 25, 31, 33, 36, 37], "__call__": 13, "handler": [13, 24, 37], "c": 13, "attr_nam": [13, 15], "vote": 13, "impli": 13, "call_view_method": 13, "method_nam": [13, 36], "get_error_by_signatur": 13, "customerror": [13, 14], "similar": [13, 27, 30, 36], "get_event_by_signatur": [13, 37], "come": [13, 15, 18, 19, 21, 23, 24, 26, 28, 29, 30, 31, 34, 36], "respect": [13, 15], "invoke_transact": 13, "contract_contain": [13, 15], "assum": [13, 15, 24, 30, 33, 35, 36, 37], "real": [13, 19, 37], "my_contract": [13, 24, 32, 36], "0xabc1230001112223334445566611855443322111": 13, "thing": [13, 20, 27, 30, 35], "actual": [13, 17, 24, 36], "my_event_typ": 13, "myevent": 13, "mockcontractlog": [13, 17], "__iter__": [13, 15], "occur": [13, 14, 15, 18, 29, 32, 36], "from_receipt": [13, 37], "poll_log": 13, "new_block_timeout": [13, 15], "daemon": [13, 15, 18], "new_log": 13, "print": [13, 14, 15, 20, 24, 26, 30, 35, 37], "futur": [13, 15], "never": [13, 15, 17, 19, 36], "yield": [13, 15, 16, 27, 36], "less": [13, 15, 29], "reorg": [13, 15], "10": [13, 15, 18, 21, 22, 29, 30], "50": [13, 15, 37], "live": [13, 15, 24, 37], "engine_to_us": [13, 15], "datafram": [13, 15], "last": [13, 15, 18, 24, 25, 36], "bypass": [13, 15, 26], "algorithm": [13, 15], "pd": [13, 15], "start_or_stop": [13, 15], "extra_address": 13, "search": [13, 18], "desir": 13, "deleg": [13, 15, 18, 32], "apeexcept": 14, "clickexcept": 14, "problem": 14, "aliasalreadyinuseerror": 14, "apeattributeerror": [14, 15], "projecterror": [14, 15], "attributeerror": [14, 37], "try": [14, 15, 18, 27, 35, 36], "apeindexerror": 14, "argumentslengtherror": 14, "arguments_length": 14, "contractdataerror": 14, "reason": [14, 30, 36], "providererror": 14, "chainerror": [14, 15], "compilererror": [14, 15], "configerror": 14, "issu": [14, 29, 34], "alik": 14, "revert_messag": 14, "source_traceback": 14, "sourcetraceback": 14, "base_err": 14, "assert": [14, 19, 24, 30, 36, 37], "statement": [14, 17, 36], "dev_messag": 14, "valueerror": [14, 15], "from_error": 14, "whenev": [14, 18], "possibl": [14, 15, 16, 18, 19, 30], "contractnotfounderror": [14, 15], "has_explor": 14, "decodingerror": 14, "ecosystemnotfounderror": 14, "methodnonpayableerror": 14, "payabl": [14, 24, 36], "outofgaserror": 14, "becaus": [14, 19, 24, 26, 27, 30, 35, 36], "providernotconnectederror": [14, 15, 18], "providernotfounderror": 14, "queryengineerror": [14, 15], "rpctimeouterror": 14, "subprocesstimeouterror": 14, "subprocesserror": 14, "whilst": 14, "exce": [14, 37], "inspir": [14, 17], "transactionnotfounderror": 14, "error_messsag": 14, "unknownsnapshoterror": [14, 15], "unknownversionerror": 14, "handle_ape_except": 14, "relev": [14, 17, 31], "frame": 14, "exc": 14, "someth": [14, 23, 30, 36, 37], "treat": [15, 24], "singleton": [15, 16], "root": [15, 18, 19, 20, 22, 23, 24, 28, 31, 36], "my_account": [15, 20, 26], "everi": [15, 17, 18, 29, 30, 32], "get_accounts_by_typ": 15, "type_": 15, "test_account": [15, 18, 19, 21, 36], "testaccountmanag": [15, 36], "These": [15, 24, 36], "subject": 15, "section": [15, 18, 20, 22, 24, 26, 30, 35, 36], "test_my_contract": [15, 36], "accountsmanag": 15, "testaccountcontain": 15, "account_id": 15, "slice": 15, "account_str": 15, "x": [15, 36, 37], "singl": [15, 18, 20, 24, 26, 35], "hood": [15, 19], "can_trace_sourc": 15, "filenam": 15, "both": [15, 16, 17, 18, 20, 23, 24, 27, 30, 34, 37], "trace_sourc": 15, "traceabl": 15, "sol": [15, 21, 26, 31, 36], "collis": [15, 24], "ensur": [15, 16, 17, 24, 30, 36], "compile_sourc": [15, 21], "compiler_nam": 15, "program": [15, 17], "fallback": 15, "statemut": [15, 24], "nonpay": [15, 24], "ethpm": [15, 33], "contractnam": [15, 21], "flatten_contract": 15, "content": [15, 18, 26], "get_import": 15, "import_source_id": 15, "get_refer": 15, "imports_dict": 15, "entri": [15, 27, 30], "referring_source_id": 15, "transactionhistori": 15, "txn_receipt": 15, "revert_to_block": 15, "outgo": 15, "short": [15, 29, 30, 32, 36], "circuit": 15, "greater": [15, 17], "contractcach": 15, "memori": [15, 18], "per": 15, "perman": [15, 18, 25], "disk": [15, 19], "faster": 15, "__setitem__": 15, "ecosystem_nam": [15, 35], "cache_blueprint": 15, "blueprint_id": 15, "would": [15, 19, 20, 25, 26, 30, 34, 35, 36], "starknet": [15, 28, 30, 36], "cache_deploy": 15, "contract_inst": [15, 25], "cache_proxy_info": 15, "proxy_info": 15, "proxyinfo": 15, "clear_local_cach": 15, "reset": 15, "blank": 15, "get_blueprint": 15, "get_contain": 15, "wrap": [15, 18], "get_creation_receipt": 15, "creation": [15, 20], "get_deploy": [15, 24], "read": [15, 20, 24, 30, 34], "_local_deployments_map": 15, "written": 15, "deployments_map": 15, "get_multipl": 15, "min": [15, 36, 37], "instance_at": 15, "typeerror": [15, 18], "en": [15, 16, 22, 24, 28], "domain": [15, 24], "instance_from_receipt": 15, "blockcontain": 15, "latest_block": 15, "head": [15, 23], "move": 15, "backward": 15, "height": 15, "poll_block": 15, "reorgan": 15, "even": [15, 29, 30], "previous": [15, 24, 26, 27, 36], "new_block": 15, "length": [15, 18, 19], "similarli": [15, 19, 20, 21, 24, 27, 36], "just": [15, 20, 24, 26, 30, 34], "mimic": 15, "behavior": [15, 29, 30], "built": [15, 27, 34, 36], "increment": [15, 17], "isol": [15, 36], "owner": [15, 21, 24, 25, 28, 36, 37], "foobar": [15, 28, 35], "deltatim": 15, "AND": 15, "design": [15, 17, 27], "begin": [15, 24], "pending_timestamp": [15, 36], "epoch": 15, "3600": 15, "restor": 15, "recent": 15, "project_fold": 15, "meta": 15, "packagemeta": 15, "author": [15, 24, 36], "licens": [15, 36], "keyword": [15, 23, 30], "link": [15, 36], "deploymentconfigcollect": 15, "default_ecosystem": [15, 22, 30], "parametr": 15, "test_mnemon": 15, "get_config": 15, "home": [15, 19, 22, 23, 25, 30, 34], "plugin_nam": 15, "force_reload": 15, "metadata": [15, 18], "using_project": 15, "project_path": 15, "contracts_path": 15, "my_project": 15, "deploymentconfig": 15, "rootmodelroottyp": 15, "pydanticundefin": 15, "accountintconvert": 15, "addressapiconvert": 15, "bytesaddressconvert": 15, "gwei": [15, 37], "appropri": 15, "long": [15, 27, 29], "is_typ": 15, "checksum": [15, 17], "against": [15, 16, 31, 36], "hexaddressconvert": 15, "hexconvert": 15, "hexintconvert": 15, "hex": [15, 18, 24], "intaddressconvert": 15, "stringintconvert": 15, "timestampconvert": 15, "datetim": 15, "timedelta": 15, "No": [15, 30], "timezon": 15, "utc": 15, "system": [15, 18, 19, 24, 25, 27, 30], "granular": 15, "active_provid": [15, 23], "create_custom_provid": 15, "provider_cl": 15, "ape_ethereum": [15, 24, 27], "ethereumnodeprovid": 15, "guess": 15, "set_default_ecosystem": 15, "get_ecosystem": 15, "get_network_choic": 15, "form": [15, 18, 24, 29, 36], "appear": [15, 18], "get_provider_from_choic": 15, "network_data": 15, "networks_yaml": 15, "load_contract": 15, "uniniti": 15, "mycontracttyp": 15, "mycontacttyp": 15, "To": [15, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37], "contractnamespac": 15, "__str__": 15, "mention": [15, 27, 30], "extensions_with_missing_compil": 15, "recurs": 15, "extract": 15, "get_compiler_data": 15, "compile_if_need": 15, "get_contract": [15, 24], "contract_nam": [15, 17, 36], "keyerror": 15, "interfaces_fold": 15, "lookup_path": 15, "key_contract_path": 15, "give": [15, 19, 20, 26, 32, 35], "helloworld": [15, 35], "absolut": [15, 18, 22], "2678": [15, 33], "project_typ": 15, "apeproject": [15, 16], "scripts_fold": 15, "sources_miss": 15, "anywher": [15, 24, 29], "tests_fold": 15, "track_deploy": [15, 33], "upon": [15, 24, 26, 33], "public": [15, 24, 36], "tracked_deploy": 15, "bip122uri": 15, "explicitli": [15, 17, 21, 36], "githubdepend": 15, "openzeppelin": [15, 18, 22, 26, 32], "organ": [15, 18, 27, 28, 33, 34], "follow": [15, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "dapphub": [15, 26], "erc20": [15, 26], "Will": [15, 20, 34], "localdepend": 15, "npmdepend": 15, "npm": 15, "safe": [15, 32], "gnosi": [15, 26, 32], "14": 15, "version_from_json": 15, "version_from_local_json": 15, "baseproject": 15, "brownieproject": 15, "browni": 15, "defaultqueryprovid": 15, "querymanag": [15, 23], "biggest_block_s": 15, "inaccess": 15, "plugin_typ": 16, "plugintyp": 16, "hookimpl_kwarg": 16, "accountplugin": 16, "accountcontain": 16, "pluggy_patch": 16, "There": [16, 19, 20, 22, 24, 26, 28, 30, 34, 35, 36, 37], "sever": [16, 20], "ecosystemplugin": 16, "hook": [16, 27], "registr": [16, 27], "overal": 16, "conform": [16, 18, 27], "much": [16, 21, 36, 37], "plugin_manag": 16, "pluggi": 16, "_manag": 16, "pluginmanag": 16, "own": [16, 22, 26, 29, 34, 36], "compilerplugin": 16, "register_compil": 16, "interfacecompil": 16, "document": [16, 19, 22], "config_class": 16, "deconstruct": 16, "inject": [16, 18], "mypluginconfig": 16, "conversionplugin": 16, "mweiconvers": 16, "explorerplugin": 16, "explor": [16, 24, 32], "etherscan": [16, 24, 28, 30], "myblockexplor": 16, "networkplugin": 16, "ropsten": 16, "happen": [16, 21, 24, 26, 30, 36], "soon": [16, 26], "shibachain": 16, "shibanetwork": 16, "providerplugin": [16, 27], "myprovid": [16, 27], "dependencyplugin": 16, "projectplugin": 16, "resolv": [16, 32], "gitmodul": 16, "queryplugin": 16, "query_engin": 16, "postgresengin": 16, "represent": [17, 23, 31], "bodi": 17, "namedtupl": 17, "191": 17, "compon": 17, "signabl": 17, "easi": [17, 20, 24, 34, 36], "origin": [17, 26, 34, 37], "think": 17, "712": 17, "hand": [17, 24], "encode_": 17, "modul": [17, 18, 23, 24, 29], "encode_structured_data": 17, "encode_intended_valid": 17, "encode_defunct": [17, 19], "r": [17, 36], "_signatur": 17, "ecdsa": 17, "vr": 17, "recover_sign": [17, 19], "sig": 17, "contractcoverag": 17, "functioncoverag": 17, "individu": [17, 28], "function_hit": 17, "hit": 17, "counter": 17, "zero": [17, 18, 36], "function_r": 17, "rate": [17, 30], "versu": [17, 22], "line_r": 17, "divid": 17, "lines_cov": 17, "lines_valid": 17, "miss_count": 17, "model_dump": 17, "pydant": [17, 18], "concept": [17, 36], "modelmodel_dump": 17, "mode": [17, 36], "to_python": 17, "serializ": 17, "by_alia": 17, "exclude_unset": 17, "exclude_default": 17, "exclude_non": 17, "round_trip": 17, "enabl": [17, 19, 24, 34, 36], "deseri": 17, "round": 17, "trip": 17, "encount": 17, "coveragestat": 17, "contractsourcecoverag": 17, "cover": [17, 24, 36], "total_funct": 17, "coverageproject": 17, "coveragereport": 17, "source_fold": 17, "get_html": 17, "get_xml": 17, "xml": [17, 36], "codecov": 17, "thu": [17, 20, 24, 30, 35, 36], "slightli": 17, "convent": [17, 22], "90": 17, "java": 17, "won": [17, 30, 36], "super": 17, "hit_count": 17, "dure": [17, 21, 26, 29, 35, 36], "segment": 17, "ast": 17, "occupi": 17, "builtin": 17, "mark": [17, 29, 36], "endlin": 17, "endcolumn": 17, "exact": [17, 36], "full_nam": 17, "contact": 17, "separ": [17, 19, 24, 27, 36], "getter": [17, 36], "profile_stat": 17, "profil": [17, 36], "accumul": 17, "sourcestat": 17, "detail": [17, 31, 34], "basecontractlog": 17, "event_nam": 17, "0x0000000000000000000000000000000000000000": 17, "event_argu": 17, "block_hash": 17, "log_index": 17, "transaction_index": 17, "unix": [17, 18], "lookup": [17, 36], "posit": [17, 36], "mock": [17, 26, 36], "compar": 17, "inherit": 17, "equal": [17, 18, 19, 37], "comparison": 17, "abc": 18, "model_config": 18, "classvar": 18, "arbitrary_types_allow": 18, "model_field": 18, "fieldinfo": 18, "__fields__": 18, "v1": [18, 26], "mixin": 18, "_before_": 18, "include_getattr": 18, "include_getitem": 18, "additional_error_messag": 18, "annot": 18, "nonetyp": 18, "accur": 18, "private_kei": 18, "pair": 18, "junk": [18, 19, 22, 36], "number_of_account": [18, 19, 22, 36], "githubcli": 18, "ape_org": 18, "com": [18, 28, 30, 34], "available_plugin": 18, "ape_plugin_nam": 18, "clone_repo": 18, "repo_path": 18, "target_path": 18, "scheme": 18, "git": [18, 26, 28], "ssh": 18, "download_packag": 18, "filesystem": 18, "get_releas": 18, "gitreleas": 18, "releas": [18, 25, 26, 28, 34], "get_repo": 18, "maxsiz": 18, "queue": 18, "join": [18, 34], "borrow": 18, "librari": [18, 19, 24, 27], "until": [18, 30], "gotten": 18, "unfinish": 18, "goe": [18, 30], "consum": 18, "task_don": 18, "unblock": 18, "struct": 18, "structpars": 18, "method_abi": 18, "decode_output": 18, "alter": [18, 23], "arrai": 18, "applic": [18, 26, 37], "default_nam": 18, "unnam": 18, "encode_input": [18, 24], "tracestyl": 18, "ff8c00": 18, "d75f00": 18, "gas_cost": 18, "dim": 18, "bright_magenta": 18, "bright_green": 18, "bright_blu": 18, "00afd7": 18, "add_padding_to_str": 18, "str_list": 18, "extra_spac": 18, "space_charact": 18, "space": 18, "pad": 18, "charact": 18, "allow_disconnect": 18, "fn": 18, "return_none_when_disconnect": 18, "try_snapshot": 18, "expand_environment_vari": 18, "substr": 18, "environ": [18, 19, 22, 23, 30, 34], "variabl": [18, 19, 22, 23, 36], "extract_nested_valu": 18, "dig": 18, "nest": 18, "gas_estimation_error_messag": 18, "tx_error": 18, "explan": [18, 31], "explain": [18, 30, 36], "generate_dev_account": 18, "hd_path": [18, 36], "start_index": 18, "genesi": [18, 30], "wallet": 18, "get_all_files_in_directori": 18, "dir_a": 18, "dir_b": 18, "file_a": 18, "file_b": 18, "file_c": 18, "interest": 18, "regex": 18, "get_current_timestamp_m": 18, "get_package_vers": 18, "obj": 18, "__version__": 18, "get_relative_path": 18, "anchor": 18, "comput": [18, 19], "rel": 18, "ancestor": 18, "injected_before_us": 18, "fget": 18, "fset": 18, "fdel": 18, "is_arrai": 18, "abi_typ": [18, 24], "abityp": 18, "probabl": 18, "is_evm_precompil": 18, "is_named_tupl": 18, "output_valu": 18, "is_struct": 18, "is_zero_hex": 18, "load_config": 18, "expand_envar": 18, "must_exist": 18, "oserror": 18, "expand": 18, "pragma_str_to_specifier_set": 18, "pragma_str": 18, "specifierset": 18, "pragma": [18, 36], "raises_not_impl": 18, "returns_arrai": 18, "run_until_complet": 18, "coroutin": 18, "async": 18, "await": 18, "asyncio": 18, "gather": 18, "singledispatchmethod": 18, "func": [18, 36], "dispatch": 18, "descriptor": 18, "generic_method": 18, "spawn": 18, "stream_respons": 18, "download_url": 18, "progress_bar_descript": 18, "progress": 18, "use_temp_sys_path": 18, "sy": 18, "secur": 19, "learn": [19, 21, 22, 24, 27, 28, 30, 31, 32, 33, 34, 35, 36], "ship": [19, 20, 21, 23, 28, 30], "assist": [19, 20, 27], "write": [19, 35, 36], "test_my_contract_method": 19, "prefund": 19, "put": [19, 29], "sole": 19, "generate_test_account": 19, "unfund": 19, "guid": [19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36], "action": [19, 34, 36], "1e18": 19, "ether": [19, 24, 25], "elimin": 19, "use_send": 19, "myfunct": 19, "imperson": [19, 36], "ledger": [19, 27], "trezor": [19, 27], "third": [19, 28], "parti": [19, 28, 34], "let": [19, 21, 23, 24, 30, 36], "premis": 19, "describ": [19, 30], "below": [19, 24, 26, 30, 36], "passphras": 19, "encrypt": 19, "password": 19, "browser": 19, "rest": [19, 27], "maxim": 19, "materi": 19, "entropi": 19, "increas": [19, 34, 36, 37], "n": 19, "altern": [19, 20, 21, 24, 26, 29, 30, 36], "elect": 19, "twice": 19, "sure": [19, 30, 34, 36], "rememb": 19, "hdpath": 19, "wordcount": 19, "togeth": [19, 27], "sai": [19, 24, 30, 37], "metamask": [19, 20], "export": 19, "secret": 19, "recoveri": 19, "d": [19, 36], "Then": [19, 23, 24, 26, 27, 36], "reduc": [19, 30], "repetit": 19, "eth_account": 19, "hello": [19, 35], "intention": 19, "decid": 19, "abov": [19, 24, 29, 30, 35, 36, 37], "eip712": 19, "eip712typ": 19, "mail": 19, "_chainid_": 19, "uint256": [19, 24, 36, 37], "_name_": 19, "_verifyingcontract_": 19, "0xcccccccccccccccccccccccccccccccccccccccc": 19, "_version_": 19, "alic": 19, "0xcd2a3d9f938e13cd947ec05abc7fe734df8dd826": 19, "bob": 19, "0xb0b0b0b0b0b0b000000000000000000000000000": 19, "recov": 19, "recovered_sign": 19, "ci": [19, 24], "cd": 19, "programmat": 19, "ape_accounts_": 19, "_passphras": 19, "subsequ": 19, "set_autosign": 19, "highli": 19, "approach": [19, 30, 35, 36], "avoid": [19, 24, 34, 35], "accident": 19, "leak": 19, "framework": [20, 24, 26, 29, 31, 34, 36, 37], "coupl": 20, "area": [20, 36], "showcas": 20, "endeavor": 20, "etc": 20, "logger": [20, 29], "gracefulli": 20, "cli_ctx": [20, 27, 35], "account_manag": 20, "bad": 20, "mymanag": 20, "my": [20, 24, 25, 26, 27, 30], "customcontext": 20, "my_manag": 20, "foundri": [20, 24, 30, 36], "leav": [20, 26, 36], "semi": 20, "colon": [20, 36], "cmd_2": 20, "afterward": [20, 36], "rare": 20, "peopl": 20, "index_of_test_account": 20, "matter": [20, 30], "alon": 20, "visa": 20, "versa": [20, 24], "delete_account": 20, "create_account": 20, "boolean": 20, "ape_account": 20, "application_prefix": 20, "foo_bar": 20, "cli_0": 20, "lambda": 20, "startswith": 20, "cli_1": 20, "me": [20, 37], "me2": 20, "selected_account": 20, "edit": [21, 22, 27, 28, 30], "src": [21, 22, 26], "myinterfac": 21, "my_interfac": 21, "0x1234556b5ed9202110d7ecd637a4581db8b9879f": 21, "my_method": [21, 24, 32, 36], "elsewher": [21, 22], "unwil": 21, "artifact": 21, "binari": 21, "larger": 21, "adjust": [21, 30, 31, 36], "vy": [21, 31, 36], "tsconfig": 21, "retain": 21, "use_depend": 21, "3": [21, 23, 24, 25, 26, 34, 36, 37], "7": [21, 28, 36], "8": [21, 34, 36], "get_compil": 21, "place": [22, 26, 30, 35, 36], "global": [22, 30, 36], "preced": 22, "prefer": 22, "serv": 22, "alphabet": 22, "facilit": 22, "easier": 22, "fulli": [22, 24], "outsid": 22, "globalcontract": 22, "fantom": [22, 28, 30, 36], "0x5fbdb2315678afecb367f032d93f642f64180aa3": 22, "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512": 22, "localhost": [22, 27], "5030": 22, "whole": 22, "default_network": [22, 30], "mainnet_fork": 22, "default_provid": [22, 30], "numer": [22, 29, 30], "16": [22, 30], "1234": [22, 30], "0x1234": [22, 30], "eth_estimatega": 22, "shouldn": 22, "0b2": 22, "1647323479": 23, "reflect": 23, "61": 23, "ape_console_extra": 23, "intern": [23, 36], "underscor": [23, 35], "_": [23, 35], "eth_util": 23, "encode_hex": 23, "decode_hex": 23, "getattr": 23, "weth_address": 23, "14388241": 23, "0x68f768988e9bd4be971d527f72483f321975fa52aff9692b6d0e0af71fb77aaf": 23, "ape_init_extra": 23, "web3": [23, 27, 34], "close": 23, "reopen": 23, "autoreload": 23, "ape_consol": 23, "embed": 23, "load_ext": 23, "h": 23, "databas": [23, 25], "okai": [23, 27], "human": 23, "readabl": [23, 36], "metamask0": 23, "00040634": 23, "0xe3747e6341e0d3430e6ea9e2346cddcc2f8a4b5b": 23, "mysmartcontract": 24, "__init__": [24, 27], "arg1": 24, "arg2": 24, "pleas": [24, 34, 37], "basic": 24, "contract2": 24, "higher": [24, 30, 36], "why": [24, 30, 37], "notic": [24, 30, 31, 35, 36], "complex": [24, 31], "possibli": 24, "repeat": 24, "fashion": 24, "perhap": 24, "simpli": 24, "copi": 24, "review": 24, "mere": [24, 27], "onc": [24, 26, 27, 30, 33, 36], "top": [24, 27, 36], "0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45": 24, "v2": 24, "registri": [24, 27], "ychad": 24, "keep": [24, 27, 36], "On": [24, 25], "rinkebi": 24, "pure": 24, "extern": [24, 36], "get_static_list": 24, "dynarrai": 24, "set_numb": 24, "num": 24, "prevnumb": 24, "mynumb": 24, "monei": 24, "storag": 24, "At": [24, 36], "eth_cal": 24, "eth_sendtransact": 24, "eth_sendrawtransact": 24, "demonstr": [24, 35, 36, 37], "123": [24, 33], "successfulli": [24, 33], "vice": 24, "addbal": 24, "new_bal": 24, "simul": [24, 30, 31], "forward": 24, "measur": 24, "getmodifiedbal": 24, "analyz": 24, "0x123": [24, 33], "40000": 24, "0x3fb5c1cb00000000000000000000000000000000000000000000000000000000000000de": 24, "bytes_valu": 24, "3fb5c1c": 24, "selector_str": 24, "input_dict": 24, "unit256": 24, "method_id": 24, "usdc": 24, "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": 24, "0x70a08231": 24, "balanceof": [24, 36, 37], "0x27e235e3": 24, "dump": 24, "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef": 24, "multical": 24, "multicall3": 24, "0xf4b8a02d4e8d76070bd7092b54d2cbbe90fa72e9": 24, "0x80067013d7f7af4e86b3890489acafe79f31a4cb": 24, "pool": 24, "ipool": 24, "getreserv": 24, "applydiscount": 24, "acct": [24, 25, 37], "larg": [25, 30], "rout": 25, "our": [25, 27, 34, 35, 36], "incorpor": 25, "few": [25, 26, 36], "df": 25, "stuff": [25, 29, 30], "sum": 25, "sent": [25, 30], "foohappen": 25, "beta": 25, "constant": 25, "plan": 25, "stage": 25, "sqlite": 25, "tabl": [25, 36, 37], "dataclass": 25, "contract_ev": 25, "untouch": 26, "box": [26, 28, 30, 36], "still": [26, 32, 36, 37], "highlight": 26, "zeppelin": 26, "offici": 26, "uniswap": 26, "v3": 26, "retri": [26, 30], "mydepend": 26, "suitabl": 26, "sometim": [26, 30, 36], "node_modul": 26, "myorg": 26, "v4": 26, "6": [26, 28, 36], "vault": 26, "master": [26, 34], "v0": 26, "gh": 26, "abbrevi": 26, "backend": 26, "guidelin": 26, "dapptoolserc20": 26, "dappnix": 26, "evm_vers": 26, "pari": 26, "involv": 26, "import_remap": 26, "erc721": 26, "dependency_contract": 26, "my_depend": 26, "dependencycontracttyp": 26, "deployed_contract": 26, "include_depend": 26, "ape_": 27, "ape_cli_subcommand": 27, "setup": [27, 36], "intend": 27, "tokenlist": 27, "As": [27, 30, 36], "primarili": 27, "team": 27, "good": 27, "qualiti": 27, "compos": [27, 34], "benefit": 27, "interchang": 27, "httpprovid": 27, "_web3": 27, "1337": [27, 37], "finish": 27, "ti": 27, "site": [27, 34], "loop": 27, "potenti": [27, 29, 30], "ones": [27, 37], "accord": 27, "_cli": 27, "my_sub_cmd": 27, "subcommand": 27, "entrypoint": 27, "entry_point": 27, "ape_myplugin": 27, "race": 27, "condit": 27, "prevent": 27, "my_cmd": [27, 29], "indiffer": 27, "my_ledger_account": 27, "ledger_0": 27, "my_trezor_account": 27, "trezor_0": 27, "my_script": 27, "my_provider_plugin": 27, "short_help": 27, "off": [27, 36], "my_command": 27, "architectur": 28, "trust": [28, 30], "constraint": 28, "throughout": 29, "21": 29, "30": 29, "yellow": 29, "40": 29, "shown": 29, "loglevel": 29, "set_level": 29, "arbitrum": 30, "tester": [30, 36], "discuss": [30, 36], "triplet": 30, "polygon": [30, 35], "anvil": [30, 36], "altogeth": 30, "commonli": 30, "testnet": [30, 35], "cut": 30, "talk": 30, "maintain": 30, "small": 30, "improv": 30, "wherea": 30, "matic": 30, "avalanch": 30, "optmism": 30, "zkevm": 30, "proper": 30, "remaind": 30, "familiar": 30, "109": 30, "shibarium": 30, "base_ecosystem_plugin": 30, "paragraph": 30, "recal": 30, "fro": 30, "closer": 30, "henc": 30, "default_": 30, "remot": 30, "care": [30, 37], "correctli": 30, "likewis": 30, "tell": 30, "apenet": 30, "closest": 30, "www": 30, "shibrpc": 30, "customnetwork": 30, "31337": 30, "rate_limit": 30, "sens": 30, "scan": 30, "api_uri": 30, "consult": 30, "readm": 30, "clarifi": 30, "saw": 30, "default_transaction_typ": 30, "fly": 30, "itself": [30, 31, 36], "integr": 30, "better": 30, "uncommon": 30, "placehold": 30, "unsur": 30, "ident": 30, "ethtest": 30, "ephemer": 30, "strai": 30, "though": 30, "120": 30, "decentr": 30, "max_receipt_retri": 30, "tend": 30, "caus": [30, 36], "reject": 30, "decis": 30, "middl": 30, "start_provid": 30, "jump": [30, 34], "bridg": 30, "continu": 30, "effect": 30, "smart_contract_exampl": 31, "sampl": [31, 36], "test_sampl": 31, "autom": 31, "my_account_alia": 31, "job": 31, "popular": 31, "minim": 32, "1167": 32, "1967": 32, "beacon": 32, "uup": 32, "1822": 32, "9": 32, "create_forwarder_to": 32, "0xsplit": 32, "formerli": 32, "oz": 32, "897": 32, "zeroag": 32, "soladypush0": 32, "push0": 32, "host": 32, "influenc": 33, "walk": 33, "0x12c17f958d2ee523a2206206994597c13d831e34": 33, "With": 34, "ltd": 34, "discord": 34, "server": 34, "stai": 34, "date": 34, "tutori": [34, 37], "technic": 34, "deeper": [34, 36], "understand": [34, 36], "academ": 34, "platform": 34, "challeng": 34, "linux": [34, 36], "maco": [34, 36], "11": 34, "window": 34, "subsystem": 34, "wsl": 34, "python3": 34, "three": [34, 36], "advis": 34, "1558": 34, "virtualenv": 34, "venv": 34, "interf": 34, "o": [34, 37], "env": 34, "homebrew": 34, "instruct": 34, "visit": [34, 37], "dockerhub": 34, "volum": 34, "haramb": 34, "vvm": 34, "solcx": 34, "pwd": 34, "sdk": 34, "interoper": 34, "experi": 34, "3rd": 34, "risk": 34, "bundl": [34, 36], "softwar": 34, "acc0": 34, "acc1": 34, "k": 34, "test_only_one_th": 34, "advantag": 35, "submodul": 35, "world": 35, "subdirectori": 35, "flexibl": 35, "cli_2": 35, "shownet": 35, "ideal": 35, "mumbai": 35, "nm": 35, "network_manag": 35, "hop": 35, "yourself": 35, "therefor": 35, "quick": 35, "workflow": 35, "suppos": 35, "stick": 35, "dist": 36, "cov": 36, "becom": 36, "intuit": 36, "fact": 36, "regular": 36, "test_": 36, "test_add": 36, "left": 36, "divis": 36, "phase": 36, "piec": 36, "encompass": 36, "enact": 36, "behav": 36, "authorized_method": 36, "test_author": 36, "not_own": 36, "set_own": 36, "scope": 36, "disabl": 36, "flow": 36, "dive": 36, "syntax": 36, "exactli": 36, "test_my_method": 36, "sustain": 36, "despit": 36, "vitalik": 36, "0xab5801a7d398351b8be11c439e05c5b3259aec9b": 36, "other_contract": 36, "othercontract": 36, "test_in_futur": 36, "86000": 36, "test_multi_chain": 36, "inspect": 36, "academi": 36, "conftest": 36, "test_mint": 36, "nft": 36, "test_account_bal": 36, "quantiti": 36, "mint": [36, 37], "earlier": 36, "assertionerror": 36, "shorter": 36, "comment": 36, "check_valu": 36, "_valu": 36, "reli": 36, "explictli": 36, "cairo": 36, "due": 36, "_x": 36, "sqrt": 36, "incorrect": 36, "reentri": 36, "nonreentr": 36, "_foo_intern": 36, "introduc": 36, "spdx": 36, "gpl": 36, "unauthor": 36, "unauth_address": 36, "withdraw": 36, "disallow": 36, "hacker": 36, "test_unauthorized_withdraw": 36, "test_unauthor": 36, "test_error_on_deploi": 36, "mycustomerror": 36, "haserror": 36, "rev": 36, "captur": 36, "grab": 36, "isinst": 36, "myerror": 36, "use_network": 36, "marker": 36, "test_my_fantom_test": 36, "test_my_ethereum_test": 36, "mid": 36, "test_my_multichain_test": 36, "stark_contract": 36, "mystarknetcontract": 36, "test_starknet_th": 36, "stark_account": 36, "fundm": 36, "median": [36, 37], "57198": 36, "91398": 36, "82848": 36, "28307": 36, "38679": 36, "33493": 36, "changeonstatu": 36, "23827": 36, "45739": 36, "34783": 36, "getsecret": 36, "24564": 36, "test0": 36, "2400": 36, "9100": 36, "5750": 36, "testcontract": 36, "setnumb": 36, "51021": 36, "debug_": 36, "mocktoken": 36, "poolcontract": 36, "reset_": 36, "comma": 36, "interv": 36, "press": 36, "ctrl": 36, "undo": 36, "stmt": 36, "85": 36, "71": 36, "80": 36, "htmlcov": 36, "__builtin__": 36, "_immutable_numb": 36, "_number": 36, "foo_method": 36, "view_method": 36, "distinguish": 36, "myaccount": 37, "shell": 37, "contract_method_defined_in_contract": 37, "depth": 37, "apeacademi": 37, "london": 37, "got": 37, "broken": 37, "fundmycontract": 37, "prioriti": 37, "beforehand": 37, "plu": 37, "priorit": 37, "highest": 37, "0x00": 37, "0x0": 37, "fooevent": 37, "barev": 37, "foomethod": 37, "event_typ": 37, "baz": 37, "longer": 37, "600": 37, "show_trac": 37, "methodwithoutargu": 37, "0x43abb1fdadfdae68f84ce8cd2582af6ab02412f686ee2544aa998db662a5ef50": 37, "0x1e59ce931b4cfea3fe4b875411e280e173cb7a9c": 37, "contracta": 37, "7a9c": 37, "469604": 37, "superclust": 37, "234444": 37, "23523523235235": 37, "11111111111": 37, "345345347789999991": 37, "99999998888882": 37, "345457847457457458457457457": 37, "92222229999998888882": 37, "3454": 37, "111145345347789999991": 37, "333399998888882": 37, "234545457847457457458457457457": 37, "461506": 37, "methodb1": 37, "lolol": 37, "ic": 37, "cream": 37, "dynamo": 37, "402067": 37, "contractc": 37, "getsomelist": 37, "3425311345134513461345134534531452345": 37, "111344445534535353": 37, "993453434534534534534977788884443333": 37, "370103": 37, "methodc1": 37, "windows95": 37, "simpler": 37, "jamaica": 37, "cardin": 37, "363869": 37, "callm": 37, "233432": 37, "methodb2": 37, "trombon": 37, "231951": 37, "paperwork": 37, "countri": 37, "wing": 37, "227360": 37, "222263": 37, "methodc2": 37, "147236": 37, "122016": 37, "addresstovalu": 37, "100305": 37, "bandpractic": 37, "94270": 37, "lemondrop": 37, "92321": 37, "86501": 37, "82729": 37, "snitches_get_stich": 37, "111": 37, "55252": 37, "52079": 37, "48306": 37, "0x053cba5c12172654d894f66d5670bab6215517a94189a9ffc09bc40a589ec04d": 37, "show_gas_report": 37, "dai": 37, "1302": 37, "13028": 37, "1377": 37, "approv": 37, "22414": 37, "burn": 37, "11946": 37, "25845": 37, "contract_a": 37, "methodtocal": 37, "txn_cost": 37, "mymutablemethod": 37, "view_cost": 37, "myviewmethod": 37}, "objects": {"": [[10, 0, 0, "-", "ape"]], "ape": [[10, 1, 1, "", "Contract"], [10, 2, 1, "", "Project"], [10, 3, 1, "", "accounts"], [10, 3, 1, "", "chain"], [10, 3, 1, "", "compilers"], [10, 3, 1, "", "config"], [10, 1, 1, "", "convert"], [14, 0, 0, "-", "exceptions"], [10, 3, 1, "", "networks"], [16, 0, 0, "-", "plugins"], [10, 3, 1, "", "project"], [10, 2, 1, "", "reverts"], [17, 0, 0, "-", "types"], [18, 0, 0, "-", "utils"]], "ape.api": [[11, 0, 0, "-", "accounts"], [11, 0, 0, "-", "address"], [11, 0, 0, "-", "compiler"], [11, 0, 0, "-", "config"], [11, 0, 0, "-", "convert"], [11, 0, 0, "-", "explorers"], [11, 0, 0, "-", "networks"], [11, 0, 0, "-", "projects"], [11, 0, 0, "-", "providers"], [11, 0, 0, "-", "query"]], "ape.api.accounts": [[11, 4, 1, "", "AccountAPI"], [11, 4, 1, "", "AccountContainerAPI"], [11, 4, 1, "", "ImpersonatedAccount"], [11, 4, 1, "", "TestAccountAPI"], [11, 4, 1, "", "TestAccountContainerAPI"]], "ape.api.accounts.AccountAPI": [[11, 5, 1, "", "__dir__"], [11, 6, 1, "", "alias"], [11, 5, 1, "", "call"], [11, 5, 1, "", "check_signature"], [11, 5, 1, "", "declare"], [11, 5, 1, "", "deploy"], [11, 5, 1, "", "prepare_transaction"], [11, 5, 1, "", "sign_message"], [11, 5, 1, "", "sign_transaction"], [11, 5, 1, "", "transfer"]], "ape.api.accounts.AccountContainerAPI": [[11, 5, 1, "", "__contains__"], [11, 5, 1, "", "__delitem__"], [11, 5, 1, "", "__getitem__"], [11, 5, 1, "", "__len__"], [11, 6, 1, "", "accounts"], [11, 6, 1, "", "aliases"], [11, 5, 1, "", "append"], [11, 5, 1, "", "remove"]], "ape.api.accounts.ImpersonatedAccount": [[11, 6, 1, "", "address"], [11, 5, 1, "", "call"], [11, 5, 1, "", "sign_message"], [11, 5, 1, "", "sign_transaction"]], "ape.api.accounts.TestAccountContainerAPI": [[11, 5, 1, "", "generate_account"]], "ape.api.address": [[11, 4, 1, "", "Address"], [11, 4, 1, "", "BaseAddress"]], "ape.api.address.Address": [[11, 6, 1, "", "address"]], "ape.api.address.BaseAddress": [[11, 6, 1, "", "address"], [11, 6, 1, "", "balance"], [11, 6, 1, "", "code"], [11, 6, 1, "", "codesize"], [11, 6, 1, "", "history"], [11, 6, 1, "", "is_contract"], [11, 6, 1, "", "nonce"]], "ape.api.compiler": [[11, 4, 1, "", "CompilerAPI"]], "ape.api.compiler.CompilerAPI": [[11, 5, 1, "", "compile"], [11, 2, 1, "", "compiler_settings"], [11, 6, 1, "", "config"], [11, 5, 1, "", "enrich_error"], [11, 5, 1, "", "get_versions"], [11, 6, 1, "", "name"], [11, 6, 1, "", "settings"], [11, 6, 1, "", "supports_source_tracing"]], "ape.api.config": [[11, 4, 1, "", "ConfigEnum"], [11, 4, 1, "", "GenericConfig"], [11, 4, 1, "", "PluginConfig"]], "ape.api.convert": [[11, 4, 1, "", "ConverterAPI"]], "ape.api.convert.ConverterAPI": [[11, 5, 1, "", "convert"], [11, 5, 1, "", "is_convertible"]], "ape.api.explorers": [[11, 4, 1, "", "ExplorerAPI"]], "ape.api.explorers.ExplorerAPI": [[11, 5, 1, "", "get_address_url"], [11, 5, 1, "", "get_contract_type"], [11, 5, 1, "", "get_transaction_url"], [11, 5, 1, "", "publish_contract"]], "ape.api.networks": [[11, 4, 1, "", "EcosystemAPI"], [11, 4, 1, "", "ForkedNetworkAPI"], [11, 4, 1, "", "NetworkAPI"], [11, 4, 1, "", "ProviderContextManager"], [11, 4, 1, "", "ProxyInfoAPI"], [11, 1, 1, "", "create_network_type"]], "ape.api.networks.EcosystemAPI": [[11, 5, 1, "", "__ape_extra_attributes__"], [11, 5, 1, "", "add_network"], [11, 6, 1, "", "config"], [11, 5, 1, "", "create_transaction"], [11, 6, 1, "", "custom_network"], [11, 2, 1, "", "data_folder"], [11, 5, 1, "", "decode_address"], [11, 5, 1, "", "decode_block"], [11, 5, 1, "", "decode_calldata"], [11, 5, 1, "", "decode_logs"], [11, 5, 1, "", "decode_receipt"], [11, 5, 1, "", "decode_returndata"], [11, 6, 1, "", "default_network_name"], [11, 5, 1, "", "encode_address"], [11, 5, 1, "", "encode_calldata"], [11, 5, 1, "", "encode_deployment"], [11, 5, 1, "", "encode_transaction"], [11, 5, 1, "", "enrich_calltree"], [11, 2, 1, "", "fee_token_decimals"], [11, 2, 1, "", "fee_token_symbol"], [11, 5, 1, "", "get_method_selector"], [11, 5, 1, "", "get_network"], [11, 5, 1, "", "get_network_data"], [11, 5, 1, "", "get_proxy_info"], [11, 2, 1, "", "name"], [11, 6, 1, "", "networks"], [11, 2, 1, "", "request_header"], [11, 5, 1, "", "serialize_transaction"], [11, 5, 1, "", "set_default_network"]], "ape.api.networks.ForkedNetworkAPI": [[11, 6, 1, "", "upstream_chain_id"], [11, 6, 1, "", "upstream_network"], [11, 6, 1, "", "upstream_provider"], [11, 5, 1, "", "use_upstream_provider"]], "ape.api.networks.NetworkAPI": [[11, 6, 1, "", "auto_gas_multiplier"], [11, 6, 1, "", "base_fee_multiplier"], [11, 6, 1, "", "block_time"], [11, 6, 1, "", "chain_id"], [11, 6, 1, "", "config"], [11, 2, 1, "", "data_folder"], [11, 6, 1, "", "default_provider_name"], [11, 2, 1, "", "ecosystem"], [11, 6, 1, "", "explorer"], [11, 5, 1, "", "get_provider"], [11, 6, 1, "", "is_adhoc"], [11, 6, 1, "", "is_dev"], [11, 6, 1, "", "is_fork"], [11, 6, 1, "", "is_local"], [11, 2, 1, "", "name"], [11, 6, 1, "", "network_id"], [11, 6, 1, "", "providers"], [11, 5, 1, "", "publish_contract"], [11, 2, 1, "", "request_header"], [11, 6, 1, "", "required_confirmations"], [11, 5, 1, "", "set_default_provider"], [11, 6, 1, "", "transaction_acceptance_timeout"], [11, 5, 1, "", "use_default_provider"], [11, 5, 1, "", "use_provider"], [11, 5, 1, "", "verify_chain_id"]], "ape.api.networks.ProviderContextManager": [[11, 6, 1, "", "empty"]], "ape.api.networks.ProxyInfoAPI": [[11, 2, 1, "", "target"]], "ape.api.projects": [[11, 4, 1, "", "DependencyAPI"], [11, 4, 1, "", "ProjectAPI"]], "ape.api.projects.DependencyAPI": [[11, 6, 1, "", "cached_manifest"], [11, 5, 1, "", "compile"], [11, 2, 1, "", "config_override"], [11, 6, 1, "", "contracts"], [11, 2, 1, "", "contracts_folder"], [11, 2, 1, "", "exclude"], [11, 5, 1, "", "extract_manifest"], [11, 2, 1, "", "name"], [11, 6, 1, "", "uri"], [11, 2, 1, "", "version"], [11, 6, 1, "", "version_id"]], "ape.api.projects.ProjectAPI": [[11, 5, 1, "", "add_compiler_data"], [11, 6, 1, "", "cached_manifest"], [11, 2, 1, "", "contracts_folder"], [11, 5, 1, "", "create_manifest"], [11, 6, 1, "", "is_valid"], [11, 6, 1, "", "manifest_cachefile"], [11, 2, 1, "", "name"], [11, 2, 1, "", "path"], [11, 5, 1, "", "process_config_file"], [11, 5, 1, "", "replace_manifest"], [11, 5, 1, "", "update_manifest"], [11, 2, 1, "", "version"]], "ape.api.providers": [[11, 4, 1, "", "BlockAPI"], [11, 4, 1, "", "ProviderAPI"], [11, 4, 1, "", "SubprocessProvider"], [11, 4, 1, "", "TestProviderAPI"], [11, 4, 1, "", "UpstreamProvider"]], "ape.api.providers.ProviderAPI": [[11, 6, 1, "", "base_fee"], [11, 2, 1, "", "block_page_size"], [11, 6, 1, "", "chain_id"], [11, 2, 1, "", "concurrency"], [11, 6, 1, "", "config"], [11, 5, 1, "", "connect"], [11, 6, 1, "", "connection_id"], [11, 6, 1, "", "connection_str"], [11, 2, 1, "", "data_folder"], [11, 5, 1, "", "disconnect"], [11, 5, 1, "", "estimate_gas_cost"], [11, 6, 1, "", "gas_price"], [11, 5, 1, "", "get_balance"], [11, 5, 1, "", "get_block"], [11, 5, 1, "", "get_code"], [11, 5, 1, "", "get_contract_logs"], [11, 5, 1, "", "get_nonce"], [11, 5, 1, "", "get_receipt"], [11, 5, 1, "", "get_transactions_by_block"], [11, 5, 1, "", "get_virtual_machine_error"], [11, 6, 1, "", "http_uri"], [11, 6, 1, "", "is_connected"], [11, 6, 1, "", "max_gas"], [11, 2, 1, "", "name"], [11, 2, 1, "", "network"], [11, 6, 1, "", "network_choice"], [11, 5, 1, "", "prepare_transaction"], [11, 6, 1, "", "priority_fee"], [11, 2, 1, "", "provider_settings"], [11, 2, 1, "", "request_header"], [11, 5, 1, "", "send_call"], [11, 5, 1, "", "send_private_transaction"], [11, 5, 1, "", "send_transaction"], [11, 6, 1, "", "settings"], [11, 6, 1, "", "supports_tracing"], [11, 5, 1, "", "update_settings"], [11, 6, 1, "", "ws_uri"]], "ape.api.providers.SubprocessProvider": [[11, 5, 1, "", "build_command"], [11, 5, 1, "", "connect"], [11, 6, 1, "", "connection_id"], [11, 5, 1, "", "disconnect"], [11, 6, 1, "", "process_name"], [11, 5, 1, "", "start"], [11, 5, 1, "", "stop"]], "ape.api.providers.TestProviderAPI": [[11, 5, 1, "", "mine"], [11, 5, 1, "", "revert"], [11, 5, 1, "", "set_timestamp"], [11, 5, 1, "", "snapshot"]], "ape.api.query": [[11, 4, 1, "", "AccountTransactionQuery"], [11, 4, 1, "", "BlockQuery"], [11, 4, 1, "", "BlockTransactionQuery"], [11, 4, 1, "", "ContractCreationQuery"], [11, 4, 1, "", "ContractEventQuery"], [11, 4, 1, "", "ContractMethodQuery"], [11, 4, 1, "", "QueryAPI"]], "ape.api.query.QueryAPI": [[11, 5, 1, "", "estimate_query"], [11, 5, 1, "", "perform_query"], [11, 5, 1, "", "update_cache"]], "ape.api.transactions": [[11, 4, 1, "", "ReceiptAPI"], [11, 4, 1, "", "TransactionAPI"]], "ape.api.transactions.ReceiptAPI": [[11, 5, 1, "", "await_confirmations"], [11, 5, 1, "", "decode_logs"], [11, 6, 1, "", "events"], [11, 6, 1, "", "failed"], [11, 6, 1, "", "method_called"], [11, 5, 1, "", "raise_for_status"], [11, 6, 1, "", "ran_out_of_gas"], [11, 6, 1, "", "return_value"], [11, 6, 1, "", "total_fees_paid"], [11, 6, 1, "", "trace"], [11, 5, 1, "", "track_coverage"], [11, 5, 1, "", "track_gas"]], "ape.api.transactions.TransactionAPI": [[11, 6, 1, "", "receipt"], [11, 5, 1, "", "serialize_transaction"], [11, 6, 1, "", "total_transfer_value"], [11, 6, 1, "", "trace"], [11, 6, 1, "", "txn_hash"]], "ape.cli": [[12, 0, 0, "-", "arguments"], [12, 0, 0, "-", "choices"], [12, 0, 0, "-", "commands"], [12, 0, 0, "-", "options"], [12, 0, 0, "-", "paramtype"], [12, 0, 0, "-", "utils"]], "ape.cli.arguments": [[12, 1, 1, "", "contract_file_paths_argument"], [12, 1, 1, "", "existing_alias_argument"], [12, 1, 1, "", "non_existing_alias_argument"]], "ape.cli.choices": [[12, 4, 1, "", "AccountAliasPromptChoice"], [12, 4, 1, "", "Alias"], [12, 4, 1, "", "NetworkChoice"], [12, 4, 1, "", "OutputFormat"], [12, 4, 1, "", "PromptChoice"], [12, 1, 1, "", "get_user_selected_account"], [12, 1, 1, "", "output_format_choice"], [12, 1, 1, "", "select_account"]], "ape.cli.choices.AccountAliasPromptChoice": [[12, 5, 1, "", "convert"], [12, 5, 1, "", "print_choices"], [12, 5, 1, "", "select_account"]], "ape.cli.choices.Alias": [[12, 2, 1, "", "name"]], "ape.cli.choices.NetworkChoice": [[12, 5, 1, "", "convert"], [12, 5, 1, "", "get_metavar"]], "ape.cli.choices.OutputFormat": [[12, 2, 1, "", "TREE"], [12, 2, 1, "", "YAML"]], "ape.cli.choices.PromptChoice": [[12, 5, 1, "", "convert"], [12, 5, 1, "", "print_choices"]], "ape.cli.commands": [[12, 4, 1, "", "ConnectedProviderCommand"], [12, 4, 1, "", "NetworkBoundCommand"]], "ape.cli.commands.ConnectedProviderCommand": [[12, 5, 1, "", "invoke"], [12, 5, 1, "", "parse_args"]], "ape.cli.options": [[12, 4, 1, "", "ApeCliContextObject"], [12, 4, 1, "", "NetworkOption"], [12, 1, 1, "", "account_option"], [12, 1, 1, "", "ape_cli_context"], [12, 1, 1, "", "contract_option"], [12, 1, 1, "", "incompatible_with"], [12, 1, 1, "", "network_option"], [12, 1, 1, "", "output_format_option"], [12, 1, 1, "", "skip_confirmation_option"], [12, 1, 1, "", "verbosity_option"]], "ape.cli.options.ApeCliContextObject": [[12, 5, 1, "", "abort"]], "ape.cli.paramtype": [[12, 4, 1, "", "AllFilePaths"], [12, 4, 1, "", "Path"]], "ape.cli.paramtype.AllFilePaths": [[12, 5, 1, "", "convert"]], "ape.contracts.base": [[13, 4, 1, "", "ContractContainer"], [13, 4, 1, "", "ContractEvent"], [13, 4, 1, "", "ContractInstance"], [13, 4, 1, "", "ContractTypeWrapper"]], "ape.contracts.base.ContractContainer": [[13, 5, 1, "", "__call__"], [13, 5, 1, "", "__getattr__"], [13, 5, 1, "", "at"], [13, 5, 1, "", "deploy"], [13, 6, 1, "", "deployments"]], "ape.contracts.base.ContractEvent": [[13, 5, 1, "", "__call__"], [13, 5, 1, "", "__iter__"], [13, 5, 1, "", "from_receipt"], [13, 6, 1, "", "name"], [13, 5, 1, "", "poll_logs"], [13, 5, 1, "", "query"], [13, 5, 1, "", "range"]], "ape.contracts.base.ContractInstance": [[13, 5, 1, "", "__call__"], [13, 5, 1, "", "__dir__"], [13, 5, 1, "", "__getattr__"], [13, 6, 1, "", "address"], [13, 5, 1, "", "call_view_method"], [13, 5, 1, "", "get_error_by_signature"], [13, 5, 1, "", "get_event_by_signature"], [13, 5, 1, "", "invoke_transaction"], [13, 6, 1, "", "receipt"]], "ape.contracts.base.ContractTypeWrapper": [[13, 5, 1, "", "decode_input"], [13, 6, 1, "", "identifier_lookup"], [13, 6, 1, "", "selector_identifiers"], [13, 6, 1, "", "source_path"]], "ape.exceptions": [[14, 7, 1, "", "APINotImplementedError"], [14, 7, 1, "", "Abort"], [14, 7, 1, "", "AccountsError"], [14, 7, 1, "", "AliasAlreadyInUseError"], [14, 7, 1, "", "ApeAttributeError"], [14, 7, 1, "", "ApeException"], [14, 7, 1, "", "ApeIndexError"], [14, 7, 1, "", "ArgumentsLengthError"], [14, 7, 1, "", "BlockNotFoundError"], [14, 7, 1, "", "ChainError"], [14, 7, 1, "", "CompilerError"], [14, 7, 1, "", "ConfigError"], [14, 7, 1, "", "ContractDataError"], [14, 7, 1, "", "ContractLogicError"], [14, 7, 1, "", "ContractNotFoundError"], [14, 7, 1, "", "ConversionError"], [14, 7, 1, "", "CustomError"], [14, 7, 1, "", "DecodingError"], [14, 7, 1, "", "EcosystemNotFoundError"], [14, 7, 1, "", "MethodNonPayableError"], [14, 7, 1, "", "NetworkError"], [14, 7, 1, "", "NetworkMismatchError"], [14, 7, 1, "", "NetworkNotFoundError"], [14, 7, 1, "", "OutOfGasError"], [14, 7, 1, "", "ProjectError"], [14, 7, 1, "", "ProviderError"], [14, 7, 1, "", "ProviderNotConnectedError"], [14, 7, 1, "", "ProviderNotFoundError"], [14, 7, 1, "", "QueryEngineError"], [14, 7, 1, "", "RPCTimeoutError"], [14, 7, 1, "", "SignatureError"], [14, 7, 1, "", "SubprocessError"], [14, 7, 1, "", "SubprocessTimeoutError"], [14, 7, 1, "", "TransactionError"], [14, 7, 1, "", "TransactionNotFoundError"], [14, 7, 1, "", "UnknownSnapshotError"], [14, 7, 1, "", "UnknownVersionError"], [14, 7, 1, "", "VirtualMachineError"], [14, 1, 1, "", "handle_ape_exception"]], "ape.exceptions.Abort": [[14, 5, 1, "", "show"]], "ape.exceptions.ContractLogicError": [[14, 6, 1, "", "dev_message"], [14, 5, 1, "", "from_error"]], "ape.exceptions.CustomError": [[14, 6, 1, "", "name"]], "ape.managers": [[15, 0, 0, "-", "accounts"], [15, 0, 0, "-", "compilers"], [15, 0, 0, "-", "config"], [15, 0, 0, "-", "converters"], [15, 0, 0, "-", "networks"], [15, 0, 0, "-", "query"]], "ape.managers.accounts": [[15, 4, 1, "", "AccountManager"], [15, 4, 1, "", "TestAccountManager"]], "ape.managers.accounts.AccountManager": [[15, 5, 1, "", "__contains__"], [15, 5, 1, "", "__len__"], [15, 6, 1, "", "aliases"], [15, 6, 1, "", "containers"], [15, 5, 1, "", "get_accounts_by_type"], [15, 5, 1, "", "load"], [15, 6, 1, "", "test_accounts"]], "ape.managers.accounts.TestAccountManager": [[15, 5, 1, "", "__contains__"], [15, 5, 1, "", "__getitem__"], [15, 5, 1, "", "__iter__"], [15, 5, 1, "", "__len__"]], "ape.managers.chain": [[15, 4, 1, "", "AccountHistory"], [15, 4, 1, "", "BlockContainer"], [15, 4, 1, "", "ChainManager"], [15, 4, 1, "", "ContractCache"], [15, 4, 1, "", "TransactionHistory"]], "ape.managers.chain.AccountHistory": [[15, 5, 1, "", "__iter__"], [15, 5, 1, "", "__len__"], [15, 2, 1, "", "address"], [15, 5, 1, "", "append"], [15, 6, 1, "", "outgoing"], [15, 5, 1, "", "query"], [15, 5, 1, "", "revert_to_block"], [15, 2, 1, "", "sessional"]], "ape.managers.chain.BlockContainer": [[15, 5, 1, "", "__getitem__"], [15, 5, 1, "", "__iter__"], [15, 5, 1, "", "__len__"], [15, 6, 1, "", "head"], [15, 6, 1, "", "height"], [15, 5, 1, "", "poll_blocks"], [15, 5, 1, "", "query"], [15, 5, 1, "", "range"]], "ape.managers.chain.ChainManager": [[15, 6, 1, "", "base_fee"], [15, 6, 1, "", "blocks"], [15, 6, 1, "", "chain_id"], [15, 6, 1, "", "gas_price"], [15, 5, 1, "", "get_receipt"], [15, 6, 1, "", "history"], [15, 5, 1, "", "isolate"], [15, 5, 1, "", "mine"], [15, 6, 1, "", "pending_timestamp"], [15, 5, 1, "", "restore"], [15, 5, 1, "", "snapshot"]], "ape.managers.chain.ContractCache": [[15, 5, 1, "", "__delitem__"], [15, 5, 1, "", "__setitem__"], [15, 5, 1, "", "cache_blueprint"], [15, 5, 1, "", "cache_deployment"], [15, 5, 1, "", "cache_proxy_info"], [15, 5, 1, "", "clear_local_caches"], [15, 5, 1, "", "get"], [15, 5, 1, "", "get_blueprint"], [15, 5, 1, "", "get_container"], [15, 5, 1, "", "get_creation_receipt"], [15, 5, 1, "", "get_deployments"], [15, 5, 1, "", "get_multiple"], [15, 5, 1, "", "get_proxy_info"], [15, 5, 1, "", "instance_at"], [15, 5, 1, "", "instance_from_receipt"]], "ape.managers.chain.TransactionHistory": [[15, 5, 1, "", "append"], [15, 5, 1, "", "revert_to_block"]], "ape.managers.compilers": [[15, 4, 1, "", "CompilerManager"]], "ape.managers.compilers.CompilerManager": [[15, 5, 1, "", "can_trace_source"], [15, 5, 1, "", "compile"], [15, 5, 1, "", "compile_source"], [15, 5, 1, "", "enrich_error"], [15, 5, 1, "", "flatten_contract"], [15, 5, 1, "", "get_imports"], [15, 5, 1, "", "get_references"], [15, 6, 1, "", "registered_compilers"]], "ape.managers.config": [[15, 4, 1, "", "ConfigManager"], [15, 4, 1, "", "DeploymentConfig"], [15, 4, 1, "", "DeploymentConfigCollection"]], "ape.managers.config.ConfigManager": [[15, 2, 1, "", "DATA_FOLDER"], [15, 2, 1, "", "PROJECT_FOLDER"], [15, 2, 1, "", "contracts_folder"], [15, 2, 1, "", "default_ecosystem"], [15, 2, 1, "", "dependencies"], [15, 2, 1, "", "deployments"], [15, 5, 1, "", "get_config"], [15, 5, 1, "", "load"], [15, 2, 1, "", "meta"], [15, 2, 1, "", "name"], [15, 5, 1, "", "using_project"], [15, 2, 1, "", "version"]], "ape.managers.converters": [[15, 4, 1, "", "AccountIntConverter"], [15, 4, 1, "", "AddressAPIConverter"], [15, 4, 1, "", "BytesAddressConverter"], [15, 4, 1, "", "ConversionManager"], [15, 4, 1, "", "HexAddressConverter"], [15, 4, 1, "", "HexConverter"], [15, 4, 1, "", "HexIntConverter"], [15, 4, 1, "", "IntAddressConverter"], [15, 4, 1, "", "StringIntConverter"], [15, 4, 1, "", "TimestampConverter"]], "ape.managers.converters.AccountIntConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.AddressAPIConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.BytesAddressConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.ConversionManager": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_type"]], "ape.managers.converters.HexAddressConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.HexConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.HexIntConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.IntAddressConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.StringIntConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.converters.TimestampConverter": [[15, 5, 1, "", "convert"], [15, 5, 1, "", "is_convertible"]], "ape.managers.networks": [[15, 4, 1, "", "NetworkManager"]], "ape.managers.networks.NetworkManager": [[15, 6, 1, "", "active_provider"], [15, 5, 1, "", "create_custom_provider"], [15, 6, 1, "", "default_ecosystem"], [15, 6, 1, "", "ecosystem"], [15, 6, 1, "", "ecosystem_names"], [15, 6, 1, "", "ecosystems"], [15, 5, 1, "", "fork"], [15, 5, 1, "", "get_ecosystem"], [15, 5, 1, "", "get_network_choices"], [15, 5, 1, "", "get_provider_from_choice"], [15, 6, 1, "", "network"], [15, 6, 1, "", "network_data"], [15, 6, 1, "", "network_names"], [15, 6, 1, "", "networks_yaml"], [15, 5, 1, "", "parse_network_choice"], [15, 6, 1, "", "provider_names"], [15, 5, 1, "", "set_default_ecosystem"]], "ape.managers.project": [[15, 0, 0, "-", "dependency"], [15, 0, 0, "-", "manager"]], "ape.managers.project.dependency": [[15, 4, 1, "", "GithubDependency"], [15, 4, 1, "", "LocalDependency"], [15, 4, 1, "", "NpmDependency"]], "ape.managers.project.dependency.GithubDependency": [[15, 5, 1, "", "extract_manifest"], [15, 2, 1, "", "github"], [15, 2, 1, "", "ref"], [15, 6, 1, "", "uri"], [15, 6, 1, "", "version_id"]], "ape.managers.project.dependency.LocalDependency": [[15, 5, 1, "", "extract_manifest"], [15, 6, 1, "", "uri"], [15, 2, 1, "", "version"], [15, 6, 1, "", "version_id"]], "ape.managers.project.dependency.NpmDependency": [[15, 5, 1, "", "extract_manifest"], [15, 2, 1, "", "npm"], [15, 6, 1, "", "uri"], [15, 6, 1, "", "version_from_json"], [15, 6, 1, "", "version_from_local_json"], [15, 6, 1, "", "version_id"]], "ape.managers.project.manager": [[15, 4, 1, "", "ProjectManager"]], "ape.managers.project.manager.ProjectManager": [[15, 5, 1, "", "__getattr__"], [15, 5, 1, "", "__str__"], [15, 6, 1, "", "compiler_data"], [15, 6, 1, "", "contracts"], [15, 6, 1, "", "contracts_folder"], [15, 6, 1, "", "dependencies"], [15, 5, 1, "", "extensions_with_missing_compilers"], [15, 5, 1, "", "extract_manifest"], [15, 5, 1, "", "get_compiler_data"], [15, 5, 1, "", "get_contract"], [15, 5, 1, "", "get_project"], [15, 6, 1, "", "interfaces_folder"], [15, 5, 1, "", "load_contracts"], [15, 5, 1, "", "lookup_path"], [15, 6, 1, "", "meta"], [15, 2, 1, "", "path"], [15, 6, 1, "", "project_types"], [15, 6, 1, "", "scripts_folder"], [15, 6, 1, "", "source_paths"], [15, 6, 1, "", "sources"], [15, 6, 1, "", "sources_missing"], [15, 6, 1, "", "tests_folder"], [15, 5, 1, "", "track_deployment"], [15, 6, 1, "", "tracked_deployments"]], "ape.managers.project.types": [[15, 4, 1, "", "ApeProject"], [15, 4, 1, "", "BaseProject"], [15, 4, 1, "", "BrownieProject"]], "ape.managers.project.types.BaseProject": [[15, 5, 1, "", "create_manifest"], [15, 6, 1, "", "is_valid"], [15, 5, 1, "", "process_config_file"], [15, 6, 1, "", "source_paths"]], "ape.managers.project.types.BrownieProject": [[15, 6, 1, "", "is_valid"], [15, 5, 1, "", "process_config_file"]], "ape.managers.query": [[15, 4, 1, "", "DefaultQueryProvider"], [15, 4, 1, "", "QueryManager"]], "ape.managers.query.DefaultQueryProvider": [[15, 5, 1, "", "estimate_query"], [15, 5, 1, "", "perform_query"]], "ape.managers.query.QueryManager": [[15, 6, 1, "", "engines"], [15, 5, 1, "", "query"]], "ape.plugins": [[16, 0, 0, "-", "account"], [16, 0, 0, "-", "compiler"], [16, 0, 0, "-", "config"], [16, 0, 0, "-", "converter"], [16, 0, 0, "-", "network"], [16, 0, 0, "-", "pluggy_patch"], [16, 0, 0, "-", "project"], [16, 0, 0, "-", "query"], [16, 1, 1, "", "register"]], "ape.plugins.account": [[16, 4, 1, "", "AccountPlugin"]], "ape.plugins.account.AccountPlugin": [[16, 5, 1, "", "account_types"]], "ape.plugins.compiler": [[16, 4, 1, "", "CompilerPlugin"]], "ape.plugins.compiler.CompilerPlugin": [[16, 5, 1, "", "register_compiler"]], "ape.plugins.config": [[16, 4, 1, "", "Config"]], "ape.plugins.config.Config": [[16, 5, 1, "", "config_class"]], "ape.plugins.converter": [[16, 4, 1, "", "ConversionPlugin"]], "ape.plugins.converter.ConversionPlugin": [[16, 5, 1, "", "converters"]], "ape.plugins.network": [[16, 4, 1, "", "EcosystemPlugin"], [16, 4, 1, "", "ExplorerPlugin"], [16, 4, 1, "", "NetworkPlugin"], [16, 4, 1, "", "ProviderPlugin"]], "ape.plugins.network.EcosystemPlugin": [[16, 5, 1, "", "ecosystems"]], "ape.plugins.network.ExplorerPlugin": [[16, 5, 1, "", "explorers"]], "ape.plugins.network.NetworkPlugin": [[16, 5, 1, "", "networks"]], "ape.plugins.network.ProviderPlugin": [[16, 5, 1, "", "providers"]], "ape.plugins.pluggy_patch": [[16, 4, 1, "", "PluginType"], [16, 3, 1, "", "plugin_manager"]], "ape.plugins.project": [[16, 4, 1, "", "DependencyPlugin"], [16, 4, 1, "", "ProjectPlugin"]], "ape.plugins.project.DependencyPlugin": [[16, 5, 1, "", "dependencies"]], "ape.plugins.project.ProjectPlugin": [[16, 5, 1, "", "projects"]], "ape.plugins.query": [[16, 4, 1, "", "QueryPlugin"]], "ape.plugins.query.QueryPlugin": [[16, 5, 1, "", "query_engines"]], "ape.types": [[17, 4, 1, "", "BaseContractLog"], [17, 3, 1, "", "BlockID"], [17, 4, 1, "", "ContractLog"], [17, 4, 1, "", "MockContractLog"], [17, 0, 0, "-", "address"], [17, 0, 0, "-", "coverage"]], "ape.types.BaseContractLog": [[17, 2, 1, "", "contract_address"], [17, 2, 1, "", "event_arguments"], [17, 2, 1, "", "event_name"]], "ape.types.ContractLog": [[17, 2, 1, "", "block_hash"], [17, 2, 1, "", "block_number"], [17, 2, 1, "", "log_index"], [17, 6, 1, "", "timestamp"], [17, 2, 1, "", "transaction_hash"], [17, 2, 1, "", "transaction_index"]], "ape.types.address": [[17, 3, 1, "", "AddressType"], [17, 3, 1, "", "RawAddress"]], "ape.types.coverage": [[17, 4, 1, "", "ContractCoverage"], [17, 4, 1, "", "ContractSourceCoverage"], [17, 4, 1, "", "CoverageProject"], [17, 4, 1, "", "CoverageReport"], [17, 4, 1, "", "CoverageStatement"], [17, 4, 1, "", "FunctionCoverage"]], "ape.types.coverage.ContractCoverage": [[17, 6, 1, "", "function_hits"], [17, 6, 1, "", "function_rate"], [17, 2, 1, "", "functions"], [17, 6, 1, "", "line_rate"], [17, 6, 1, "", "lines_covered"], [17, 6, 1, "", "lines_valid"], [17, 6, 1, "", "miss_count"], [17, 5, 1, "", "model_dump"], [17, 2, 1, "", "name"], [17, 6, 1, "", "statements"]], "ape.types.coverage.ContractSourceCoverage": [[17, 2, 1, "", "contracts"], [17, 6, 1, "", "function_hits"], [17, 6, 1, "", "function_rate"], [17, 5, 1, "", "include"], [17, 6, 1, "", "line_rate"], [17, 6, 1, "", "lines_covered"], [17, 6, 1, "", "lines_valid"], [17, 6, 1, "", "miss_count"], [17, 5, 1, "", "model_dump"], [17, 2, 1, "", "source_id"], [17, 6, 1, "", "statements"], [17, 6, 1, "", "total_functions"]], "ape.types.coverage.CoverageProject": [[17, 6, 1, "", "function_hits"], [17, 6, 1, "", "function_rate"], [17, 6, 1, "", "line_rate"], [17, 6, 1, "", "lines_covered"], [17, 6, 1, "", "lines_valid"], [17, 6, 1, "", "miss_count"], [17, 5, 1, "", "model_dump"], [17, 2, 1, "", "name"], [17, 2, 1, "", "sources"], [17, 6, 1, "", "statements"], [17, 6, 1, "", "total_functions"]], "ape.types.coverage.CoverageReport": [[17, 6, 1, "", "function_hits"], [17, 6, 1, "", "function_rate"], [17, 5, 1, "", "get_html"], [17, 5, 1, "", "get_xml"], [17, 6, 1, "", "line_rate"], [17, 6, 1, "", "lines_covered"], [17, 6, 1, "", "lines_valid"], [17, 6, 1, "", "miss_count"], [17, 5, 1, "", "model_dump"], [17, 2, 1, "", "projects"], [17, 2, 1, "", "source_folders"], [17, 6, 1, "", "sources"], [17, 6, 1, "", "statements"], [17, 2, 1, "", "timestamp"], [17, 6, 1, "", "total_functions"]], "ape.types.coverage.CoverageStatement": [[17, 2, 1, "", "hit_count"], [17, 2, 1, "", "location"], [17, 2, 1, "", "pcs"], [17, 2, 1, "", "tag"]], "ape.types.coverage.FunctionCoverage": [[17, 2, 1, "", "full_name"], [17, 2, 1, "", "hit_count"], [17, 6, 1, "", "line_rate"], [17, 6, 1, "", "lines_covered"], [17, 6, 1, "", "lines_valid"], [17, 6, 1, "", "miss_count"], [17, 5, 1, "", "model_dump"], [17, 2, 1, "", "name"], [17, 5, 1, "", "profile_statement"], [17, 2, 1, "", "statements"]], "ape.types.signatures": [[17, 4, 1, "", "MessageSignature"], [17, 4, 1, "", "SignableMessage"], [17, 4, 1, "", "TransactionSignature"], [17, 5, 1, "", "recover_signer"]], "ape.types.signatures.SignableMessage": [[17, 2, 1, "", "body"], [17, 2, 1, "", "header"], [17, 2, 1, "", "version"]], "ape.utils": [[18, 4, 1, "", "BaseInterface"], [18, 4, 1, "", "BaseInterfaceModel"], [18, 4, 1, "", "ExtraAttributesMixin"], [18, 4, 1, "", "ExtraModelAttributes"], [18, 4, 1, "", "GeneratedDevAccount"], [18, 4, 1, "", "GithubClient"], [18, 4, 1, "", "JoinableQueue"], [18, 4, 1, "", "Struct"], [18, 4, 1, "", "StructParser"], [18, 4, 1, "", "TraceStyles"], [18, 1, 1, "", "add_padding_to_strings"], [18, 1, 1, "", "allow_disconnected"], [18, 1, 1, "", "expand_environment_variables"], [18, 1, 1, "", "extract_nested_value"], [18, 1, 1, "", "gas_estimation_error_message"], [18, 1, 1, "", "generate_dev_accounts"], [18, 1, 1, "", "get_all_files_in_directory"], [18, 1, 1, "", "get_current_timestamp_ms"], [18, 1, 1, "", "get_package_version"], [18, 1, 1, "", "get_relative_path"], [18, 4, 1, "", "injected_before_use"], [18, 1, 1, "", "is_array"], [18, 1, 1, "", "is_evm_precompile"], [18, 1, 1, "", "is_named_tuple"], [18, 1, 1, "", "is_struct"], [18, 1, 1, "", "is_zero_hex"], [18, 1, 1, "", "load_config"], [18, 1, 1, "", "pragma_str_to_specifier_set"], [18, 1, 1, "", "raises_not_implemented"], [18, 1, 1, "", "returns_array"], [18, 1, 1, "", "run_until_complete"], [18, 4, 1, "", "singledispatchmethod"], [18, 1, 1, "", "spawn"], [18, 1, 1, "", "stream_response"], [18, 4, 1, "", "use_temp_sys_path"]], "ape.utils.BaseInterfaceModel": [[18, 2, 1, "", "model_config"], [18, 2, 1, "", "model_fields"]], "ape.utils.ExtraModelAttributes": [[18, 2, 1, "", "additional_error_message"], [18, 2, 1, "", "attributes"], [18, 5, 1, "", "get"], [18, 2, 1, "", "include_getattr"], [18, 2, 1, "", "include_getitem"], [18, 2, 1, "", "model_config"], [18, 2, 1, "", "model_fields"], [18, 2, 1, "", "name"]], "ape.utils.GeneratedDevAccount": [[18, 2, 1, "", "address"], [18, 2, 1, "", "private_key"]], "ape.utils.GithubClient": [[18, 6, 1, "", "ape_org"], [18, 6, 1, "", "available_plugins"], [18, 5, 1, "", "clone_repo"], [18, 5, 1, "", "download_package"], [18, 5, 1, "", "get_release"], [18, 5, 1, "", "get_repo"]], "ape.utils.JoinableQueue": [[18, 5, 1, "", "join"]], "ape.utils.Struct": [[18, 5, 1, "", "items"]], "ape.utils.StructParser": [[18, 5, 1, "", "decode_output"], [18, 6, 1, "", "default_name"], [18, 5, 1, "", "encode_input"]], "ape.utils.TraceStyles": [[18, 2, 1, "", "CONTRACTS"], [18, 2, 1, "", "DELEGATE"], [18, 2, 1, "", "GAS_COST"], [18, 2, 1, "", "INPUTS"], [18, 2, 1, "", "METHODS"], [18, 2, 1, "", "OUTPUTS"], [18, 2, 1, "", "VALUE"]], "ape.utils.singledispatchmethod": [[18, 5, 1, "", "register"]], "accounts-change-password": [[0, 8, 1, "cmdoption-accounts-change-password-v", "--verbosity"], [0, 8, 1, "cmdoption-accounts-change-password-v", "-v"], [0, 8, 1, "cmdoption-accounts-change-password-arg-ALIAS", "ALIAS"]], "accounts-delete": [[0, 8, 1, "cmdoption-accounts-delete-v", "--verbosity"], [0, 8, 1, "cmdoption-accounts-delete-v", "-v"], [0, 8, 1, "cmdoption-accounts-delete-arg-ALIAS", "ALIAS"]], "accounts-export": [[0, 8, 1, "cmdoption-accounts-export-v", "--verbosity"], [0, 8, 1, "cmdoption-accounts-export-v", "-v"], [0, 8, 1, "cmdoption-accounts-export-arg-ALIAS", "ALIAS"]], "accounts-generate": [[0, 8, 1, "cmdoption-accounts-generate-hd-path", "--hd-path"], [0, 8, 1, "cmdoption-accounts-generate-hide-mnemonic", "--hide-mnemonic"], [0, 8, 1, "cmdoption-accounts-generate-v", "--verbosity"], [0, 8, 1, "cmdoption-accounts-generate-word-count", "--word-count"], [0, 8, 1, "cmdoption-accounts-generate-v", "-v"], [0, 8, 1, "cmdoption-accounts-generate-arg-ALIAS", "ALIAS"]], "accounts-import": [[0, 8, 1, "cmdoption-accounts-import-hd-path", "--hd-path"], [0, 8, 1, "cmdoption-accounts-import-use-mnemonic", "--use-mnemonic"], [0, 8, 1, "cmdoption-accounts-import-v", "--verbosity"], [0, 8, 1, "cmdoption-accounts-import-v", "-v"], [0, 8, 1, "cmdoption-accounts-import-arg-ALIAS", "ALIAS"]], "accounts-list": [[0, 8, 1, "cmdoption-accounts-list-all", "--all"], [0, 8, 1, "cmdoption-accounts-list-v", "--verbosity"], [0, 8, 1, "cmdoption-accounts-list-v", "-v"]], "compile": [[1, 8, 1, "cmdoption-compile-f", "--force"], [1, 8, 1, "cmdoption-compile-include-dependencies", "--include-dependencies"], [1, 8, 1, "cmdoption-compile-s", "--size"], [1, 8, 1, "cmdoption-compile-v", "--verbosity"], [1, 8, 1, "cmdoption-compile-f", "-f"], [1, 8, 1, "cmdoption-compile-s", "-s"], [1, 8, 1, "cmdoption-compile-v", "-v"], [1, 8, 1, "cmdoption-compile-arg-FILE_PATHS", "FILE_PATHS"]], "console": [[2, 8, 1, "cmdoption-console-v", "--verbosity"], [2, 8, 1, "cmdoption-console-v", "-v"]], "init": [[3, 8, 1, "cmdoption-init-github", "--github"], [3, 8, 1, "cmdoption-init-v", "--verbosity"], [3, 8, 1, "cmdoption-init-v", "-v"]], "networks-list": [[4, 8, 1, "cmdoption-networks-list-ecosystem", "--ecosystem"], [4, 8, 1, "cmdoption-networks-list-format", "--format"], [4, 8, 1, "cmdoption-networks-list-network", "--network"], [4, 8, 1, "cmdoption-networks-list-provider", "--provider"], [4, 8, 1, "cmdoption-networks-list-v", "--verbosity"], [4, 8, 1, "cmdoption-networks-list-v", "-v"]], "networks-run": [[4, 8, 1, "cmdoption-networks-run-network", "--network"], [4, 8, 1, "cmdoption-networks-run-v", "--verbosity"], [4, 8, 1, "cmdoption-networks-run-v", "-v"]], "plugins-install": [[5, 8, 1, "cmdoption-plugins-install-U", "--upgrade"], [5, 8, 1, "cmdoption-plugins-install-v", "--verbosity"], [5, 8, 1, "cmdoption-plugins-install-y", "--yes"], [5, 8, 1, "cmdoption-plugins-install-U", "-U"], [5, 8, 1, "cmdoption-plugins-install-v", "-v"], [5, 8, 1, "cmdoption-plugins-install-y", "-y"], [5, 8, 1, "cmdoption-plugins-install-arg-PLUGIN-NAMES", "PLUGIN-NAMES"]], "plugins-list": [[5, 8, 1, "cmdoption-plugins-list-a", "--all"], [5, 8, 1, "cmdoption-plugins-list-v", "--verbosity"], [5, 8, 1, "cmdoption-plugins-list-a", "-a"], [5, 8, 1, "cmdoption-plugins-list-v", "-v"]], "plugins-uninstall": [[5, 8, 1, "cmdoption-plugins-uninstall-v", "--verbosity"], [5, 8, 1, "cmdoption-plugins-uninstall-y", "--yes"], [5, 8, 1, "cmdoption-plugins-uninstall-v", "-v"], [5, 8, 1, "cmdoption-plugins-uninstall-y", "-y"], [5, 8, 1, "cmdoption-plugins-uninstall-arg-PLUGIN-NAMES", "PLUGIN-NAMES"]], "pm-compile": [[6, 8, 1, "cmdoption-pm-compile-f", "--force"], [6, 8, 1, "cmdoption-pm-compile-v", "--verbosity"], [6, 8, 1, "cmdoption-pm-compile-version", "--version"], [6, 8, 1, "cmdoption-pm-compile-f", "-f"], [6, 8, 1, "cmdoption-pm-compile-v", "-v"], [6, 8, 1, "cmdoption-pm-compile-arg-NAME", "NAME"]], "pm-install": [[6, 8, 1, "cmdoption-pm-install-f", "--force"], [6, 8, 1, "cmdoption-pm-install-name", "--name"], [6, 8, 1, "cmdoption-pm-install-ref", "--ref"], [6, 8, 1, "cmdoption-pm-install-v", "--verbosity"], [6, 8, 1, "cmdoption-pm-install-version", "--version"], [6, 8, 1, "cmdoption-pm-install-f", "-f"], [6, 8, 1, "cmdoption-pm-install-v", "-v"], [6, 8, 1, "cmdoption-pm-install-arg-PACKAGE", "PACKAGE"]], "pm-list": [[6, 8, 1, "cmdoption-pm-list-all", "--all"], [6, 8, 1, "cmdoption-pm-list-v", "--verbosity"], [6, 8, 1, "cmdoption-pm-list-v", "-v"]], "pm-remove": [[6, 8, 1, "cmdoption-pm-remove-v", "--verbosity"], [6, 8, 1, "cmdoption-pm-remove-y", "--yes"], [6, 8, 1, "cmdoption-pm-remove-v", "-v"], [6, 8, 1, "cmdoption-pm-remove-y", "-y"], [6, 8, 1, "cmdoption-pm-remove-arg-PACKAGE", "PACKAGE"], [6, 8, 1, "cmdoption-pm-remove-arg-VERSIONS", "VERSIONS"]], "run-update_rpc": [[7, 8, 1, "cmdoption-run-update_rpc-v", "--verbosity"], [7, 8, 1, "cmdoption-run-update_rpc-v", "-v"]], "run": [[7, 8, 1, "cmdoption-run-I", "--interactive"], [7, 8, 1, "cmdoption-run-I", "-I"]], "test": [[8, 8, 1, "cmdoption-test-v", "--verbosity"], [8, 8, 1, "cmdoption-test-w", "--watch"], [8, 8, 1, "cmdoption-test-watch-delay", "--watch-delay"], [8, 8, 1, "cmdoption-test-watch-folders", "--watch-folders"], [8, 8, 1, "cmdoption-test-v", "-v"], [8, 8, 1, "cmdoption-test-w", "-w"], [8, 8, 1, "cmdoption-test-arg-PYTEST_ARGS", "PYTEST_ARGS"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:attribute", "3": "py:data", "4": "py:class", "5": "py:method", "6": "py:property", "7": "py:exception", "8": "std:cmdoption"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "data", "Python data"], "4": ["py", "class", "Python class"], "5": ["py", "method", "Python method"], "6": ["py", "property", "Python property"], "7": ["py", "exception", "Python exception"], "8": ["std", "cmdoption", "program option"]}, "titleterms": {"account": [0, 11, 15, 16, 19, 20, 25, 34, 36], "chang": 0, "password": 0, "delet": 0, "export": 0, "gener": 0, "import": [0, 27], "list": [0, 4, 5, 6, 26], "compil": [1, 6, 11, 15, 16, 21, 26, 31, 33, 34], "consol": [2, 23, 34, 37], "init": [3, 23], "network": [4, 11, 15, 16, 19, 20, 22, 30, 34, 35, 36], "run": [4, 7, 30], "plugin": [5, 16, 21, 22, 27, 28, 31, 34], "instal": [5, 6, 26, 28, 34], "uninstal": 5, "pm": 6, "remov": [6, 26], "update_rpc": 7, "test": [8, 19, 22, 31, 34, 36], "ap": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 22, 23, 31, 34, 36, 37], "doc": 9, "user": 9, "guid": 9, "cli": [9, 12, 20, 26, 27, 29, 30, 35], "refer": 9, "python": [9, 29], "api": [11, 27], "address": [11, 17, 24], "config": [11, 15, 16, 26, 30], "convert": [11, 15, 16], "explor": [11, 30, 33], "project": [11, 15, 16, 24, 27, 31, 34, 36], "provid": [11, 30, 36], "transact": [11, 24, 25, 30, 36, 37], "queri": [11, 15, 16, 25], "argument": 12, "choic": 12, "command": [12, 23, 36], "option": 12, "paramet": 12, "type": [12, 17, 26, 28, 30], "util": [12, 18], "contract": [13, 22, 24, 25, 26, 31, 32, 36], "except": 14, "manag": [15, 26, 30], "chain": [15, 36], "base": 16, "signatur": [17, 19], "coverag": [17, 36], "miscellan": 17, "us": [19, 25, 27], "outsid": 19, "creat": 19, "new": 19, "default": [19, 22, 24], "sender": 19, "support": [19, 36], "live": [19, 30], "keyfil": 19, "sign": 19, "messag": 19, "eip": 19, "712": 19, "verifi": 19, "autom": 19, "hardwar": 19, "wallet": 19, "context": [20, 30], "decor": 20, "tool": 20, "The": 21, "json": 21, "other": 21, "ignor": 21, "file": [21, 26], "depend": [21, 22, 26, 31], "set": 21, "sourc": 21, "code": 21, "configur": [22, 23, 30], "folder": [22, 26], "ecosystem": 22, "deploy": [22, 24, 33, 37], "geth": 22, "namespac": 23, "extra": 23, "function": [23, 36], "global": 23, "magic": 23, "bal": 23, "from": [24, 27, 37], "deploi": [24, 31], "script": [24, 31, 34, 35], "publish": [24, 33], "ani": 24, "abi": 24, "previou": 24, "interact": [24, 30], "call": 24, "fallback": 24, "direct": 24, "privat": 24, "decod": 24, "encod": 24, "input": 24, "interfac": 24, "introspect": 24, "multi": [24, 35, 36], "data": 25, "get": 25, "block": [25, 30], "event": 25, "cach": 25, "github": 26, "local": [26, 30], "npm": 26, "packag": 26, "misc": 26, "custom": [26, 30, 36], "exclus": 26, "overrid": 26, "solid": 26, "remap": 26, "develop": [27, 31], "initi": 27, "implement": 27, "class": 27, "regist": 27, "log": [27, 29, 34, 37], "logger": 27, "modul": 27, "ape_cli_context": 27, "core": 28, "select": 30, "l2": 30, "connect": 30, "By": 30, "rpc": 30, "url": 30, "time": 30, "more": 30, "process": 30, "fork": 30, "ad": 31, "proxi": 32, "track": 33, "overview": 34, "document": 34, "prerequisit": 34, "consider": 34, "via": 34, "pipx": 34, "pip": 34, "docker": 34, "plai": 34, "modular": 34, "system": 34, "main": 35, "method": 35, "pytest": 36, "structur": 36, "pattern": 36, "fixtur": 36, "advanc": 36, "tip": 36, "failur": 36, "expected_messag": 36, "dev_messag": 36, "caveat": 36, "languag": 36, "inlin": 36, "non": 36, "reentrant": 36, "error": 36, "ga": [36, 37], "report": [36, 37], "iter": 36, "make": 37, "dynam": 37, "fee": 37, "static": 37, "accept": 37, "timeout": 37, "trace": 37, "estim": 37, "cost": 37}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"accounts": [[0, "accounts"]], "change-password": [[0, "accounts-change-password"]], "delete": [[0, "accounts-delete"]], "export": [[0, "accounts-export"]], "generate": [[0, "accounts-generate"]], "import": [[0, "accounts-import"]], "list": [[0, "accounts-list"], [4, "networks-list"], [5, "plugins-list"], [6, "pm-list"], [26, "list"]], "compile": [[1, "compile"], [6, "pm-compile"], [26, "compile"]], "console": [[2, "console"], [2, "console"]], "init": [[3, "init"]], "networks": [[4, "networks"]], "run": [[4, "networks-run"], [7, "run"], [7, "run"]], "plugins": [[5, "plugins"]], "install": [[5, "plugins-install"], [6, "pm-install"], [26, "install"]], "uninstall": [[5, "plugins-uninstall"]], "pm": [[6, "pm"]], "remove": [[6, "pm-remove"], [26, "remove"]], "update_rpc": [[7, "run-update-rpc"]], "test": [[8, "test"]], "Ape-Docs": [[9, "ape-docs"]], "User Guides": [[9, null]], "CLI Reference": [[9, null]], "Python Reference": [[9, null]], "ape": [[10, "module-ape"]], "ape.api": [[11, "ape-api"]], "Accounts": [[11, "module-ape.api.accounts"], [15, "module-ape.managers.accounts"], [16, "module-ape.plugins.account"], [19, "accounts"], [34, "accounts"]], "Address": [[11, "module-ape.api.address"], [17, "module-ape.types.address"]], "Compiler": [[11, "module-ape.api.compiler"], [16, "module-ape.plugins.compiler"]], "Config": [[11, "module-ape.api.config"], [15, "module-ape.managers.config"], [16, "module-ape.plugins.config"]], "Convert": [[11, "module-ape.api.convert"]], "Explorers": [[11, "module-ape.api.explorers"]], "Networks": [[11, "module-ape.api.networks"], [15, "module-ape.managers.networks"], [22, "networks"], [30, "networks"], [34, "networks"]], "Projects": [[11, "module-ape.api.projects"], [34, "projects"]], "Providers": [[11, "module-ape.api.providers"]], "Transactions": [[11, "transactions"], [24, "transactions"]], "Query": [[11, "module-ape.api.query"], [15, "module-ape.managers.query"], [16, "module-ape.plugins.query"]], "ape.cli": [[12, "ape-cli"]], "Arguments": [[12, "module-ape.cli.arguments"]], "Choices": [[12, "module-ape.cli.choices"]], "Commands": [[12, "module-ape.cli.commands"]], "Options": [[12, "module-ape.cli.options"]], "Parameter Types": [[12, "module-ape.cli.paramtype"]], "Utilities": [[12, "module-ape.cli.utils"]], "ape.contracts": [[13, "ape-contracts"]], "ape.exceptions": [[14, "module-ape.exceptions"]], "ape.managers": [[15, "ape-managers"]], "Compilers": [[15, "module-ape.managers.compilers"]], "Chain": [[15, "chain"]], "Converters": [[15, "module-ape.managers.converters"]], "Project": [[15, "module-ape.managers.project.manager"], [16, "module-ape.plugins.project"]], "ape.plugins": [[16, "module-ape.plugins"]], "Base": [[16, "module-ape.plugins.pluggy_patch"]], "Converter": [[16, "module-ape.plugins.converter"]], "Network": [[16, "module-ape.plugins.network"]], "ape.types": [[17, "ape-types"]], "Signatures": [[17, "signatures"]], "Coverage": [[17, "module-ape.types.coverage"]], "Miscellaneous": [[17, "module-ape.types"]], "ape.utils": [[18, "module-ape.utils"]], "Test Accounts": [[19, "test-accounts"]], "Use test accounts in tests": [[19, "use-test-accounts-in-tests"]], "Use test accounts outside of tests": [[19, "use-test-accounts-outside-of-tests"]], "Creating new test accounts": [[19, "creating-new-test-accounts"]], "Default Sender Support": [[19, "default-sender-support"], [19, "id1"]], "Live Network Accounts": [[19, "live-network-accounts"]], "Keyfile Accounts": [[19, "keyfile-accounts"]], "Signing Messages": [[19, "signing-messages"]], "EIP-712": [[19, "eip-712"]], "Verifying Signature": [[19, "verifying-signature"]], "Automation": [[19, "automation"]], "Hardware Wallets": [[19, "hardware-wallets"]], "CLIs": [[20, "clis"]], "Ape Context Decorator": [[20, "ape-context-decorator"]], "Network Tools": [[20, "network-tools"]], "Account Tools": [[20, "account-tools"]], "Compile": [[21, "compile"]], "The JSON Compiler": [[21, "the-json-compiler"]], "Other Compiler Plugins": [[21, "other-compiler-plugins"]], "Ignore Files": [[21, "ignore-files"]], "Dependencies": [[21, "dependencies"], [22, "dependencies"], [26, "dependencies"], [31, "dependencies"]], "Settings": [[21, "settings"]], "Compile Source Code": [[21, "compile-source-code"]], "Configure Ape": [[22, "configure-ape"]], "Contracts Folder": [[22, "contracts-folder"]], "Default Ecosystem": [[22, "default-ecosystem"]], "Deployments": [[22, "deployments"]], "Geth": [[22, "geth"]], "Plugins": [[22, "plugins"], [28, "plugins"], [34, "plugins"]], "Testing": [[22, "testing"], [31, "testing"], [34, "testing"], [36, "testing"]], "Ape Console": [[23, "ape-console"]], "Ape Namespace": [[23, "ape-namespace"]], "Namespace Extras": [[23, "namespace-extras"]], "Init Function": [[23, "init-function"]], "Global Extras": [[23, "global-extras"]], "Configure": [[23, "configure"]], "Magic Commands": [[23, "magic-commands"]], "%ape": [[23, "ape"]], "%bal": [[23, "bal"]], "Contracts": [[24, "contracts"]], "From Deploy": [[24, "from-deploy"]], "Deploy Scripts": [[24, "deploy-scripts"]], "Publishing": [[24, "publishing"], [33, "publishing"]], "From Project Contract Address": [[24, "from-project-contract-address"]], "From Any Address": [[24, "from-any-address"]], "From ABIs": [[24, "from-abis"]], "From Previous Deployment": [[24, "from-previous-deployment"]], "Contract Interaction": [[24, "contract-interaction"]], "Calls": [[24, "calls"]], "Calling Transactions and Transacting Calls": [[24, "calling-transactions-and-transacting-calls"]], "Default, Fallback, and Direct Calls": [[24, "default-fallback-and-direct-calls"]], "Private Transactions": [[24, "private-transactions"]], "Decoding and Encoding Inputs": [[24, "decoding-and-encoding-inputs"]], "Contract Interface Introspection": [[24, "contract-interface-introspection"]], "Multi-Call and Multi-Transaction": [[24, "multi-call-and-multi-transaction"]], "Querying Data": [[25, "querying-data"]], "Getting Block Data": [[25, "getting-block-data"]], "Getting Account Transaction Data": [[25, "getting-account-transaction-data"]], "Getting Contract Event Data": [[25, "getting-contract-event-data"]], "Using the Cache": [[25, "using-the-cache"]], "Types of Dependencies": [[26, "types-of-dependencies"]], "GitHub": [[26, "github"]], "Local": [[26, "local"]], "NPM": [[26, "npm"]], "Package Management CLI": [[26, "package-management-cli"]], "Misc": [[26, "misc"]], "Custom Contracts Folder": [[26, "custom-contracts-folder"]], "File Exclusions": [[26, "file-exclusions"]], "Config Override": [[26, "config-override"]], "Solidity Remappings": [[26, "solidity-remappings"]], "Compiling Dependencies": [[26, "compiling-dependencies"]], "Developing Plugins": [[27, "developing-plugins"]], "Initialize a Plugin Project": [[27, "initialize-a-plugin-project"]], "Implementing API Classes": [[27, "implementing-api-classes"]], "Registering API Classes": [[27, "registering-api-classes"]], "CLI Plugins": [[27, "cli-plugins"]], "Using Plugins": [[27, "using-plugins"]], "Logging": [[27, "logging"], [29, "logging"], [34, "logging"]], "Import the logger from the logging module": [[27, "import-the-logger-from-the-logging-module"]], "Use the logger from the @ape_cli_context": [[27, "use-the-logger-from-the-ape-cli-context"]], "Core Plugins": [[28, "core-plugins"]], "Installing Plugins": [[28, "installing-plugins"]], "Plugin Types": [[28, "plugin-types"]], "CLI Logging": [[29, "cli-logging"]], "Python Logging": [[29, "python-logging"]], "Selecting a Network": [[30, "selecting-a-network"]], "L2 Networks": [[30, "l2-networks"]], "Custom Network Connection": [[30, "custom-network-connection"]], "Custom Networks By Config": [[30, "custom-networks-by-config"]], "RPC URL": [[30, "rpc-url"]], "Explorer URL": [[30, "explorer-url"]], "Block time, transaction type, and more config": [[30, "block-time-transaction-type-and-more-config"]], "Custom Networks by CLI": [[30, "custom-networks-by-cli"]], "Configuring Networks": [[30, "configuring-networks"]], "Local Network": [[30, "local-network"]], "Live Networks": [[30, "live-networks"]], "Network Config": [[30, "network-config"]], "Running a Network Process": [[30, "running-a-network-process"]], "Provider Interaction": [[30, "provider-interaction"]], "Provider Context Manager": [[30, "provider-context-manager"]], "Forked Context": [[30, "forked-context"]], "Developing Projects with Ape": [[31, "developing-projects-with-ape"]], "Adding Plugins": [[31, "adding-plugins"]], "Compiling Contracts": [[31, "compiling-contracts"]], "Deploying Contracts": [[31, "deploying-contracts"]], "Scripts": [[31, "scripts"], [34, "scripts"]], "Proxy Contracts": [[32, "proxy-contracts"]], "Compilation": [[33, "compilation"]], "Tracking Deployments": [[33, "tracking-deployments"]], "Publishing to Explorer": [[33, "publishing-to-explorer"]], "Overview": [[34, "overview"]], "Documentation": [[34, "documentation"]], "Prerequisite": [[34, "prerequisite"]], "Installation": [[34, "installation"]], "Considerations for Installing:": [[34, "considerations-for-installing"]], "via pipx or pip": [[34, "via-pipx-or-pip"]], "via docker": [[34, "via-docker"]], "Playing with Ape": [[34, "playing-with-ape"]], "Ape Modular Plugin System:": [[34, "ape-modular-plugin-system"]], "Compiling": [[34, "compiling"]], "Console": [[34, "console"]], "Scripting": [[35, "scripting"]], "CLI Scripts": [[35, "cli-scripts"]], "Multi-network Scripting": [[35, "multi-network-scripting"]], "Main Method Scripts": [[35, "main-method-scripts"]], "Pytest": [[36, "pytest"]], "Test Structure": [[36, "test-structure"]], "Test Pattern": [[36, "test-pattern"]], "Fixtures": [[36, "fixtures"]], "accounts fixture": [[36, "accounts-fixture"]], "chain fixture": [[36, "chain-fixture"]], "networks fixture": [[36, "networks-fixture"]], "project fixture": [[36, "project-fixture"]], "Contract fixture": [[36, "contract-fixture"]], "Ape testing commands": [[36, "ape-testing-commands"]], "Test Providers": [[36, "test-providers"]], "Advanced Testing Tips": [[36, "advanced-testing-tips"]], "Testing Transaction Failures": [[36, "testing-transaction-failures"]], "expected_message": [[36, "expected-message"]], "dev_message": [[36, "dev-message"]], "Caveats": [[36, "caveats"]], "Language Support": [[36, "language-support"]], "Inlining": [[36, "inlining"]], "Non-reentrant Functions": [[36, "non-reentrant-functions"]], "Custom Errors": [[36, "custom-errors"]], "Multi-chain Testing": [[36, "multi-chain-testing"]], "Gas Reporting": [[36, "gas-reporting"]], "Iterative Testing": [[36, "iterative-testing"]], "Contract Coverage": [[36, "contract-coverage"]], "Making Transactions": [[37, "making-transactions"]], "Deployment": [[37, "deployment"]], "Deployment from Ape Console": [[37, "deployment-from-ape-console"]], "Dynamic-Fee Transactions": [[37, "dynamic-fee-transactions"]], "Static-Fee Transactions": [[37, "static-fee-transactions"]], "Transaction Logs": [[37, "transaction-logs"]], "Transaction Acceptance Timeout": [[37, "transaction-acceptance-timeout"]], "Traces": [[37, "traces"]], "Gas Reports": [[37, "gas-reports"]], "Estimate Gas Cost": [[37, "estimate-gas-cost"]]}, "indexentries": {"--all": [[0, "cmdoption-accounts-list-all"], [5, "cmdoption-plugins-list-a"], [6, "cmdoption-pm-list-all"]], "--hd-path": [[0, "cmdoption-accounts-generate-hd-path"], [0, "cmdoption-accounts-import-hd-path"]], "--hide-mnemonic": [[0, "cmdoption-accounts-generate-hide-mnemonic"]], "--use-mnemonic": [[0, "cmdoption-accounts-import-use-mnemonic"]], "--verbosity": [[0, "cmdoption-accounts-change-password-v"], [0, "cmdoption-accounts-delete-v"], [0, "cmdoption-accounts-export-v"], [0, "cmdoption-accounts-generate-v"], [0, "cmdoption-accounts-import-v"], [0, "cmdoption-accounts-list-v"], [1, "cmdoption-compile-v"], [2, "cmdoption-console-v"], [3, "cmdoption-init-v"], [4, "cmdoption-networks-list-v"], [4, "cmdoption-networks-run-v"], [5, "cmdoption-plugins-install-v"], [5, "cmdoption-plugins-list-v"], [5, "cmdoption-plugins-uninstall-v"], [6, "cmdoption-pm-compile-v"], [6, "cmdoption-pm-install-v"], [6, "cmdoption-pm-list-v"], [6, "cmdoption-pm-remove-v"], [7, "cmdoption-run-update_rpc-v"], [8, "cmdoption-test-v"]], "--word-count": [[0, "cmdoption-accounts-generate-word-count"]], "-v": [[0, "cmdoption-accounts-change-password-v"], [0, "cmdoption-accounts-delete-v"], [0, "cmdoption-accounts-export-v"], [0, "cmdoption-accounts-generate-v"], [0, "cmdoption-accounts-import-v"], [0, "cmdoption-accounts-list-v"], [1, "cmdoption-compile-v"], [2, "cmdoption-console-v"], [3, "cmdoption-init-v"], [4, "cmdoption-networks-list-v"], [4, "cmdoption-networks-run-v"], [5, "cmdoption-plugins-install-v"], [5, "cmdoption-plugins-list-v"], [5, "cmdoption-plugins-uninstall-v"], [6, "cmdoption-pm-compile-v"], [6, "cmdoption-pm-install-v"], [6, "cmdoption-pm-list-v"], [6, "cmdoption-pm-remove-v"], [7, "cmdoption-run-update_rpc-v"], [8, "cmdoption-test-v"]], "alias": [[0, "cmdoption-accounts-change-password-arg-ALIAS"], [0, "cmdoption-accounts-delete-arg-ALIAS"], [0, "cmdoption-accounts-export-arg-ALIAS"], [0, "cmdoption-accounts-generate-arg-ALIAS"], [0, "cmdoption-accounts-import-arg-ALIAS"]], "accounts-change-password command line option": [[0, "cmdoption-accounts-change-password-arg-ALIAS"], [0, "cmdoption-accounts-change-password-v"]], "accounts-delete command line option": [[0, "cmdoption-accounts-delete-arg-ALIAS"], [0, "cmdoption-accounts-delete-v"]], "accounts-export command line option": [[0, "cmdoption-accounts-export-arg-ALIAS"], [0, "cmdoption-accounts-export-v"]], "accounts-generate command line option": [[0, "cmdoption-accounts-generate-arg-ALIAS"], [0, "cmdoption-accounts-generate-hd-path"], [0, "cmdoption-accounts-generate-hide-mnemonic"], [0, "cmdoption-accounts-generate-v"], [0, "cmdoption-accounts-generate-word-count"]], "accounts-import command line option": [[0, "cmdoption-accounts-import-arg-ALIAS"], [0, "cmdoption-accounts-import-hd-path"], [0, "cmdoption-accounts-import-use-mnemonic"], [0, "cmdoption-accounts-import-v"]], "accounts-list command line option": [[0, "cmdoption-accounts-list-all"], [0, "cmdoption-accounts-list-v"]], "--force": [[1, "cmdoption-compile-f"], [6, "cmdoption-pm-compile-f"], [6, "cmdoption-pm-install-f"]], "--include-dependencies": [[1, "cmdoption-compile-include-dependencies"]], "--size": [[1, "cmdoption-compile-s"]], "-f": [[1, "cmdoption-compile-f"], [6, "cmdoption-pm-compile-f"], [6, "cmdoption-pm-install-f"]], "-s": [[1, "cmdoption-compile-s"]], "file_paths": [[1, "cmdoption-compile-arg-FILE_PATHS"]], "compile command line option": [[1, "cmdoption-compile-arg-FILE_PATHS"], [1, "cmdoption-compile-f"], [1, "cmdoption-compile-include-dependencies"], [1, "cmdoption-compile-s"], [1, "cmdoption-compile-v"]], "console command line option": [[2, "cmdoption-console-v"]], "--github": [[3, "cmdoption-init-github"]], "init command line option": [[3, "cmdoption-init-github"], [3, "cmdoption-init-v"]], "--ecosystem": [[4, "cmdoption-networks-list-ecosystem"]], "--format": [[4, "cmdoption-networks-list-format"]], "--network": [[4, "cmdoption-networks-list-network"], [4, "cmdoption-networks-run-network"]], "--provider": [[4, "cmdoption-networks-list-provider"]], "networks-list command line option": [[4, "cmdoption-networks-list-ecosystem"], [4, "cmdoption-networks-list-format"], [4, "cmdoption-networks-list-network"], [4, "cmdoption-networks-list-provider"], [4, "cmdoption-networks-list-v"]], "networks-run command line option": [[4, "cmdoption-networks-run-network"], [4, "cmdoption-networks-run-v"]], "--upgrade": [[5, "cmdoption-plugins-install-U"]], "--yes": [[5, "cmdoption-plugins-install-y"], [5, "cmdoption-plugins-uninstall-y"], [6, "cmdoption-pm-remove-y"]], "-u": [[5, "cmdoption-plugins-install-U"]], "-a": [[5, "cmdoption-plugins-list-a"]], "-y": [[5, "cmdoption-plugins-install-y"], [5, "cmdoption-plugins-uninstall-y"], [6, "cmdoption-pm-remove-y"]], "plugin-names": [[5, "cmdoption-plugins-install-arg-PLUGIN-NAMES"], [5, "cmdoption-plugins-uninstall-arg-PLUGIN-NAMES"]], "plugins-install command line option": [[5, "cmdoption-plugins-install-U"], [5, "cmdoption-plugins-install-arg-PLUGIN-NAMES"], [5, "cmdoption-plugins-install-v"], [5, "cmdoption-plugins-install-y"]], "plugins-list command line option": [[5, "cmdoption-plugins-list-a"], [5, "cmdoption-plugins-list-v"]], "plugins-uninstall command line option": [[5, "cmdoption-plugins-uninstall-arg-PLUGIN-NAMES"], [5, "cmdoption-plugins-uninstall-v"], [5, "cmdoption-plugins-uninstall-y"]], "--name": [[6, "cmdoption-pm-install-name"]], "--ref": [[6, "cmdoption-pm-install-ref"]], "--version": [[6, "cmdoption-pm-compile-version"], [6, "cmdoption-pm-install-version"]], "name": [[6, "cmdoption-pm-compile-arg-NAME"]], "package": [[6, "cmdoption-pm-install-arg-PACKAGE"], [6, "cmdoption-pm-remove-arg-PACKAGE"]], "versions": [[6, "cmdoption-pm-remove-arg-VERSIONS"]], "pm-compile command line option": [[6, "cmdoption-pm-compile-arg-NAME"], [6, "cmdoption-pm-compile-f"], [6, "cmdoption-pm-compile-v"], [6, "cmdoption-pm-compile-version"]], "pm-install command line option": [[6, "cmdoption-pm-install-arg-PACKAGE"], [6, "cmdoption-pm-install-f"], [6, "cmdoption-pm-install-name"], [6, "cmdoption-pm-install-ref"], [6, "cmdoption-pm-install-v"], [6, "cmdoption-pm-install-version"]], "pm-list command line option": [[6, "cmdoption-pm-list-all"], [6, "cmdoption-pm-list-v"]], "pm-remove command line option": [[6, "cmdoption-pm-remove-arg-PACKAGE"], [6, "cmdoption-pm-remove-arg-VERSIONS"], [6, "cmdoption-pm-remove-v"], [6, "cmdoption-pm-remove-y"]], "--interactive": [[7, "cmdoption-run-I"]], "-i": [[7, "cmdoption-run-I"]], "run command line option": [[7, "cmdoption-run-I"]], "run-update_rpc command line option": [[7, "cmdoption-run-update_rpc-v"]], "--watch": [[8, "cmdoption-test-w"]], "--watch-delay": [[8, "cmdoption-test-watch-delay"]], "--watch-folders": [[8, "cmdoption-test-watch-folders"]], "-w": [[8, "cmdoption-test-w"]], "pytest_args": [[8, "cmdoption-test-arg-PYTEST_ARGS"]], "test command line option": [[8, "cmdoption-test-arg-PYTEST_ARGS"], [8, "cmdoption-test-v"], [8, "cmdoption-test-w"], [8, "cmdoption-test-watch-delay"], [8, "cmdoption-test-watch-folders"]], "contract() (in module ape)": [[10, "ape.Contract"]], "project (in module ape)": [[10, "ape.Project"], [10, "ape.project"]], "accounts (in module ape)": [[10, "ape.accounts"]], "ape": [[10, "module-ape"]], "chain (in module ape)": [[10, "ape.chain"]], "compilers (in module ape)": [[10, "ape.compilers"]], "config (in module ape)": [[10, "ape.config"]], "convert() (in module ape)": [[10, "ape.convert"]], "module": [[10, "module-ape"], [11, "module-ape.api.accounts"], [11, "module-ape.api.address"], [11, "module-ape.api.compiler"], [11, "module-ape.api.config"], [11, "module-ape.api.convert"], [11, "module-ape.api.explorers"], [11, "module-ape.api.networks"], [11, "module-ape.api.projects"], [11, "module-ape.api.providers"], [11, "module-ape.api.query"], [12, "module-ape.cli.arguments"], [12, "module-ape.cli.choices"], [12, "module-ape.cli.commands"], [12, "module-ape.cli.options"], [12, "module-ape.cli.paramtype"], [12, "module-ape.cli.utils"], [14, "module-ape.exceptions"], [15, "module-ape.managers.accounts"], [15, "module-ape.managers.compilers"], [15, "module-ape.managers.config"], [15, "module-ape.managers.converters"], [15, "module-ape.managers.networks"], [15, "module-ape.managers.project.dependency"], [15, "module-ape.managers.project.manager"], [15, "module-ape.managers.query"], [16, "module-ape.plugins"], [16, "module-ape.plugins.account"], [16, "module-ape.plugins.compiler"], [16, "module-ape.plugins.config"], [16, "module-ape.plugins.converter"], [16, "module-ape.plugins.network"], [16, "module-ape.plugins.pluggy_patch"], [16, "module-ape.plugins.project"], [16, "module-ape.plugins.query"], [17, "module-ape.types"], [17, "module-ape.types.address"], [17, "module-ape.types.coverage"], [18, "module-ape.utils"]], "networks (in module ape)": [[10, "ape.networks"]], "reverts (in module ape)": [[10, "ape.reverts"]], "accountapi (class in ape.api.accounts)": [[11, "ape.api.accounts.AccountAPI"]], "accountcontainerapi (class in ape.api.accounts)": [[11, "ape.api.accounts.AccountContainerAPI"]], "accounttransactionquery (class in ape.api.query)": [[11, "ape.api.query.AccountTransactionQuery"]], "address (class in ape.api.address)": [[11, "ape.api.address.Address"]], "baseaddress (class in ape.api.address)": [[11, "ape.api.address.BaseAddress"]], "blockapi (class in ape.api.providers)": [[11, "ape.api.providers.BlockAPI"]], "blockquery (class in ape.api.query)": [[11, "ape.api.query.BlockQuery"]], "blocktransactionquery (class in ape.api.query)": [[11, "ape.api.query.BlockTransactionQuery"]], "compilerapi (class in ape.api.compiler)": [[11, "ape.api.compiler.CompilerAPI"]], "configenum (class in ape.api.config)": [[11, "ape.api.config.ConfigEnum"]], "contractcreationquery (class in ape.api.query)": [[11, "ape.api.query.ContractCreationQuery"]], "contracteventquery (class in ape.api.query)": [[11, "ape.api.query.ContractEventQuery"]], "contractmethodquery (class in ape.api.query)": [[11, "ape.api.query.ContractMethodQuery"]], "converterapi (class in ape.api.convert)": [[11, "ape.api.convert.ConverterAPI"]], "dependencyapi (class in ape.api.projects)": [[11, "ape.api.projects.DependencyAPI"]], "ecosystemapi (class in ape.api.networks)": [[11, "ape.api.networks.EcosystemAPI"]], "explorerapi (class in ape.api.explorers)": [[11, "ape.api.explorers.ExplorerAPI"]], "forkednetworkapi (class in ape.api.networks)": [[11, "ape.api.networks.ForkedNetworkAPI"]], "genericconfig (class in ape.api.config)": [[11, "ape.api.config.GenericConfig"]], "impersonatedaccount (class in ape.api.accounts)": [[11, "ape.api.accounts.ImpersonatedAccount"]], "networkapi (class in ape.api.networks)": [[11, "ape.api.networks.NetworkAPI"]], "pluginconfig (class in ape.api.config)": [[11, "ape.api.config.PluginConfig"]], "projectapi (class in ape.api.projects)": [[11, "ape.api.projects.ProjectAPI"]], "providerapi (class in ape.api.providers)": [[11, "ape.api.providers.ProviderAPI"]], "providercontextmanager (class in ape.api.networks)": [[11, "ape.api.networks.ProviderContextManager"]], "proxyinfoapi (class in ape.api.networks)": [[11, "ape.api.networks.ProxyInfoAPI"]], "queryapi (class in ape.api.query)": [[11, "ape.api.query.QueryAPI"]], "receiptapi (class in ape.api.transactions)": [[11, "ape.api.transactions.ReceiptAPI"]], "subprocessprovider (class in ape.api.providers)": [[11, "ape.api.providers.SubprocessProvider"]], "testaccountapi (class in ape.api.accounts)": [[11, "ape.api.accounts.TestAccountAPI"]], "testaccountcontainerapi (class in ape.api.accounts)": [[11, "ape.api.accounts.TestAccountContainerAPI"]], "testproviderapi (class in ape.api.providers)": [[11, "ape.api.providers.TestProviderAPI"]], "transactionapi (class in ape.api.transactions)": [[11, "ape.api.transactions.TransactionAPI"]], "upstreamprovider (class in ape.api.providers)": [[11, "ape.api.providers.UpstreamProvider"]], "__ape_extra_attributes__() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.__ape_extra_attributes__"]], "__contains__() (ape.api.accounts.accountcontainerapi method)": [[11, "ape.api.accounts.AccountContainerAPI.__contains__"]], "__delitem__() (ape.api.accounts.accountcontainerapi method)": [[11, "ape.api.accounts.AccountContainerAPI.__delitem__"]], "__dir__() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.__dir__"]], "__getitem__() (ape.api.accounts.accountcontainerapi method)": [[11, "ape.api.accounts.AccountContainerAPI.__getitem__"]], "__len__() (ape.api.accounts.accountcontainerapi method)": [[11, "ape.api.accounts.AccountContainerAPI.__len__"]], "accounts (ape.api.accounts.accountcontainerapi property)": [[11, "ape.api.accounts.AccountContainerAPI.accounts"]], "add_compiler_data() (ape.api.projects.projectapi method)": [[11, "ape.api.projects.ProjectAPI.add_compiler_data"]], "add_network() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.add_network"]], "address (ape.api.accounts.impersonatedaccount property)": [[11, "ape.api.accounts.ImpersonatedAccount.address"]], "address (ape.api.address.address property)": [[11, "ape.api.address.Address.address"]], "address (ape.api.address.baseaddress property)": [[11, "ape.api.address.BaseAddress.address"]], "alias (ape.api.accounts.accountapi property)": [[11, "ape.api.accounts.AccountAPI.alias"]], "aliases (ape.api.accounts.accountcontainerapi property)": [[11, "ape.api.accounts.AccountContainerAPI.aliases"]], "ape.api.accounts": [[11, "module-ape.api.accounts"]], "ape.api.address": [[11, "module-ape.api.address"]], "ape.api.compiler": [[11, "module-ape.api.compiler"]], "ape.api.config": [[11, "module-ape.api.config"]], "ape.api.convert": [[11, "module-ape.api.convert"]], "ape.api.explorers": [[11, "module-ape.api.explorers"]], "ape.api.networks": [[11, "module-ape.api.networks"]], "ape.api.projects": [[11, "module-ape.api.projects"]], "ape.api.providers": [[11, "module-ape.api.providers"]], "ape.api.query": [[11, "module-ape.api.query"]], "append() (ape.api.accounts.accountcontainerapi method)": [[11, "ape.api.accounts.AccountContainerAPI.append"]], "auto_gas_multiplier (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.auto_gas_multiplier"]], "await_confirmations() (ape.api.transactions.receiptapi method)": [[11, "ape.api.transactions.ReceiptAPI.await_confirmations"]], "balance (ape.api.address.baseaddress property)": [[11, "ape.api.address.BaseAddress.balance"]], "base_fee (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.base_fee"]], "base_fee_multiplier (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.base_fee_multiplier"]], "block_page_size (ape.api.providers.providerapi attribute)": [[11, "ape.api.providers.ProviderAPI.block_page_size"]], "block_time (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.block_time"]], "build_command() (ape.api.providers.subprocessprovider method)": [[11, "ape.api.providers.SubprocessProvider.build_command"]], "cached_manifest (ape.api.projects.dependencyapi property)": [[11, "ape.api.projects.DependencyAPI.cached_manifest"]], "cached_manifest (ape.api.projects.projectapi property)": [[11, "ape.api.projects.ProjectAPI.cached_manifest"]], "call() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.call"]], "call() (ape.api.accounts.impersonatedaccount method)": [[11, "ape.api.accounts.ImpersonatedAccount.call"]], "chain_id (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.chain_id"]], "chain_id (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.chain_id"]], "check_signature() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.check_signature"]], "code (ape.api.address.baseaddress property)": [[11, "ape.api.address.BaseAddress.code"]], "codesize (ape.api.address.baseaddress property)": [[11, "ape.api.address.BaseAddress.codesize"]], "compile() (ape.api.compiler.compilerapi method)": [[11, "ape.api.compiler.CompilerAPI.compile"]], "compile() (ape.api.projects.dependencyapi method)": [[11, "ape.api.projects.DependencyAPI.compile"]], "compiler_settings (ape.api.compiler.compilerapi attribute)": [[11, "ape.api.compiler.CompilerAPI.compiler_settings"]], "concurrency (ape.api.providers.providerapi attribute)": [[11, "ape.api.providers.ProviderAPI.concurrency"]], "config (ape.api.compiler.compilerapi property)": [[11, "ape.api.compiler.CompilerAPI.config"]], "config (ape.api.networks.ecosystemapi property)": [[11, "ape.api.networks.EcosystemAPI.config"]], "config (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.config"]], "config (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.config"]], "config_override (ape.api.projects.dependencyapi attribute)": [[11, "ape.api.projects.DependencyAPI.config_override"]], "connect() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.connect"]], "connect() (ape.api.providers.subprocessprovider method)": [[11, "ape.api.providers.SubprocessProvider.connect"]], "connection_id (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.connection_id"]], "connection_id (ape.api.providers.subprocessprovider property)": [[11, "ape.api.providers.SubprocessProvider.connection_id"]], "connection_str (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.connection_str"]], "contracts (ape.api.projects.dependencyapi property)": [[11, "ape.api.projects.DependencyAPI.contracts"]], "contracts_folder (ape.api.projects.dependencyapi attribute)": [[11, "ape.api.projects.DependencyAPI.contracts_folder"]], "contracts_folder (ape.api.projects.projectapi attribute)": [[11, "ape.api.projects.ProjectAPI.contracts_folder"]], "convert() (ape.api.convert.converterapi method)": [[11, "ape.api.convert.ConverterAPI.convert"]], "create_manifest() (ape.api.projects.projectapi method)": [[11, "ape.api.projects.ProjectAPI.create_manifest"]], "create_network_type() (in module ape.api.networks)": [[11, "ape.api.networks.create_network_type"]], "create_transaction() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.create_transaction"]], "custom_network (ape.api.networks.ecosystemapi property)": [[11, "ape.api.networks.EcosystemAPI.custom_network"]], "data_folder (ape.api.networks.ecosystemapi attribute)": [[11, "ape.api.networks.EcosystemAPI.data_folder"]], "data_folder (ape.api.networks.networkapi attribute)": [[11, "ape.api.networks.NetworkAPI.data_folder"]], "data_folder (ape.api.providers.providerapi attribute)": [[11, "ape.api.providers.ProviderAPI.data_folder"]], "declare() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.declare"]], "decode_address() (ape.api.networks.ecosystemapi class method)": [[11, "ape.api.networks.EcosystemAPI.decode_address"]], "decode_block() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.decode_block"]], "decode_calldata() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.decode_calldata"]], "decode_logs() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.decode_logs"]], "decode_logs() (ape.api.transactions.receiptapi method)": [[11, "ape.api.transactions.ReceiptAPI.decode_logs"]], "decode_receipt() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.decode_receipt"]], "decode_returndata() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.decode_returndata"]], "default_network_name (ape.api.networks.ecosystemapi property)": [[11, "ape.api.networks.EcosystemAPI.default_network_name"]], "default_provider_name (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.default_provider_name"]], "deploy() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.deploy"]], "disconnect() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.disconnect"]], "disconnect() (ape.api.providers.subprocessprovider method)": [[11, "ape.api.providers.SubprocessProvider.disconnect"]], "ecosystem (ape.api.networks.networkapi attribute)": [[11, "ape.api.networks.NetworkAPI.ecosystem"]], "empty (ape.api.networks.providercontextmanager property)": [[11, "ape.api.networks.ProviderContextManager.empty"]], "encode_address() (ape.api.networks.ecosystemapi class method)": [[11, "ape.api.networks.EcosystemAPI.encode_address"]], "encode_calldata() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.encode_calldata"]], "encode_deployment() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.encode_deployment"]], "encode_transaction() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.encode_transaction"]], "enrich_calltree() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.enrich_calltree"]], "enrich_error() (ape.api.compiler.compilerapi method)": [[11, "ape.api.compiler.CompilerAPI.enrich_error"]], "estimate_gas_cost() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.estimate_gas_cost"]], "estimate_query() (ape.api.query.queryapi method)": [[11, "ape.api.query.QueryAPI.estimate_query"]], "events (ape.api.transactions.receiptapi property)": [[11, "ape.api.transactions.ReceiptAPI.events"]], "exclude (ape.api.projects.dependencyapi attribute)": [[11, "ape.api.projects.DependencyAPI.exclude"]], "explorer (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.explorer"]], "extract_manifest() (ape.api.projects.dependencyapi method)": [[11, "ape.api.projects.DependencyAPI.extract_manifest"]], "failed (ape.api.transactions.receiptapi property)": [[11, "ape.api.transactions.ReceiptAPI.failed"]], "fee_token_decimals (ape.api.networks.ecosystemapi attribute)": [[11, "ape.api.networks.EcosystemAPI.fee_token_decimals"]], "fee_token_symbol (ape.api.networks.ecosystemapi attribute)": [[11, "ape.api.networks.EcosystemAPI.fee_token_symbol"]], "gas_price (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.gas_price"]], "generate_account() (ape.api.accounts.testaccountcontainerapi method)": [[11, "ape.api.accounts.TestAccountContainerAPI.generate_account"]], "get_address_url() (ape.api.explorers.explorerapi method)": [[11, "ape.api.explorers.ExplorerAPI.get_address_url"]], "get_balance() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_balance"]], "get_block() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_block"]], "get_code() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_code"]], "get_contract_logs() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_contract_logs"]], "get_contract_type() (ape.api.explorers.explorerapi method)": [[11, "ape.api.explorers.ExplorerAPI.get_contract_type"]], "get_method_selector() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.get_method_selector"]], "get_network() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.get_network"]], "get_network_data() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.get_network_data"]], "get_nonce() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_nonce"]], "get_provider() (ape.api.networks.networkapi method)": [[11, "ape.api.networks.NetworkAPI.get_provider"]], "get_proxy_info() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.get_proxy_info"]], "get_receipt() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_receipt"]], "get_transaction_url() (ape.api.explorers.explorerapi method)": [[11, "ape.api.explorers.ExplorerAPI.get_transaction_url"]], "get_transactions_by_block() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_transactions_by_block"]], "get_versions() (ape.api.compiler.compilerapi method)": [[11, "ape.api.compiler.CompilerAPI.get_versions"]], "get_virtual_machine_error() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.get_virtual_machine_error"]], "history (ape.api.address.baseaddress property)": [[11, "ape.api.address.BaseAddress.history"]], "http_uri (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.http_uri"]], "is_adhoc (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.is_adhoc"]], "is_connected (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.is_connected"]], "is_contract (ape.api.address.baseaddress property)": [[11, "ape.api.address.BaseAddress.is_contract"]], "is_convertible() (ape.api.convert.converterapi method)": [[11, "ape.api.convert.ConverterAPI.is_convertible"]], "is_dev (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.is_dev"]], "is_fork (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.is_fork"]], "is_local (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.is_local"]], "is_valid (ape.api.projects.projectapi property)": [[11, "ape.api.projects.ProjectAPI.is_valid"]], "manifest_cachefile (ape.api.projects.projectapi property)": [[11, "ape.api.projects.ProjectAPI.manifest_cachefile"]], "max_gas (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.max_gas"]], "method_called (ape.api.transactions.receiptapi property)": [[11, "ape.api.transactions.ReceiptAPI.method_called"]], "mine() (ape.api.providers.testproviderapi method)": [[11, "ape.api.providers.TestProviderAPI.mine"]], "name (ape.api.compiler.compilerapi property)": [[11, "ape.api.compiler.CompilerAPI.name"]], "name (ape.api.networks.ecosystemapi attribute)": [[11, "ape.api.networks.EcosystemAPI.name"]], "name (ape.api.networks.networkapi attribute)": [[11, "ape.api.networks.NetworkAPI.name"]], "name (ape.api.projects.dependencyapi attribute)": [[11, "ape.api.projects.DependencyAPI.name"]], "name (ape.api.projects.projectapi attribute)": [[11, "ape.api.projects.ProjectAPI.name"]], "name (ape.api.providers.providerapi attribute)": [[11, "ape.api.providers.ProviderAPI.name"]], "network (ape.api.providers.providerapi attribute)": [[11, "ape.api.providers.ProviderAPI.network"]], "network_choice (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.network_choice"]], "network_id (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.network_id"]], "networks (ape.api.networks.ecosystemapi property)": [[11, "ape.api.networks.EcosystemAPI.networks"]], "nonce (ape.api.address.baseaddress property)": [[11, "ape.api.address.BaseAddress.nonce"]], "path (ape.api.projects.projectapi attribute)": [[11, "ape.api.projects.ProjectAPI.path"]], "perform_query() (ape.api.query.queryapi method)": [[11, "ape.api.query.QueryAPI.perform_query"]], "prepare_transaction() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.prepare_transaction"]], "prepare_transaction() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.prepare_transaction"]], "priority_fee (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.priority_fee"]], "process_config_file() (ape.api.projects.projectapi method)": [[11, "ape.api.projects.ProjectAPI.process_config_file"]], "process_name (ape.api.providers.subprocessprovider property)": [[11, "ape.api.providers.SubprocessProvider.process_name"]], "provider_settings (ape.api.providers.providerapi attribute)": [[11, "ape.api.providers.ProviderAPI.provider_settings"]], "providers (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.providers"]], "publish_contract() (ape.api.explorers.explorerapi method)": [[11, "ape.api.explorers.ExplorerAPI.publish_contract"]], "publish_contract() (ape.api.networks.networkapi method)": [[11, "ape.api.networks.NetworkAPI.publish_contract"]], "raise_for_status() (ape.api.transactions.receiptapi method)": [[11, "ape.api.transactions.ReceiptAPI.raise_for_status"]], "ran_out_of_gas (ape.api.transactions.receiptapi property)": [[11, "ape.api.transactions.ReceiptAPI.ran_out_of_gas"]], "receipt (ape.api.transactions.transactionapi property)": [[11, "ape.api.transactions.TransactionAPI.receipt"]], "remove() (ape.api.accounts.accountcontainerapi method)": [[11, "ape.api.accounts.AccountContainerAPI.remove"]], "replace_manifest() (ape.api.projects.projectapi method)": [[11, "ape.api.projects.ProjectAPI.replace_manifest"]], "request_header (ape.api.networks.ecosystemapi attribute)": [[11, "ape.api.networks.EcosystemAPI.request_header"]], "request_header (ape.api.networks.networkapi attribute)": [[11, "ape.api.networks.NetworkAPI.request_header"]], "request_header (ape.api.providers.providerapi attribute)": [[11, "ape.api.providers.ProviderAPI.request_header"]], "required_confirmations (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.required_confirmations"]], "return_value (ape.api.transactions.receiptapi property)": [[11, "ape.api.transactions.ReceiptAPI.return_value"]], "revert() (ape.api.providers.testproviderapi method)": [[11, "ape.api.providers.TestProviderAPI.revert"]], "send_call() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.send_call"]], "send_private_transaction() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.send_private_transaction"]], "send_transaction() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.send_transaction"]], "serialize_transaction() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.serialize_transaction"]], "serialize_transaction() (ape.api.transactions.transactionapi method)": [[11, "ape.api.transactions.TransactionAPI.serialize_transaction"]], "set_default_network() (ape.api.networks.ecosystemapi method)": [[11, "ape.api.networks.EcosystemAPI.set_default_network"]], "set_default_provider() (ape.api.networks.networkapi method)": [[11, "ape.api.networks.NetworkAPI.set_default_provider"]], "set_timestamp() (ape.api.providers.testproviderapi method)": [[11, "ape.api.providers.TestProviderAPI.set_timestamp"]], "settings (ape.api.compiler.compilerapi property)": [[11, "ape.api.compiler.CompilerAPI.settings"]], "settings (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.settings"]], "sign_message() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.sign_message"]], "sign_message() (ape.api.accounts.impersonatedaccount method)": [[11, "ape.api.accounts.ImpersonatedAccount.sign_message"]], "sign_transaction() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.sign_transaction"]], "sign_transaction() (ape.api.accounts.impersonatedaccount method)": [[11, "ape.api.accounts.ImpersonatedAccount.sign_transaction"]], "snapshot() (ape.api.providers.testproviderapi method)": [[11, "ape.api.providers.TestProviderAPI.snapshot"]], "start() (ape.api.providers.subprocessprovider method)": [[11, "ape.api.providers.SubprocessProvider.start"]], "stop() (ape.api.providers.subprocessprovider method)": [[11, "ape.api.providers.SubprocessProvider.stop"]], "supports_source_tracing (ape.api.compiler.compilerapi property)": [[11, "ape.api.compiler.CompilerAPI.supports_source_tracing"]], "supports_tracing (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.supports_tracing"]], "target (ape.api.networks.proxyinfoapi attribute)": [[11, "ape.api.networks.ProxyInfoAPI.target"]], "total_fees_paid (ape.api.transactions.receiptapi property)": [[11, "ape.api.transactions.ReceiptAPI.total_fees_paid"]], "total_transfer_value (ape.api.transactions.transactionapi property)": [[11, "ape.api.transactions.TransactionAPI.total_transfer_value"]], "trace (ape.api.transactions.receiptapi property)": [[11, "ape.api.transactions.ReceiptAPI.trace"]], "trace (ape.api.transactions.transactionapi property)": [[11, "ape.api.transactions.TransactionAPI.trace"]], "track_coverage() (ape.api.transactions.receiptapi method)": [[11, "ape.api.transactions.ReceiptAPI.track_coverage"]], "track_gas() (ape.api.transactions.receiptapi method)": [[11, "ape.api.transactions.ReceiptAPI.track_gas"]], "transaction_acceptance_timeout (ape.api.networks.networkapi property)": [[11, "ape.api.networks.NetworkAPI.transaction_acceptance_timeout"]], "transfer() (ape.api.accounts.accountapi method)": [[11, "ape.api.accounts.AccountAPI.transfer"]], "txn_hash (ape.api.transactions.transactionapi property)": [[11, "ape.api.transactions.TransactionAPI.txn_hash"]], "update_cache() (ape.api.query.queryapi method)": [[11, "ape.api.query.QueryAPI.update_cache"]], "update_manifest() (ape.api.projects.projectapi method)": [[11, "ape.api.projects.ProjectAPI.update_manifest"]], "update_settings() (ape.api.providers.providerapi method)": [[11, "ape.api.providers.ProviderAPI.update_settings"]], "upstream_chain_id (ape.api.networks.forkednetworkapi property)": [[11, "ape.api.networks.ForkedNetworkAPI.upstream_chain_id"]], "upstream_network (ape.api.networks.forkednetworkapi property)": [[11, "ape.api.networks.ForkedNetworkAPI.upstream_network"]], "upstream_provider (ape.api.networks.forkednetworkapi property)": [[11, "ape.api.networks.ForkedNetworkAPI.upstream_provider"]], "uri (ape.api.projects.dependencyapi property)": [[11, "ape.api.projects.DependencyAPI.uri"]], "use_default_provider() (ape.api.networks.networkapi method)": [[11, "ape.api.networks.NetworkAPI.use_default_provider"]], "use_provider() (ape.api.networks.networkapi method)": [[11, "ape.api.networks.NetworkAPI.use_provider"]], "use_upstream_provider() (ape.api.networks.forkednetworkapi method)": [[11, "ape.api.networks.ForkedNetworkAPI.use_upstream_provider"]], "verify_chain_id() (ape.api.networks.networkapi method)": [[11, "ape.api.networks.NetworkAPI.verify_chain_id"]], "version (ape.api.projects.dependencyapi attribute)": [[11, "ape.api.projects.DependencyAPI.version"]], "version (ape.api.projects.projectapi attribute)": [[11, "ape.api.projects.ProjectAPI.version"]], "version_id (ape.api.projects.dependencyapi property)": [[11, "ape.api.projects.DependencyAPI.version_id"]], "ws_uri (ape.api.providers.providerapi property)": [[11, "ape.api.providers.ProviderAPI.ws_uri"]], "accountaliaspromptchoice (class in ape.cli.choices)": [[12, "ape.cli.choices.AccountAliasPromptChoice"]], "alias (class in ape.cli.choices)": [[12, "ape.cli.choices.Alias"]], "allfilepaths (class in ape.cli.paramtype)": [[12, "ape.cli.paramtype.AllFilePaths"]], "apeclicontextobject (class in ape.cli.options)": [[12, "ape.cli.options.ApeCliContextObject"]], "connectedprovidercommand (class in ape.cli.commands)": [[12, "ape.cli.commands.ConnectedProviderCommand"]], "networkboundcommand (class in ape.cli.commands)": [[12, "ape.cli.commands.NetworkBoundCommand"]], "networkchoice (class in ape.cli.choices)": [[12, "ape.cli.choices.NetworkChoice"]], "networkoption (class in ape.cli.options)": [[12, "ape.cli.options.NetworkOption"]], "outputformat (class in ape.cli.choices)": [[12, "ape.cli.choices.OutputFormat"]], "path (class in ape.cli.paramtype)": [[12, "ape.cli.paramtype.Path"]], "promptchoice (class in ape.cli.choices)": [[12, "ape.cli.choices.PromptChoice"]], "tree (ape.cli.choices.outputformat attribute)": [[12, "ape.cli.choices.OutputFormat.TREE"]], "yaml (ape.cli.choices.outputformat attribute)": [[12, "ape.cli.choices.OutputFormat.YAML"]], "abort() (ape.cli.options.apeclicontextobject static method)": [[12, "ape.cli.options.ApeCliContextObject.abort"]], "account_option() (in module ape.cli.options)": [[12, "ape.cli.options.account_option"]], "ape.cli.arguments": [[12, "module-ape.cli.arguments"]], "ape.cli.choices": [[12, "module-ape.cli.choices"]], "ape.cli.commands": [[12, "module-ape.cli.commands"]], "ape.cli.options": [[12, "module-ape.cli.options"]], "ape.cli.paramtype": [[12, "module-ape.cli.paramtype"]], "ape.cli.utils": [[12, "module-ape.cli.utils"]], "ape_cli_context() (in module ape.cli.options)": [[12, "ape.cli.options.ape_cli_context"]], "contract_file_paths_argument() (in module ape.cli.arguments)": [[12, "ape.cli.arguments.contract_file_paths_argument"]], "contract_option() (in module ape.cli.options)": [[12, "ape.cli.options.contract_option"]], "convert() (ape.cli.choices.accountaliaspromptchoice method)": [[12, "ape.cli.choices.AccountAliasPromptChoice.convert"]], "convert() (ape.cli.choices.networkchoice method)": [[12, "ape.cli.choices.NetworkChoice.convert"]], "convert() (ape.cli.choices.promptchoice method)": [[12, "ape.cli.choices.PromptChoice.convert"]], "convert() (ape.cli.paramtype.allfilepaths method)": [[12, "ape.cli.paramtype.AllFilePaths.convert"]], "existing_alias_argument() (in module ape.cli.arguments)": [[12, "ape.cli.arguments.existing_alias_argument"]], "get_metavar() (ape.cli.choices.networkchoice method)": [[12, "ape.cli.choices.NetworkChoice.get_metavar"]], "get_user_selected_account() (in module ape.cli.choices)": [[12, "ape.cli.choices.get_user_selected_account"]], "incompatible_with() (in module ape.cli.options)": [[12, "ape.cli.options.incompatible_with"]], "invoke() (ape.cli.commands.connectedprovidercommand method)": [[12, "ape.cli.commands.ConnectedProviderCommand.invoke"]], "name (ape.cli.choices.alias attribute)": [[12, "ape.cli.choices.Alias.name"]], "network_option() (in module ape.cli.options)": [[12, "ape.cli.options.network_option"]], "non_existing_alias_argument() (in module ape.cli.arguments)": [[12, "ape.cli.arguments.non_existing_alias_argument"]], "output_format_choice() (in module ape.cli.choices)": [[12, "ape.cli.choices.output_format_choice"]], "output_format_option() (in module ape.cli.options)": [[12, "ape.cli.options.output_format_option"]], "parse_args() (ape.cli.commands.connectedprovidercommand method)": [[12, "ape.cli.commands.ConnectedProviderCommand.parse_args"]], "print_choices() (ape.cli.choices.accountaliaspromptchoice method)": [[12, "ape.cli.choices.AccountAliasPromptChoice.print_choices"]], "print_choices() (ape.cli.choices.promptchoice method)": [[12, "ape.cli.choices.PromptChoice.print_choices"]], "select_account() (ape.cli.choices.accountaliaspromptchoice method)": [[12, "ape.cli.choices.AccountAliasPromptChoice.select_account"]], "select_account() (in module ape.cli.choices)": [[12, "ape.cli.choices.select_account"]], "skip_confirmation_option() (in module ape.cli.options)": [[12, "ape.cli.options.skip_confirmation_option"]], "verbosity_option() (in module ape.cli.options)": [[12, "ape.cli.options.verbosity_option"]], "contractcontainer (class in ape.contracts.base)": [[13, "ape.contracts.base.ContractContainer"]], "contractevent (class in ape.contracts.base)": [[13, "ape.contracts.base.ContractEvent"]], "contractinstance (class in ape.contracts.base)": [[13, "ape.contracts.base.ContractInstance"]], "contracttypewrapper (class in ape.contracts.base)": [[13, "ape.contracts.base.ContractTypeWrapper"]], "__call__() (ape.contracts.base.contractcontainer method)": [[13, "ape.contracts.base.ContractContainer.__call__"]], "__call__() (ape.contracts.base.contractevent method)": [[13, "ape.contracts.base.ContractEvent.__call__"]], "__call__() (ape.contracts.base.contractinstance method)": [[13, "ape.contracts.base.ContractInstance.__call__"]], "__dir__() (ape.contracts.base.contractinstance method)": [[13, "ape.contracts.base.ContractInstance.__dir__"]], "__getattr__() (ape.contracts.base.contractcontainer method)": [[13, "ape.contracts.base.ContractContainer.__getattr__"]], "__getattr__() (ape.contracts.base.contractinstance method)": [[13, "ape.contracts.base.ContractInstance.__getattr__"]], "__iter__() (ape.contracts.base.contractevent method)": [[13, "ape.contracts.base.ContractEvent.__iter__"]], "address (ape.contracts.base.contractinstance property)": [[13, "ape.contracts.base.ContractInstance.address"]], "at() (ape.contracts.base.contractcontainer method)": [[13, "ape.contracts.base.ContractContainer.at"]], "call_view_method() (ape.contracts.base.contractinstance method)": [[13, "ape.contracts.base.ContractInstance.call_view_method"]], "decode_input() (ape.contracts.base.contracttypewrapper method)": [[13, "ape.contracts.base.ContractTypeWrapper.decode_input"]], "deploy() (ape.contracts.base.contractcontainer method)": [[13, "ape.contracts.base.ContractContainer.deploy"]], "deployments (ape.contracts.base.contractcontainer property)": [[13, "ape.contracts.base.ContractContainer.deployments"]], "from_receipt() (ape.contracts.base.contractevent method)": [[13, "ape.contracts.base.ContractEvent.from_receipt"]], "get_error_by_signature() (ape.contracts.base.contractinstance method)": [[13, "ape.contracts.base.ContractInstance.get_error_by_signature"]], "get_event_by_signature() (ape.contracts.base.contractinstance method)": [[13, "ape.contracts.base.ContractInstance.get_event_by_signature"]], "identifier_lookup (ape.contracts.base.contracttypewrapper property)": [[13, "ape.contracts.base.ContractTypeWrapper.identifier_lookup"]], "invoke_transaction() (ape.contracts.base.contractinstance method)": [[13, "ape.contracts.base.ContractInstance.invoke_transaction"]], "name (ape.contracts.base.contractevent property)": [[13, "ape.contracts.base.ContractEvent.name"]], "poll_logs() (ape.contracts.base.contractevent method)": [[13, "ape.contracts.base.ContractEvent.poll_logs"]], "query() (ape.contracts.base.contractevent method)": [[13, "ape.contracts.base.ContractEvent.query"]], "range() (ape.contracts.base.contractevent method)": [[13, "ape.contracts.base.ContractEvent.range"]], "receipt (ape.contracts.base.contractinstance property)": [[13, "ape.contracts.base.ContractInstance.receipt"]], "selector_identifiers (ape.contracts.base.contracttypewrapper property)": [[13, "ape.contracts.base.ContractTypeWrapper.selector_identifiers"]], "source_path (ape.contracts.base.contracttypewrapper property)": [[13, "ape.contracts.base.ContractTypeWrapper.source_path"]], "apinotimplementederror": [[14, "ape.exceptions.APINotImplementedError"]], "abort": [[14, "ape.exceptions.Abort"]], "accountserror": [[14, "ape.exceptions.AccountsError"]], "aliasalreadyinuseerror": [[14, "ape.exceptions.AliasAlreadyInUseError"]], "apeattributeerror": [[14, "ape.exceptions.ApeAttributeError"]], "apeexception": [[14, "ape.exceptions.ApeException"]], "apeindexerror": [[14, "ape.exceptions.ApeIndexError"]], "argumentslengtherror": [[14, "ape.exceptions.ArgumentsLengthError"]], "blocknotfounderror": [[14, "ape.exceptions.BlockNotFoundError"]], "chainerror": [[14, "ape.exceptions.ChainError"]], "compilererror": [[14, "ape.exceptions.CompilerError"]], "configerror": [[14, "ape.exceptions.ConfigError"]], "contractdataerror": [[14, "ape.exceptions.ContractDataError"]], "contractlogicerror": [[14, "ape.exceptions.ContractLogicError"]], "contractnotfounderror": [[14, "ape.exceptions.ContractNotFoundError"]], "conversionerror": [[14, "ape.exceptions.ConversionError"]], "customerror": [[14, "ape.exceptions.CustomError"]], "decodingerror": [[14, "ape.exceptions.DecodingError"]], "ecosystemnotfounderror": [[14, "ape.exceptions.EcosystemNotFoundError"]], "methodnonpayableerror": [[14, "ape.exceptions.MethodNonPayableError"]], "networkerror": [[14, "ape.exceptions.NetworkError"]], "networkmismatcherror": [[14, "ape.exceptions.NetworkMismatchError"]], "networknotfounderror": [[14, "ape.exceptions.NetworkNotFoundError"]], "outofgaserror": [[14, "ape.exceptions.OutOfGasError"]], "projecterror": [[14, "ape.exceptions.ProjectError"]], "providererror": [[14, "ape.exceptions.ProviderError"]], "providernotconnectederror": [[14, "ape.exceptions.ProviderNotConnectedError"]], "providernotfounderror": [[14, "ape.exceptions.ProviderNotFoundError"]], "queryengineerror": [[14, "ape.exceptions.QueryEngineError"]], "rpctimeouterror": [[14, "ape.exceptions.RPCTimeoutError"]], "signatureerror": [[14, "ape.exceptions.SignatureError"]], "subprocesserror": [[14, "ape.exceptions.SubprocessError"]], "subprocesstimeouterror": [[14, "ape.exceptions.SubprocessTimeoutError"]], "transactionerror": [[14, "ape.exceptions.TransactionError"]], "transactionnotfounderror": [[14, "ape.exceptions.TransactionNotFoundError"]], "unknownsnapshoterror": [[14, "ape.exceptions.UnknownSnapshotError"]], "unknownversionerror": [[14, "ape.exceptions.UnknownVersionError"]], "virtualmachineerror": [[14, "ape.exceptions.VirtualMachineError"]], "ape.exceptions": [[14, "module-ape.exceptions"]], "dev_message (ape.exceptions.contractlogicerror property)": [[14, "ape.exceptions.ContractLogicError.dev_message"]], "from_error() (ape.exceptions.contractlogicerror class method)": [[14, "ape.exceptions.ContractLogicError.from_error"]], "handle_ape_exception() (in module ape.exceptions)": [[14, "ape.exceptions.handle_ape_exception"]], "name (ape.exceptions.customerror property)": [[14, "ape.exceptions.CustomError.name"]], "show() (ape.exceptions.abort method)": [[14, "ape.exceptions.Abort.show"]], "accounthistory (class in ape.managers.chain)": [[15, "ape.managers.chain.AccountHistory"]], "accountintconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.AccountIntConverter"]], "accountmanager (class in ape.managers.accounts)": [[15, "ape.managers.accounts.AccountManager"]], "addressapiconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.AddressAPIConverter"]], "apeproject (class in ape.managers.project.types)": [[15, "ape.managers.project.types.ApeProject"]], "baseproject (class in ape.managers.project.types)": [[15, "ape.managers.project.types.BaseProject"]], "blockcontainer (class in ape.managers.chain)": [[15, "ape.managers.chain.BlockContainer"]], "brownieproject (class in ape.managers.project.types)": [[15, "ape.managers.project.types.BrownieProject"]], "bytesaddressconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.BytesAddressConverter"]], "chainmanager (class in ape.managers.chain)": [[15, "ape.managers.chain.ChainManager"]], "compilermanager (class in ape.managers.compilers)": [[15, "ape.managers.compilers.CompilerManager"]], "configmanager (class in ape.managers.config)": [[15, "ape.managers.config.ConfigManager"]], "contractcache (class in ape.managers.chain)": [[15, "ape.managers.chain.ContractCache"]], "conversionmanager (class in ape.managers.converters)": [[15, "ape.managers.converters.ConversionManager"]], "data_folder (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.DATA_FOLDER"]], "defaultqueryprovider (class in ape.managers.query)": [[15, "ape.managers.query.DefaultQueryProvider"]], "deploymentconfig (class in ape.managers.config)": [[15, "ape.managers.config.DeploymentConfig"]], "deploymentconfigcollection (class in ape.managers.config)": [[15, "ape.managers.config.DeploymentConfigCollection"]], "githubdependency (class in ape.managers.project.dependency)": [[15, "ape.managers.project.dependency.GithubDependency"]], "hexaddressconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.HexAddressConverter"]], "hexconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.HexConverter"]], "hexintconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.HexIntConverter"]], "intaddressconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.IntAddressConverter"]], "localdependency (class in ape.managers.project.dependency)": [[15, "ape.managers.project.dependency.LocalDependency"]], "networkmanager (class in ape.managers.networks)": [[15, "ape.managers.networks.NetworkManager"]], "npmdependency (class in ape.managers.project.dependency)": [[15, "ape.managers.project.dependency.NpmDependency"]], "project_folder (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.PROJECT_FOLDER"]], "projectmanager (class in ape.managers.project.manager)": [[15, "ape.managers.project.manager.ProjectManager"]], "querymanager (class in ape.managers.query)": [[15, "ape.managers.query.QueryManager"]], "stringintconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.StringIntConverter"]], "testaccountmanager (class in ape.managers.accounts)": [[15, "ape.managers.accounts.TestAccountManager"]], "timestampconverter (class in ape.managers.converters)": [[15, "ape.managers.converters.TimestampConverter"]], "transactionhistory (class in ape.managers.chain)": [[15, "ape.managers.chain.TransactionHistory"]], "__contains__() (ape.managers.accounts.accountmanager method)": [[15, "ape.managers.accounts.AccountManager.__contains__"]], "__contains__() (ape.managers.accounts.testaccountmanager method)": [[15, "ape.managers.accounts.TestAccountManager.__contains__"]], "__delitem__() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.__delitem__"]], "__getattr__() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.__getattr__"]], "__getitem__() (ape.managers.accounts.testaccountmanager method)": [[15, "ape.managers.accounts.TestAccountManager.__getitem__"]], "__getitem__() (ape.managers.chain.blockcontainer method)": [[15, "ape.managers.chain.BlockContainer.__getitem__"]], "__iter__() (ape.managers.accounts.testaccountmanager method)": [[15, "ape.managers.accounts.TestAccountManager.__iter__"]], "__iter__() (ape.managers.chain.accounthistory method)": [[15, "ape.managers.chain.AccountHistory.__iter__"]], "__iter__() (ape.managers.chain.blockcontainer method)": [[15, "ape.managers.chain.BlockContainer.__iter__"]], "__len__() (ape.managers.accounts.accountmanager method)": [[15, "ape.managers.accounts.AccountManager.__len__"]], "__len__() (ape.managers.accounts.testaccountmanager method)": [[15, "ape.managers.accounts.TestAccountManager.__len__"]], "__len__() (ape.managers.chain.accounthistory method)": [[15, "ape.managers.chain.AccountHistory.__len__"]], "__len__() (ape.managers.chain.blockcontainer method)": [[15, "ape.managers.chain.BlockContainer.__len__"]], "__setitem__() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.__setitem__"]], "__str__() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.__str__"]], "active_provider (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.active_provider"]], "address (ape.managers.chain.accounthistory attribute)": [[15, "ape.managers.chain.AccountHistory.address"]], "aliases (ape.managers.accounts.accountmanager property)": [[15, "ape.managers.accounts.AccountManager.aliases"]], "ape.managers.accounts": [[15, "module-ape.managers.accounts"]], "ape.managers.compilers": [[15, "module-ape.managers.compilers"]], "ape.managers.config": [[15, "module-ape.managers.config"]], "ape.managers.converters": [[15, "module-ape.managers.converters"]], "ape.managers.networks": [[15, "module-ape.managers.networks"]], "ape.managers.project.dependency": [[15, "module-ape.managers.project.dependency"]], "ape.managers.project.manager": [[15, "module-ape.managers.project.manager"]], "ape.managers.query": [[15, "module-ape.managers.query"]], "append() (ape.managers.chain.accounthistory method)": [[15, "ape.managers.chain.AccountHistory.append"]], "append() (ape.managers.chain.transactionhistory method)": [[15, "ape.managers.chain.TransactionHistory.append"]], "base_fee (ape.managers.chain.chainmanager property)": [[15, "ape.managers.chain.ChainManager.base_fee"]], "blocks (ape.managers.chain.chainmanager property)": [[15, "ape.managers.chain.ChainManager.blocks"]], "cache_blueprint() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.cache_blueprint"]], "cache_deployment() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.cache_deployment"]], "cache_proxy_info() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.cache_proxy_info"]], "can_trace_source() (ape.managers.compilers.compilermanager method)": [[15, "ape.managers.compilers.CompilerManager.can_trace_source"]], "chain_id (ape.managers.chain.chainmanager property)": [[15, "ape.managers.chain.ChainManager.chain_id"]], "clear_local_caches() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.clear_local_caches"]], "compile() (ape.managers.compilers.compilermanager method)": [[15, "ape.managers.compilers.CompilerManager.compile"]], "compile_source() (ape.managers.compilers.compilermanager method)": [[15, "ape.managers.compilers.CompilerManager.compile_source"]], "compiler_data (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.compiler_data"]], "containers (ape.managers.accounts.accountmanager property)": [[15, "ape.managers.accounts.AccountManager.containers"]], "contracts (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.contracts"]], "contracts_folder (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.contracts_folder"]], "contracts_folder (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.contracts_folder"]], "convert() (ape.managers.converters.accountintconverter method)": [[15, "ape.managers.converters.AccountIntConverter.convert"]], "convert() (ape.managers.converters.addressapiconverter method)": [[15, "ape.managers.converters.AddressAPIConverter.convert"]], "convert() (ape.managers.converters.bytesaddressconverter method)": [[15, "ape.managers.converters.BytesAddressConverter.convert"]], "convert() (ape.managers.converters.conversionmanager method)": [[15, "ape.managers.converters.ConversionManager.convert"]], "convert() (ape.managers.converters.hexaddressconverter method)": [[15, "ape.managers.converters.HexAddressConverter.convert"]], "convert() (ape.managers.converters.hexconverter method)": [[15, "ape.managers.converters.HexConverter.convert"]], "convert() (ape.managers.converters.hexintconverter method)": [[15, "ape.managers.converters.HexIntConverter.convert"]], "convert() (ape.managers.converters.intaddressconverter method)": [[15, "ape.managers.converters.IntAddressConverter.convert"]], "convert() (ape.managers.converters.stringintconverter method)": [[15, "ape.managers.converters.StringIntConverter.convert"]], "convert() (ape.managers.converters.timestampconverter method)": [[15, "ape.managers.converters.TimestampConverter.convert"]], "create_custom_provider() (ape.managers.networks.networkmanager method)": [[15, "ape.managers.networks.NetworkManager.create_custom_provider"]], "create_manifest() (ape.managers.project.types.baseproject method)": [[15, "ape.managers.project.types.BaseProject.create_manifest"]], "default_ecosystem (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.default_ecosystem"]], "default_ecosystem (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.default_ecosystem"]], "dependencies (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.dependencies"]], "dependencies (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.dependencies"]], "deployments (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.deployments"]], "ecosystem (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.ecosystem"]], "ecosystem_names (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.ecosystem_names"]], "ecosystems (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.ecosystems"]], "engines (ape.managers.query.querymanager property)": [[15, "ape.managers.query.QueryManager.engines"]], "enrich_error() (ape.managers.compilers.compilermanager method)": [[15, "ape.managers.compilers.CompilerManager.enrich_error"]], "estimate_query() (ape.managers.query.defaultqueryprovider method)": [[15, "ape.managers.query.DefaultQueryProvider.estimate_query"]], "extensions_with_missing_compilers() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.extensions_with_missing_compilers"]], "extract_manifest() (ape.managers.project.dependency.githubdependency method)": [[15, "ape.managers.project.dependency.GithubDependency.extract_manifest"]], "extract_manifest() (ape.managers.project.dependency.localdependency method)": [[15, "ape.managers.project.dependency.LocalDependency.extract_manifest"]], "extract_manifest() (ape.managers.project.dependency.npmdependency method)": [[15, "ape.managers.project.dependency.NpmDependency.extract_manifest"]], "extract_manifest() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.extract_manifest"]], "flatten_contract() (ape.managers.compilers.compilermanager method)": [[15, "ape.managers.compilers.CompilerManager.flatten_contract"]], "fork() (ape.managers.networks.networkmanager method)": [[15, "ape.managers.networks.NetworkManager.fork"]], "gas_price (ape.managers.chain.chainmanager property)": [[15, "ape.managers.chain.ChainManager.gas_price"]], "get() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.get"]], "get_accounts_by_type() (ape.managers.accounts.accountmanager method)": [[15, "ape.managers.accounts.AccountManager.get_accounts_by_type"]], "get_blueprint() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.get_blueprint"]], "get_compiler_data() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.get_compiler_data"]], "get_config() (ape.managers.config.configmanager method)": [[15, "ape.managers.config.ConfigManager.get_config"]], "get_container() (ape.managers.chain.contractcache class method)": [[15, "ape.managers.chain.ContractCache.get_container"]], "get_contract() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.get_contract"]], "get_creation_receipt() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.get_creation_receipt"]], "get_deployments() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.get_deployments"]], "get_ecosystem() (ape.managers.networks.networkmanager method)": [[15, "ape.managers.networks.NetworkManager.get_ecosystem"]], "get_imports() (ape.managers.compilers.compilermanager method)": [[15, "ape.managers.compilers.CompilerManager.get_imports"]], "get_multiple() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.get_multiple"]], "get_network_choices() (ape.managers.networks.networkmanager method)": [[15, "ape.managers.networks.NetworkManager.get_network_choices"]], "get_project() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.get_project"]], "get_provider_from_choice() (ape.managers.networks.networkmanager method)": [[15, "ape.managers.networks.NetworkManager.get_provider_from_choice"]], "get_proxy_info() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.get_proxy_info"]], "get_receipt() (ape.managers.chain.chainmanager method)": [[15, "ape.managers.chain.ChainManager.get_receipt"]], "get_references() (ape.managers.compilers.compilermanager method)": [[15, "ape.managers.compilers.CompilerManager.get_references"]], "github (ape.managers.project.dependency.githubdependency attribute)": [[15, "ape.managers.project.dependency.GithubDependency.github"]], "head (ape.managers.chain.blockcontainer property)": [[15, "ape.managers.chain.BlockContainer.head"]], "height (ape.managers.chain.blockcontainer property)": [[15, "ape.managers.chain.BlockContainer.height"]], "history (ape.managers.chain.chainmanager property)": [[15, "ape.managers.chain.ChainManager.history"]], "instance_at() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.instance_at"]], "instance_from_receipt() (ape.managers.chain.contractcache method)": [[15, "ape.managers.chain.ContractCache.instance_from_receipt"]], "interfaces_folder (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.interfaces_folder"]], "is_convertible() (ape.managers.converters.accountintconverter method)": [[15, "ape.managers.converters.AccountIntConverter.is_convertible"]], "is_convertible() (ape.managers.converters.addressapiconverter method)": [[15, "ape.managers.converters.AddressAPIConverter.is_convertible"]], "is_convertible() (ape.managers.converters.bytesaddressconverter method)": [[15, "ape.managers.converters.BytesAddressConverter.is_convertible"]], "is_convertible() (ape.managers.converters.hexaddressconverter method)": [[15, "ape.managers.converters.HexAddressConverter.is_convertible"]], "is_convertible() (ape.managers.converters.hexconverter method)": [[15, "ape.managers.converters.HexConverter.is_convertible"]], "is_convertible() (ape.managers.converters.hexintconverter method)": [[15, "ape.managers.converters.HexIntConverter.is_convertible"]], "is_convertible() (ape.managers.converters.intaddressconverter method)": [[15, "ape.managers.converters.IntAddressConverter.is_convertible"]], "is_convertible() (ape.managers.converters.stringintconverter method)": [[15, "ape.managers.converters.StringIntConverter.is_convertible"]], "is_convertible() (ape.managers.converters.timestampconverter method)": [[15, "ape.managers.converters.TimestampConverter.is_convertible"]], "is_type() (ape.managers.converters.conversionmanager method)": [[15, "ape.managers.converters.ConversionManager.is_type"]], "is_valid (ape.managers.project.types.baseproject property)": [[15, "ape.managers.project.types.BaseProject.is_valid"]], "is_valid (ape.managers.project.types.brownieproject property)": [[15, "ape.managers.project.types.BrownieProject.is_valid"]], "isolate() (ape.managers.chain.chainmanager method)": [[15, "ape.managers.chain.ChainManager.isolate"]], "load() (ape.managers.accounts.accountmanager method)": [[15, "ape.managers.accounts.AccountManager.load"]], "load() (ape.managers.config.configmanager method)": [[15, "ape.managers.config.ConfigManager.load"]], "load_contracts() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.load_contracts"]], "lookup_path() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.lookup_path"]], "meta (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.meta"]], "meta (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.meta"]], "mine() (ape.managers.chain.chainmanager method)": [[15, "ape.managers.chain.ChainManager.mine"]], "name (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.name"]], "network (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.network"]], "network_data (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.network_data"]], "network_names (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.network_names"]], "networks_yaml (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.networks_yaml"]], "npm (ape.managers.project.dependency.npmdependency attribute)": [[15, "ape.managers.project.dependency.NpmDependency.npm"]], "outgoing (ape.managers.chain.accounthistory property)": [[15, "ape.managers.chain.AccountHistory.outgoing"]], "parse_network_choice() (ape.managers.networks.networkmanager method)": [[15, "ape.managers.networks.NetworkManager.parse_network_choice"]], "path (ape.managers.project.manager.projectmanager attribute)": [[15, "ape.managers.project.manager.ProjectManager.path"]], "pending_timestamp (ape.managers.chain.chainmanager property)": [[15, "ape.managers.chain.ChainManager.pending_timestamp"]], "perform_query() (ape.managers.query.defaultqueryprovider method)": [[15, "ape.managers.query.DefaultQueryProvider.perform_query"]], "poll_blocks() (ape.managers.chain.blockcontainer method)": [[15, "ape.managers.chain.BlockContainer.poll_blocks"]], "process_config_file() (ape.managers.project.types.baseproject method)": [[15, "ape.managers.project.types.BaseProject.process_config_file"]], "process_config_file() (ape.managers.project.types.brownieproject method)": [[15, "ape.managers.project.types.BrownieProject.process_config_file"]], "project_types (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.project_types"]], "provider_names (ape.managers.networks.networkmanager property)": [[15, "ape.managers.networks.NetworkManager.provider_names"]], "query() (ape.managers.chain.accounthistory method)": [[15, "ape.managers.chain.AccountHistory.query"]], "query() (ape.managers.chain.blockcontainer method)": [[15, "ape.managers.chain.BlockContainer.query"]], "query() (ape.managers.query.querymanager method)": [[15, "ape.managers.query.QueryManager.query"]], "range() (ape.managers.chain.blockcontainer method)": [[15, "ape.managers.chain.BlockContainer.range"]], "ref (ape.managers.project.dependency.githubdependency attribute)": [[15, "ape.managers.project.dependency.GithubDependency.ref"]], "registered_compilers (ape.managers.compilers.compilermanager property)": [[15, "ape.managers.compilers.CompilerManager.registered_compilers"]], "restore() (ape.managers.chain.chainmanager method)": [[15, "ape.managers.chain.ChainManager.restore"]], "revert_to_block() (ape.managers.chain.accounthistory method)": [[15, "ape.managers.chain.AccountHistory.revert_to_block"]], "revert_to_block() (ape.managers.chain.transactionhistory method)": [[15, "ape.managers.chain.TransactionHistory.revert_to_block"]], "scripts_folder (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.scripts_folder"]], "sessional (ape.managers.chain.accounthistory attribute)": [[15, "ape.managers.chain.AccountHistory.sessional"]], "set_default_ecosystem() (ape.managers.networks.networkmanager method)": [[15, "ape.managers.networks.NetworkManager.set_default_ecosystem"]], "snapshot() (ape.managers.chain.chainmanager method)": [[15, "ape.managers.chain.ChainManager.snapshot"]], "source_paths (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.source_paths"]], "source_paths (ape.managers.project.types.baseproject property)": [[15, "ape.managers.project.types.BaseProject.source_paths"]], "sources (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.sources"]], "sources_missing (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.sources_missing"]], "test_accounts (ape.managers.accounts.accountmanager property)": [[15, "ape.managers.accounts.AccountManager.test_accounts"]], "tests_folder (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.tests_folder"]], "track_deployment() (ape.managers.project.manager.projectmanager method)": [[15, "ape.managers.project.manager.ProjectManager.track_deployment"]], "tracked_deployments (ape.managers.project.manager.projectmanager property)": [[15, "ape.managers.project.manager.ProjectManager.tracked_deployments"]], "uri (ape.managers.project.dependency.githubdependency property)": [[15, "ape.managers.project.dependency.GithubDependency.uri"]], "uri (ape.managers.project.dependency.localdependency property)": [[15, "ape.managers.project.dependency.LocalDependency.uri"]], "uri (ape.managers.project.dependency.npmdependency property)": [[15, "ape.managers.project.dependency.NpmDependency.uri"]], "using_project() (ape.managers.config.configmanager method)": [[15, "ape.managers.config.ConfigManager.using_project"]], "version (ape.managers.config.configmanager attribute)": [[15, "ape.managers.config.ConfigManager.version"]], "version (ape.managers.project.dependency.localdependency attribute)": [[15, "ape.managers.project.dependency.LocalDependency.version"]], "version_from_json (ape.managers.project.dependency.npmdependency property)": [[15, "ape.managers.project.dependency.NpmDependency.version_from_json"]], "version_from_local_json (ape.managers.project.dependency.npmdependency property)": [[15, "ape.managers.project.dependency.NpmDependency.version_from_local_json"]], "version_id (ape.managers.project.dependency.githubdependency property)": [[15, "ape.managers.project.dependency.GithubDependency.version_id"]], "version_id (ape.managers.project.dependency.localdependency property)": [[15, "ape.managers.project.dependency.LocalDependency.version_id"]], "version_id (ape.managers.project.dependency.npmdependency property)": [[15, "ape.managers.project.dependency.NpmDependency.version_id"]], "accountplugin (class in ape.plugins.account)": [[16, "ape.plugins.account.AccountPlugin"]], "compilerplugin (class in ape.plugins.compiler)": [[16, "ape.plugins.compiler.CompilerPlugin"]], "config (class in ape.plugins.config)": [[16, "ape.plugins.config.Config"]], "conversionplugin (class in ape.plugins.converter)": [[16, "ape.plugins.converter.ConversionPlugin"]], "dependencyplugin (class in ape.plugins.project)": [[16, "ape.plugins.project.DependencyPlugin"]], "ecosystemplugin (class in ape.plugins.network)": [[16, "ape.plugins.network.EcosystemPlugin"]], "explorerplugin (class in ape.plugins.network)": [[16, "ape.plugins.network.ExplorerPlugin"]], "networkplugin (class in ape.plugins.network)": [[16, "ape.plugins.network.NetworkPlugin"]], "plugintype (class in ape.plugins.pluggy_patch)": [[16, "ape.plugins.pluggy_patch.PluginType"]], "projectplugin (class in ape.plugins.project)": [[16, "ape.plugins.project.ProjectPlugin"]], "providerplugin (class in ape.plugins.network)": [[16, "ape.plugins.network.ProviderPlugin"]], "queryplugin (class in ape.plugins.query)": [[16, "ape.plugins.query.QueryPlugin"]], "account_types() (ape.plugins.account.accountplugin method)": [[16, "ape.plugins.account.AccountPlugin.account_types"]], "ape.plugins": [[16, "module-ape.plugins"]], "ape.plugins.account": [[16, "module-ape.plugins.account"]], "ape.plugins.compiler": [[16, "module-ape.plugins.compiler"]], "ape.plugins.config": [[16, "module-ape.plugins.config"]], "ape.plugins.converter": [[16, "module-ape.plugins.converter"]], "ape.plugins.network": [[16, "module-ape.plugins.network"]], "ape.plugins.pluggy_patch": [[16, "module-ape.plugins.pluggy_patch"]], "ape.plugins.project": [[16, "module-ape.plugins.project"]], "ape.plugins.query": [[16, "module-ape.plugins.query"]], "config_class() (ape.plugins.config.config method)": [[16, "ape.plugins.config.Config.config_class"]], "converters() (ape.plugins.converter.conversionplugin method)": [[16, "ape.plugins.converter.ConversionPlugin.converters"]], "dependencies() (ape.plugins.project.dependencyplugin method)": [[16, "ape.plugins.project.DependencyPlugin.dependencies"]], "ecosystems() (ape.plugins.network.ecosystemplugin method)": [[16, "ape.plugins.network.EcosystemPlugin.ecosystems"]], "explorers() (ape.plugins.network.explorerplugin method)": [[16, "ape.plugins.network.ExplorerPlugin.explorers"]], "networks() (ape.plugins.network.networkplugin method)": [[16, "ape.plugins.network.NetworkPlugin.networks"]], "plugin_manager (in module ape.plugins.pluggy_patch)": [[16, "ape.plugins.pluggy_patch.plugin_manager"]], "projects() (ape.plugins.project.projectplugin method)": [[16, "ape.plugins.project.ProjectPlugin.projects"]], "providers() (ape.plugins.network.providerplugin method)": [[16, "ape.plugins.network.ProviderPlugin.providers"]], "query_engines() (ape.plugins.query.queryplugin method)": [[16, "ape.plugins.query.QueryPlugin.query_engines"]], "register() (in module ape.plugins)": [[16, "ape.plugins.register"]], "register_compiler() (ape.plugins.compiler.compilerplugin method)": [[16, "ape.plugins.compiler.CompilerPlugin.register_compiler"]], "addresstype (in module ape.types.address)": [[17, "ape.types.address.AddressType"]], "basecontractlog (class in ape.types)": [[17, "ape.types.BaseContractLog"]], "blockid (in module ape.types)": [[17, "ape.types.BlockID"]], "contractcoverage (class in ape.types.coverage)": [[17, "ape.types.coverage.ContractCoverage"]], "contractlog (class in ape.types)": [[17, "ape.types.ContractLog"]], "contractsourcecoverage (class in ape.types.coverage)": [[17, "ape.types.coverage.ContractSourceCoverage"]], "coverageproject (class in ape.types.coverage)": [[17, "ape.types.coverage.CoverageProject"]], "coveragereport (class in ape.types.coverage)": [[17, "ape.types.coverage.CoverageReport"]], "coveragestatement (class in ape.types.coverage)": [[17, "ape.types.coverage.CoverageStatement"]], "functioncoverage (class in ape.types.coverage)": [[17, "ape.types.coverage.FunctionCoverage"]], "messagesignature (class in ape.types.signatures)": [[17, "ape.types.signatures.MessageSignature"]], "mockcontractlog (class in ape.types)": [[17, "ape.types.MockContractLog"]], "rawaddress (in module ape.types.address)": [[17, "ape.types.address.RawAddress"]], "signablemessage (class in ape.types.signatures)": [[17, "ape.types.signatures.SignableMessage"]], "transactionsignature (class in ape.types.signatures)": [[17, "ape.types.signatures.TransactionSignature"]], "ape.types": [[17, "module-ape.types"]], "ape.types.address": [[17, "module-ape.types.address"]], "ape.types.coverage": [[17, "module-ape.types.coverage"]], "block_hash (ape.types.contractlog attribute)": [[17, "ape.types.ContractLog.block_hash"]], "block_number (ape.types.contractlog attribute)": [[17, "ape.types.ContractLog.block_number"]], "body (ape.types.signatures.signablemessage attribute)": [[17, "ape.types.signatures.SignableMessage.body"]], "contract_address (ape.types.basecontractlog attribute)": [[17, "ape.types.BaseContractLog.contract_address"]], "contracts (ape.types.coverage.contractsourcecoverage attribute)": [[17, "ape.types.coverage.ContractSourceCoverage.contracts"]], "event_arguments (ape.types.basecontractlog attribute)": [[17, "ape.types.BaseContractLog.event_arguments"]], "event_name (ape.types.basecontractlog attribute)": [[17, "ape.types.BaseContractLog.event_name"]], "full_name (ape.types.coverage.functioncoverage attribute)": [[17, "ape.types.coverage.FunctionCoverage.full_name"]], "function_hits (ape.types.coverage.contractcoverage property)": [[17, "ape.types.coverage.ContractCoverage.function_hits"]], "function_hits (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.function_hits"]], "function_hits (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.function_hits"]], "function_hits (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.function_hits"]], "function_rate (ape.types.coverage.contractcoverage property)": [[17, "ape.types.coverage.ContractCoverage.function_rate"]], "function_rate (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.function_rate"]], "function_rate (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.function_rate"]], "function_rate (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.function_rate"]], "functions (ape.types.coverage.contractcoverage attribute)": [[17, "ape.types.coverage.ContractCoverage.functions"]], "get_html() (ape.types.coverage.coveragereport method)": [[17, "ape.types.coverage.CoverageReport.get_html"]], "get_xml() (ape.types.coverage.coveragereport method)": [[17, "ape.types.coverage.CoverageReport.get_xml"]], "header (ape.types.signatures.signablemessage attribute)": [[17, "ape.types.signatures.SignableMessage.header"]], "hit_count (ape.types.coverage.coveragestatement attribute)": [[17, "ape.types.coverage.CoverageStatement.hit_count"]], "hit_count (ape.types.coverage.functioncoverage attribute)": [[17, "ape.types.coverage.FunctionCoverage.hit_count"]], "include() (ape.types.coverage.contractsourcecoverage method)": [[17, "ape.types.coverage.ContractSourceCoverage.include"]], "line_rate (ape.types.coverage.contractcoverage property)": [[17, "ape.types.coverage.ContractCoverage.line_rate"]], "line_rate (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.line_rate"]], "line_rate (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.line_rate"]], "line_rate (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.line_rate"]], "line_rate (ape.types.coverage.functioncoverage property)": [[17, "ape.types.coverage.FunctionCoverage.line_rate"]], "lines_covered (ape.types.coverage.contractcoverage property)": [[17, "ape.types.coverage.ContractCoverage.lines_covered"]], "lines_covered (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.lines_covered"]], "lines_covered (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.lines_covered"]], "lines_covered (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.lines_covered"]], "lines_covered (ape.types.coverage.functioncoverage property)": [[17, "ape.types.coverage.FunctionCoverage.lines_covered"]], "lines_valid (ape.types.coverage.contractcoverage property)": [[17, "ape.types.coverage.ContractCoverage.lines_valid"]], "lines_valid (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.lines_valid"]], "lines_valid (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.lines_valid"]], "lines_valid (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.lines_valid"]], "lines_valid (ape.types.coverage.functioncoverage property)": [[17, "ape.types.coverage.FunctionCoverage.lines_valid"]], "location (ape.types.coverage.coveragestatement attribute)": [[17, "ape.types.coverage.CoverageStatement.location"]], "log_index (ape.types.contractlog attribute)": [[17, "ape.types.ContractLog.log_index"]], "miss_count (ape.types.coverage.contractcoverage property)": [[17, "ape.types.coverage.ContractCoverage.miss_count"]], "miss_count (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.miss_count"]], "miss_count (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.miss_count"]], "miss_count (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.miss_count"]], "miss_count (ape.types.coverage.functioncoverage property)": [[17, "ape.types.coverage.FunctionCoverage.miss_count"]], "model_dump() (ape.types.coverage.contractcoverage method)": [[17, "ape.types.coverage.ContractCoverage.model_dump"]], "model_dump() (ape.types.coverage.contractsourcecoverage method)": [[17, "ape.types.coverage.ContractSourceCoverage.model_dump"]], "model_dump() (ape.types.coverage.coverageproject method)": [[17, "ape.types.coverage.CoverageProject.model_dump"]], "model_dump() (ape.types.coverage.coveragereport method)": [[17, "ape.types.coverage.CoverageReport.model_dump"]], "model_dump() (ape.types.coverage.functioncoverage method)": [[17, "ape.types.coverage.FunctionCoverage.model_dump"]], "name (ape.types.coverage.contractcoverage attribute)": [[17, "ape.types.coverage.ContractCoverage.name"]], "name (ape.types.coverage.coverageproject attribute)": [[17, "ape.types.coverage.CoverageProject.name"]], "name (ape.types.coverage.functioncoverage attribute)": [[17, "ape.types.coverage.FunctionCoverage.name"]], "pcs (ape.types.coverage.coveragestatement attribute)": [[17, "ape.types.coverage.CoverageStatement.pcs"]], "profile_statement() (ape.types.coverage.functioncoverage method)": [[17, "ape.types.coverage.FunctionCoverage.profile_statement"]], "projects (ape.types.coverage.coveragereport attribute)": [[17, "ape.types.coverage.CoverageReport.projects"]], "recover_signer() (ape.types.signatures method)": [[17, "ape.types.signatures.recover_signer"]], "source_folders (ape.types.coverage.coveragereport attribute)": [[17, "ape.types.coverage.CoverageReport.source_folders"]], "source_id (ape.types.coverage.contractsourcecoverage attribute)": [[17, "ape.types.coverage.ContractSourceCoverage.source_id"]], "sources (ape.types.coverage.coverageproject attribute)": [[17, "ape.types.coverage.CoverageProject.sources"]], "sources (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.sources"]], "statements (ape.types.coverage.contractcoverage property)": [[17, "ape.types.coverage.ContractCoverage.statements"]], "statements (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.statements"]], "statements (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.statements"]], "statements (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.statements"]], "statements (ape.types.coverage.functioncoverage attribute)": [[17, "ape.types.coverage.FunctionCoverage.statements"]], "tag (ape.types.coverage.coveragestatement attribute)": [[17, "ape.types.coverage.CoverageStatement.tag"]], "timestamp (ape.types.contractlog property)": [[17, "ape.types.ContractLog.timestamp"]], "timestamp (ape.types.coverage.coveragereport attribute)": [[17, "ape.types.coverage.CoverageReport.timestamp"]], "total_functions (ape.types.coverage.contractsourcecoverage property)": [[17, "ape.types.coverage.ContractSourceCoverage.total_functions"]], "total_functions (ape.types.coverage.coverageproject property)": [[17, "ape.types.coverage.CoverageProject.total_functions"]], "total_functions (ape.types.coverage.coveragereport property)": [[17, "ape.types.coverage.CoverageReport.total_functions"]], "transaction_hash (ape.types.contractlog attribute)": [[17, "ape.types.ContractLog.transaction_hash"]], "transaction_index (ape.types.contractlog attribute)": [[17, "ape.types.ContractLog.transaction_index"]], "version (ape.types.signatures.signablemessage attribute)": [[17, "ape.types.signatures.SignableMessage.version"]], "baseinterface (class in ape.utils)": [[18, "ape.utils.BaseInterface"]], "baseinterfacemodel (class in ape.utils)": [[18, "ape.utils.BaseInterfaceModel"]], "contracts (ape.utils.tracestyles attribute)": [[18, "ape.utils.TraceStyles.CONTRACTS"]], "delegate (ape.utils.tracestyles attribute)": [[18, "ape.utils.TraceStyles.DELEGATE"]], "extraattributesmixin (class in ape.utils)": [[18, "ape.utils.ExtraAttributesMixin"]], "extramodelattributes (class in ape.utils)": [[18, "ape.utils.ExtraModelAttributes"]], "gas_cost (ape.utils.tracestyles attribute)": [[18, "ape.utils.TraceStyles.GAS_COST"]], "generateddevaccount (class in ape.utils)": [[18, "ape.utils.GeneratedDevAccount"]], "githubclient (class in ape.utils)": [[18, "ape.utils.GithubClient"]], "inputs (ape.utils.tracestyles attribute)": [[18, "ape.utils.TraceStyles.INPUTS"]], "joinablequeue (class in ape.utils)": [[18, "ape.utils.JoinableQueue"]], "methods (ape.utils.tracestyles attribute)": [[18, "ape.utils.TraceStyles.METHODS"]], "outputs (ape.utils.tracestyles attribute)": [[18, "ape.utils.TraceStyles.OUTPUTS"]], "struct (class in ape.utils)": [[18, "ape.utils.Struct"]], "structparser (class in ape.utils)": [[18, "ape.utils.StructParser"]], "tracestyles (class in ape.utils)": [[18, "ape.utils.TraceStyles"]], "value (ape.utils.tracestyles attribute)": [[18, "ape.utils.TraceStyles.VALUE"]], "add_padding_to_strings() (in module ape.utils)": [[18, "ape.utils.add_padding_to_strings"]], "additional_error_message (ape.utils.extramodelattributes attribute)": [[18, "ape.utils.ExtraModelAttributes.additional_error_message"]], "address (ape.utils.generateddevaccount attribute)": [[18, "ape.utils.GeneratedDevAccount.address"]], "allow_disconnected() (in module ape.utils)": [[18, "ape.utils.allow_disconnected"]], "ape.utils": [[18, "module-ape.utils"]], "ape_org (ape.utils.githubclient property)": [[18, "ape.utils.GithubClient.ape_org"]], "attributes (ape.utils.extramodelattributes attribute)": [[18, "ape.utils.ExtraModelAttributes.attributes"]], "available_plugins (ape.utils.githubclient property)": [[18, "ape.utils.GithubClient.available_plugins"]], "clone_repo() (ape.utils.githubclient method)": [[18, "ape.utils.GithubClient.clone_repo"]], "decode_output() (ape.utils.structparser method)": [[18, "ape.utils.StructParser.decode_output"]], "default_name (ape.utils.structparser property)": [[18, "ape.utils.StructParser.default_name"]], "download_package() (ape.utils.githubclient method)": [[18, "ape.utils.GithubClient.download_package"]], "encode_input() (ape.utils.structparser method)": [[18, "ape.utils.StructParser.encode_input"]], "expand_environment_variables() (in module ape.utils)": [[18, "ape.utils.expand_environment_variables"]], "extract_nested_value() (in module ape.utils)": [[18, "ape.utils.extract_nested_value"]], "gas_estimation_error_message() (in module ape.utils)": [[18, "ape.utils.gas_estimation_error_message"]], "generate_dev_accounts() (in module ape.utils)": [[18, "ape.utils.generate_dev_accounts"]], "get() (ape.utils.extramodelattributes method)": [[18, "ape.utils.ExtraModelAttributes.get"]], "get_all_files_in_directory() (in module ape.utils)": [[18, "ape.utils.get_all_files_in_directory"]], "get_current_timestamp_ms() (in module ape.utils)": [[18, "ape.utils.get_current_timestamp_ms"]], "get_package_version() (in module ape.utils)": [[18, "ape.utils.get_package_version"]], "get_relative_path() (in module ape.utils)": [[18, "ape.utils.get_relative_path"]], "get_release() (ape.utils.githubclient method)": [[18, "ape.utils.GithubClient.get_release"]], "get_repo() (ape.utils.githubclient method)": [[18, "ape.utils.GithubClient.get_repo"]], "include_getattr (ape.utils.extramodelattributes attribute)": [[18, "ape.utils.ExtraModelAttributes.include_getattr"]], "include_getitem (ape.utils.extramodelattributes attribute)": [[18, "ape.utils.ExtraModelAttributes.include_getitem"]], "injected_before_use (class in ape.utils)": [[18, "ape.utils.injected_before_use"]], "is_array() (in module ape.utils)": [[18, "ape.utils.is_array"]], "is_evm_precompile() (in module ape.utils)": [[18, "ape.utils.is_evm_precompile"]], "is_named_tuple() (in module ape.utils)": [[18, "ape.utils.is_named_tuple"]], "is_struct() (in module ape.utils)": [[18, "ape.utils.is_struct"]], "is_zero_hex() (in module ape.utils)": [[18, "ape.utils.is_zero_hex"]], "items() (ape.utils.struct method)": [[18, "ape.utils.Struct.items"]], "join() (ape.utils.joinablequeue method)": [[18, "ape.utils.JoinableQueue.join"]], "load_config() (in module ape.utils)": [[18, "ape.utils.load_config"]], "model_config (ape.utils.baseinterfacemodel attribute)": [[18, "ape.utils.BaseInterfaceModel.model_config"]], "model_config (ape.utils.extramodelattributes attribute)": [[18, "ape.utils.ExtraModelAttributes.model_config"]], "model_fields (ape.utils.baseinterfacemodel attribute)": [[18, "ape.utils.BaseInterfaceModel.model_fields"]], "model_fields (ape.utils.extramodelattributes attribute)": [[18, "ape.utils.ExtraModelAttributes.model_fields"]], "name (ape.utils.extramodelattributes attribute)": [[18, "ape.utils.ExtraModelAttributes.name"]], "pragma_str_to_specifier_set() (in module ape.utils)": [[18, "ape.utils.pragma_str_to_specifier_set"]], "private_key (ape.utils.generateddevaccount attribute)": [[18, "ape.utils.GeneratedDevAccount.private_key"]], "raises_not_implemented() (in module ape.utils)": [[18, "ape.utils.raises_not_implemented"]], "register() (ape.utils.singledispatchmethod method)": [[18, "ape.utils.singledispatchmethod.register"]], "returns_array() (in module ape.utils)": [[18, "ape.utils.returns_array"]], "run_until_complete() (in module ape.utils)": [[18, "ape.utils.run_until_complete"]], "singledispatchmethod (class in ape.utils)": [[18, "ape.utils.singledispatchmethod"]], "spawn() (in module ape.utils)": [[18, "ape.utils.spawn"]], "stream_response() (in module ape.utils)": [[18, "ape.utils.stream_response"]], "use_temp_sys_path (class in ape.utils)": [[18, "ape.utils.use_temp_sys_path"]]}}) \ No newline at end of file diff --git a/v0.7.6/userguides/accounts.html b/v0.7.6/userguides/accounts.html new file mode 100644 index 0000000000..2438e02f85 --- /dev/null +++ b/v0.7.6/userguides/accounts.html @@ -0,0 +1,534 @@ + + + + + + + Accounts — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    Accounts

    +

    Accounts in Ape come from AccountAPI implementations (e.g. from plugins). +There are typically two types of accounts:

    +
      +
    1. Test accounts

    2. +
    3. Live network accounts

    4. +
    +

    Test accounts are useful for local network testing and debugging contracts. +Live network accounts are for interacting with live blockchains and should be secured.

    +

    To learn more about Ethereum accounts, see the Ethereum documentation.

    +
    +

    Test Accounts

    +

    Ape ships with pytest fixtures to assist in writing your tests.

    +
    +

    Use test accounts in tests

    +

    Pre-funded test accounts are accessible via the accounts fixture.

    +
    def test_my_contract_method(accounts):
    +    sender = accounts[0]
    +    ...
    +
    +
    +
    +
    +

    Use test accounts outside of tests

    +

    To access the same prefunded accounts in your scripts or console, use the root accounts object and the test_accounts property:

    +
    from ape import accounts
    +
    +sender = accounts.test_accounts[0]
    +
    +
    +

    You can configure your test accounts using your ape-config.yaml file:

    +
    test:
    +  mnemonic: test test test test test test test test test test test junk
    +  number_of_accounts: 5
    +
    +
    +

    WARN: NEVER put a seed phrase with real funds here. +The accounts generated from this seed are solely for testing and debugging purposes.

    +
    +
    +

    Creating new test accounts

    +

    You can create a new test account by doing the following:

    +
    from ape import accounts
    +
    +account = accounts.test_accounts.generate_test_account()
    +
    +
    +

    NOTE: Creating a new test account means it will be unfunded by default.

    +

    Learn more about test accounts from the testing guide.

    +

    If your testing provider supports this feature, it is possible to directly set the balances of any address by performing the following action:

    +
    account.balance += int(1e18)  # Gives `account` 1 Ether
    +
    +
    +
    +
    +

    Default Sender Support

    +

    In order to eliminate the usage of sender in contract calls, you can use use_sender context manager.

    +
    with accounts.use_sender(0): # Use first account from test mnemonic
    +  contract.myFunction(1)
    +
    +with accounts.use_sender("<address>"): # Impersonate an account
    +  contract.myFunction(1)
    +
    +with accounts.use_sender(a): # a is a `TestAccountAPI` object
    +  contract.myFunction(1)
    +
    +
    +
    +
    +
    +

    Live Network Accounts

    +

    When using live networks, you need to get your accounts into Ape. +To get your accounts in Ape, you must use an accounts plugin. +Ape ships with a keyfile-based account plugin, but you can use any account plugin such as ape-ledger, ape-trezor, or a third-party plugin.

    +
    +

    Keyfile Accounts

    +

    Ape ships with a keyfile-based account plugin that lets you import and generate accounts. +The premise of the plugin is that accounts are stored locally on your computer in the $HOME/.ape/accounts directory following the keyfile structure. +Under-the-hood, this structure comes from the eth-keyfile library via the eth-account package. +When Ape creates the keyfile, either from import or account-generation (described below!), it prompts you for a passphrase to use for encrypting the keyfile, similarly to how you would use a password in browser-based wallets. +The keyfile stores the private key in an encrypted-at-rest state, which maximizes security of the locally-stored key material.

    +

    The ape-accounts plugin lets you use keyfile-based account to sign messages and transactions. +When signing a message or transaction using an account from ape-accounts, you will be prompted to enter the passphrase you specified when importing or generating that account.

    +

    All the available CLI commands for this account’s plugin can be found here. +For example, you can generate an account:

    +
    ape accounts generate <ALIAS>
    +
    +
    +

    Ape will prompt you for entropy which is used to increase randomness when creating your account. +Ape will then prompt you whether you want to show your mnemonic. +If you do not want to see your mnemonic you can select n. +Alternatively, you can use the --hide-mnemonic option to skip the prompt.

    +
    ape accounts generate <ALIAS> --hide-mnemonic
    +
    +
    +

    If you elected to show your mnemonic Ape will then show you your newly generated mnemonic. +Ape will then prompt you for a passphrase which you will need to enter twice to confirm. +This passphrase is used to encrypt your account on disk, for extra security. +You will be prompted for it each time you load your account, so make sure to remember it. +After entering the passphrase Ape will then show you your new account address, HDPath, and account alias. +If you want to use a custom HDPath, use the --hd-path option:

    +
    ape accounts generate <ALIAS> --hd-path <HDPATH>
    +
    +
    +

    If you do not use the --hd-path option, Ape will use the default HDPath of (Ethereum network, first account). +If you want to use a custom mnemonic phrase word length, use the --word-count option:

    +
    ape accounts generate <ALIAS> --word-count <WORDCOUNT>
    +
    +
    +

    If you do not use the --word-count option, Ape will use the default word count of 12. +You can use all of these together or separately to control the way Ape creates and displays your account information. +If you already have an account and wish to import it into Ape (say, from Metamask), you can use the import command:

    +
    ape accounts import <ALIAS>
    +
    +
    +

    It will prompt you for the private key. +If you need help exporting your private key from Metamask, see this guide. +You can also import accounts from mnemonic seed by using the --use-mnemonic flag:

    +
    ape accounts import <ALIAS> --use-mnemonic
    +
    +
    +

    It will then prompt you for the mnemonic seed. +If you need help finding your mnemonic seed (Secret Recovery Phrase) in Metamask, see this guide. +In addition, you can also use a custom HDPath by using the --hd-path option:

    +
    ape accounts import <ALIAS> --use-mnemonic --hd-path <HDPATH>
    +
    +
    +

    If you use the --hd-path option, you will need to pass the HDPath you’d like to use as an argument in the command. +If you do not use the --hd-path option, Ape will use the default HDPath of (Ethereum network, first account). +You can also export the private key of an account:

    +
    ape accounts export <ALIAS>
    +
    +
    +

    Ape will ask you for the password to the account and then give you the private key of that account. +You can then use that private key with import. +You can alternatively load the private key into Metamask wallet. +Then, in your scripts, you can load an account:

    +
    from ape import accounts
    +
    +account = accounts.load("<ALIAS>")
    +
    +
    +
    +
    +

    Default Sender Support

    +

    In order to reduce repetition of adding sender in your contract calls, you can use use_sender context manager.

    +
    with accounts.use_sender(0):
    +  contract.myFunction(1)
    +
    +with accounts.use_sender("<address>"):
    +  contract.myFunction(1)
    +
    +with accounts.use_sender("<alias>"):
    +  contract.myFunction(1)
    +
    +with accounts.use_sender(a): # a is a `AccountAPI` object
    +  contract.myFunction(1)
    +
    +
    +
    +
    +
    +

    Signing Messages

    +

    You can sign messages with your accounts in Ape. +To do this, use the sign_message API.

    +
    from ape import accounts
    +from eth_account.messages import encode_defunct
    +
    +account = accounts.load("<ALIAS>")
    +message = encode_defunct(text="Hello Apes!")
    +signature = account.sign_message(message)
    +
    +
    +

    NOTE: Ape’s sign_message API intentionally accepts Any as the message argument type. +Account plugins decide what data-types to support. +Most Ethereum account plugins, such as ape-account, are able to sign messages like the example above. +However, you can also provide other types, such as a str directly:

    +
    from ape import accounts
    +
    +account = accounts.load("<ALIAS>")
    +signature = account.sign_message("Hello Apes!")
    +
    +
    +
    +

    EIP-712

    +

    Some account plugins are able to sign EIP-712 structured message types by utilizing the eip712 package. +Here is an example with custom EIP-712 classes:

    +
    from ape import accounts
    +from eip712.messages import EIP712Message, EIP712Type
    +
    +class Person(EIP712Type):
    +    name: "string"
    +    wallet: "address"
    +
    +class Mail(EIP712Message):
    +    _chainId_: "uint256" = 1
    +    _name_: "string" = "Ether Mail"
    +    _verifyingContract_: "address" = "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"
    +    _version_: "string" = "1"
    +
    +    sender: Person
    +    receiver: Person
    +
    +alice = Person(name="Alice", wallet="0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826") 
    +bob = Person("Bob", "0xB0B0b0b0b0b0B000000000000000000000000000")
    +message = Mail(sender=alice, receiver=bob)
    +
    +account = accounts.load("<ALIAS>")
    +account.sign_message(message)
    +
    +
    +
    +
    +

    Verifying Signature

    +

    Verify the signatures on your signed messages by using the recover_signer function or the check_signature function:

    +
    from ape import accounts
    +from ape.types.signatures import recover_signer
    +from eth_account.messages import encode_defunct
    +
    +account = accounts.load("<ALIAS>")
    +message = encode_defunct(text="Hello Apes!")
    +signature = account.sign_message(message)
    +
    +# Validate the signature by recovering the signer and asserting it is equal to the sender.
    +recovered_signer = recover_signer(message, signature)
    +assert recovered_signer == account.address
    +
    +# NOTE: You can also use the `check_signature` method on an account, which returns a bool.
    +assert account.check_signature(message, signature)
    +
    +
    +
    +
    +
    +

    Automation

    +

    If you use your keyfile accounts in automation, such as CI/CD, you may need to programmatically unlock them and enable auto-sign. +To do this, use a special environment variable for the account’s passphrase:

    +
    export APE_ACCOUNTS_<alias>_PASSPHRASE="a"
    +
    +
    +

    Where <alias> is the name of the account you want to use. +Now, you can use your account to make any transactions without subsequently providing your passphrase.

    +
    from ape import accounts
    +from eth_account.messages import encode_defunct
    +
    +account = accounts.load("<ALIAS>")
    +account.set_autosign(True)
    +
    +# Now, you will not be prompted to sign messages or transactions
    +message = encode_defunct(text="Hello Apes!")
    +signature = account.sign_message(message)
    +
    +
    +

    NOTE: Alternatively, you may use the passphrase= kwarg on methods account.set_autosign() and account.unlock(), but we highly recommend using the environment variable approach to avoid accidentally leaking your passphrase.

    +
    +
    +

    Hardware Wallets

    +

    Because of the plugin system in Ape, we are able to support other types of accounts including hardware wallet accounts. +Check out these plugins:

    + +

    To install one of these plugins, do the following:

    +
    ape plugins install ledger
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/userguides/clis.html b/v0.7.6/userguides/clis.html new file mode 100644 index 0000000000..09e487e596 --- /dev/null +++ b/v0.7.6/userguides/clis.html @@ -0,0 +1,448 @@ + + + + + + + CLIs — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    CLIs

    +

    Ape uses the click framework for handling all CLI functionality. +There are CLIs found in a couple areas in the Ape framework:

    +
      +
    1. Plugins

    2. +
    3. Scripts

    4. +
    +

    Both plugins and scripts utilize click for their CLIs.

    +

    For plugins, CLIs are an option for extending the framework. +You can read more about plugin development and CLIs in the developing plugins guide.

    +

    Scripts utilize CLIs as an option for users to develop their scripts. +You can read more about scripting and CLIs in the scripting guide.

    +

    This guide is for showcasing utilities that ship with Ape to assist in your CLI development endeavors.

    +
    +

    Ape Context Decorator

    +

    The @ape_cli_context gives you access to all the root Ape objects (accounts, networks etc.), the ape logger, and an abort method for stopping execution of your CLI gracefully. +Here is an example using all of those features from the cli_ctx:

    +
    import click
    +from ape.cli import ape_cli_context
    +
    +
    +@click.command()
    +@ape_cli_context()
    +def cmd(cli_ctx):
    +    cli_ctx.logger.info("Test")
    +    account = cli_ctx.account_manager.load("metamask")
    +    cli_ctx.abort(f"Bad account: {account.address}")
    +
    +
    +

    In Ape, it is easy to extend the CLI context object and use the extended version in your CLIs:

    +
    from ape.cli import ApeCliContextObject, ape_cli_context
    +import click
    +
    +class MyManager:
    +   """My custom manager."""
    +
    +class CustomContext(ApeCliContextObject):
    +   """Add new managers to your custom context"""
    +   my_manager: MyManager = MyManager()
    +   
    +   @property
    +   def signer(self):
    +      """Utilize existing managers in your custom context."""
    +      return self.account_manager.load("my_account")
    +
    +@click.command()
    +@ape_cli_context(obj_type=CustomContext)
    +def cli(cli_ctx):
    +    # Access your manager.
    +    print(cli_ctx.my_manager)
    +    # Access other Ape managers.
    +    print(cli_ctx.account_manager)
    +
    +
    +
    +
    +

    Network Tools

    +

    The @network_option() allows you to select an ecosystem, network, and provider. +To specify the network option, use values like:

    +
    --network ethereum
    +--network ethereum:sepolia
    +--network ethereum:mainnet:alchemy
    +--network ::foundry
    +
    +
    +

    To use default values automatically, omit sections of the choice, but leave the semi-colons for parsing. +For example, ::test means use the default ecosystem and network and the test provider.

    +

    Use ecosystem, network, and provider argument names in your command implementation to access their corresponding class instances:

    +
    import click
    +from ape.cli import network_option
    +
    +@click.command()
    +@network_option()
    +def cmd(provider):
    +   # This command only needs the provider.
    +   click.echo(provider.name)
    +
    +@click.command()
    +@network_option()
    +def cmd_2(ecosystem, network, provider):
    +   # This command uses all parts of the parsed network choice.
    +   click.echo(ecosystem.name)
    +   click.echo(network.name)
    +   click.echo(provider.name)
    +
    +
    +

    The ConnectedProviderCommand automatically uses the --network option and connects to the network before any of your code executes and then disconnects afterward. +This is useful if your script or command requires a provider connection in order for it to run. +Additionally, specify ecosystem, network, or provider in your command function if you need any of those instances in your ConnectedProviderCommand, just like when using network_option.

    +
    import click
    +from ape.cli import ConnectedProviderCommand
    +
    +@click.command(cls=ConnectedProviderCommand)
    +def cmd(network, provider):
    +   click.echo(network.name)
    +   click.echo(provider.is_connected)  # True
    +
    +@click.command(cls=ConnectedProviderCommand)
    +def cmd(provider):
    +   click.echo(provider.is_connected)  # True
    +
    +@click.command(cls=ConnectedProviderCommand)
    +def cmd():
    +   click.echo("Using params from ConnectedProviderCommand is optional")
    +
    +
    +
    +
    +

    Account Tools

    +

    Use the @account_option() for adding an option to your CLIs to select an account. +This option does several things:

    +
      +
    1. If you only have a single account in Ape (from both test accounts and other accounts), it will use that account as the default. +(this case is rare, as most people have more than one test account by default).

    2. +
    3. If you have more than one account, it will prompt you to select the account to use.

    4. +
    5. You can pass in an account alias or index to the option flag to have it use that account.

    6. +
    7. It allows you to specify test accounts by using a choice of TEST::{index_of_test_account}.

    8. +
    +

    Thus, if you use this option, no matter what, your script will have an account to use by the time the script starts. +Here is an example:

    +
    import click
    +from ape.cli import account_option
    +
    +
    +@click.command()
    +@account_option()
    +def cmd(account):
    +    # Will prompt the user to select an account if needed.
    +    click.echo(account.alias)
    +
    +
    +

    And when invoking the command from the CLI, it would look like the following: +(where <prefix> is either ape run for scripts or ape <custom-plugin-cmd> for plugins)

    +
    <prefix> cmd  # Use the default account.
    +<prefix> cmd --account 0  # Use first account that would show up in `get_user_selected_account()`.
    +<prefix> cmd --account metamask  # Use account with alias "metamask".
    +<prefix> cmd --account TEST::0  # Use the test account at index 0.
    +
    +
    +

    Alternatively, you can call the get_user_selected_account() directly to have more control of when the account gets selected:

    +
    import click
    +from ape.cli import select_account
    +
    +
    +@click.command()
    +def cmd():
    +   account = select_account("Select an account to use")
    +   click.echo(f"You selected {account.address}.")
    +
    +
    +

    Similarly, there are a couple custom arguments for aliases alone that are useful when making CLIs for account creation. +If you use @existing_alias_argument() and specify an alias does not already exist, it will error. +And visa-versa when using @non_existing_alias_argument().

    +
    import click
    +from ape.cli import existing_alias_argument, non_existing_alias_argument
    +
    +
    +@click.command()
    +@existing_alias_argument()
    +def delete_account(alias):
    +    # We know the alias is an existing account at this point.
    +    click.echo(alias)
    +
    +
    +@click.command()
    +@non_existing_alias_argument()
    +def create_account(alias):
    +    # We know the alias is not yet used in Ape at this point.
    +    click.echo(alias)
    +
    +
    +

    You can control additional filtering of the accounts by using the account_type kwarg. +Use account_type to filter the choices by specific types of AccountAPI, or you can give it a list of already known accounts, or you can provide a callable-filter that takes an account and returns a boolean.

    +
    import click
    +from ape import accounts
    +from ape.cli import existing_alias_argument, get_user_selected_account
    +from ape_accounts.accounts import KeyfileAccount
    +
    +# NOTE: This is just an example and not anything specific or recommended.
    +APPLICATION_PREFIX = "<FOO_BAR>"
    +
    +@click.command()
    +@existing_alias_argument(account_type=KeyfileAccount)
    +def cli_0(alias):
    +   pass
    +   
    +@click.command()
    +@existing_alias_argument(account_type=lambda a: a.alias.startswith(APPLICATION_PREFIX))
    +def cli_1(alias):
    +   pass
    +    
    +   
    +# Select from the given accounts directly.
    +my_accounts = [accounts.load("me"), accounts.load("me2")]
    +selected_account = get_user_selected_account(account_type=my_accounts)
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/userguides/compile.html b/v0.7.6/userguides/compile.html new file mode 100644 index 0000000000..5b22ab4bec --- /dev/null +++ b/v0.7.6/userguides/compile.html @@ -0,0 +1,373 @@ + + + + + + + Compile — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    Compile

    +

    Compile your project using the following command:

    +
    ape compile
    +
    +
    +

    Configure the location Ape looks for contracts by editing the contracts_folder key in your project’s ape-config.yaml file:

    +
    contracts_folder: src  # Default is 'contracts/'
    +
    +
    +
    +

    The JSON Compiler

    +

    Ape ships with a compiler that is able to compile .json files. +This compiler is useful for the following:

    +
      +
    1. Interfaces: If you know the address of an existing contract, you can include its ABI in your project and create a contract wrapper around it:

    2. +
    +
    from ape import project
    +
    +# Comes from a file named `MyInterface.json` in the contracts/ folder.
    +my_interface = project.MyInterface
    +address = "0x1234556b5Ed9202110D7Ecd637A4581db8b9879F"
    +
    +# Instantiate a deployed contract using the local interface.
    +contract = my_interface.at(address)
    +
    +# Call a method named `my_method` found in the local contract ABI.
    +contract.my_method()
    +
    +
    +
      +
    1. Pre-existing Contract Types: If you have a contract type JSON that was compiled elsewhere, you can include it in your project. +This is useful if you are unable or unwilling to install a compiler.

    2. +
    3. Raw Compiler Output: If you have an artifact with binary compiled elsewhere, you can include it in your project. +This is useful if you want to use contracts from much larger projects as dependency for your test cases.

    4. +
    +

    WARN: You may have to adjust name and source ID similarly to raw contract-type output.

    +
    +
    +

    Other Compiler Plugins

    +

    If your project includes Solidity (.sol) or Vyper (.vy) files, you will have to install additional compilers. +To include additional compilers in your project, you can add the plugins to the plugins list in your ape-config.yaml or install them using the CLI. +For information on how to configure plugins in your project, follow this guide.

    +
    +
    +

    Ignore Files

    +

    You can configure files to be ignored from compilation. +By default, Ape ignores files package.json, package-lock.json, tsconfig.json. +To override this list, edit your ape-config.yaml similarly:

    +
    compile:
    +  exclude:
    +    - "*package.json"
    +    - "*package-lock.json"
    +    - "*tsconfig.json"
    +    - "*custom.json"  # Append a custom ignore
    +
    +
    +

    NOTE: You must include the defaults in the list when overriding if you wish to retain them.

    +
    +
    +

    Dependencies

    +

    In Ape, compiler plugins typically let you have dependencies. +See this guide to learn more about configuring dependencies in Ape.

    +

    To always compile dependencies in Ape during the ape compile command, use the CLI flag --include-dependencies:

    +
    ape compile --include-dependencies
    +
    +
    +

    Alternatively, configure it to always happen:

    +
    compile:
    +  use_dependencies: true
    +
    +
    +
    +
    +

    Settings

    +

    Generally, configure compiler plugins using your ape-config.yaml file. +For example, when using the vyper plugin, you can configure settings under the vyper key:

    +
    vyper:
    +  version: 0.3.10
    +
    +
    +

    You can also configure adhoc settings in Python code:

    +
    from pathlib import Path
    +from ape import compilers
    +
    +settings = {"vyper": {"version": "0.3.7"}, "solidity": {"version": "0.8.0"}}
    +compilers.compile(
    +   ["path/to/contract.vy", "path/to/contract.sol"], settings=settings
    +)
    +
    +# Or, more explicitly:
    +vyper = compilers.get_compiler("vyper", settings=settings["vyper"])
    +vyper.compile([Path("path/to/contract.vy")])
    +
    +solidity = compilers.get_compiler("solidity", settings=settings["solidity"])
    +vyper.compile([Path("path/to/contract.sol")])
    +
    +
    +
    +
    +

    Compile Source Code

    +

    Instead of compiling project source files, you can compile code (str) directly:

    +
    from ape import accounts, compilers
    +
    +CODE = """
    +   ... source code here
    +"""
    +
    +container = compilers.compile_source(
    +   "vyper",
    +   CODE,
    +   settings={"vyper": {"version": "0.3.7"}}, 
    +   contractName="MyContract",
    +)
    +
    +owner = accounts.test_accounts[0]
    +
    +instance = container.deploy(sender=owner)
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/userguides/config.html b/v0.7.6/userguides/config.html new file mode 100644 index 0000000000..00b2677ac3 --- /dev/null +++ b/v0.7.6/userguides/config.html @@ -0,0 +1,399 @@ + + + + + + + Configure Ape — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    Configure Ape

    +

    You can configure Ape using configuration files with the name ape-config.yaml. +There are two locations you can place an ape-config.yaml file.

    +
      +
    1. In the root of your project

    2. +
    3. In your $HOME/.ape directory (global)

    4. +
    +

    Project settings take precedent, but global settings allow you to configure preferences across all projects, such as your default mainnet provider (e.g. Alchemy versus running your own node).

    +

    This guide serves as an index of the settings you can include in any ape-config.yaml file. +This guide is PURPOSELY alphabetized to facilitate easier look-up of keys.

    +

    Most of the features in this guide are documented more-fully elsewhere in the user-guides.

    +

    However, here is a list of common-use cases requiring the ape-config.yaml file to help you:

    +
      +
    1. Setting up a custom node RPC: See the geth section.

    2. +
    3. Setting up project dependencies: See the dependencies section.

    4. +
    5. Declaring your project’s plugins: See the plugins section.

    6. +
    +
    +

    Contracts Folder

    +

    Specify a different path to your contracts/ directory. +This is useful when using a different naming convention, such as src/ rather than contracts/.

    +
    contracts_folder: src
    +
    +
    +

    You can also use an absolute path. +This is useful for projects that compile contracts outside their directory.

    +
    contracts_folder: "~/GlobalContracts"
    +
    +
    +
    +
    +

    Default Ecosystem

    +

    You can change the default ecosystem by including the following:

    +
    default_ecosystem: fantom
    +
    +
    +

    The default ecosystem is ethereum.

    +
    +
    +

    Dependencies

    +

    Configure dependencies for your ape project. +To learn more about dependencies, see this guide.

    +

    A simple example of configuring dependencies looks like this:

    +
    dependencies:
    +  - name: OpenZeppelin
    +    github: OpenZeppelin/openzeppelin-contracts
    +    version: 4.4.2
    +
    +
    +
    +
    +

    Deployments

    +

    Set deployments that were made outside of Ape in your ape-config.yaml to create past-deployment-based contract instances in Ape: +(See this example for more information on this feature).

    +

    Config example:

    +
    deployments:
    +  ethereum:
    +    mainnet:
    +      - contract_type: MyContract
    +        address: 0x5FbDB2315678afecb367f032d93F642f64180aa3
    +    goerli:
    +      - contract_type: MyContract
    +        address: 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512
    +
    +
    +

    When connected to Ethereum mainnet, reference the deployment by doing:

    +
    from ape import project
    +
    +contract = project.MyContract.deployments[0]
    +
    +
    +

    NOTE: Ape does not add or edit deployments in your ape-config.yaml file.

    +
    +
    +

    Geth

    +

    When using the geth provider, you can customize its settings. +For example, to change the URI for an Ethereum network, do:

    +
    geth:
    +  ethereum:
    +    mainnet:
    +      uri: http://localhost:5030
    +
    +
    +

    Now, the ape-geth core plugin will use the URL http://localhost:5030 to connect and make requests.

    +

    WARN: Instead of using ape-geth to connect to an Infura or Alchemy node, use the ape-infura or ape-alchemy provider plugins instead, which have their own way of managing API keys via environment variables.

    +

    For more information on networking as a whole, see this guide.

    +
    +
    +

    Networks

    +

    Set default network and network providers:

    +
    ethereum:
    +  default_network: mainnet-fork
    +  mainnet_fork:
    +    default_provider: hardhat
    +
    +
    +

    Set the gas limit for a given network:

    +
    ethereum:
    +  default_network: mainnet-fork
    +  mainnet_fork:
    +    gas_limit: max
    +
    +
    +

    You may use one of:

    +
      +
    • "auto" - gas limit is estimated for each transaction

    • +
    • "max" - the maximum block gas limit is used

    • +
    • A number or numeric string, base 10 or 16 (e.g. 1234, "1234", 0x1234, "0x1234")

    • +
    • An object with key "auto" for specifying an estimate-multiplier for transaction insurance

    • +
    +

    To use the auto-multiplier, make your config like this:

    +
    ethereum:
    +  mainnet:
    +    gas_limit:
    +      auto:
    +        multiplier: 1.2  # Multiply 1.2 times the result of eth_estimateGas
    +
    +
    +

    For the local network configuration, the default is "max". Otherwise, it is "auto".

    +
    +
    +

    Plugins

    +

    Set which ape plugins you want to always use.

    +

    NOTE: The ape- prefix is not needed and shouldn’t be included here.

    +
    plugins:
    +  - name: solidity # ape-solidity plugin
    +    version: 0.1.0b2
    +  - name: ens
    +
    +
    +

    Install these plugins by running command:

    +
    ape plugins install .
    +
    +
    +
    +
    +

    Testing

    +

    Configure your test accounts:

    +
    test:
    +  mnemonic: test test test test test test test test test test test junk
    +  number_of_accounts: 5
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/userguides/console.html b/v0.7.6/userguides/console.html new file mode 100644 index 0000000000..95f421d496 --- /dev/null +++ b/v0.7.6/userguides/console.html @@ -0,0 +1,417 @@ + + + + + + + Ape Console — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    Ape Console

    +

    Ape provides an IPython interactive console with useful pre-defined locals to interact with your project.

    +
    ape console --network ethereum:mainnet
    +
    +In [1]: chain.blocks.head.timestamp
    +Out[1]: 1647323479
    +
    +
    +

    WARNING: Contract changes are not reflected in the active console session. +If you need to make changes to your contract, you must re-start your console session for the compiler to handle the changes.

    +
    +

    Ape Namespace

    +

    Your console comes with pre-initialized root ape objects in your namespace.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    Class

    accounts

    AccountManager

    networks

    NetworkManager

    chain

    ChainManager

    project

    ProjectManager

    query

    QueryManager

    convert

    convert

    ape

    ape

    +

    You can access them as if they are already initialized:

    +

    First, launch the console:

    +
    ape console
    +
    +
    +

    Then, type the name of the item and you will see its Python representation:

    +
    In [1]: networks
    +Out[1]: <NetworkManager active_provider=<test chain_id=61>>
    +
    +
    +

    NOTE: To change the network of the active console, use the --network option. +Follow this guide for more information on networks in Ape.

    +
    +
    +

    Namespace Extras

    +

    You can also create scripts to be included in the console namespace by adding a file (ape_console_extras.py) to your root project directory. All non-internal symbols from this file will be included in the console namespace. Internal symbols are prefixed by an underscore (_).

    +

    An example file might look something like this:

    +
    from eth_utils import encode_hex, decode_hex
    +
    +
    +def latest(key):
    +    return getattr(networks.active_provider.get_block("latest"), key)
    +
    +
    +

    Then both imported util functions and WETH_ADDRESS will be available when you launch the console.

    +
    In [1]: latest('number')
    +Out[1]: 14388241
    +
    +In [2]: encode_hex(latest('hash'))
    +Out[2]: '0x68f768988e9bd4be971d527f72483f321975fa52aff9692b6d0e0af71fb77aaf'
    +
    +
    +
    +

    Init Function

    +

    If you include a function named ape_init_extras, it will be executed with the symbols from the existing namespace being provided as keyword arguments. This allows you to alter the scripts namespace using locals already included in the Ape namespace. If you return a dict, these values will be added to the console namespace. For example, you could set up an initialized Web3.py object by using one from an existing Ape Provider.

    +
    def ape_init_extras(chain):
    +    return {"web3": chain.provider.web3}
    +
    +
    +

    Then web3 will be available to use immediately.

    +
    In [1]: web3.eth.chain_id
    +Out[1]: 1
    +
    +
    +
    +
    +

    Global Extras

    +

    You can also add an ape_console_extras.py file to the global ape data directory ($HOME/.ape/ape_console_extras.py) and it will execute regardless of what project context you are in. This may be useful for variables and utility functions you use across all of your projects.

    +
    +
    +
    +

    Configure

    +

    To automatically use other IPython extensions, add them to your ape-config.yaml file:

    +
    console:
    +  plugins:
    +    # A plugin that lets you modify Python modules without having close/reopen your console.
    +    - autoreload
    +
    +
    +
    +
    +

    Magic Commands

    +

    The ape-console plugin ships with custom magics that are available when running the ape console command or loading the ape_console.plugin IPython extension manually. +When starting an embedded console (from -I in ape run or ape test), you will have to load the extension manually. +To do this, run the following from any IPython environment:

    +
    In [1]: %load_ext ape_console.plugin
    +
    +
    +

    Or add the ape_console.plugin extension to your IPython config.

    +

    Otherwise, when launching ape console, the magics are automatically available.

    +
    +

    %ape

    +

    The %ape magic invokes the CLI in your ape-console session:

    +
    In [1]: %ape
    +Usage: cli [OPTIONS] COMMAND [ARGS]...
    +
    +Options:
    +  -v, --verbosity LVL  One of ERROR, WARNING, SUCCESS, INFO, or DEBUG
    +  --version            Show the version and exit.
    +  --config             Show configuration options (using `ape-config.yaml`)
    +  -h, --help           Show this message and exit.
    +
    +Commands:
    +  accounts  Manage local accounts
    +  cache     Query from caching database
    +  compile   Compile select contract source files
    +  console   Load the console
    +  init      Initalize an ape project
    +  networks  Manage networks
    +  plugins   Manage ape plugins
    +  run       Run scripts from the `scripts/` folder
    +  test      Launches pytest and runs the tests for a project
    +
    +Out[1]: <Result okay>
    +
    +
    +

    Run any CLI command this way without exiting your session.

    +
    +
    +

    %bal

    +

    The %bal magic outputs a human-readable balance on an account, contract, address, or account alias.

    +
    In [1]: account = accounts.load("metamask0")
    +
    +In [2]: %bal account
    +Out[2]: '0.00040634 ETH'
    +
    +In [3]: %bal metamask0
    +Out[3]: '0.00040634 ETH'
    +
    +In [4]: %bal 0xE3747e6341E0d3430e6Ea9e2346cdDCc2F8a4b5b
    +Out[4]: '0.00040634 ETH'
    +
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/userguides/contracts.html b/v0.7.6/userguides/contracts.html new file mode 100644 index 0000000000..28178e4a81 --- /dev/null +++ b/v0.7.6/userguides/contracts.html @@ -0,0 +1,630 @@ + + + + + + + Contracts — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    Contracts

    +

    You can interact with contracts pythonically using ape! +First, we need to obtain a contract instance. +One way to do this is to deploy a contract. +The other way is to initialize an already-deployed contract using its address.

    +
    +

    From Deploy

    +

    Deploy contracts from your project using the project root-level object. +You deploy contracts using Python functions such as AccountAPI.deploy or ContractContainer.deploy.

    +

    NOTE: You can run Ape’s deploy functions from anywhere you run Python!

    +

    You need both an account and a contract in order to deploy a contract, as the deployment process requires a transaction to submit the contract data to the blockchain. +To learn about accounts and how to use them, see the Accounts Guide. +You also need the contract. +You can access contract types from Ape’s root-level project object (e.g. project.MyContract) and their types are ContractContainer.

    +

    Let’s assume you have a Vyper contract like this:

    +
    contract MySmartContract:
    +    owner: public(address)
    +    balance: public(uint256)
    +
    +    @public
    +    @payable
    +    @public
    +    def __init__(arg1: uint256, arg2: address):
    +        self.owner = arg2
    +        self.balance = arg1
    +
    +
    +

    Before you can deploy this contract, you must ensure it was compiled. +To learn about compiling in Ape, please see this guide.

    +

    After it is compiled, you can deploy it. +Here is a basic example of Python code to deploy a contract:

    +
    from ape import accounts, project
    +
    +# You need an account to deploy, as it requires a transaction.
    +account = accounts.load("<ALIAS>")  # NOTE: <ALIAS> refers to your account alias!
    +contract = project.MyContract.deploy(1, account, sender=account)
    +
    +# NOTE: You can also do it this way:
    +contract2 = account.deploy(project.MyContract, 1, account)
    +
    +
    +

    The arguments to the constructor (1, account) can be in Python form. +Ape will automatically convert values in your transactions, thus allowing you to provide higher-level objects or abstractions as input types. +That is why, as you can see, the second argument is an AccountAPI object for the type address in the contract.

    +

    Notice in the example, we use project.MyContract to access the contract type. +To avoid naming collisions with other properties on the project object, you can alternatively use the get_contract() method to retrieve contract containers.

    +
    from ape import project
    +
    +contract = property.get_contract("MyContract")  # Same as `project.MyContract`.
    +
    +
    +

    Notice when deploying, we have to specify the sender= kwarg because deploy operations are transactions. +To learn more about contract interaction via transactions, see the Contract Interaction section below and the guide on transactions.

    +
    +

    Deploy Scripts

    +

    Often time, the deployment process may be unique or complex. +Or possibly, you need to run the deploy-logic from CI or in a repeatable fashion. +Or perhaps, you just want to avoid having to invoking Python directly. +In those cases, you can use Ape’s scripting system to save time and store your deployment logic. +Simply copy your Python logic into an Ape script and run it via:

    +
    ape run <my-deploy-script>
    +
    +
    +

    Learn how to do this and scripting in its entirity by reviewing the scripting user-guide.

    +

    There is no root ape command to deploy contracts; only the scripting-system, the console, or merely using Ape as a Python library.

    +

    If your deployment process is simple or only needs to happen once, it is easy to use ape console to achieve a deployment. +More information on how to use ape console can be found here.

    +
    +
    +

    Publishing

    +

    You can also publish the contract source code to an explorer upon deployment using the publish= kwarg on the deploy methods. +More information on publishing contracts can be found in this guide.

    +
    +
    +
    +

    From Project Contract Address

    +

    You can also use the at() method from the same top-level project manager when you know the address of an already-deployed contract:

    +
    from ape import project
    +
    +contract = project.MyContract.at("0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45")
    +
    +
    +
    +
    +

    From Any Address

    +

    If you already know the address of a contract, you can create instances of it using the Contract top-level factory:

    +
    from ape import Contract
    +
    +contract = Contract("0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45")
    +
    +
    +

    It will fetch the contract-type using the explorer plugin from the active network, such as ape-etherscan.

    +

    If you have the ENS plugin installed, you can use .eth domain names as the argument:

    +
    from ape import Contract
    +
    +contract = Contract("v2.registry.ychad.eth")
    +
    +
    +
    +
    +

    From ABIs

    +

    You can load contracts using their ABIs:

    +
    from ape import Contract
    +
    +address = "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45"
    +
    +# Using a JSON str:
    +contract = Contract(
    +    address, abi='[{"name":"foo","type":"fallback", "stateMutability":"nonpayable"}]'
    +)
    +
    +# Using a JSON file path:
    +contract = Contract(address, abi="abi.json")
    +
    +# Using a Python dictionary from JSON:
    +contract = Contract(
    +    address,
    +    abi=[{"name":"foo","type":"fallback", "stateMutability":"nonpayable"}]
    +)
    +
    +
    +

    This will create the Contract instance from the given ABI.

    +
    +
    +

    From Previous Deployment

    +

    Ape keeps track of your deployments for you so you can always refer back to a version that you deployed previously. +On live networks, this history of deployments is saved; on local networks, this history lasts for the duration of your script.

    +

    Let’s say you previously deployed a smart contract called MyContract on the rinkeby test network. +You could then refer back to it like so:

    +
    from ape import project, chain
    +
    +def main():
    +  my_contract = chain.contracts.get_deployments(project.MyContract)[-1]
    +
    +
    +

    or

    +
    from ape import project
    +
    +def main():
    +  my_contract = project.MyContract.deployments[-1]
    +
    +
    +

    my_contract will be of type ContractInstance. +get_deployments returns a list of deployments you made of that contract type.

    +
    +
    +

    Contract Interaction

    +

    Then, after you have a contract instance, you can call methods on the contract. +For example, let’s say you have a Vyper contract containing some functions:

    +
    @pure
    +@external
    +def get_static_list() -> DynArray[uint256, 3]:
    +    return [1, 2, 3]
    +
    +@external
    +def set_number(num: uint256):
    +    assert msg.sender == self.owner, "!authorized"
    +    self.prevNumber = self.myNumber
    +    self.myNumber = num
    +
    +
    +

    Notice the contract has both an external pure method and an external method that modifies state. +In EVM languages, methods that modify state require a transaction to execute because they cost money. +Modifying the storage of a contract requires gas and thus requires a sender with enough funding. +Contract calls, on the other hand, are read-operations and do not cost anything. +Thus, calls do not require specifying a sender= in Ape.

    +

    At the RPC level, Ethereum calls are performed using the eth_call RPC and transactions are performed using the eth_sendTransaction or eth_sendRawTransaction RPCs.

    +
    +

    Transactions

    +

    The following example demonstrates invoking a contract’s method in Ape as a transaction. +However, take note that there is a separate guide which fully covers transactions in Ape.

    +
    from ape import accounts, Contract
    +
    +account = accounts.load("<ALIAS>")
    +contract = Contract("0x...")  # Assume is deployed version of code above
    +
    +# Transaction: Invoke the `set_number()` function, which costs Ether
    +receipt = contract.set_number(sender=account)
    +assert not receipt.failed
    +
    +# The receipt contains data such as `gas_used`.
    +print(receipt.gas_used)
    +
    +
    +

    Notice that transacting returns a ReceiptAPI object which contains all the receipt data, such as gas_used.

    +

    NOTE: If you need the return_value from a transaction, you have to either treat transaction as a call (see the section below!) or use a provider with tracing-features enabled (such as ape-foundry or ape-geth) and access the return_value property on the receipt.

    +
    assert receipt.return_value == 123
    +
    +
    +

    For more general information on transactions in the Ape framework, see this guide.

    +
    +
    +

    Calls

    +

    In the Vyper code at the beginning of this section, the function get_static_list() is decorated as @pure indicating that it’s read-only. +(Also in Vyper, @view methods are read-only). +Since get_static_list() is read-only, we can successfully call it without a sender= kwarg; no funds are required. +Here is an example of making a call by checking the result of get_static_list():

    +
    from ape import accounts, Contract
    +
    +account = accounts.load("<ALIAS>")
    +contract = Contract("0x...")
    +
    +# CALL: A sender is not required for calls!
    +assert contract.get_static_list() == [1, 2, 3]
    +
    +
    +
    +
    +

    Calling Transactions and Transacting Calls

    +

    You can treat transactions as calls and vice-versa.

    +

    For example, let’s say we have a Solidity function:

    +
    function addBalance(uint256 new_bal) external returns(uint256) {
    +    balances[msg.sender] = new_bal;
    +    return balances[msg.sender];
    +}
    +
    +
    +

    To simulate the transaction without actually modifying any state, use the .call method from the contract transaction handler:

    +
    from ape import Contract
    +
    +contract = Contract("0x...")
    +
    +result = contract.addBalance.call(123)
    +assert result == "123"  # The return value gets forwarded from the contract.
    +
    +
    +

    Similarly, you may want to measure a call as if it were a transaction, in which case you can use the .transact attribute on the contract call handler:

    +

    Given the Solidity function:

    +
    function getModifiedBalance() external view returns(uint256) {
    +    return balances[msg.sender] + 123;
    +}
    +
    +
    +

    You can treat it like a transaction by doing:

    +
    from ape import accounts, Contract
    +
    +account = accounts.load("<ALIAS>")
    +contract = Contract("0x...")
    +
    +receipt = contract.getModifiedBalance.transact(sender=account)
    +assert not receipt.failed  # Transactions return `ReceiptAPI` objects.
    +print(receipt.gas_used)  # Analyze receipt gas from calls.
    +
    +
    +
    +
    +

    Default, Fallback, and Direct Calls

    +

    To directly call an address, such as invoking a contract’s fallback or receive method, call a contract instance directly:

    +
    from ape import Contract, accounts
    +
    +sender = accounts.load("<ALIAS>")  # NOTE: <ALIAS> refers to your account alias!
    +contract = Contract("0x123...")
    +
    +# Call the contract's fallback method.
    +receipt = contract(sender=sender, gas=40000, data="0x123")
    +
    +
    +
    +
    +

    Private Transactions

    +

    If you are using a provider that allows private mempool transactions, you are able to use the private=True kwarg to publish your transaction into a private mempool. +For example, EVM providers likely will use the eth_sendPrivateTransaction RPC to achieve this.

    +

    To send a private transaction, do the following:

    +
    receipt = contract.set_number(sender=dev, private=True)
    +
    +
    +

    The private=True is available on all contract interactions.

    +
    +
    +
    +

    Decoding and Encoding Inputs

    +

    If you want to separately decode and encode inputs without sending a transaction or making a call, you can achieve this with Ape. +If you know the method you want to use when decoding or encoding, you can call methods encode_input() or decode_input() on the method handler from a contract:

    +
    from ape import Contract
    +
    +# HexBytes(0x3fb5c1cb00000000000000000000000000000000000000000000000000000000000000de)
    +contract = Contract("0x...")
    +bytes_value = contract.my_method.encode_input(0, 1, 2)
    +
    +
    +

    In the example above, the bytes value returned contains the method ID selector prefix 3fb5c1c. +Alternatively, you can decode input:

    +
    from eth_pydantic_types import HexBytes
    +from ape import Contract
    +
    +contract = Contract("0x...")
    +selector_str, input_dict = contract.my_method.decode_input(HexBytes("0x123..."))
    +
    +
    +

    In the example above, selector_str is the string version of the method ID, e.g. my_method(unit256,uint256). +The input dict is a mapping of input names to their decoded values, e.g {"foo": 2, "owner": "0x123..."}. +If an input does not have a name, its key is its stringified input index.

    +

    If you don’t know the method’s ABI and you have calldata, you can use a ContractInstance or ContractContainer directly:

    +
    import ape
    +
    +# Fetch a contract
    +contract = ape.Contract("0x...")
    +
    +# Alternative, use a contract container from ape.project
    +# contract = ape.project.MyContract
    +
    +# Only works if unique amount of args.
    +bytes_value = contract.encode_input(0, 1, 2, 4, 5)
    +method_id, input_dict = contract.decode_input(bytes_value)
    +
    +
    +
    +
    +

    Contract Interface Introspection

    +

    There may be times you need to figure out ABI selectors and method or event identifiers for a contract. +A contract instance provides properties to make this easy. +For instance, if you have a 4-byte hex method ID, you can return the ABI type for that method:

    +
    import ape
    +
    +usdc = ape.Contract("0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48")
    +
    +# ABI type for a hex method ID
    +assert usdc.identifier_lookup['0x70a08231'].selector == 'balanceOf(address)'
    +
    +# Also, selectors from method and event signatures
    +assert usdc.selector_identifiers["balances(address)"] == "0x27e235e3"
    +
    +# Or dump all selectors and IDs
    +for identifier, abi_type in usdc.identifier_lookup.items():
    +    print(identifier, abi_type)
    +    # 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef type='event' name='Transfer' inputs=...
    +    # ...
    +
    +
    +

    These include methods and error IDs, as well as event topics.

    +
    +
    +

    Multi-Call and Multi-Transaction

    +

    The ape_ethereum core plugin comes with a multicall module containing tools for interacting with the multicall3 smart contract. +Multicall allows you to group function calls and transactions into a single call or transaction.

    +

    Here is an example of how you can use the multicall module:

    +
    import ape
    +from ape_ethereum import multicall
    +
    +
    +ADDRESSES = ("0xF4b8A02D4e8D76070bD7092B54D2cBbe90fa72e9", "0x80067013d7F7aF4e86b3890489AcAFe79F31a4Cb")
    +POOLS = [ape.project.IPool.at(a) for a in ADDRESSES]
    +
    +
    +def main():
    +    # Use multi-call.
    +    call = multicall.Call()
    +    for pool in POOLS:
    +        call.add(pool.getReserves)
    +    
    +    print(list(call()))
    +    
    +    # Use multi-transaction.
    +    tx = multicall.Transaction()
    +    for pool in POOLS:
    +        tx.add(pool.ApplyDiscount, 123)
    +    
    +    acct = ape.accounts.load("signer")
    +    for result in tx(sender=acct):
    +        print(result)
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/userguides/data.html b/v0.7.6/userguides/data.html new file mode 100644 index 0000000000..f93f13bf4d --- /dev/null +++ b/v0.7.6/userguides/data.html @@ -0,0 +1,325 @@ + + + + + + + Querying Data — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    Querying Data

    +

    Ape has advanced features for querying large amounts of on-chain data. +Ape provides this support through a number of standardized methods for working with data, +routed through our query management system, which incorporates data from many sources in +your set of installed plugins.

    +
    +

    Getting Block Data

    +

    Use ape console:

    +
    ape console --network ethereum:mainnet:infura
    +
    +
    +

    Run a few queries:

    +
    In [1]: df = chain.blocks.query("*", stop_block=20)
    +In [2]: chain.blocks[-2].transactions  # List of transactions in block
    +
    +
    +
    +
    +

    Getting Account Transaction Data

    +

    Each account within ape will also fetch and store transactional data that you can query. +To work with an account’s transaction data, you can do stuff like this:

    +
    In [1]: chain.history["example.eth"].query("value").sum()  # All value sent by this address
    +In [2]: acct = accounts.load("my-acct"); acct.history[-1]  # Last txn `acct` made
    +In [3]: acct.history.query("total_fees_paid").sum()  # Sum of ether paid for fees by `acct`
    +
    +
    +
    +
    +

    Getting Contract Event Data

    +

    On a deployed contract, you can query event history.

    +

    For example, we have a contract with a FooHappened event that you want to query from. +This is how you would query the args from an event:

    +
    In [1]: df = contract_instance.FooHappened.query("*", start_block=-1)
    +
    +
    +

    where contract_instance is the return value of owner.deploy(MyContract)

    +

    See this guide for more information how to deploy or load contracts.

    +
    +
    +

    Using the Cache

    +

    Note: This is in Beta release. +This functionality is in constant development and many features are in planning stages. +Use the cache plugin to store provider data in a sqlite database.

    +

    To use the cache, first you must initialize it for each network you plan on caching data for:

    +
    ape cache init --network <ecosystem-name>:<network-name>
    +
    +
    +

    Note: Caching only works for permanently available networks. It will not work with local development networks.

    +

    For example, to initialize the cache database for the Ethereum mainnet network, you would do the following:

    +
    ape cache init --network ethereum:mainnet
    +
    +
    +

    This creates a SQLite database file in ape’s data folder inside your home directory.

    +

    You can query the cache database directly, for debugging purposes. +The cache database has the following tables:

    + + + + + + + + + + + + + + + + + +

    Table Name

    Dataclass base

    blocks

    BlockAPI

    transactions

    ReceiptAPI

    contract_events

    ContractLog

    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/userguides/dependencies.html b/v0.7.6/userguides/dependencies.html new file mode 100644 index 0000000000..83a1753588 --- /dev/null +++ b/v0.7.6/userguides/dependencies.html @@ -0,0 +1,507 @@ + + + + + + + Dependencies — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    Dependencies

    +

    Ape downloads and caches dependencies in the .ape/packages/<name>/<version-id> directory where <name> refers to the name of the dependency and <version-id> refers to the version or branch of the package. +When first downloading dependencies, Ape only places the source contents in the sources field of the PackageManifest and leaves the contract_types field untouched. +This is because dependencies may not compile by Ape’s standard out-of-the-box but their contract types can still be used in projects that do.

    +

    To use dependencies in your projects, you must configure them in your ape-config.yaml file.

    +
    +

    Types of Dependencies

    +

    There are few dependency types that come with Ape. +The following section highlights how to use each of them and what their differences are.

    +
    +

    GitHub

    +

    You can use dependencies from GitHub. +For example, a common dependency for Solidity projects is Open Zeppelin. +To use Open Zeppelin version 4.4.2 in your Ape Solidity project, add the following to your ape-config.yaml file:

    +
    dependencies:
    +  - name: OpenZeppelin
    +    github: OpenZeppelin/openzeppelin-contracts
    +    version: 4.4.2
    +
    +
    +

    Then, follow the guide below about remappings to use the dependency.

    +

    An important WARNING about the version: key for GitHub dependencies: +The version: config first attempts to use an official GitHub release, but if the release is not found, it will check the release tags. +If you know the version is not available as an official release, bypass the original check by using the ref: key. +The ref: key is also used for installing branches.

    +

    For example, to install a version available as a git tag, do the following:

    +
    dependencies:
    +  - name: Uniswap
    +    github: Uniswap/v3-core
    +    ref: v1.0.0
    +
    +
    +

    The ref: config installs the code from that reference; the version: config uses the official GitHub release API, and then only if that fails will it check the git references. +Often times, the v prefix is required when using tags. +However, if cloning the tag fails, ape will retry with a v prefix. +Bypass the original failing attempt by including a v in your dependency config.

    +
    +
    +

    Local

    +

    You can use already-downloaded projects as dependencies by referencing them as local dependencies.

    +
    dependencies:
    +  - name: MyDependency
    +    local: local/path/to/MyDependency
    +    contracts_folder: src/contracts
    +
    +
    +

    This is helpful when:

    +
      +
    • Working on multiple packages at once.

    • +
    • When there is not a suitable DependencyAPI implementation available for downloading your dependency.

    • +
    • Testing the framework.

    • +
    +

    You can also reference local project manifests and use those as dependencies. +To do this, use a local value pointing to the manifest file, like this:

    +
    dependencies:
    +  - name: MyDependency
    +    local: ./my-dependency.json
    +    version: 1.0.0
    +
    +
    +
    +
    +

    NPM

    +

    You can use dependencies from NPM. +This is generally not recommended. +However, sometimes it is the only way to use a dependency.

    +

    To use a dependency from NPM, you must have already run npm install and that package must be present in your local node_modules folder. +Then, add the following to your config so that Ape can find the dependency:

    +
    dependencies:
    +  - name: MyDependency
    +    npm: "@myorg/mydependency"
    +    version: v1.3.0
    +
    +
    +
    +
    +
    +

    Package Management CLI

    +

    You can also install and / or compile dependencies using the pm CLI.

    +
    +

    list

    +

    To list information about the dependencies in your local project, run:

    +
    ape pm list
    +
    +
    +

    To list information about all installed dependencies across all projects, run:

    +
    ape pm list --all
    +
    +
    +

    You should see information like:

    +
    Packages:
    +  OpenZeppelin v4.6.0, compiled!
    +  vault master
    +  vault v0.4.5
    +  gnosis v1.3.0
    +
    +
    +
    +
    +

    install

    +

    To install all dependencies in your project, run:

    +
    ape pm install
    +
    +
    +

    If the dependencies are already cached and you want to re-install them, use the --force flag:

    +
    ape pm install --force
    +
    +
    +

    To install a dependency that is not in your config, you can specify it directly along with --name and --version:

    +
    ape pm install gh:OpenZeppelin/openzeppelin-contracts --name openzeppelin --version "4.6.0"
    +
    +
    +

    NOTE: The gh: prefix is used because this dependency is from GitHub. +For npm dependencies, you use an npm: prefix. +For local dependencies, you give it a path to the local dependency. +--version is not required when using a local dependency.

    +
    +
    +

    remove

    +

    Remove previously installed packages using the remove command:

    +
    ape pm remove OpenZeppelin
    +
    +
    +

    If there is a single version installed, the command will remove the single version. +If multiple versions are installed, pass additional arguments specifying the version(s) to be removed:

    +
    ape pm remove OpenZeppelin 4.5.0 4.6.0
    +
    +
    +

    To skip the confirmation prompts, use the --yes flag (abbreviated as -y):

    +
    ape pm remove OpenZeppelin all --yes
    +
    +
    +

    NOTE: Additionally, use the all special version key to delete all versions.

    +
    +
    +

    compile

    +

    Dependencies are not compiled when they are installed. +Dependencies are only compiled if you need them to be. +This is because often times a dependency will not compile in Ape on its own but its contract types can still be used in your project. +However, when working with dependency contracts directly, they will need to be compiled. +Ape compiles them as soon as you request the contracts from them, so it generally happens on the backend automatically. +However, you may want to recompile the dependencies, like when using a new compiler version or settings. +You can use the CLI to recompile.

    +
    ape pm compile OpenZeppelin --version 4.6.0 --force
    +
    +
    +

    NOTE: You only need to specify a version if you have more than one version of a dependency installed. +Otherwise, you just give it the name.

    +

    To compile all dependencies in your local project, run the command with no arguments while in your project:

    +
    ape pm compile
    +
    +
    +

    Alternatively, you can compile dependencies along with your project’s contracts by using the --include-dependencies flag in ape-compile:

    +
    ape compile --include-dependencies
    +
    +
    +
    +
    +
    +

    Misc

    +

    The following guidelines are applicable to ALL dependency types.

    +
    +

    Custom Contracts Folder

    +

    You can set the name of the dependency’s contracts folder, e.g.:

    +
    dependencies:
    +  - name: DappToolsERC20
    +    github: dapphub/erc20
    +    ref: dappnix
    +    contracts_folder: src
    +
    +
    +
    +
    +

    File Exclusions

    +

    To ignore files from a dependency project, use the exclude setting to specify glob patterns:

    +
    dependencies:
    +  - name: dependency-project-name
    +    github: org-name/dependency-project-name
    +    exclude:
    +      - package.json    # Ignore package.json files.
    +      - mocks/**/*      # Ignore all files in the 'mocks' directory
    +
    +
    +
    +
    +

    Config Override

    +

    To use any extra config item for a dependency, such as configurations for compilers needed during compiling, use the config_override setting:

    +
    dependencies:
    +  - name: dependency
    +    github: org-name/dependency-project-name
    +    config_override:
    +       solidity:
    +         evm_version: paris
    +
    +
    +
    +
    +

    Solidity Remappings

    +

    A common use-case for dependencies involves the Solidity plugin. +To use your dependencies in the ape-solidity plugin, configure import_remappings to refer to them:

    +
    dependencies:
    +  - name: OpenZeppelin
    +    github: OpenZeppelin/openzeppelin-contracts
    +    version: 4.4.2
    +
    +solidity: 
    +  import_remapping:
    +    - "@openzeppelin=OpenZeppelin/4.4.2"
    +
    +
    +

    Now, in your solidity files, import OpenZeppelin sources via:

    +
    import "@openzeppelin/token/ERC721/ERC721.sol";
    +
    +
    +
    +
    +

    Compiling Dependencies

    +

    Sometimes, you may need to access types (such as contract types) from dependencies. +You can achieve this using the project manager:

    +
    from ape import accounts, project
    +
    +# NOTE: This will compile the dependency
    +dependency_contract = project.dependencies["my_dependency"]["1.0.0"].DependencyContractType
    +my_account = accounts.load("alias")
    +deployed_contract = my_account.deploy(dependency_contract, "argument")
    +print(deployed_contract.address)
    +
    +
    +

    If you would like to always compile dependencies during ape compile rather than only have them get compiled upon asking for contract types, you can use the config option include_dependencies from the compile config:

    +
    compile:
    +  include_dependencies: true
    +
    +
    +

    Alternatively, use the --include-dependencies CLI flag:

    +
    ape compile --include-dependencies
    +
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/userguides/developing_plugins.html b/v0.7.6/userguides/developing_plugins.html new file mode 100644 index 0000000000..a45ccf4d82 --- /dev/null +++ b/v0.7.6/userguides/developing_plugins.html @@ -0,0 +1,423 @@ + + + + + + + Developing Plugins — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    Developing Plugins

    +

    Your plugin project can be any type of python project, so long as its package name starts with ape- (such as ape-ethereum). +The module and plugin directory name must start with ape_ (such as ape_ethereum). +To create an ape plugin, implement one or more API classes from the ape.api namespace and/or add key +ape_cli_subcommands to your entry-points list in your project’s setup.py, depending on what type of plugin you want to create. +This guide is intended to assist in both of those use cases.

    +

    The following is a list of example plugins to use as a reference when developing plugins:

    + +
    +

    Initialize a Plugin Project

    +

    As previously mentioned, a plugin project is merely a python project. +However, you can optionally use this project template for initializing your plugin. +NOTE: this template is primarily designed for plugins built within the ApeWorX team organization; not everything may apply. +It is okay to delete anything that does not work or that you don’t find helpful. +The template may be good to follow if you want to keep your plugin of similar quality to plugins developed by the ApeWorX team.

    +
    +
    +

    Implementing API Classes

    +

    API classes (classes from the ape.api namespace) are primarily composed of abstract methods and properties that plugins must implement. +A benefit of the plugin system is that each plugin can implement these however they need, so long as they conform to the API interface. +Two plugins with the same API may do entirely different things and yet be interchangeable in their usage.

    +

    To implement an API, import its class and use it as a base-class in your implementation class. +WARNING: The plugin will fail to work properly if you do not implement all the abstract methods.

    +
    from ape.api import ProviderAPI
    +from web3 import Web3, HTTPProvider
    +
    +
    +class MyProvider(ProviderAPI):
    +    _web3: Web3 = None  # type: ignore
    +    
    +    def connect(self):
    +        self._web3  = Web3(HTTPProvider(str("https://localhost:1337")))
    +
    +    """Implement rest of abstract methods"""
    +
    +
    +
    +

    Registering API Classes

    +

    Once you have finished implementing your API classes, you need to register them using the @plugins.register method decorator.

    +
    from ape import plugins
    +
    +# Here, we register our provider plugin so we can use it in 'ape'.
    +@plugins.register(plugins.ProviderPlugin)
    +def providers():
    +    # NOTE: 'MyProvider' defined in a prior code-block.
    +    yield "ethereum", "local", MyProvider
    +
    +
    +

    This decorator hooks into ape core and ties everything together by looking for all local installed site-packages that start with ape_. +Then, it will loop through these potential ape plugins and see which ones have created a plugin type registration. +If the plugin type registration is found, then ape knows this package is a plugin and attempts to process it according to its registration interface.

    +
    +
    +

    CLI Plugins

    +

    The ape CLI is built using the python package click. +To create a CLI plugin, create any type of click command (such as a click.group or a click.command).

    +

    _cli.py:

    +
    import click
    +
    +@click.group
    +def cli():
    +    """My custom commands."""
    +
    +
    +@cli.command()
    +def my_sub_cmd():
    +    """My subcommand."""
    +
    +
    +

    Then, register it using entrypoints, which is a built-in python registry of items declared in setup.py.

    +

    setup.py:

    +
    ...
    +entry_points={
    +    "ape_cli_subcommands": [
    +        "ape_myplugin=ape_myplugin._cli:cli",
    +    ],
    +},
    +...
    +
    +
    +

    NOTE: Typically, a _cli.py module is used instead of a __init__.py module for the location of the Click CLI group because it is logically separate from the Python module loading process. +If you try to define them together and use ape as a library as well, there is a race condition in the loading process that will prevent the CLI plugin from working.

    +

    For common click usages, use the ape.cli namespace. +For example, use the @existing_alias_argument() decorator) when you need a CLI argument for specifying an existing account alias: +Follow this guide to learn more about what you can do with the utilities found in ape.cli.

    +
    import click
    +from ape.cli import existing_alias_argument
    +
    +@click.command()
    +@existing_alias_argument()
    +def my_cmd(alias):
    +  click.echo(f"{alias} is an existing account!")
    +
    +
    +
    +
    +
    +

    Using Plugins

    +

    Once you have finished implementing and registering your API classes, they will now be part of ape. For example, +if you implemented the AccountAPI, you can now use accounts created from this plugin. The top-level ape manager +classes are indifferent about the source of the plugin.

    +
    from ape import accounts
    +
    +# The manager can load accounts from any account-based plugin.
    +my_ledger_account = accounts.load("ledger_0")  # Created using the 'ape-ledger' plugin
    +my_trezor_account = accounts.load("trezor_0")  # Created using the 'ape-trezor' plugin
    +
    +
    +

    Similarly, if you implemented a ProviderAPI, that provider is now accessible in the CLI via the --network option:

    +
    ape console my_script --network ethereum:local:my_provider_plugin
    +
    +
    +

    NOTE: The --network option is available on the commands test and console as well as any CLI command that uses the network option decorator. +To learn more about networks in Ape, follow this guide.

    +

    When creating the CLI-based plugins, you should see your CLI command as a top-level command in the ape --help output:

    +
    Commands:
    +  ...
    +  my-plugin  Utilities for my plugin
    +  ...
    +
    +
    +

    To edit the description of the CLI command (or group), you can either set the short_help kwarg or use a doc-str on the command:

    +
    import click
    +
    +
    +@click.command(short_help="Utilities for my plugin")
    +def cli():
    +    pass
    +
    +""" Or """
    +
    +@click.command()
    +def cli():
    +    """Utilities for my plugin"""
    +
    +
    +
    +
    +

    Logging

    +

    Use Ape’s logger in your plugin by importing it from the ape.logging module or by using it off the CLI context (from using the @ape_cli_context decorator).

    +
    +

    Import the logger from the logging module

    +
    from ape.logging import logger
    +
    +logger.info("This is a log message")
    +
    +
    +
    +
    +

    Use the logger from the @ape_cli_context

    +
    from ape.cli import ape_cli_context
    +
    +@ape_cli_context()
    +def my_command(cli_ctx):
    +  cli_ctx.logger.info("my log message")
    +
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/userguides/installing_plugins.html b/v0.7.6/userguides/installing_plugins.html new file mode 100644 index 0000000000..fd79644bab --- /dev/null +++ b/v0.7.6/userguides/installing_plugins.html @@ -0,0 +1,308 @@ + + + + + + + Plugins — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    Plugins

    +

    Plugins are core to Ape’s architecture. +Here are some plugin examples in Ape:

    +
      +
    • CompilerAPI: For supporting various languages, like Vyper or Solidity.

    • +
    • ProviderAPI: For connecting the blockchain, such as Alchemy, Geth, or a local Hardhat node.

    • +
    • EcosystemAPI: A suite of networks, such as Ethereum, Fantom, or Starknet.

    • +
    • CLI plugins: Extending the click CLI in Ape.

    • +
    +
    +

    Core Plugins

    +

    Ape ships with core plugins to help Ape work out-of-the-box. +To see the core plugins that come with Ape, run the following command:

    +
    ape plugins list --all
    +
    +
    +

    Normally, the ape plugins list command shows you all the plugins you have installed. +However, when you include the --all flag, it shows the core plugins and the available plugins as well. +NOTE: The available plugins list is trusted and from the ApeWorX organization, however you can install third-party plugins from other sources as well.

    +
    +
    +

    Installing Plugins

    +

    To add plugins to your project, edit your ape-config.yaml file:

    +
    plugins:
    +  - name: solidity
    +    version: 0.6.0
    +  - name: hardhat
    +  - name: ens
    +  - name: etherscan
    +    version: ">=0.6.2,<0.7"
    +
    +
    +

    The name field is required. +Additionally, you may specify a version with or without constraints.

    +

    To install the plugins listed in your project, run the following command from the project’s root directory:

    +
    ape plugins install .
    +
    +
    +

    To install plugins individually, run the following command:

    +
    ape plugins install vyper "solidity>=0.6,<0.7"
    +
    +
    +

    To install a plugin from a branch that is not yet released, you can use a git+ prefixed value for the version:

    +
    plugins:
    +  - name: foobar
    +    version: git+https://github.com/<owner-of-plugin>/ape-foobar.git@<branch/name>
    +
    +
    +

    Or from the CLI like:

    +
    ape plugins install "foobar@git+https://github.com/<owner-of-plugin>/ape-foobar.git@<branch/name>"
    +
    +
    +
    +
    +

    Plugin Types

    +

    There are many types of plugins available, including compilers, providers, networks, and CLI-based plugins. +To learn more about the different types of plugins, see the Developing a Plugin Guide.

    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/userguides/logging.html b/v0.7.6/userguides/logging.html new file mode 100644 index 0000000000..7088bb3392 --- /dev/null +++ b/v0.7.6/userguides/logging.html @@ -0,0 +1,317 @@ + + + + + + + Logging — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    Logging

    +

    Ape provides a logger and uses it to show messages throughout the execution of its modules. +Every CLI command comes with the logger in Ape, even custom user scripts (unless they change the behavior of --verbosity).

    +

    The following log levels are available with Ape:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Log Level

    Numeric Value

    Purpose

    Color

    DEBUG

    10

    Debug stuff

    Blue

    INFO

    20

    General information

    Blue

    SUCCESS

    21

    To mark a successful operation

    Green

    WARNING

    30

    Indicates a potential issue

    Yellow

    ERROR

    40

    An error occurred

    Red

    +

    NOTE: SUCCESS is a non-standard verbosity level custom to the framework. +It is shown during INFO but not shown if set to WARNING or above.

    +
    +

    CLI Logging

    +

    If you are running into issues and wish to see more information logged, you likely want to run your command with --verbosity DEBUG or -v debug:

    +
    ape --verbosity DEBUG my_cmd  # long form
    +ape -v debug my_cmd           # short form
    +
    +
    +

    This will output HTTP requests and anything else with a DEBUG logging verbosity in Ape.

    +

    Alternatively, you may wish to log less and show important logs, such as ERROR logs. +To do this, use the ERROR verbosity:

    +
    ape my_cmd -v ERROR 
    +
    +
    +

    NOTE: You can put the verbosity flag anywhere in your CLI command for most commands.

    +
    +
    +

    Python Logging

    +

    You can also import and use the logger in your own Python scripts or commands:

    +
    from ape.logging import logger, LogLevel
    +
    +def main():
    +    logger.info("You have entered `main()`.")
    +    logger.set_level(LogLevel.WARNING)
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/userguides/networks.html b/v0.7.6/userguides/networks.html new file mode 100644 index 0000000000..b6da2f5a36 --- /dev/null +++ b/v0.7.6/userguides/networks.html @@ -0,0 +1,707 @@ + + + + + + + Networks — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    Networks

    +

    When interacting with a blockchain, you will have to select an ecosystem (e.g. Ethereum, Arbitrum, or Fantom), a network (e.g. Mainnet or Goerli) and a provider (e.g. Eth-Tester, Geth, or Alchemy). +Networks are part of ecosystems and typically defined in plugins. +For example, the ape-ethereum plugin comes with Ape and can be used for handling EVM-like behavior.

    +
    +

    Selecting a Network

    +

    Before discussing how to add custom networks or install L2 network plugins, you need to know how to specify the network choice. +No matter what type of network you are using in Ape, you specify the network using a “network choice” triplet value:

    +
    "<ecosystem-name>:<network-name>:<provider-name>"
    +
    +
    +

    Where ecosystem-name refers to the ecosystem, e.g. ethereum, polygon, fantom, or any valid ecosystem plugin name. +The network-name refers to a network such as mainnet, local, or something else defined by your ecosystem or custom network config. +And provider-name refers to the provider plugin in Ape, such as geth for a generic node or foundry if the network is more Anvil-based, or a different plugin altogether.

    +

    Commonly, the network triplet value is specified via the --network option in Ape CLI commands. +The following is a list of common Ape commands that can use the --network option:

    +
    ape test --network ethereum:local:foundry
    +ape console --network arbitrum:testnet:alchemy # NOTICE: All networks, even from other ecosystems, use this.
    +
    +
    +

    To see all possible values for --network, run the command:

    +
    ape networks list
    +
    +
    +

    You can also use the --network option on scripts that use the main() method approach or scripts that implement that ConnectedProviderCommand command type. +See the scripting guide to learn more about scripts and how to add the network option.

    +

    Also, you can omit values to use defaults. +For example, the default ecosystem is ethereum and the default network is local, so you can do:

    +
    ape run <custom-cmd> --network ::foundry
    +
    +
    +

    as a short-cut for ethereum:local:foundry. +(note: <custom-command> refers to the name of a script that uses the network option or is a ConnectedProviderCommand. +See the scripting guide for more information).

    +

    Next, we will talk about how to add additional networks to your Ape environment.

    +
    +
    +

    L2 Networks

    +

    Common L2 networks, such as Arbitrum, Polygon, Optimism, or Fantom, have ApeWorX-maintained (trusted) plugins that override the Ethereum ecosystem API class and change any defaults that are needed. +You can install these plugins by doing:

    +
    ape plugins install arbitrum polygon optimism fantom
    +
    +
    +

    Each plugin does different things. +In general, L2 plugins are very small and override the Ethereum ecosystem class. +Here are some examples of changes L2 plugins make that allow improved support for these networks:

    +
      +
    1. Networks that don’t support EIP-1559 transactions use Static-fee transaction types by default whereas ape-ethereum will use EIP-1559 transactions by default.

    2. +
    3. Some networks, such as ape-arbitrum, have unique transaction types (and receipt types!) that are handled in the plugin. +This logic does not have to live in the base ape-ethereum plugin but can live in the network’s custom plugin.

    4. +
    5. Fee token information: When displaying gas reports or other data, network plugins can use the correct fee-token symbols, such as Polygon MATIC.

    6. +
    +

    Here is a list of all L2 network plugins supported by Ape:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    GitHub Path

    ape-avalanche

    ApeWorX/ape-avalanche

    ape-arbitrum

    ApeWorX/ape-arbitrum

    ape-base

    ApeWorX/ape-base

    ape-fantom

    ApeWorX/ape-fantom

    ape-optmism

    ApeWorX/ape-optimism

    ape-polygon

    ApeWorX/ape-polygon

    ape-polygon-zkevm

    ApeWorX/ape-polygon-zkevm

    +

    NOTE: If you are connecting an L2 network or any other network that does not have a plugin, you can use the custom network support, which is described in the next section.

    +

    Once you have the L2 network plugin installed, you can configure its node’s URI by setting the values in the geth (default node) core plugin via your ape-config.yaml file:

    +
    geth:
    +  <ecosystem-name>:
    +    <network-name>:
    +      uri: https://path.to.node.example.com
    +
    +
    +

    To see proper ecosystem and network names needed for configuration, run the command:

    +
    ape networks list
    +
    +
    +

    In the remainder of this guide, any example below using Ethereum, you can replace with an L2 ecosystem’s name and network combination.

    +
    +
    +

    Custom Network Connection

    +

    You can add custom networks to Ape without creating a plugin. +The two ways to do this are:

    +
      +
    1. Create custom network configurations in your ape-config.yaml file (typically your global one).

    2. +
    3. Use the --network flag with a raw URI string.

    4. +
    +
    +

    Custom Networks By Config

    +

    The most familiar way to use custom networks (non-plugin-based networks) in Ape is to use the networks: custom configuration. +Generally, you want to use the global ape-config.yaml, which is located in your $HOME/.ape/ directory. +By configuring networks globally, you can share them across all your projects. +More information about configuring Ape (in general) can be found here.

    +

    To add custom networks to your ape-config.yaml file, follow this pattern:

    +
    networks:
    +  custom:
    +     - name: mainnet                   # Required
    +       chain_id: 109                   # Required
    +       ecosystem: shibarium            # The ecosystem name, can either be new or an existing
    +       base_ecosystem_plugin: polygon  # The ecosystem base-class, defaults to the default ecosystem
    +       default_provider: geth          # Default is the generic node provider
    +
    +
    +

    The following paragraphs explain the different parameters of the custom network config.

    +

    name: The name of the network is the same identifier you use in the network triplet for the “network” (second) section. +Read more on the network option here.

    +

    chain_id: The chain ID is required for config-based custom networks. +It ensures you are on the correct network when making transactions and is very important!

    +

    ecosystem: Specify your custom network’s ecosystem. +This can either be an existing ecosystem or a new name entirely. +Recall, you refer to your network via the network-triplet ecosystem:network:provider option-str. +The ecosystem class is largely responsible for decoding and encoding data to-and-fro the blockchain but also contains all the networks. +More information about the EcosystemAPI can be found here. +If your custom network is part of a new ecosystem, such as Shibarium, use the name of the new ecosystem, e.g. "shibarium". +You may want to also adjust the base_ecosystem_plugin config to change the base-class used.

    +

    base_ecosystem_plugin: The plugin that defines the base-class to your custom ecosystem containing your custom network(s). +If your custom network’s ecosystem matches closer to another L2 instead of Ethereum, use that ecosystem name as your base_ecosystem_plugin in your custom network config. +For example, take note that "ethereum" assumes EIP-1559 exists (unless configured otherwise). +If your custom network is closer to Fantom, Polygon, Avalanche, or any other L2, you may want to consider using one of those plugins as the base_ecosystem_plugin to your custom network. +Alternatively, you can configure your custom network the same way you configure any other network in the config (see this section).

    +

    default_provider: The default provider is the provider class used for making the connection to your custom network, unless you specify a different provider (hence the default_). +Generally, you won’t change this and can use the default EVM node provider. +Many provider plugins won’t function here, such as ape-infura or ape-alchemy. +If you are using one of their networks, it is best to edit and use the plugins directly. +If you are using a developer-node remotely, such as a custom Anvil node, you can specify the default provider to be foundry instead. +However, take care in making sure you set up Foundry to correctly connect to your node. +Likewise, when using the default Ethereum node provider, you will need to tell it the RPC URL.

    +
    +

    RPC URL

    +

    To configure the RPC URL for a custom network, use the configuration of the provider. +For example, if the RPC URL is https://apenet.example.com/rpc, configure it by doing:

    +
    default_ecosystem: shibarium
    +
    +networks:
    +  custom:
    +    - name: mainnet
    +      ecosystem: shibarium
    +      base_ecosystem_plugin: polygon  # Closest base class.
    +      chain_id: 109  # This must be correct or txns will fail.
    +
    +geth:
    +  shibarium:
    +    mainnet:
    +      uri: https://www.shibrpc.com
    +
    +
    +

    Now, when using ethereum:apenet:geth, it will connect to the RPC URL https://apenet.example.com/rpc.

    +
    +
    +

    Explorer URL

    +

    To configure explorer URLs for your custom network, use the explorer’s plugin config. +For example, let’s say you added the following network:

    +
    networks:
    +  custom:
    +    - name: customnetwork
    +      chain_id: 31337
    +      default_provider: geth
    +
    +
    +

    To add a corresponding entry in ape-etherscan (assuming you are using ape-etherscan as your explorer plugin), add the following to your ape-config.yaml file:

    +
    etherscan:
    +  ethereum:
    +    rate_limit: 15  # Configure a rate limit that makes sense for retry logic.
    +    
    +    # The name of the entry is the same as your custom network!
    +    customnetwork:
    +      uri: https://custom.scan              # URL used for showing transactions
    +      api_uri: https://api.custom.scan/api  # URL used for making API requests.
    +
    +
    +

    NOTE: Every explorer plugin may be different in how you configure custom networks. +Consult the plugin’s README to clarify.

    +
    +
    +

    Block time, transaction type, and more config

    +

    Configuring network properties in Ape is the same regardless of whether it is custom or not. +As you saw above, we set the RPC URL of the custom network the same as if a plugin existed for that network. +The same is true for network config properties such as block_time, default_transaction_type, transaction_acceptance_timeout and more.

    +

    For example, let’s say I want to change the default transaction type for the apenet custom network (defined in examples above). +I do this the same way as if I were changing the default transaction type on mainnet.

    +
    ethereum:
    +  apenet:
    +    default_transaction_type: 0  # Use static-fee transactions for my custom network!
    +
    +
    +

    For a full list of network configurations like this (for both custom and plugin-based networks), see this section.

    +
    +
    +
    +

    Custom Networks by CLI

    +

    Ape also lets you connect to custom networks on-the-fly! +If you would like to connect to a URI using an existing ecosystem plugin, you can specify a URI in the provider-section for the --network option:

    +
    ape run script --network <ecosystem-name>:<network-name>:https://foo.bar
    +
    +
    +

    Additionally, if you want to connect to an unknown ecosystem or network, you can use the URI by itself. +This uses the default Ethereum ecosystem class.

    +
    ape run script --network https://foo.bar
    +
    +
    +

    WARNING: The recommended approach is to use an L2 plugin when one exists, as it will integrate better in the Ape ecosystem.

    +

    Here are some general reason why Network plugins are recommended:

    +
      +
    1. You may need to integrate with other plugins, such as explorer plugins for getting contract types.

    2. +
    3. Some chains may not implement EIP-1559 or may have forked from a specific configuration.

    4. +
    5. Response differences in uncommon blocks, such as the "pending" block or the genesis block.

    6. +
    7. Revert messages and exception-handling differences.

    8. +
    9. You can handle chain differences such as different transaction types in Arbitrum, non-EVM chains and behaviors like Starknet.

    10. +
    +
    +
    +
    +

    Configuring Networks

    +

    Change network defaults using your project’s ape-config.yaml file. +The following configuration changes the default ecosystem, network, and provider such that if you omitted the --network option on connected-provider commands, it would use the value <ecosystem-name>:<network-name>:<provider-name>.

    +
    default_ecosystem: <ecosystem-name>
    +
    +<ecosystem-name>:
    +  default_network: <network-name>
    +  <network-name>:
    +    default_provider: <provider-name>
    +
    +
    +

    As mentioned above, ecosystems and networks typically come from plugins and their names and values are defined in those plugins. +The ecosystem name goes in placeholder <ecosystem-name> and the network names go in place for <network-name>.

    +

    If you are unsure of the values to place here, run the following command:

    +
    ape networks list
    +
    +
    +

    This command lists all the ecosystem names and networks names installed currently in Ape. +Place the identical name in the config to configure that ecosystem or network.

    +

    You may also configure a specific gas limit for a given network:

    +
    <ecosystem-name>:
    +  default_network: <network-name>
    +  <network-name>:
    +    gas_limit: "max"
    +
    +
    +

    You may use one of:

    +
      +
    • "auto" - gas limit is estimated for each transaction

    • +
    • "max" - the maximum block gas limit is used

    • +
    • A number or numeric string, base 10 or 16 (e.g. 1234, "1234", 0x1234, "0x1234")

    • +
    +

    For the local network configuration, the default is "max". Otherwise, it is "auto".

    +
    +
    +

    Local Network

    +

    The default network in Ape is the local network (keyword "local"). +It is meant for running tests and debugging contracts. +Out-of-the-box, Ape ships with two development providers you can use for the local network:

    + +
    ape test --network ::test
    +ape test --network ::geth  # Launch a local development geth process
    +
    +
    +

    To learn more about testing in ape, follow this guide.

    +
    +
    +

    Live Networks

    +

    Use the core plugin ape-geth to connect to local or remote nodes via URI. +The geth plugin is abstract in that it represents any node, not just geth nodes. +However, it will work best when connected to a geth node. +To configure network URIs in geth, you can use the ape-config.yaml file:

    +
    geth:
    +  ethereum:
    +    mainnet:
    +      uri: https://foo.node.bar
    +
    +
    +
    +
    +

    Network Config

    +

    There are many ways to configure your networks. +Most of the time, Ape and its L2 plugins configure the best defaults automatically. +Thus, you most likely won’t need to modify these configurations. +However, you do need to configure these if you wish to stray from a network’s defaults. +The following example shows how to do this. +(note: even though this example uses ethereum:mainnet, you can use any of the L2 networks mentioned above, as they all have these config properties).

    +
    ethereum:
    +  mainnet:
    +    # Ethereum mainnet in Ape uses EIP-1559 by default,
    +    # but we can change that here. Note: most plugins
    +    # use type 0 by default already, so you don't need
    +    # to change this if using an `ape-<l2>` plugin.
    +    default_transaction_type: 0
    +
    +    # The amount of time to wait for a transaction to be
    +    # accepted after sending it before raising an error.
    +    # Most networks use 120 seconds (2 minutes).
    +    transaction_acceptance_timeout: 60
    +
    +    # The amount of times to retry fetching a receipt. This is useful 
    +    # because decentralized systems may show the transaction accepted 
    +    # on some nodes but not on others, and potentially RPC requests 
    +    # won't return a receipt immediately after sending its transaction.
    +    # This config accounts for such delay. The default is `20`.
    +    max_receipt_retries: 10
    +
    +    # Set a gas limit here, or use the default of "auto" which
    +    # estimates gas. Note: local networks tend to use "max" here
    +    # by default.
    +    gas_limit: auto
    +    
    +    # Base-fee multipliers are useful for times when the base fee changes
    +    # before a transaction is sent but after the base fee was derived,
    +    # thus causing rejection. A multiplier reduces the chance of
    +    # rejection. The default for live networks is `1.4` times the base fee.
    +    base_fee_multiplier: 1.2
    +    
    +    # The block time helps Ape make decisions about
    +    # polling chain data.
    +    block_time: 10
    +
    +
    +
    +
    +

    Running a Network Process

    +

    To run a network with a process, use the ape networks run command:

    +
    ape networks run
    +
    +
    +

    By default, ape networks run runs a development Geth process. +To use a different network, such as hardhat or Anvil nodes, use the --network flag:

    +
    ape networks run --network ethereum:local:foundry
    +
    +
    +
    +
    +

    Provider Interaction

    +

    Once you are connected to a network, you now have access to a .provider. +The provider class is what higher level Manager classes in Ape use to interface with the blockchain. +You can call methods directly from the provider, like this:

    +
    from ape import chain
    +
    +block = chain.provider.get_block("latest")
    +
    +
    +
    +
    +

    Provider Context Manager

    +

    Use the ProviderContextManager to change the network-context in Python. +When entering a network for the first time, it will connect to that network. +You do not need to call .connect() or .disconnect() manually.

    +

    For example, if you are using a script with a default network connection, you can change connection in the middle of the script by using the provider context manager:

    +
    from ape import chain, networks
    +
    +def main():
    +    start_provider = chain.provider.name
    +    with networks.ethereum.mainnet.use_provider("geth") as provider:
    +        # We are using a different provider than the one we started with.
    +        assert start_provider != provider.name
    +
    +
    +

    Jump between networks to simulate multi-chain behavior.

    +
    import click
    +from ape import networks
    +
    +@click.command()
    +def cli():
    +    with networks.polygon.mainnet.use_provider("geth"):
    +        ...
    +    with networks.ethereum.mainnet.use_provider("geth"):
    +        ...
    +
    +
    +

    The argument to use_provider() is the name of the provider you want to use. +You can also tell Ape to use the default provider by calling method use_default_provider() instead. +This will use whatever provider is set as default for your ecosystem / network combination (via one of your ape-config.yaml files).

    +

    For example, let’s say I have a default provider set like this:

    +
    arbitrum:
    +  mainnet:
    +    default_provider: alchemy
    +
    +
    +
    import ape
    +
    +# Use the provider configured as the default for the arbitrum::mainnet network.
    +# In this case, it will use the "alchemy" provider.
    +with ape.networks.arbitrum.mainnet.use_default_provider():
    +    ...
    +
    +
    +

    You can also use the parse_network_choice() method when working with network choice strings:

    +
    from ape import networks
    +
    +# Same as doing `networks.ethereum.local.use_provider("test")`.
    +with networks.parse_network_choice("ethereum:local:test") as provider:
    +    print(provider)
    +
    +
    +

    A note about disconnect: Providers do not disconnect until the very end of your Python session. +This is so you can easily switch network contexts in a bridge or multi-chain environment, which happens in fixtures and other sessions out of Ape’s control. +However, sometimes you may definitely want your temporary network session to end before continuing, in which case you can use the disconnect_after=True kwarg:

    +
    from ape import networks
    +
    +with networks.parse_network_choice("ethereum:local:foundry", disconnect_after=True) as provider:
    +    print(provider)
    +
    +
    +
    +

    Forked Context

    +

    Using the networks.fork() method, you can achieve similar effects to using a forked network with disconnect_after=True. +For example, let’s say we are running the following script on the network ethereum:mainnet. +We can switch to a forked network by doing this:

    +
    from ape import networks
    +
    +def main():
    +    with networks.fork("foundry"):
    +        ...
    +        # Do stuff on a local, forked version of mainnet
    +
    +    # Switch back to mainnet.
    +
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/userguides/projects.html b/v0.7.6/userguides/projects.html new file mode 100644 index 0000000000..363c9ede10 --- /dev/null +++ b/v0.7.6/userguides/projects.html @@ -0,0 +1,325 @@ + + + + + + + Developing Projects with Ape — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    Developing Projects with Ape

    +

    Use ape init to create your project. +A common project structure looks like this:

    +
    project                             # The root project directory
    +├── contracts/                      # Project source files, such as '.sol' or '.vy' files
    +│   └── smart_contract_example.sol  # Sample of a smart contract
    +├── tests/                          # Project tests, ran using the 'ape test' command
    +│   └── test_sample.py              # Sample of a test to run against your sample contract
    +├── scripts/                        # Project scripts, such as deploy scripts, ran using the 'ape run   <`name>' command
    +│   └── deploy.py                   # Sample script to automate a deployment of an ape project
    +└── ape-config.yaml                 # The ape project configuration file
    +
    +
    +

    Notice that you can configure you ape project using the ape-config.yaml file. +See the configuration guide for a more detailed explanation of settings you can adjust.

    +
    +

    Adding Plugins

    +

    Your project may require plugins. +To install plugins, use the ape plugins install . command. +Learn more about configuring your project’s required plugins by following this guide.

    +
    +
    +

    Compiling Contracts

    +

    The project manager object is a representation of your current project. +Access it from the root ape namespace:

    +
    from ape import project
    +
    +
    +

    Your project contains all the “relevant” files, such as source files in the contracts/ directory. +Use the following command to compile all contracts in the contracts/ directory:

    +
    ape compile
    +
    +
    +

    For more information on compiling your project, see this guide.

    +
    +
    +

    Deploying Contracts

    +

    After compiling, the contract containers are accessible from the project manager. +Deploy them in the console or in scripts; for example:

    +
    from ape import accounts, project
    +
    +account = accounts.load("my_account_alias")
    +account.deploy(project.MyContract)
    +
    +
    +

    NOTE: You can also deploy contracts from the container itself:

    +
    from ape import accounts, project
    +
    +account = accounts.load("my_account_alias")
    +project.MyContract.deploy(sender=account)
    +
    +
    +
    +

    Dependencies

    +

    To set up and use dependencies in your project, follow this guide.

    +
    +
    +
    +

    Scripts

    +

    The scripts folder contains project automation scripts, such as deploy scripts, as well as other executable jobs, such as scripts for running simulations. +To learn more about scripting in Ape, see the scripting guide.

    +
    +
    +

    Testing

    +

    Use tests to verify your project. +You can test your project using the ape test command. +The ape test command comes with the core-plugin ape-test. +The ape-test plugin extends the popular python testing framework pytest. +Testing is a complex topic; learn more about testing using Ape framework here.

    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/userguides/proxy.html b/v0.7.6/userguides/proxy.html new file mode 100644 index 0000000000..cd7508d0a7 --- /dev/null +++ b/v0.7.6/userguides/proxy.html @@ -0,0 +1,306 @@ + + + + + + + Proxy Contracts — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    Proxy Contracts

    +

    Ape is able to detect proxy contracts so that it uses the target interface when interacting with a contract. +The following proxies are supporting in ape-ethereum:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Proxy Type

    Short Description

    Minimal

    EIP-1167

    Standard

    EIP-1967

    Beacon

    EIP-1967

    UUPS

    EIP-1822

    Vyper

    vyper <0.2.9 create_forwarder_to

    Clones

    0xsplits clones

    Safe

    Formerly Gnosis Safe

    OpenZeppelin

    OZ Upgradable

    Delegate

    EIP-897

    ZeroAge

    A minimal proxy

    SoladyPush0

    Uses PUSH0

    +

    Proxy detection occurs when attempting to retrieve contract types in Ape. +Ape uses various sources to find contract types, such as explorer APIs. +See this guide to learn more about initializing contracts.

    +
    from ape import Contract
    +
    +my_contract = Contract("0x...")
    +
    +
    +

    Ape will check the address you give it and detect if hosts a proxy contract. +In the case where it determines the address is a proxy contract, it resolves the address of the implementation (every proxy is different) and returns the interface for the implementation contract. +This allows you to still call methods as you normally do on proxy contracts.

    +
    # `my_contract` address points to a proxy with no methods in the interface
    +# However, Ape detected the implementation type and can find methods to call that way.
    +my_contract.my_method(sender=account)
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/userguides/publishing.html b/v0.7.6/userguides/publishing.html new file mode 100644 index 0000000000..2fe346630c --- /dev/null +++ b/v0.7.6/userguides/publishing.html @@ -0,0 +1,300 @@ + + + + + + + Publishing — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    Publishing

    +

    Publishing smart-contract packages using Ape is influenced from EIP-2678 and uses the ethpm-types Python package extensively (which is also managed by the ApeWorX organization). +This guide exists to walk through the steps of publishing your project.

    +
    +

    Compilation

    +

    First, your project must compile.

    +
    ape compile
    +
    +
    +

    To learn more about project compilation, follow this guide. +Once your project has successfully compiled, you will have the start of your PackageManifest generated in your project’s .build/ directory.

    +
    +
    +

    Tracking Deployments

    +

    If your project contains deployments that you wish to include in its package manifest, use the track_deployment() method. +Example:

    +
    from ape import accounts, project
    +
    +account = accounts.load("mainnet-account")
    +
    +# Assume your project has a contract named 'MyContract' with constructor that accepts argument '123'.
    +contract = project.MyContract.deploy(123, sender=account)
    +project.track_deployment(contract)
    +
    +
    +

    If the contract is already deployed, you can use Contract to get a contract instance:

    +
    from ape import Contract, project
    +
    +contract = Contract("0x12c17f958d2ee523a2206206994597c13d831e34")
    +project.track_deployment(contract)
    +
    +
    +

    For more information on accessing contract instances, follow this guide.

    +
    +
    +

    Publishing to Explorer

    +

    If you want to publish your contracts to an explorer, you can use the publish_contract on the ExplorerAPI.

    +
    from ape import networks
    +
    +networks.provider.network.explorer.publish_contract("0x123...")
    +
    +
    +

    If you want to automatically publish the source code upon deployment, you can use the publish= kwarg on the deploy methods:

    +
    from ape import accounts, project
    +
    +account = accounts.load("<ALIAS>")
    +account.deploy(project.MyContract, publish=True)
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/userguides/quickstart.html b/v0.7.6/userguides/quickstart.html new file mode 100644 index 0000000000..bc8d048a50 --- /dev/null +++ b/v0.7.6/userguides/quickstart.html @@ -0,0 +1,434 @@ + + + + + + + Overview — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    Overview

    +

    Ape Framework is an easy-to-use Web3 development tool. +Users can compile, test, and interact with smart contracts all in one command line session. +With our modular plugin system, Ape supports multiple contract languages and chains.

    +

    Ape is built by ApeWorX LTD.

    +

    Join our ApeWorX Discord server to stay up to date on new releases, plugins and tutorials.

    +

    If you want to just get started, jump down to the Playing with Ape.

    +
    +

    Documentation

    +

    Read our technical documentation to get a deeper understanding of our open source Framework.

    +

    Read our academic platform will help you master Ape Framework with tutorials and challenges.

    +
    +
    +

    Prerequisite

    +

    In the latest release, Ape requires:

    +
      +
    • Linux or macOS

    • +
    • Python 3.8 up to 3.11

    • +
    • Windows: Install Windows Subsystem Linux (WSL)

    • +
    +

    Check your python version in a terminal with python3 --version.

    +
    +
    +

    Installation

    +

    There are three ways to install ape: pipx, pip, or Docker.

    +
    +

    Considerations for Installing:

    +
      +
    • If using pip, we advise using the most up-to-date version of pip to increase the chance of a successful installation.

      +
        +
      • See issue https://github.com/ApeWorX/ape/issues/1558.

      • +
      • To upgrade pip from the command line, run: pip install --upgrade pip.

      • +
      +
    • +
    • We advise installing in a virtualenv or venv to avoid interfering with OS-level site packages.

    • +
    • We advise installing ape with recommended plugins pip install eth-ape'[recommended-plugins]'.

    • +
    • We advise for macOS users to install virtual env via homebrew.

    • +
    +
    +
    +

    via pipx or pip

    +
      +
    1. Install pipx via their installation instructions or pip via their installation instructions.

    2. +
    3. Install ape via pipx install eth-ape or pip install eth-ape.

    4. +
    +
    +
    +

    via docker

    +

    Ape can also run in a docker container.

    +

    Please visit our Dockerhub for more details on using Ape with Docker.

    +
    docker run \
    +--volume $HOME/.ape:/home/harambe/.ape \
    +--volume $HOME/.vvm:/home/harambe/.vvm \
    +--volume $HOME/.solcx:/home/harambe/.solcx \
    +--volume $PWD:/home/harambe/project \
    +apeworx/ape compile
    +
    +
    +
    +
    +
    +

    Playing with Ape

    +

    After you installed Ape, you can run ape --version to make sure it works and is the latest version.

    +

    There are two ways to interact with Ape:

    + +

    Ape is both a CLI tool and a Python SDK.

    +

    The CLI tool contains all the Ape commands and the Python SDK contains the classes and types needed to compose scripts, console actions, and tests.

    +
    +
    +

    Ape Modular Plugin System:

    +

    Our modular plugin system is the best way to have the most interoperable experience with Web3.

    +

    NOTE: If a plugin does not originate from the ApeWorX GitHub Organization, you will get a warning about installing 3rd-party plugins.

    +

    Install 3rd party plugins at your own risk.

    +

    Additionally, plugins that come bundled with ape in the core installation cannot be removed and are part of the ape core software.

    + +
    +

    Accounts

    +

    In Ape, you will need accounts to make transactions. +You can import or generate accounts using the core accounts plugin:

    +
    ape accounts import acc0   # Will prompt for a private key
    +ape accounts generate acc1
    +
    +
    +

    List all your accounts with the list command.

    +
    ape accounts list
    +
    +
    +

    Learn more about accounts in Ape by following the accounts guide.

    +
    +
    +

    Plugins

    +

    Add any plugins you may need, such as vyper.

    +
    ape plugins list -a
    +ape plugins install vyper
    +ape plugins list -a
    +
    +
    +
    +
    +
    +

    Projects

    +

    When using Ape, you generally will work with a project.

    +

    Learn more about smart-contract projects from this projects guide.

    +
    +

    Compiling

    +

    You can compile contracts within the contracts/ directory of your project. +The --size option will display you the size of the contract.

    +
    ape compile --size
    +
    +
    +

    Learn more about compiling in Ape by following the compile guide.

    +
    +
    +

    Testing

    +

    Use Ape to test your smart-contract projects. +Provide the same arguments to pytest as you would to the ape test command.

    +

    For example:

    +
    ape test -k test_only_one_thing
    +
    +
    +

    Visit the testing guide to learn more about testing using Ape.

    +
    +
    +

    Console

    +

    Ape provides an IPython interactive console with useful pre-defined locals to interact with your project. +To interact with a deployed contract in a local environment, start by opening the console:

    +
    ape console --network ethereum:mainnet:infura
    +
    +
    +

    Visit Ape Console to learn how to use Ape Console.

    +
    +
    +

    Scripts

    +

    If you want to run specific files in a scripts/ directory, you can do it using the ape run command.

    +
    # This command will run a file named deploy in the scripts/ directory
    +$ ape run deploy
    +
    +
    +

    Learn more about scripting using Ape by following the scripting guide.

    +
    +
    +

    Logging

    +

    To enable debug logging, run your command with the --verbosity flag using DEBUG as the value:

    +
    ape --verbosity DEBUG run
    +
    +
    +
    +
    +

    Networks

    +

    You can work with registered networks, providers, and blockchain ecosystems (like Ethereum):

    +
    from ape import networks
    +with networks.ethereum.mainnet.use_provider("infura"):
    +    ...  # Work with the infura provider here
    +
    +
    +

    To learn more about networks in Ape, see this guide.

    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/userguides/scripts.html b/v0.7.6/userguides/scripts.html new file mode 100644 index 0000000000..fe720fff25 --- /dev/null +++ b/v0.7.6/userguides/scripts.html @@ -0,0 +1,375 @@ + + + + + + + Scripting — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    Scripting

    +

    You can write scripts that run using the ape run command. +The ape run command will register and run Python files defined under the scripts/ directory that do not start with an _ underscore.

    +
    +

    CLI Scripts

    +

    Place scripts in your project’s scripts/ directory. +Follow this guide to learn more about the Ape project structure. +If your scripts take advantage of utilities from our ape.cli submodule, you can build a Click command line interface by defining a click.Command or click.Group object called cli in your file: +Follow this guide to learn more about what you can do with the utilities found in ape.cli.

    +
    import click
    +
    +@click.command()
    +def cli():
    +    print("Hello world!")
    +
    +
    +

    Assume we named the script helloworld.py. +To execute the script, run the following:

    +
    ape run helloworld
    +
    +
    +

    You can also execute scripts in subdirectories. +For example, assuming we have script <project>/scripts/hello/helloworld.py, we would execute it by running:

    +
    ape run hello helloworld
    +
    +
    +

    Note: By default, cli scripts do not have ape.cli.network_option installed, giving you more flexibility in how you define your scripts. +However, you can add the network_option or ConnectedProviderCommand to your scripts by importing them from the ape.cli namespace:

    +
    import click
    +from ape.cli import ConnectedProviderCommand
    +
    +
    +@click.command(cls=ConnectedProviderCommand)
    +def cli(ecosystem, network):
    +    click(f"You selected a provider on ecosystem '{ecosystem.name}' and {network.name}.")
    +
    +@click.command(cls=ConnectedProviderCommand)
    +def cli(network, provider):
    +    click.echo(f"You are connected to network '{network.name}'.")
    +    click.echo(provider.chain_id)
    +
    +@click.command(cls=ConnectedProviderCommand)
    +def cli_2():
    +    click.echo(f"Using any network-based argument is completely optional.")
    +
    +
    +

    Assume we saved this script as shownet.py and have the ape-alchemy plugin installed. +Try changing the network using the --network option:

    +
    ape run shownet --network ethereum:mainnet:alchemy
    +
    +
    +
    +

    Multi-network Scripting

    +

    Because CLI-based scripts do not automatically connect to the provider before executing, they are ideal for multi-chain use-cases because they allow you to delay and manage the connection(s). +To learn more about how to control the network-context in Ape Pythonically, see this guide.

    +

    Here is an example of a multi-chain script:

    +
    import click
    +from ape.cli import ape_cli_context
    +
    +@click.command()
    +@ape_cli_context()
    +def cli(cli_ctx):        
    +    # There is no connection yet at this point.
    +    testnets = {
    +        "ethereum": ["sepolia", "goerli"],
    +        "polygon": ["mumbai"]
    +    }
    +    nm = cli_ctx.network_manager
    +
    +    for ecosystem_name, networks in testnets.items():
    +        ecosystem = nm.ecosystems[ecosystem_name]
    +
    +        for network_name in networks:
    +            # Start making connections.
    +            network = ecosystem.get_network(network_name)
    +
    +            with network.use_provider("alchemy") as provider:
    +                print(f"Connected to {provider.network_choice}")
    +
    +
    +

    Things to notice:

    +
      +
    1. It uses the CLI approach without cls=ConnectedProviderCommand; thus it is not connected before it makes the first call to .use_provider("alchemy").

    2. +
    3. It uses the @ape_cli_context() decorator to get access to Ape instances such as the network_manager.

    4. +
    5. Each network is only active during the context, thus allowing you to switch contexts and control chain-hopping in scripts.

    6. +
    7. You do not need to call .connect() on the provider yourself!

    8. +
    +
    +
    +
    +

    Main Method Scripts

    +

    You can also use the main-method approach when defining scripts. +To do this, define a method named main() in your script:

    +
    def main():
    +    print("Hello world!")
    +
    +
    +

    NOTE: main-method scripts will always provide a --network option and run in a connected-context. +Therefore, they are not ideal for multi-chain scripts. +main-method scripts work best for quick, single-network, connection-based workflows.

    +

    To demonstrate, use the following script:

    +
    from ape import networks
    +import click
    +
    +def main():
    +    ecosystem_name = networks.provider.network.ecosystem.name
    +    network_name = networks.provider.network.name
    +    provider_name = networks.provider.name
    +    click.echo(f"You are connected to network '{ecosystem_name}:{network_name}:{provider_name}'.")
    +
    +
    +

    Suppose the name of the script is foobar, you can run it via:

    +
    ape run foobar
    +
    +
    +

    Without specifying --network, the script with connect to your default network. +Else, specify the network using the --network flag:

    +
    ape run foobar --network polygon:mumbai:alchemy
    +
    +
    +

    You can also change networks within the script using the ProviderContextManager (see examples in the CLI-script section above). +For multi-chain use-cases, we recommend sticking to the CLI based scripts to avoid the initial connection main-method scripts make.

    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/userguides/testing.html b/v0.7.6/userguides/testing.html new file mode 100644 index 0000000000..a7fe614ecf --- /dev/null +++ b/v0.7.6/userguides/testing.html @@ -0,0 +1,871 @@ + + + + + + + Testing — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    Testing

    +

    Testing an ape project is important and easy.

    +
    +

    Pytest

    +

    Before learning how testing works in Ape, you should have an understanding of the pytest framework and its concepts such as fixtures, mark-decorators, and pytest plugins such as x-dist, pytest-mock, and pytest-cov. +Once you have learned about pytest, Ape testing becomes intuitive because it is built on top of pytest. +In fact, ape-test is itself a pytest plugin!

    +

    You write your smart-contracts much like you write regular Python tests.

    +
    +
    +

    Test Structure

    +

    Tests must be located in a project’s tests/ directory. Each test file must start with test_ and have the .py extension, such as test_my_contract.py. +Each test method within the file must also start with test_. +The following is an example test:

    +
    def test_add():
    +    assert 1 + 1 == 2
    +
    +
    +

    NOTE: pytest assumes the actual value is on the left and the expected value is on the right.

    +
    +
    +

    Test Pattern

    +

    Tests are generally divisible into three parts:

    +
      +
    1. Set-up

    2. +
    3. Invocation

    4. +
    5. Assertion

    6. +
    +

    An example of the setup-phase would be creating a pytest.fixture that deploys our smart contract. +(To learn more about pytest fixtures in Ape, see the Fixtures section below!) +For now, what you need to know is that it’s a piece of code that executes before the test runs, and it is decorated with a @pytest.fixture.

    +

    The second phase is Invocation, which encompasses invoking the function we are testing. +The last phase, Assertion, requires enacting on the expectation about how the code should behave. +Let’s assume there is an authorized_method() that requires the owner of the contract to make the transaction. +If the sender of the transaction is not the owner, the transaction will fail to complete and will revert. +We use assert statements in Ape (and pytest) to check that our expectations are correct. +A test passes if all the assert statements are True and it fails if any are False.

    +

    This is an example of how that test may look:

    +
    import ape
    +import pytest
    +
    +# SETUP PHASE
    +# NOTE: More on fixtures is discussed in later sections of this guide!
    +@pytest.fixture
    +def owner(accounts):
    +    return accounts[0]
    +
    +@pytest.fixture
    +def my_contract(owner, project):
    +    return owner.deploy(project.MyContract)
    +
    +def test_authorization(my_contract, owner, not_owner):
    +    # INVOCATION PHASE
    +    my_contract.set_owner(sender=owner)
    +    assert owner == my_contract.owner()
    +
    +    # ASSERTION PHASE
    +    with ape.reverts("!authorized"):
    +        my_contract.authorized_method(sender=not_owner)
    +
    +
    +
    +

    Note

    +

    Ape has built-in test and fixture isolation for all pytest scopes. +To disable isolation add the --disable-isolation flag when running ape test

    +
    +
    +
    +

    Fixtures

    +

    Now that we have discussed the full flow of a test, let’s dive deeper into the specific parts, starting with pytest.fixtures.

    +

    You can define and use pytest fixtures in your Ape tests. +Learn more about fixtures from this guide. +The syntax and functionalities of fixtures work exactly the same in Ape as it does with pytest.

    +

    The ape-test plugin comes with fixtures you will likely want to use. +The following guide explains each fixture that comes with Ape.

    +
    +

    accounts fixture

    +

    You have access to test accounts. +These accounts are automatically funded, and you can use them to transact in your tests. +Access each test account by index from the accounts fixture:

    +
    def test_my_method(accounts):
    +    owner = accounts[0]
    +    receiver = accounts[1]
    +
    +
    +

    For code readability and sustainability, create your own fixtures using the accounts fixture:

    +
    import pytest
    +
    +@pytest.fixture
    +def owner(accounts):
    +    return accounts[0]
    +
    +
    +@pytest.fixture
    +def receiver(accounts):
    +    return accounts[1]
    +
    +
    +def test_my_method(owner, receiver):
    +    ...
    +
    +
    +

    You can configure your accounts by changing the mnemonic or number_of_accounts settings in the test section of your ape-config.yaml file:

    +
    test:
    +  mnemonic: test test test test test test test test test test test junk
    +  number_of_accounts: 5
    +
    +
    +

    If you are running tests against anvil, your generated test accounts may not correspond to the anvil’s default generated accounts despite using the same mnemonic. In such a case, you are able to specify a custom derivation path in ape-config.yaml:

    +
    test:
    +  mnemonic: test test test test test test test test test test test junk
    +  number_of_accounts: 5
    +  hd_path: "m/44'/60'/0'/0/{}"
    +
    +
    +

    If you are using a fork-provider, such as Hardhat, you can use impersonated accounts by accessing random addresses off the fixture:

    +
    @pytest.fixture
    +def vitalik(accounts):
    +    return accounts["0xab5801a7d398351b8be11c439e05c5b3259aec9b"]
    +
    +
    +

    Using a fork-provider such as Hardhat, when using a contract instance as the sender in a transaction, it will be automatically impersonated:

    +
    def test_my_method(project, accounts):
    +    contract = project.MyContract.deploy(sender=accounts[0])
    +    other_contract = project.OtherContract.deploy(sender=accounts[0])
    +    contract.my_method(sender=other_contract)
    +
    +
    +

    It has the same interface as the TestAccountManager, (same as doing accounts.test_accounts in a script or the console).

    +
    +
    +

    chain fixture

    +

    Use the chain fixture to access the connected provider or adjust blockchain settings.

    +

    For example, increase the pending timestamp:

    +
    def test_in_future(chain):
    +    chain.pending_timestamp += 86000
    +    assert "Something"
    +    chain.pending_timestamp += 86000
    +    assert "Something else"
    +
    +
    +

    It has the same interface as the ChainManager.

    +
    +
    +

    networks fixture

    +

    Use the networks fixture to change the active provider in tests.

    +
    def test_multi_chain(networks):
    +    assert "Something"  # Make assertion in root network
    +
    +    # NOTE: Assume have ecosystem named "foo" with network "local" and provider "bar"
    +    with networks.foo.local.use_provider("bar"):
    +        assert "Something else"
    +
    +
    +

    It has the same interface as the NetworkManager.

    +
    +
    +

    project fixture

    +

    You also have access to the project you are testing. You will need this to deploy your contracts in your tests.

    +
    import pytest
    +
    +
    +@pytest.fixture
    +def owner(accounts):
    +    return accounts[0]
    +
    +
    +@pytest.fixture
    +def my_contract(project, owner):
    +    #           ^ use the 'project' fixture from the 'ape-test' plugin
    +    return owner.deploy(project.MyContract)
    +
    +
    +

    It has the same interface as the ProjectManager.

    +
    +
    +

    Contract fixture

    +

    Use the Contract fixture to create contract instances:

    +
    @pytest.fixture
    +def my_contract(Contract):
    +    return Contract(<address>)
    +
    +
    +

    It has the same interface as the ChainManager.

    +
    +
    +
    +

    Ape testing commands

    +
    ape test
    +
    +
    +

    To run a particular test:

    +
    ape test test_my_contract
    +
    +
    +

    Use ape test -I to open the interactive mode at the point of exception. This allows the user to inspect the point of failure in your tests.

    +
    ape test test_my_contract -I -s
    +
    +
    +
    +
    +

    Test Providers

    +

    Out-of-the-box, your tests run using the eth-tester provider, which comes bundled with ape. If you have geth installed, you can use the ape-geth plugin that also comes with ape.

    +
    ape test --network ethereum:local:geth
    +
    +
    +

    Each testing plugin should work the same way. You will have access to the same test accounts.

    +

    Another option for testing providers is the ape-hardhat plugin, which does not come with ape but can be installed by including it in the plugins list in your ape-config.yaml file or manually installing it using the command:

    +
    ape plugins install hardhat
    +
    +
    +
    +
    +

    Advanced Testing Tips

    +

    If you want to use sample projects, follow this link to Ape Academy.

    +
    project                     # The root project directory
    +└── tests/                  # Project tests folder, ran using the 'ape test' command to run all tests within the folder.
    +    └── conftest.py         # A file to define global variable for testing
    +    └── test_accounts.py    # A test file, if you want to ONLY run one test file you can use 'ape test test_accounts.py' command
    +    └── test_mint.py        # A test file
    +
    +
    +

    Here is an example of a test function from a sample NFT project

    +
    def test_account_balance(project, owner, receiver, nft):
    +    quantity = 1
    +    nft.mint(receiver, quantity, ["0"], value=nft.PRICE() * quantity, sender=owner)
    +    actual = project.balanceOf(receiver)
    +    expect = quantity
    +    assert actual == expect
    +
    +
    +
    +
    +

    Testing Transaction Failures

    +

    Similar to pytest.raises(), you can use ape.reverts() to assert that contract transactions fail and revert.

    +

    From our earlier example we can see this in action:

    +
    def test_authorization(my_contract, owner, not_owner):
    +    my_contract.set_owner(sender=owner)
    +    assert owner == my_contract.owner()
    +
    +    with ape.reverts("!authorized"):
    +        my_contract.authorized_method(sender=not_owner)
    +
    +
    +

    reverts() takes two optional parameters:

    +
    +

    expected_message

    +

    This is the expected revert reason given when the transaction fails. +If the message in the ContractLogicError raised by the transaction failure is empty or does not match the expected_message, then ape.reverts() will raise an AssertionError.

    +

    You may also supply an re.Pattern object to assert on a message pattern, rather than on an exact match.

    +
    # Matches explicitly "foo" or "bar"
    +with ape.reverts(re.compile(r"^(foo|bar)$")):
    +    ...
    +
    +
    +
    +
    +

    dev_message

    +

    This is the expected dev message corresponding to the line in the contract’s source code where the error occurred. +These can be helpful in optimizing for gas usage and keeping revert reason strings shorter.

    +

    Dev messages take the form of a comment in Vyper, and should be placed on the line that may cause a transaction revert:

    +
    assert x != 0  # dev: invalid value
    +
    +
    +

    Take for example:

    +
    # @version 0.3.7
    +
    +@external
    +def check_value(_value: uint256) -> bool:
    +    assert _value != 0  # dev: invalid value
    +    return True
    +
    +
    +

    We can explicitly cause a transaction revert and check the failed line by supplying an expected dev_message:

    +
    def test_authorization(my_contract, owner):
    +    with ape.reverts(dev_message="dev: invalid value"):
    +        my_contract.check_value(sender=owner)
    +
    +
    +

    When the transaction reverts and ContractLogicError is raised, ape.reverts() will check the source contract to see if the failed line contains a message.

    +

    There are a few scenarios where AssertionError will be raised when using dev_message:

    +
      +
    • If the line in the source contract has a different dev message or no dev message

    • +
    • If the contract source cannot be obtained

    • +
    • If the transaction trace cannot be obtained

    • +
    +

    Because dev_message relies on transaction tracing to function, you must use a provider like ape-hardhat when testing with dev_message.

    +

    You may also supply an re.Pattern object to assert on a dev message pattern, rather than on an exact match.

    +
    # Matches explictly "dev: foo" or "dev: bar"
    +with ape.reverts(dev_message=re.compile(r"^dev: (foo|bar)$")):
    +    ...
    +
    +
    +
    +
    +

    Caveats

    +
    +

    Language Support

    +

    As of ape version 0.5.6, dev_messages assertions are available for contracts compiled with ape-vyper, but not for those compiled with ape-solidity or ape-cairo.

    +
    +
    +

    Inlining

    +

    Due to function inlining, the position of the # dev: ... message may sometimes be one line higher than expected:

    +
    @external
    +def foo(_x: decimal) -> decimal:  # dev: correct location
    +    return sqrt(_x)  # dev: incorrect location
    +
    +
    +

    This typically only applies when trying to add dev messages to statements containing built-in function calls.

    +
    +
    +

    Non-reentrant Functions

    +

    Similarly, if you require dev assertions for non-reentrant functions you must be sure to leave the comment on the function that should not have reentry:

    +
    @internal
    +@nonreentrant('lock')
    +def _foo_internal():  # dev: correct location
    +    pass
    +
    +@external
    +@nonreentrant('lock')
    +def foo():
    +    self._foo_internal()  # dev: incorrect location
    +
    +
    +
    +
    +
    +

    Custom Errors

    +

    As of Solidity 0.8.4, custom errors have been introduced to the ABI. +To make assertions on custom errors, you can use the types defined on your contracts.

    +

    For example, if I have a contract called MyContract.sol:

    +
    // SPDX-License-Identifier: GPL-3.0
    +pragma solidity ^0.8.4;
    +
    +error Unauthorized(address unauth_address);
    +
    +contract MyContract {
    +    address payable owner = payable(msg.sender);
    +    function withdraw() public {
    +        if (msg.sender != owner)
    +            revert Unauthorized(msg.sender);
    +        owner.transfer(address(this).balance);
    +    }
    +}
    +
    +
    +

    I can ensure unauthorized withdraws are disallowed by writing the following test:

    +
    import ape
    +import pytest
    +
    +@pytest.fixture
    +def owner(accounts):
    +    return accounts[0]
    +
    +@pytest.fixture
    +def hacker(accounts):
    +    return accounts[1]
    +
    +@pytest.fixture
    +def contract(owner, project):
    +    return owner.deploy(project.MyContract)
    +
    +def test_unauthorized_withdraw(contract, hacker):
    +    with ape.reverts(contract.Unauthorized, unauth_address=hacker.address):
    +        contract.withdraw(sender=hacker)
    +
    +
    +

    You can also use custom error types from the contract container (from ape.project or the project fixture):

    +
    import ape
    +
    +def test_unauthorized(contract, hacker, project):
    +    with ape.reverts(project.MyContract.Unauthorized, unauth_address=hacker.address):
    +        contract.withdraw(sender=hacker)
    +
    +
    +

    You may need to use the container approach for asserting on custom errors that occur during failing deploy transactions because you won’t have access to the contract instance yet. +Here is an example of what that may look like:

    +
    import ape
    +
    +def test_error_on_deploy(account, project):
    +    with ape.reverts(project.Token.MyCustomError):
    +        ape.project.HasError.deploy(sender=account)
    +
    +
    +

    Alternatively, you can attempt to use the address from the revert error to find the error type. +NOTE: The address will only exist for transactions that were published (e.g. not for failures during estimating gas), and this may only work on certain providers.

    +
    import ape
    +
    +def test_error_on_deploy(account):
    +    # NOTE: We are using `as rev` here to capture the revert info
    +    # so we can attempt to lookup the contract later.
    +    with ape.reverts() as rev:
    +        ape.project.HasError.deploy(sender=account)
    +    
    +    assert rev.value.address is not None, "Receipt never found, contract never cached"
    +    
    +    # Grab the cached instance using the error's address
    +    # and assert the custom error this way.
    +    contract = ape.Contract(rev.value.address)
    +    assert isinstance(rev.value, contract.MyError)
    +
    +
    +
    +
    +
    +

    Multi-chain Testing

    +

    The Ape framework supports connecting to alternative networks / providers in tests.

    +

    To run an entire test using a specific network / provider combination, use the use_network pytest marker:

    +
    import pytest
    +
    +
    +@pytest.mark.use_network("fantom:local:test")
    +def test_my_fantom_test(chain):
    +    assert chain.provider.network.ecosystem.name == "fantom"
    +
    +
    +@pytest.mark.use_network("ethereum:local:test")
    +def test_my_ethereum_test(chain):
    +    assert chain.provider.network.ecosystem.name == "ethereum"
    +
    +
    +

    To switch networks mid-test, use the networks context-manager:

    +
    # Switch to Fantom mid test
    +def test_my_multichain_test(networks):
    +    # The test starts in 1 ecosystem but switches to another
    +    assert networks.provider.network.ecosystem.name == "ethereum"
    +
    +    with networks.fantom.local.use_provider("test") as provider:
    +        assert provider.network.ecosystem.name == "fantom"
    +
    +    # You can also use the context manager like this:
    +    with networks.parse_network_choice("fantom:local:test") as provider:
    +       assert provider.network.ecosystem.name == "fantom"
    +
    +
    +

    You can also set the network context in a pytest fixture. +This is useful if certain fixtures must run in certain networks.

    +
    import pytest
    +
    +
    +@pytest.fixture
    +def stark_contract(networks, project):
    +    with networks.parse_network_choice("starknet:local"):
    +        yield project.MyStarknetContract.deploy()
    +
    +
    +def test_starknet_thing(stark_contract, stark_account):
    +    # Uses the starknet connection via the stark_contract fixture
    +    receipt = stark_contract.my_method(sender=stark_account)
    +    assert not receipt.failed
    +
    +
    +

    When you exit a provider’s context, Ape does not disconnect the provider. +When you re-enter that provider’s context, Ape uses the previously-connected provider. +At the end of the tests, Ape disconnects all the providers. +Thus, you can enter and exit a provider’s context as much as you need in tests.

    +
    +
    +

    Gas Reporting

    +

    To include a gas report at the end of your tests, you can use the --gas flag. +NOTE: This feature requires using a provider with tracing support, such as ape-hardhat.

    +
    ape test --network ethereum:local:hardhat --gas
    +
    +
    +

    At the end of test suite, you will see tables such as:

    +
                                FundMe Gas
    +
    +  Method           Times called    Min.    Max.    Mean   Median
    + ────────────────────────────────────────────────────────────────
    +  fund                        8   57198   91398   82848    91398
    +  withdraw                    2   28307   38679   33493    33493
    +  changeOnStatus              2   23827   45739   34783    34783
    +  getSecret                   1   24564   24564   24564    24564
    +
    +                  Transferring ETH Gas
    +
    +  Method     Times called   Min.   Max.   Mean   Median
    + ───────────────────────────────────────────────────────
    +  to:test0              2   2400   9100   5750     5750
    +
    +                     TestContract Gas
    +
    +  Method      Times called    Min.    Max.    Mean   Median
    + ───────────────────────────────────────────────────────────
    +  setNumber              1   51021   51021   51021    51021
    +
    +
    +

    The following demonstrates how to use the ape-config.yaml file to exclude contracts and / or methods from the gas report:

    +
    test:
    +  gas:
    +    exclude:
    +      - method_name: DEBUG_*         # Exclude all methods starting with `DEBUG_`.
    +      - contract_name: MockToken     # Exclude all methods in contract named `MockToken`.
    +      - contract_name: PoolContract  # Exclude methods starting with `reset_` in `PoolContract`.
    +        method_name: reset_*
    +
    +
    +

    Similarly, you can exclude sources via the CLI option --gas-exclude. +The value --gas-exclude takes is a comma-separated list of colon-separated values representing the structure similar as above, except you must explicitly use * where meaning “all”. +For example to exclude all methods starting with DEBUG_, you would do:

    +
    ape test --gas --gas-exclude "*:DEBUG_*".
    +
    +
    +

    To exclude all methods in the MockToken contract, do:

    +
    ape test --gas --gas-exclude MockToken
    +
    +
    +

    And finally, to exclude all methods starting with reset_ in PoolContract, do:

    +
    ape test --gas --gas-exclude "PoolContract:reset_*"
    +
    +
    +
    +
    +

    Iterative Testing

    +

    Ape has a set of flags that controls running your test suite locally in a “watch” mode, +which means watching for updates to files in your project and re-triggering the test suite.

    +

    To enable this mode, run ape test --watch to set up this mode using the default settings. +While in this mode, any time a .py file (i.e. your tests) or smart contract source file +(i.e. any files that get compiled using your installed compiler plugins) is added, removed, +or changed, then the ape test task will be re-triggered, based on a polling interval.

    +

    To exit this mode, press Ctrl+D (on Linux or macOS) to stop the execution and undo it.

    +
    +
    +

    Contract Coverage

    +

    To get contract coverage, use the --coverage flag when running ape test:

    +
    ape test --coverage
    +
    +
    +

    NOTE: Some types of coverage require using a provider that supports transaction tracing, such as ape-hardhat or ape-foundry.

    +

    Afterwards, you should see a coverage report looking something like:

    +
    ============================================= Coverage Profile =============================================
    +               Contract Coverage               
    +                                               
    +  Name          Stmts   Miss   Cover    Funcs  
    + ───────────────────────────────────────────── 
    +  Contract.vy   7       1      85.71%   80.0% 
    +
    +
    +

    To generate other coverage reports such as XML or HTML, configure it like so:

    +
    test:
    +  coverage:
    +    reports:
    +      terminal: False  # Disable the terminal table (True by default)
    +      xml: True  # Enable XML report (.build/coverage.xml)
    +      html: True  # Enable HTML report (.build/htmlcov)
    +
    +
    +

    To see a much more verbose coverage report, set the terminal field to a dictionary that includes "verbose": true:

    +
    test:
    +  coverage:
    +    reports:
    +      terminal:
    +        verbose: true  # Show verbose coverage information in the terminal.
    +
    +
    +

    Then, you will see table outputs like this:

    +
    ===================================== Coverage Profile ========================================
    +                MyContract Coverage
    +
    +                         Func   Stmts   Miss    Cover
    + ─────────────────────────────────────────────────────
    +                  __builtin__       2      0   100.0%
    +            _immutable_number       0      0   100.0%
    +                      _number       0      0   100.0%
    +                 foo_method()       1      0   100.0%
    +          foo_method(uint256)       1      0   100.0%
    +  foo_method(uint256,uint256)       3      0   100.0%
    +                  view_method       1      0   100.0%
    +
    +           line=0.0%, func=0.0%
    +
    +
    +

    This is useful when trying to find the missing areas to cover. +The HTML report also supports verbose: true and it will show similar tables.

    +

    NOTE: You may notice methods with zero statements. +One example of a method with zero statements may be from an auto-generated getter method for a public variable; certain versions of Vyper do not contain source mappings for these methods. +However, Ape will still check to see if this method has been called in your tests. +To get 100% coverage, you must call these methods in your tests.

    +

    NOTE: Notice some methods use the full selector while others don’t. +Methods that use the selector mean that their short name is shared with other methods. +This happens in Vyper from auto-generated kwarg-based methods. +Thus, the full selector is used to distinguish the methods in the coverage (and gas) reports.

    +

    Much like gas reporting, you can also exclude contracts and methods from tracking coverage using your ape-config.yaml file. +The following demonstrates how to do this:

    +
    test:
    +  coverage:
    +    exclude:
    +      - method_name: DEBUG_*         # Exclude all methods starting with `DEBUG_`.
    +      - contract_name: MockToken     # Exclude all methods in contract named `MockToken`.
    +      - contract_name: PoolContract  # Exclude methods starting with `reset_` in `PoolContract`.
    +        method_name: reset_*
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file diff --git a/v0.7.6/userguides/transactions.html b/v0.7.6/userguides/transactions.html new file mode 100644 index 0000000000..b4e71e9818 --- /dev/null +++ b/v0.7.6/userguides/transactions.html @@ -0,0 +1,502 @@ + + + + + + + Making Transactions — ape documentation + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    Making Transactions

    +

    Regardless of how you are using ape, you will likely be making transactions. +There are various types of transactions you can make with ape. A simple example is deploying a contract.

    +
    +

    Deployment

    +

    Deploying a smart contract is a unique type of transaction where we don’t necessarily care about the receipt as much +as we care about the contract instance. That is why the return value from +the deploy method is a +ContractInstance.

    +

    The following example demonstrates a simple deployment script:

    +
    from ape import accounts, project
    +
    +
    +def deploy():
    +    account = accounts.load("MyAccount")
    +    # Assume you have a contract named `MyContract` in your project's contracts folder.
    +    return account.deploy(project.MyContract)
    +
    +
    +

    To get the receipt of a deploy transaction, use the ContractInstance.receipt property:

    +
    from ape import accounts, project
    +
    +dev = accounts.load("dev")
    +contract = project.MyContract.deploy(sender=dev)
    +
    +# The receipt is available on the contract instance and has the expected sender.
    +receipt = contract.receipt
    +assert receipt.sender == dev
    +
    +
    +
    +

    Deployment from Ape Console

    +

    Deploying from ape console allows you to interact with a contract in real time. You can also use the --network flag to connect a live network.

    +
    ape console --network ethereum:goerli:alchemy
    +
    +
    +

    This will launch an IPython shell:

    +
    In [1]: dev = accounts.load("dev")
    +In [2]: token = dev.deploy(project.Token) 
    +In [3]: token.contract_method_defined_in_contract()
    +
    +
    +

    For an in depth tutorial on how to deploy, please visit ApeAcademy.

    +
    +
    +
    +

    Dynamic-Fee Transactions

    +

    Before EIP-1559, all transactions used a gas_price. +After the London fork of Ethereum, the gas_price got broken up into two values, max_fee and max_priority_fee. +The ape framework supports both types of transactions. By default, transactions use the dynamic-fee model. +Making contract calls without specifying any additional kwargs will use a dynamic-fee transaction.

    +

    Calling certain methods on a deployed-contract is one way to transact.

    +
    contract = deploy()  # Example from above, that returns a contract instance.
    +contract.fundMyContract(value="1 gwei", sender=sender)  # Assuming there is a method named 'fundMyContract' on MyContract.
    +
    +
    +

    In the example above, the call to fundMyContract() invokes a dynamic-fee transaction. +To have more control of the fee-values, you can specify the max_fee, the max_priority_fee, or both.

    +
    contract.fundMyContract(value="1 gwei", max_priority_fee="50 gwei", max_fee="100 gwei", sender=sender)
    +
    +
    +

    The max_priority_fee cannot exceed the max_fee, as the max_fee includes both the base fee and the priority fee. +The max_priority_fee, when omitted, defaults to the return value from the +ProviderAPI.priority_fee +method property. +The max_fee, when omitted, defaults to the priority_fee (which gets its default applied beforehand) plus the latest +the value returned from the +ProviderAPI.base_fee method +property.

    +
    +
    +

    Static-Fee Transactions

    +

    Static-fee transactions are the transactions that Ethereum used before the London-fork +(before EIP-1559). +However, some applications may still require using static-fee transactions.

    +

    One way to use a static-fee transaction is by specifying the gas_price as a key-value argument:

    +
    contract.fundMyContract(value="1 gwei", gas_price="100 gwei", sender=sender)
    +
    +
    +

    NOTE: Miners prioritize static-fee transactions based on the highest gas_price.

    +

    Another way to use a static-fee transaction (without having to provide gas_price) is to set the key-value +argument type equal to 0x00.

    +
    contract.fundMyContract(value="1 gwei", type="0x0", sender=sender)
    +
    +
    +

    When declaring type="0x0" and not specifying a gas_price, the gas_price gets set using the provider’s estimation.

    +
    +
    +

    Transaction Logs

    +

    In Ape, you can easily get all the events on a receipt. +Use the .events property to access the (ContractLog) objects. +Each object represents an event emitted from the call.

    +
    receipt = contract.fundMyContract(value="1 gwei", type="0x0", sender=sender)
    +print(receipt.events)
    +
    +
    +

    To only get specific log types, use the decode_logs() method and pass the event ABIs as arguments:

    +
    for log in receipt.decode_logs(contract.FooEvent.abi, contract.BarEvent.abi):
    +    print(log.amount)  # Assuming 'amount' is a property on the event.
    +
    +
    +

    You can also use the ContractEvent.from_receipt(receipt) method:

    +
    receipt = contract.fooMethod(value="1 gwei", type="0x0", sender=sender)
    +for log in contract.FooEvent.from_receipt(receipt):
    +    print(log.amount)  # Assuming 'amount' is a property on the event.
    +
    +
    +

    NOTE: If you have more than event with the same name in your contract type’s ABI, you can access the events by using the get_event_by_signature() method:

    +
    event_type = contract.get_event_by_signature("FooEvent(uint256 bar, uint256 baz)")
    +receipt.decode_logs(event_type.abi)
    +
    +
    +

    Otherwise, you will get an AttributeError.

    +
    +
    +

    Transaction Acceptance Timeout

    +

    NOTE For longer running scripts, you may need to increase the transaction acceptance timeout. +The default value is 2 minutes for live networks and 20 seconds for local networks. +In your ape-config.yaml file, add the following:

    +
    ethereum:
    +  mainnet:
    +    transaction_acceptance_timeout: 600  # 5 minutes
    +
    +
    +
    +
    +

    Traces

    +

    If you are using a provider that is able to fetch transaction traces, such as the ape-hardhat provider, you can call the ReceiptAPI.show_trace() method.

    +
    from ape import accounts, project
    +
    +owner = accounts.load("acct")
    +contract = project.Contract.deploy(sender=owner)
    +receipt = contract.methodWithoutArguments()
    +receipt.show_trace()
    +
    +
    +

    NOTE: If your provider does not support traces, you will see a NotImplementedError saying that the method is not supported.

    +

    The trace might look something like:

    +
    Call trace for '0x43abb1fdadfdae68f84ce8cd2582af6ab02412f686ee2544aa998db662a5ef50'
    +txn.origin=0x1e59ce931B4CFea3fe4B875411e280e173cB7A9C
    +ContractA.methodWithoutArguments() -> 0x00..7a9c [469604 gas]                                                                                                                                     
    +├── SYMBOL.supercluster(x=234444) -> [                                                                                                                                                            
    +│       [23523523235235, 11111111111, 234444],                                                                                                                                                    
    +│       [                                                                                                                                                                                         
    +│         345345347789999991,                                                                                                                                                                     
    +│         99999998888882,                                                                                                                                                                         
    +│         345457847457457458457457457                                                                                                                                                             
    +│       ],                                                                                                                                                                                        
    +│       [234444, 92222229999998888882, 3454],                                                                                                                                                     
    +│       [                                                                                                                                                                                         
    +│         111145345347789999991,                                                                                                                                                                  
    +│         333399998888882,                                                                                                                                                                        
    +│         234545457847457457458457457457                                                                                                                                                          
    +│       ]                                                                                                                                                                                         
    +│     ] [461506 gas]                                                                                                                                                                              
    +├── SYMBOL.methodB1(lolol="ice-cream", dynamo=345457847457457458457457457) [402067 gas]                                                                                                           
    +│   ├── ContractC.getSomeList() -> [                                                                                                                                                              
    +│        3425311345134513461345134534531452345,                                                                                                                                                  
    +│        111344445534535353,                                                                                                                                                                     
    +│        993453434534534534534977788884443333                                                                                                                                                    
    +│      ] [370103 gas]                                                                                                                                                                            
    +│   └── ContractC.methodC1(                                                                                                                                                                       
    +│         windows95="simpler",                                                                                                                                                                    
    +│         jamaica=345457847457457458457457457,                                                                                                                                                    
    +│         cardinal=ContractA                                                                                                                                                                      
    +│       ) [363869 gas]                                                                                                                                                                            
    +├── SYMBOL.callMe(blue=tx.origin) -> tx.origin [233432 gas]                                                                                                                                       
    +├── SYMBOL.methodB2(trombone=tx.origin) [231951 gas]                                                                                                                                              
    +│   ├── ContractC.paperwork(ContractA) -> (                                                                                                                                                       
    +│        os="simpler",                                                                                                                                                                           
    +│        country=345457847457457458457457457,                                                                                                                                                    
    +│        wings=ContractA                                                                                                                                                                         
    +│      ) [227360 gas]                                                                                                                                                                            
    +│   ├── ContractC.methodC1(windows95="simpler", jamaica=0, cardinal=ContractC) [222263 gas]                                                                                                       
    +│   ├── ContractC.methodC2() [147236 gas]                                                                                                                                                         
    +│   └── ContractC.methodC2() [122016 gas]                                                                                                                                                         
    +├── ContractC.addressToValue(tx.origin) -> 0 [100305 gas]                                                                                                                                         
    +├── SYMBOL.bandPractice(tx.origin) -> 0 [94270 gas]                                                                                                                                               
    +├── SYMBOL.methodB1(lolol="lemondrop", dynamo=0) [92321 gas]                                                                                                                                      
    +│   ├── ContractC.getSomeList() -> [                                                                                                                                                              
    +│        3425311345134513461345134534531452345,                                                                                                                                                  
    +│        111344445534535353,                                                                                                                                                                     
    +│        993453434534534534534977788884443333                                                                                                                                                    
    +│      ] [86501 gas]                                                                                                                                                                             
    +│   └── ContractC.methodC1(windows95="simpler", jamaica=0, cardinal=ContractA) [82729 gas]                                                                                                        
    +└── SYMBOL.methodB1(lolol="snitches_get_stiches", dynamo=111) [55252 gas]                                                                                                                         
    +    ├── ContractC.getSomeList() -> [                                                                                                                                                              
    +         3425311345134513461345134534531452345,                                                                                                                                                  
    +         111344445534535353,                                                                                                                                                                     
    +         993453434534534534534977788884443333                                                                                                                                                    
    +       ] [52079 gas]                                                                                                                                                                             
    +    └── ContractC.methodC1(windows95="simpler", jamaica=111, cardinal=ContractA) [48306 gas]                                                                                                      
    +
    +
    +

    Additionally, you can view the traces of other transactions on your network.

    +
    from ape import networks
    +
    +txn_hash = "0x053cba5c12172654d894f66d5670bab6215517a94189a9ffc09bc40a589ec04d"
    +receipt = networks.provider.get_receipt(txn_hash)
    +receipt.show_trace()
    +
    +
    +

    In Ape, you can also show the trace for a call. +Use the show_trace= kwarg on a contract call and Ape will display the trace before returning the data.

    +
    token.balanceOf(account, show_trace=True)
    +
    +
    +

    NOTE: This may not work on all providers, but it should work on common ones such as ape-hardhat or ape-geth.

    +
    +
    +

    Gas Reports

    +

    To view the gas report of a transaction receipt, use the ReceiptAPI.show_gas_report() method:

    +
    from ape import networks
    +
    +txn_hash = "0x053cba5c12172654d894f66d5670bab6215517a94189a9ffc09bc40a589ec04d"
    +receipt = networks.provider.get_receipt(txn_hash)
    +receipt.show_gas_report()
    +
    +
    +

    It will output tables of contracts and methods with gas usages that look like this:

    +
                                DAI Gas
    +
    +  Method           Times called    Min.    Max.    Mean   Median
    + ────────────────────────────────────────────────────────────────
    +  balanceOf                   4   1302    13028   1302    1302
    +  allowance                   2   1377    1377    1337    1337
    +│ approve                     1   22414   22414   22414   22414
    +│ burn                        1   11946   11946   11946   11946
    +│ mint                        1   25845   25845   25845   25845
    +
    +
    +
    +
    +

    Estimate Gas Cost

    +

    To estimate the gas cost on a transaction or call without sending it, use the estimate_gas_cost() method from the contract’s transaction / call handler: +(Assume I have a contract instance named contract_a that has a method named methodToCall)

    +
    txn_cost = contract_a.myMutableMethod.estimate_gas_cost(1, sender=accounts.load("me"))
    +print(txn_cost)
    +
    +view_cost = contract_a.myViewMethod.estimate_gas_cost()
    +print(view_cost)
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
  • + Show on GitHub
  • + + + + \ No newline at end of file