From 9ab0b3228e065b510d6d02454fe9beff29835997 Mon Sep 17 00:00:00 2001 From: Ben Hauser Date: Sat, 3 Feb 2024 01:30:10 +0400 Subject: [PATCH 1/2] docs: mark repo as not maintained, remove references to ethpm --- README.md | 10 +- docs/api-brownie.rst | 4 - docs/api-network.rst | 19 +-- docs/api-project.rst | 100 +------------ docs/build-folder.rst | 25 ---- docs/core-contracts.rst | 2 +- docs/deploy.rst | 2 - docs/ethpm.rst | 303 --------------------------------------- docs/index.rst | 5 +- docs/package-manager.rst | 34 +---- 10 files changed, 15 insertions(+), 489 deletions(-) delete mode 100644 docs/ethpm.rst diff --git a/README.md b/README.md index d82e4429d..ba2372975 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,11 @@ # Brownie -[![Pypi Status](https://img.shields.io/pypi/v/eth-brownie.svg)](https://pypi.org/project/eth-brownie/) [![Build Status](https://img.shields.io/github/workflow/status/eth-brownie/brownie/brownie%20workflow)](https://github.com/eth-brownie/brownie/actions) [![Docs Status](https://readthedocs.org/projects/eth-brownie/badge/?version=latest)](https://eth-brownie.readthedocs.io/en/stable/) [![Coverage Status](https://img.shields.io/codecov/c/github/eth-brownie/brownie)](https://codecov.io/gh/eth-brownie/brownie) +[![Pypi Status](https://img.shields.io/pypi/v/eth-brownie.svg)](https://pypi.org/project/eth-brownie/) [![Docs Status](https://readthedocs.org/projects/eth-brownie/badge/?version=latest)](https://eth-brownie.readthedocs.io/en/stable/) Brownie is a Python-based development and testing framework for smart contracts targeting the [Ethereum Virtual Machine](https://solidity.readthedocs.io/en/v0.6.0/introduction-to-smart-contracts.html#the-ethereum-virtual-machine). +**Brownie is no longer actively maintained**. Future releases may come sporadically - or never at all. Check out [Ape Framework](https://github.com/ApeWorX/ape) for all your python Ethereum development needs. + ## Features * Full support for [Solidity](https://github.com/ethereum/solidity) (`>=0.4.22`) and [Vyper](https://github.com/vyperlang/vyper) (`>=0.1.0-beta.16`) @@ -14,8 +16,10 @@ Brownie is a Python-based development and testing framework for smart contracts ## Dependencies -* [python3](https://www.python.org/downloads/release/python-3910/) version 3.7 or greater, python3-dev -* [ganache](https://github.com/trufflesuite/ganache) - tested with version [7.0.2](https://github.com/trufflesuite/ganache/releases/tag/v7.0.2) +* [python3](https://www.python.org/downloads/release/python-3910/) version 3.10 or greater, python3-dev +* [hardhat](https://github.com/NomicFoundation/hardhat) or [ganache](https://github.com/trufflesuite/ganache) + +Tested with ganache version [7.9.2](https://github.com/trufflesuite/ganache/releases/tag/v7.0.2), however it is generally recommended to use hardhat because ganache has been sunsetted. ## Installation diff --git a/docs/api-brownie.rst b/docs/api-brownie.rst index f7376f75f..6281d0c5f 100644 --- a/docs/api-brownie.rst +++ b/docs/api-brownie.rst @@ -47,10 +47,6 @@ Exceptions Raised when a project requires a version of solc that is not installed or not supported by Brownie. -.. py:exception:: brownie.exceptions.InvalidManifest - - Raised when attempting to process an improperly formatted ethPM package. - .. py:exception:: brownie.exceptions.MainnetUndefined Raised when an action requires interacting with the main-net, but no ``"mainnet"`` network is defined. diff --git a/docs/api-network.rst b/docs/api-network.rst index e32afe826..439f8ca2b 100644 --- a/docs/api-network.rst +++ b/docs/api-network.rst @@ -963,23 +963,6 @@ New ``Contract`` objects are created with one of the following class methods. >>> Contract.from_abi("Token", "0x79447c97b6543F6eFBC91613C655977806CB18b0", abi) - -.. py:classmethod:: Contract.from_ethpm(name, manifest_uri, address=None, owner=None) - - Create a new ``Contract`` object from an ethPM manifest. - - * ``name``: The name of the contract. Must be present within the manifest. - * ``manifest_uri``: EthPM registry manifest uri. - * ``address``: Address of the contract. Only Required if more than one deployment named ``name`` is included in the manifest. - * ``owner``: An optional :func:`Account ` instance. If given, transactions to the contract are sent broadcasted from this account by default. - - .. code-block:: python - - >>> from brownie import network, Contract - >>> network.connect('mainnet') - >>> Contract("DSToken", manifest_uri="ethpm://erc20.snakecharmers.eth:1/dai-dai@1.0.0") - - .. py:classmethod:: Contract.from_explorer(address, as_proxy_for=None, owner=None) Create a new ``Contract`` object from source code fetched from a block explorer such as `EtherScan `_ or `Blockscout `_. @@ -3099,7 +3082,7 @@ Web3 Internals .. py:attribute:: Web3._mainnet - Provides access to a ``Web3`` instance connected to the ``mainnet`` network as defined in the configuration file. Used internally for `ENS `_ and `ethPM `_ lookups. + Provides access to a ``Web3`` instance connected to the ``mainnet`` network as defined in the configuration file. Used internally for `ENS `_ lookups. Raises :func:`MainnetUndefined ` if the ``mainnet`` network is not defined. diff --git a/docs/api-project.rst b/docs/api-project.rst index 2bed2b2ad..77c041f62 100644 --- a/docs/api-project.rst +++ b/docs/api-project.rst @@ -120,12 +120,6 @@ Module Methods Downloading from https://github.com/brownie-mix/token-mix/archive/master.zip... 'my_projects/token' -.. py:method:: main.from_ethpm(uri): - - Generates a :func:`TempProject ` from an ethPM package. - - * ``uri``: ethPM manifest URI. Format can be ERC1319 or IPFS. - .. py:method:: main.load(project_path=None, name=None) Loads a Brownie project and instantiates various related objects. @@ -176,7 +170,7 @@ Module Methods See the :ref:`Brownie Package Manager ` documentation for more information on packages. - * ``package_id``: Package identifier or ethPM URI + * ``package_id``: Package identifier ``brownie.project.build`` ========================= @@ -374,98 +368,6 @@ Module Methods * ``compiler_data``: Additional compiler data to include * ``silent``: Toggles console verbosity -``brownie.project.ethpm`` -========================= - -The ``ethpm`` module contains methods for interacting with ethPM manifests and registries. See the :ref:`ethpm` for more detailed information on how to access this functionality. - -Module Methods --------------- - -.. py:method:: ethpm.get_manifest(uri) - - Fetches an ethPM manifest and processes it for use with Brownie. A local copy is also stored if the given URI follows the ERC1319 spec. - - * ``uri``: URI location of the manifest. Can be IPFS or ERC1319. - -.. py:method:: ethpm.process_manifest(manifest, uri) - - Processes a manifest for use with Brownie. - - * ``manifest``: ethPM manifest - * ``uri``: IPFS uri of the package - -.. py:method:: ethpm.get_deployment_addresses(manifest, contract_name, genesis_hash) - - Parses a manifest and returns a list of deployment addresses for the given contract and chain. - - * ``manifest``: ethPM manifest - * ``contract_name``: Name of the contract - * ``genesis_block``: Genesis block hash for the chain to return deployments on. If ``None``, the currently active chain will be used. - -.. py:method:: ethpm.get_installed_packages(project_path) - - Returns information on installed ethPM packages within a project. - - * ``project_path``: Path to the root folder of the project - - Returns: - - * ``[(project name, version), ..]`` of installed packages - * ``[(project name, version), ..]`` of installed-but-modified packages - -.. py:method:: ethpm.install_package(project_path, uri, replace_existing) - - Installs an ethPM package within the project. - - * ``project_path``: Path to the root folder of the project - * ``uri``: manifest URI, can be ethpm, erc1319 or ipfs - * ``replace_existing``: if True, existing files will be overwritten when installing the package - - Returns the package name as a string. - -.. py:method:: ethpm.remove_package(project_path, package_name, delete_files) - - Removes an ethPM package from a project. - - * ``project_path``: Path to the root folder of the project - * ``package_name``: name of the package - * ``delete_files``: if ``True``, source files related to the package are deleted. Files that are still required by other installed packages will not be deleted. - - Returns a boolean indicating if the package was installed. - -.. py:method:: ethpm.create_manifest(project_path, package_config, pin_assets=False, silent=True) - - Creates a manifest from a project, and optionally pins it to IPFS. - - * ``project_path``: Path to the root folder of the project - * ``package_config``: Configuration settings for the manifest - * ``pin_assets``: if ``True``, all source files and the manifest will be uploaded onto IPFS via Infura. - - Returns: ``(generated manifest, ipfs uri of manifest)`` - -.. py:method:: ethpm.verify_manifest(package_name, version, uri) - - Verifies the validity of a package at a given IPFS URI. - - * ``package_name``: Package name - * ``version``: Package version - * ``uri``: IPFS uri - - Raises :func:`InvalidManifest ` if the manifest is not valid. - -.. py:method:: ethpm.release_package(registry_address, account, package_name, version, uri) - - Creates a new release of a package at an ERC1319 registry. - - * ``registry_address``: Address of the registry - * ``account``: ``Account`` object used to broadcast the transaction to the registry - * ``package_name``: Name of the package - * ``version``: Package version - * ``uri``: IPFS uri of the package - - Returns the :func:`TransactionReceipt ` of the registry call to release the package. - ``brownie.project.scripts`` =========================== diff --git a/docs/build-folder.rst b/docs/build-folder.rst index 6c34e1303..2d88f79e3 100644 --- a/docs/build-folder.rst +++ b/docs/build-folder.rst @@ -194,28 +194,3 @@ To convert these indexes to source offsets, we check the :ref:`coverage map` or :ref:`forked development network `, you can create :func:`Contract ` objects to interact with already-deployed contracts. -:func:`Contract ` objects may be created from interfaces within the ``interfaces/`` folder of your project, or by fetching information from a remote source such as a block explorer or ethPM registry. +:func:`Contract ` objects may be created from interfaces within the ``interfaces/`` folder of your project, or by fetching information from a remote source such as a block explorer. Using Local Interfaces ---------------------- diff --git a/docs/deploy.rst b/docs/deploy.rst index a59079884..7a27ed430 100644 --- a/docs/deploy.rst +++ b/docs/deploy.rst @@ -13,8 +13,6 @@ It is important to remember that blockchains are `permanent` and `immutable`. On 3. Test the script again on one of the `public test networks `_ and verify that it executed as intended 4. Use the script to deploy your project to the mainnet -Once deployment is complete you may also :ref:`create an ethPM package` to simplify the process for other developers who wish to interact with your project. - Writing a Deployment Script =========================== diff --git a/docs/ethpm.rst b/docs/ethpm.rst deleted file mode 100644 index bf99e5e84..000000000 --- a/docs/ethpm.rst +++ /dev/null @@ -1,303 +0,0 @@ -.. _ethpm: - -============================ -The Ethereum Package Manager -============================ - -The `Ethereum Package Manager `_ (ethPM) is a decentralized package manager used to distribute EVM smart contracts and projects. It has similar goals to most package managers found in any given programming language: - -* Easily import and build upon core ideas written by others. -* Distribute the ideas that you've written and/or deployed, making them easily consumable for tooling and the community at large. - -At its core, an ethPM package is a JSON object containing the ABI, source code, bytecode, deployment data and any other information that combines together to compose the smart contract idea. The `ethPM specification `_ defines a schema to store all of this data in a structured JSON format, enabling quick and efficient transportation of smart contract ideas between tools and frameworks which support the specification. - -Brownie supports ethPM, offering the following functionality: - - 1. ethPM packages may be used to obtain deployment data, providing easy :ref:`interaction with existing contracts` on the main-net or testnets. - 2. Package source files may be :ref:`installed within a Brownie project`, to be inherited by existing contracts or used as a starting point when building something new. - 3. Packages can be generated from Brownie projects and :ref:`released on ethPM registries`, for simple and verified distribution. - -Registry URIs -============= - -To obtain an ethPM package, you must know both the package name and the address of the registry where it is available. The simplest way to communicate this information is through a `registry URI `_. Registry URIs adhere to the following format: - -:: - - ethpm://[CONTRACT_ADDRESS]:[CHAIN_ID]/[PACKAGE_NAME]@[VERSION] - -For example, here is a registry URI for the popular OpenZeppelin `Math `_ package, served by the Snake Charmers `Zeppelin registry `_: - -:: - - ethpm://zeppelin.snakecharmers.eth:1/math@1.0.0 - -Working with ethPM Packages -=========================== - -The ``brownie ethpm`` command-line interface is used to add and remove packages to a Brownie project, as well as to generate a package from a project. - -.. _ethpm-install: - -Installing a Package --------------------- - -To install an ethPM package within a Brownie project: - -:: - - $ brownie ethpm install [registry-uri] - -This will add all of the package sources files into the project ``contracts/`` folder. - -If a package contains a source with an identical filename to one in your project, Brownie raises a ``FileExistsError`` unless the contents of the two files are identical, or the ``overwrite`` flag is set to ``True``. - -Listing Installed Packages --------------------------- - -To view a list of currently installed packages within a project: - -:: - - $ brownie ethpm list - Brownie - Python development framework for Ethereum - - Found 2 installed packages: - ├─access@1.0.0 - └─math@1.0.0 - -Any packages that are installed from a registry are also saved locally. To view a list of all locally available ethPM packages, and the registries they were downloaded from: - -:: - - $ brownie ethpm all - Brownie - Python development framework for Ethereum - - ethpm://erc20.snakecharmers.eth - └─dai-dai@1.0.0 - - ethpm://zeppelin.snakecharmers.eth - ├─access@1.0.0 - ├─gns@1.0.0 - └─math@1.0.0 - -Removing a Package ------------------- - -Removing an installed package from a Brownie project will delete any of that package's sources files, as long as they are not also required by another package. - -To remove a package, either delete all of it's source files or use the following command: - -:: - - $ brownie ethpm remove [package-name] - -.. _ethpm-unlink: - -Unlinking a Package -------------------- - -You may wish to install a package as a starting point upon which you build your own project, and in doing so make changes to the package sources. This will cause Brownie to flag the package as "modified" and raise warnings when performing certain actions. You can silence these warnings by unlinking the package - deleting Brownie's record that it is an ethPM package without removing the source files. - -To unlink a package: - -:: - - $ brownie ethpm unlink [package-name] - -.. _ethpm-release: - -Creating and Releasing a Package -================================ - -Brownie allows you to generate an ethPM package from your project and publish it to a registry. Packages generated by Brownie will **always** include: - - * All contract source files within the project - * The name, ABI, bytecode and compiler settings for each contract in the project - -Depending upon the configuartion, they may also **optionally** include: - - * Addresses of deployed contracts instances across each network - * References to other ethPM packages that this package requires - -The process of releasing a package is: - - 1. Set all required fields within the ``ethpm-config.yaml`` configuration file. - 2. Generate the package manifest and verify the contents. - 3. Pin the manifest and sources to IPFS and publish the manifest URI to an ethPM registry. - -.. important:: - - Ensure that all import statements within your source files use `relative file paths `_ (beginning with ``./``). If you use absolute paths, your package is more likely to have namespace collisions when imported into other projects. - -Step 1: Package Configuration Settings --------------------------------------- - -To create a package you must first set all required fields within the ``ethpm-config.yaml`` file in the root folder of your project. - -Required Settings -***************** - -The following settings must have a non-``null`` value in order to generate a package. - -.. py:attribute:: package_name - - The ``package_name`` field defines a human readable name for the package. It must begin with a lowercase letter and be comprised of only lowercase letters, numeric characters, dashes and underscores. Package names must not exceed 255 characters in length. - - **Link**: `ethPM specification: package name `_ - -.. py:attribute:: version - - The ``version`` field defines the version number for the package. All versions should conform to the `semver `_ versioning specificaion. - - **Link**: `ethPM specification: version `_ - -.. py:attribute:: settings.deployment_networks - - The ``deployment_networks`` field is a list of networks that should be included in the package's ``deployments`` field. The name of each network must correspond to that of a network listed in the :ref:`project configuration file`. - - In order for a deployment to be included: - - * :ref:`Persistence` must be enabled for that network - * The bytecode of the deployed contract must be identical to the bytecode generated from the source code currently present in the project's ``contracts/`` folder - - You can use a wildcard ``*`` to include deployments on all networks, or ``False`` to not include any deployments. - - **Link**: `ethPM specification: deployments `_ - -.. py:attribute:: settings.include_dependencies - - The ``include_dependencies`` field is a boolean to indicate how package dependencies should be handled. - - * if ``True``, Brownie will generate a standalone package without any listed dependencies. - * if ``False``, Brownie will list all package dependencies within the manifest, and only include as much data about them as is required by the ``deployments`` field. - - Note that you cannot set ``include_dependencies`` to ``False`` while your package contains dependency source files that have been modified. In this situation you must first :ref:`unlink` the modified packages. - - **Link**: `ethPM specification: build dependencies `_ - -Optional Settings -***************** - -.. py:attribute:: meta - - The ``meta`` field, and all it's subfields, provides metadata about the package. This data is not integral for package installation, but may be important or convenient to provide. - - Any fields that are left blank will be omitted. You can also add additional fields, they will be included within the package. - - **Link**: `ethPM specification: package metadata `_ - -Example Configuration -********************* - -Here is an example configuration for ``ethpm-config.yaml``: - -.. code-block:: yaml - - # required fields - package_name: nftoken - version: 1.0.1 - settings: - deployment_networks: - - mainnet - include_dependencies: false - - # optional fields - meta: - description: A non-fungible implementation of the ERC20 standard, allowing scalable NFT transfers with fixed gas costs. - authors: - - Ben Hauser - - Gabriel Shapiro - license: MIT - keywords: - - ERC20 - - ERC721 - - NFT - links: - repository: https://github.com/iamdefinitelyahuman/nftoken - -Step 2: Creating the Manifest ------------------------------ - -Once you have set the required fields in the configuration file, you can create a manifest with the following command: - -:: - - $ brownie ethpm create - -The manifest is saved locally as ``manifest.json`` in the project root folder. Note that this saved copy is not tightly packed and so does not strictly adhere the ethPM `specification `_. This is not the final copy to be pinned to IPFS, rather it is a human-readable version that you can use to verify it's contents before releasing. - -Once you have confirmed that the included fields are consistent with what you would like to publish, you are ready to release. - -Step 3: Releasing the Package ------------------------------ - -There are two steps in releasing a package: - - 1. Pinning the manifest and related sources to IPFS. - - Brownie uses `Infura's `_ public IPFS gateway to interact with IPFS. Note that pinning files to IPFS can be a very slow proess. If you receive a timeout error, simply repeat the request. Files that have been successfully pinned will not need to be re-pinned. - - 2. Calling the `release `_ function of an ethPM registry with details of the package. - - Brownie broadcasts this transaction on the "mainnet" network as defined in the :ref:`project configuration file`. The account that you send the transaction from must be approved to call ``release`` in the registry, otherwise it will fail. Depending on your use case you may wish to run your own registry, or include your files within an existing one. See the `ethPM documentation `_ for more information. - -To release a package: - -:: - - $ brownie ethpm release [registry] [account] - -You must include the following arguments: - - * ``registry``: the address of an ethPM registry on the main-net - * ``account``: the address that the transaction is sent from. It can be given as an alias to a `local account `_, or as a hex string if the address is unlocked within the connected node. - -Once the package is successfully released, Brownie provides you with a registry URI that you can share with others so they can easily access your package: - -:: - - $ brownie ethpm release erc20.snakecharmers.eth registry_owner - Brownie - Python development framework for Ethereum - - Generating manifest and pinning assets to IPFS... - Pinning "NFToken.sol"... - Pinning "NFMintable.sol"... - Pinning manifest... - - Releasing nftoken@1.0.1 on "erc20.snakecharmers.eth"... - Enter the password for this account: ***** - - SUCCESS: nftoken@1.0.1 has been released! - - URI: ethpm://erc20.snakecharmers.eth:1/nftoken@1.0.1 - -.. _ethpm-deployments: - -Interacting with Package Deployments -==================================== - -You can load an entire package as a :func:`Project ` object, which includes :func:`Contract ` instances for any contracts deployed on the currently active network: - -.. code-block:: python - - >>> from brownie.project import from_ethpm - >>> maker = from_ethpm("ethpm://erc20.snakecharmers.eth:1/dai-dai@1.0.0") - >>> maker - - >>> maker.dict() - { - 'DSToken': [] - } - -Or, create a :func:`Contract ` object to interact with a deployed instance of a specific contract within a package: - -.. code-block:: python - - >>> from brownie import network, Contract - >>> network.connect('mainnet') - >>> ds = Contract("DSToken", manifest_uri="ethpm://erc20.snakecharmers.eth:1/dai-dai@1.0.0") - >>> ds - - -If the package does not include deployment information for the currently active network, a ``ContractNotFound`` exception is raised. diff --git a/docs/index.rst b/docs/index.rst index fcd5f04d6..07bec60f0 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -4,6 +4,10 @@ Brownie Brownie is a Python-based development and testing framework for smart contracts targeting the `Ethereum Virtual Machine `_. +.. warning:: + + **Brownie is no longer actively maintained**. Future releases may come sporadically - or never at all. Check out `Ape Framework `_ for all your python Ethereum development needs. + .. note:: All code starting with ``$`` is meant to be run on your terminal. Code starting with ``>>>`` is meant to run inside the Brownie console. @@ -20,4 +24,3 @@ Features * Property-based and stateful testing via `hypothesis `_ * Powerful debugging tools, including python-style tracebacks and custom error strings * Built-in console for quick project interaction -* Support for `ethPM `_ packages diff --git a/docs/package-manager.rst b/docs/package-manager.rst index 26355e26f..eae2aaef1 100644 --- a/docs/package-manager.rst +++ b/docs/package-manager.rst @@ -19,7 +19,7 @@ The Brownie package manager is available from the commandline: Installing a Package ==================== -Brownie supports package installation from ethPM and Github. +Brownie supports package installation from Github. Installing from Github ---------------------- @@ -62,38 +62,6 @@ To install `AragonOS `_ version ``4.0.0``: $ brownie pm install aragon/aragonos@4.0.0 -Installing from ethPM ---------------------- - -The `Ethereum Package Manager `_ (ethPM) is a decentralized package manager used to distribute EVM smart contracts and projects. - -At its core, an ethPM package is a JSON object containing the ABI, source code, bytecode, deployment data and any other information that combines together to compose the smart contract idea. The `ethPM specification `_ defines a schema to store all of this data in a structured JSON format, enabling quick and efficient transportation of smart contract ideas between tools and frameworks which support the specification. - -To obtain an ethPM package, you must know both the package name and the address of the registry where it is available. This information is communicated through a `registry URI `_. Registry URIs use the following format: - -:: - - ethpm://[CONTRACT_ADDRESS]:[CHAIN_ID]/[PACKAGE_NAME]@[VERSION] - -The Snake Charmers maintain an `ethPM registry explorer `_ where you can obtain registry URIs. - -Examples -******** - -To install OpenZeppelin's `Math `_ package, served from the Snake Charmers `Zeppelin registry `_: - -.. code-block:: bash - - $ brownie pm install ethpm://zeppelin.snakecharmers.eth:1/math@1.0.0 - - -To install v2 of the `Compound Protocol `_, served from the Snake Charmers `DeFi registry `_: - - -.. code-block:: bash - - $ brownie pm install ethpm://defi.snakecharmers.eth:1/compound@1.1.0 - Working with Packages ===================== From cf651412e4a9507508e0f8c861b253264a210289 Mon Sep 17 00:00:00 2001 From: Ben Hauser Date: Sat, 3 Feb 2024 01:31:54 +0400 Subject: [PATCH 2/2] release: update changelog, bump version to v1.20.0 --- CHANGELOG.md | 8 ++++++++ brownie/_config.py | 2 +- setup.cfg | 2 +- setup.py | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e4528f0f..e18b546df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased](https://github.com/eth-brownie/brownie) +## [1.20.0](https://github.com/eth-brownie/brownie/tree/v1.20.0) - 2024-02-02 +### Changed +- Add support for Python 3.12, drop support for Python 3.9 ([#1735](https://github.com/eth-brownie/brownie/pull/1735)) + +### Removed +- Support for `pythx` ([#1733](https://github.com/eth-brownie/brownie/pull/1733)) +- Support for `ethpm` ([#1734](https://github.com/eth-brownie/brownie/pull/1734)) + ## [1.19.5](https://github.com/eth-brownie/brownie/tree/v1.19.5) - 2024-01-31 ### Added - Support for custom / typed errors ([#1728](https://github.com/eth-brownie/brownie/pull/1728)) diff --git a/brownie/_config.py b/brownie/_config.py index 2619f3018..66e8d60a8 100644 --- a/brownie/_config.py +++ b/brownie/_config.py @@ -19,7 +19,7 @@ from brownie._expansion import expand_posix_vars from brownie._singleton import _Singleton -__version__ = "1.19.5" +__version__ = "1.20.0" BROWNIE_FOLDER = Path(__file__).parent DATA_FOLDER = Path.home().joinpath(".brownie") diff --git a/setup.cfg b/setup.cfg index 52eef0c71..0591ea40a 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 1.19.5 +current_version = 1.20.0 [bumpversion:file:setup.py] diff --git a/setup.py b/setup.py index 3d11a9414..1011c43e3 100644 --- a/setup.py +++ b/setup.py @@ -24,7 +24,7 @@ setup( name="eth-brownie", packages=find_packages(), - version="1.19.5", # don't change this manually, use bumpversion instead + version="1.20.0", # don't change this manually, use bumpversion instead license="MIT", description="A Python framework for Ethereum smart contract deployment, testing and interaction.", # noqa: E501 long_description=long_description,