Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add staked daily jobs #112

Open
wants to merge 1 commit into
base: improve_daily_job
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
delete
from daily_feature_holding_balance_staked_fbtc_detail
where block_date >= '{start_date}'
and block_date < '{end_date}';
insert into public.daily_feature_holding_balance_staked_fbtc_detail (block_date, wallet_address, protocol_id,
contract_address, balance)
select TO_TIMESTAMP(block_timestamp)::DATE as block_date,
wallet_address,
protocol_id,
contract_address,
amount
from (select *,
row_number()
over (partition by contract_address, protocol_id, wallet_address order by block_timestamp desc) rn
from feature_staked_fbtc_detail_records
where TO_TIMESTAMP(block_timestamp) >= '{start_date}'
and TO_TIMESTAMP(block_timestamp) < '{end_date}') t
where rn = 1;


Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from sqlalchemy import DATE, TIMESTAMP, Column, Index, func
from sqlalchemy.dialects.postgresql import BYTEA, NUMERIC, VARCHAR

from common.models import HemeraModel


class DailyFeatureHoldingBalanceStakedFbtcDetail(HemeraModel):
__tablename__ = "daily_feature_holding_balance_staked_fbtc_detail"

block_date = Column(DATE, primary_key=True, nullable=False)
wallet_address = Column(BYTEA, primary_key=True)
protocol_id = Column(VARCHAR, primary_key=True)
contract_address = Column(BYTEA, primary_key=True)

balance = Column(NUMERIC(100, 18))

create_time = Column(TIMESTAMP, server_default=func.now())
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import DATE, TIMESTAMP, Column, Index, func
from sqlalchemy.dialects.postgresql import BYTEA, NUMERIC, VARCHAR

from common.models import HemeraModel, general_converter


class PeriodFeatureHoldingBalanceStakedFbtcDetail(HemeraModel):
__tablename__ = "period_feature_holding_balance_staked_fbtc_detail"

period_date = Column(DATE, primary_key=True, nullable=False)
wallet_address = Column(BYTEA, primary_key=True)
protocol_id = Column(VARCHAR, primary_key=True)
contract_address = Column(BYTEA, primary_key=True)

balance = Column(NUMERIC(100, 18))

create_time = Column(TIMESTAMP, server_default=func.now())
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from sqlalchemy import DATE, TIMESTAMP, Column, Index, func
from sqlalchemy.dialects.postgresql import BYTEA, NUMERIC, VARCHAR

from common.models import HemeraModel


class PeriodFeatureStakedFBTCDetailRecords(HemeraModel):
__tablename__ = "period_feature_staked_fbtc_detail_records"

period_date = Column(DATE, primary_key=True, nullable=False)
contract_address = Column(BYTEA, primary_key=True)
wallet_address = Column(BYTEA, primary_key=True)

amount = Column(NUMERIC(100))
protocol_id = Column(VARCHAR)

create_time = Column(TIMESTAMP, server_default=func.now())


Index("period_feature_staked_fbtc_detail_records_wallet_period_date", PeriodFeatureStakedFBTCDetailRecords.period_date)
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
delete
from period_feature_holding_balance_staked_fbtc_detail
where period_date >= '{start_date}'
and period_date < '{end_date}';

insert
into period_feature_holding_balance_staked_fbtc_detail(period_date, wallet_address, protocol_id, contract_address, balance)
with sbtc_table as (select d1.*,
decode(substring(token_address, 3), 'hex') as token_address,
case when d2.protocol_id is not null then True else FALSE end as flag
from period_feature_staked_fbtc_detail_records d1
left join feature_staked_fbtc_lp_config d2 on d1.protocol_id = d2.protocol_id
and d1.contract_address = decode(substring(d2.contract_address, 3), 'hex')
where period_date = '{start_date}'),

period_address_token_balance_table as (select *
from period_address_token_balances),


sbtc_balance_address_balance as (select d1.period_date,
d1.wallet_address,
d1.protocol_id,
d1.contract_address,
d1.amount as fbtc_balance,
d1.flag,
d2.token_address,
d2.balance as btc_balance
from sbtc_table d1
left join period_address_token_balance_table d2
on d1.wallet_address = d2.address
and d1.token_address = d2.token_address)

select date('{start_date}'),
d1.wallet_address,
d1.protocol_id,
d1.contract_address,
greatest(0, case
when not flag then d1.fbtc_balance / pow(10, d2.decimals)
else LEAST(d1.fbtc_balance / pow(10, d2.decimals), d1.btc_balance / pow(10, d3.decimals)) end)
as balance

from sbtc_balance_address_balance d1
left join tokens d2 on d2.address = '\xC96DE26018A54D51C097160568752C4E3BD6C364'
left join tokens d3 on d1.token_address = d3.address
;
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
delete
from period_feature_staked_fbtc_detail_records
where period_date >= '{start_date}'
and period_date < '{end_date}';

with today_table as (select *
from daily_feature_holding_balance_staked_fbtc_detail
where block_date = '{start_date}'),
yesterday_table as (select *
from period_feature_staked_fbtc_detail_records
where period_date = '{start_date_previous}')

insert
into period_feature_staked_fbtc_detail_records(period_date, wallet_address, protocol_id,
contract_address, amount)
select date('{start_date}')
AS period_date,
COALESCE(s1.wallet_address, s2.wallet_address) AS wallet_address,
COALESCE(s1.protocol_id, s2.protocol_id) AS protocol_id,
COALESCE(s1.contract_address, s2.contract_address) AS contract_address,
COALESCE(s1.balance, s2.amount, 0) AS amount

from today_table s1
full join
yesterday_table s2
on s1.contract_address = s2.contract_address and s1.wallet_address = s2.wallet_address
and s1.protocol_id = s2.protocol_id
;
Loading