def _maybe_enrich_curve_transfers( # pylint: disable=no-self-use self, token: EthereumToken, # pylint: disable=unused-argument tx_log: EthereumTxReceiptLog, transaction: EthereumTransaction, event: HistoryBaseEntry, action_items: List[ActionItem], # pylint: disable=unused-argument ) -> bool: source_address = hex_or_bytes_to_address(tx_log.topics[1]) to_address = hex_or_bytes_to_address(tx_log.topics[2]) if ( # deposit give asset event.event_type == HistoryEventType.RECEIVE and event.event_subtype == HistoryEventSubType.NONE and source_address == CURVE_Y_DEPOSIT and transaction.from_address == to_address ): event.event_type = HistoryEventType.WITHDRAWAL event.event_subtype = HistoryEventSubType.REMOVE_ASSET event.counterparty = CPT_CURVE event.notes = f'Receive {event.balance.amount} {event.asset.symbol} from the curve pool {CURVE_Y_DEPOSIT}' # noqa: E501 return True return False
def _maybe_enrich_gitcoin_transfers( # pylint: disable=no-self-use self, token: EthereumToken, # pylint: disable=unused-argument tx_log: EthereumTxReceiptLog, # pylint: disable=unused-argument transaction: EthereumTransaction, event: HistoryBaseEntry, action_items: List[ActionItem], # pylint: disable=unused-argument ) -> bool: if transaction.to_address not in ( '0xdf869FAD6dB91f437B59F1EdEFab319493D4C4cE', '0x7d655c57f71464B6f83811C55D84009Cd9f5221C', ): return False if event.event_type == HistoryEventType.SPEND: to_address = event.counterparty event.notes = f'Donate {event.balance.amount} {event.asset.symbol} to {to_address} via gitcoin' # noqa: E501 else: # can only be RECEIVE from_address = event.counterparty event.notes = f'Receive donation of {event.balance.amount} {event.asset.symbol} from {from_address} via gitcoin' # noqa: E501 event.event_subtype = HistoryEventSubType.DONATE event.counterparty = CPT_GITCOIN return True
def _maybe_enrich_pickle_transfers( # pylint: disable=no-self-use self, token: EthereumToken, # pylint: disable=unused-argument tx_log: EthereumTxReceiptLog, transaction: EthereumTransaction, event: HistoryBaseEntry, action_items: List[ActionItem], # pylint: disable=unused-argument ) -> bool: """Enrich tranfer transactions to address for jar deposits and withdrawals""" if not ( hex_or_bytes_to_address(tx_log.topics[2]) in self.pickle_contracts or hex_or_bytes_to_address(tx_log.topics[1]) in self.pickle_contracts or tx_log.address in self.pickle_contracts ): return False if ( # Deposit give asset event.event_type == HistoryEventType.SPEND and event.event_subtype == HistoryEventSubType.NONE and event.location_label == transaction.from_address and hex_or_bytes_to_address(tx_log.topics[2]) in self.pickle_contracts ): if EthereumToken(tx_log.address) != event.asset: return True amount_raw = hex_or_bytes_to_int(tx_log.data) amount = asset_normalized_value(amount=amount_raw, asset=event.asset) if event.balance.amount == amount: event.event_type = HistoryEventType.DEPOSIT event.event_subtype = HistoryEventSubType.DEPOSIT_ASSET event.counterparty = CPT_PICKLE event.notes = f'Deposit {event.balance.amount} {event.asset.symbol} in pickle contract' # noqa: E501 elif ( # Deposit receive wrapped event.event_type == HistoryEventType.RECEIVE and event.event_subtype == HistoryEventSubType.NONE and tx_log.address in self.pickle_contracts ): amount_raw = hex_or_bytes_to_int(tx_log.data) amount = asset_normalized_value(amount=amount_raw, asset=event.asset) if event.balance.amount == amount: # noqa: E501 event.event_type = HistoryEventType.RECEIVE event.event_subtype = HistoryEventSubType.RECEIVE_WRAPPED event.counterparty = CPT_PICKLE event.notes = f'Receive {event.balance.amount} {event.asset.symbol} after depositing in pickle contract' # noqa: E501 elif ( # Withdraw send wrapped event.event_type == HistoryEventType.SPEND and event.event_subtype == HistoryEventSubType.NONE and event.location_label == transaction.from_address and hex_or_bytes_to_address(tx_log.topics[2]) == ZERO_ADDRESS and hex_or_bytes_to_address(tx_log.topics[1]) in transaction.from_address ): if event.asset != EthereumToken(tx_log.address): return True amount_raw = hex_or_bytes_to_int(tx_log.data) amount = asset_normalized_value(amount=amount_raw, asset=event.asset) if event.balance.amount == amount: # noqa: E501 event.event_type = HistoryEventType.SPEND event.event_subtype = HistoryEventSubType.RETURN_WRAPPED event.counterparty = CPT_PICKLE event.notes = f'Return {event.balance.amount} {event.asset.symbol} to the pickle contract' # noqa: E501 elif ( # Withdraw receive asset event.event_type == HistoryEventType.RECEIVE and event.event_subtype == HistoryEventSubType.NONE and event.location_label == transaction.from_address and hex_or_bytes_to_address(tx_log.topics[2]) == transaction.from_address and hex_or_bytes_to_address(tx_log.topics[1]) in self.pickle_contracts ): if event.asset != EthereumToken(tx_log.address): return True amount_raw = hex_or_bytes_to_int(tx_log.data) amount = asset_normalized_value(amount=amount_raw, asset=event.asset) if event.balance.amount == amount: # noqa: E501 event.event_type = HistoryEventType.WITHDRAWAL event.event_subtype = HistoryEventSubType.REMOVE_ASSET event.counterparty = CPT_PICKLE event.notes = f'Unstake {event.balance.amount} {event.asset.symbol} from the pickle contract' # noqa: E501 return True