owned this note changed 2 years ago
Linked with GitHub

Sentinel SQL queries

tags: filecoin-pl Resources

Updated by February 2021

Authors: Danilo Lessa Bernardineli (@danlessa), ZX Zhang (@zxzhang)

Stats for sectors with less than 400d lifetime before the upgrade

Created on
24feb2021
/* Get the last state of the sectors */
/* Get the last state of the sectors */
with sector_states as ( 
	select 
	msi.*,
	max(msi.height) over (partition by msi.sector_id, msi.miner_id) as max_height
	from miner_sector_infos msi 
	where msi.activation_epoch > 0
	and (msi.expiration_epoch - msi.activation_epoch)  < 1152000 /* Get sectors with less than 400d lifetime */
	and msi.activation_epoch  < 265200 /* Get sectors activated before the update */
	and msi.expiration_epoch > msi.height /* Get only active sectors */
	order by max_height 
)
select 
count(*) as sector_count,
sum(ss.initial_pledge::numeric) / 1e18 as initial_pledge_sum_in_fil,
count(*) * 32 as network_power_in_gb,
date_trunc('WEEK', to_timestamp(height_to_unix(ss.activation_epoch))) as activation_date,
date_trunc('WEEK', to_timestamp(height_to_unix(ss.expiration_epoch))) as expiration_date
from sector_states as ss
where ss.max_height = ss.height /* get the last state of the info */
group by activation_date, expiration_date
order by activation_date, expiration_date

General

Height to timestamp

select
to_timestamp(height_to_unix(mse.height))
from miner_sector_events mse

Sector State

Renewal Gap

Renewal events

Created on
29jan2021
Updated on
12feb2021
select 
mse.miner_id,
mse.sector_id,
mse.height
from miner_sector_events mse 
where mse."event" = 'SECTOR_EXTENDED'

Renewal count per epoch

Created on
12feb21
select 
to_timestamp(height_to_unix(mse.height)) as timestamp,
count(*) renewal_count
from miner_sector_events mse 
where mse."event" = 'SECTOR_EXTENDED'
group by mse.height

Early Termination events

Count per epoch

select 
COUNT(*) as terminate_sectors_count,
to_timestamp(height_to_unix(pm.height)) as timestamp 
from parsed_messages pm 
where pm."method" = 'TerminateSectors'
group by pm.height

Declare Fault events

Count per epoch

select 
COUNT(*) as declare_fault_count,
to_timestamp(height_to_unix(pm.height)) as timestamp 
from parsed_messages pm 
where pm."method" = 'DeclareFaults'
group by pm.height

Weekly count

Updated on
12feb2021
select 
COUNT(*) as declare_fault_count,
date_trunc('week', to_timestamp(height_to_unix(pm.height))) as timestamp 
from parsed_messages pm 
where pm."method" = 'DeclareFaults'
group by timestamp
order by timestamp

Count per miner

select 
pm.to as miner_id,
COUNT(*) as declare_fault_count
from parsed_messages pm 
where pm."method" = 'DeclareFaults'
group by pm.to

Faulty sectors count over time

Miner

select
COUNT(*) filter (where mse."event" = 'SECTOR_FAULTED') as faulty_sectors,
COUNT(*) as total_sectors,
to_timestamp(height_to_unix(mse.height)) as timestamp,
miner_id
from miner_sector_events mse
group by mse.height, mse.miner_id

Network

select
COUNT(*) filter (where mse."event" = 'SECTOR_FAULTED') as faulty_sectors,
COUNT(*) as total_sectors,
to_timestamp(height_to_unix(mse.height)) as timestamp
from miner_sector_events mse
group by mse.height 

List faulty sector infos

with faulty_sectors as ( select distinct(mse.sector_id) from miner_sector_events mse where mse."event" = 'SECTOR_FAULTED' ) select mse.sector_id, mse.height, mpc.pre_commit_epoch, mpc.expiration_epoch, mpc.deal_weight, mpc.verified_deal_weight from faulty_sectors fse join miner_sector_events mse on mse.sector_id = fse.sector_id join miner_pre_commit_infos mpc on mpc.sector_id = fse.sector_id where mse.height = mpc.height

List sectors which faulted at some time

  • Created on ??nov21
  • Updated on ??jan21
select 
distinct(mse.sector_id)
from miner_sector_events mse 
where mse."event" = 'SECTOR_FAULTED'

Upcoming sectors to expire information, filtered by a date

SELECT
distinct on (msi.sector_id) msi.sector_id::NUMERIC,
to_timestamp(height_to_unix(msi.activation_epoch)) AS activation_timestamp,
to_timestamp(height_to_unix(msi.expiration_epoch)) AS expiration_timestamp,
to_timestamp(height_to_unix(bh.height)) AS height_timestamp,
msi.*
FROM miner_sector_infos AS msi
JOIN block_headers bh
ON msi.state_root = bh.parent_state_root
WHERE msi.activation_epoch > 0
AND to_timestamp(height_to_unix(msi.expiration_epoch)) < '2021-06-01'
order BY msi.sector_id, bh.height DESC

Latest sectors state

  • Created on ??nov21
  • Updated on 05feb21
with sector_states as ( 
	select 
	msi.*,
	max(msi.height) over (partition by msi.sector_id, msi.miner_id) as max_height
	from miner_sector_infos msi 
	where msi.activation_epoch > 0
	and msi.expiration_epoch > msi.height 
	order by max_height 
)
select 
count(*)
from ss
where ss.max_height = ss.height

Count of sector expiration per epoch and miner_id (last state)

  • Created on ??dec20
  • Updated on 05feb21
with sector_states as ( 
	select 
	msi.*,
	max(msi.height) over (partition by msi.sector_id, msi.miner_id) as max_height
	from miner_sector_infos msi 
	where msi.activation_epoch > 0
	and msi.expiration_epoch > msi.height 
	order by max_height 
)
select 
miner_id,
count(*) as sector_count,
date_trunc('WEEK', to_timestamp(height_to_unix(ss.expiration_epoch))) as expiration_epoch
from sector_states ss
where ss.max_height = ss.height
group by expiration_epoch, miner_id

Sector activation \ expiration per week (last state)

  • Created on 17feb21
with sector_states as ( 
    select 
    msi.*,
    max(msi.height) over (partition by msi.sector_id, msi.miner_id) as max_height
    from miner_sector_infos msi 
    where msi.activation_epoch > 0
    and msi.expiration_epoch > msi.height 
    order by max_height 
)
select 
count(*) as sector_count,
date_trunc('WEEK', to_timestamp(height_to_unix(ss.activation_epoch))) as activation_week,
date_trunc('WEEK', to_timestamp(height_to_unix(ss.expiration_epoch))) as expiration_week
from sector_states ss
where ss.max_height = ss.height
group by activation_week, expiration_week
order by activation_week, expiration_week

Sector activation per week (last state)

  • Created on 17feb21
with sector_states as ( 
    select 
    msi.*,
    max(msi.height) over (partition by msi.sector_id, msi.miner_id) as max_height
    from miner_sector_infos msi 
    where msi.activation_epoch > 0
    and msi.expiration_epoch > msi.height 
    order by max_height 
)
select 
count(*) as sector_count,
date_trunc('WEEK', to_timestamp(height_to_unix(ss.activation_epoch))) as activation_week
from sector_states ss
where ss.max_height = ss.height
group by activation_week
order by activation_week

Sector expiration per week (last state)

  • Created on 17feb21
with sector_states as ( 
    select 
    msi.*,
    max(msi.height) over (partition by msi.sector_id, msi.miner_id) as max_height
    from miner_sector_infos msi 
    where msi.activation_epoch > 0
    and msi.expiration_epoch > msi.height 
    order by max_height 
)
select 
count(*) as sector_count,
date_trunc('WEEK', to_timestamp(height_to_unix(ss.expiration_epoch))) as expiration_week
from sector_states ss
where ss.max_height = ss.height
group by expiration_week
order by expiration_week

Count of sector expiration per epoch (last state)

  • Created on ??dec20
  • Updated on 05feb21
with sector_states as ( 
	select 
	msi.*,
	max(msi.height) over (partition by msi.sector_id, msi.miner_id) as max_height
	from miner_sector_infos msi 
	where msi.activation_epoch > 0
	and msi.expiration_epoch > msi.height 
	order by max_height 
)
select 
count(*) as sector_count,
date_trunc('WEEK', to_timestamp(height_to_unix(ss.expiration_epoch))) as expiration_epoch
from sector_states ss
where ss.max_height = ss.height
group by expiration_epoch
SELECT

Chain Economics

Count of unique sectors over the network lifetime

select 
count(*)
from ( 
	select 
	1 as dummy
	from miner_sector_infos msi 
	group by msi.miner_id, sector_id
) dt

approximated vested amount over specified period

Thanks ZX (20nov2020)

SELECT 
AVG((sa.state ->> 'LockedFunds')::NUMERIC/10e18) 
FROM actors a 
JOIN actor_states sa 
ON sa.head = a.head 
WHERE a.id = $1 
AND sa.height > $2 
AND sa.height < $3`, [minerOfInterest, epochStart, epochEnd])

25% immediately available reward

Thanks ZX (20nov2020)

SELECT 
0.25*SUM(b.win_count::NUMERIC * cr.new_reward::NUMERIC) 
FROM block_headers b 
JOIN chain_rewards cr 
ON b.parent_state_root = cr.state_root 
WHERE b.miner = $1 
AND b.height > $2 
AND b.height < $3 
AND b.height >= 170000`, [minerOfInterest, epochStart, epochEnd]
Select a repo