diff --git a/eth_portfolio/_ledgers/portfolio.py b/eth_portfolio/_ledgers/portfolio.py index 16418548..48911579 100644 --- a/eth_portfolio/_ledgers/portfolio.py +++ b/eth_portfolio/_ledgers/portfolio.py @@ -124,6 +124,22 @@ async def df(self, start_block: Block, end_block: Block) -> DataFrame: df = self._cleanup_df(df) return df + async def sent( + self, start_block: Optional[Block] = None, end_block: Optional[Block] = None + ) -> AsyncIterator[T]: + portfolio_addresses = set(self.portfolio.addresses.keys()) + async for obj in self[start_block:end_block]: + if obj.from_address in portfolio_addresses and obj.to_address not in portfolio_addresses: + yield obj + + async def received( + self, start_block: Optional[Block] = None, end_block: Optional[Block] = None + ) -> AsyncIterator[T]: + portfolio_addresses = set(self.portfolio.addresses.keys()) + async for obj in self[start_block:end_block]: + if obj.to_address in portfolio_addresses and obj.from_address not in portfolio_addresses: + yield obj + async def _df_base(self, start_block: Block, end_block: Block) -> DataFrame: """ Fetches and concatenates raw ledger data into a :class:`~DataFrame` for all addresses in the portfolio.