<!-- logo -->
<p align="center">
<img width='400' src="https://raw.github.com/KarpatkeyDAO/defi-protocols/main/img/karpatkey_logo_black.png">
</p>
<!-- tag line -->
<h3 align='center'> Python package for Defi Protocols! </h3>
## 🌻 Motivation
Karpatkey tech team has always been dealing with defi protocols for various purposes, like getting prices, underlying tokens, pools, rewards, alerts, fees, reporting, APRs, etc. As a result of this search we created this protocol with all the knowledge acquired to contribute to the web3 and DEFI community. We hope it will be useful for your developments!
## Repo Url
[KarpatkeyDAO/defi-protocols](https://github.com/KarpatkeyDAO/defi-protocols)
## Installing from repository
```bash
pip3 install git+https://github.com/KarpatkeyDAO/defi-protocols.git#egg=defi_protocols
```
## Installing latest version available on pypi
[pip3 install defi-protocols](https://pypi.org/project/defi-protocols/)
## Config
- First you will have to modify the [config.json](https://github.com/KarpatkeyDAO/defi-protocols/blob/main/defi_protocols/config.json)
- You should provide `RPC` endpoints and `EXPLORER API KEYS`
- You should set the env `CONFIG_PATH` env with the config.json's absolute path or the config.json can be placed under default package path `/path/to/python/site-packages/defi-protocols/config.json`
<details><summary><b>Test</b></summary>
```bash
nano /tmp/config.json
export CONFIG_PATH=/tmp/config.json
```
```python
from defi_protocols.constants import config_data
print(config_data)
```
```bash
output:
{'apikeys': {'etherscan': 'xyz', 'polscan': 'xyz', 'gnosisscan': 'xyz', 'binance': 'xyz', 'avalanche': 'xyz', 'fantom': 'xyz', 'ethplorer': 'xyz'}, 'nodes': {'ethereum': {'latest': ['first', 'second', 'third', 'fourth'], 'archival': ['first', 'second', 'third', 'fourth']}, 'polygon': {'latest': ['first', 'second', 'third', 'fourth'], 'archival': ['first', 'second', 'third', 'fourth']}, 'xdai': {'latest': ['first', 'second', 'third', 'fourth'], 'archival': ['first', 'second', 'third', 'fourth']}, 'binance': {'latest': ['first', 'second', 'third', 'fourth'], 'archival': ['first', 'second', 'third', 'fourth']}, 'avalanche': {'latest': ['first', 'second', 'third', 'fourth'], 'archival': ['first', 'second', 'third', 'fourth']}, 'fantom': {'latest': ['first', 'second', 'third', 'fourth'], 'archival': ['first', 'second', 'third', 'fourth']}, 'ropsten': {'latest': ['first', 'second', 'third', 'fourth'], 'archival': ['first', 'second', 'third', 'fourth']}, 'kovan': {'latest': ['first', 'second', 'third', 'fourth'], 'archival': ['first', 'second', 'third', 'fourth']}, 'goerli': {'latest': ['first', 'second', 'third', 'fourth'], 'archival': ['first', 'second', 'third', 'fourth']}}}
```
</details>
## Protocols supported
| Protocol | Underlying | Rewards | Fees | docs |
|---------------|------------|---------|------|------|
| AAVE | ✔ | ✔ | - | [link](https://github.com/KarpatkeyDAO/defi-protocols/blob/main/docs/Aave.md) |
| Agave | ✔ | ✔ | - | [link](https://github.com/KarpatkeyDAO/defi-protocols/blob/main/docs/Agave.md) |
| Aura | ✔ | ✔ | - | [link](https://github.com/KarpatkeyDAO/defi-protocols/blob/main/docs/Aura.md) |
| Balancer | ✔ | ✔ | ✔ | [link](https://github.com/KarpatkeyDAO/defi-protocols/blob/main/docs/Balancer.md) |
| Bancor | ✔ | ? | - | [link](https://github.com/KarpatkeyDAO/defi-protocols/blob/main/docs/Bancor.md) |
| Compound | ✔ | pending | - | [link](https://github.com/KarpatkeyDAO/defi-protocols/blob/main/docs/Compound.md) |
| Convex | ✔ | ✔ | - | [link](https://github.com/KarpatkeyDAO/defi-protocols/blob/main/docs/Convex.md) |
| Curve | ✔ | ✔ | ✔ | [link](https://github.com/KarpatkeyDAO/defi-protocols/blob/main/docs/Curve.md) |
| Elk | ✔ | ✔ | ✔ | [link](https://github.com/KarpatkeyDAO/defi-protocols/blob/main/docs/Elk.md) |
| Honeyswap | ✔ | - | ✔ | [link](https://github.com/KarpatkeyDAO/defi-protocols/blob/main/docs/Honeyswap.md) |
| Maker | ✔ | - | - | [link](https://github.com/KarpatkeyDAO/defi-protocols/blob/main/docs/Maker.md) |
| QiDao | ✔ | - | - | [link](https://github.com/KarpatkeyDAO/defi-protocols/blob/main/docs/QiDao.md) |
| SushiSwap | ✔ | ✔ | ✔ | [link](https://github.com/KarpatkeyDAO/defi-protocols/blob/main/docs/Sushiswap.md) |
| Swapr | ✔ | ✔ | ✔ | [link](https://github.com/KarpatkeyDAO/defi-protocols/blob/main/docs/Swapr.md) |
| Symmetric | ✔ | ✔ | ✔ | [link](https://github.com/KarpatkeyDAO/defi-protocols/blob/main/docs/Symmetric.md) |
| Unit Protocol | ✔ | ✔ | - | [link](https://github.com/KarpatkeyDAO/defi-protocols/blob/main/docs/Unit.md) |
| Uniswap V3 | ✔ | ? | - | [link](https://github.com/KarpatkeyDAO/defi-protocols/blob/main/docs/UniswapV3.md) |
## Docs
- <details><summary><b>Functions</b></summary>
# Functions
## Defined in functions.py
### 1: get_node(blockchain, block='latest', index=0)
> Description: function returns web3 object of the node
- <details><summary><b>Example</b></summary>
```
a = get_node(ETHEREUM, 'latest', 0)
print(a)
```
```
output:
<web3.main.Web3 object at 0x7fe8c584b8b0>
```
</details>
### 2: last_block(blockchain, web3=None, block='latest', index=0)
> Description: functoion returns last block of the blockchain
- <details><summary><b>Example</b></summary>
```
a = last_block(ETHEREUM, None, 'latest', 0)
print(a)
```
```
output:
16370420
```
</details>
### 3: timestamp_to_date(timestamp, utc=0)
> Description: function retuns timestamp to date conversion
- <details><summary><b>Example</b></summary>
```
a = timestamp_to_date(1663181616)
print(a)
```
```
output:
2022-09-14 18:53:36
```
</details>
### 4: timestamp_to_block(timestamp, blockchain) -> int
> Description: function returns timestamp to block conversion
- <details><summary><b>Example</b></summary>
```
a = timestamp_to_block(1663181616, ETHEREUM)
print(a)
```
```
output:
15534540
```
</details>
### 5: date_to_timestamp(datestring, utc=0)
> Description: function returns date to timestamp conversion
- <details><summary><b>Example</b></summary>
```bash
a = date_to_timestamp('2022-01-14 00:00:00')
print(a)
```
```
output:
1642118400
```
</details>
### 6: date_to_block(datestring, blockchain, utc=0) -> int
> Description: function returns date to block conversion
- <details><summary><b>Example</b></summary>
```bash
a = date_to_block('2022-01-14 00:00:00', ETHEREUM)
print(a)
```
```
output:
14000270
```
</details>
### 7: block_to_timestamp(block, blockchain)
> Description: function returns block to timestamp conversion
- <details><summary><b>Example</b></summary>
```bash
a = block_to_timestamp(14000200, ETHEREUM)
print(a)
```
```
output:
1642117536
```
</details>
### 8: block_to_date(block, blockchain, utc=0)
> Description: function returns block to date conversion
- <details><summary><b>Example</b></summary>
```bash
a = block_to_date(14000270, ETHEREUM)
print(a)
```
```
output:
2022-01-13 23:59:54
```
</details>
### 9: get_blocks_per_year(blockchain)
> Description: function returns blocks per year for a blockchain
- <details><summary><b>Example</b></summary>
```bash
a = get_blocks_per_year(ETHEREUM)
print(a)
```
```
output:
2398217
```
</details>
### 10: token_info(token_address, blockchain)
> Description: function returns token related info
- <details><summary><b>Example</b></summary>
```bash
a = token_info('0x6810e776880C02933D47DB1b9fc05908e5386b96', ETHEREUM)
print (a)
```
```
output:
{'address': '0x6810e776880c02933d47db1b9fc05908e5386b96', 'name': 'Gnosis', 'decimals': '18', 'symbol': 'GNO', 'totalSupply': '10000000000000000000000000', 'owner': '', 'txsCount': 154486, 'transfersCount': 318423, 'lastUpdated': 1673304547, 'issuancesCount': 0, 'holdersCount': 16650, 'website': 'https://gnosis.pm/', 'image': '/images/GNO6810e776.png', 'ethTransfersCount': 0, 'price': {'rate': 91.2045572764551, 'diff': 4, 'diff7d': 8.78, 'ts': 1673304180, 'marketCapUsd': 236182227.06842083, 'availableSupply': 2589588, 'volume24h': 1954362.90295114, 'volDiff1': 17.234718455656363, 'volDiff7': 1358.516624011187, 'volDiff30': 108.75660649607727, 'diff30d': 1.367903603382814, 'bid': 323.4, 'currency': 'USD'}, 'publicTags': ['DEX', 'Protocol', 'DeFi'], 'countOps': 318423}
```
</details>
### 11: balance_of(address, contract_address, block, blockchain, execution=1, web3=None, index=0, decimals=True)
> Description: function returns ballance of given wallet for given contract
- <details><summary><b>Example</b></summary>
```bash
a = balance_of('0x2D0669DB84f11A9EAD41e57Ce2f242D92111a58F', '0x6810e776880C02933D47DB1b9fc05908e5386b96', 'latest', ETHEREUM)
print(a)
```
```
output:
0.0
```
</details>
### 12: total_supply(token_address, block, blockchain, execution=1, web3=None, index=0, decimals=True)
> Description: fucntion returns total suppy for a given token contract address
- <details><summary><b>Example</b></summary>
```bash
a = total_supply('0x6810e776880C02933D47DB1b9fc05908e5386b96', 'latest', ETHEREUM)
print(a)
```
```
output:
10000000.0
```
</details>
### 13: get_decimals(token_address, blockchain, execution=1, web3=None, block='latest', index=0)
> Description: function returns decimals for given token address
### 14: get_symbol(token_address, blockchain, execution=1, web3=None, block='latest', index=0) -> str
> Description: function returns symbol for given toke contract address
### 15: get_contract_abi(contract_address, blockchain)
> fucntion returns abi for given contract address
### 16: get_contract(contract_address, blockchain, web3=None, abi=None, block='latest', index=0)
> Description: function returns web3 contract object for given contract object
- <details><summary><b>Example</b></summary>
```bash
print(get_contract('0xdAC17F958D2ee523a2206206994597C13D831ec7', ETHEREUM))
```
```
output:
<web3._utils.datatypes.Contract object at 0x7f1dfdcb7af0>
```
</details>
### 16: get_contract_proxy_abi(contract_address, abi_contract_address, blockchain, web3=None, block='latest', index=0)
> Description: function returns abi for given contract with the help of proxy conract
- <details><summary><b>Example</b></summary>
```bash
# a = get_contract_abi('0xdc31ee1784292379fbb2964b3b9c4124d8f89c60', GOERLI)
# print(a)
b = get_contract_proxy_abi('0xdc31ee1784292379fbb2964b3b9c4124d8f89c60', '0xe2E52C2D0D64209b8DD1854371A4C673c13448f0', GOERLI)
print(b)
```
```
output:
<web3._utils.datatypes.Contract object at 0x7f61efe07af0>
```
</details>
### 17: search_proxy_contract(contract_address, blockchain, web3=None)
> Description: function returns proxy contracts for given contract
- <details><summary><b>Example</b></summary>
```bash
d = search_proxy_contract('0x4aa42145Aa6Ebf72e164C9bBC74fbD3788045016', XDAI)
print(d)
```
```
output:
<web3._utils.datatypes.Contract object at 0x7f0ac475ba90>
```
</details>
### 18: get_abi_function_signatures(contract_address, blockchain, web3=None, abi_address=None)
> Description: function returns function signatures for givenn contract address
- <details><summary><b>Example</b></summary>
```bash
d = get_abi_function_signatures('0x4aa42145Aa6Ebf72e164C9bBC74fbD3788045016', XDAI)
print(d)
```
```
output:
[{'name': 'claimValues', 'signature': 'claimValues(address,address)', 'inline_signature': 'claimValues(address,address)', 'components': ['address', 'address'], 'stateMutability': 'nonpayable'}, {'name': 'owner', 'signature': 'owner()', 'inline_signature': 'owner()', 'components': [], 'stateMutability': 'view'}, {'name': 'transferOwnership', 'signature': 'transferOwnership(address)', 'inline_signature': 'transferOwnership(address)', 'components': ['address'], 'stateMutability': 'nonpayable'}]
```
</details>
### 19: get_data(contract_address, function_name, parameters, blockchain, web3=None, abi_address=None)
> Description: function returns data of a specific function of given contract address
- <details><summary><b>Example</b></summary>
```bash
d = get_data('0x4aa42145Aa6Ebf72e164C9bBC74fbD3788045016', 'owner', None, XDAI)
print(d)
```
```
output:
0x8da5cb5b
```
</details>
### 20: get_token_tx(token_address, contract_address, block_start, block_end, blockchain)
> Description: function returns transactions on given contract for given token address for given block range
- <details><summary><b>Example</b></summary>
```bash
e = get_token_tx('0x4ECaBa5870353805a9F068101A40E0f32ed605C6', '0xc30141B657f4216252dc59Af2e7CdB9D8792e1B0', 25813406, 'latest', XDAI)
print(e)
```
```
output:
[{'blockNumber': '25848427', 'timeStamp': '1673114785', 'hash': '0x75a397e95e3e5761b21f05ead73834455fda37888ec27079a8f1a45b24b6d1cb', 'nonce': '686', 'blockHash': '0x7f818d65d54f4a00ae968965a13d5d7cd113b67f0fba326d674cefa3ec8bb2b6', 'from': '0xc30141b657f4216252dc59af2e7cdb9d8792e1b0', 'contractAddress': '0x4ecaba5870353805a9f068101a40e0f32ed605c6', 'to': '0xac313d7491910516e06fbfc2a0b5bb49bb072d91', 'value': '101454525', 'tokenName': 'Tether USD on xDai', 'tokenSymbol': 'USDT', 'tokenDecimal': '6', 'transactionIndex': '1', 'gas': '926025', 'gasPrice': '1825346000', 'gasUsed': '562326', 'cumulativeGasUsed': '583326', 'input': 'deprecated', 'confirmations': '36987'}, {'blockNumber': '25848427', 'timeStamp': '1673114785', 'hash': '0x75a397e95e3e5761b21f05ead73834455fda37888ec27079a8f1a45b24b6d1cb', 'nonce': '686', 'blockHash': '0x7f818d65d54f4a00ae968965a13d5d7cd113b67f0fba326d674cefa3ec8bb2b6', 'from': '0x1111111254fb6c44bac0bed2854e76f90643097d', 'contractAddress': '0x4ecaba5870353805a9f068101a40e0f32ed605c6', 'to': '0xc30141b657f4216252dc59af2e7cdb9d8792e1b0', 'value': '101454525', 'tokenName': 'Tether USD on xDai', 'tokenSymbol': 'USDT', 'tokenDecimal': '6', 'transactionIndex': '1', 'gas': '926025', 'gasPrice': '1825346000', 'gasUsed': '562326', 'cumulativeGasUsed': '583326', 'input': 'deprecated', 'confirmations': '36987'}, {'blockNumber': '25842520', 'timeStamp': '1673084125', 'hash': '0x521a6ed38b407d3101456135fdae3428e5ce32eb6749ed8bee1beeb28591bb79', 'nonce': '471', 'blockHash': '0x322acd3bad3b462d053e014c088b164c7d17491d683d946d7edb4f7374bc14c4', 'from': '0xc30141b657f4216252dc59af2e7cdb9d8792e1b0', 'contractAddress': '0x4ecaba5870353805a9f068101a40e0f32ed605c6', 'to': '0xac313d7491910516e06fbfc2a0b5bb49bb072d91', 'value': '36272803', 'tokenName': 'Tether USD on xDai', 'tokenSymbol': 'USDT', 'tokenDecimal': '6', 'transactionIndex': '5', 'gas': '828950', 'gasPrice': '2000000007', 'gasUsed': '535324', 'cumulativeGasUsed': '886617', 'input': 'deprecated', 'confirmations': '42894'}, {'blockNumber': '25842520', 'timeStamp': '1673084125', 'hash': '0x521a6ed38b407d3101456135fdae3428e5ce32eb6749ed8bee1beeb28591bb79', 'nonce': '471', 'blockHash': '0x322acd3bad3b462d053e014c088b164c7d17491d683d946d7edb4f7374bc14c4', 'from': '0x1111111254fb6c44bac0bed2854e76f90643097d', 'contractAddress': '0x4ecaba5870353805a9f068101a40e0f32ed605c6', 'to': '0xc30141b657f4216252dc59af2e7cdb9d8792e1b0', 'value': '36272803', 'tokenName': 'Tether USD on xDai', 'tokenSymbol': 'USDT', 'tokenDecimal': '6', 'transactionIndex': '5', 'gas': '828950', 'gasPrice': '2000000007', 'gasUsed': '535324', 'cumulativeGasUsed': '886617', 'input': 'deprecated', 'confirmations': '42894'}, {'blockNumber': '25814478', 'timeStamp': '1672938840', 'hash': '0x48c01f261497eb2ab9a82dfd019d4d019b7d5bd9707399e1ae8ec0891542bf29', 'nonce': '3132', 'blockHash': '0xcb1b78d76b7ca57c8feaff09862662d071a9fefe435e7dc7baf14e5b954ac45b', 'from': '0xc30141b657f4216252dc59af2e7cdb9d8792e1b0', 'contractAddress': '0x4ecaba5870353805a9f068101a40e0f32ed605c6', 'to': '0xac313d7491910516e06fbfc2a0b5bb49bb072d91', 'value': '48987164', 'tokenName': 'Tether USD on xDai', 'tokenSymbol': 'USDT', 'tokenDecimal': '6', 'transactionIndex': '1', 'gas': '1007940', 'gasPrice': '1500000007', 'gasUsed': '610897', 'cumulativeGasUsed': '802730', 'input': 'deprecated', 'confirmations': '70936'}, {'blockNumber': '25814478', 'timeStamp': '1672938840', 'hash': '0x48c01f261497eb2ab9a82dfd019d4d019b7d5bd9707399e1ae8ec0891542bf29', 'nonce': '3132', 'blockHash': '0xcb1b78d76b7ca57c8feaff09862662d071a9fefe435e7dc7baf14e5b954ac45b', 'from': '0x1111111254fb6c44bac0bed2854e76f90643097d', 'contractAddress': '0x4ecaba5870353805a9f068101a40e0f32ed605c6', 'to': '0xc30141b657f4216252dc59af2e7cdb9d8792e1b0', 'value': '48987164', 'tokenName': 'Tether USD on xDai', 'tokenSymbol': 'USDT', 'tokenDecimal': '6', 'transactionIndex': '1', 'gas': '1007940', 'gasPrice': '1500000007', 'gasUsed': '610897', 'cumulativeGasUsed': '802730', 'input': 'deprecated', 'confirmations': '70936'}]
```
</details>
### 21: get_tx_list(contract_address, block_start, block_end, blockchain)
> Description: function returns txs list for given contract address for given block range
- <details><summary><b>Example</b></summary>
```bash
e = get_tx_list('0x4ECaBa5870353805a9F068101A40E0f32ed605C6', 25884100, 'latest', XDAI)
print(e)
```
```
output:
[{'blockNumber': '25884304', 'timeStamp': '1673301985', 'hash': '0x2eb63c1d0af69b41969515885badb605a791a1ae4917339d895294ec88b8c4c2', 'nonce': '3', 'blockHash': '0x1f5189238d55e31fd9510022a3a50d0649f5a8110601ed138f4661a1de862460', 'transactionIndex': '41', 'from': '0x10e35f286bc156272c6846b97d1a95b9555ced4b', 'to': '0x4ecaba5870353805a9f068101a40e0f32ed605c6', 'value': '0', 'gas': '289343', 'gasPrice': '2910000001', 'isError': '1', 'txreceipt_status': '0', 'input': '0x4000aea0000000000000000000000000f6a78083ca3e2a662d6dd1703c939c8ace2e268d00000000000000000000000000000000000000000000000000000000124616160000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001410e35f286bc156272c6846b97d1a95b9555ced4b000000000000000000000000', 'contractAddress': '', 'cumulativeGasUsed': '3381775', 'gasUsed': '30207', 'confirmations': '1169', 'methodId': '0x4000aea0', 'functionName': 'transferAndCall(address _to, uint256 _value, bytes _data)'}, {'blockNumber': '25884303', 'timeStamp': '1673301980', 'hash': '0x75b29da1b0ea555d70955ebeacc2797e46f60deb6540805ed68a6585c78f8699', 'nonce': '2', 'blockHash': '0x32044065f599e8c4f4c5fb9ce3e17b0d3633678b10b462e0bd3417a0caaf9636', 'transactionIndex': '0', 'from': '0x10e35f286bc156272c6846b97d1a95b9555ced4b', 'to': '0x4ecaba5870353805a9f068101a40e0f32ed605c6', 'value': '0', 'gas': '289343', 'gasPrice': '2910000001', 'isError': '0', 'txreceipt_status': '1', 'input': '0x4000aea0000000000000000000000000f6a78083ca3e2a662d6dd1703c939c8ace2e268d00000000000000000000000000000000000000000000000000000000124616160000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001410e35f286bc156272c6846b97d1a95b9555ced4b000000000000000000000000', 'contractAddress': '', 'cumulativeGasUsed': '227528', 'gasUsed': '227528', 'confirmations': '1170', 'methodId': '0x4000aea0', 'functionName': 'transferAndCall(address _to, uint256 _value, bytes _data)'}]
```
</details>
### 22: get_logs(block_start, block_end, address, topic0, blockchain, **kwargs)
> Description: function returns logs data for given block range for specified contract/address
** Example needed **
### 23: get_block_samples(start_date, samples, blockchain, end_date='latest', utc=0, dates=False)
> Description: function returns blah blahh blaaahhh
** Work needs to be done **
### 24: is_archival(endpoint) -> bool
> Description: function returns if node is an archival node or a full node.
</details>
- <details><summary><b>Aave</b></summary>
# Aave
## Defined in Aave.py
### 1: get_reserves_tokens(pdp_contract, block)
> Description: function returns reserved tokens for aave protocol v2
- <details><summary><b>Example</b></summary>
```
from defi_protocols.functions import *
from defi_protocols import Aave
f1 = get_contract('0x057835Ad21a177dbdd3090bB1CAE03EaCF78Fc6d', ETHEREUM)
f2 = Aave.get_reserves_tokens(f1, 'latest')
print(f2)
```
```
output:
['0xdAC17F958D2ee523a2206206994597C13D831ec7', '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', '0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e', '0xE41d2489571d322189246DaFA5ebDe1F4699F498', '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984', '0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9', '0x0D8775F648430679A709E98d2b0Cb6250d2887EF', '0x4Fabb145d64652a948d72533023f6E7A623C7C53', '0x6B175474E89094C44Da98b954EedeAC495271d0F', '0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c', '0xdd974D5C2e2928deA5F71b9825b8b646686BD200', '0x514910771AF9Ca656af840dff83E8264EcF986CA', '0x0F5D2fB29fb7d3CFeE444a200298f468908cC942', '0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2', '0x408e41876cCCDC0F92210600ef50372656052a38', '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F', '0x57Ab1ec28D129707052df4dF418D58a2D46d5f51', '0x0000000000085d4780B73119b644AE5ecd22b376', '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', '0xD533a949740bb3306d119CC777fa900bA034cd52', '0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd', '0xba100000625a3754423978a60c9317c58a424e3D', '0x8798249c2E607446EfB7Ad49eC89dD1865Ff4272', '0xD5147bc8e386d91Cc5DBE72099DAC6C9b99276F5', '0x03ab458634910AaD20eF5f1C8ee96F1D6ac54919', '0xD46bA6D942050d489DBd938a2C909A5d5039A161', '0x8E870D67F660D95d5be530380D0eC0bd388289E1', '0x1494CA1F11D487c2bBe4543E90080AeBa4BA3C2b', '0x853d955aCEf822Db058eb8505911ED77F175b99e', '0x956F47F50A910163D8BF957Cf5846D573E7f87CA', '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84', '0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72', '0xa693B19d2931d498c5B318dF961919BB4aee87a5', '0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B', '0x111111111117dC0aa78b770fA6A738034120C302', '0x5f98805A4E8be255a32880FDeC7F6728C6568bA0']
```
</details>
### 2: get_reserves_tokens_balances(web3, wallet, block, blockchain, decimals=True)
> Description: function returns reserved token ballances for given wallet
- <details><summary><b>Example</b></summary>
```
from defi_protocols.functions import *
from defi_protocols import Aave
web3 = get_node(ETHEREUM, 'latest', 0)
f2 = Aave.get_reserves_tokens_balances(web3, '0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM)
print(f2)
```
```
output: [['0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', -25.1759987], ['0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84', 1385.4727732126728]]
```
</details>
### 3: get_data(wallet, block, blockchain, execution = 1, web3=None, index=0, decimals=True)
> Description: function returns aave protocol data for given wallet
- <details><summary><b>Example</b></summary>
```
from defi_protocols.functions import *
from defi_protocols import Aave
f3 = Aave.get_data('0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM)
print(f3)
```
```
output:
{'collateral_ratio': 422.8517007532872, 'liquidation_ratio': 120.48192771084337, 'eth_price_usd': 1321.28, 'collaterals': [{'token_address': '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84', 'token_amount': 1385.4727732126728, 'token_price_usd': 1309.82714496}], 'debts': [{'token_address': '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', 'token_amount': 25.17600199, 'token_price_usd': 17046.574635530906}]}
```
</details>
### 4: get_all_rewards(wallet, block, blockchain, execution = 1, web3=None, index=0, decimals=True)
> Description: function returns all the rewards for given wallet from aave protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols.functions import *
from defi_protocols import Aave
f4 = Aave.get_all_rewards('0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM)
print(f4)
```
```
output:
[['0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9', 5.046433045046507]]
```
### 5: underlying(wallet, block, blockchain, execution=1, web3=None, index=0, decimals=True, reward=False)
> Description: function returns underlying tokens for given wallter from aave protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols.functions import *
from defi_protocols import Aave
f5 = Aave.underlying('0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM, reward=True)
print(f5)
```
```
output:
[[['0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', -25.17600614], ['0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84', 1385.4727732126728]], [['0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9', 5.046433045046507]]]
```
</details>
- <details><summary><b>Agave</b></summary>
# Agave
## Defined in Agave.py
### 1: get_reserves_tokens(pdp_contract, block)
> Description: function returns reserved tokens for agave protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Agave
f1 = Agave.get_contract('0x24dCbd376Db23e4771375092344f5CbEA3541FC0', XDAI)
f2 = Agave.get_reserves_tokens(f1, 'latest')
print(f2)
```
```
output:
['0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83', '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', '0xE2e73A1c69ecF83F464EFCE6A5be353a37cA09b2', '0x9C58BAcC331c9aa871AFD802DB6379a98e80CEdb', '0x8e5bBbb09Ed1ebdE8674Cda39A0c169401db4252', '0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1', '0x21a42669643f45Bc0e086b8Fc2ed70c23D67509d', '0x4ECaBa5870353805a9F068101A40E0f32ed605C6']
```
</details>
### 2: get_reserves_tokens_balances(web3, wallet, block, blockchain, decimals=True)
> Description: function returns reserved token balances for given wallet address
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Agave
web3 = get_node(XDAI, 'latest', 0)
f2 = Agave.get_reserves_tokens_balances(web3, '0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', XDAI)
print(f2)
```
```
output: []
```
</details>
### 3: get_data(wallet, block, blockchain, execution=1, web3=None, index=1, decimals=True)
> Description: function returns agave data for given wallet address
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Agave
f3 = Agave.get_data('0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', XDAI)
print(f3)
```
```
output: None
```
</details>
### 4: get_all_rewards(wallet, block, blockchain, execution=1, web3=None, index=0, decimals=True)
> Description: function returns all rewards for given wallet on agave protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Agave
f4 = Agave.get_all_rewards('0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', XDAI)
print(f4)
```
```
output: [['0x3a97704a1b25F08aa230ae53B352e2e72ef52843', 0.0]]
```
</details>
### 5: underlying(wallet, block, blockchain, execution=1, web3=None, index=0, decimals=True, reward=False)
> Description: function returns underlying tokens for given wallet from agave protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Agave
f5 = Agave.underlying('0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', XDAI, reward=True)
print(f5)
```
```
output: [[], [['0x3a97704a1b25F08aa230ae53B352e2e72ef52843', 0.0]]]
```
</details>
</details>
- <details><summary><b>Aura</b></summary>
# Aura
## Defined in Aura.py
### 1: get_pool_info(booster_contract, lptoken_address, block)
> Description: function returns pool info for Aura protocol
```
# get_pool_info - Retrieves the result of the pool_info method if there is a match for the lptoken_address - Otherwise it returns None
# Output: pool_info method return a list with the following data:
# [0] lptoken address, [1] token address, [2] gauge address, [3] crvRewards address, [4] stash adress, [5] shutdown bool
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Aura
f0 = get_contract('0xA57b8d98dAE62B26Ec3bcC4a365338157060B234', ETHEREUM)
f1 = Aura.get_pool_info(f0, '0xCfCA23cA9CA720B6E98E3Eb9B6aa0fFC4a5C08B9', 'latest')
print(f1)
```
```
output:
['0xCfCA23cA9CA720B6E98E3Eb9B6aa0fFC4a5C08B9', '0x70751c02db1a5e48eD333c919A7B94e34a4E07E2', '0x275dF57d2B23d53e20322b4bb71Bf1dCb21D0A00', '0x712CC5BeD99aA06fC4D5FB50Aea3750fA5161D0f', '0xE61df2CE6CC89467bb30f44E0d5cABfCEdc115BE', False]
```
</details>
### 2: get_rewards(web3, rewarder_contract, wallet, block, blockchain, decimals=True)
> Description: function returns for given wallet from Aura protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Aura
web3 = get_node(ETHEREUM, 'latest', 0)
f1 = get_contract('0x00A7BA8Ae7bca0B10A32Ea1f8e2a1Da980c6CAd2', ETHEREUM)
f2 = Aura.get_rewards(web3, f1, '0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM)
print(f2)
```
```
output: ['0xba100000625a3754423978a60c9317c58a424e3D', 4017.2429829677944]
```
</details>
### 3: get_extra_rewards(web3, rewarder_contract, wallet, block, blockchain, decimals=True)
> Description: function returns extra rewards from Aura protocol for given wallet
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Aura
web3 = get_node(ETHEREUM, 'latest', 0)
f1 = get_contract('0x00A7BA8Ae7bca0B10A32Ea1f8e2a1Da980c6CAd2', ETHEREUM)
f3 = Aura.get_extra_rewards(web3, f1, '0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM)
print(f3)
```
```
output: [['0xA13a9247ea42D743238089903570127DdA72fE44', 30.77849807228373]]
```
</details>
### 4: get_extra_rewards_airdrop(wallet, block, blockchain, execution=1, web3=None, index=0, decimals=True)
> Description: function returns extra rewards/airdrop for given wallet by Aura protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Aura
f4 = Aura.get_extra_rewards_airdrop('0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM)
print(f4)
```
```
output: []
```
</details>
### 5: get_aura_mint_amount(web3, bal_earned, block, blockchain, decimals=True)
** Help needed **
> Description: function returns ...
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Aura
```
```
output: []
```
</details>
### 6: get_all_rewards(wallet, lptoken_address, block, blockchain, execution=1, web3=None, index=0, decimals=True, bal_rewards_contract=None)
> Description: function returns all the rewards for givrn wallet on/by Aura protocol
```
# Output:
# 1 - List of Tuples: [aura_token_address, locked_balance]
# 2 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Aura
f6 = Aura.get_all_rewards('0x849D52316331967b6fF1198e5E32A0eB168D039d', '0xCfCA23cA9CA720B6E98E3Eb9B6aa0fFC4a5C08B9', 'latest', ETHEREUM)
print(f6)
```
```
output:
[['0xba100000625a3754423978a60c9317c58a424e3D', 182.74770874952657], ['0xC0c293ce456fF0ED870ADd98a0828Dd4d2903DBF', 656.3832186003915]]
```
</details>
### 7: get_locked(wallet, block, blockchain, execution=1, web3=None, index=0, reward=False, decimals=True)
> Description: function returns locked token on Aura protocol for given wallet address
```
# Output:
# 1 - List of Tuples: [aurabal_token_address, staked_balance]
# 2 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Aura
f7 = Aura.get_locked('0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM)
print(f7)
```
```
output:
[['0xC0c293ce456fF0ED870ADd98a0828Dd4d2903DBF', 1180484.6172952577]]
```
</details>
### 8: get_staked(wallet, block, blockchain, web3=None, execution=1, index=0, reward=False, decimals=True)
> Description: function returns staked token for given wallet on Aura protocol
```
# Output:
# 1 - List of Tuples: [aurabal_token_address, staked_balance]
# 2 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Aura
f8 = Aura.get_staked('0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM)
print(f8)
```
```
output:
[['0x616e8BfA43F920657B3497DBf40D6b1A02D4608d', 340828.48444727337]]
```
</details>
### 9: underlying(wallet, lptoken_address, block, blockchain, web3=None, execution=1, index=0, reward=False, no_balancer_underlying=False, decimals=True)
> Description: function returns underlying tokens for given wallter from Aura protocol
```
# Output: a list with 2 elements:
# 1 - List of Tuples: [liquidity_token_address, balance, staked_balance] | [liquidity_token_address, staked_balance] -> depending on 'no_balancer_underlying' value
# 2 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Aura
f9 = Aura.underlying('0x849D52316331967b6fF1198e5E32A0eB168D039d', '0xCfCA23cA9CA720B6E98E3Eb9B6aa0fFC4a5C08B9', 'latest', ETHEREUM)
print(f9)
```
```
output:
[['0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 95.43873343809126], ['0xC0c293ce456fF0ED870ADd98a0828Dd4d2903DBF', 83620.16903591678]]
```
</details>
### 10: pool_balances(lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description: function returns pool balances for given lptoken address
```
# Output: a list with 2 elements:
# 1 - List of Tuples: [liquidity_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Aura
f10 = Aura.pool_balances('0xCfCA23cA9CA720B6E98E3Eb9B6aa0fFC4a5C08B9', 'latest', ETHEREUM)
print(f10)
```
```
output:
[['0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 2680.4587867269847], ['0xC0c293ce456fF0ED870ADd98a0828Dd4d2903DBF', 2348526.7329675243]]
```
</details>
### 11: update_db()
** Help needed **
> Description: function updates the db
</details>
- <details><summary><b>Balancer</b></summary>
# Balancer
## Defined in Balancer.py
### 1: get_lptoken_data(lptoken_address, block, blockchain, web3=None, execution=1, index=0)
> Description: function returns lp token data from balancer protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Balancer
f1 = Balancer.get_lptoken_data('0x7B50775383d3D6f0215A8F290f2C9e2eEBBEceb2', 'latest', ETHEREUM)
print(f1)
```
```
output:
{'contract': <web3._utils.datatypes.Contract object at 0x7f3c66cb6500>, 'poolId': b'{PwS\x83\xd3\xd6\xf0!Z\x8f)\x0f,\x9e.\xeb\xbe\xce\xb2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfe', 'decimals': 18, 'totalSupply': 4025945672168376636231543, 'isBoosted': True, 'bptIndex': 1}
```
</details>
### 2: get_bal_rewards(web3, gauge_contract, wallet, block, blockchain, decimals=True)
> Description: function returns total balancer rewards for given wallet
and to a specific Gauge
```
# Output:
# 1 - Tuples: [bal_token_address, balance]
```
** Help needed **
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Balancer
web3 = get_node(ETHEREUM, 'latest', 0)
f1 = get_contract('0x68d019f64A7aa97e2D4e7363AEE42251D08124Fb', ETHEREUM)
f2 = Balancer.get_bal_rewards(web3, 'f1', '0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM)
print(f2)
```
```
output:
```
</details>
### 3: get_rewards(web3, gauge_contract, wallet, block, blockchain, decimals=True)
> Description: function returns rewards for the given wallet by balancer protocol
```
# Output:
# 1 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Balancer
web3 = get_node(ETHEREUM, 'latest', 0)
f1 = get_contract('0x68d019f64A7aa97e2D4e7363AEE42251D08124Fb', ETHEREUM)
f3 = Balancer.get_rewards(web3, f1, '0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM, decimals=True)
print(f3)
```
```
output: []
```
</details>
### 4: get_vebal_rewards(web3, wallet, block, blockchain, decimals=True)
> Description: function returns vebal rewards for given wallet by Balancer protocol
```
# Output:
# 1 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Balancer
web3 = get_node(ETHEREUM, 'latest', 0)
f4 = Balancer.get_vebal_rewards(web3, '0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM, decimals=True)
print(f4)
```
```
output:
[['0xba100000625a3754423978a60c9317c58a424e3D', 17.470227018260175], ['0x7B50775383d3D6f0215A8F290f2C9e2eEBBEceb2', 111.44084143506045], ['0xA13a9247ea42D743238089903570127DdA72fE44', 25.141921181623832]]
```
</details>
### 5: get_all_rewards(wallet, lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True, gauge_address=None)
> Description: function returns all the rewards for the given wallet by Balancer protocol
```
# Output:
# 1 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Balancer
f5 = Balancer.get_all_rewards('0x849D52316331967b6fF1198e5E32A0eB168D039d', '0x7B50775383d3D6f0215A8F290f2C9e2eEBBEceb2', 'latest', ETHEREUM)
print(f5)
```
```
output: [['0xba100000625a3754423978a60c9317c58a424e3D', 0.0]]
```
</details>
### 6: underlying(wallet, lptoken_address, block, blockchain, web3=None, execution=1, index=0, reward=False, aura_staked=None, decimals=True)
> Description: function returns underlying token for given wallet on Balancer protocol
```
# Output: a list with 2 elements:
# 1 - List of Tuples: [liquidity_token_address, balance, staked_balance, locked_balance]
# 2 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Balancer
f6 = Balancer.underlying('0x849D52316331967b6fF1198e5E32A0eB168D039d', '0x7B50775383d3D6f0215A8F290f2C9e2eEBBEceb2', 'latest', ETHEREUM)
print(f6)
```
```
output:
[['0xdAC17F958D2ee523a2206206994597C13D831ec7', 1.847331235617916e-12, 0.0, 0.0], ['0x6B175474E89094C44Da98b954EedeAC495271d0F', 1.8079866128717203e-12, 0.0, 0.0], ['0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 1.7579658914113204e-12, 0.0, 0.0]]
```
</details>
### 7: pool_balances(lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description: function returns pool balances on Balancer protocol
```
# Output: a list with 1 element:
# 1 - List of Tuples: [liquidity_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Balancer
f7 = Balancer.pool_balances('0x7B50775383d3D6f0215A8F290f2C9e2eEBBEceb2', 'latest', ETHEREUM)
print(f7)
```
```
output:
[['0xdAC17F958D2ee523a2206206994597C13D831ec7', 1396069.6262515152], ['0x6B175474E89094C44Da98b954EedeAC495271d0F', 1366336.012581301], ['0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 1328534.2340286463]]
```
</details>
### 8: swap_fees(lptoken_address, block_start, block_end, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description: function returns the swap fees for given lptoken on Balancer protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Balancer
f8 = Balancer.swap_fees('0x7B50775383d3D6f0215A8F290f2C9e2eEBBEceb2', 16374265, 'latest', ETHEREUM)
print(f8)
```
```
output:
{'swaps': [{'block': 16376941, 'tokenIn': '0x9210F1204b5a24742Eba12f710636D76240dF3d0', 'amountIn': 0.8095032036253991}, {'block': 16378850, 'tokenIn': '0x804CdB9116a10bB78768D3252355a1b18067bF8f', 'amountIn': 0.9885184780730925}]}
```
</details>
</details>
- <details><summary><b>Bancor</b></summary>
# Bancor
## Defined in Bancor.py
### 1: underlying(token_address, wallet, block, blockchain, web3=None, execution=1, index=0, decimals=True, reward=False)
> Description: function returns the underlying token from bancor protocol for given wallet
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Bancor
f1 = Bancor.underlying('0x36FAbE4cAeF8c190550b6f93c306A5644E7dCef6', '0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM)
print(f1)
```
```
output:
[['0x903bEF1736CDdf2A537176cf3C64579C3867A881', 41633.599736141], ['0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C', 0.0]]
```
</details>
### 2: underlying_all(wallet, block, blockchain, web3=None, execution=1, index=0, decimals=True, reward=False)
> Description: function returns all underlying tokens for given wallet
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Bancor
f2 = Bancor.underlying_all('0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM)
print(f2)
```
```
output: None
```
</details>
</details>
- <details><summary><b>Convex</b></summary>
# Convex
## Defined in Convex.py
### 1: get_pool_info(lptoken_address, block)
> Description: function returns pool related info for given lp token
```
# Output: pool_info method return a list with the following data:
# [0] lptoken address, [1] token address, [2] gauge address, [3] crvRewards address, [4] stash adress, [5] shutdown bool
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Convex
f1 = Convex.get_pool_info('0x9fC689CCaDa600B6DF723D9E47D84d76664a1F23', 'latest')
print(f1)
```
```
output:
['0x9fC689CCaDa600B6DF723D9E47D84d76664a1F23', '0xA1c3492b71938E144ad8bE4c2fB6810b01A43dD8', '0xBC89cd85491d81C6AD2954E6d0362Ee29fCa8F53', '0x8B55351ea358e5Eda371575B031ee24F462d503e', '0x0000000000000000000000000000000000000000', False]
```
</details>
### 2: get_rewards(web3, rewarder_contract, wallet, block, blockchain, decimals=True)
> Description: function returns rewards for given wallet on Conexx protocol
```
# Output:
# 1 - Tuples: [token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Convex
web3 = get_node(ETHEREUM, 'latest', 0)
f1 = get_contract('0xf34DFF761145FF0B05e917811d488B441F33a968', ETHEREUM)
f2 = Convex.get_rewards(web3, f1, '0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM)
print(f2)
```
```
output:
['0xD533a949740bb3306d119CC777fa900bA034cd52', 1376.4851165071896]
```
</details>
### 3: get_extra_rewards(web3, crv_rewards_contract, wallet, block, blockchain, decimals=True)
> Description: function returns extra rewards by convex protocol for given wallet
```
# 1 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Convex
web3 = get_node(ETHEREUM, 'latest', 0)
f1 = get_contract('0xf34DFF761145FF0B05e917811d488B441F33a968', ETHEREUM)
f3 = Convex.get_extra_rewards(web3, f1, '0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM)
print(f3)
```
```
output: []
```
</details>
### 3: get_cvx_mint_amount(web3, crv_earned, block, blockchain, decimals=True)
** Help needed **
> Description: function returns
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Convex
```
```
output: []
```
</details>
### 4: get_all_rewards(wallet, lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True, crv_rewards_contract=None)
> Description: function returns all rewards for given wallet on Convex protocol
```
# Output:
# 1 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Convex
f1 = get_contract('0xf34DFF761145FF0B05e917811d488B441F33a968', ETHEREUM)
f4 = Convex.get_all_rewards('0x849D52316331967b6fF1198e5E32A0eB168D039d', 'f1', 'latest', ETHEREUM)
print(f4)
```
```
output: None
```
</details>
### 5: get_locked(wallet, block, blockchain, web3=None, execution=1, index=0, reward=False, decimals=True)
> Description: function returns locked tokens for given wallet on Convex protocol
```
# Output:
# 1 - List of Tuples: [cvx_token_address, locked_balance]
# 2 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Convex
f5 = Convex.get_locked('0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM)
print(f5)
```
```
output:
[['0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B', 8943.594875319563]]
```
</details>
### 6: get_staked(wallet, block, blockchain, web3=None, execution=1, index=0, reward=False, decimals=True)
> Description: function returns staked token for given wallet on Convex protocol
```
# Output:
# 1 - List of Tuples: [cvx_token_address, staked_balance]
# 2 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Convex
f6 = Convex.get_staked('0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM)
print(f6)
```
```
output:
[['0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B', 0.0]]
```
</details>
### 7: underlying(wallet, lptoken_address, block, blockchain, web3=None, execution=1, index=0, reward=False, decimals=True, no_curve_underlying=False)
> Description: function returns underlying token for given wallet on Convex protocol
```
# Output: a list with 2 elements:
# 1 - List of Tuples: [liquidity_token_address, balance, staked_balance] | [liquidity_token_address, staked_balance] -> depending on 'no_curve_underlying' value
# 2 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Convex
f7 = Convex.underlying('0x849D52316331967b6fF1198e5E32A0eB168D039d', '0x9fC689CCaDa600B6DF723D9E47D84d76664a1F23', 'latest', ETHEREUM)
print(f7)
```
```
output:
[['0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', 0.0], ['0x39AA39c021dfbaE8faC545936693aC917d5E7563', 0.0], ['0xdAC17F958D2ee523a2206206994597C13D831ec7', 0.0]]
```
</details>
### 8: pool_balances(lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description: function returns pool balance for given lp token on Convex protocol
```
# Output: a list with 2 elements:
# 1 - List of Tuples: [liquidity_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Convex
f8 = Convex.pool_balances('0x9fC689CCaDa600B6DF723D9E47D84d76664a1F23', 'latest', ETHEREUM)
print(f8)
```
```
output:
[['0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', 5627718.31410783], ['0x39AA39c021dfbaE8faC545936693aC917d5E7563', 5115086.87914827], ['0xdAC17F958D2ee523a2206206994597C13D831ec7', 117437.410424]]
```
</details>
### 9: update_db()
> Description: function updates the Convex db
*** Help Needed ***
</details>
- <details><summary><b>Curve</b></summary>
# Curve
## Defined in Curve.py
### 1: get_registry_contract(web3, id, block, blockchain)
> Dexcription: function returns registry contract object using given id and blockchain
```
# id = 0 -> Registry for Regular Pools
# id = 3 -> Registry for Factory Pools
# id = 5 -> Registry for Crypto V2 Pools
# id = 6 -> Registry for Crypto Factory Pools
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Curve
web3 = get_node(ETHEREUM, 'latest', 0)
f1 = Curve.get_registry_contract(web3, 3, 'latest', ETHEREUM)
print(f1)
```
```
output: <web3._utils.datatypes.Contract object at 0x7fece881a980>
```
</details>
### 2: get_pool_gauge_address(web3, pool_address, lptoken_address, block, blockchain)
> Description: function returns pool gauge address on Curve protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Curve
web3 = get_node(XDAI, 'latest', 0)
web3 = get_node(XDAI, 'latest', 0)
f2 = Curve.get_pool_gauge_address(web3, '0x7f90122BF0700F9E7e1F688fe926940E8839F353', '0x1337BedC9D22ecbe766dF105c9623922A27963EC', 'latest', XDAI)
print(f2)
```
```
output: 0xB721Cc32160Ab0da2614CC6aB16eD822Aeebc101
```
</details>
### 3: get_gauge_version(gauge_address, block, blockchain, web3=None, execution=1, index=0, only_version=True)
> Description: function returns gauge version for given gauge on Curve protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Curve
f3 = Curve.get_gauge_version('0x1891E46859DBf78EeEfb652425755494eE8aD7bf', 'latest', XDAI)
print(f3)
```
```
output: ChildGauge
```
</details>
### 4: get_pool_address(web3, lptoken_address, block, blockchain)
> Description: function returns pool address for given lptoken on Curve protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Curve
web3 = get_node(XDAI, 'latest', 0)
f4 = Curve.get_pool_address(web3, '0x1337BedC9D22ecbe766dF105c9623922A27963EC', 'latest', XDAI)
print(f4)
```
```
output: 0x7f90122BF0700F9E7e1F688fe926940E8839F353
```
</details>
### 5: get_pool_data(web3, minter, block, blockchain):
> Description: function returns pool data for Curver protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Curve
web3 = get_node(ETHEREUM, 'latest', 0)
f5 = Curve.get_pool_data(web3, '0xD51a44d3FaE010294C616388b506AcdA1bfAAE46', 'latest', ETHEREUM)
print(f5)
```
```
output:
{'contract': <web3._utils.datatypes.Contract object at 0x7f283c7f67d0>, 'is_metapool': False, 'coins': {0: '0xdAC17F958D2ee523a2206206994597C13D831ec7', 1: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', 2: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'}}
```
</details>
### 6: get_lptoken_data(lptoken_address, block, blockchain, web3=None, execution=1, index=0)
> Description: function returns lp token data
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Curve
f6 = Curve.get_lptoken_data('0xc4AD29ba4B3c580e6D59105FFf484999997675Ff', 'latest', ETHEREUM)
print(f6)
```
```
output:
{'contract': <web3._utils.datatypes.Contract object at 0x7f5b1cbea770>, 'minter': '0xD51a44d3FaE010294C616388b506AcdA1bfAAE46', 'decimals': 18, 'totalSupply': 182450506161827209744987}
```
</details>
### 7: get_all_rewards(wallet, lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True, gauge_address=None)
> Description: function returns all the rewards for the given wallet and lp token on Curve protocol
```
# Output:
# 1 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Curve
f7 = Curve.get_all_rewards('0x849D52316331967b6fF1198e5E32A0eB168D039d', '0xc4AD29ba4B3c580e6D59105FFf484999997675Ff', 'latest', ETHEREUM)
print(f7)
```
```
output: [['0xD533a949740bb3306d119CC777fa900bA034cd52', 0.0]]
```
</details>
### 8: underlying(wallet, lptoken_address, block, blockchain, web3=None, execution=1, index=0, reward=False, decimals=True, convex_staked=None, gauge_address=None)
> Description: function returns underlying tokens for given wallet with given lptoken on Curve protocol
```
# Output: a list with 2 elements:
# 1 - List of Tuples: [liquidity_token_address, balance, staked_balance]
# 2 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Curve
f8 = Curve.underlying('0x849D52316331967b6fF1198e5E32A0eB168D039d', '0x1337BedC9D22ecbe766dF105c9623922A27963EC', 'latest', XDAI )
print(f8)
```
```
output:
[['0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 0.0, 0.0], ['0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83', 0.0, 0.0], ['0x4ECaBa5870353805a9F068101A40E0f32ed605C6', 0.0, 0.0]]
```
</details>
### 9: underlying_amount(lptoken_amount, lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description:
** Help Needed **
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Curve
```
```
output:
```
</details>
### 10: pool_balances(lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True, meta=False)
> Description: function returns pool balances of given lptoken on Curve protocol
```
# Output: a list with 1 elements:
# 1 - List of Tuples: [liquidity_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Curve
f10 = Curve.pool_balances('0x1337BedC9D22ecbe766dF105c9623922A27963EC', 'latest', XDAI)
print(f10)
```
```
output:
[['0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 3097529.0538003724], ['0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83', 3073195.827396], ['0x4ECaBa5870353805a9F068101A40E0f32ed605C6', 3086394.257995]]
```
</details>
### 11: swap_fees(lptoken_address, block_start, block_end, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description: function returns swap fees for given lp token for given range on Curve protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Curve
f11 = Curve.swap_fees('0x1337BedC9D22ecbe766dF105c9623922A27963EC', 25913602, 'latest', XDAI)
print(f11)
```
```
output:
{'swaps': [{'block': 25913682, 'tokenOut': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 'amountOut': 0.0019992133127874276}, {'block': 25913701, 'tokenOut': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 'amountOut': 0.007333559800511542}, {'block': 25913721, 'tokenOut': '0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83', 'amountOut': 0.6397394164}, {'block': 25913783, 'tokenOut': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 'amountOut': 0.0008607565751133651}, {'block': 25913910, 'tokenOut': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 'amountOut': 0.037022720405197725}, {'block': 25913948, 'tokenOut': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 'amountOut': 0.039984303471116825}, {'block': 25913970, 'tokenOut': '0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83', 'amountOut': 0.4002363776}, {'block': 25914114, 'tokenOut': '0x4ECaBa5870353805a9F068101A40E0f32ed605C6', 'amountOut': 0.007996171600000001}, {'block': 25914144, 'tokenOut': '0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83', 'amountOut': 0.0066172976}, {'block': 25914200, 'tokenOut': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 'amountOut': 0.0014729267096921916}, {'block': 25914330, 'tokenOut': '0x4ECaBa5870353805a9F068101A40E0f32ed605C6', 'amountOut': 0.0039983932}, {'block': 25914416, 'tokenOut': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 'amountOut': 0.008602286827199044}, {'block': 25914750, 'tokenOut': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 'amountOut': 0.022511488698351036}, {'block': 25914759, 'tokenOut': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 'amountOut': 0.006614704715056072}, {'block': 25914759, 'tokenOut': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 'amountOut': 0.6997249291194675}, {'block': 25915143, 'tokenOut': '0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83', 'amountOut': 0.13503600880000002}, {'block': 25915224, 'tokenOut': '0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83', 'amountOut': 0.11770507120000001}, {'block': 25915235, 'tokenOut': '0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83', 'amountOut': 0.117932982}, {'block': 25915309, 'tokenOut': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 'amountOut': 0.021514701714473644}, {'block': 25915340, 'tokenOut': '0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83', 'amountOut': 0.005720752000000001}, {'block': 25915455, 'tokenOut': '0x4ECaBa5870353805a9F068101A40E0f32ed605C6', 'amountOut': 1.499395634}, {'block': 25915655, 'tokenOut': '0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83', 'amountOut': 0.05997549320000001}, {'block': 25915684, 'tokenOut': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 'amountOut': 0.00030144913310451685}, {'block': 25915782, 'tokenOut': '0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83', 'amountOut': 0.0219822164}, {'block': 25915803, 'tokenOut': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 'amountOut': 0.02242247669985942}, {'block': 25915834, 'tokenOut': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 'amountOut': 0.0004494915495654226}, {'block': 25915864, 'tokenOut': '0x4ECaBa5870353805a9F068101A40E0f32ed605C6', 'amountOut': 0.0843659144}, {'block': 25915973, 'tokenOut': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 'amountOut': 0.02079185759339624}, {'block': 25916016, 'tokenOut': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 'amountOut': 0.09113021136366664}, {'block': 25916018, 'tokenOut': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 'amountOut': 0.001970104549943838}, {'block': 25916024, 'tokenOut': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 'amountOut': 0.0011432944757581813}, {'block': 25916028, 'tokenOut': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 'amountOut': 0.0014962398019174262}, {'block': 25916156, 'tokenOut': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 'amountOut': 0.2998824374160615}, {'block': 25916435, 'tokenOut': '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 'amountOut': 0.0006173702201516521}]}
```
</details>
</details>
- <details><summary><b>Elk</b></summary>
# Elk
## Defined in Elk.py
### 1: get_lptoken_data(lptoken_address, block, blockchain, web3=None, execution=1, index=0)
> Description: function returns lp token data on ELK protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Elk
f1 = Elk.get_lptoken_data('0xA27E5775317F3f301B5b08BabCdE0a20FEAE7f09', 'latest', ETHEREUM)
print(f1)
```
```
output:
{'contract': <web3._utils.datatypes.Contract object at 0x7fb03eef26b0>, 'decimals': 18, 'totalSupply': 3079557346471436960125, 'token0': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'token1': '0xeEeEEb57642040bE42185f49C52F7E9B38f8eeeE', 'reserves': [29056721408238148310, 347561671694311785474636, 1673509307], 'kLast': 0, 'virtualTotalSupply': 3079557346471436960125}
```
</details>
### 2: get_pool_address(web3, token0, token1, block, blockchain)
> Description: function returns pool addres based on given token pair on Elk protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Elk
web3 = get_node(ETHEREUM, 'latest', 0)
f2 = Elk.get_pool_address(web3, '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', '0xeEeEEb57642040bE42185f49C52F7E9B38f8eeeE', 'latest', ETHEREUM)
print(f2)
```
```
output:
0xF220eA963D27Ebe782f09403017B29692A4fC4aE
```
</details>
### 3: get_elk_rewards(web3, pool_contract, wallet, block, blockchain, decimals=True)
> Description: function returns elk rewards for given pool address for given wallet
```
# Output:
# 1 - Tuple: [elk_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Elk
web3 = get_node(ETHEREUM, 'latest', 0)
f2 = get_contract('0xF220eA963D27Ebe782f09403017B29692A4fC4aE', ETHEREUM)
f3 = Elk.get_elk_rewards(web3, f2, '0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM)
print(f3)
```
```
output: ['0xeEeEEb57642040bE42185f49C52F7E9B38f8eeeE', 0.0]
```
</details>
### 4: get_booster_rewards(web3, pool_contract, wallet, block, blockchain, decimals=True)
> Description: function returns booster rewards on given pool address for given wallet
```
# Output:
# 1 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Elk
web3 = get_node(ETHEREUM, 'latest', 0)
f3 = get_contract('0xF220eA963D27Ebe782f09403017B29692A4fC4aE', ETHEREUM)
f4 = Elk.get_booster_rewards(web3, f3, '0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM)
print(f4)
```
```
output: None
```
</details>
### 5: get_all_rewards(wallet, lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True, pool_contract=None)
> Description: function returns all rewards for given wallet for given lp token
```
# Output:
# 1 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Elk
f5 = Elk.get_all_rewards('0x849D52316331967b6fF1198e5E32A0eB168D039d', '0xF220eA963D27Ebe782f09403017B29692A4fC4aE', 'latest', ETHEREUM)
print(f5)
```
```
output: None
```
</details>
### 6: underlying(wallet, lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True, reward=False)
> Description: function returns underlying tokens for given wallet for given lp token on Elk protocol
```
# Output: a list with 2 elements:
# 1 - List of Tuples: [liquidity_token_address, balance, staked_balance]
# 2 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Elk
f6 = Elk.underlying('0x849D52316331967b6fF1198e5E32A0eB168D039d', '0xA27E5775317F3f301B5b08BabCdE0a20FEAE7f09', 'latest', ETHEREUM)
print(f6)
```
```
output:
[['0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 0.0, 0.0], ['0xeEeEEb57642040bE42185f49C52F7E9B38f8eeeE', 0.0, 0.0]]
```
</details>
### 7: pool_balances(lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description: function retirns pool balances for given lp token
```
# 1 - List of Tuples: [liquidity_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Elk
f7 = Elk.pool_balances('0xA27E5775317F3f301B5b08BabCdE0a20FEAE7f09', 'latest', ETHEREUM)
print(f7)
```
```
output:
[['0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 29.056721408238147], ['0xeEeEEb57642040bE42185f49C52F7E9B38f8eeeE', 347561.6716943118]]
```
</details>
### 8: swap_fees(lptoken_address, block_start, block_end, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description: function returns swap fees for given lp token
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Elk
f8 = Elk.swap_fees('0xA27E5775317F3f301B5b08BabCdE0a20FEAE7f09', 16380015, 'latest', ETHEREUM)
print(f8)
```
```
output:
{'swaps': [{'block': 16381797, 'token': '0xeEeEEb57642040bE42185f49C52F7E9B38f8eeeE', 'amount': 2.889438460326057}, {'block': 16382996, 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'amount': 3e-09}, {'block': 16385571, 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'amount': 0.00255}, {'block': 16385667, 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'amount': 0.0009}, {'block': 16385691, 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'amount': 9e-06}, {'block': 16385812, 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'amount': 0.00015}, {'block': 16385831, 'token': '0xeEeEEb57642040bE42185f49C52F7E9B38f8eeeE', 'amount': 26.723058285543605}, {'block': 16385839, 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'amount': 0.00017571833246287513}, {'block': 16385938, 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'amount': 6e-05}, {'block': 16385957, 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'amount': 3.6e-05}, {'block': 16385975, 'token': '0xeEeEEb57642040bE42185f49C52F7E9B38f8eeeE', 'amount': 12.83912818935761}, {'block': 16386009, 'token': '0xeEeEEb57642040bE42185f49C52F7E9B38f8eeeE', 'amount': 0.39853215112316875}, {'block': 16386450, 'token': '0xeEeEEb57642040bE42185f49C52F7E9B38f8eeeE', 'amount': 31.327314122523138}, {'block': 16386451, 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'amount': 0.0014496276567174053}, {'block': 16386524, 'token': '0xeEeEEb57642040bE42185f49C52F7E9B38f8eeeE', 'amount': 36.478903268343565}, {'block': 16386527, 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'amount': 0.0018}, {'block': 16386537, 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'amount': 0.0005028085391423697}, {'block': 16386559, 'token': '0xeEeEEb57642040bE42185f49C52F7E9B38f8eeeE', 'amount': 23.07109673165644}, {'block': 16386561, 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'amount': 0.0015010243909154}, {'block': 16387375, 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'amount': 1.2028675361808711e-05}, {'block': 16387414, 'token': '0xeEeEEb57642040bE42185f49C52F7E9B38f8eeeE', 'amount': 2.957184093901322}, {'block': 16388603, 'token': '0xeEeEEb57642040bE42185f49C52F7E9B38f8eeeE', 'amount': 7.1615954570745695}, {'block': 16388771, 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'amount': 1.5e-05}, {'block': 16388955, 'token': '0xeEeEEb57642040bE42185f49C52F7E9B38f8eeeE', 'amount': 6.3083888292692265}, {'block': 16388990, 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'amount': 0.0007353592629198234}, {'block': 16389072, 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'amount': 0.00021921}, {'block': 16389072, 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'amount': 0.00255}, {'block': 16389072, 'token': '0xeEeEEb57642040bE42185f49C52F7E9B38f8eeeE', 'amount': 2.65335036}, {'block': 16389108, 'token': '0xeEeEEb57642040bE42185f49C52F7E9B38f8eeeE', 'amount': 9.0}, {'block': 16389299, 'token': '0xeEeEEb57642040bE42185f49C52F7E9B38f8eeeE', 'amount': 11.890786090090941}]}
```
</details>
</details>
- <details><summary><b>Honeyswap</b></summary>
# Honeyswap
## Defined in Honeyswap.py
### 1: get_lptoken_data(lptoken_address, block, blockchain, web3=None, execution=1, index=0)
> Description: function returns lp token data on Honeyswap protoocl
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Honeyswap
f1 = Honeyswap.get_lptoken_data('0xCd9652F006EFDE64f07030F10A1945EAD8AC1855', 'latest', ETHEREUM)
print(f1)
```
```
output:
{'contract': <web3._utils.datatypes.Contract object at 0x7fba31e8a710>, 'decimals': 18, 'totalSupply': 108503144715306467026, 'token0': '0x1957d368f6038F09faaE020d485b35718E0Eed1A', 'token1': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'reserves': [763270497078084747756, 15742597871023746342, 1607901903], 'kLast': 0, 'virtualTotalSupply': 1.3020377365836775e+20}
```
</details>
### 2: underlying(wallet, lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description: function returns underlying tokens for given wallet with given lptoken
```
# Output: a list with 1 element:
# 1 - List of Tuples: [liquidity_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Honeyswap
f2 = Honeyswap.underlying('0x849D52316331967b6fF1198e5E32A0eB168D039d', '0xCd9652F006EFDE64f07030F10A1945EAD8AC1855', 'latest', ETHEREUM)
print(f2)
```
```
output:
[['0x1957d368f6038F09faaE020d485b35718E0Eed1A', 0.0], ['0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 0.0]]
```
</details>
### 3: pool_balances(lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description: function returns pool balances for given lp token on Honeyswap protocol
```
# Output: a list with 1 element:
# 1 - List of Tuples: [liquidity_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Honeyswap
f3 = Honeyswap.pool_balances('0xCd9652F006EFDE64f07030F10A1945EAD8AC1855', 'latest', ETHEREUM)
print(f3)
```
```
output:
[['0x1957d368f6038F09faaE020d485b35718E0Eed1A', 763.2704970780848], ['0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 15.742597871023746]]
```
</details>
### 4: swap_fees(lptoken_address, block_start, block_end, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description: fucntion returns swap fees for given lp token for give reange of blocks
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Honeyswap
f4 = Honeyswap.swap_fees('0xCd9652F006EFDE64f07030F10A1945EAD8AC1855', 0, 'latest', ETHEREUM)
print(f4)
```
```
output:
{'swaps': [{'block': 11134367, 'token': '0x1957d368f6038F09faaE020d485b35718E0Eed1A', 'amount': 0.0005262109004007418}, {'block': 11134380, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.0038122294599445485}, {'block': 11134649, 'token': '0x1957d368f6038F09faaE020d485b35718E0Eed1A', 'amount': 0.000497428365687157}, {'block': 11134961, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.004008351883662104}, {'block': 11134984, 'token': '0x1957d368f6038F09faaE020d485b35718E0Eed1A', 'amount': 0.025735010568652947}, {'block': 11135972, 'token': '0x1957d368f6038F09faaE020d485b35718E0Eed1A', 'amount': 0.23927241967672228}, {'block': 11135972, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.001371294269959149}, {'block': 11136386, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.00149518324360386}, {'block': 11138426, 'token': '0x1957d368f6038F09faaE020d485b35718E0Eed1A', 'amount': 1.5}, {'block': 11138426, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.0005880163841135043}, {'block': 11141757, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.003}, {'block': 11143948, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.0009482496689891964}, {'block': 11153516, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.0009999}, {'block': 11153523, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.0015}, {'block': 11153530, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.0005001}, {'block': 11153581, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.0018}, {'block': 11168389, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.0020655702056233145}, {'block': 11210669, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.005054900815379415}, {'block': 11211315, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.005111990858317916}, {'block': 11211817, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.005679169733007941}, {'block': 11212191, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.0165}, {'block': 11212438, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.018518323978912336}, {'block': 11213214, 'token': '0x1957d368f6038F09faaE020d485b35718E0Eed1A', 'amount': 0.16961917796935855}, {'block': 11213827, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.023760662104344098}, {'block': 11216926, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.008840951952023836}, {'block': 11216935, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.010587407899320654}, {'block': 11216941, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.012907693813954431}, {'block': 11216952, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.016084013197213927}, {'block': 11216959, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.02059631880854048}, {'block': 11216965, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.02731565993218982}, {'block': 11216969, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.033512834207083994}, {'block': 11216969, 'token': '0x1957d368f6038F09faaE020d485b35718E0Eed1A', 'amount': 0.04565053353647096}, {'block': 11216973, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.03537631473540627}, {'block': 11218589, 'token': '0x1957d368f6038F09faaE020d485b35718E0Eed1A', 'amount': 0.02682485834232684}, {'block': 11229905, 'token': '0x1957d368f6038F09faaE020d485b35718E0Eed1A', 'amount': 0.05504515223226972}, {'block': 11240721, 'token': '0x1957d368f6038F09faaE020d485b35718E0Eed1A', 'amount': 0.16473663231733446}, {'block': 11243062, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.024}, {'block': 11246252, 'token': '0x1957d368f6038F09faaE020d485b35718E0Eed1A', 'amount': 0.3}, {'block': 11247278, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.015323293667631526}, {'block': 11428790, 'token': '0xC483ad6F9B80B38691E95b708DE1d46721366ce3', 'amount': 0.0011079232513274775}, {'block': 11447567, 'token': '0x1957d368f6038F09faaE020d485b35718E0Eed1A', 'amount': 1.5}]}
```
</details>
</details>
- <details><summary><b>Maker</b></summary>
# Maker
## Defined in Maker.py
### 1: get_vault_data(vault_id, block, web3=None, execution=1, index=0)
> Description: function returns valut data for given valut id
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Maker
f1 = Maker.get_vault_data(1, 'latest')
print(f1)
```
```
output:
{'mat': 1.45, 'gem': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'dai': '0x6B175474E89094C44Da98b954EedeAC495271d0F', 'ink': 0.0, 'art': 0.0, 'Art': 193027523.3855285, 'rate': 1.0835304604763405, 'spot': 963.8172413793103, 'line': 368907736.31731033, 'dust': 15000.0}
```
</details>
### 2: underlying(vault_id, block, web3=None, execution=1, index=0)
> Description: function returns underlying tokens for given wallet for given vault id on maker protocol
```
# Output:
# 1 - Tuple: [[collateral_address, collateral_amount], [debt_address, -debt_amount]]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Maker
f2 = Maker.underlying(1, 'latest')
print(f2)
```
```
output:
[['0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 0.0], ['0x6B175474E89094C44Da98b954EedeAC495271d0F', -0.0]]
```
</details>
</details>
- <details><summary><b>Qidao</b></summary>
# QiDao
## Defined in QiDao.py
### 1: get_vault_address(collateral_address, blockchain)
> Description: function returns vault address based on given collateral address
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import QiDao
f1 = QiDao.get_vault_address('0x9C58BAcC331c9aa871AFD802DB6379a98e80CEdb', XDAI)
print(f1)
```
```
output: 0x014A177E9642d1b4E970418f894985dC1b85657f
```
</details>
### 2: get_vault_data(vault_id, collateral_address, block, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description: function returns vault data based on given vault id and collateral address
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import QiDao
f2 = QiDao.get_vault_data(1, '0x9C58BAcC331c9aa871AFD802DB6379a98e80CEdb', 'latest', XDAI)
print(f2)
```
```
output:
{'collateral_address': '0x9C58BAcC331c9aa871AFD802DB6379a98e80CEdb', 'collateral_amount': 0.0, 'collateral_token_usd_value': 96.15, 'debt_address': '0x3F56e0c36d275367b8C502090EDF38289b3dEa0d', 'debt_amount': 0.0, 'debt_token_usd_value': 0.9920834072195736, 'debt_usd_value': 0, 'collateral_ratio': None, 'available_debt_amount': 203205.79297252028, 'liquidation_ratio': 130, 'liquidation_price': None}
```
</details>
### 3: underlying(vault_id, collateral_address, block, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description: function returns underlying tokens for given vault id and collateral address
```
# Output:
# 1 - Tuple: [[collateral_address, collateral_amount], [debt_address, -debt_amount]]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import QiDao
f3 = QiDao.underlying(1, '0x9C58BAcC331c9aa871AFD802DB6379a98e80CEdb', 'latest', XDAI)
print(f3)
```
```
output:
[['0x9C58BAcC331c9aa871AFD802DB6379a98e80CEdb', 0.0], ['0x3F56e0c36d275367b8C502090EDF38289b3dEa0d', 0.0]]
```
</details>
</details>
- <details><summary><b>Reflexer</b></summary>
# Reflexer
## Defined in Reflexer.py
### 1: lptoken_underlying(lptoken_address, amount, block, blockchain)
> Description: fucntion returns underlying tokens for given lp token on Reflexer protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Reflexer
f1 = Reflexer.lptoken_underlying('0xd6F3768E62Ef92a9798E5A8cEdD2b78907cEceF9', 10000, 'latest', ETHEREUM)
print(f1)
```
```
output:
[['0x6243d8cea23066d098a15582d81a598b4e8391f4', 51479.35989733311], ['0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', 524.5602730745637]]
[['0x6243d8cea23066d098a15582d81a598b4e8391f4', 51479.35989733311], ['0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', 524.5602730745637]]
[['0x6243d8cea23066d098a15582d81a598b4e8391f4', 115095.22732025111], ['0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', 1172.7881619564894]]
```
</details>
### 2: pool_balance(lptoken_address, block, blockchain)
> Description: fucntion returns pool balance for given lp token
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Reflexer
f2 = Reflexer.pool_balance('0xd6F3768E62Ef92a9798E5A8cEdD2b78907cEceF9', 'latest', ETHEREUM)
print(f2)
```
```
output:
[['0x6243d8cea23066d098a15582d81a598b4e8391f4', 51479.35989733311], ['0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', 524.5602730745637]]
[['0x6243d8cea23066d098a15582d81a598b4e8391f4', 51479.35989733311], ['0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', 524.5602730745637]]
[['0x6243d8cea23066d098a15582d81a598b4e8391f4', 129190.50613850323], ['0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', 1316.4151091584395]]
```
</details>
### 3: balance_of_lptoken_underlying(address, lptoken_address, block, blockchain)
> Description: fucntion returns balance of underlying tokens for given lp token
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Reflexer
f3 = Reflexer.balance_of_lptoken_underlying('0x849D52316331967b6fF1198e5E32A0eB168D039d', '0xd6F3768E62Ef92a9798E5A8cEdD2b78907cEceF9', 'latest', ETHEREUM)
print(f3)
```
```
output:
[['0x6243d8cea23066d098a15582d81a598b4e8391f4', 0.0], ['0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', 0.0]]
```
</details>
### 4: underlying(wallet, lptoken_address, block, blockchain, web3=None, execution=1, index=0)
> Description: funstion returns underlying tokens for given wallet and lp token on Reflexer protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Reflexer
f4 = Reflexer.underlying('0x849D52316331967b6fF1198e5E32A0eB168D039d', '0xd6F3768E62Ef92a9798E5A8cEdD2b78907cEceF9', 'latest', ETHEREUM)
print(f4)
```
```
output:
[['0x6243d8cea23066d098a15582d81a598b4e8391f4', 51479.35989733311], ['0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', 524.5602730745637]]
```
</details>
</details>
- <details><summary><b>Sushiswap</b></summary>
# Sushiswap
## Defined in Sushiswap.py
### 1: get_chef_contract(web3, block, blockchain, v1=False)
> Description: function returns chef contract object for given blockchain
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import SushiSwap
web3 = get_node(ETHEREUM, 'latest', 0)
f1 = SushiSwap.get_chef_contract(web3, 'latest', ETHEREUM)
print(f1)
```
```
output: <web3._utils.datatypes.Contract object at 0x7fd83f1167d0>
```
</details>
### 2: get_pool_info(web3, lptoken_address, block, blockchain, use_db=True)
> Description: function returns pool info for given lp token
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import SushiSwap
web3 = get_node(ETHEREUM, 'latest', 0)
f2 = SushiSwap.get_pool_info(web3, '0x06da0fd433C1A5d7a4faa01111c044910A184553', 'latest', ETHEREUM)
print(f2)
```
```
output:
{'chef_contract': <web3._utils.datatypes.Contract object at 0x7f9f8e17e5f0>, 'pool_info': {'poolId': 0, 'allocPoint': 3000}, 'totalAllocPoint': 960240}
```
</details>
### 3: get_lptoken_data(lptoken_address, block, blockchain, web3=None, execution=1, index=0)
> Description: function returns lp roken data on Sushiswap protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import SushiSwap
f3 = SushiSwap.get_lptoken_data('0x397FF1542f962076d0BFE58eA045FfA2d347ACa0', 'latest', ETHEREUM)
print(f3)
```
```
output:
{'contract': <web3._utils.datatypes.Contract object at 0x7fa695232590>, 'decimals': 18, 'totalSupply': 319998674813332077, 'token0': '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 'token1': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'reserves': [20433998700546, 14330389229987097177780, 1673554595], 'kLast': 292817359902509000116725434578391616, 'virtualTotalSupply': 3.199995668134856e+17}
```
</details>
### 4: get_virtual_total_supply(lptoken_address, block, blockchain, web3=None, execution=1, index=0)
> Description: function returns virtual total supply for given lp token
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import SushiSwap
f4 = SushiSwap.get_virtual_total_supply('0x397FF1542f962076d0BFE58eA045FfA2d347ACa0', 'latest', ETHEREUM)
print(f4)
```
```
output: 3.199995668134856e+17
```
</details>
### 5: get_rewarder_contract(web3, block, blockchain, chef_contract, pool_id)
> Description: function returns rewarder contracy for given chef contract
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import SushiSwap
web3 = get_node(ETHEREUM, 'latest', 0)
f1 = SushiSwap.get_chef_contract(web3, 'latest', ETHEREUM)
f5 = SushiSwap.get_rewarder_contract(web3, 'latest', ETHEREUM, f1, 1)
print(f5)
```
```
output: <web3._utils.datatypes.Contract object at 0x7f86c5aceaa0>
```
</details>
### 6: get_sushi_rewards(web3, wallet, chef_contract, pool_id, block, blockchain, decimals=True)
> Description: function returns sushi rewards for given wallet
```
# Output:
# 1 - Tuple: [sushi_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import SushiSwap
web3 = get_node(ETHEREUM, 'latest', 0)
f1 = SushiSwap.get_chef_contract(web3, 'latest', ETHEREUM)
f6 = SushiSwap.get_sushi_rewards(web3, '0x849D52316331967b6fF1198e5E32A0eB168D039d', f1, 1, 'latest', ETHEREUM)
print(f6)
```
```
output: ['0x6B3595068778DD592e39A122f4f5a5cF09C90fE2', 0.0]
```
</details>
### 7: get_rewards(web3, wallet, chef_contract, pool_id, block, blockchain, decimals=True)
> Description: function retuens rewards for given wallet on Sushiswap protocol
```
# Output:
# 1 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import SushiSwap
web3 = get_node(ETHEREUM, 'latest', 0)
f1 = SushiSwap.get_chef_contract(web3, 'latest', ETHEREUM)
f7 = SushiSwap.get_rewards(web3, '0x849D52316331967b6fF1198e5E32A0eB168D039d', f1, 1, 'latest', ETHEREUM)
print(f7)
```
```
output: [['0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B', 0.0]]
```
</details>
### 8: get_all_rewards(wallet, lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True, pool_info=None)
> Description: function returns all the rewards for given wallet and lp token
```
# 1 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import SushiSwap
f8 = SushiSwap.get_all_rewards('0x849D52316331967b6fF1198e5E32A0eB168D039d', '0x397FF1542f962076d0BFE58eA045FfA2d347ACa0', 'latest', ETHEREUM)
print(f8)
```
```
output: [['0x6B3595068778DD592e39A122f4f5a5cF09C90fE2', 0.0]]
```
</details>
### 9: underlying(wallet, lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True, reward=False)
> Description: fucntion returns undrlying tokens for given wallet and lptoken
```
# Output: a list with 2 elements:
# 1 - List of Tuples: [liquidity_token_address, balance, staked_balance]
# 2 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import SushiSwap
f9 = SushiSwap.underlying('0x849D52316331967b6fF1198e5E32A0eB168D039d', '0x397FF1542f962076d0BFE58eA045FfA2d347ACa0', 'latest', ETHEREUM)
print(f9)
```
```
output:
[['0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 0.0, 0.0], ['0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 0.0, 0.0]]
```
</details>
### 10: pool_balances(lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description: function returns pool balances for given lp token
```
# Output: a list with 1 element:
# 1 - List of Tuples: [liquidity_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import SushiSwap
f10 = SushiSwap.pool_balances('0x397FF1542f962076d0BFE58eA045FfA2d347ACa0', 'latest', ETHEREUM)
print(f10)
```
```
output:
[['0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 20198588.559822], ['0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 14145.074969400264]]
```
</details>
### 11: swap_fees(lptoken_address, block_start, block_end, blockchain, web3=None, execution=1, index=0, decimals=True)
> description: function returns swap fees for given lp token and given block range
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import SushiSwap
f11 = SushiSwap.swap_fees('0x397FF1542f962076d0BFE58eA045FfA2d347ACa0', 16392251, 'latest', ETHEREUM)
print(f11)
```
```
output:
{'swaps': [{'block': 16393260, 'token': '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 'amount': 0.349082604}, {'block': 16393261, 'token': '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 'amount': 0.15}, {'block': 16393262, 'token': '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 'amount': 59.582524791000004}, {'block': 16393330, 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'amount': 7.5e-05}]}
```
</details>
### 12: get_wallet_by_tx(lptoken_address, block, blockchain, web3=None, execution=1, index=0, signature=DEPOSIT_EVENT_SIGNATURE)
> Description: function returns wallet by signature
```
# 'signature' = signature of the type of transaction that will be searched for
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import SushiSwap
f12 = SushiSwap.get_wallet_by_tx('0x397FF1542f962076d0BFE58eA045FfA2d347ACa0', 'latest', ETHEREUM)
print(f12)
```
```
output: None
```
</details>
### 13: get_rewards_per_unit(lptoken_address, blockchain, web3=None, execution=1, index=0, block='latest')
> Description: function returns rewards per unit for given lp token
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import SushiSwap
f13 = SushiSwap.get_rewards_per_unit('0x397FF1542f962076d0BFE58eA045FfA2d347ACa0', ETHEREUM)
print(f13)
```
```
output:
[{'sushi_address': '0x6B3595068778DD592e39A122f4f5a5cF09C90fE2', 'sushiPerBlock': 7.81054736315921e+17}]
```
</details>
### 14: update_db()
> Description: function updates the db
</details>
- <details><summary><b>Swapr</b></summary>
# Swapr
## Defined in Swapr.py
### 1: get_staking_rewards_contract(web3, block, blockchain)
> Description: function returns stacking rewards contract
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Swapr
web3 = get_node(ETHEREUM, 'latest', 0)
f1 = Swapr.get_staking_rewards_contract(web3, 'latest', ETHEREUM)
print(f1)
```
```
output:
<web3._utils.datatypes.Contract object at 0x7fecf9dd2710>
```
</details>
### 2: get_distribution_contracts(web3, lptoken_address, staking_rewards_contract, campaigns, block, blockchain)
> Description: function returns disctribution contracts for given lp token
** Help Needed **
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Swapr
web3 = get_node(ETHEREUM, 'latest', 0)
f1 = Swapr.get_staking_rewards_contract(web3, 'latest', ETHEREUM)
f2 = Swapr.get_distribution_contracts(web3, '0x7515Be43D16f871588ADc135d58a9c30A71Eb34F', f1, 1, 'latest', ETHEREUM)
print(f2)
```
```
output:
```
</details>
### 3: get_lptoken_data(lptoken_address, block, blockchain, web3=None, execution=1, index=0)
> Description: function returns lp token data
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Swapr
f3 = Swapr.get_lptoken_data('0x7515Be43D16f871588ADc135d58a9c30A71Eb34F', 'latest', ETHEREUM)
print(f3)
```
```
output:
{'contract': <web3._utils.datatypes.Contract object at 0x7fc6a413e6e0>, 'decimals': 18, 'totalSupply': 8788345579684989628399, 'token0': '0x6B175474E89094C44Da98b954EedeAC495271d0F', 'token1': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'reserves': [367338598438067871621998, 257554709560248473048, 1673559707], 'kLast': 0, 'virtualTotalSupply': 1.0546014695621988e+22}
```
</details>
### 4: get_all_rewards(wallet, lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True, campaigns=1, distribution_contracts=[])
> Description: function returns all rewards for given wallet and lp token
```
# Output:
# 1 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Swapr
f4 = Swapr.get_all_rewards('0x849D52316331967b6fF1198e5E32A0eB168D039d', '0x7515Be43D16f871588ADc135d58a9c30A71Eb34F', 'latest', ETHEREUM)
print(f4)
```
```
output: None
```
</details>
### 5: underlying(wallet, lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True, reward=False, campaigns=1)
> Description: function returns underlying tokens for given wallet and lp token
```
# Output: a list with 2 elements:
# 1 - List of Tuples: [liquidity_token_address, balance, staked_balance]
# 2 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Swapr
f5 = Swapr.underlying('0x849D52316331967b6fF1198e5E32A0eB168D039d', '0x7515Be43D16f871588ADc135d58a9c30A71Eb34F', 'latest', ETHEREUM)
print(f5)
```
```
output: None
```
</details>
### 6: pool_balances(lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description: function returns pool balance for given lp token
```
# Output: a list with 1 element:
# 1 - List of Tuples: [liquidity_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Swapr
f6 = Swapr.pool_balances('0x7515Be43D16f871588ADc135d58a9c30A71Eb34F', 'latest', ETHEREUM)
print(f6)
```
```
output:
[['0x6B175474E89094C44Da98b954EedeAC495271d0F', 367338.5984380679], ['0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 257.55470956024845]]
```
</details>
### 7: swap_fees(lptoken_address, block_start, block_end, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description: function returns swap fees for given lp token and block range
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Swapr
f7 = Swapr.swap_fees('0x7515Be43D16f871588ADc135d58a9c30A71Eb34F', 16392504, 'latest', ETHEREUM)
print(f7)
```
```
output:
{'swaps': [{'block': 16392554, 'token': '0x6B175474E89094C44Da98b954EedeAC495271d0F', 'amount': 0.3533967616636148}, {'block': 16392693, 'token': '0x6B175474E89094C44Da98b954EedeAC495271d0F', 'amount': 0.8042712308268711}, {'block': 16392942, 'token': '0x6B175474E89094C44Da98b954EedeAC495271d0F', 'amount': 1.3125}, {'block': 16392986, 'token': '0x6B175474E89094C44Da98b954EedeAC495271d0F', 'amount': 1.12284669760275}, {'block': 16393054, 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'amount': 4.3810185944715885e-05}, {'block': 16393185, 'token': '0x6B175474E89094C44Da98b954EedeAC495271d0F', 'amount': 0.13697197835428987}, {'block': 16393190, 'token': '0x6B175474E89094C44Da98b954EedeAC495271d0F', 'amount': 0.1027289837657174}, {'block': 16393338, 'token': '0x6B175474E89094C44Da98b954EedeAC495271d0F', 'amount': 0.2434762712795}, {'block': 16393463, 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'amount': 0.00035039806149557873}, {'block': 16393467, 'token': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'amount': 0.000173850319209059}]}
```
</details>
</details>
- <details><summary><b>Symmetric</b></summary>
# Symmetric
## Defined in Symmetric.py
### 1: get_vault_contract(web3, block, blockchain)
> Description: function returns valut contract for given blockchain
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Symmetric
web3 = get_node(XDAI, 'latest', 0)
f1 = Symmetric.get_vault_contract(web3, 'latest', XDAI)
print(f1)
```
```
output: <web3._utils.datatypes.Contract object at 0x7fa761bb27a0>
```
</details>
### 2: get_chef_contract(web3, block, blockchain)
> Description: function returns chef contract for given blockchain on Symmetric protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Symmetric
web3 = get_node(XDAI, 'latest', 0)
f2 = Symmetric.get_chef_contract(web3, 'latest', XDAI)
print(f2)
```
```
output: <web3._utils.datatypes.Contract object at 0x7fa9fbafe830>
```
</details>
### 3: get_pool_info(web3, lptoken_address, block, blockchain)
> Description: function returns pool info for given lp token
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Symmetric
web3 = get_node(XDAI, 'latest', 0)
f3 = Symmetric.get_pool_info(web3, '0x8B78873717981F18C9B8EE67162028BD7479142b', 'latest', XDAI)
print(f3)
```
```
output:
{'chef_contract': <web3._utils.datatypes.Contract object at 0x7f560927a830>, 'pool_info': {'poolId': 0, 'allocPoint': 0}, 'totalAllocPoint': 98}
```
</details>
### 4: get_lptoken_data(lptoken_address, block, blockchain, web3=None, execution=1, index=0)
> Description: function returns lp token data for given lp token
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Symmetric
web3 = get_node(XDAI, 'latest', 0)
f4 = Symmetric.get_lptoken_data('0x8B78873717981F18C9B8EE67162028BD7479142b', 'latest', XDAI)
print(f4)
```
```
output:
{'contract': <web3._utils.datatypes.Contract object at 0x7f1285a66740>, 'poolId': b'\x8bx\x877\x17\x98\x1f\x18\xc9\xb8\xeeg\x16 (\xbdty\x14+\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'decimals': 18, 'totalSupply': 612664746701529997}
```
</details>
### 5: get_rewarder_contract(web3, block, blockchain, chef_contract, pool_id)
> Description: function returns rewarder contract for given chef contract and pool id
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Symmetric
web3 = get_node(XDAI, 'latest', 0)
f2 = Symmetric.get_chef_contract(web3, 'latest', XDAI)
f5 = Symmetric.get_rewarder_contract(web3, 'latest', XDAI, f2, 0)
print(f5)
```
```
output: <web3._utils.datatypes.Contract object at 0x7f69a936aaa0>
```
</details>
### 6: get_symm_rewards(web3, wallet, chef_contract, pool_id, block, blockchain, decimals=True)
> Description: function returns symm rewards for given wallet and chef contract
```
# Output:
# 1 - Tuple: [symm_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Symmetric
web3 = get_node(XDAI, 'latest', 0)
f2 = Symmetric.get_chef_contract(web3, 'latest', XDAI)
f6 = Symmetric.get_symm_rewards(web3, '0x849D52316331967b6fF1198e5E32A0eB168D039d', f2, 0, 'latest', XDAI, 0)
print(f6)
```
```
output:
['0xC45b3C1c24d5F54E7a2cF288ac668c74Dd507a84', 0.0]
```
</details>
### 7: get_rewards(web3, wallet, chef_contract, pool_id, block, blockchain, decimals=True)
> Description: function returns rewards for given wallet and chef contract and pool id
```
# Output:
# 1 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Symmetric
web3 = get_node(XDAI, 'latest', 0)
f2 = Symmetric.get_chef_contract(web3, 'latest', XDAI)
f7 = Symmetric.get_rewards(web3, '0x849D52316331967b6fF1198e5E32A0eB168D039d', f2, 0, 'latest', XDAI, 0)
print(f7)
```
```
output:
[['0x9C58BAcC331c9aa871AFD802DB6379a98e80CEdb', 0.0]]
```
</details>
### 8: get_all_rewards(wallet, lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True, pool_info=None)
> Description: function returns all rewards for given wallet on given lp token fo Symmetric protocol
```
# Output:
# 1 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Symmetric
f8 = Symmetric.get_all_rewards('0x849D52316331967b6fF1198e5E32A0eB168D039d', '0x8B78873717981F18C9B8EE67162028BD7479142b', 'latest', XDAI)
print(f8)
```
```
output:
[['0xC45b3C1c24d5F54E7a2cF288ac668c74Dd507a84', 0.0], ['0x9C58BAcC331c9aa871AFD802DB6379a98e80CEdb', 0.0]]
```
</details>
### 9: underlying(wallet, lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True, reward=False)
> Description: function returns underlying tokens for given wallet and lp token on Symmetric protocol
```
# Output: a list with 2 elements:
# 1 - List of Tuples: [liquidity_token_address, balance, staked_balance]
# 2 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Symmetric
f9 = Symmetric.underlying('0x849D52316331967b6fF1198e5E32A0eB168D039d', '0x8B78873717981F18C9B8EE67162028BD7479142b', 'latest', XDAI)
print(f9)
```
```
output:
[['0xC45b3C1c24d5F54E7a2cF288ac668c74Dd507a84', 0.0, 0.0], ['0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 0.0, 0.0]]
```
</details>
### 10: pool_balances(lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True)
> description: function returns pool balances for given lp token on Symmetric protocol
```
# Output: a list with 1 element
# 1 - List of Tuples: [liquidity_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Symmetric
f10 = Symmetric.pool_balances('0x8B78873717981F18C9B8EE67162028BD7479142b', 'latest', XDAI)
print(f10)
```
```
output:
[['0xC45b3C1c24d5F54E7a2cF288ac668c74Dd507a84', 0.5824447991127851], ['0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 0.023928716865637658]]
```
</details>
### 11: get_rewards_per_unit(lptoken_address, blockchain, web3=None, execution=1, index=0, block='latest')
> Description: function returns rewards per units for given lp token
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Symmetric
f11 = Symmetric.get_rewards_per_unit('0x8B78873717981F18C9B8EE67162028BD7479142b', XDAI)
print(f11)
```
```
output:
[{'symm_address': '0xC45b3C1c24d5F54E7a2cF288ac668c74Dd507a84', 'symmPerSecond': 0.0}, {'reward_address': '0x9C58BAcC331c9aa871AFD802DB6379a98e80CEdb', 'rewardPerSecond': 0.0}]
```
</details>
### 12: update_db()
> Description: function updates the db
### 13: underlyingv1(wallet, lptoken_address, block, blockchain, web3=None, execution=1, index=0, decimals=True, reward=False)
> Description: function returns underlying tokens for given wallet and lp token for symmetric v1 protocol
```
# Output: a list with 2 elements:
# 1 - List of Tuples: [liquidity_token_address, balance, staked_balance]
# 2 - List of Tuples: [reward_token_address, balance]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Symmetric
f13 = Symmetric.underlyingv1('0x849D52316331967b6fF1198e5E32A0eB168D039d', '0x8B78873717981F18C9B8EE67162028BD7479142b', 'latest', XDAI)
print(f13)
```
```
output:
0
612664746701529997
[['0xC45b3C1c24d5F54E7a2cF288ac668c74Dd507a84', 0.0, 0.0], ['0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', 0.0, 0.0]]
```
</details>
### 14: swap_fees(lptoken_address, block_start, block_end, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description: function returns swap fees for given lp token for given range
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Symmetric
f14 = Symmetric.swap_fees('0x65b0e9418e102a880c92790f001a9c5810b0ef32', 25928795, 'latest', XDAI)
print(f14)
```
```
output:
{'swaps': [{'block': 25930778, 'token': '0xb7D311E2Eb55F2f68a9440da38e7989210b9A05e', 'amount': 0.010421660802460526}, {'block': 25930780, 'token': '0xb7D311E2Eb55F2f68a9440da38e7989210b9A05e', 'amount': 0.007520257123154599}, {'block': 25930784, 'token': '0xb7D311E2Eb55F2f68a9440da38e7989210b9A05e', 'amount': 0.008243855399208456}, {'block': 25930789, 'token': '0xb7D311E2Eb55F2f68a9440da38e7989210b9A05e', 'amount': 0.007877870087106005}, {'block': 25930797, 'token': '0xb7D311E2Eb55F2f68a9440da38e7989210b9A05e', 'amount': 0.006428455971430291}, {'block': 25930802, 'token': '0xb7D311E2Eb55F2f68a9440da38e7989210b9A05e', 'amount': 0.006066430265895466}, {'block': 25930804, 'token': '0xb7D311E2Eb55F2f68a9440da38e7989210b9A05e', 'amount': 0.006064083055418988}, {'block': 25930810, 'token': '0xb7D311E2Eb55F2f68a9440da38e7989210b9A05e', 'amount': 0.006061810233426429}, {'block': 25930831, 'token': '0xb7D311E2Eb55F2f68a9440da38e7989210b9A05e', 'amount': 0.006061737207627279}, {'block': 25930833, 'token': '0xb7D311E2Eb55F2f68a9440da38e7989210b9A05e', 'amount': 0.006059392721465463}]}
```
</details>
</details>
- <details><summary><b>UniswapV3</b></summary>
# UniswapV3
## Defined in UniswapV3.py
### 1: get_rate_uniswap_v3(token_src, token_dst, block, blockchain, web3=None, execution=1, index=0, fee=100)
> Description: function returns
*** Help Needed ***
- <details><summary><b>Example</b></summary>
```
```
```
output:
```
</details>
### 2: underlying(wallet, nftid, block, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description: function returns underlying tokens for given wallter and nft id
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import UniswapV3
f2 = UniswapV3.underlying('0x849D52316331967b6fF1198e5E32A0eB168D039d', 214704, 'latest', ETHEREUM)
print(f2)
```
```
output:
[['0x6810e776880C02933D47DB1b9fc05908e5386b96', 0], ['0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 0]]
```
</details>
### 3: allnfts(wallet, block, blockchain, web3=None, execution=1, index=0)
> Description: function returns all nfts for given wallet on UniswapV3 protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import UniswapV3
f3 = UniswapV3.allnfts('0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM)
print(f3)
```
```
output: [185085, 186529, 189493, 214704, 214707, 214716, 218573, 220361, 217714, 286920, 339884, 346143, 358770]
```
</details>
### 3: get_fee(nftid, block, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description: function returns fees for given nft id on UniswapV3 protocol
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import UniswapV3
f4 = UniswapV3.get_fee(346143, 'latest', ETHEREUM)
print(f4)
```
```
output:
[['0x6810e776880C02933D47DB1b9fc05908e5386b96', 0.0], ['0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 0.0]]
```
</details>
</details>
- <details><summary><b>Unit</b></summary>
# Unit
## Defined in Unit.py
### 1: get_vault_address(blockchain)
> Description: function returns vault address for given blockchain
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Unit
f1 = Unit.get_vault_address(ETHEREUM)
print(f1)
```
```
output: 0xb1cFF81b9305166ff1EFc49A129ad2AfCd7BCf19
```
</details>
### 2: get_cdp_registry_address(blockchain)
> Description: function returns cdp registry address for given blockchain
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Unit
f2 = Unit.get_cdp_registry_address(ETHEREUM)
print(f2)
```
```
output: 0x1a5Ff58BC3246Eb233fEA20D32b79B5F01eC650c
```
</details>
### 3: get_cdp_manager_address(blockchain)
> Description: function returns cdp manager for given blockchain
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Unit
f3 = Unit.get_cdp_manager_address(ETHEREUM)
print(f3)
```
```
output: 0x69FB4D4e3404Ea023F940bbC547851681e893a91
```
</details>
### 4: get_cdp_viewer_address(blockchain)
> Description: function retunrs cdp viewer address for given blockchain
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Unit
f4 = Unit.get_cdp_viewer_address(ETHEREUM)
print(f4)
```
```
output: 0x68AF7bD6F3e2fb480b251cb1b508bbb406E8e21D
```
</details>
### 5: get_cdp_viewer_data(wallet, collateral_address, block, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description: function returns cdp viewer data for given wallet and collateral address
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Unit
f5 = Unit.get_cdp_viewer_data('0x849D52316331967b6fF1198e5E32A0eB168D039d', '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'latest', ETHEREUM)
print(f5)
```
```
output: {}
```
</details>
### 6: get_cdp_data(wallet, collateral_address, block, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description: function returns cdp data for given wallet and collateral address
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Unit
f6 = Unit.get_cdp_data('0x849D52316331967b6fF1198e5E32A0eB168D039d', '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'latest', ETHEREUM)
print(f6)
```
```
output: {}
```
</details>
### 7: underlying(wallet, block, blockchain, web3=None, execution=1, index=0, decimals=True)
> Description: function returns underlying tokens for given wallet on Unit protocol
```
# Output: a list with N elements, where N = number of CDPs for the wallet:
# 1 - List of Tuples: [[collateral_addressN, collateral_amountN], [debt_addressN, -debt_amountN]]
```
- <details><summary><b>Example</b></summary>
```
from defi_protocols import *
from defi_protocols.functions import *
from defi_protocols import Unit
f7 = Unit.underlying('0x849D52316331967b6fF1198e5E32A0eB168D039d', 'latest', ETHEREUM)
print(f7)
```
```
output: []
```
</details>
</details>
## 💙 Contributing
PR's are welcome !
Please open a pull request in dev branch if you want to contribute to this awesome protocols!
Found a Bug ? Create an Issue.
## 💖 Like this project ?
Leave a ⭐ If you think this project is cool.
Follow use on [twitter](https://twitter.com/karpatkey)