From c4b10de34c99eb79fecb61975f08ab509ce81263 Mon Sep 17 00:00:00 2001 From: Shahul Hameed <10547529+shahthepro@users.noreply.github.com> Date: Tue, 31 Oct 2023 18:25:38 +0530 Subject: [PATCH 1/2] Listen to OETH buyback events --- eagleproject/core/blockchain/addresses.py | 9 +- eagleproject/core/blockchain/const.py | 12 ++- eagleproject/core/blockchain/sigs.py | 9 ++ eagleproject/notify/triggers/buyback_swap.py | 90 +++++++++++++++---- .../notify/triggers/uniswap_updated.py | 13 +-- 5 files changed, 105 insertions(+), 28 deletions(-) diff --git a/eagleproject/core/blockchain/addresses.py b/eagleproject/core/blockchain/addresses.py index e81c3499..46227433 100644 --- a/eagleproject/core/blockchain/addresses.py +++ b/eagleproject/core/blockchain/addresses.py @@ -77,9 +77,10 @@ # OGV OGV = "0x9c354503c38481a7a7a51629142963f98ecc12d0" VEOGV = "0x0c4576ca1c365868e162554af8e385dc3e7c66d9" -OGV_BUYBACK_LEGACY = "0x6c5cdfb47150efc52072cb93eea1e0f123529748" -OGV_BUYBACK_PROXY = "0xd7b28d06365b85933c64e11e639ea0d3bc0e3bab" REWARDS_SOURCE = "0x7d82e86cf1496f9485a8ea04012afeb3c7489397" +OGV_BUYBACK_LEGACY = "0x6c5cdfb47150efc52072cb93eea1e0f123529748" +OUSD_BUYBACK_PROXY = "0xd7b28d06365b85933c64e11e639ea0d3bc0e3bab" +OETH_BUYBACK_PROXY = "0xfd6c58850cacf9ccf6e8aee479bfb4df14a362d2" # OETH OETH = "0x856c4efb76c1d1ae02e20ceb03a2a6a08b0b8dc3" @@ -227,10 +228,12 @@ LINK: "LINK", OGV: "OGV", OGV_BUYBACK_LEGACY: "OGV BuyBack (Legacy)", - OGV_BUYBACK_PROXY: "OGV BuyBack", + OUSD_BUYBACK_PROXY: "OUSD BuyBack", + OETH_BUYBACK_PROXY: "OETH BuyBack", REWARDS_SOURCE: "RewardsSource", FLUX_DAO: "Flux DAO", FLUX_TIMELOCK: "Flux Timelock", + CVX: "CVX", # OETH Contracts OETH: "OETH Token", diff --git a/eagleproject/core/blockchain/const.py b/eagleproject/core/blockchain/const.py index 1ecec2e4..63c924a9 100644 --- a/eagleproject/core/blockchain/const.py +++ b/eagleproject/core/blockchain/const.py @@ -38,7 +38,8 @@ GOVERNANCE, GOVERNANCE_TIMELOCK, OGV_BUYBACK_LEGACY, - OGV_BUYBACK_PROXY, + OUSD_BUYBACK_PROXY, + OETH_BUYBACK_PROXY, THREEPOOL, OETH_ZAPPER, OETH_VAULT, @@ -68,6 +69,8 @@ VAULT_FEE_UPGRADE_BLOCK = 17187589 +OETH_BUYBACK_BLOCK = 18468018 + CONTRACT_FOR_SYMBOL = { "OGN": OGN, "DAI": DAI, @@ -92,6 +95,7 @@ "AAVE": 18, "COMP": 18, "CRV": 18, + "CVX": 18, "DAI": 18, "LINK": 18, "OGN": 18, @@ -158,7 +162,8 @@ STORY_STAKING_VAULT, STORY_STAKING_SERIES, OGV_BUYBACK_LEGACY, - OGV_BUYBACK_PROXY, + OUSD_BUYBACK_PROXY, + OETH_BUYBACK_PROXY, ] + OTHER_OUSD_STRAT_CONTRACTS + OETH_CONTRACTS @@ -195,7 +200,8 @@ STORY_STAKING_VAULT, STORY_STAKING_SERIES, OGV_BUYBACK_LEGACY, - OGV_BUYBACK_PROXY, + OUSD_BUYBACK_PROXY, + OETH_BUYBACK_PROXY, OETH, OETH_VAULT, OETH_ZAPPER diff --git a/eagleproject/core/blockchain/sigs.py b/eagleproject/core/blockchain/sigs.py index 0c6249f5..d6ea08ff 100644 --- a/eagleproject/core/blockchain/sigs.py +++ b/eagleproject/core/blockchain/sigs.py @@ -344,3 +344,12 @@ SIG_EVENT_NEW_CLONE_TOKEN = encode_hex( keccak(b"NewCloneToken(address,uint256)") ) + + +# Buyback events +SIG_EVENT_OTOKEN_BUYBACK = encode_hex( + keccak(b"OTokenBuyback(address,address,uint256,uint256)") +) +SIG_EVENT_UNISVERSAL_UNISWAP_UPDATED = encode_hex( + keccak(b"UniswapUniversalRouterUpdated(address)") +) diff --git a/eagleproject/notify/triggers/buyback_swap.py b/eagleproject/notify/triggers/buyback_swap.py index 3e784075..f5540559 100644 --- a/eagleproject/notify/triggers/buyback_swap.py +++ b/eagleproject/notify/triggers/buyback_swap.py @@ -4,44 +4,100 @@ from core.models import Log -from core.blockchain.addresses import OGV, OGV_BUYBACK_LEGACY, OGV_BUYBACK_PROXY, REWARDS_SOURCE, OUSD +from core.blockchain.const import OETH_BUYBACK_BLOCK + +from core.blockchain.addresses import OGV, OGV_BUYBACK_LEGACY, OUSD_BUYBACK_PROXY, OETH_BUYBACK_PROXY, REWARDS_SOURCE, OUSD, CONTRACT_ADDR_TO_NAME from core.blockchain.sigs import TRANSFER from core.common import format_token_human from notify.events import event_low -def get_events(logs): +def get_legacy_events(logs): """ Get events """ return logs.filter( address=OUSD, topic_0=TRANSFER, topic_1__in=[ get_long_address(OGV_BUYBACK_LEGACY), - get_long_address(OGV_BUYBACK_PROXY) + get_long_address(OUSD_BUYBACK_PROXY), ] ).order_by('block_number') +def get_swap_events(logs): + """ Get events """ + return logs.filter( + topic_0=SIG_EVENT_OTOKEN_BUYBACK, + ).order_by('block_number') + def run_trigger(new_logs): """ Template trigger """ events = [] - for ev in get_events(new_logs): - swap_log = get_ogv_swap_log(ev.transaction_hash) + if ev.block_number > OETH_BUYBACK_BLOCK: + for ev in get_swap_events(new_logs): + (otoken, dest_token, amount_in, amount_out) = decode_single( + "(address,address,uint256,uint256)", + decode_hex(ev.data) + ) + + otoken_symbol = "OETH" if otoken == OETH else "OUSD" + + if dest_token == CVX: + events.append( + event_low( + "{} BuyBack 🔄".format(otoken_symbol), + "Swapped {} {} for {} CVX and locked it for voting power".format( + format_token_human(otoken_symbol, amount_in), + otoken_symbol, + format_token_human('CVX', amount_out), + ), + log_model=ev + ) + ) + elif dest_token == OGV: + events.append( + event_low( + "{} BuyBack 🔄".format(otoken_symbol), + "Swapped {} {} for {} OGV and depositted it to the RewardsSource contract".format( + format_token_human(otoken_symbol, amount_in), + otoken_symbol, + format_token_human('OGV', amount_out), + ), + log_model=ev + ) + ) + else: + events.append( + event_low( + "{} BuyBack 🔄".format(otoken_symbol), + "Swapped {} {} for {} {}".format( + format_token_human(otoken_symbol, amount_in), + otoken_symbol, + format_token_human(otoken_symbol, amount_out), + CONTRACT_ADDR_TO_NAME[dest_token], + ), + log_model=ev + ) + ) + else: + # For legacy Buyback contracts + for ev in get_legacy_events(new_logs): + swap_log = get_ogv_swap_log(ev.transaction_hash) - if swap_log is None: - continue + if swap_log is None: + continue - ousd_out = decode_single('(uint256)',decode_hex(ev.data))[0] - ogv_in = decode_single('(uint256)',decode_hex(swap_log.data))[0] + ousd_out = decode_single('(uint256)',decode_hex(ev.data))[0] + ogv_in = decode_single('(uint256)',decode_hex(swap_log.data))[0] - events.append(event_low( - "OGV BuyBack 🔄", - "Swapped {} OUSD for {} OGV and depositted to Rewards Source contract".format( - format_token_human('OUSD', ousd_out), - format_token_human('OGV', ogv_in), - ), - log_model=ev - )) + events.append(event_low( + "OGV BuyBack 🔄", + "Swapped {} OUSD for {} OGV and depositted to Rewards Source contract".format( + format_token_human('OUSD', ousd_out), + format_token_human('OGV', ogv_in), + ), + log_model=ev + )) return events diff --git a/eagleproject/notify/triggers/uniswap_updated.py b/eagleproject/notify/triggers/uniswap_updated.py index e10a2357..bcd166dc 100644 --- a/eagleproject/notify/triggers/uniswap_updated.py +++ b/eagleproject/notify/triggers/uniswap_updated.py @@ -2,14 +2,16 @@ from eth_utils import decode_hex from eth_abi import decode_single -from core.blockchain.sigs import SIG_EVENT_UNISWAP -from core.blockchain.addresses import OGV_BUYBACK_LEGACY, OGV_BUYBACK_PROXY, CONTRACT_ADDR_TO_NAME +from core.blockchain.sigs import SIG_EVENT_UNISWAP, SIG_EVENT_UNISVERSAL_UNISWAP_UPDATED +from core.blockchain.addresses import OGV_BUYBACK_LEGACY, OUSD_BUYBACK_PROXY, CONTRACT_ADDR_TO_NAME from notify.events import event_normal - def get_events(logs): """ Get events """ - return logs.filter(topic_0=SIG_EVENT_UNISWAP).order_by('block_number') + return logs.filter(topic_0__in=[ + SIG_EVENT_UNISWAP, + SIG_EVENT_UNISVERSAL_UNISWAP_UPDATED + ]).order_by('block_number') def run_trigger(new_logs): @@ -18,7 +20,8 @@ def run_trigger(new_logs): for ev in get_events(new_logs): uniswap_address = decode_single('(address)', decode_hex(ev.data))[0] - uniswap_version = "V3" if ev.address in [OGV_BUYBACK_LEGACY, OGV_BUYBACK_PROXY] else "V2" + uniswap_version = "V3" if ev.address in [OGV_BUYBACK_LEGACY, OUSD_BUYBACK_PROXY] else "V2" + uniswap_version = "Universal" if ev.topic_0 == SIG_EVENT_UNISVERSAL_UNISWAP_UPDATED else uniswap_version contract_name = CONTRACT_ADDR_TO_NAME.get(ev.address, ev.address) events.append(event_normal( "{} Uniswap {} Router Address Changed 🦄".format(contract_name, uniswap_version), From 221e4e20509693ef34cf107bc9bee849cb93b3d5 Mon Sep 17 00:00:00 2001 From: Shahul Hameed <10547529+shahthepro@users.noreply.github.com> Date: Tue, 7 Nov 2023 18:51:50 +0530 Subject: [PATCH 2/2] Bug fixes --- eagleproject/core/blockchain/addresses.py | 1 + eagleproject/notify/triggers/buyback_swap.py | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/eagleproject/core/blockchain/addresses.py b/eagleproject/core/blockchain/addresses.py index 46227433..5bfa67d4 100644 --- a/eagleproject/core/blockchain/addresses.py +++ b/eagleproject/core/blockchain/addresses.py @@ -39,6 +39,7 @@ AUSDC = "0xbcca60bb61934080951369a648fb03df4f96263c" AUSDT = "0x3ed3b47dd13ec9a98b44e6204a523e766b225811" LINK = "0x514910771af9ca656af840dff83e8264ecf986ca" +CVX = "0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b" THREEPOOL = "0x6c3f90f043a72fa612cbac8115ee7e52bde6e490" diff --git a/eagleproject/notify/triggers/buyback_swap.py b/eagleproject/notify/triggers/buyback_swap.py index f5540559..a5385f55 100644 --- a/eagleproject/notify/triggers/buyback_swap.py +++ b/eagleproject/notify/triggers/buyback_swap.py @@ -6,12 +6,11 @@ from core.blockchain.const import OETH_BUYBACK_BLOCK -from core.blockchain.addresses import OGV, OGV_BUYBACK_LEGACY, OUSD_BUYBACK_PROXY, OETH_BUYBACK_PROXY, REWARDS_SOURCE, OUSD, CONTRACT_ADDR_TO_NAME -from core.blockchain.sigs import TRANSFER +from core.blockchain.addresses import OGV, OETH, OUSD, CVX, OGV_BUYBACK_LEGACY, OUSD_BUYBACK_PROXY, OETH_BUYBACK_PROXY, REWARDS_SOURCE, OUSD, CONTRACT_ADDR_TO_NAME +from core.blockchain.sigs import TRANSFER, SIG_EVENT_OTOKEN_BUYBACK from core.common import format_token_human from notify.events import event_low - def get_legacy_events(logs): """ Get events """ return logs.filter( @@ -31,12 +30,19 @@ def get_swap_events(logs): def run_trigger(new_logs): """ Template trigger """ + + if len(new_logs) <= 0: + return [] + events = [] + block_number = new_logs[0].block_number - if ev.block_number > OETH_BUYBACK_BLOCK: + if block_number > OETH_BUYBACK_BLOCK: for ev in get_swap_events(new_logs): - (otoken, dest_token, amount_in, amount_out) = decode_single( - "(address,address,uint256,uint256)", + otoken = decode_single("(address)", decode_hex(ev.topic_1))[0] + dest_token = decode_single("(address)", decode_hex(ev.topic_2))[0] + (amount_in, amount_out) = decode_single( + "(uint256,uint256)", decode_hex(ev.data) )