Skip to content

Commit

Permalink
Listen to OETH buyback events
Browse files Browse the repository at this point in the history
  • Loading branch information
shahthepro committed Oct 31, 2023
1 parent d5396c9 commit c4b10de
Show file tree
Hide file tree
Showing 5 changed files with 105 additions and 28 deletions.
9 changes: 6 additions & 3 deletions eagleproject/core/blockchain/addresses.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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",
Expand Down
12 changes: 9 additions & 3 deletions eagleproject/core/blockchain/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@
GOVERNANCE,
GOVERNANCE_TIMELOCK,
OGV_BUYBACK_LEGACY,
OGV_BUYBACK_PROXY,
OUSD_BUYBACK_PROXY,
OETH_BUYBACK_PROXY,
THREEPOOL,
OETH_ZAPPER,
OETH_VAULT,
Expand Down Expand Up @@ -68,6 +69,8 @@

VAULT_FEE_UPGRADE_BLOCK = 17187589

OETH_BUYBACK_BLOCK = 18468018

CONTRACT_FOR_SYMBOL = {
"OGN": OGN,
"DAI": DAI,
Expand All @@ -92,6 +95,7 @@
"AAVE": 18,
"COMP": 18,
"CRV": 18,
"CVX": 18,
"DAI": 18,
"LINK": 18,
"OGN": 18,
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
9 changes: 9 additions & 0 deletions eagleproject/core/blockchain/sigs.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)")
)
90 changes: 73 additions & 17 deletions eagleproject/notify/triggers/buyback_swap.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
13 changes: 8 additions & 5 deletions eagleproject/notify/triggers/uniswap_updated.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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),
Expand Down

0 comments on commit c4b10de

Please sign in to comment.