Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/badger-finance/badger-utils
Library that keeps shared code for badger project
https://github.com/badger-finance/badger-utils
blockchain brownie python solidity
Last synced: 4 days ago
JSON representation
Library that keeps shared code for badger project
- Host: GitHub
- URL: https://github.com/badger-finance/badger-utils
- Owner: Badger-Finance
- License: mit
- Created: 2021-09-15T10:03:00.000Z (about 3 years ago)
- Default Branch: master
- Last Pushed: 2022-02-12T19:05:26.000Z (almost 3 years ago)
- Last Synced: 2024-10-04T06:24:37.096Z (about 2 months ago)
- Topics: blockchain, brownie, python, solidity
- Language: Python
- Homepage:
- Size: 1.27 MB
- Stars: 2
- Watchers: 11
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# badger-utils library
This is the library for all badger utils that were moved from [badger-system](https://github.com/Badger-Finance/badger-system) repo.
| Build | Coverage | PYPI |
| ------------- | ------------- | ------------- |
| [![Tests](https://github.com/SHAKOTN/badger-utils/actions/workflows/main.yml/badge.svg?branch=master)](https://github.com/SHAKOTN/badger-utils/actions/workflows/main.yml) | [![codecov](https://codecov.io/gh/Badger-Finance/badger-utils/branch/master/graph/badge.svg?token=210VN0EJ90)](https://codecov.io/gh/Badger-Finance/badger-utils) | [![PyPI version](https://badge.fury.io/py/badger-utils.svg)](https://badge.fury.io/py/badger-utils) |---
## Requirements
To make use of library you would need some interfaces and contracts to be [compiled](https://eth-brownie.readthedocs.io/en/stable/compile.html)
and injected by brownie into your brownie project.
List of required interfaces can be found [here](https://github.com/SHAKOTN/badger-utils/tree/master/interfaces)You also need some contracts to be compiled as well:
```
ForceEther, SafeMath, Token, BadgerRegistry
```## Installing library
`pip install badger-utils`## To run tests:
```
$ virtualenv venv
$ source venv/bin/activate
$ make
$ brownie test
```## Using library
- [Coingecko Utils](#using-coingecko-utils)
- [Gas utils module](#using-gas_utils-module)
- [Network utils](#using-network-utils)
- [Proxy utils](#using-proxy-utils)
- [Distribute from whales realtime](#using-distribute-from-whales-realtime)
- [Distribute from whales realtime with exact amount](#using-distribute-from-whales-realtime-with-exact-amount)
- [Token utils](#using-token-utils)
- [Constants](#using-constants)
- [Tx timer](#using-tx-timer)
- [Artifacts](#using-artifacts)
- [Local registry](#locally-defined-registry)
- [On chain registry](#on-chain-registry)
- [Systems](#using-systems)Giving some examples on library usage:
### Using coingecko utils
```python
from badger_utils.coingecko_utils import fetch_usd_price
some_erc_token = interface.IERC20(Token)
usd_price = fetch_usd_price(some_erc_token.address)
```### Using gas_utils module
```python
from badger_utils.gas_utils import GasStrategies# Class initialization will initialize everything and fetch gas prices
strategies = GasStrategies()price = strategies.optimal_price()
# check gas cost:
strategies.gas_cost(gas_estimate=21000)
# Set default strategy:
strategies.set_default_for_active_chain()
```
**NOTE:** If you want to use Anyblock historical data in gas analysis, consider adding auth keys
from anyblock account:
```shell
export [email protected]
export ANYBLOCK_KEY=
```
otherwise `def analyze_gas` function will always return static data:
```python
DotMap(mode=999999999999999999, median=999999999999999999, std=999999999999999999)
```### Using network utils
```python
from badger_utils.network_manager import network_manager
network = network_manager.get_active_network()
badger_deploy_file = network_manager.get_active_network_badger_deploy()
```### Using proxy utils
```python
from badger_utils.proxy_utils import deploy_proxy_admin
from brownie import accountscontract = deploy_proxy_admin(accounts[0])
assert contract.address is not None
```### Using distribute from whales realtime with percentage
If you want to use some other Ethplorer key to fetch whales, set env variable: ETHPLORER_API_KEY
```shell
export ETHPLORER_API_KEY=
```
Otherwise, ethplorer key will be used by default, which is a bit slow
```python
import token # some deployed token
from brownie import accounts
from badger_utils.token_utils.distribute_from_whales_realtime import distribute_from_whales_realtime_percentagetoken.transfer(
"0x19d099670a21bC0a8211a89B84cEdF59AbB4377F", 100000, {'from': accounts[0]}
)
distribute_from_whales_realtime_percentage(accounts[1], percentage=0.8)
```### Using distribute from whales realtime with exact amount
```python
import token # some deployed token
from brownie import accounts
from badger_utils.token_utils.distribute_from_whales_realtime import distribute_from_whales_realtime_exacttoken.transfer(
"0x19d099670a21bC0a8211a89B84cEdF59AbB4377F", 100000, {'from': accounts[0]}
)
distribute_from_whales_realtime_exact(accounts[1], amount=123)
```### Using token utils
**LEGACY**. Consider using `distribute_from_whales_realtime` module
```python
import token # some deployed token
from brownie import accounts
from badger_utils.token_utils import distribute_from_whalestoken.transfer(
"0x19d099670a21bC0a8211a89B84cEdF59AbB4377F", 100000, {'from': accounts[0]}
)
distribute_from_whales(accounts[1], percentage=0.8)
```### Using constants
```python
from badger_utils.constants import AddressZero
from badger_utils.constants import TOKEN_LOCKER_ROLE
from badger_utils.constants import ContractSystems
```### Using tx timer
```python
from badger_utils.tx_timer import tx_timer
from brownie import accountstx_timer.prepare_timer(accounts[0], "Harvest")
tx_timer.start_timer(accounts[0], 'Harvest')
tx_timer.end_timer()
```### Using artifacts
```python
from badger_utils.registry.artifacts import artifactstimelock_abi = artifacts.open_zeppelin["TokenTimelock"]["abi"]
```### Using registries
### On chain registry
```python
from badger_utils.registry import chain_registrieschain_registries.initialize()
chain_registries.get("badgerTree")
```
### Locally defined registry
**NOTE:** This is legacy way of working with registries
```python
from brownie import web3
from badger_utils.registry import registrychecksummed = web3.toChecksumAddress(registry.tokens.wbtc)
```### Using systems
```python
from badger_utils.systems import SushiswapSystem
```