-
Notifications
You must be signed in to change notification settings - Fork 31
/
nft_activity.py
42 lines (33 loc) · 1.41 KB
/
nft_activity.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from models.metric import Metric, CalculationContext, RedoubtMetricImpl, ToncenterCppMetricImpl
class NFTActivityRedoubtImpl(RedoubtMetricImpl):
def calculate(self, context: CalculationContext, metric):
collections = "\nor\n".join(map(lambda addr: f"collection = '{addr}'", metric.collections))
return f"""
select id, '{context.project.name}' as project,
{0.5 if metric.is_custodial else 1} as weight,
nft.user_address, ts
from nft_activity_local nft
WHERE (
{collections}
)
"""
class NFTActivityToncenterCppImpl(ToncenterCppMetricImpl):
def calculate(self, context: CalculationContext, metric):
collections = "\nor\n".join(map(lambda addr: f"collection = '{self.to_raw(addr)}'", metric.collections))
return f"""
select id, '{context.project.name}' as project,
nft.user_address, ts
from nft_activity_local nft
WHERE (
{collections}
)
"""
"""
All actions with NFTs for specified collections. Includes transfers and sales (activity by seller)
"""
class NFTActivity(Metric):
def __init__(self, description, collections=[], is_custodial=False):
assert type(collections) == list
Metric.__init__(self, description, [NFTActivityRedoubtImpl(), NFTActivityToncenterCppImpl()])
self.collections = collections
self.is_custodial = is_custodial