Source code for yearn_treasury.rules.revenue.farming

from typing import Final

from dao_treasury import TreasuryTx, revenue
from y import Contract, Network

from yearn_treasury.rules.constants import ZERO_ADDRESS


farming: Final = revenue("Treasury Farming")


[docs] @farming("COMP Farming", Network.Mainnet) async def is_comp_rewards(tx: TreasuryTx) -> bool: return tx.symbol == "COMP" and await _is_generic_comp_rewards(tx)
[docs] @farming("SCREAM Farming", Network.Fantom) async def is_scream_rewards(tx: TreasuryTx) -> bool: return tx.symbol == "SCREAM" and await _is_generic_comp_rewards(tx)
[docs] @farming("SEX Farming", Network.Fantom) def is_sex(tx: TreasuryTx) -> bool: return tx.symbol == "SEX" and tx.from_address in ( ZERO_ADDRESS, "0x7FcE87e203501C3a035CbBc5f0Ee72661976D6E1", # StakingRewards )
[docs] @farming("SOLID Farming", Network.Fantom) def is_solid(tx: TreasuryTx) -> bool: return tx.symbol == "SOLID" and tx.from_address in ( "0x7FcE87e203501C3a035CbBc5f0Ee72661976D6E1", # StakingRewards "0x26E1A0d851CF28E697870e1b7F053B605C8b060F", # LpDepositor )
[docs] @farming("SOLIDsex Farming", Network.Fantom) def is_solidsex(tx: TreasuryTx) -> bool: return tx.symbol == "SOLIDsex" and tx.from_address in ( "0x7FcE87e203501C3a035CbBc5f0Ee72661976D6E1", # StakingRewards "0xA5e76B97e12567bbA2e822aC68842097034C55e7", # FeeDistributor )
[docs] async def _is_generic_comp_rewards(tx: TreasuryTx) -> bool: for event in tx.get_events("DistributedSupplierComp"): if ( tx.from_address == event.address and "supplier" in event and tx.to_address == event["supplier"] ): troller = await Contract.coroutine(event.address) if hasattr(troller, "getCompAddress") and tx.token == await troller.getCompAddress: return True return False