Skip to content

Commit

Permalink
Merge pull request #371 from OriginProtocol/shah/add-dripper-endpoints
Browse files Browse the repository at this point in the history
Add Dripper endpoints
  • Loading branch information
shahthepro authored Aug 30, 2023
2 parents af9affe + 76e27ba commit b8d1654
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 10 deletions.
62 changes: 62 additions & 0 deletions eagleproject/core/blockchain/dripper.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
from datetime import datetime, timedelta

from core.models import OriginTokens

from core.blockchain.addresses import (
DRIPPER,
OETH_DRIPPER,
USDT,
WETH,
)

from core.blockchain.rpc import (
balanceOf,
dripper_available,
dripper_drip_rate,
)

LOCAL_DRIPPER_CACHE = {
OriginTokens.OUSD: None,
OriginTokens.OETH: None,
}

def get_dripper_stats(project):
global LOCAL_DRIPPER_CACHE

cached_data = LOCAL_DRIPPER_CACHE.get(project)
if cached_data is not None:
valid_until, stats = cached_data
if valid_until > datetime.today():
return stats

token = USDT if project == OriginTokens.OUSD else WETH
token_decimals = 6 if project == OriginTokens.OUSD else 18
dripper_addr = DRIPPER if project == OriginTokens.OUSD else OETH_DRIPPER

token_balance = balanceOf(token, dripper_addr, token_decimals)
collectable = dripper_available(project=project)
rate = dripper_drip_rate(project=project)

rate_per_minute = rate * 60
rate_per_hour = rate * 60 * 60
rate_per_day = rate * 24 * 60 * 60

data = {
"token": token,
"drip_rate": rate,
"rate_per_minute": rate_per_minute,
"rate_per_hour": rate_per_hour,
"rate_per_day": rate_per_day,
"token_balance": token_balance,
"collectable": collectable,
"updated_at": datetime.today(),
}

LOCAL_DRIPPER_CACHE[project] = [
# Cache stuff for 30m
datetime.today() + timedelta(minutes=30),
data
]

return data

19 changes: 9 additions & 10 deletions eagleproject/core/blockchain/rpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -466,20 +466,19 @@ def staking_durationRewardRate(address, duration, block="latest"):

def dripper_available(block="latest", project=OriginTokens.OUSD):
signature = SIG_DRIPPER_AVAILABLE_FUNDS[:10]
dripper_addr = OETH_DRIPPER if project == OriginTokens.OETH else DRIPPER
decimals = E_18 if project == OriginTokens.OETH else E_6

if project == OriginTokens.OETH:
data = call(OETH_DRIPPER, signature, "", block)
return Decimal(int(data["result"], 16)) / E_18
else:
data = call(DRIPPER, signature, "", block)
return Decimal(int(data["result"], 16)) / E_6
data = call(dripper_addr, signature, "", block)
return Decimal(int(data["result"], 16)) / decimals


def dripper_drip_rate(block="latest"):
def dripper_drip_rate(block="latest", project=OriginTokens.OUSD):
signature = SIG_DRIPPER_CONFIG[:10]
data = call(DRIPPER, signature, "", block)
return Decimal(int(data["result"][64 + 2 :], 16)) / E_6
dripper_addr = OETH_DRIPPER if project == OriginTokens.OETH else DRIPPER
decimals = E_18 if project == OriginTokens.OETH else E_6

data = call(dripper_addr, signature, "", block)
return Decimal(int(data["result"][64 + 2 :], 16)) / decimals

class AaveLendingPoolCore:
""" LendingPoolCore calls """
Expand Down
11 changes: 11 additions & 0 deletions eagleproject/core/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from django.db.models import Q
from core.blockchain.addresses import (
DRIPPER,
OETH_DRIPPER,
OUSD,
OETH,
USDT,
Expand Down Expand Up @@ -69,6 +70,10 @@
OUSDMetaStrategy,
)

from core.blockchain.dripper import (
get_dripper_stats
)

from core.channels.email import Email
from core.coingecko import get_price
from core.common import dict_append
Expand Down Expand Up @@ -1180,3 +1185,9 @@ def coingecko_pools(request, project):
safe=False,
),
)

def api_dripper(request, project):
response = JsonResponse(get_dripper_stats(project))

response.setdefault("Access-Control-Allow-Origin", "*")
return _cache(60 * 30, response)
1 change: 1 addition & 0 deletions eagleproject/eagleproject/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@
path("api/v2/<slug:project>/strategies", core_views.strategies),
path("api/v2/<slug:project>/collateral", core_views.collateral),
path("api/v2/<slug:project>/apr/trailing_history/<int:days>", core_views.api_apr_trailing_history),
path("api/v2/<slug:project>/dripper", core_views.api_dripper),

# Deprecated v1 API endpoints (exists for backward compatibility)
path("api/v1/apr/trailing", RedirectView.as_view(url="/api/v2/ousd/apr/trailing", permanent=True)),
Expand Down

0 comments on commit b8d1654

Please sign in to comment.