Skip to content

Commit

Permalink
feat: added moveQuoteToken events (#40)
Browse files Browse the repository at this point in the history
  • Loading branch information
tsifrer committed Jul 28, 2023
2 parents dc49440 + 3e1420b commit c46fe08
Show file tree
Hide file tree
Showing 12 changed files with 294 additions and 20 deletions.
@@ -0,0 +1,106 @@
# Generated by Django 4.2.3 on 2023-07-28 18:58

from django.db import migrations, models


class Migration(migrations.Migration):
dependencies = [
("ajna", "0024_v1ethereumpool_utilization_and_more"),
]

operations = [
migrations.CreateModel(
name="V1GoerliMoveQuoteToken",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("pool_address", models.CharField(db_index=True, max_length=42)),
("bucket_index_from", models.BigIntegerField()),
("bucket_index_to", models.BigIntegerField()),
("lender", models.CharField(max_length=42)),
("amount", models.DecimalField(decimal_places=18, max_digits=32)),
(
"lp_redeemed_from",
models.DecimalField(decimal_places=18, max_digits=32),
),
(
"lp_awarded_to",
models.DecimalField(decimal_places=18, max_digits=32),
),
("lup", models.DecimalField(decimal_places=18, max_digits=32)),
("block_number", models.BigIntegerField()),
("block_timestamp", models.BigIntegerField()),
("transaction_hash", models.CharField(max_length=66)),
(
"price",
models.DecimalField(decimal_places=18, max_digits=32, null=True),
),
],
options={
"abstract": False,
"unique_together": {
(
"pool_address",
"bucket_index_from",
"bucket_index_to",
"lender",
"transaction_hash",
)
},
},
),
migrations.CreateModel(
name="V1EthereumMoveQuoteToken",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("pool_address", models.CharField(db_index=True, max_length=42)),
("bucket_index_from", models.BigIntegerField()),
("bucket_index_to", models.BigIntegerField()),
("lender", models.CharField(max_length=42)),
("amount", models.DecimalField(decimal_places=18, max_digits=32)),
(
"lp_redeemed_from",
models.DecimalField(decimal_places=18, max_digits=32),
),
(
"lp_awarded_to",
models.DecimalField(decimal_places=18, max_digits=32),
),
("lup", models.DecimalField(decimal_places=18, max_digits=32)),
("block_number", models.BigIntegerField()),
("block_timestamp", models.BigIntegerField()),
("transaction_hash", models.CharField(max_length=66)),
(
"price",
models.DecimalField(decimal_places=18, max_digits=32, null=True),
),
],
options={
"abstract": False,
"unique_together": {
(
"pool_address",
"bucket_index_from",
"bucket_index_to",
"lender",
"transaction_hash",
)
},
},
),
]
25 changes: 25 additions & 0 deletions ajna/models/base.py
Expand Up @@ -205,6 +205,31 @@ class Meta:
unique_together = ("pool_address", "bucket_index", "lender", "transaction_hash")


class MoveQuoteToken(models.Model):
pool_address = models.CharField(max_length=42, db_index=True)
bucket_index_from = models.BigIntegerField()
bucket_index_to = models.BigIntegerField()
lender = models.CharField(max_length=42)
amount = models.DecimalField(max_digits=32, decimal_places=18)
lp_redeemed_from = models.DecimalField(max_digits=32, decimal_places=18)
lp_awarded_to = models.DecimalField(max_digits=32, decimal_places=18)
lup = models.DecimalField(max_digits=32, decimal_places=18)
block_number = models.BigIntegerField()
block_timestamp = models.BigIntegerField()
transaction_hash = models.CharField(max_length=66)
price = models.DecimalField(max_digits=32, decimal_places=18, null=True)

class Meta:
abstract = True
unique_together = (
"pool_address",
"bucket_index_from",
"bucket_index_to",
"lender",
"transaction_hash",
)


class DrawDebt(models.Model):
index = models.CharField(max_length=128, null=True)
pool_address = models.CharField(max_length=42, db_index=True)
Expand Down
40 changes: 40 additions & 0 deletions ajna/sources/subgraph.py
Expand Up @@ -351,6 +351,46 @@ def remove_quote_tokens(self, block_number):
query, "removeQuoteTokens", "blockNumber", block_number
)

def move_quote_tokens(self, block_number):
query = """
query ($blockNumber: BigInt!, $first: Int){
moveQuoteTokens(
first: $first
orderBy: blockNumber
orderDirection: asc
where: {blockNumber_gt: $blockNumber}
) {
amount
blockNumber
blockTimestamp
from {
bucketIndex
}
to {
bucketIndex
}
id
lender
lpRedeemedFrom
lpAwardedTo
lup
transactionHash
pool {
id
collateralToken {
id
}
quoteToken {
id
}
}
}
}
"""
yield from self._fetch_all_by_field(
query, "moveQuoteTokens", "blockNumber", block_number
)

def draw_debts(self, block_number):
query = """
query ($blockNumber: BigInt!, $first: Int){
Expand Down
1 change: 1 addition & 0 deletions ajna/v1/ethereum/chain.py
Expand Up @@ -14,6 +14,7 @@
"add_collateral": models.V1EthereumAddCollateral,
"add_quote_token": models.V1EthereumAddQuoteToken,
"remove_quote_token": models.V1EthereumRemoveQuoteToken,
"move_quote_token": models.V1EthereumMoveQuoteToken,
"draw_debt": models.V1EthereumDrawDebt,
"repay_debt": models.V1EthereumRepayDebt,
"liqudation_auction": models.V1EthereumLiquidationAuction,
Expand Down
4 changes: 4 additions & 0 deletions ajna/v1/ethereum/models.py
Expand Up @@ -37,6 +37,10 @@ class V1EthereumRemoveQuoteToken(base.RemoveQuoteToken):
pass


class V1EthereumMoveQuoteToken(base.MoveQuoteToken):
pass


class V1EthereumDrawDebt(base.DrawDebt):
pass

Expand Down
32 changes: 23 additions & 9 deletions ajna/v1/ethereum/tasks.py
Expand Up @@ -14,6 +14,7 @@
fetch_and_save_add_collaterals,
fetch_and_save_add_quote_tokens,
fetch_and_save_draw_debts,
fetch_and_save_move_quote_tokens,
fetch_and_save_remove_collaterals,
fetch_and_save_remove_quote_tokens,
fetch_and_save_repay_debts,
Expand Down Expand Up @@ -49,15 +50,15 @@
"save_remove_quote_token_events_tasks": {
"schedule": crontab(minute="*/5"),
},
"save_move_quote_token_events_task": {
"schedule": crontab(minute="*/5"),
},
"save_draw_debts_events_tasks": {
"schedule": crontab(minute="*/5"),
},
"save_repay_debts_events_tasks": {
"schedule": crontab(minute="*/5"),
},
# "save_pools_data_snapshot_task": {
# "schedule": crontab(minute="1", hour="*/1"),
# },
"calculate_pool_volume_for_yesterday_task": {
# Run 10 past midnight to make sure we get all events saved before taking
# the snapshot
Expand All @@ -80,12 +81,6 @@ def fetch_pools_data_task():
fetch_pools_data(chain, subgraph, models)


# @app.task
# def save_pools_data_snapshot_task():
# models = EthereumModels()
# save_pools_data_snapshot(models)


@app.task
def save_remove_collateral_events_task():
models = EthereumModels()
Expand Down Expand Up @@ -162,6 +157,25 @@ def save_remove_quote_token_events_tasks():
)


@app.task
def save_move_quote_token_events_task():
models = EthereumModels()
block_number = (
models.move_quote_token.objects.all()
.order_by("-block_number")
.values("block_number")[:1]
)
if block_number:
last_block_number = block_number[0]["block_number"]
else:
last_block_number = 0

subgraph = EthereumSubgraph()
fetch_and_save_move_quote_tokens(
subgraph, models.move_quote_token, models.price_feed, last_block_number
)


@app.task
def save_draw_debts_events_tasks():
models = EthereumModels()
Expand Down
1 change: 1 addition & 0 deletions ajna/v1/goerli/chain.py
Expand Up @@ -14,6 +14,7 @@
"add_collateral": models.V1GoerliAddCollateral,
"add_quote_token": models.V1GoerliAddQuoteToken,
"remove_quote_token": models.V1GoerliRemoveQuoteToken,
"move_quote_token": models.V1GoerliMoveQuoteToken,
"draw_debt": models.V1GoerliDrawDebt,
"repay_debt": models.V1GoerliRepayDebt,
"liqudation_auction": models.V1GoerliLiquidationAuction,
Expand Down
4 changes: 4 additions & 0 deletions ajna/v1/goerli/models.py
Expand Up @@ -37,6 +37,10 @@ class V1GoerliRemoveQuoteToken(base.RemoveQuoteToken):
pass


class V1GoerliMoveQuoteToken(base.MoveQuoteToken):
pass


class V1GoerliDrawDebt(base.DrawDebt):
pass

Expand Down
32 changes: 23 additions & 9 deletions ajna/v1/goerli/tasks.py
Expand Up @@ -14,6 +14,7 @@
fetch_and_save_add_collaterals,
fetch_and_save_add_quote_tokens,
fetch_and_save_draw_debts,
fetch_and_save_move_quote_tokens,
fetch_and_save_remove_collaterals,
fetch_and_save_remove_quote_tokens,
fetch_and_save_repay_debts,
Expand Down Expand Up @@ -49,15 +50,15 @@
"save_remove_quote_token_events_tasks": {
"schedule": crontab(minute="*/5"),
},
"save_move_quote_token_events_task": {
"schedule": crontab(minute="*/5"),
},
"save_draw_debts_events_tasks": {
"schedule": crontab(minute="*/5"),
},
"save_repay_debts_events_tasks": {
"schedule": crontab(minute="*/5"),
},
# "save_pools_data_snapshot_task": {
# "schedule": crontab(minute="1", hour="*/1"),
# },
"calculate_pool_volume_for_yesterday_task": {
# Run 10 past midnight to make sure we get all events saved before taking
# the snapshot
Expand All @@ -80,12 +81,6 @@ def fetch_pools_data_task():
fetch_pools_data(chain, subgraph, models)


# @app.task
# def save_pools_data_snapshot_task():
# models = GoerliModels()
# save_pools_data_snapshot(models)


@app.task
def save_remove_collateral_events_task():
models = GoerliModels()
Expand Down Expand Up @@ -162,6 +157,25 @@ def save_remove_quote_token_events_tasks():
)


@app.task
def save_move_quote_token_events_task():
models = GoerliModels()
block_number = (
models.move_quote_token.objects.all()
.order_by("-block_number")
.values("block_number")[:1]
)
if block_number:
last_block_number = block_number[0]["block_number"]
else:
last_block_number = 0

subgraph = GoerliSubgraph()
fetch_and_save_move_quote_tokens(
subgraph, models.move_quote_token, models.price_feed, last_block_number
)


@app.task
def save_draw_debts_events_tasks():
models = GoerliModels()
Expand Down
28 changes: 28 additions & 0 deletions ajna/v1/modules/events.py
Expand Up @@ -163,6 +163,34 @@ def fetch_and_save_remove_quote_tokens(
)


def fetch_and_save_move_quote_tokens(
subgraph, move_quote_tokens_model, price_feed_model, from_block_number
):
"""
Fetches moveQuoteToken events from the Subgraph and saves it to the MoveQuoteToken
model.
"""
move_quote_tokens = subgraph.move_quote_tokens(from_block_number)
for move_quote_token in move_quote_tokens:
underlying_address = move_quote_token["pool"]["quoteToken"]["id"]
timestamp = move_quote_token["blockTimestamp"]
price = _get_price(price_feed_model, underlying_address, timestamp)
move_quote_tokens_model.objects.create(
pool_address=move_quote_token["pool"]["id"],
bucket_index_from=move_quote_token["from"]["bucketIndex"],
bucket_index_to=move_quote_token["to"]["bucketIndex"],
lender=move_quote_token["lender"],
transaction_hash=move_quote_token["transactionHash"],
amount=move_quote_token["amount"],
lp_redeemed_from=move_quote_token["lpRedeemedFrom"],
lp_awarded_to=move_quote_token["lpAwardedTo"],
lup=move_quote_token["lup"],
block_number=move_quote_token["blockNumber"],
block_timestamp=move_quote_token["blockTimestamp"],
price=price,
)


def fetch_and_save_draw_debts(
subgraph, draw_debt_model, price_feed_model, from_block_number
):
Expand Down

0 comments on commit c46fe08

Please sign in to comment.