32
32
"okbc_testnet" : "https://okbc-testnet.hypersync.xyz"
33
33
}
34
34
35
-
36
35
app = Flask (__name__ )
37
36
38
37
@app .route ('/' , methods = ['GET' , 'POST' ])
39
38
def index ():
40
39
if request .method == 'POST' :
41
40
address = request .form ['address' ]
42
41
address = address .lower ()
43
- print ( address )
42
+ request_type = request . form [ 'type' ]
44
43
selected_network = request .form ['network' ]
45
44
network_url = NETWORK_URLS .get (selected_network , "https://eth.hypersync.xyz" )
46
45
try :
47
- directory = asyncio .run (fetch_data (address , selected_network , network_url ))
48
- img = create_plot (directory )
46
+ directory = asyncio .run (fetch_data (address , selected_network , network_url , request_type ))
47
+ img = create_plot (directory , request_type )
48
+ # img = 'data:image/png;base64,./assets/sad-pepe.png'
49
49
return render_template ('plot.html' , plot_url = img )
50
50
except Exception as e :
51
51
print (f"Error: { e } " )
@@ -54,27 +54,49 @@ def index():
54
54
return render_template ('index.html' )
55
55
56
56
57
- async def fetch_data (address , selected_network , network_url ):
57
+ async def fetch_data (address , selected_network , network_url , request_type ):
58
58
# Create hypersync client using the chosen hypersync endpoint
59
59
client = hypersync .hypersync_client (network_url )
60
+ is_event_request = request_type == "event"
60
61
61
62
# The query to run
62
- query = {
63
- "from_block" : 0 ,
64
- "logs" : [{"address" : [address ]}],
65
- "field_selection" : {
66
- "log" : ["block_number" , "log_index" , "transaction_index" ],
67
- },
68
- }
63
+ if is_event_request :
64
+ query = {
65
+ "from_block" : 0 ,
66
+ "logs" : [{"address" : [address ]}],
67
+ "field_selection" : {
68
+ "log" : ["block_number" , "log_index" , "transaction_index" ],
69
+ },
70
+ }
71
+ else :
72
+ query = {
73
+ "from_block" : 0 ,
74
+ "transactions" : [
75
+ # We want all the transactions that come from this address
76
+ {"from" : [address ]},
77
+ # We want all the transactions that went to this address
78
+ {"to" : [address ]},
79
+ ],
80
+ "field_selection" : {
81
+ "transaction" : [
82
+ "block_number" ,
83
+ "transaction_index" ,
84
+ "hash" ,
85
+ ],
86
+ },
87
+ }
69
88
70
89
# Create a directory named after the address
71
- directory = f"data_{ selected_network } _{ address } "
90
+ directory = f"data/ data_{ selected_network } _ { request_type } _{ address } "
72
91
if not os .path .exists (directory ):
73
92
os .makedirs (directory )
74
93
await client .create_parquet_folder (query , directory )
75
94
print ("Finished writing parquet folder" )
76
95
else :
77
- if is_parquet_empty (f'{ directory } /log.parquet' ):
96
+ if is_event_request and is_parquet_empty (f'{ directory } /log.parquet' ):
97
+ await client .create_parquet_folder (query , directory )
98
+ print ("Parquet previously wasn't successfully populated" )
99
+ elif not is_event_request and is_parquet_empty (f'{ directory } /transaction.parquet' ):
78
100
await client .create_parquet_folder (query , directory )
79
101
print ("Parquet previously wasn't successfully populated" )
80
102
else :
@@ -102,17 +124,22 @@ def round_based_on_magnitude(number):
102
124
return round (number / 100000 ) * 100000
103
125
104
126
105
- def create_plot (directory ):
106
- plt .figure (figsize = (15 , 9 )) # Width, Height in inches
127
+ def create_plot (directory , request_type ):
128
+ plt .figure (figsize = (15 , 7 )) # Width, Height in inches
107
129
# Read the log.parquet file
108
- df = pd .read_parquet (f'{ directory } /log.parquet' )
130
+ is_event_request = request_type == "event"
131
+
132
+ if is_event_request :
133
+ df = pd .read_parquet (f'{ directory } /log.parquet' )
134
+ else :
135
+ df = pd .read_parquet (f'{ directory } /transaction.parquet' )
109
136
110
137
111
138
# Define the interval size
112
139
min_block = df ['block_number' ].min ()
113
140
max_block = df ['block_number' ].max ()
114
141
115
- interval_size = max (10000 , round_based_on_magnitude ((max_block - min_block )/ 50 ))
142
+ interval_size = max (5000 , round_based_on_magnitude ((max_block - min_block )/ 50 ))
116
143
117
144
min_block_rounded = min_block - (min_block % interval_size )
118
145
@@ -151,5 +178,6 @@ def create_plot(directory):
151
178
buf .close ()
152
179
return f'data:image/png;base64,{ plot_url } '
153
180
181
+
154
182
if __name__ == '__main__' :
155
183
app .run (debug = True , host = '0.0.0.0' , port = 5001 )
0 commit comments