Skip to content

RMagician/eth-portfolio

 
 

Repository files navigation

eth-portfolio

Use eth-portfolio to output information about your portfolio in a streamlined, speed-optimized way.

NOTES:

  • Any object prefixed with an underscore is an internal object and generally should not be used outside of this lib.
  • Any module prefixed with an underscode is an internal module and generally should not be used outside of this lib. Objects inside intenral modules may or may not be prefixed with underscores, but still should generally not be used.
  • This lib is still a WIP and the provided API is subject to change without notice.

INSTALLATION:

pip install eth_portfolio

USE:

For basic use, input each of your addresses as environment variables using the following pattern:

PORTFOLIO_ADDRESS_0=0x123...
PORTFOLIO_ADDRESS_1=0x234...
PORTFOLIO_ADDRESS_2=0x345...

Then do...

from eth_portfolio import portfolio
portfolio.eth_balance(block)

>>> {
        0xaddress0: _BalanceItem(balance=1234, usd_value=5678)
        0xaddress1: _BalanceItem(balance=1234, usd_value=5678)
        0xaddress2: _BalanceItem(balance=1234, usd_value=5678)
    }

Getting token transfers:

from eth_portfolio import portfolio
token_transfers = portfolio.token_transfers.get(start_block, end_block)
token_transfers.df()

>>> {
        0xaddress0: AddressTokenTransfersLedger(...)  # Each of these contains the token transfers for the specified address
        0xaddress1: AddressTokenTransfersLedger(...)
        0xaddress2: AddressTokenTransfersLedger(...)
    }

Getting transactions as a DataFrame:

from eth_portfolio import portfolio
txs = portfolio.transactions.get(start_block, end_block)
txs.df()

>>> [I am a pretend DataFrame]

Getting assets:

from eth_portfolio import portfolio
portfolio.describe(start_block, end_block)

>>>  {
        'assets': {
            'wallet0_address': {
                'token0': {
                    'amount': 123,
                    'value usd: 456,
                },
                'token1': {
                    'amount': 123,
                    'value usd: 456,
                },
            },
            'wallet0_address': {
                'token0': {
                    'amount': 123,
                    'value usd: 456,
                },
                'token1': {
                    'amount': 123,
                    'value usd: 456,
                },
            },
        },
        'debt': {
            'wallet0_address': {
                'token0': {
                    'amount': 123,
                    'value usd: 456,
                },
                'token1': {
                    'amount': 123,
                    'value usd: 456,
                },
            },
            'wallet1_address': {
                'token0': {
                    'amount': 123,
                    'value usd: 456,
                },
                'token1': {
                    'amount': 123,
                    'value usd: 456,
                },
            },
        },
    }

Getting net worth:

from eth_portfolio import portfolio
desc = portfolio.describe(block)
assets = desc['assets']     # OR you can do `assets = portfolio.assets(block)`
debt = desc['debt']         # OR you can do `debt = portfolio.debt(block)`
assets = sum(assets.values())
debt = sum(debt.values())
net = assets - debt
net.sum_usd()

>>> Decimal("123456.78900")

ADVANCED:

You also have more granular control available using the Portfolio object:

from eth_portfolio import Portfolio
port = Portfolio([0xaddress0, 0xaddress1, 0xaddress2])
port.describe(chain.height)

# Or for async code
async_port = Portfolio([0xaddress0, 0xaddress1, 0xaddress2], asynchronous=True)
await port.describe(chain.height)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%