Helper objects for generating ERC20s while testing a Brownie project.
MIT License
Helper objects for generating ERC20s while testing a Brownie project.
pipx
If you have installed Brownie using pipx
, you need to add brownie-token-tester
into the same virtual environment:
pipx inject eth-brownie brownie-token-tester
pip
You can install the latest release via pip
:
pip install brownie-token-tester
setuptools
You can clone the repository and use setuptools
for the most up-to-date version:
git clone https://github.com/iamdefinitelyahuman/brownie-token-tester.git
cd brownie-token-tester
python3 setup.py install
Import the library from within a Brownie test, script or console:
from brownie_tokens import ERC20, MintableForkToken
You can then make use of the following functionality:
ERC20
Deploys a generic ERC20 contract for testing purposes.
def ERC20(
name: str = "Test Token",
symbol: str = "TST",
decimals: int = 18,
success: Union[bool, None] = True,
fail: Union[bool, str, None] = "revert",
) -> Contract:
success
kwarg is used to set the token's return value upon a successful call to approve
, transfer
or transferFrom
. Valid values are True
, False
, and None
.fail
kwarg sets the token's behaviour upon failed calls to the above methods. Use "revert"
if the transaction should revert, or True
, False
, and None
to return a value without reverting.The resulting deployment adheres to the ERC20 Token Standard and additionally implements one non-standard method:
def _mint_for_testing(target: address, amount: uint256): nonpayable
This method increases the balance of target
by amount
. It may be called by any account.
MintableForkToken
MintableForkToken
is used to standardize the process of minting tokens when working in a forked mainnet environment. The MintableForkToken
class inherits from and may be used interchangeably with the Contract
class. It exposes one additional method, _mint_for_testing
, with the same API as given above.
For tokens where custom logic is implemented, this is an actual minting event. For most tokens, the "minting" process involves a query to the Ethplorer API to get a list of top token holders, and then transferring their balances to target
. If you want to exclude some holders from this process use skip_holders(*addresses)
. If you have too many requests at a time set $ETHPLORER_API_KEY
(see ethplorer.io) as environment variable.
Tokens for which custom logic is currently implemented:
This project is still in early development and should be considered an alpha. Comments, questions, criticisms and pull requests are welcomed.
This project is licensed under the MIT license.