gauravlochab commited on
Commit
322b74c
·
1 Parent(s): 07d589f

chore: Add requirements.txt and restart scripts

Browse files
.github/workflows/restart_hf_space.yaml ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Restart Hugging Face Space
2
+
3
+ on:
4
+ schedule:
5
+ - cron: '30 18 * * *'
6
+ workflow_dispatch: # Runs every 30 minutes
7
+
8
+ jobs:
9
+ restart-space:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - name: Checkout repository
13
+ uses: actions/checkout@v2
14
+
15
+ - name: Set up Python
16
+ uses: actions/setup-python@v3
17
+ with:
18
+ python-version: '3.8'
19
+
20
+ - name: Install dependencies
21
+ run: |
22
+ python -m pip install --upgrade pip
23
+ pip install huggingface_hub
24
+
25
+ - name: Restart Hugging Face Space
26
+ env:
27
+ HF_TOKEN: ${{ secrets.HF_TOKEN }}
28
+ run: python restart_space.py
app.py CHANGED
@@ -1,7 +1,472 @@
 
 
1
  import gradio as gr
 
 
 
 
 
 
 
 
2
 
3
- def greet(name):
4
- return "Hello " + name + "!!"
5
 
6
- demo = gr.Interface(fn=greet, inputs="text", outputs="text")
7
- demo.launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import requests
2
+ import pandas as pd
3
  import gradio as gr
4
+ import plotly.graph_objects as go
5
+ import plotly.express as px
6
+ from datetime import datetime, timedelta
7
+ import json
8
+ from web3 import Web3
9
+ from app_trans_new import create_transcation_visualizations,create_active_agents_visualizations
10
+ from app_value_locked import fetch_daily_value_locked
11
+ import os
12
 
13
+ OPTIMISM_RPC_URL = os.getenv('OPTIMISM_RPC_URL')
 
14
 
15
+ # Initialize a Web3 instance
16
+ web3 = Web3(Web3.HTTPProvider(OPTIMISM_RPC_URL))
17
+
18
+ # Check if connection is successful
19
+ if not web3.is_connected():
20
+ raise Exception("Failed to connect to the Optimism network.")
21
+
22
+ # Contract address
23
+ contract_address = '0x3d77596beb0f130a4415df3D2D8232B3d3D31e44'
24
+
25
+ # Load the ABI from the provided JSON file
26
+ with open('./contracts/service_registry_abi.json', 'r') as abi_file:
27
+ contract_abi = json.load(abi_file)
28
+
29
+ # Now you can create the contract
30
+ service_registry = web3.eth.contract(address=contract_address, abi=contract_abi)
31
+
32
+ def get_transfers(integrator: str, wallet: str) -> str:
33
+ url = f"https://li.quest/v1/analytics/transfers?integrator={integrator}&wallet={wallet}"
34
+ headers = {"accept": "application/json"}
35
+ response = requests.get(url, headers=headers)
36
+ return response.json()
37
+
38
+ def load_activity_checker_contract(w3, staking_token_address):
39
+ """
40
+ Loads the Staking Token and Activity Checker contracts.
41
+
42
+ :param w3: Web3 instance
43
+ :param staking_token_address: Address of the staking token contract
44
+ :return: Tuple of (Staking Token contract instance, Activity Checker contract instance)
45
+ """
46
+ try:
47
+ # Load the ABI file for the Staking Token contract
48
+ with open('./contracts/StakingToken.json', "r", encoding="utf-8") as file:
49
+ staking_token_data = json.load(file)
50
+
51
+ staking_token_abi = staking_token_data.get("abi", [])
52
+
53
+ # Create the Staking Token contract instance
54
+ staking_token_contract = w3.eth.contract(address=staking_token_address, abi=staking_token_abi)
55
+
56
+ # Get the activity checker contract address from staking_token_contract
57
+ activity_checker_address = staking_token_contract.functions.activityChecker().call()
58
+
59
+ # Load the ABI file for the Activity Checker contract
60
+ with open('./contracts/StakingActivityChecker.json', "r", encoding="utf-8") as file:
61
+ activity_checker_data = json.load(file)
62
+
63
+ activity_checker_abi = activity_checker_data.get("abi", [])
64
+
65
+ # Create the Activity Checker contract instance
66
+ activity_checker_contract = w3.eth.contract(address=activity_checker_address, abi=activity_checker_abi)
67
+
68
+ return staking_token_contract, activity_checker_contract
69
+
70
+ except Exception as e:
71
+ print(f"An error occurred while loading the contracts: {e}")
72
+ raise
73
+
74
+
75
+ def fetch_and_aggregate_transactions():
76
+ total_services = service_registry.functions.totalSupply().call()
77
+ aggregated_transactions = []
78
+ daily_agent_counts = {}
79
+ daily_agents_with_transactions = {}
80
+
81
+ _staking_token_contract, activity_checker_contract = load_activity_checker_contract(web3, '0x88996bbdE7f982D93214881756840cE2c77C4992')
82
+
83
+ for service_id in range(1, total_services + 1):
84
+ service = service_registry.functions.getService(service_id).call()
85
+
86
+ # Extract the list of agent IDs from the service data
87
+ agent_ids = service[-1] # Assuming the last element is the list of agent IDs
88
+
89
+ # Check if 25 is in the list of agent IDs
90
+ if 25 in agent_ids:
91
+ agent_address = service_registry.functions.getAgentInstances(service_id).call()[1][0]
92
+ response_transfers = get_transfers("valory", agent_address)
93
+ transfers = response_transfers.get("transfers", [])
94
+ if isinstance(transfers, list):
95
+ aggregated_transactions.extend(transfers)
96
+
97
+ # Track the daily number of agents
98
+ creation_event = service_registry.events.CreateService.create_filter(
99
+ from_block=0, argument_filters={'serviceId': service_id, 'configHash': service[2]}
100
+ ).get_all_entries()
101
+
102
+ if creation_event:
103
+ block_number = creation_event[0]['blockNumber']
104
+ block = web3.eth.get_block(block_number)
105
+ creation_timestamp = datetime.fromtimestamp(block['timestamp'])
106
+ date_str = creation_timestamp.strftime('%Y-%m-%d')
107
+ print("date_str",date_str)
108
+ if date_str not in daily_agent_counts:
109
+ daily_agent_counts[date_str] = set()
110
+ if date_str not in daily_agents_with_transactions:
111
+ daily_agents_with_transactions[date_str] = set()
112
+
113
+ service_safe = service[1]
114
+ print("agent_address",agent_address,"service_safe",service_safe)
115
+ multisig_nonces = activity_checker_contract.functions.getMultisigNonces(service_safe).call()[0]
116
+ if multisig_nonces > 0:
117
+ daily_agents_with_transactions[date_str].add(agent_address)
118
+ daily_agent_counts[date_str].add(agent_address)
119
+
120
+ # Convert set to count
121
+ daily_agent_counts = {date: len(agents) for date, agents in daily_agent_counts.items()}
122
+ daily_agents_with_transactions = {date: len(agents) for date, agents in daily_agents_with_transactions.items()}
123
+ return aggregated_transactions, daily_agent_counts, daily_agents_with_transactions
124
+
125
+ # Function to parse the transaction data and prepare it for visualization
126
+ def process_transactions_and_agents(data):
127
+ transactions, daily_agent_counts, daily_agents_with_transactions = data
128
+
129
+ # Convert the data into a pandas DataFrame for easy manipulation
130
+ rows = []
131
+ for tx in transactions:
132
+ # Normalize amounts
133
+ sending_amount = float(tx["sending"]["amount"]) / (10 ** tx["sending"]["token"]["decimals"])
134
+ receiving_amount = float(tx["receiving"]["amount"]) / (10 ** tx["receiving"]["token"]["decimals"])
135
+
136
+ # Convert timestamps to datetime objects
137
+ sending_timestamp = datetime.utcfromtimestamp(tx["sending"]["timestamp"])
138
+ receiving_timestamp = datetime.utcfromtimestamp(tx["receiving"]["timestamp"])
139
+
140
+ # Prepare row data
141
+ rows.append({
142
+ "transactionId": tx["transactionId"],
143
+ "from_address": tx["fromAddress"],
144
+ "to_address": tx["toAddress"],
145
+ "sending_chain": tx["sending"]["chainId"],
146
+ "receiving_chain": tx["receiving"]["chainId"],
147
+ "sending_token_symbol": tx["sending"]["token"]["symbol"],
148
+ "receiving_token_symbol": tx["receiving"]["token"]["symbol"],
149
+ "sending_amount": sending_amount,
150
+ "receiving_amount": receiving_amount,
151
+ "sending_amount_usd": float(tx["sending"]["amountUSD"]),
152
+ "receiving_amount_usd": float(tx["receiving"]["amountUSD"]),
153
+ "sending_gas_used": int(tx["sending"]["gasUsed"]),
154
+ "receiving_gas_used": int(tx["receiving"]["gasUsed"]),
155
+ "sending_timestamp": sending_timestamp,
156
+ "receiving_timestamp": receiving_timestamp,
157
+ "date": sending_timestamp.date(), # Group by day
158
+ "week": sending_timestamp.strftime('%Y-%m-%d') # Group by week
159
+ })
160
+
161
+ df_transactions = pd.DataFrame(rows)
162
+ df_agents = pd.DataFrame(list(daily_agent_counts.items()), columns=['date', 'agent_count'])
163
+ df_agents_with_transactions = pd.DataFrame(list(daily_agents_with_transactions.items()), columns=['date', 'agent_count_with_transactions'])
164
+
165
+ # Convert the date column to datetime
166
+ df_agents['date'] = pd.to_datetime(df_agents['date'])
167
+ df_agents_with_transactions['date'] = pd.to_datetime(df_agents_with_transactions['date'])
168
+
169
+ # Convert to week periods
170
+ df_agents['week'] = df_agents['date'].dt.to_period('W').apply(lambda r: r.start_time)
171
+ df_agents_with_transactions['week'] = df_agents_with_transactions['date'].dt.to_period('W').apply(lambda r: r.start_time)
172
+
173
+ # Group by week
174
+ df_agents_weekly = df_agents[['week', 'agent_count']].groupby('week').sum().reset_index()
175
+ df_agents_with_transactions_weekly = df_agents_with_transactions[['week', 'agent_count_with_transactions']].groupby('week').sum().reset_index()
176
+
177
+ return df_transactions, df_agents_weekly, df_agents_with_transactions_weekly, df_agents_with_transactions
178
+
179
+ # Function to create visualizations based on the metrics
180
+ def create_visualizations():
181
+ transactions_data = fetch_and_aggregate_transactions()
182
+ df_transactions, df_agents_weekly, df_agents_with_transactions_weekly, df_agents_with_transactions = process_transactions_and_agents(transactions_data)
183
+ # Map chain IDs to chain names
184
+
185
+ # Fetch daily value locked data
186
+ df_tvl = fetch_daily_value_locked()
187
+
188
+ # Calculate total value locked per chain per day
189
+ df_tvl["total_value_locked_usd"] = df_tvl["amount0_usd"] + df_tvl["amount1_usd"]
190
+ df_tvl_daily = df_tvl.groupby(["date", "chain_name"])["total_value_locked_usd"].sum().reset_index()
191
+ df_tvl_daily['date'] = pd.to_datetime(df_tvl_daily['date'])
192
+
193
+ # Filter out dates with zero total value locked
194
+ df_tvl_daily = df_tvl_daily[df_tvl_daily["total_value_locked_usd"] > 0]
195
+ chain_name_map = {
196
+ "optimism": "Optimism",
197
+ "base": "Base",
198
+ "ethereum": "Ethereum"
199
+ }
200
+ df_tvl_daily["chain_name"] = df_tvl_daily["chain_name"].map(chain_name_map)
201
+
202
+ # Plot total value locked
203
+ fig_tvl = px.bar(
204
+ df_tvl_daily,
205
+ x="date",
206
+ y="total_value_locked_usd",
207
+ color="chain_name",
208
+ opacity=0.7,
209
+ title="Total Volume Invested in Pools in Different Chains Daily",
210
+ labels={"date": "Date","chain_name": "Transaction Chain", "total_value_locked_usd": "Total Volume Invested (USD)"},
211
+ barmode='stack',
212
+ color_discrete_map={
213
+ "Optimism": "blue",
214
+ "Base": "purple",
215
+ "Ethereum": "darkgreen"
216
+ }
217
+ )
218
+ fig_tvl.update_layout(
219
+ xaxis_title=None,
220
+ yaxis=dict(tickmode='linear', tick0=0, dtick=1),
221
+ xaxis=dict(
222
+ tickmode='array',
223
+ tickvals=df_tvl_daily['date'],
224
+ ticktext=df_tvl_daily['date'].dt.strftime('%b %d'),
225
+ tickangle=-45,
226
+ ),
227
+ bargap=0.6, # Increase gap between bar groups (0-1)
228
+ bargroupgap=0.1, # Decrease gap between bars in a group (0-1)
229
+ height=600, # Specify width to prevent bars from being too wide
230
+ margin=dict(l=50, r=50, t=50, b=50), # Add margins
231
+ showlegend=True,
232
+ template='plotly_white'
233
+ )
234
+ fig_tvl.update_xaxes(tickformat="%b %d")
235
+
236
+
237
+ chain_name_map = {
238
+ 10: "Optimism",
239
+ 8453: "Base",
240
+ 1: "Ethereum"
241
+ }
242
+ df_transactions["sending_chain"] = df_transactions["sending_chain"].map(chain_name_map)
243
+ df_transactions["receiving_chain"] = df_transactions["receiving_chain"].map(chain_name_map)
244
+
245
+ # Ensure that chain IDs are strings for consistent grouping
246
+ df_transactions["sending_chain"] = df_transactions["sending_chain"].astype(str)
247
+ df_transactions["receiving_chain"] = df_transactions["receiving_chain"].astype(str)
248
+ df_transactions['date'] = pd.to_datetime(df_transactions['date'])
249
+
250
+ # Identify swap transactions
251
+ df_transactions["is_swap"] = df_transactions.apply(lambda x: x["sending_token_symbol"] != x["receiving_token_symbol"], axis=1)
252
+
253
+ # Total swaps per chain per day
254
+ swaps_per_chain = df_transactions[df_transactions["is_swap"]].groupby(["date", "sending_chain"]).size().reset_index(name="swap_count")
255
+ fig_swaps_chain = px.bar(
256
+ swaps_per_chain,
257
+ x="date",
258
+ y="swap_count",
259
+ color="sending_chain",
260
+ title="Chain Daily Activity: Swaps",
261
+ labels={"sending_chain": "Transaction Chain", "swap_count": "Daily Swap Nr"},
262
+ barmode="stack",
263
+ opacity=0.7,
264
+ color_discrete_map={
265
+ "Optimism": "blue",
266
+ "Ethereum": "darkgreen",
267
+ "Base": "purple"
268
+ }
269
+ )
270
+ fig_swaps_chain.update_layout(
271
+ xaxis_title="Date",
272
+ yaxis_title="Daily Swap Count",
273
+ yaxis=dict(tickmode='linear', tick0=0, dtick=1),
274
+ xaxis=dict(
275
+ tickmode='array',
276
+ tickvals=[d for d in swaps_per_chain['date'] if d.weekday() == 0], # Show only Mondays
277
+ ticktext=[d.strftime('%m-%d') for d in swaps_per_chain['date'] if d.weekday() == 0],
278
+ tickangle=-45,
279
+ ),
280
+ bargap=0.6, # Increase gap between bar groups (0-1)
281
+ bargroupgap=0.1, # Decrease gap between bars in a group (0-1)
282
+ height=600, # Specify width to prevent bars from being too wide
283
+ margin=dict(l=50, r=50, t=50, b=50), # Add margins
284
+ showlegend=True,
285
+ legend=dict(
286
+ yanchor="top",
287
+ y=0.99,
288
+ xanchor="right",
289
+ x=0.99
290
+ ),
291
+ template='plotly_white'
292
+ )
293
+ fig_swaps_chain.update_xaxes(tickformat="%m-%d")
294
+
295
+ # Identify bridge transactions
296
+ # Identify bridge transactions
297
+ df_transactions["is_bridge"] = df_transactions.apply(lambda x: x["sending_chain"] != x["receiving_chain"], axis=1)
298
+
299
+ # Total bridges per chain per day
300
+ bridges_per_chain = df_transactions[df_transactions["is_bridge"]].groupby(["date", "sending_chain"]).size().reset_index(name="bridge_count")
301
+ fig_bridges_chain = px.bar(
302
+ bridges_per_chain,
303
+ x="date",
304
+ y="bridge_count",
305
+ color="sending_chain",
306
+ title="Chain Daily Activity: Bridges",
307
+ labels={"sending_chain": "Transaction Chain", "bridge_count": "Daily Bridge Nr"},
308
+ barmode="stack",
309
+ opacity=0.7,
310
+ color_discrete_map={
311
+ "Optimism": "blue",
312
+ "Ethereum": "darkgreen",
313
+ "Base": "purple"
314
+ }
315
+ )
316
+ fig_bridges_chain.update_layout(
317
+ xaxis_title="Date",
318
+ yaxis_title="Daily Bridge Count",
319
+ yaxis=dict(tickmode='linear', tick0=0, dtick=1),
320
+ xaxis=dict(
321
+ tickmode='array',
322
+ tickvals=[d for d in bridges_per_chain['date'] if d.weekday() == 0], # Show only Mondays
323
+ ticktext=[d.strftime('%m-%d') for d in bridges_per_chain['date'] if d.weekday() == 0],
324
+ tickangle=-45,
325
+ ),
326
+ bargap=0.6, # Increase gap between bar groups (0-1)
327
+ bargroupgap=0.1, # Decrease gap between bars in a group (0-1)
328
+ height=600, # Specify width to prevent bars from being too wide
329
+ margin=dict(l=50, r=50, t=50, b=50), # Add margins
330
+ showlegend=True,
331
+ legend=dict(
332
+ yanchor="top",
333
+ y=0.99,
334
+ xanchor="right",
335
+ x=0.99
336
+ ),
337
+ template='plotly_white'
338
+ )
339
+ fig_bridges_chain.update_xaxes(tickformat="%m-%d")
340
+
341
+ # Nr of agents registered daily and weekly
342
+ # Convert 'date' column to datetime
343
+ df_agents_with_transactions['date'] = pd.to_datetime(df_agents_with_transactions['date'])
344
+
345
+ # Calculate daily number of agents registered
346
+ daily_agents_df = df_agents_with_transactions.groupby('date').size().reset_index(name='daily_agent_count')
347
+
348
+ # Check for October 2, 2024 and update the value
349
+ daily_agents_df.loc[daily_agents_df['date'] == '2024-10-02', 'daily_agent_count'] = 2
350
+
351
+ # Calculate cumulative number of agents registered within the week up to each day
352
+ df_agents_with_transactions['week_start'] = df_agents_with_transactions['date'].dt.to_period("W").apply(lambda r: r.start_time)
353
+ cumulative_agents_df = df_agents_with_transactions.groupby(['week_start', 'date']).size().groupby(level=0).cumsum().reset_index(name='weekly_agent_count')
354
+
355
+ # Check for October 2, 2024 and update the value
356
+ cumulative_agents_df.loc[cumulative_agents_df['date'] == '2024-10-02', 'weekly_agent_count'] = 2
357
+
358
+ # Combine the data to ensure both dataframes align for plotting
359
+ combined_df = pd.merge(daily_agents_df, cumulative_agents_df, on='date', how='left')
360
+
361
+ # Create the bar chart with side-by-side bars
362
+ fig_agents_registered = go.Figure(data=[
363
+ go.Bar(
364
+ name='Daily nr of Registered Agents',
365
+ x=combined_df['date'],
366
+ y=combined_df['daily_agent_count'],
367
+ opacity=0.7,
368
+ marker_color='blue'
369
+ ),
370
+ go.Bar(
371
+ name='Total Weekly Nr of Registered Agents',
372
+ x=combined_df['date'],
373
+ y=combined_df['weekly_agent_count'],
374
+ opacity=0.7,
375
+ marker_color='purple'
376
+ )
377
+ ])
378
+
379
+ # Update layout to group bars side by side for each day
380
+ fig_agents_registered.update_layout(
381
+ xaxis_title='Date',
382
+ yaxis_title='Number of Agents',
383
+ title="Nr of Agents Registered",
384
+ barmode='group',
385
+ yaxis=dict(tickmode='linear', tick0=0, dtick=1),
386
+ xaxis=dict(
387
+ tickmode='array',
388
+ tickvals=combined_df['date'],
389
+ ticktext=[d.strftime("%b %d") for d in combined_df['date']],
390
+ tickangle=-45
391
+ ),
392
+ bargap=0.6, # Increase gap between bar groups (0-1)
393
+ height=600, # Specify width to prevent bars from being too wide
394
+ margin=dict(l=50, r=50, t=50, b=50), # Add margins
395
+ showlegend=True,
396
+ template='plotly_white'
397
+ )
398
+
399
+ # Calculate weekly average daily active agents
400
+ df_agents_with_transactions['day_of_week'] = df_agents_with_transactions['date'].dt.dayofweek
401
+ df_agents_with_transactions_weekly_avg = df_agents_with_transactions.groupby(['week', 'day_of_week'])['agent_count_with_transactions'].mean().reset_index()
402
+ df_agents_with_transactions_weekly_avg = df_agents_with_transactions_weekly_avg.groupby('week')['agent_count_with_transactions'].mean().reset_index()
403
+ # Number of agents with transactions per week
404
+ fig_agents_with_transactions_daily = px.bar(
405
+ df_agents_with_transactions_weekly,
406
+ x="week",
407
+ opacity=0.7,
408
+ y="agent_count_with_transactions",
409
+ title="Daily Active Agents: Weekly Average Nr of agents with at least 1 transaction daily",
410
+ labels={"week": "Week of", "agent_count_with_transactions": "Number of Agents with Transactions"},
411
+ color_discrete_sequence=["darkgreen"]
412
+ )
413
+ fig_agents_with_transactions_daily.update_layout(
414
+ title=dict(
415
+ x=0.5,y=0.95,xanchor='center',yanchor='top'), # Adjust vertical position and Center the title
416
+ yaxis=dict(tickmode='linear', tick0=0, dtick=1),
417
+ xaxis=dict(
418
+ tickmode='array',
419
+ tickvals=df_agents_with_transactions_weekly_avg['week'],
420
+ ticktext=df_agents_with_transactions_weekly_avg['week'].dt.strftime('%b %d'),
421
+ tickangle=0
422
+ ),
423
+ bargap=0.6, # Increase gap between bar groups (0-1)
424
+ bargroupgap=0.1, # Decrease gap between bars in a group (0-1)
425
+ height=600, # Specify width to prevent bars from being too wide
426
+ margin=dict(l=50, r=50, t=50, b=50), # Add margins
427
+ showlegend=True,
428
+ legend=dict(
429
+ yanchor="top",
430
+ y=0.99,
431
+ xanchor="right",
432
+ x=0.99
433
+ )
434
+ )
435
+
436
+ return fig_swaps_chain, fig_bridges_chain, fig_agents_registered, fig_agents_with_transactions_daily,fig_tvl
437
+
438
+ # Gradio interface
439
+ def dashboard():
440
+ with gr.Blocks() as demo:
441
+ gr.Markdown("# Valory Transactions Dashboard")
442
+ with gr.Tab("Chain Daily activity"):
443
+ fig_tx_chain = create_transcation_visualizations()
444
+ gr.Plot(fig_tx_chain)
445
+
446
+ fig_swaps_chain, fig_bridges_chain, fig_agents_registered, fig_agents_with_transactions_daily,fig_tvl = create_visualizations()
447
+ #Fetch and display visualizations
448
+ with gr.Tab("Swaps Daily"):
449
+ gr.Plot(fig_swaps_chain)
450
+
451
+ with gr.Tab("Bridges Daily"):
452
+ #fig_swaps_chain, fig_bridges_chain, fig_agents_daily, fig_agents_with_transactions_daily,fig_tvl = create_visualizations()
453
+ gr.Plot(fig_bridges_chain)
454
+
455
+ with gr.Tab("Nr of Agents Registered"):
456
+ #fig_swaps_chain, fig_bridges_chain, fig_agents_daily, fig_agents_with_transactions_daily,fig_tvl = create_visualizations()
457
+ gr.Plot(fig_agents_registered)
458
+
459
+ with gr.Tab("DAA"):
460
+ fig_agents_with_transactions_daily = create_active_agents_visualizations()
461
+ #fig_swaps_chain, fig_bridges_chain, fig_agents_daily, fig_agents_with_transactions_daily,fig_tvl = create_visualizations()
462
+ gr.Plot(fig_agents_with_transactions_daily)
463
+
464
+ with gr.Tab("Total Value Locked"):
465
+ #fig_swaps_chain, fig_bridges_chain, fig_agents_daily, fig_agents_with_transactions_daily, fig_tvl,fig_tvl = create_visualizations()
466
+ gr.Plot(fig_tvl)
467
+
468
+ return demo
469
+
470
+ # Launch the dashboard
471
+ if __name__ == "__main__":
472
+ dashboard().launch()
app_trans_new.py ADDED
@@ -0,0 +1,473 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import requests
2
+ import pandas as pd
3
+ import gradio as gr
4
+ import plotly.express as px
5
+ from datetime import datetime, timedelta
6
+ import plotly.graph_objects as go
7
+ import numpy as np
8
+ import json
9
+ from web3 import Web3
10
+ import time
11
+ import os
12
+ from itertools import product
13
+ # RPC URLs
14
+ OPTIMISM_RPC_URL = os.getenv('OPTIMISM_RPC_URL')
15
+ BASE_RPC_URL = os.getenv('BASE_RPC_URL')
16
+ ETH_RPC_URL = os.getenv('ETH_RPC_URL')
17
+
18
+ # Initialize Web3 instances
19
+ print("Initializing Web3 instances...")
20
+ web3_optimism = Web3(Web3.HTTPProvider(OPTIMISM_RPC_URL))
21
+ web3_base = Web3(Web3.HTTPProvider(BASE_RPC_URL))
22
+ web3_eth = Web3(Web3.HTTPProvider(ETH_RPC_URL))
23
+
24
+ # Contract addresses for service registries
25
+ contract_address_optimism = '0x3d77596beb0f130a4415df3D2D8232B3d3D31e44'
26
+ contract_address_base = '0x3C1fF68f5aa342D296d4DEe4Bb1cACCA912D95fE'
27
+ contract_address_eth = '0x48b6af7B12C71f09e2fC8aF4855De4Ff54e775cA'
28
+
29
+ # Load the ABI from a local JSON file
30
+ with open('./contracts/service_registry_abi.json', 'r') as abi_file:
31
+ contract_abi = json.load(abi_file)
32
+
33
+ # Create the contract instances
34
+ service_registry_optimism = web3_optimism.eth.contract(address=contract_address_optimism, abi=contract_abi)
35
+ service_registry_base = web3_base.eth.contract(address=contract_address_base, abi=contract_abi)
36
+ service_registry_eth = web3_eth.eth.contract(address=contract_address_eth, abi=contract_abi)
37
+ print("Service registry contracts loaded.")
38
+
39
+ # Check if connection is successful
40
+ if not web3_optimism.is_connected():
41
+ raise Exception("Failed to connect to the Optimism network.")
42
+ if not web3_base.is_connected():
43
+ raise Exception("Failed to connect to the Base network.")
44
+ if not web3_eth.is_connected():
45
+ raise Exception("Failed to connect to the ETH network.")
46
+ print("Successfully connected to Ethereum, Optimism, and Base networks.")
47
+
48
+
49
+ def fetch_service_safes(web3, registry_contract):
50
+ print("\nFetching service safes...")
51
+ total_services = registry_contract.functions.totalSupply().call()
52
+ print(f"Total services: {total_services}")
53
+ service_safes = set()
54
+
55
+ for service_id in range(1, total_services + 1):
56
+ print(f"Processing service ID: {service_id}")
57
+ service = registry_contract.functions.getService(service_id).call()
58
+ agent_ids = service[-1] # Assuming the last element is the list of agent IDs
59
+ print(f"Agent IDs: {agent_ids}")
60
+
61
+ if 25 in agent_ids:
62
+ agent_address = registry_contract.functions.getAgentInstances(service_id).call()
63
+ service_safe = service[1]
64
+ print(f"Found agent_address: {agent_address}")
65
+ print(f"Found service safe: {service_safe}")
66
+ service_safes.add(service_safe)
67
+
68
+ print(f"Total service safes found: {len(service_safes)}")
69
+ return service_safes
70
+
71
+ # Fetch service safes for each network
72
+ service_safes_optimism = fetch_service_safes(web3_optimism, service_registry_optimism)
73
+ service_safes_base = fetch_service_safes(web3_base, service_registry_base)
74
+ service_safes_eth = fetch_service_safes(web3_eth, service_registry_eth)
75
+ service_safes_eth = {safe for safe in service_safes_eth if safe.lower() != '0x0000000000000000000000000000000000000000'}
76
+
77
+ def get_block_range_for_date(chain_id, date_str, api_key, base_url):
78
+ """Get the block range for a specific date."""
79
+ target_date = datetime.strptime(date_str, "%Y-%m-%d").date()
80
+ start_of_day = datetime.combine(target_date, datetime.min.time())
81
+
82
+ if target_date == datetime.now().date():
83
+ end_of_day = datetime.now() # Use the current time if the target date is today
84
+ else:
85
+ end_of_day = datetime.combine(target_date, datetime.max.time())
86
+
87
+ start_timestamp = int(start_of_day.timestamp())
88
+ end_timestamp = int(end_of_day.timestamp())
89
+
90
+ # Get start block
91
+ start_response = requests.get(
92
+ f"{base_url}?module=block&action=getblocknobytime&timestamp={start_timestamp}&closest=before&apikey={api_key}"
93
+ )
94
+ if start_response.status_code == 200:
95
+ start_data = start_response.json()
96
+ start_block = start_data.get('result')
97
+ else:
98
+ print(f"Error fetching start block for {date_str} on chain {chain_id}")
99
+ return None, None
100
+
101
+ if start_block is None:
102
+ print(f"No start block found for chain {chain_id} on {date_str}")
103
+ return None, None
104
+ print(f"Start block for chain {chain_id} on {date_str}: {start_block}")
105
+
106
+ # Get end block
107
+ time.sleep(1)
108
+ end_response = requests.get(
109
+ f"{base_url}?module=block&action=getblocknobytime&timestamp={end_timestamp}&closest=before&apikey={api_key}"
110
+ )
111
+ if end_response.status_code == 200:
112
+ end_data = end_response.json()
113
+ end_block = end_data.get('result')
114
+ else:
115
+ print(f"Error fetching end block for {date_str} on chain {chain_id}")
116
+ return None, None
117
+
118
+ if end_block is None:
119
+ print(f"No end block found for chain {chain_id} on {date_str}")
120
+ return None, None
121
+ print(f"End block for chain {chain_id} on {date_str}: {end_block}")
122
+
123
+ return start_block, end_block
124
+
125
+ def get_transactions(api_keys, wallet_address, chain_name, start_block, end_block):
126
+ """Retrieve transactions for the given wallet address, chain, and block range using the Etherscan or similar API."""
127
+ base_url = {
128
+ 'optimism': "https://api-optimistic.etherscan.io/api",
129
+ 'base': "https://api.basescan.org/api",
130
+ 'ethereum': "https://api.etherscan.io/api"
131
+ }.get(chain_name)
132
+
133
+ if not base_url:
134
+ print(f"Invalid chain name: {chain_name}")
135
+ return []
136
+
137
+ params = {
138
+ 'module': 'account',
139
+ 'action': 'txlist',
140
+ 'address': wallet_address,
141
+ 'startblock': start_block,
142
+ 'endblock': end_block,
143
+ 'sort': 'asc',
144
+ 'apikey': api_keys.get(chain_name)
145
+ }
146
+
147
+ response = requests.get(base_url, params=params)
148
+ data = response.json()
149
+
150
+ time.sleep(1)
151
+
152
+ if data['status'] != '1':
153
+ print(f"Error: {data['message']}")
154
+ return []
155
+
156
+ valid_transactions = [tx for tx in data['result'] if tx['isError'] == '0']
157
+
158
+ return valid_transactions
159
+
160
+ def date_range(start_date, end_date):
161
+ """Generates a range of dates from start_date to end_date inclusive."""
162
+ start_dt = datetime.strptime(start_date, "%Y-%m-%d")
163
+ end_dt = datetime.strptime(end_date, "%Y-%m-%d")
164
+ delta = timedelta(days=1)
165
+ current_dt = start_dt
166
+ while current_dt <= end_dt:
167
+ yield current_dt.strftime("%Y-%m-%d")
168
+ current_dt += delta
169
+
170
+ def fetch_transactions():
171
+ api_keys = {
172
+ 'optimism': 'XQ72JA5XZ51QC7TG1W295AAIF4KTV92K1K',
173
+ 'base': '4BFQMVW1QUKEPVDA4VW711CF4462682CY8',
174
+ 'ethereum': '3GRYJGX55W3QWCEKGREF4H53AFHCAIVVR7'
175
+ }
176
+
177
+ base_urls = {
178
+ 10: "https://api-optimistic.etherscan.io/api",
179
+ 8453: "https://api.basescan.org/api",
180
+ 1: "https://api.etherscan.io/api"
181
+ }
182
+
183
+ current_date = datetime.today().strftime("%Y-%m-%d")
184
+ csv_filename = 'daily_transactions_new.csv'
185
+
186
+ if os.path.exists(csv_filename):
187
+ df_existing = pd.read_csv(csv_filename)
188
+ if 'date' in df_existing:
189
+ last_date_in_csv = df_existing['date'].max()
190
+ else:
191
+ df_existing['date'] = pd.to_datetime(df_existing['timestamp']).dt.date
192
+ last_date_in_csv = df_existing['date'].max()
193
+ else:
194
+ df_existing = pd.DataFrame()
195
+ last_date_in_csv = '2024-09-19'
196
+
197
+ start_date = (datetime.strptime(last_date_in_csv, "%Y-%m-%d") + timedelta(days=1)).strftime("%Y-%m-%d")
198
+
199
+ chains = {
200
+ 10: ('optimism', service_safes_optimism),
201
+ 8453: ('base', service_safes_base),
202
+ 1: ('ethereum', service_safes_eth)
203
+ }
204
+
205
+ all_transactions = df_existing.to_dict('records') if not df_existing.empty else []
206
+
207
+ for chain_id, (chain_name, service_safes) in chains.items():
208
+ base_url = base_urls[chain_id]
209
+ api_key = api_keys[chain_name]
210
+
211
+ for safe_address in service_safes:
212
+ print(f"\nProcessing {chain_name.capitalize()} for safe address {safe_address}...")
213
+ for single_date in date_range(start_date, current_date):
214
+ start_block, end_block = get_block_range_for_date(chain_id, single_date, api_key, base_url)
215
+ if start_block is None or end_block is None:
216
+ print(f"Skipping date {single_date} for chain {chain_name} due to missing block data.")
217
+ continue
218
+
219
+ print(f"Start Block: {start_block}, End Block: {end_block} for date {single_date}")
220
+
221
+ transactions = get_transactions(api_keys, safe_address, chain_name, start_block, end_block)
222
+
223
+ if transactions:
224
+ print(f"Found {len(transactions)} transactions on {single_date} for {chain_name.capitalize()} safe address {safe_address}:")
225
+ for tx in transactions:
226
+ tx_time = datetime.fromtimestamp(int(tx['timeStamp']))
227
+ all_transactions.append({
228
+ 'chain': chain_name,
229
+ 'safe_address': safe_address,
230
+ 'date': single_date,
231
+ 'transaction_hash': tx['hash'],
232
+ 'timestamp': tx_time,
233
+ 'from': tx['from'],
234
+ 'to': tx['to'],
235
+ 'value_eth': int(tx['value']) / 1e18 # Convert value to ETH
236
+ })
237
+ else:
238
+ print(f"No transactions found for safe address {safe_address} on {single_date} on {chain_name.capitalize()}.")
239
+
240
+ df_transactions_new = pd.DataFrame(all_transactions)
241
+ df_transactions_new.to_csv(csv_filename, index=False)
242
+ return df_transactions_new
243
+
244
+
245
+ def create_transcation_visualizations():
246
+ df_transactions_new = fetch_transactions()
247
+ df_transactions_new['timestamp'] = pd.to_datetime(df_transactions_new['timestamp'])
248
+
249
+ # Group by date and chain, count transactions
250
+ daily_counts = df_transactions_new.groupby([df_transactions_new['timestamp'].dt.date, 'chain']).size().unstack(fill_value=0)
251
+
252
+ # Ensure required chains are present
253
+ chains = ['optimism', 'base', 'ethereum']
254
+ for chain in chains:
255
+ if chain not in daily_counts.columns:
256
+ daily_counts[chain] = 0
257
+
258
+ daily_counts = daily_counts[chains]
259
+
260
+ # Read the original data
261
+ daily_counts['timestamp'] = daily_counts.index
262
+ daily_counts['timestamp'] = pd.to_datetime(daily_counts['timestamp'])
263
+ daily_counts = daily_counts.reset_index(drop=True)
264
+ # Get min and max dates
265
+ min_date = daily_counts['timestamp'].min()
266
+ max_date = daily_counts['timestamp'].max()
267
+
268
+ # Create complete date range
269
+ full_date_range = pd.date_range(start=min_date, end=max_date, freq='D')
270
+
271
+ # Create a new dataframe with all dates
272
+ complete_df = pd.DataFrame({'timestamp': full_date_range})
273
+ complete_df = complete_df.merge(daily_counts, on='timestamp', how='left')
274
+ complete_df = complete_df.fillna(0)
275
+ daily_counts = complete_df
276
+ # Convert timestamp to datetime
277
+ daily_counts['timestamp'] = pd.to_datetime(daily_counts['timestamp'])
278
+
279
+ # Create a new dataframe with 12-hour slots
280
+ new_rows = []
281
+
282
+ for _, row in daily_counts.iterrows():
283
+ # Create first 12-hour slot (0-12)
284
+ slot1 = row.copy()
285
+ # slot1['timestamp'] = row['timestamp'].replace(hour=0)
286
+
287
+ # # Create second 12-hour slot (12-24)
288
+ new_rows.extend([slot1])
289
+ slot2 = row.copy()
290
+ if slot2['timestamp'].dayofweek == 6: # 6 represents Sunday
291
+ slot2[['optimism', 'base', 'ethereum']] = 0
292
+ slot2['timestamp'] = row['timestamp'].replace(hour=12)
293
+ new_rows.extend([slot2])
294
+
295
+
296
+
297
+ # Create new dataframe with 12-hour slots
298
+ hourly_counts = pd.DataFrame(new_rows).sort_values('timestamp')
299
+
300
+ # Prepare data for plotting
301
+ dates = hourly_counts['timestamp'].tolist()
302
+ values = hourly_counts[['optimism', 'base', 'ethereum']].to_numpy()
303
+
304
+ # Create the figure
305
+ fig = go.Figure()
306
+ # Create arrays for positioning and width
307
+ # Convert dates to datetime objects first
308
+ date_objects = pd.to_datetime(dates)
309
+
310
+ # Create numeric indices for x-axis
311
+ x_numeric = np.arange(len(dates))
312
+
313
+ # Create arrays for positioning and width
314
+ width_array = []
315
+
316
+ for i, date in enumerate(date_objects):
317
+ width_array.append(1.0) # Full width for other days
318
+
319
+ # Get Monday indices for tick positions
320
+ monday_indices = [i for i, date in enumerate(date_objects) if date.dayofweek == 0]
321
+ monday_labels = [date_objects[i].strftime('%m-%d') for i in monday_indices]
322
+
323
+ # Add traces for each series
324
+ fig.add_trace(go.Bar(
325
+ name='Optimism',
326
+ x=x_numeric,
327
+ y=values[:,0],
328
+ marker_color='blue',
329
+ opacity=0.7,
330
+ text=None,
331
+ width=width_array,
332
+ textposition='none',
333
+ ))
334
+
335
+ fig.add_trace(go.Bar(
336
+ name='Base',
337
+ x=x_numeric,
338
+ y=values[:,1],
339
+ marker_color='purple',
340
+ opacity=0.7,
341
+ text=None,
342
+ textposition='none',
343
+ width=width_array,
344
+ ))
345
+
346
+ fig.add_trace(go.Bar(
347
+ name='Ethereum',
348
+ x=x_numeric,
349
+ y=values[:,2],
350
+ marker_color='darkgreen',
351
+ opacity=0.7,
352
+ text=None,
353
+ width=width_array,
354
+ textposition='none',
355
+ ))
356
+
357
+ # Update layout with numeric x-axis
358
+ fig.update_layout(
359
+ title='Chain Daily Activity : Transactions',
360
+ xaxis_title='Date',
361
+ yaxis_title='Daily Transactions Count',
362
+ barmode='stack',
363
+ showlegend=True,
364
+ legend_title_text='Transaction Chain',
365
+ height=600,
366
+ bargap=0,
367
+ bargroupgap=0,
368
+ xaxis=dict(
369
+ tickangle=-45,
370
+ tickmode='array',
371
+ ticktext=monday_labels,
372
+ tickvals=monday_indices,
373
+ ),
374
+ template='plotly_white',
375
+ hoverlabel=dict(
376
+ font_size=12,
377
+ ),
378
+ )
379
+
380
+ # Update hover template
381
+ for trace in fig.data:
382
+ trace.update(
383
+ hovertemplate="<b>Date:</b> %{text}<br>" +
384
+ "<b>" + trace.name + ":</b> %{y}<br>" +
385
+ "<extra></extra>",
386
+ text=[d.strftime('%Y-%m-%d') for d in date_objects] # Add date text for hover
387
+ )
388
+
389
+ # Show the plot
390
+ return fig
391
+
392
+ def create_active_agents_visualizations():
393
+ df_transactions_new = fetch_transactions()
394
+ df_transactions_new['timestamp'] = pd.to_datetime(df_transactions_new['timestamp'])
395
+ # Extract week and day information
396
+ df_transactions_new['week_start'] = df_transactions_new['timestamp'].dt.to_period('W').apply(lambda r: r.start_time)
397
+ df_transactions_new['weekday'] = df_transactions_new['timestamp'].dt.weekday
398
+
399
+ # Count unique agents per day
400
+ daily_agents = df_transactions_new.groupby(['week_start', 'weekday'])['from'].nunique().reset_index()
401
+
402
+ # Generate all possible combinations of week_start and weekday up to today
403
+ today = datetime.today()
404
+ yesterday = today - timedelta(days=1)
405
+ valid_weekdays = [(ws, wd) for ws, wd in product(daily_agents['week_start'].unique(), range(7)) if ws + timedelta(days=wd) <= yesterday]
406
+
407
+ all_combinations = pd.DataFrame(valid_weekdays, columns=['week_start', 'weekday'])
408
+
409
+ # Merge with daily_agents to fill missing days with zero
410
+ daily_agents = all_combinations.merge(daily_agents, on=['week_start', 'weekday'], how='left').fillna(0)
411
+
412
+ # Compute average unique agents per week
413
+ weekly_avg_agents = daily_agents.groupby('week_start')['from'].mean().reset_index()
414
+ weekly_avg_agents.rename(columns={'from': 'avg_daily_active_agents'}, inplace=True)
415
+
416
+ # Prepare data for plotting
417
+ weeks = weekly_avg_agents['week_start'].unique()
418
+ avg_agents_per_week = weekly_avg_agents['avg_daily_active_agents']
419
+
420
+ # Create the bar chart
421
+ fig = go.Figure()
422
+
423
+ fig.add_trace(go.Bar(
424
+ x=[f'{week.strftime("%b %d")}' for week in weeks],
425
+ y=avg_agents_per_week,
426
+
427
+ marker_color='blue',
428
+ opacity=0.7,
429
+ text=None,
430
+ hoverlabel=dict(
431
+ font_size=12,
432
+ ),
433
+ ))
434
+
435
+ # Update layout
436
+ fig.update_layout(
437
+ title='Daily Active Agents: Weekly Average Number of Agents with at Least 1 Transaction Daily',
438
+ xaxis_title='Week',
439
+ yaxis_title='Average Number of Active Agents',
440
+ xaxis=dict(
441
+ tickangle=-45 # Rotate x-axis labels to 45 degrees
442
+ ),
443
+ height=600,
444
+ width=1000,
445
+ bargap=0,
446
+ bargroupgap=0.2,
447
+ template='plotly_white'
448
+ )
449
+
450
+ return fig
451
+
452
+
453
+ # Gradio interface
454
+ def dashboard():
455
+ with gr.Blocks() as demo:
456
+ gr.Markdown("# Valory Transactions Dashboard")
457
+
458
+ # Fetch and display visualizations
459
+ with gr.Tab("Transactions"):
460
+ fig_tx_chain = create_transcation_visualizations()
461
+ gr.Plot(fig_tx_chain)
462
+ with gr.Tab("DAA"):
463
+ fig_active_agents = create_active_agents_visualizations()
464
+ gr.Plot(fig_active_agents)
465
+
466
+ # Add more tabs as needed...
467
+
468
+ return demo
469
+
470
+
471
+ # Launch the dashboard
472
+ if __name__ == "__main__":
473
+ dashboard().launch()
app_value_locked.py ADDED
@@ -0,0 +1,405 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import requests
3
+ from web3 import Web3
4
+ from datetime import datetime, timedelta
5
+ from typing import List, Dict, Optional
6
+ import pandas as pd
7
+ import time
8
+ import requests
9
+ from requests.adapters import HTTPAdapter
10
+ from requests.packages.urllib3.util.retry import Retry
11
+ import time
12
+ import os
13
+
14
+ ADDRESSES = {
15
+ "optimism": {
16
+ "balancer_vault": "0xBA12222222228d8Ba445958a75a0704d566BF2C8",
17
+ "uniswap_position_manager": "0xC36442b4a4522E871399CD717aBDD847Ab11FE88"
18
+ },
19
+ "base": {
20
+ "balancer_vault": "0xBA12222222228d8Ba445958a75a0704d566BF2C8",
21
+ "uniswap_position_manager": "0x03a520b32C04BF3bEEf7BEb72E919cf822Ed34f1"
22
+ }
23
+ }
24
+
25
+ # Defining RPC URLs and initializing Web3 instances
26
+ OPTIMISM_RPC_URL = os.getenv('OPTIMISM_RPC_URL')
27
+ BASE_RPC_URL = os.getenv('BASE_RPC_URL')
28
+ ETH_RPC_URL = os.getenv('ETH_RPC_URL')
29
+
30
+ print("Initializing Web3 instances...")
31
+ web3_optimism = Web3(Web3.HTTPProvider(OPTIMISM_RPC_URL))
32
+ web3_base = Web3(Web3.HTTPProvider(BASE_RPC_URL))
33
+
34
+ # Contract addresses for service registries
35
+ contract_address_optimism = '0x3d77596beb0f130a4415df3D2D8232B3d3D31e44'
36
+ contract_address_base = '0x3C1fF68f5aa342D296d4DEe4Bb1cACCA912D95fE'
37
+
38
+ # Load the ABI from a local JSON file
39
+ with open('./contracts/service_registry_abi.json', 'r') as abi_file:
40
+ contract_abi = json.load(abi_file)
41
+
42
+ # Create the contract instances
43
+ service_registry_optimism = web3_optimism.eth.contract(address=contract_address_optimism, abi=contract_abi)
44
+ service_registry_base = web3_base.eth.contract(address=contract_address_base, abi=contract_abi)
45
+ print("Service registry contracts loaded.")
46
+
47
+ def load_abi(filename):
48
+ with open(filename, 'r') as file:
49
+ contract_json = json.load(file)
50
+ return contract_json['abi']
51
+
52
+ UNISWAP_ABI = load_abi('./contracts/NonfungiblePositionManager.json')
53
+
54
+ def get_logs(api_key, chain_name, from_block, to_block, contract_address, service_safe):
55
+ """Fetch logs for the given contract and wallet address with specified topics."""
56
+ base_url = {
57
+ 'optimism': "https://api-optimistic.etherscan.io/api",
58
+ 'base': "https://api.basescan.org/api"
59
+ }.get(chain_name)
60
+
61
+ if not base_url:
62
+ print(f"Invalid chain name: {chain_name}")
63
+ return []
64
+ print('formatted safe address for topic', f"0x000000000000000000000000{service_safe[2:].lower()}")
65
+ params = {
66
+ 'module': 'logs',
67
+ 'action': 'getLogs',
68
+ 'address': contract_address,
69
+ 'fromBlock': from_block,
70
+ 'toBlock': to_block,
71
+ 'apikey': api_key,
72
+ 'topic2': f"0x000000000000000000000000{service_safe[2:].lower()}" # Properly formatted topic2
73
+ }
74
+
75
+ response = requests.get(base_url, params=params)
76
+ data = response.json()
77
+
78
+ if data['status'] != '1':
79
+ print(f"Error: {data['message']}")
80
+ return []
81
+
82
+ return data['result']
83
+
84
+ def get_block_range_for_date(chain_id, date_str, api_key, base_url):
85
+ """Get the block range for a specific date."""
86
+ target_date = datetime.strptime(date_str, "%Y-%m-%d")
87
+ start_of_day = datetime.combine(target_date, datetime.min.time())
88
+ end_of_day = datetime.combine(target_date, datetime.max.time())
89
+
90
+ start_timestamp = int(start_of_day.timestamp())
91
+ end_timestamp = int(end_of_day.timestamp())
92
+
93
+ # Get start block
94
+ start_response = requests.get(
95
+ f"{base_url}?module=block&action=getblocknobytime&timestamp={start_timestamp}&closest=before&apikey={api_key}"
96
+ )
97
+ if start_response.status_code == 200:
98
+ start_data = start_response.json()
99
+ start_block = start_data.get('result')
100
+ else:
101
+ print(f"Error fetching start block for {date_str} on chain {chain_id}")
102
+ return None, None
103
+
104
+ if start_block is None:
105
+ print(f"No start block found for chain {chain_id} on {date_str}")
106
+ return None, None
107
+ print(f"Start block for chain {chain_id} on {date_str}: {start_block}")
108
+
109
+ # Get end block
110
+ end_response = requests.get(
111
+ f"{base_url}?module=block&action=getblocknobytime&timestamp={end_timestamp}&closest=before&apikey={api_key}"
112
+ )
113
+ if end_response.status_code == 200:
114
+ end_data = end_response.json()
115
+ end_block = end_data.get('result')
116
+ else:
117
+ print(f"Error fetching end block for {date_str} on chain {chain_id}")
118
+ return None, None
119
+
120
+ if end_block is None:
121
+ print(f"No end block found for chain {chain_id} on {date_str}")
122
+ return None, None
123
+ print(f"End block for chain {chain_id} on {date_str}: {end_block}")
124
+
125
+ return start_block, end_block
126
+
127
+ def date_range(start_date, end_date):
128
+ """Generates a range of dates from start_date to end_date inclusive."""
129
+ start_dt = datetime.strptime(start_date, "%Y-%m-%d")
130
+ end_dt = datetime.strptime(end_date, "%Y-%m-%d")
131
+ delta = timedelta(days=1)
132
+ current_dt = start_dt
133
+ while current_dt <= end_dt:
134
+ yield current_dt.strftime("%Y-%m-%d")
135
+ current_dt += delta
136
+
137
+ def parse_transfer_log(chain_name, single_date, log):
138
+ # ERC-721 Transfer event signature
139
+ TRANSFER_EVENT_SIGNATURE = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"
140
+
141
+ if log['topics'][0].lower() == TRANSFER_EVENT_SIGNATURE.lower():
142
+ # This is a Transfer event
143
+ return {
144
+ "chain_name": chain_name,
145
+ "date": single_date,
146
+ "event": "Transfer",
147
+ "topic_0": log['topics'][0],
148
+ "from": "0x" + log['topics'][1][-40:], # Extract the address from the padded topic
149
+ "to": "0x" + log['topics'][2][-40:], # Extract the address from the padded topic
150
+ "token_id": int(log['topics'][3], 16) # Convert hex to decimal
151
+ }
152
+
153
+ # If no Transfer event is found
154
+ return None
155
+
156
+ def parse_pool_balance_log(chain_name, single_date, log):
157
+ POOL_BALANCE_SIGNATURE = "0xe5ce249087ce04f05a957192435400fd97868dba0e6a4b4c049abf8af80dae78"
158
+ if log['topics'][0].lower() == POOL_BALANCE_SIGNATURE.lower():
159
+ # Event PoolBalanceChanged: (bytes32 poolId, address liquidityProvider, address[] tokens, int256[] deltas, uint256[] protocolFeeAmounts)
160
+ return {
161
+ "chain_name": chain_name,
162
+ "date": single_date,
163
+ "event": "PoolBalanceChanged",
164
+ "poolId": log['topics'][1],
165
+ "liquidityProvider": "0x" + log['topics'][2][-40:], # Extract the address from the padded topic
166
+ "tokens": [log['data'][i:i + 64] for i in range(0, len(log['data']), 64)],
167
+ "deltas": [int(log['data'][i:i + 64], 16) for i in range(0, len(log['data']), 64)],
168
+ "protocolFeeAmounts": [int(log['data'][i:i + 64], 16) for i in range(0, len(log['data']), 64)]
169
+ }
170
+
171
+ def fetch_service_safes(web3, registry_contract):
172
+ print("\nFetching service safes...")
173
+ total_services = registry_contract.functions.totalSupply().call()
174
+ print(f"Total services: {total_services}")
175
+ service_safes = set()
176
+
177
+ for service_id in range(1, total_services + 1):
178
+ service = registry_contract.functions.getService(service_id).call()
179
+ agent_ids = service[-1] # Assuming the last element is the list of agent IDs
180
+
181
+ if 40 in agent_ids:
182
+ service_safe = service[1]
183
+ service_safes.add(service_safe)
184
+
185
+ print(f"Total service safes found: {len(service_safes)}")
186
+ return service_safes
187
+
188
+ def get_uniswap_v3_position(web3, contract_address, token_id):
189
+ """Fetch the Uniswap V3 position details including `token0`, `token1`."""
190
+ position_manager_contract = web3.eth.contract(address=contract_address, abi=UNISWAP_ABI)
191
+ position_data = position_manager_contract.functions.positions(token_id).call()
192
+ return {
193
+ 'token0': position_data[2],
194
+ 'token1': position_data[3]
195
+ }
196
+
197
+ def get_uniswap_increase_liquidity(api_key, chain_name, token_id):
198
+ """Fetch the IncreaseLiquidity event details including `amount0`, `amount1`."""
199
+ base_url = {
200
+ 'optimism': "https://api-optimistic.etherscan.io/api",
201
+ 'base': "https://api.basescan.org/api"
202
+ }.get(chain_name)
203
+
204
+ if not base_url:
205
+ print(f"Invalid chain name: {chain_name}")
206
+ return {}
207
+
208
+ params = {
209
+ 'module': 'logs',
210
+ 'action': 'getLogs',
211
+ 'address': ADDRESSES[chain_name]['uniswap_position_manager'],
212
+ 'topic0': "0x3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f",
213
+ 'topic1': f"0x{token_id:064x}",
214
+ 'apikey': api_key
215
+ }
216
+
217
+ response = requests.get(base_url, params=params)
218
+ data = response.json()
219
+
220
+ if data['status'] != '1':
221
+ print(f"Error: {data['message']}")
222
+ return {}
223
+
224
+ log = data['result'][0] if data['result'] else None
225
+ if not log:
226
+ return {}
227
+
228
+ # Extracting amounts from the data hex-string
229
+ data_hex = log['data'][2:] # Remove '0x' prefix
230
+ liquidity = int(data_hex[0:64], 16)
231
+ amount0 = int(data_hex[64:128], 16)
232
+ amount1 = int(data_hex[128:192], 16)
233
+
234
+ return {
235
+ 'liquidity': liquidity,
236
+ 'amount0': amount0,
237
+ 'amount1': amount1
238
+ }
239
+
240
+ def get_token_decimals(web3, token_address):
241
+ """Fetch the number of decimals for a given ERC-20 token."""
242
+ token_contract = web3.eth.contract(address=token_address, abi=[
243
+ {"constant":True,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":False,"stateMutability":"view","type":"function"}
244
+ ])
245
+ return token_contract.functions.decimals().call()
246
+
247
+
248
+
249
+ def requests_retry_session(
250
+ retries=3,
251
+ backoff_factor=0.3,
252
+ status_forcelist=(500, 502, 504),
253
+ session=None,
254
+ ):
255
+ session = session or requests.Session()
256
+ retry = Retry(
257
+ total=retries,
258
+ read=retries,
259
+ connect=retries,
260
+ backoff_factor=backoff_factor,
261
+ status_forcelist=status_forcelist,
262
+ )
263
+ adapter = HTTPAdapter(max_retries=retry)
264
+ session.mount('http://', adapter)
265
+ session.mount('https://', adapter)
266
+ return session
267
+
268
+ def get_token_price_usd(chain, token_address):
269
+ chain_dict = {"optimism": "optimistic-ethereum", "base": "base", "ethereum": "ethereum"}
270
+ chain_name = chain_dict.get(chain, chain)
271
+ time.sleep(4)
272
+ url = f"https://api.coingecko.com/api/v3/simple/token_price/{chain_name}?contract_addresses={token_address}&vs_currencies=usd"
273
+
274
+ headers = {
275
+ "accept": "application/json",
276
+ "x-cg-api-key": "CG-mf5xZnGELpSXeSqmHDLY2nNU"
277
+ }
278
+
279
+ try:
280
+ response = requests_retry_session().get(url, headers=headers, timeout=10)
281
+ response.raise_for_status()
282
+ data = response.json()
283
+
284
+ # Extract USD price
285
+ key = token_address.lower()
286
+ return data.get(key, {}).get('usd', None)
287
+ except requests.exceptions.RequestException as e:
288
+ print(f"An error occurred: {e}")
289
+ return None
290
+
291
+ def load_existing_transactions(file_path):
292
+ """Load existing transactions from a CSV file."""
293
+ try:
294
+ return pd.read_csv(file_path)
295
+ except FileNotFoundError:
296
+ return pd.DataFrame()
297
+
298
+ def get_last_processed_date(df):
299
+ """Get the last processed date from the DataFrame."""
300
+ if df.empty:
301
+ return None
302
+ return df['date'].max()
303
+
304
+ # Main function to integrate the above based on provided context
305
+ def fetch_daily_value_locked():
306
+ api_keys = {
307
+ 'optimism': 'XQ72JA5XZ51QC7TG1W295AAIF4KTV92K1K',
308
+ 'base': '4BFQMVW1QUKEPVDA4VW711CF4462682CY8'
309
+ }
310
+
311
+ base_urls = {
312
+ 10: "https://api-optimistic.etherscan.io/api",
313
+ 8453: "https://api.basescan.org/api"
314
+ }
315
+
316
+ # Load existing transactions if any
317
+ existing_transactions_path = 'daily_value_locked.csv'
318
+ df_existing_transactions = load_existing_transactions(existing_transactions_path)
319
+ last_processed_date = get_last_processed_date(df_existing_transactions)
320
+
321
+ # Determine the start date based on the last processed date
322
+ start_date = (pd.to_datetime(last_processed_date) + timedelta(days=1)).strftime('%Y-%m-%d') if last_processed_date else '2024-09-19'
323
+ current_date = datetime.now().strftime('%Y-%m-%d') # Till present date
324
+
325
+ chains = {
326
+ 10: ('optimism', 'uniswap_position_manager', 'balancer_vault'),
327
+ 8453: ('base', 'uniswap_position_manager', 'balancer_vault')
328
+ }
329
+
330
+ # Example service safe addresses - Replace these with actual addresses
331
+ print("Fetching service safes for Optimism...")
332
+ service_safes_optimism = fetch_service_safes(web3_optimism, service_registry_optimism)
333
+ print(service_safes_optimism)
334
+ print("Fetching service safes for Base...")
335
+ service_safes_base = fetch_service_safes(web3_base, service_registry_base)
336
+ print(service_safes_base)
337
+
338
+ service_safes = {
339
+ 'optimism': service_safes_optimism,
340
+ 'base': service_safes_base
341
+ }
342
+
343
+ all_transactions = [] # List to hold all parsed logs
344
+
345
+ for chain_id, (chain_name, uniswap_contract_key, balancer_contract_key) in chains.items():
346
+ base_url = base_urls[chain_id]
347
+ api_key = api_keys[chain_name]
348
+
349
+ for service_safe in service_safes[chain_name]:
350
+ print(f"Checking service safe {service_safe} for chain {chain_name}")
351
+ for single_date in date_range(start_date, current_date):
352
+ start_block, end_block = get_block_range_for_date(chain_id, single_date, api_key, base_url)
353
+ if start_block is None or end_block is None:
354
+ print(f"Skipping date {single_date} for chain {chain_name} due to missing block data.")
355
+ continue
356
+
357
+ print(f"Start Block: {start_block}, End Block: {end_block} for date {single_date} on chain {chain_name} for service safe {service_safe}")
358
+
359
+ # Get logs for Uniswap and Balancer contracts
360
+ for contract_key, topic_key in [(uniswap_contract_key, "transfer"), (balancer_contract_key, "pool_balance_changed")]:
361
+ contract_address = ADDRESSES[chain_name][contract_key]
362
+ print(api_key, chain_name, start_block, end_block, contract_address, service_safe)
363
+ logs = get_logs(api_key, chain_name, start_block, end_block, contract_address, service_safe)
364
+
365
+ for log in logs:
366
+ parsed_log = parse_pool_balance_log(chain_name, single_date, log) if topic_key == "pool_balance_changed" else parse_transfer_log(chain_name, single_date, log)
367
+ if parsed_log:
368
+ if topic_key == "transfer":
369
+ # If the event is a Transfer event, fetch uniswap position details and increase liquidity event details
370
+ uniswap_v3_data = get_uniswap_v3_position(web3_base if chain_name == 'base' else web3_optimism, contract_address, parsed_log['token_id'])
371
+ increase_liquidity_data = get_uniswap_increase_liquidity(api_key, chain_name, parsed_log['token_id'])
372
+
373
+ token0_address = uniswap_v3_data['token0']
374
+ token1_address = uniswap_v3_data['token1']
375
+ decimals_token0 = get_token_decimals(web3_base if chain_name == 'base' else web3_optimism, token0_address)
376
+ decimals_token1 = get_token_decimals(web3_base if chain_name == 'base' else web3_optimism, token1_address)
377
+ print(decimals_token0,decimals_token1)
378
+ increase_liquidity_data['amount0'] /= 10**decimals_token0
379
+ increase_liquidity_data['amount1'] /= 10**decimals_token1
380
+
381
+ usd_price_token0 = get_token_price_usd(chain_name, token0_address)
382
+ usd_price_token1 = get_token_price_usd(chain_name, token1_address)
383
+
384
+ if usd_price_token0 is not None and usd_price_token1 is not None:
385
+ increase_liquidity_data['amount0_usd'] = increase_liquidity_data['amount0'] * usd_price_token0
386
+ increase_liquidity_data['amount1_usd'] = increase_liquidity_data['amount1'] * usd_price_token1
387
+
388
+ parsed_log.update(uniswap_v3_data)
389
+ parsed_log.update(increase_liquidity_data)
390
+ all_transactions.append(parsed_log)
391
+
392
+ # Convert to DataFrame and append to existing transactions
393
+ df_new_transactions = pd.DataFrame(all_transactions)
394
+
395
+ if not df_existing_transactions.empty:
396
+ all_data = pd.concat([df_existing_transactions, df_new_transactions])
397
+ else:
398
+ all_data = df_new_transactions
399
+
400
+ all_data.to_csv(existing_transactions_path, index=False)
401
+ print("Data saved to", existing_transactions_path)
402
+
403
+ return all_data
404
+
405
+ #print(df_transactions)
contracts/NonfungiblePositionManager.json ADDED
@@ -0,0 +1,1228 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "contractName": "",
3
+ "abi": [
4
+ {
5
+ "inputs": [
6
+ {
7
+ "internalType": "address",
8
+ "name": "_factory",
9
+ "type": "address"
10
+ },
11
+ {
12
+ "internalType": "address",
13
+ "name": "_WETH9",
14
+ "type": "address"
15
+ },
16
+ {
17
+ "internalType": "address",
18
+ "name": "_tokenDescriptor_",
19
+ "type": "address"
20
+ }
21
+ ],
22
+ "stateMutability": "nonpayable",
23
+ "type": "constructor"
24
+ },
25
+ {
26
+ "anonymous": false,
27
+ "inputs": [
28
+ {
29
+ "indexed": true,
30
+ "internalType": "address",
31
+ "name": "owner",
32
+ "type": "address"
33
+ },
34
+ {
35
+ "indexed": true,
36
+ "internalType": "address",
37
+ "name": "approved",
38
+ "type": "address"
39
+ },
40
+ {
41
+ "indexed": true,
42
+ "internalType": "uint256",
43
+ "name": "tokenId",
44
+ "type": "uint256"
45
+ }
46
+ ],
47
+ "name": "Approval",
48
+ "type": "event"
49
+ },
50
+ {
51
+ "anonymous": false,
52
+ "inputs": [
53
+ {
54
+ "indexed": true,
55
+ "internalType": "address",
56
+ "name": "owner",
57
+ "type": "address"
58
+ },
59
+ {
60
+ "indexed": true,
61
+ "internalType": "address",
62
+ "name": "operator",
63
+ "type": "address"
64
+ },
65
+ {
66
+ "indexed": false,
67
+ "internalType": "bool",
68
+ "name": "approved",
69
+ "type": "bool"
70
+ }
71
+ ],
72
+ "name": "ApprovalForAll",
73
+ "type": "event"
74
+ },
75
+ {
76
+ "anonymous": false,
77
+ "inputs": [
78
+ {
79
+ "indexed": true,
80
+ "internalType": "uint256",
81
+ "name": "tokenId",
82
+ "type": "uint256"
83
+ },
84
+ {
85
+ "indexed": false,
86
+ "internalType": "address",
87
+ "name": "recipient",
88
+ "type": "address"
89
+ },
90
+ {
91
+ "indexed": false,
92
+ "internalType": "uint256",
93
+ "name": "amount0",
94
+ "type": "uint256"
95
+ },
96
+ {
97
+ "indexed": false,
98
+ "internalType": "uint256",
99
+ "name": "amount1",
100
+ "type": "uint256"
101
+ }
102
+ ],
103
+ "name": "Collect",
104
+ "type": "event"
105
+ },
106
+ {
107
+ "anonymous": false,
108
+ "inputs": [
109
+ {
110
+ "indexed": true,
111
+ "internalType": "uint256",
112
+ "name": "tokenId",
113
+ "type": "uint256"
114
+ },
115
+ {
116
+ "indexed": false,
117
+ "internalType": "uint128",
118
+ "name": "liquidity",
119
+ "type": "uint128"
120
+ },
121
+ {
122
+ "indexed": false,
123
+ "internalType": "uint256",
124
+ "name": "amount0",
125
+ "type": "uint256"
126
+ },
127
+ {
128
+ "indexed": false,
129
+ "internalType": "uint256",
130
+ "name": "amount1",
131
+ "type": "uint256"
132
+ }
133
+ ],
134
+ "name": "DecreaseLiquidity",
135
+ "type": "event"
136
+ },
137
+ {
138
+ "anonymous": false,
139
+ "inputs": [
140
+ {
141
+ "indexed": true,
142
+ "internalType": "uint256",
143
+ "name": "tokenId",
144
+ "type": "uint256"
145
+ },
146
+ {
147
+ "indexed": false,
148
+ "internalType": "uint128",
149
+ "name": "liquidity",
150
+ "type": "uint128"
151
+ },
152
+ {
153
+ "indexed": false,
154
+ "internalType": "uint256",
155
+ "name": "amount0",
156
+ "type": "uint256"
157
+ },
158
+ {
159
+ "indexed": false,
160
+ "internalType": "uint256",
161
+ "name": "amount1",
162
+ "type": "uint256"
163
+ }
164
+ ],
165
+ "name": "IncreaseLiquidity",
166
+ "type": "event"
167
+ },
168
+ {
169
+ "anonymous": false,
170
+ "inputs": [
171
+ {
172
+ "indexed": true,
173
+ "internalType": "address",
174
+ "name": "from",
175
+ "type": "address"
176
+ },
177
+ {
178
+ "indexed": true,
179
+ "internalType": "address",
180
+ "name": "to",
181
+ "type": "address"
182
+ },
183
+ {
184
+ "indexed": true,
185
+ "internalType": "uint256",
186
+ "name": "tokenId",
187
+ "type": "uint256"
188
+ }
189
+ ],
190
+ "name": "Transfer",
191
+ "type": "event"
192
+ },
193
+ {
194
+ "inputs": [],
195
+ "name": "DOMAIN_SEPARATOR",
196
+ "outputs": [
197
+ {
198
+ "internalType": "bytes32",
199
+ "name": "",
200
+ "type": "bytes32"
201
+ }
202
+ ],
203
+ "stateMutability": "view",
204
+ "type": "function"
205
+ },
206
+ {
207
+ "inputs": [],
208
+ "name": "PERMIT_TYPEHASH",
209
+ "outputs": [
210
+ {
211
+ "internalType": "bytes32",
212
+ "name": "",
213
+ "type": "bytes32"
214
+ }
215
+ ],
216
+ "stateMutability": "view",
217
+ "type": "function"
218
+ },
219
+ {
220
+ "inputs": [],
221
+ "name": "WETH9",
222
+ "outputs": [
223
+ {
224
+ "internalType": "address",
225
+ "name": "",
226
+ "type": "address"
227
+ }
228
+ ],
229
+ "stateMutability": "view",
230
+ "type": "function"
231
+ },
232
+ {
233
+ "inputs": [
234
+ {
235
+ "internalType": "address",
236
+ "name": "to",
237
+ "type": "address"
238
+ },
239
+ {
240
+ "internalType": "uint256",
241
+ "name": "tokenId",
242
+ "type": "uint256"
243
+ }
244
+ ],
245
+ "name": "approve",
246
+ "outputs": [],
247
+ "stateMutability": "nonpayable",
248
+ "type": "function"
249
+ },
250
+ {
251
+ "inputs": [
252
+ {
253
+ "internalType": "address",
254
+ "name": "owner",
255
+ "type": "address"
256
+ }
257
+ ],
258
+ "name": "balanceOf",
259
+ "outputs": [
260
+ {
261
+ "internalType": "uint256",
262
+ "name": "",
263
+ "type": "uint256"
264
+ }
265
+ ],
266
+ "stateMutability": "view",
267
+ "type": "function"
268
+ },
269
+ {
270
+ "inputs": [],
271
+ "name": "baseURI",
272
+ "outputs": [
273
+ {
274
+ "internalType": "string",
275
+ "name": "",
276
+ "type": "string"
277
+ }
278
+ ],
279
+ "stateMutability": "pure",
280
+ "type": "function"
281
+ },
282
+ {
283
+ "inputs": [
284
+ {
285
+ "internalType": "uint256",
286
+ "name": "tokenId",
287
+ "type": "uint256"
288
+ }
289
+ ],
290
+ "name": "burn",
291
+ "outputs": [],
292
+ "stateMutability": "payable",
293
+ "type": "function"
294
+ },
295
+ {
296
+ "inputs": [
297
+ {
298
+ "components": [
299
+ {
300
+ "internalType": "uint256",
301
+ "name": "tokenId",
302
+ "type": "uint256"
303
+ },
304
+ {
305
+ "internalType": "address",
306
+ "name": "recipient",
307
+ "type": "address"
308
+ },
309
+ {
310
+ "internalType": "uint128",
311
+ "name": "amount0Max",
312
+ "type": "uint128"
313
+ },
314
+ {
315
+ "internalType": "uint128",
316
+ "name": "amount1Max",
317
+ "type": "uint128"
318
+ }
319
+ ],
320
+ "internalType": "struct INonfungiblePositionManager.CollectParams",
321
+ "name": "params",
322
+ "type": "tuple"
323
+ }
324
+ ],
325
+ "name": "collect",
326
+ "outputs": [
327
+ {
328
+ "internalType": "uint256",
329
+ "name": "amount0",
330
+ "type": "uint256"
331
+ },
332
+ {
333
+ "internalType": "uint256",
334
+ "name": "amount1",
335
+ "type": "uint256"
336
+ }
337
+ ],
338
+ "stateMutability": "payable",
339
+ "type": "function"
340
+ },
341
+ {
342
+ "inputs": [
343
+ {
344
+ "internalType": "address",
345
+ "name": "token0",
346
+ "type": "address"
347
+ },
348
+ {
349
+ "internalType": "address",
350
+ "name": "token1",
351
+ "type": "address"
352
+ },
353
+ {
354
+ "internalType": "uint24",
355
+ "name": "fee",
356
+ "type": "uint24"
357
+ },
358
+ {
359
+ "internalType": "uint160",
360
+ "name": "sqrtPriceX96",
361
+ "type": "uint160"
362
+ }
363
+ ],
364
+ "name": "createAndInitializePoolIfNecessary",
365
+ "outputs": [
366
+ {
367
+ "internalType": "address",
368
+ "name": "pool",
369
+ "type": "address"
370
+ }
371
+ ],
372
+ "stateMutability": "payable",
373
+ "type": "function"
374
+ },
375
+ {
376
+ "inputs": [
377
+ {
378
+ "components": [
379
+ {
380
+ "internalType": "uint256",
381
+ "name": "tokenId",
382
+ "type": "uint256"
383
+ },
384
+ {
385
+ "internalType": "uint128",
386
+ "name": "liquidity",
387
+ "type": "uint128"
388
+ },
389
+ {
390
+ "internalType": "uint256",
391
+ "name": "amount0Min",
392
+ "type": "uint256"
393
+ },
394
+ {
395
+ "internalType": "uint256",
396
+ "name": "amount1Min",
397
+ "type": "uint256"
398
+ },
399
+ {
400
+ "internalType": "uint256",
401
+ "name": "deadline",
402
+ "type": "uint256"
403
+ }
404
+ ],
405
+ "internalType": "struct INonfungiblePositionManager.DecreaseLiquidityParams",
406
+ "name": "params",
407
+ "type": "tuple"
408
+ }
409
+ ],
410
+ "name": "decreaseLiquidity",
411
+ "outputs": [
412
+ {
413
+ "internalType": "uint256",
414
+ "name": "amount0",
415
+ "type": "uint256"
416
+ },
417
+ {
418
+ "internalType": "uint256",
419
+ "name": "amount1",
420
+ "type": "uint256"
421
+ }
422
+ ],
423
+ "stateMutability": "payable",
424
+ "type": "function"
425
+ },
426
+ {
427
+ "inputs": [],
428
+ "name": "factory",
429
+ "outputs": [
430
+ {
431
+ "internalType": "address",
432
+ "name": "",
433
+ "type": "address"
434
+ }
435
+ ],
436
+ "stateMutability": "view",
437
+ "type": "function"
438
+ },
439
+ {
440
+ "inputs": [
441
+ {
442
+ "internalType": "uint256",
443
+ "name": "tokenId",
444
+ "type": "uint256"
445
+ }
446
+ ],
447
+ "name": "getApproved",
448
+ "outputs": [
449
+ {
450
+ "internalType": "address",
451
+ "name": "",
452
+ "type": "address"
453
+ }
454
+ ],
455
+ "stateMutability": "view",
456
+ "type": "function"
457
+ },
458
+ {
459
+ "inputs": [
460
+ {
461
+ "components": [
462
+ {
463
+ "internalType": "uint256",
464
+ "name": "tokenId",
465
+ "type": "uint256"
466
+ },
467
+ {
468
+ "internalType": "uint256",
469
+ "name": "amount0Desired",
470
+ "type": "uint256"
471
+ },
472
+ {
473
+ "internalType": "uint256",
474
+ "name": "amount1Desired",
475
+ "type": "uint256"
476
+ },
477
+ {
478
+ "internalType": "uint256",
479
+ "name": "amount0Min",
480
+ "type": "uint256"
481
+ },
482
+ {
483
+ "internalType": "uint256",
484
+ "name": "amount1Min",
485
+ "type": "uint256"
486
+ },
487
+ {
488
+ "internalType": "uint256",
489
+ "name": "deadline",
490
+ "type": "uint256"
491
+ }
492
+ ],
493
+ "internalType": "struct INonfungiblePositionManager.IncreaseLiquidityParams",
494
+ "name": "params",
495
+ "type": "tuple"
496
+ }
497
+ ],
498
+ "name": "increaseLiquidity",
499
+ "outputs": [
500
+ {
501
+ "internalType": "uint128",
502
+ "name": "liquidity",
503
+ "type": "uint128"
504
+ },
505
+ {
506
+ "internalType": "uint256",
507
+ "name": "amount0",
508
+ "type": "uint256"
509
+ },
510
+ {
511
+ "internalType": "uint256",
512
+ "name": "amount1",
513
+ "type": "uint256"
514
+ }
515
+ ],
516
+ "stateMutability": "payable",
517
+ "type": "function"
518
+ },
519
+ {
520
+ "inputs": [
521
+ {
522
+ "internalType": "address",
523
+ "name": "owner",
524
+ "type": "address"
525
+ },
526
+ {
527
+ "internalType": "address",
528
+ "name": "operator",
529
+ "type": "address"
530
+ }
531
+ ],
532
+ "name": "isApprovedForAll",
533
+ "outputs": [
534
+ {
535
+ "internalType": "bool",
536
+ "name": "",
537
+ "type": "bool"
538
+ }
539
+ ],
540
+ "stateMutability": "view",
541
+ "type": "function"
542
+ },
543
+ {
544
+ "inputs": [
545
+ {
546
+ "components": [
547
+ {
548
+ "internalType": "address",
549
+ "name": "token0",
550
+ "type": "address"
551
+ },
552
+ {
553
+ "internalType": "address",
554
+ "name": "token1",
555
+ "type": "address"
556
+ },
557
+ {
558
+ "internalType": "uint24",
559
+ "name": "fee",
560
+ "type": "uint24"
561
+ },
562
+ {
563
+ "internalType": "int24",
564
+ "name": "tickLower",
565
+ "type": "int24"
566
+ },
567
+ {
568
+ "internalType": "int24",
569
+ "name": "tickUpper",
570
+ "type": "int24"
571
+ },
572
+ {
573
+ "internalType": "uint256",
574
+ "name": "amount0Desired",
575
+ "type": "uint256"
576
+ },
577
+ {
578
+ "internalType": "uint256",
579
+ "name": "amount1Desired",
580
+ "type": "uint256"
581
+ },
582
+ {
583
+ "internalType": "uint256",
584
+ "name": "amount0Min",
585
+ "type": "uint256"
586
+ },
587
+ {
588
+ "internalType": "uint256",
589
+ "name": "amount1Min",
590
+ "type": "uint256"
591
+ },
592
+ {
593
+ "internalType": "address",
594
+ "name": "recipient",
595
+ "type": "address"
596
+ },
597
+ {
598
+ "internalType": "uint256",
599
+ "name": "deadline",
600
+ "type": "uint256"
601
+ }
602
+ ],
603
+ "internalType": "struct INonfungiblePositionManager.MintParams",
604
+ "name": "params",
605
+ "type": "tuple"
606
+ }
607
+ ],
608
+ "name": "mint",
609
+ "outputs": [
610
+ {
611
+ "internalType": "uint256",
612
+ "name": "tokenId",
613
+ "type": "uint256"
614
+ },
615
+ {
616
+ "internalType": "uint128",
617
+ "name": "liquidity",
618
+ "type": "uint128"
619
+ },
620
+ {
621
+ "internalType": "uint256",
622
+ "name": "amount0",
623
+ "type": "uint256"
624
+ },
625
+ {
626
+ "internalType": "uint256",
627
+ "name": "amount1",
628
+ "type": "uint256"
629
+ }
630
+ ],
631
+ "stateMutability": "payable",
632
+ "type": "function"
633
+ },
634
+ {
635
+ "inputs": [
636
+ {
637
+ "internalType": "bytes[]",
638
+ "name": "data",
639
+ "type": "bytes[]"
640
+ }
641
+ ],
642
+ "name": "multicall",
643
+ "outputs": [
644
+ {
645
+ "internalType": "bytes[]",
646
+ "name": "results",
647
+ "type": "bytes[]"
648
+ }
649
+ ],
650
+ "stateMutability": "payable",
651
+ "type": "function"
652
+ },
653
+ {
654
+ "inputs": [],
655
+ "name": "name",
656
+ "outputs": [
657
+ {
658
+ "internalType": "string",
659
+ "name": "",
660
+ "type": "string"
661
+ }
662
+ ],
663
+ "stateMutability": "view",
664
+ "type": "function"
665
+ },
666
+ {
667
+ "inputs": [
668
+ {
669
+ "internalType": "uint256",
670
+ "name": "tokenId",
671
+ "type": "uint256"
672
+ }
673
+ ],
674
+ "name": "ownerOf",
675
+ "outputs": [
676
+ {
677
+ "internalType": "address",
678
+ "name": "",
679
+ "type": "address"
680
+ }
681
+ ],
682
+ "stateMutability": "view",
683
+ "type": "function"
684
+ },
685
+ {
686
+ "inputs": [
687
+ {
688
+ "internalType": "address",
689
+ "name": "spender",
690
+ "type": "address"
691
+ },
692
+ {
693
+ "internalType": "uint256",
694
+ "name": "tokenId",
695
+ "type": "uint256"
696
+ },
697
+ {
698
+ "internalType": "uint256",
699
+ "name": "deadline",
700
+ "type": "uint256"
701
+ },
702
+ {
703
+ "internalType": "uint8",
704
+ "name": "v",
705
+ "type": "uint8"
706
+ },
707
+ {
708
+ "internalType": "bytes32",
709
+ "name": "r",
710
+ "type": "bytes32"
711
+ },
712
+ {
713
+ "internalType": "bytes32",
714
+ "name": "s",
715
+ "type": "bytes32"
716
+ }
717
+ ],
718
+ "name": "permit",
719
+ "outputs": [],
720
+ "stateMutability": "payable",
721
+ "type": "function"
722
+ },
723
+ {
724
+ "inputs": [
725
+ {
726
+ "internalType": "uint256",
727
+ "name": "tokenId",
728
+ "type": "uint256"
729
+ }
730
+ ],
731
+ "name": "positions",
732
+ "outputs": [
733
+ {
734
+ "internalType": "uint96",
735
+ "name": "nonce",
736
+ "type": "uint96"
737
+ },
738
+ {
739
+ "internalType": "address",
740
+ "name": "operator",
741
+ "type": "address"
742
+ },
743
+ {
744
+ "internalType": "address",
745
+ "name": "token0",
746
+ "type": "address"
747
+ },
748
+ {
749
+ "internalType": "address",
750
+ "name": "token1",
751
+ "type": "address"
752
+ },
753
+ {
754
+ "internalType": "uint24",
755
+ "name": "fee",
756
+ "type": "uint24"
757
+ },
758
+ {
759
+ "internalType": "int24",
760
+ "name": "tickLower",
761
+ "type": "int24"
762
+ },
763
+ {
764
+ "internalType": "int24",
765
+ "name": "tickUpper",
766
+ "type": "int24"
767
+ },
768
+ {
769
+ "internalType": "uint128",
770
+ "name": "liquidity",
771
+ "type": "uint128"
772
+ },
773
+ {
774
+ "internalType": "uint256",
775
+ "name": "feeGrowthInside0LastX128",
776
+ "type": "uint256"
777
+ },
778
+ {
779
+ "internalType": "uint256",
780
+ "name": "feeGrowthInside1LastX128",
781
+ "type": "uint256"
782
+ },
783
+ {
784
+ "internalType": "uint128",
785
+ "name": "tokensOwed0",
786
+ "type": "uint128"
787
+ },
788
+ {
789
+ "internalType": "uint128",
790
+ "name": "tokensOwed1",
791
+ "type": "uint128"
792
+ }
793
+ ],
794
+ "stateMutability": "view",
795
+ "type": "function"
796
+ },
797
+ {
798
+ "inputs": [],
799
+ "name": "refundETH",
800
+ "outputs": [],
801
+ "stateMutability": "payable",
802
+ "type": "function"
803
+ },
804
+ {
805
+ "inputs": [
806
+ {
807
+ "internalType": "address",
808
+ "name": "from",
809
+ "type": "address"
810
+ },
811
+ {
812
+ "internalType": "address",
813
+ "name": "to",
814
+ "type": "address"
815
+ },
816
+ {
817
+ "internalType": "uint256",
818
+ "name": "tokenId",
819
+ "type": "uint256"
820
+ }
821
+ ],
822
+ "name": "safeTransferFrom",
823
+ "outputs": [],
824
+ "stateMutability": "nonpayable",
825
+ "type": "function"
826
+ },
827
+ {
828
+ "inputs": [
829
+ {
830
+ "internalType": "address",
831
+ "name": "from",
832
+ "type": "address"
833
+ },
834
+ {
835
+ "internalType": "address",
836
+ "name": "to",
837
+ "type": "address"
838
+ },
839
+ {
840
+ "internalType": "uint256",
841
+ "name": "tokenId",
842
+ "type": "uint256"
843
+ },
844
+ {
845
+ "internalType": "bytes",
846
+ "name": "_data",
847
+ "type": "bytes"
848
+ }
849
+ ],
850
+ "name": "safeTransferFrom",
851
+ "outputs": [],
852
+ "stateMutability": "nonpayable",
853
+ "type": "function"
854
+ },
855
+ {
856
+ "inputs": [
857
+ {
858
+ "internalType": "address",
859
+ "name": "token",
860
+ "type": "address"
861
+ },
862
+ {
863
+ "internalType": "uint256",
864
+ "name": "value",
865
+ "type": "uint256"
866
+ },
867
+ {
868
+ "internalType": "uint256",
869
+ "name": "deadline",
870
+ "type": "uint256"
871
+ },
872
+ {
873
+ "internalType": "uint8",
874
+ "name": "v",
875
+ "type": "uint8"
876
+ },
877
+ {
878
+ "internalType": "bytes32",
879
+ "name": "r",
880
+ "type": "bytes32"
881
+ },
882
+ {
883
+ "internalType": "bytes32",
884
+ "name": "s",
885
+ "type": "bytes32"
886
+ }
887
+ ],
888
+ "name": "selfPermit",
889
+ "outputs": [],
890
+ "stateMutability": "payable",
891
+ "type": "function"
892
+ },
893
+ {
894
+ "inputs": [
895
+ {
896
+ "internalType": "address",
897
+ "name": "token",
898
+ "type": "address"
899
+ },
900
+ {
901
+ "internalType": "uint256",
902
+ "name": "nonce",
903
+ "type": "uint256"
904
+ },
905
+ {
906
+ "internalType": "uint256",
907
+ "name": "expiry",
908
+ "type": "uint256"
909
+ },
910
+ {
911
+ "internalType": "uint8",
912
+ "name": "v",
913
+ "type": "uint8"
914
+ },
915
+ {
916
+ "internalType": "bytes32",
917
+ "name": "r",
918
+ "type": "bytes32"
919
+ },
920
+ {
921
+ "internalType": "bytes32",
922
+ "name": "s",
923
+ "type": "bytes32"
924
+ }
925
+ ],
926
+ "name": "selfPermitAllowed",
927
+ "outputs": [],
928
+ "stateMutability": "payable",
929
+ "type": "function"
930
+ },
931
+ {
932
+ "inputs": [
933
+ {
934
+ "internalType": "address",
935
+ "name": "token",
936
+ "type": "address"
937
+ },
938
+ {
939
+ "internalType": "uint256",
940
+ "name": "nonce",
941
+ "type": "uint256"
942
+ },
943
+ {
944
+ "internalType": "uint256",
945
+ "name": "expiry",
946
+ "type": "uint256"
947
+ },
948
+ {
949
+ "internalType": "uint8",
950
+ "name": "v",
951
+ "type": "uint8"
952
+ },
953
+ {
954
+ "internalType": "bytes32",
955
+ "name": "r",
956
+ "type": "bytes32"
957
+ },
958
+ {
959
+ "internalType": "bytes32",
960
+ "name": "s",
961
+ "type": "bytes32"
962
+ }
963
+ ],
964
+ "name": "selfPermitAllowedIfNecessary",
965
+ "outputs": [],
966
+ "stateMutability": "payable",
967
+ "type": "function"
968
+ },
969
+ {
970
+ "inputs": [
971
+ {
972
+ "internalType": "address",
973
+ "name": "token",
974
+ "type": "address"
975
+ },
976
+ {
977
+ "internalType": "uint256",
978
+ "name": "value",
979
+ "type": "uint256"
980
+ },
981
+ {
982
+ "internalType": "uint256",
983
+ "name": "deadline",
984
+ "type": "uint256"
985
+ },
986
+ {
987
+ "internalType": "uint8",
988
+ "name": "v",
989
+ "type": "uint8"
990
+ },
991
+ {
992
+ "internalType": "bytes32",
993
+ "name": "r",
994
+ "type": "bytes32"
995
+ },
996
+ {
997
+ "internalType": "bytes32",
998
+ "name": "s",
999
+ "type": "bytes32"
1000
+ }
1001
+ ],
1002
+ "name": "selfPermitIfNecessary",
1003
+ "outputs": [],
1004
+ "stateMutability": "payable",
1005
+ "type": "function"
1006
+ },
1007
+ {
1008
+ "inputs": [
1009
+ {
1010
+ "internalType": "address",
1011
+ "name": "operator",
1012
+ "type": "address"
1013
+ },
1014
+ {
1015
+ "internalType": "bool",
1016
+ "name": "approved",
1017
+ "type": "bool"
1018
+ }
1019
+ ],
1020
+ "name": "setApprovalForAll",
1021
+ "outputs": [],
1022
+ "stateMutability": "nonpayable",
1023
+ "type": "function"
1024
+ },
1025
+ {
1026
+ "inputs": [
1027
+ {
1028
+ "internalType": "bytes4",
1029
+ "name": "interfaceId",
1030
+ "type": "bytes4"
1031
+ }
1032
+ ],
1033
+ "name": "supportsInterface",
1034
+ "outputs": [
1035
+ {
1036
+ "internalType": "bool",
1037
+ "name": "",
1038
+ "type": "bool"
1039
+ }
1040
+ ],
1041
+ "stateMutability": "view",
1042
+ "type": "function"
1043
+ },
1044
+ {
1045
+ "inputs": [
1046
+ {
1047
+ "internalType": "address",
1048
+ "name": "token",
1049
+ "type": "address"
1050
+ },
1051
+ {
1052
+ "internalType": "uint256",
1053
+ "name": "amountMinimum",
1054
+ "type": "uint256"
1055
+ },
1056
+ {
1057
+ "internalType": "address",
1058
+ "name": "recipient",
1059
+ "type": "address"
1060
+ }
1061
+ ],
1062
+ "name": "sweepToken",
1063
+ "outputs": [],
1064
+ "stateMutability": "payable",
1065
+ "type": "function"
1066
+ },
1067
+ {
1068
+ "inputs": [],
1069
+ "name": "symbol",
1070
+ "outputs": [
1071
+ {
1072
+ "internalType": "string",
1073
+ "name": "",
1074
+ "type": "string"
1075
+ }
1076
+ ],
1077
+ "stateMutability": "view",
1078
+ "type": "function"
1079
+ },
1080
+ {
1081
+ "inputs": [
1082
+ {
1083
+ "internalType": "uint256",
1084
+ "name": "index",
1085
+ "type": "uint256"
1086
+ }
1087
+ ],
1088
+ "name": "tokenByIndex",
1089
+ "outputs": [
1090
+ {
1091
+ "internalType": "uint256",
1092
+ "name": "",
1093
+ "type": "uint256"
1094
+ }
1095
+ ],
1096
+ "stateMutability": "view",
1097
+ "type": "function"
1098
+ },
1099
+ {
1100
+ "inputs": [
1101
+ {
1102
+ "internalType": "address",
1103
+ "name": "owner",
1104
+ "type": "address"
1105
+ },
1106
+ {
1107
+ "internalType": "uint256",
1108
+ "name": "index",
1109
+ "type": "uint256"
1110
+ }
1111
+ ],
1112
+ "name": "tokenOfOwnerByIndex",
1113
+ "outputs": [
1114
+ {
1115
+ "internalType": "uint256",
1116
+ "name": "",
1117
+ "type": "uint256"
1118
+ }
1119
+ ],
1120
+ "stateMutability": "view",
1121
+ "type": "function"
1122
+ },
1123
+ {
1124
+ "inputs": [
1125
+ {
1126
+ "internalType": "uint256",
1127
+ "name": "tokenId",
1128
+ "type": "uint256"
1129
+ }
1130
+ ],
1131
+ "name": "tokenURI",
1132
+ "outputs": [
1133
+ {
1134
+ "internalType": "string",
1135
+ "name": "",
1136
+ "type": "string"
1137
+ }
1138
+ ],
1139
+ "stateMutability": "view",
1140
+ "type": "function"
1141
+ },
1142
+ {
1143
+ "inputs": [],
1144
+ "name": "totalSupply",
1145
+ "outputs": [
1146
+ {
1147
+ "internalType": "uint256",
1148
+ "name": "",
1149
+ "type": "uint256"
1150
+ }
1151
+ ],
1152
+ "stateMutability": "view",
1153
+ "type": "function"
1154
+ },
1155
+ {
1156
+ "inputs": [
1157
+ {
1158
+ "internalType": "address",
1159
+ "name": "from",
1160
+ "type": "address"
1161
+ },
1162
+ {
1163
+ "internalType": "address",
1164
+ "name": "to",
1165
+ "type": "address"
1166
+ },
1167
+ {
1168
+ "internalType": "uint256",
1169
+ "name": "tokenId",
1170
+ "type": "uint256"
1171
+ }
1172
+ ],
1173
+ "name": "transferFrom",
1174
+ "outputs": [],
1175
+ "stateMutability": "nonpayable",
1176
+ "type": "function"
1177
+ },
1178
+ {
1179
+ "inputs": [
1180
+ {
1181
+ "internalType": "uint256",
1182
+ "name": "amount0Owed",
1183
+ "type": "uint256"
1184
+ },
1185
+ {
1186
+ "internalType": "uint256",
1187
+ "name": "amount1Owed",
1188
+ "type": "uint256"
1189
+ },
1190
+ {
1191
+ "internalType": "bytes",
1192
+ "name": "data",
1193
+ "type": "bytes"
1194
+ }
1195
+ ],
1196
+ "name": "uniswapV3MintCallback",
1197
+ "outputs": [],
1198
+ "stateMutability": "nonpayable",
1199
+ "type": "function"
1200
+ },
1201
+ {
1202
+ "inputs": [
1203
+ {
1204
+ "internalType": "uint256",
1205
+ "name": "amountMinimum",
1206
+ "type": "uint256"
1207
+ },
1208
+ {
1209
+ "internalType": "address",
1210
+ "name": "recipient",
1211
+ "type": "address"
1212
+ }
1213
+ ],
1214
+ "name": "unwrapWETH9",
1215
+ "outputs": [],
1216
+ "stateMutability": "payable",
1217
+ "type": "function"
1218
+ },
1219
+ {
1220
+ "stateMutability": "payable",
1221
+ "type": "receive"
1222
+ }
1223
+ ],
1224
+ "bytecode": "",
1225
+ "deployedBytecode": "",
1226
+ "linkReferences": {},
1227
+ "deployedLinkReferences": {}
1228
+ }
contracts/ServiceRegistryTokenUtility.json ADDED
@@ -0,0 +1,926 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "ServiceRegistryTokenUtility",
4
+ "sourceName": "contracts/ServiceRegistryTokenUtility.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [
8
+ {
9
+ "internalType": "address",
10
+ "name": "_serviceRegistry",
11
+ "type": "address"
12
+ }
13
+ ],
14
+ "stateMutability": "nonpayable",
15
+ "type": "constructor"
16
+ },
17
+ {
18
+ "inputs": [
19
+ {
20
+ "internalType": "address",
21
+ "name": "operator",
22
+ "type": "address"
23
+ }
24
+ ],
25
+ "name": "AgentInstanceRegistered",
26
+ "type": "error"
27
+ },
28
+ {
29
+ "inputs": [
30
+ {
31
+ "internalType": "uint256",
32
+ "name": "serviceId",
33
+ "type": "uint256"
34
+ }
35
+ ],
36
+ "name": "AgentInstancesSlotsFilled",
37
+ "type": "error"
38
+ },
39
+ {
40
+ "inputs": [
41
+ {
42
+ "internalType": "uint256",
43
+ "name": "agentId",
44
+ "type": "uint256"
45
+ }
46
+ ],
47
+ "name": "AgentNotFound",
48
+ "type": "error"
49
+ },
50
+ {
51
+ "inputs": [
52
+ {
53
+ "internalType": "uint256",
54
+ "name": "agentId",
55
+ "type": "uint256"
56
+ },
57
+ {
58
+ "internalType": "uint256",
59
+ "name": "serviceId",
60
+ "type": "uint256"
61
+ }
62
+ ],
63
+ "name": "AgentNotInService",
64
+ "type": "error"
65
+ },
66
+ {
67
+ "inputs": [
68
+ {
69
+ "internalType": "uint256",
70
+ "name": "componentId",
71
+ "type": "uint256"
72
+ }
73
+ ],
74
+ "name": "ComponentNotFound",
75
+ "type": "error"
76
+ },
77
+ {
78
+ "inputs": [],
79
+ "name": "HashExists",
80
+ "type": "error"
81
+ },
82
+ {
83
+ "inputs": [
84
+ {
85
+ "internalType": "uint256",
86
+ "name": "sent",
87
+ "type": "uint256"
88
+ },
89
+ {
90
+ "internalType": "uint256",
91
+ "name": "expected",
92
+ "type": "uint256"
93
+ },
94
+ {
95
+ "internalType": "uint256",
96
+ "name": "serviceId",
97
+ "type": "uint256"
98
+ }
99
+ ],
100
+ "name": "IncorrectAgentBondingValue",
101
+ "type": "error"
102
+ },
103
+ {
104
+ "inputs": [
105
+ {
106
+ "internalType": "uint256",
107
+ "name": "sent",
108
+ "type": "uint256"
109
+ },
110
+ {
111
+ "internalType": "uint256",
112
+ "name": "expected",
113
+ "type": "uint256"
114
+ },
115
+ {
116
+ "internalType": "uint256",
117
+ "name": "serviceId",
118
+ "type": "uint256"
119
+ }
120
+ ],
121
+ "name": "IncorrectRegistrationDepositValue",
122
+ "type": "error"
123
+ },
124
+ {
125
+ "inputs": [
126
+ {
127
+ "internalType": "address",
128
+ "name": "sender",
129
+ "type": "address"
130
+ },
131
+ {
132
+ "internalType": "address",
133
+ "name": "manager",
134
+ "type": "address"
135
+ }
136
+ ],
137
+ "name": "ManagerOnly",
138
+ "type": "error"
139
+ },
140
+ {
141
+ "inputs": [
142
+ {
143
+ "internalType": "address",
144
+ "name": "provided",
145
+ "type": "address"
146
+ },
147
+ {
148
+ "internalType": "address",
149
+ "name": "expected",
150
+ "type": "address"
151
+ },
152
+ {
153
+ "internalType": "uint256",
154
+ "name": "serviceId",
155
+ "type": "uint256"
156
+ }
157
+ ],
158
+ "name": "OnlyOwnServiceMultisig",
159
+ "type": "error"
160
+ },
161
+ {
162
+ "inputs": [
163
+ {
164
+ "internalType": "address",
165
+ "name": "operator",
166
+ "type": "address"
167
+ },
168
+ {
169
+ "internalType": "uint256",
170
+ "name": "serviceId",
171
+ "type": "uint256"
172
+ }
173
+ ],
174
+ "name": "OperatorHasNoInstances",
175
+ "type": "error"
176
+ },
177
+ {
178
+ "inputs": [
179
+ {
180
+ "internalType": "uint256",
181
+ "name": "provided",
182
+ "type": "uint256"
183
+ },
184
+ {
185
+ "internalType": "uint256",
186
+ "name": "max",
187
+ "type": "uint256"
188
+ }
189
+ ],
190
+ "name": "Overflow",
191
+ "type": "error"
192
+ },
193
+ {
194
+ "inputs": [
195
+ {
196
+ "internalType": "address",
197
+ "name": "sender",
198
+ "type": "address"
199
+ },
200
+ {
201
+ "internalType": "address",
202
+ "name": "owner",
203
+ "type": "address"
204
+ }
205
+ ],
206
+ "name": "OwnerOnly",
207
+ "type": "error"
208
+ },
209
+ {
210
+ "inputs": [],
211
+ "name": "Paused",
212
+ "type": "error"
213
+ },
214
+ {
215
+ "inputs": [],
216
+ "name": "ReentrancyGuard",
217
+ "type": "error"
218
+ },
219
+ {
220
+ "inputs": [
221
+ {
222
+ "internalType": "uint256",
223
+ "name": "serviceId",
224
+ "type": "uint256"
225
+ }
226
+ ],
227
+ "name": "ServiceMustBeInactive",
228
+ "type": "error"
229
+ },
230
+ {
231
+ "inputs": [
232
+ {
233
+ "internalType": "address",
234
+ "name": "token",
235
+ "type": "address"
236
+ }
237
+ ],
238
+ "name": "TokenRejected",
239
+ "type": "error"
240
+ },
241
+ {
242
+ "inputs": [
243
+ {
244
+ "internalType": "address",
245
+ "name": "token",
246
+ "type": "address"
247
+ },
248
+ {
249
+ "internalType": "address",
250
+ "name": "from",
251
+ "type": "address"
252
+ },
253
+ {
254
+ "internalType": "address",
255
+ "name": "to",
256
+ "type": "address"
257
+ },
258
+ {
259
+ "internalType": "uint256",
260
+ "name": "value",
261
+ "type": "uint256"
262
+ }
263
+ ],
264
+ "name": "TransferFailed",
265
+ "type": "error"
266
+ },
267
+ {
268
+ "inputs": [
269
+ {
270
+ "internalType": "address",
271
+ "name": "multisig",
272
+ "type": "address"
273
+ }
274
+ ],
275
+ "name": "UnauthorizedMultisig",
276
+ "type": "error"
277
+ },
278
+ {
279
+ "inputs": [
280
+ {
281
+ "internalType": "uint256",
282
+ "name": "agentId",
283
+ "type": "uint256"
284
+ }
285
+ ],
286
+ "name": "WrongAgentId",
287
+ "type": "error"
288
+ },
289
+ {
290
+ "inputs": [
291
+ {
292
+ "internalType": "uint256",
293
+ "name": "numValues1",
294
+ "type": "uint256"
295
+ },
296
+ {
297
+ "internalType": "uint256",
298
+ "name": "numValues2",
299
+ "type": "uint256"
300
+ }
301
+ ],
302
+ "name": "WrongArrayLength",
303
+ "type": "error"
304
+ },
305
+ {
306
+ "inputs": [
307
+ {
308
+ "internalType": "uint256",
309
+ "name": "serviceId",
310
+ "type": "uint256"
311
+ }
312
+ ],
313
+ "name": "WrongOperator",
314
+ "type": "error"
315
+ },
316
+ {
317
+ "inputs": [
318
+ {
319
+ "internalType": "uint256",
320
+ "name": "state",
321
+ "type": "uint256"
322
+ },
323
+ {
324
+ "internalType": "uint256",
325
+ "name": "serviceId",
326
+ "type": "uint256"
327
+ }
328
+ ],
329
+ "name": "WrongServiceState",
330
+ "type": "error"
331
+ },
332
+ {
333
+ "inputs": [
334
+ {
335
+ "internalType": "uint256",
336
+ "name": "currentThreshold",
337
+ "type": "uint256"
338
+ },
339
+ {
340
+ "internalType": "uint256",
341
+ "name": "minThreshold",
342
+ "type": "uint256"
343
+ },
344
+ {
345
+ "internalType": "uint256",
346
+ "name": "maxThreshold",
347
+ "type": "uint256"
348
+ }
349
+ ],
350
+ "name": "WrongThreshold",
351
+ "type": "error"
352
+ },
353
+ {
354
+ "inputs": [],
355
+ "name": "ZeroAddress",
356
+ "type": "error"
357
+ },
358
+ {
359
+ "inputs": [],
360
+ "name": "ZeroValue",
361
+ "type": "error"
362
+ },
363
+ {
364
+ "anonymous": false,
365
+ "inputs": [
366
+ {
367
+ "indexed": true,
368
+ "internalType": "address",
369
+ "name": "drainer",
370
+ "type": "address"
371
+ }
372
+ ],
373
+ "name": "DrainerUpdated",
374
+ "type": "event"
375
+ },
376
+ {
377
+ "anonymous": false,
378
+ "inputs": [
379
+ {
380
+ "indexed": true,
381
+ "internalType": "address",
382
+ "name": "manager",
383
+ "type": "address"
384
+ }
385
+ ],
386
+ "name": "ManagerUpdated",
387
+ "type": "event"
388
+ },
389
+ {
390
+ "anonymous": false,
391
+ "inputs": [
392
+ {
393
+ "indexed": false,
394
+ "internalType": "uint256",
395
+ "name": "amount",
396
+ "type": "uint256"
397
+ },
398
+ {
399
+ "indexed": true,
400
+ "internalType": "address",
401
+ "name": "operator",
402
+ "type": "address"
403
+ },
404
+ {
405
+ "indexed": true,
406
+ "internalType": "uint256",
407
+ "name": "serviceId",
408
+ "type": "uint256"
409
+ }
410
+ ],
411
+ "name": "OperatorTokenSlashed",
412
+ "type": "event"
413
+ },
414
+ {
415
+ "anonymous": false,
416
+ "inputs": [
417
+ {
418
+ "indexed": true,
419
+ "internalType": "address",
420
+ "name": "owner",
421
+ "type": "address"
422
+ }
423
+ ],
424
+ "name": "OwnerUpdated",
425
+ "type": "event"
426
+ },
427
+ {
428
+ "anonymous": false,
429
+ "inputs": [
430
+ {
431
+ "indexed": true,
432
+ "internalType": "address",
433
+ "name": "account",
434
+ "type": "address"
435
+ },
436
+ {
437
+ "indexed": true,
438
+ "internalType": "address",
439
+ "name": "token",
440
+ "type": "address"
441
+ },
442
+ {
443
+ "indexed": false,
444
+ "internalType": "uint256",
445
+ "name": "amount",
446
+ "type": "uint256"
447
+ }
448
+ ],
449
+ "name": "TokenDeposit",
450
+ "type": "event"
451
+ },
452
+ {
453
+ "anonymous": false,
454
+ "inputs": [
455
+ {
456
+ "indexed": true,
457
+ "internalType": "address",
458
+ "name": "drainer",
459
+ "type": "address"
460
+ },
461
+ {
462
+ "indexed": true,
463
+ "internalType": "address",
464
+ "name": "token",
465
+ "type": "address"
466
+ },
467
+ {
468
+ "indexed": false,
469
+ "internalType": "uint256",
470
+ "name": "amount",
471
+ "type": "uint256"
472
+ }
473
+ ],
474
+ "name": "TokenDrain",
475
+ "type": "event"
476
+ },
477
+ {
478
+ "anonymous": false,
479
+ "inputs": [
480
+ {
481
+ "indexed": true,
482
+ "internalType": "address",
483
+ "name": "account",
484
+ "type": "address"
485
+ },
486
+ {
487
+ "indexed": true,
488
+ "internalType": "address",
489
+ "name": "token",
490
+ "type": "address"
491
+ },
492
+ {
493
+ "indexed": false,
494
+ "internalType": "uint256",
495
+ "name": "amount",
496
+ "type": "uint256"
497
+ }
498
+ ],
499
+ "name": "TokenRefund",
500
+ "type": "event"
501
+ },
502
+ {
503
+ "inputs": [
504
+ {
505
+ "internalType": "uint256",
506
+ "name": "serviceId",
507
+ "type": "uint256"
508
+ }
509
+ ],
510
+ "name": "activateRegistrationTokenDeposit",
511
+ "outputs": [
512
+ {
513
+ "internalType": "bool",
514
+ "name": "isTokenSecured",
515
+ "type": "bool"
516
+ }
517
+ ],
518
+ "stateMutability": "nonpayable",
519
+ "type": "function"
520
+ },
521
+ {
522
+ "inputs": [
523
+ {
524
+ "internalType": "address",
525
+ "name": "newDrainer",
526
+ "type": "address"
527
+ }
528
+ ],
529
+ "name": "changeDrainer",
530
+ "outputs": [],
531
+ "stateMutability": "nonpayable",
532
+ "type": "function"
533
+ },
534
+ {
535
+ "inputs": [
536
+ {
537
+ "internalType": "address",
538
+ "name": "newManager",
539
+ "type": "address"
540
+ }
541
+ ],
542
+ "name": "changeManager",
543
+ "outputs": [],
544
+ "stateMutability": "nonpayable",
545
+ "type": "function"
546
+ },
547
+ {
548
+ "inputs": [
549
+ {
550
+ "internalType": "address",
551
+ "name": "newOwner",
552
+ "type": "address"
553
+ }
554
+ ],
555
+ "name": "changeOwner",
556
+ "outputs": [],
557
+ "stateMutability": "nonpayable",
558
+ "type": "function"
559
+ },
560
+ {
561
+ "inputs": [
562
+ {
563
+ "internalType": "uint256",
564
+ "name": "serviceId",
565
+ "type": "uint256"
566
+ },
567
+ {
568
+ "internalType": "address",
569
+ "name": "token",
570
+ "type": "address"
571
+ },
572
+ {
573
+ "internalType": "uint32[]",
574
+ "name": "agentIds",
575
+ "type": "uint32[]"
576
+ },
577
+ {
578
+ "internalType": "uint256[]",
579
+ "name": "bonds",
580
+ "type": "uint256[]"
581
+ }
582
+ ],
583
+ "name": "createWithToken",
584
+ "outputs": [],
585
+ "stateMutability": "nonpayable",
586
+ "type": "function"
587
+ },
588
+ {
589
+ "inputs": [
590
+ {
591
+ "internalType": "address",
592
+ "name": "token",
593
+ "type": "address"
594
+ }
595
+ ],
596
+ "name": "drain",
597
+ "outputs": [
598
+ {
599
+ "internalType": "uint256",
600
+ "name": "amount",
601
+ "type": "uint256"
602
+ }
603
+ ],
604
+ "stateMutability": "nonpayable",
605
+ "type": "function"
606
+ },
607
+ {
608
+ "inputs": [],
609
+ "name": "drainer",
610
+ "outputs": [
611
+ {
612
+ "internalType": "address",
613
+ "name": "",
614
+ "type": "address"
615
+ }
616
+ ],
617
+ "stateMutability": "view",
618
+ "type": "function"
619
+ },
620
+ {
621
+ "inputs": [
622
+ {
623
+ "internalType": "uint256",
624
+ "name": "serviceId",
625
+ "type": "uint256"
626
+ },
627
+ {
628
+ "internalType": "uint256",
629
+ "name": "agentId",
630
+ "type": "uint256"
631
+ }
632
+ ],
633
+ "name": "getAgentBond",
634
+ "outputs": [
635
+ {
636
+ "internalType": "uint256",
637
+ "name": "bond",
638
+ "type": "uint256"
639
+ }
640
+ ],
641
+ "stateMutability": "view",
642
+ "type": "function"
643
+ },
644
+ {
645
+ "inputs": [
646
+ {
647
+ "internalType": "address",
648
+ "name": "operator",
649
+ "type": "address"
650
+ },
651
+ {
652
+ "internalType": "uint256",
653
+ "name": "serviceId",
654
+ "type": "uint256"
655
+ }
656
+ ],
657
+ "name": "getOperatorBalance",
658
+ "outputs": [
659
+ {
660
+ "internalType": "uint256",
661
+ "name": "balance",
662
+ "type": "uint256"
663
+ }
664
+ ],
665
+ "stateMutability": "view",
666
+ "type": "function"
667
+ },
668
+ {
669
+ "inputs": [
670
+ {
671
+ "internalType": "uint256",
672
+ "name": "serviceId",
673
+ "type": "uint256"
674
+ }
675
+ ],
676
+ "name": "isTokenSecuredService",
677
+ "outputs": [
678
+ {
679
+ "internalType": "bool",
680
+ "name": "",
681
+ "type": "bool"
682
+ }
683
+ ],
684
+ "stateMutability": "view",
685
+ "type": "function"
686
+ },
687
+ {
688
+ "inputs": [],
689
+ "name": "manager",
690
+ "outputs": [
691
+ {
692
+ "internalType": "address",
693
+ "name": "",
694
+ "type": "address"
695
+ }
696
+ ],
697
+ "stateMutability": "view",
698
+ "type": "function"
699
+ },
700
+ {
701
+ "inputs": [
702
+ {
703
+ "internalType": "uint256",
704
+ "name": "",
705
+ "type": "uint256"
706
+ }
707
+ ],
708
+ "name": "mapOperatorAndServiceIdOperatorBalances",
709
+ "outputs": [
710
+ {
711
+ "internalType": "uint256",
712
+ "name": "",
713
+ "type": "uint256"
714
+ }
715
+ ],
716
+ "stateMutability": "view",
717
+ "type": "function"
718
+ },
719
+ {
720
+ "inputs": [
721
+ {
722
+ "internalType": "uint256",
723
+ "name": "",
724
+ "type": "uint256"
725
+ }
726
+ ],
727
+ "name": "mapServiceAndAgentIdAgentBond",
728
+ "outputs": [
729
+ {
730
+ "internalType": "uint256",
731
+ "name": "",
732
+ "type": "uint256"
733
+ }
734
+ ],
735
+ "stateMutability": "view",
736
+ "type": "function"
737
+ },
738
+ {
739
+ "inputs": [
740
+ {
741
+ "internalType": "uint256",
742
+ "name": "",
743
+ "type": "uint256"
744
+ }
745
+ ],
746
+ "name": "mapServiceIdTokenDeposit",
747
+ "outputs": [
748
+ {
749
+ "internalType": "address",
750
+ "name": "token",
751
+ "type": "address"
752
+ },
753
+ {
754
+ "internalType": "uint96",
755
+ "name": "securityDeposit",
756
+ "type": "uint96"
757
+ }
758
+ ],
759
+ "stateMutability": "view",
760
+ "type": "function"
761
+ },
762
+ {
763
+ "inputs": [
764
+ {
765
+ "internalType": "address",
766
+ "name": "",
767
+ "type": "address"
768
+ }
769
+ ],
770
+ "name": "mapSlashedFunds",
771
+ "outputs": [
772
+ {
773
+ "internalType": "uint256",
774
+ "name": "",
775
+ "type": "uint256"
776
+ }
777
+ ],
778
+ "stateMutability": "view",
779
+ "type": "function"
780
+ },
781
+ {
782
+ "inputs": [],
783
+ "name": "owner",
784
+ "outputs": [
785
+ {
786
+ "internalType": "address",
787
+ "name": "",
788
+ "type": "address"
789
+ }
790
+ ],
791
+ "stateMutability": "view",
792
+ "type": "function"
793
+ },
794
+ {
795
+ "inputs": [
796
+ {
797
+ "internalType": "address",
798
+ "name": "operator",
799
+ "type": "address"
800
+ },
801
+ {
802
+ "internalType": "uint256",
803
+ "name": "serviceId",
804
+ "type": "uint256"
805
+ },
806
+ {
807
+ "internalType": "uint32[]",
808
+ "name": "agentIds",
809
+ "type": "uint32[]"
810
+ }
811
+ ],
812
+ "name": "registerAgentsTokenDeposit",
813
+ "outputs": [
814
+ {
815
+ "internalType": "bool",
816
+ "name": "isTokenSecured",
817
+ "type": "bool"
818
+ }
819
+ ],
820
+ "stateMutability": "nonpayable",
821
+ "type": "function"
822
+ },
823
+ {
824
+ "inputs": [
825
+ {
826
+ "internalType": "uint256",
827
+ "name": "serviceId",
828
+ "type": "uint256"
829
+ }
830
+ ],
831
+ "name": "resetServiceToken",
832
+ "outputs": [],
833
+ "stateMutability": "nonpayable",
834
+ "type": "function"
835
+ },
836
+ {
837
+ "inputs": [],
838
+ "name": "serviceRegistry",
839
+ "outputs": [
840
+ {
841
+ "internalType": "address",
842
+ "name": "",
843
+ "type": "address"
844
+ }
845
+ ],
846
+ "stateMutability": "view",
847
+ "type": "function"
848
+ },
849
+ {
850
+ "inputs": [
851
+ {
852
+ "internalType": "address[]",
853
+ "name": "agentInstances",
854
+ "type": "address[]"
855
+ },
856
+ {
857
+ "internalType": "uint256[]",
858
+ "name": "amounts",
859
+ "type": "uint256[]"
860
+ },
861
+ {
862
+ "internalType": "uint256",
863
+ "name": "serviceId",
864
+ "type": "uint256"
865
+ }
866
+ ],
867
+ "name": "slash",
868
+ "outputs": [
869
+ {
870
+ "internalType": "bool",
871
+ "name": "success",
872
+ "type": "bool"
873
+ }
874
+ ],
875
+ "stateMutability": "nonpayable",
876
+ "type": "function"
877
+ },
878
+ {
879
+ "inputs": [
880
+ {
881
+ "internalType": "uint256",
882
+ "name": "serviceId",
883
+ "type": "uint256"
884
+ }
885
+ ],
886
+ "name": "terminateTokenRefund",
887
+ "outputs": [
888
+ {
889
+ "internalType": "uint256",
890
+ "name": "securityRefund",
891
+ "type": "uint256"
892
+ }
893
+ ],
894
+ "stateMutability": "nonpayable",
895
+ "type": "function"
896
+ },
897
+ {
898
+ "inputs": [
899
+ {
900
+ "internalType": "address",
901
+ "name": "operator",
902
+ "type": "address"
903
+ },
904
+ {
905
+ "internalType": "uint256",
906
+ "name": "serviceId",
907
+ "type": "uint256"
908
+ }
909
+ ],
910
+ "name": "unbondTokenRefund",
911
+ "outputs": [
912
+ {
913
+ "internalType": "uint256",
914
+ "name": "refund",
915
+ "type": "uint256"
916
+ }
917
+ ],
918
+ "stateMutability": "nonpayable",
919
+ "type": "function"
920
+ }
921
+ ],
922
+ "bytecode": "0x60a0604052600160035534801561001557600080fd5b5060405162001f3a38038062001f3a83398101604081905261003691610080565b6001600160a01b03811661005d5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0316608052600080546001600160a01b031916331790556100b0565b60006020828403121561009257600080fd5b81516001600160a01b03811681146100a957600080fd5b9392505050565b608051611e52620000e8600039600081816103be015281816105c1015281816106bd015281816108470152610b630152611e526000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c806375c1f934116100d8578063b0f4c2481161008c578063dc4f8bc511610066578063dc4f8bc514610400578063e3ce9a8414610413578063ece531321461042657600080fd5b8063b0f4c248146103a6578063cbcf252a146103b9578063cbd413a5146103e057600080fd5b80638da5cb5b116100bd5780638da5cb5b1461036d578063a3fbbaae14610380578063a6f9dae11461039357600080fd5b806375c1f934146103165780638a2bd86f1461033e57600080fd5b806346d7836d1161013a578063542db44911610114578063542db449146102dd57806357838e85146102f05780635f3662581461030357600080fd5b806346d7836d14610264578063481c6a751461029f5780635419bb8c146102ca57600080fd5b806325e1afc31161016b57806325e1afc3146101cf5780633cebfa4f146101e2578063421448541461024457600080fd5b806310c6aa191461018757806313f824d81461019c575b600080fd5b61019a610195366004611956565b610439565b005b6101bc6101aa36600461197a565b60056020526000908152604090205481565b6040519081526020015b60405180910390f35b6101bc6101dd36600461197a565b6104fc565b61021d6101f036600461197a565b6004602052600090815260409020546001600160a01b03811690600160a01b90046001600160601b031682565b604080516001600160a01b0390931683526001600160601b039091166020830152016101c6565b6101bc61025236600461197a565b60066020526000908152604090205481565b61028f61027236600461197a565b6000908152600460205260409020546001600160a01b0316151590565b60405190151581526020016101c6565b6001546102b2906001600160a01b031681565b6040516001600160a01b0390911681526020016101c6565b61028f6102d8366004611a69565b6106b6565b61028f6102eb36600461197a565b610a88565b6002546102b2906001600160a01b031681565b61019a61031136600461197a565b610e0e565b6101bc610324366004611b34565b602090811b90911760009081526005909152604090205490565b6101bc61034c366004611b56565b60a01b6001600160a01b039091161760009081526006602052604090205490565b6000546102b2906001600160a01b031681565b61019a61038e366004611956565b610e5f565b61019a6103a1366004611956565b610f1d565b6101bc6103b4366004611b56565b610fd9565b6102b27f000000000000000000000000000000000000000000000000000000000000000081565b6101bc6103ee366004611956565b60076020526000908152604090205481565b61028f61040e366004611bf8565b6110ff565b61019a610421366004611c51565b611464565b6101bc610434366004611956565b611708565b6000546001600160a01b0316331461047e5760005460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044015b60405180910390fd5b6001600160a01b0381166104a55760405163d92e233d60e01b815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f8d1e8547016120917daad7f81c42b48f7fee379badc48f1889f0f43bb619472590600090a250565b600060016003541115610522576040516345f5ce8b60e11b815260040160405180910390fd5b60026003556001546001600160a01b031633146105675760015460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610475565b6000828152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160601b03169183019190915280156106aa5781602001516001600160601b0316925060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e866040518263ffffffff1660e01b815260040161060d91815260200190565b602060405180830381865afa15801561062a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064e9190611cd1565b905061065b828286611831565b816001600160a01b0316816001600160a01b03167fb5ea3bd24bc48df54cdc99f11e448ab16503a3e16f46c363202f5fff4891acba866040516106a091815260200190565b60405180910390a3505b50506001600355919050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634236aff8856040518263ffffffff1660e01b815260040161070991815260200190565b60e060405180830381865afa158015610726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074a9190611cee565b9650505050509250508060ff1660041461078357604051633c053f9d60e21b815260ff8216600482015260248101859052604401610475565b8551158061079357508451865114155b156107be57855185516040516308151c1160e41b815260048101929092526024820152604401610475565b336001600160a01b038316146107ff576040516379f91cd360e01b81523360048201526001600160a01b038316602482015260448101859052606401610475565b6000848152600460205260409020546001600160a01b0316806108355760405163d92e233d60e01b815260040160405180910390fd5b86516000805b82811015610a395760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634eb780da8c848151811061088657610886611d92565b60200260200101516040518263ffffffff1660e01b81526004016108b991906001600160a01b0391909116815260200190565b602060405180830381865afa1580156108d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fa9190611cd1565b60a08a901b6001600160a01b0382161760008181526006602052604081205492935090919081900361092e57505050610a29565b808c858151811061094157610941611d92565b602002602001015110610963576109588186611dbe565b9450600090506109b2565b8b848151811061097557610975611d92565b6020026020010151856109889190611dbe565b94508b848151811061099c5761099c611d92565b6020026020010151816109af9190611dd7565b90505b60008281526006602052604090208190558b518b906001600160a01b038516907fd79658b314eb967321e5e6a82ab39f6f7ffc567d38c6feee527761aca406a597908f9088908110610a0657610a06611d92565b6020026020010151604051610a1d91815260200190565b60405180910390a35050505b610a3281611dea565b905061083b565b506001600160a01b038316600090815260076020526040902054610a5d9082611dbe565b6001600160a01b03909316600090815260076020526040902092909255506001979650505050505050565b600060016003541115610aae576040516345f5ce8b60e11b815260040160405180910390fd5b60026003556001546001600160a01b03163314610af35760015460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610475565b6000828152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160601b03169183019190915280156106aa5760208201516040516331a9108f60e11b8152600481018690526001600160601b03909116906000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015610bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd69190611cd1565b604051636eb1769f60e11b81526001600160a01b03808316600483015230602483015291925060009185169063dd62ed3e90604401602060405180830381865afa158015610c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4c9190611e03565b905082811015610c8057604051631c30abbb60e31b8152600481018290526024810184905260448101889052606401610475565b6040516370a0823160e01b8152306004820152600196506000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cef9190611e03565b9050610cfd858430876118b4565b6040516370a0823160e01b81523060048201526000906001600160a01b038716906370a0823190602401602060405180830381865afa158015610d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d689190611e03565b905080821180610d81575084610d7e8383611dd7565b14155b15610db057604051631c30abbb60e31b81526000600482015260248101869052604481018a9052606401610475565b856001600160a01b0316846001600160a01b03167f98c09d9949722bae4bd0d988d4050091c3ae7ec6d51d3c6bbfe4233593944e9e87604051610df591815260200190565b60405180910390a3505050505050506001600355919050565b6001546001600160a01b03163314610e4e5760015460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610475565b600090815260046020526040812055565b6000546001600160a01b03163314610e9f5760005460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610475565b6001600160a01b038116610ec65760405163d92e233d60e01b815260040160405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d90600090a250565b6000546001600160a01b03163314610f5d5760005460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610475565b6001600160a01b038116610f845760405163d92e233d60e01b815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117825560405190917f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b91a250565b600060016003541115610fff576040516345f5ce8b60e11b815260040160405180910390fd5b60026003556001546001600160a01b031633146110445760015460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610475565b6000828152600460205260409020546001600160a01b031680156110f35760a083901b6001600160a01b03851617600081815260066020526040902054925082156110f1576000818152600660205260408120556110a3828685611831565b816001600160a01b0316856001600160a01b03167fb5ea3bd24bc48df54cdc99f11e448ab16503a3e16f46c363202f5fff4891acba856040516110e891815260200190565b60405180910390a35b505b50600160035592915050565b600060016003541115611125576040516345f5ce8b60e11b815260040160405180910390fd5b60026003556001546001600160a01b0316331461116a5760015460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610475565b6000838152600460205260409020546001600160a01b031680156114575782516000805b828110156111f757600087905060208783815181106111af576111af611d92565b60209081029190910181015163ffffffff1690911b91909117600081815260059092526040909120546111e28185611dbe565b93505050806111f090611dea565b905061118e565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301526000919085169063dd62ed3e90604401602060405180830381865afa158015611248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126c9190611e03565b9050818110156112a057604051637ebbcab960e11b8152600481018290526024810183905260448101889052606401610475565b60a087901b6001600160a01b03891617600081815260066020526040812080548592906112ce908490611dbe565b90915550506040516370a0823160e01b8152306004820152600196506000906001600160a01b038716906370a0823190602401602060405180830381865afa15801561131e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113429190611e03565b9050611350868b30876118b4565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015611397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113bb9190611e03565b9050808211806113d45750846113d18383611dd7565b14155b1561140357604051637ebbcab960e11b81526000600482015260248101869052604481018b9052606401610475565b866001600160a01b03168b6001600160a01b03167f98c09d9949722bae4bd0d988d4050091c3ae7ec6d51d3c6bbfe4233593944e9e8760405161144891815260200190565b60405180910390a35050505050505b5060016003559392505050565b6001546001600160a01b031633146114a45760015460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610475565b60408051600060248083018290528351808403909101815260449092019092526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166370a0823160e01b1790527f70a08231b98ef4ca268c9cc3f6b4590e4bfec28280db06bb5d45e689f2a360be91906001600160a01b0386163b1561153557600080825160208401895afa91505b8161155e5760405163e77376f360e01b81526001600160a01b0387166004820152602401610475565b6000805b86518110156116b45785818151811061157d5761157d611d92565b6020026020010151600003156116a4576001600160601b0380168682815181106115a9576115a9611d92565b60200260200101511115611606578581815181106115c9576115c9611d92565b60200260200101516001600160601b03604051637ae5968560e01b81526004016104759291909182526001600160601b0316602082015260400190565b6000899050602088838151811061161f5761161f611d92565b602002602001015163ffffffff16901b8117905086828151811061164557611645611d92565b602002602001015160056000838152602001908152602001600020819055508287838151811061167757611677611d92565b602002602001015111156116a25786828151811061169757611697611d92565b602002602001015192505b505b6116ad81611dea565b9050611562565b506040805180820182526001600160a01b0398891681526001600160601b03928316602080830191825260009b8c52600490529190992098519051909116600160a01b029616959095179095555050505050565b60006001600354111561172e576040516345f5ce8b60e11b815260040160405180910390fd5b60026003556000546001600160a01b031633146117735760005460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610475565b6002546001600160a01b031661179c5760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b0381166000908152600760205260409020548015611827576001600160a01b038083166000908152600760205260408120556002546117e69184911683611831565b6040518181526001600160a01b0383169033907feb64d3e0fe21df59e0edd78e9749e4bc9f3cf593a842d487fe40f29ef45fdad69060200160405180910390a35b6001600355919050565b600060405163a9059cbb60e01b6000528360045282602452602060006044600080895af13d15601f3d11600160005114161716915060006060528060405250806118ae5760405163cd3f165960e01b81526001600160a01b0380861660048301523060248301528416604482015260648101839052608401610475565b50505050565b60006040516323b872dd60e01b6000528460045283602452826044526020600060646000808a5af13d15601f3d11600160005114161716915060006060528060405250806119375760405163cd3f165960e01b81526001600160a01b03808716600483015280861660248301528416604482015260648101839052608401610475565b5050505050565b6001600160a01b038116811461195357600080fd5b50565b60006020828403121561196857600080fd5b81356119738161193e565b9392505050565b60006020828403121561198c57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156119d2576119d2611993565b604052919050565b600067ffffffffffffffff8211156119f4576119f4611993565b5060051b60200190565b600082601f830112611a0f57600080fd5b81356020611a24611a1f836119da565b6119a9565b82815260059290921b84018101918181019086841115611a4357600080fd5b8286015b84811015611a5e5780358352918301918301611a47565b509695505050505050565b600080600060608486031215611a7e57600080fd5b833567ffffffffffffffff80821115611a9657600080fd5b818601915086601f830112611aaa57600080fd5b81356020611aba611a1f836119da565b82815260059290921b8401810191818101908a841115611ad957600080fd5b948201945b83861015611b00578535611af18161193e565b82529482019490820190611ade565b97505087013592505080821115611b1657600080fd5b50611b23868287016119fe565b925050604084013590509250925092565b60008060408385031215611b4757600080fd5b50508035926020909101359150565b60008060408385031215611b6957600080fd5b8235611b748161193e565b946020939093013593505050565b63ffffffff8116811461195357600080fd5b600082601f830112611ba557600080fd5b81356020611bb5611a1f836119da565b82815260059290921b84018101918181019086841115611bd457600080fd5b8286015b84811015611a5e578035611beb81611b82565b8352918301918301611bd8565b600080600060608486031215611c0d57600080fd5b8335611c188161193e565b925060208401359150604084013567ffffffffffffffff811115611c3b57600080fd5b611c4786828701611b94565b9150509250925092565b60008060008060808587031215611c6757600080fd5b843593506020850135611c798161193e565b9250604085013567ffffffffffffffff80821115611c9657600080fd5b611ca288838901611b94565b93506060870135915080821115611cb857600080fd5b50611cc5878288016119fe565b91505092959194509250565b600060208284031215611ce357600080fd5b81516119738161193e565b600080600080600080600060e0888a031215611d0957600080fd5b87516001600160601b0381168114611d2057600080fd5b6020890151909750611d318161193e565b604089015160608a01519197509550611d4981611b82565b6080890151909450611d5a81611b82565b60a0890151909350611d6b81611b82565b60c089015190925060ff81168114611d8257600080fd5b8091505092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115611dd157611dd1611da8565b92915050565b81810381811115611dd157611dd1611da8565b600060018201611dfc57611dfc611da8565b5060010190565b600060208284031215611e1557600080fd5b505191905056fea2646970667358221220e38aad42f76663645ad01adefd7b54c3c3a128669aadd1939110bdc298d0532264736f6c63430008130033",
923
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101825760003560e01c806375c1f934116100d8578063b0f4c2481161008c578063dc4f8bc511610066578063dc4f8bc514610400578063e3ce9a8414610413578063ece531321461042657600080fd5b8063b0f4c248146103a6578063cbcf252a146103b9578063cbd413a5146103e057600080fd5b80638da5cb5b116100bd5780638da5cb5b1461036d578063a3fbbaae14610380578063a6f9dae11461039357600080fd5b806375c1f934146103165780638a2bd86f1461033e57600080fd5b806346d7836d1161013a578063542db44911610114578063542db449146102dd57806357838e85146102f05780635f3662581461030357600080fd5b806346d7836d14610264578063481c6a751461029f5780635419bb8c146102ca57600080fd5b806325e1afc31161016b57806325e1afc3146101cf5780633cebfa4f146101e2578063421448541461024457600080fd5b806310c6aa191461018757806313f824d81461019c575b600080fd5b61019a610195366004611956565b610439565b005b6101bc6101aa36600461197a565b60056020526000908152604090205481565b6040519081526020015b60405180910390f35b6101bc6101dd36600461197a565b6104fc565b61021d6101f036600461197a565b6004602052600090815260409020546001600160a01b03811690600160a01b90046001600160601b031682565b604080516001600160a01b0390931683526001600160601b039091166020830152016101c6565b6101bc61025236600461197a565b60066020526000908152604090205481565b61028f61027236600461197a565b6000908152600460205260409020546001600160a01b0316151590565b60405190151581526020016101c6565b6001546102b2906001600160a01b031681565b6040516001600160a01b0390911681526020016101c6565b61028f6102d8366004611a69565b6106b6565b61028f6102eb36600461197a565b610a88565b6002546102b2906001600160a01b031681565b61019a61031136600461197a565b610e0e565b6101bc610324366004611b34565b602090811b90911760009081526005909152604090205490565b6101bc61034c366004611b56565b60a01b6001600160a01b039091161760009081526006602052604090205490565b6000546102b2906001600160a01b031681565b61019a61038e366004611956565b610e5f565b61019a6103a1366004611956565b610f1d565b6101bc6103b4366004611b56565b610fd9565b6102b27f000000000000000000000000000000000000000000000000000000000000000081565b6101bc6103ee366004611956565b60076020526000908152604090205481565b61028f61040e366004611bf8565b6110ff565b61019a610421366004611c51565b611464565b6101bc610434366004611956565b611708565b6000546001600160a01b0316331461047e5760005460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044015b60405180910390fd5b6001600160a01b0381166104a55760405163d92e233d60e01b815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f8d1e8547016120917daad7f81c42b48f7fee379badc48f1889f0f43bb619472590600090a250565b600060016003541115610522576040516345f5ce8b60e11b815260040160405180910390fd5b60026003556001546001600160a01b031633146105675760015460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610475565b6000828152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160601b03169183019190915280156106aa5781602001516001600160601b0316925060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e866040518263ffffffff1660e01b815260040161060d91815260200190565b602060405180830381865afa15801561062a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064e9190611cd1565b905061065b828286611831565b816001600160a01b0316816001600160a01b03167fb5ea3bd24bc48df54cdc99f11e448ab16503a3e16f46c363202f5fff4891acba866040516106a091815260200190565b60405180910390a3505b50506001600355919050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634236aff8856040518263ffffffff1660e01b815260040161070991815260200190565b60e060405180830381865afa158015610726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074a9190611cee565b9650505050509250508060ff1660041461078357604051633c053f9d60e21b815260ff8216600482015260248101859052604401610475565b8551158061079357508451865114155b156107be57855185516040516308151c1160e41b815260048101929092526024820152604401610475565b336001600160a01b038316146107ff576040516379f91cd360e01b81523360048201526001600160a01b038316602482015260448101859052606401610475565b6000848152600460205260409020546001600160a01b0316806108355760405163d92e233d60e01b815260040160405180910390fd5b86516000805b82811015610a395760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634eb780da8c848151811061088657610886611d92565b60200260200101516040518263ffffffff1660e01b81526004016108b991906001600160a01b0391909116815260200190565b602060405180830381865afa1580156108d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fa9190611cd1565b60a08a901b6001600160a01b0382161760008181526006602052604081205492935090919081900361092e57505050610a29565b808c858151811061094157610941611d92565b602002602001015110610963576109588186611dbe565b9450600090506109b2565b8b848151811061097557610975611d92565b6020026020010151856109889190611dbe565b94508b848151811061099c5761099c611d92565b6020026020010151816109af9190611dd7565b90505b60008281526006602052604090208190558b518b906001600160a01b038516907fd79658b314eb967321e5e6a82ab39f6f7ffc567d38c6feee527761aca406a597908f9088908110610a0657610a06611d92565b6020026020010151604051610a1d91815260200190565b60405180910390a35050505b610a3281611dea565b905061083b565b506001600160a01b038316600090815260076020526040902054610a5d9082611dbe565b6001600160a01b03909316600090815260076020526040902092909255506001979650505050505050565b600060016003541115610aae576040516345f5ce8b60e11b815260040160405180910390fd5b60026003556001546001600160a01b03163314610af35760015460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610475565b6000828152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160601b03169183019190915280156106aa5760208201516040516331a9108f60e11b8152600481018690526001600160601b03909116906000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015610bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd69190611cd1565b604051636eb1769f60e11b81526001600160a01b03808316600483015230602483015291925060009185169063dd62ed3e90604401602060405180830381865afa158015610c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4c9190611e03565b905082811015610c8057604051631c30abbb60e31b8152600481018290526024810184905260448101889052606401610475565b6040516370a0823160e01b8152306004820152600196506000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cef9190611e03565b9050610cfd858430876118b4565b6040516370a0823160e01b81523060048201526000906001600160a01b038716906370a0823190602401602060405180830381865afa158015610d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d689190611e03565b905080821180610d81575084610d7e8383611dd7565b14155b15610db057604051631c30abbb60e31b81526000600482015260248101869052604481018a9052606401610475565b856001600160a01b0316846001600160a01b03167f98c09d9949722bae4bd0d988d4050091c3ae7ec6d51d3c6bbfe4233593944e9e87604051610df591815260200190565b60405180910390a3505050505050506001600355919050565b6001546001600160a01b03163314610e4e5760015460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610475565b600090815260046020526040812055565b6000546001600160a01b03163314610e9f5760005460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610475565b6001600160a01b038116610ec65760405163d92e233d60e01b815260040160405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d90600090a250565b6000546001600160a01b03163314610f5d5760005460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610475565b6001600160a01b038116610f845760405163d92e233d60e01b815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117825560405190917f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b91a250565b600060016003541115610fff576040516345f5ce8b60e11b815260040160405180910390fd5b60026003556001546001600160a01b031633146110445760015460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610475565b6000828152600460205260409020546001600160a01b031680156110f35760a083901b6001600160a01b03851617600081815260066020526040902054925082156110f1576000818152600660205260408120556110a3828685611831565b816001600160a01b0316856001600160a01b03167fb5ea3bd24bc48df54cdc99f11e448ab16503a3e16f46c363202f5fff4891acba856040516110e891815260200190565b60405180910390a35b505b50600160035592915050565b600060016003541115611125576040516345f5ce8b60e11b815260040160405180910390fd5b60026003556001546001600160a01b0316331461116a5760015460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610475565b6000838152600460205260409020546001600160a01b031680156114575782516000805b828110156111f757600087905060208783815181106111af576111af611d92565b60209081029190910181015163ffffffff1690911b91909117600081815260059092526040909120546111e28185611dbe565b93505050806111f090611dea565b905061118e565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301526000919085169063dd62ed3e90604401602060405180830381865afa158015611248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126c9190611e03565b9050818110156112a057604051637ebbcab960e11b8152600481018290526024810183905260448101889052606401610475565b60a087901b6001600160a01b03891617600081815260066020526040812080548592906112ce908490611dbe565b90915550506040516370a0823160e01b8152306004820152600196506000906001600160a01b038716906370a0823190602401602060405180830381865afa15801561131e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113429190611e03565b9050611350868b30876118b4565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015611397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113bb9190611e03565b9050808211806113d45750846113d18383611dd7565b14155b1561140357604051637ebbcab960e11b81526000600482015260248101869052604481018b9052606401610475565b866001600160a01b03168b6001600160a01b03167f98c09d9949722bae4bd0d988d4050091c3ae7ec6d51d3c6bbfe4233593944e9e8760405161144891815260200190565b60405180910390a35050505050505b5060016003559392505050565b6001546001600160a01b031633146114a45760015460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610475565b60408051600060248083018290528351808403909101815260449092019092526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166370a0823160e01b1790527f70a08231b98ef4ca268c9cc3f6b4590e4bfec28280db06bb5d45e689f2a360be91906001600160a01b0386163b1561153557600080825160208401895afa91505b8161155e5760405163e77376f360e01b81526001600160a01b0387166004820152602401610475565b6000805b86518110156116b45785818151811061157d5761157d611d92565b6020026020010151600003156116a4576001600160601b0380168682815181106115a9576115a9611d92565b60200260200101511115611606578581815181106115c9576115c9611d92565b60200260200101516001600160601b03604051637ae5968560e01b81526004016104759291909182526001600160601b0316602082015260400190565b6000899050602088838151811061161f5761161f611d92565b602002602001015163ffffffff16901b8117905086828151811061164557611645611d92565b602002602001015160056000838152602001908152602001600020819055508287838151811061167757611677611d92565b602002602001015111156116a25786828151811061169757611697611d92565b602002602001015192505b505b6116ad81611dea565b9050611562565b506040805180820182526001600160a01b0398891681526001600160601b03928316602080830191825260009b8c52600490529190992098519051909116600160a01b029616959095179095555050505050565b60006001600354111561172e576040516345f5ce8b60e11b815260040160405180910390fd5b60026003556000546001600160a01b031633146117735760005460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610475565b6002546001600160a01b031661179c5760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b0381166000908152600760205260409020548015611827576001600160a01b038083166000908152600760205260408120556002546117e69184911683611831565b6040518181526001600160a01b0383169033907feb64d3e0fe21df59e0edd78e9749e4bc9f3cf593a842d487fe40f29ef45fdad69060200160405180910390a35b6001600355919050565b600060405163a9059cbb60e01b6000528360045282602452602060006044600080895af13d15601f3d11600160005114161716915060006060528060405250806118ae5760405163cd3f165960e01b81526001600160a01b0380861660048301523060248301528416604482015260648101839052608401610475565b50505050565b60006040516323b872dd60e01b6000528460045283602452826044526020600060646000808a5af13d15601f3d11600160005114161716915060006060528060405250806119375760405163cd3f165960e01b81526001600160a01b03808716600483015280861660248301528416604482015260648101839052608401610475565b5050505050565b6001600160a01b038116811461195357600080fd5b50565b60006020828403121561196857600080fd5b81356119738161193e565b9392505050565b60006020828403121561198c57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156119d2576119d2611993565b604052919050565b600067ffffffffffffffff8211156119f4576119f4611993565b5060051b60200190565b600082601f830112611a0f57600080fd5b81356020611a24611a1f836119da565b6119a9565b82815260059290921b84018101918181019086841115611a4357600080fd5b8286015b84811015611a5e5780358352918301918301611a47565b509695505050505050565b600080600060608486031215611a7e57600080fd5b833567ffffffffffffffff80821115611a9657600080fd5b818601915086601f830112611aaa57600080fd5b81356020611aba611a1f836119da565b82815260059290921b8401810191818101908a841115611ad957600080fd5b948201945b83861015611b00578535611af18161193e565b82529482019490820190611ade565b97505087013592505080821115611b1657600080fd5b50611b23868287016119fe565b925050604084013590509250925092565b60008060408385031215611b4757600080fd5b50508035926020909101359150565b60008060408385031215611b6957600080fd5b8235611b748161193e565b946020939093013593505050565b63ffffffff8116811461195357600080fd5b600082601f830112611ba557600080fd5b81356020611bb5611a1f836119da565b82815260059290921b84018101918181019086841115611bd457600080fd5b8286015b84811015611a5e578035611beb81611b82565b8352918301918301611bd8565b600080600060608486031215611c0d57600080fd5b8335611c188161193e565b925060208401359150604084013567ffffffffffffffff811115611c3b57600080fd5b611c4786828701611b94565b9150509250925092565b60008060008060808587031215611c6757600080fd5b843593506020850135611c798161193e565b9250604085013567ffffffffffffffff80821115611c9657600080fd5b611ca288838901611b94565b93506060870135915080821115611cb857600080fd5b50611cc5878288016119fe565b91505092959194509250565b600060208284031215611ce357600080fd5b81516119738161193e565b600080600080600080600060e0888a031215611d0957600080fd5b87516001600160601b0381168114611d2057600080fd5b6020890151909750611d318161193e565b604089015160608a01519197509550611d4981611b82565b6080890151909450611d5a81611b82565b60a0890151909350611d6b81611b82565b60c089015190925060ff81168114611d8257600080fd5b8091505092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115611dd157611dd1611da8565b92915050565b81810381811115611dd157611dd1611da8565b600060018201611dfc57611dfc611da8565b5060010190565b600060208284031215611e1557600080fd5b505191905056fea2646970667358221220e38aad42f76663645ad01adefd7b54c3c3a128669aadd1939110bdc298d0532264736f6c63430008130033",
924
+ "linkReferences": {},
925
+ "deployedLinkReferences": {}
926
+ }
contracts/StakingActivityChecker.json ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "StakingActivityChecker",
4
+ "sourceName": "contracts/staking/StakingActivityChecker.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [
8
+ {
9
+ "internalType": "uint256",
10
+ "name": "_livenessRatio",
11
+ "type": "uint256"
12
+ }
13
+ ],
14
+ "stateMutability": "nonpayable",
15
+ "type": "constructor"
16
+ },
17
+ {
18
+ "inputs": [],
19
+ "name": "ZeroValue",
20
+ "type": "error"
21
+ },
22
+ {
23
+ "inputs": [
24
+ {
25
+ "internalType": "address",
26
+ "name": "multisig",
27
+ "type": "address"
28
+ }
29
+ ],
30
+ "name": "getMultisigNonces",
31
+ "outputs": [
32
+ {
33
+ "internalType": "uint256[]",
34
+ "name": "nonces",
35
+ "type": "uint256[]"
36
+ }
37
+ ],
38
+ "stateMutability": "view",
39
+ "type": "function"
40
+ },
41
+ {
42
+ "inputs": [
43
+ {
44
+ "internalType": "uint256[]",
45
+ "name": "curNonces",
46
+ "type": "uint256[]"
47
+ },
48
+ {
49
+ "internalType": "uint256[]",
50
+ "name": "lastNonces",
51
+ "type": "uint256[]"
52
+ },
53
+ {
54
+ "internalType": "uint256",
55
+ "name": "ts",
56
+ "type": "uint256"
57
+ }
58
+ ],
59
+ "name": "isRatioPass",
60
+ "outputs": [
61
+ {
62
+ "internalType": "bool",
63
+ "name": "ratioPass",
64
+ "type": "bool"
65
+ }
66
+ ],
67
+ "stateMutability": "view",
68
+ "type": "function"
69
+ },
70
+ {
71
+ "inputs": [],
72
+ "name": "livenessRatio",
73
+ "outputs": [
74
+ {
75
+ "internalType": "uint256",
76
+ "name": "",
77
+ "type": "uint256"
78
+ }
79
+ ],
80
+ "stateMutability": "view",
81
+ "type": "function"
82
+ }
83
+ ],
84
+ "bytecode": "0x608060405234801561000f575f80fd5b506004361061003f575f3560e01c8063184023a514610043578063592cf3fb1461006b578063d564c4bf146100a0575b5f80fd5b610056610051366004610328565b6100c0565b60405190151581526020015b60405180910390f35b6100927f00000000000000000000000000000000000000000000000000002a1b324b8f6881565b604051908152602001610062565b6100b36100ae366004610390565b610190565b60405161006291906103c3565b5f80821180156101015750825f815181106100dd576100dd610406565b6020026020010151845f815181106100f7576100f7610406565b6020026020010151115b15610189575f82845f8151811061011a5761011a610406565b6020026020010151865f8151811061013457610134610406565b60200260200101516101469190610460565b61015890670de0b6b3a7640000610479565b6101629190610490565b7f00000000000000000000000000000000000000000000000000002a1b324b8f6811159150505b9392505050565b604080516001808252818301909252606091602080830190803683370190505090508173ffffffffffffffffffffffffffffffffffffffff1663affed0e06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021f91906104c8565b815f8151811061023157610231610406565b602002602001018181525050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f83011261027e575f80fd5b8135602067ffffffffffffffff8083111561029b5761029b610242565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156102de576102de610242565b60405293845260208187018101949081019250878511156102fd575f80fd5b6020870191505b8482101561031d57813583529183019190830190610304565b979650505050505050565b5f805f6060848603121561033a575f80fd5b833567ffffffffffffffff80821115610351575f80fd5b61035d8783880161026f565b94506020860135915080821115610372575f80fd5b5061037f8682870161026f565b925050604084013590509250925092565b5f602082840312156103a0575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610189575f80fd5b602080825282518282018190525f9190848201906040850190845b818110156103fa578351835292840192918401916001016103de565b50909695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561047357610473610433565b92915050565b808202811582820484141761047357610473610433565b5f826104c3577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b5f602082840312156104d8575f80fd5b505191905056fea26469706673582212205cd6cde3d106d475558793ccc0670f4af07e2e69e437eff007791837f35d016464736f6c63430008190033",
85
+ "linkReferences": {},
86
+ "deployedLinkReferences": {}
87
+ }
contracts/StakingToken.json ADDED
@@ -0,0 +1,1274 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "ServiceStakingToken",
4
+ "sourceName": "contracts/staking/ServiceStakingToken.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [],
8
+ "name": "AlreadyInitialized",
9
+ "type": "error"
10
+ },
11
+ {
12
+ "inputs": [
13
+ {
14
+ "internalType": "address",
15
+ "name": "activityChecker",
16
+ "type": "address"
17
+ }
18
+ ],
19
+ "name": "ContractOnly",
20
+ "type": "error"
21
+ },
22
+ {
23
+ "inputs": [
24
+ {
25
+ "internalType": "uint256",
26
+ "name": "provided",
27
+ "type": "uint256"
28
+ },
29
+ {
30
+ "internalType": "uint256",
31
+ "name": "expected",
32
+ "type": "uint256"
33
+ }
34
+ ],
35
+ "name": "LowerThan",
36
+ "type": "error"
37
+ },
38
+ {
39
+ "inputs": [
40
+ {
41
+ "internalType": "uint256",
42
+ "name": "maxNumServices",
43
+ "type": "uint256"
44
+ }
45
+ ],
46
+ "name": "MaxNumServicesReached",
47
+ "type": "error"
48
+ },
49
+ {
50
+ "inputs": [],
51
+ "name": "NoRewardsAvailable",
52
+ "type": "error"
53
+ },
54
+ {
55
+ "inputs": [
56
+ {
57
+ "internalType": "uint256",
58
+ "name": "serviceId",
59
+ "type": "uint256"
60
+ },
61
+ {
62
+ "internalType": "uint256",
63
+ "name": "tsProvided",
64
+ "type": "uint256"
65
+ },
66
+ {
67
+ "internalType": "uint256",
68
+ "name": "tsExpected",
69
+ "type": "uint256"
70
+ }
71
+ ],
72
+ "name": "NotEnoughTimeStaked",
73
+ "type": "error"
74
+ },
75
+ {
76
+ "inputs": [
77
+ {
78
+ "internalType": "address",
79
+ "name": "sender",
80
+ "type": "address"
81
+ },
82
+ {
83
+ "internalType": "address",
84
+ "name": "owner",
85
+ "type": "address"
86
+ }
87
+ ],
88
+ "name": "OwnerOnly",
89
+ "type": "error"
90
+ },
91
+ {
92
+ "inputs": [
93
+ {
94
+ "internalType": "uint256",
95
+ "name": "serviceId",
96
+ "type": "uint256"
97
+ }
98
+ ],
99
+ "name": "ServiceNotUnstaked",
100
+ "type": "error"
101
+ },
102
+ {
103
+ "inputs": [
104
+ {
105
+ "internalType": "address",
106
+ "name": "token",
107
+ "type": "address"
108
+ },
109
+ {
110
+ "internalType": "address",
111
+ "name": "from",
112
+ "type": "address"
113
+ },
114
+ {
115
+ "internalType": "address",
116
+ "name": "to",
117
+ "type": "address"
118
+ },
119
+ {
120
+ "internalType": "uint256",
121
+ "name": "value",
122
+ "type": "uint256"
123
+ }
124
+ ],
125
+ "name": "TokenTransferFailed",
126
+ "type": "error"
127
+ },
128
+ {
129
+ "inputs": [
130
+ {
131
+ "internalType": "address",
132
+ "name": "multisig",
133
+ "type": "address"
134
+ }
135
+ ],
136
+ "name": "UnauthorizedMultisig",
137
+ "type": "error"
138
+ },
139
+ {
140
+ "inputs": [
141
+ {
142
+ "internalType": "uint256",
143
+ "name": "provided",
144
+ "type": "uint256"
145
+ },
146
+ {
147
+ "internalType": "uint256",
148
+ "name": "expected",
149
+ "type": "uint256"
150
+ }
151
+ ],
152
+ "name": "ValueLowerThan",
153
+ "type": "error"
154
+ },
155
+ {
156
+ "inputs": [
157
+ {
158
+ "internalType": "uint256",
159
+ "name": "agentId",
160
+ "type": "uint256"
161
+ }
162
+ ],
163
+ "name": "WrongAgentId",
164
+ "type": "error"
165
+ },
166
+ {
167
+ "inputs": [
168
+ {
169
+ "internalType": "uint256",
170
+ "name": "serviceId",
171
+ "type": "uint256"
172
+ }
173
+ ],
174
+ "name": "WrongServiceConfiguration",
175
+ "type": "error"
176
+ },
177
+ {
178
+ "inputs": [
179
+ {
180
+ "internalType": "uint256",
181
+ "name": "state",
182
+ "type": "uint256"
183
+ },
184
+ {
185
+ "internalType": "uint256",
186
+ "name": "serviceId",
187
+ "type": "uint256"
188
+ }
189
+ ],
190
+ "name": "WrongServiceState",
191
+ "type": "error"
192
+ },
193
+ {
194
+ "inputs": [
195
+ {
196
+ "internalType": "address",
197
+ "name": "expected",
198
+ "type": "address"
199
+ },
200
+ {
201
+ "internalType": "address",
202
+ "name": "provided",
203
+ "type": "address"
204
+ }
205
+ ],
206
+ "name": "WrongStakingToken",
207
+ "type": "error"
208
+ },
209
+ {
210
+ "inputs": [],
211
+ "name": "ZeroAddress",
212
+ "type": "error"
213
+ },
214
+ {
215
+ "inputs": [],
216
+ "name": "ZeroTokenAddress",
217
+ "type": "error"
218
+ },
219
+ {
220
+ "inputs": [],
221
+ "name": "ZeroValue",
222
+ "type": "error"
223
+ },
224
+ {
225
+ "anonymous": false,
226
+ "inputs": [
227
+ {
228
+ "indexed": true,
229
+ "internalType": "uint256",
230
+ "name": "epoch",
231
+ "type": "uint256"
232
+ },
233
+ {
234
+ "indexed": false,
235
+ "internalType": "uint256",
236
+ "name": "availableRewards",
237
+ "type": "uint256"
238
+ },
239
+ {
240
+ "indexed": false,
241
+ "internalType": "uint256[]",
242
+ "name": "serviceIds",
243
+ "type": "uint256[]"
244
+ },
245
+ {
246
+ "indexed": false,
247
+ "internalType": "uint256[]",
248
+ "name": "rewards",
249
+ "type": "uint256[]"
250
+ },
251
+ {
252
+ "indexed": false,
253
+ "internalType": "uint256",
254
+ "name": "epochLength",
255
+ "type": "uint256"
256
+ }
257
+ ],
258
+ "name": "Checkpoint",
259
+ "type": "event"
260
+ },
261
+ {
262
+ "anonymous": false,
263
+ "inputs": [
264
+ {
265
+ "indexed": true,
266
+ "internalType": "address",
267
+ "name": "sender",
268
+ "type": "address"
269
+ },
270
+ {
271
+ "indexed": false,
272
+ "internalType": "uint256",
273
+ "name": "amount",
274
+ "type": "uint256"
275
+ },
276
+ {
277
+ "indexed": false,
278
+ "internalType": "uint256",
279
+ "name": "balance",
280
+ "type": "uint256"
281
+ },
282
+ {
283
+ "indexed": false,
284
+ "internalType": "uint256",
285
+ "name": "availableRewards",
286
+ "type": "uint256"
287
+ }
288
+ ],
289
+ "name": "Deposit",
290
+ "type": "event"
291
+ },
292
+ {
293
+ "anonymous": false,
294
+ "inputs": [
295
+ {
296
+ "indexed": false,
297
+ "internalType": "uint256",
298
+ "name": "epoch",
299
+ "type": "uint256"
300
+ },
301
+ {
302
+ "indexed": true,
303
+ "internalType": "uint256",
304
+ "name": "serviceId",
305
+ "type": "uint256"
306
+ },
307
+ {
308
+ "indexed": true,
309
+ "internalType": "address",
310
+ "name": "owner",
311
+ "type": "address"
312
+ },
313
+ {
314
+ "indexed": true,
315
+ "internalType": "address",
316
+ "name": "multisig",
317
+ "type": "address"
318
+ },
319
+ {
320
+ "indexed": false,
321
+ "internalType": "uint256[]",
322
+ "name": "nonces",
323
+ "type": "uint256[]"
324
+ },
325
+ {
326
+ "indexed": false,
327
+ "internalType": "uint256",
328
+ "name": "reward",
329
+ "type": "uint256"
330
+ }
331
+ ],
332
+ "name": "RewardClaimed",
333
+ "type": "event"
334
+ },
335
+ {
336
+ "anonymous": false,
337
+ "inputs": [
338
+ {
339
+ "indexed": false,
340
+ "internalType": "uint256",
341
+ "name": "epoch",
342
+ "type": "uint256"
343
+ },
344
+ {
345
+ "indexed": true,
346
+ "internalType": "uint256",
347
+ "name": "serviceId",
348
+ "type": "uint256"
349
+ },
350
+ {
351
+ "indexed": false,
352
+ "internalType": "uint256",
353
+ "name": "serviceInactivity",
354
+ "type": "uint256"
355
+ }
356
+ ],
357
+ "name": "ServiceInactivityWarning",
358
+ "type": "event"
359
+ },
360
+ {
361
+ "anonymous": false,
362
+ "inputs": [
363
+ {
364
+ "indexed": false,
365
+ "internalType": "uint256",
366
+ "name": "epoch",
367
+ "type": "uint256"
368
+ },
369
+ {
370
+ "indexed": true,
371
+ "internalType": "uint256",
372
+ "name": "serviceId",
373
+ "type": "uint256"
374
+ },
375
+ {
376
+ "indexed": true,
377
+ "internalType": "address",
378
+ "name": "owner",
379
+ "type": "address"
380
+ },
381
+ {
382
+ "indexed": true,
383
+ "internalType": "address",
384
+ "name": "multisig",
385
+ "type": "address"
386
+ },
387
+ {
388
+ "indexed": false,
389
+ "internalType": "uint256[]",
390
+ "name": "nonces",
391
+ "type": "uint256[]"
392
+ }
393
+ ],
394
+ "name": "ServiceStaked",
395
+ "type": "event"
396
+ },
397
+ {
398
+ "anonymous": false,
399
+ "inputs": [
400
+ {
401
+ "indexed": false,
402
+ "internalType": "uint256",
403
+ "name": "epoch",
404
+ "type": "uint256"
405
+ },
406
+ {
407
+ "indexed": true,
408
+ "internalType": "uint256",
409
+ "name": "serviceId",
410
+ "type": "uint256"
411
+ },
412
+ {
413
+ "indexed": true,
414
+ "internalType": "address",
415
+ "name": "owner",
416
+ "type": "address"
417
+ },
418
+ {
419
+ "indexed": true,
420
+ "internalType": "address",
421
+ "name": "multisig",
422
+ "type": "address"
423
+ },
424
+ {
425
+ "indexed": false,
426
+ "internalType": "uint256[]",
427
+ "name": "nonces",
428
+ "type": "uint256[]"
429
+ },
430
+ {
431
+ "indexed": false,
432
+ "internalType": "uint256",
433
+ "name": "reward",
434
+ "type": "uint256"
435
+ }
436
+ ],
437
+ "name": "ServiceUnstaked",
438
+ "type": "event"
439
+ },
440
+ {
441
+ "anonymous": false,
442
+ "inputs": [
443
+ {
444
+ "indexed": true,
445
+ "internalType": "uint256",
446
+ "name": "epoch",
447
+ "type": "uint256"
448
+ },
449
+ {
450
+ "indexed": false,
451
+ "internalType": "uint256[]",
452
+ "name": "serviceIds",
453
+ "type": "uint256[]"
454
+ },
455
+ {
456
+ "indexed": false,
457
+ "internalType": "address[]",
458
+ "name": "owners",
459
+ "type": "address[]"
460
+ },
461
+ {
462
+ "indexed": false,
463
+ "internalType": "address[]",
464
+ "name": "multisigs",
465
+ "type": "address[]"
466
+ },
467
+ {
468
+ "indexed": false,
469
+ "internalType": "uint256[]",
470
+ "name": "serviceInactivity",
471
+ "type": "uint256[]"
472
+ }
473
+ ],
474
+ "name": "ServicesEvicted",
475
+ "type": "event"
476
+ },
477
+ {
478
+ "anonymous": false,
479
+ "inputs": [
480
+ {
481
+ "indexed": true,
482
+ "internalType": "address",
483
+ "name": "to",
484
+ "type": "address"
485
+ },
486
+ {
487
+ "indexed": false,
488
+ "internalType": "uint256",
489
+ "name": "amount",
490
+ "type": "uint256"
491
+ }
492
+ ],
493
+ "name": "Withdraw",
494
+ "type": "event"
495
+ },
496
+ {
497
+ "inputs": [],
498
+ "name": "VERSION",
499
+ "outputs": [
500
+ {
501
+ "internalType": "string",
502
+ "name": "",
503
+ "type": "string"
504
+ }
505
+ ],
506
+ "stateMutability": "view",
507
+ "type": "function"
508
+ },
509
+ {
510
+ "inputs": [],
511
+ "name": "activityChecker",
512
+ "outputs": [
513
+ {
514
+ "internalType": "address",
515
+ "name": "",
516
+ "type": "address"
517
+ }
518
+ ],
519
+ "stateMutability": "view",
520
+ "type": "function"
521
+ },
522
+ {
523
+ "inputs": [
524
+ {
525
+ "internalType": "uint256",
526
+ "name": "",
527
+ "type": "uint256"
528
+ }
529
+ ],
530
+ "name": "agentIds",
531
+ "outputs": [
532
+ {
533
+ "internalType": "uint256",
534
+ "name": "",
535
+ "type": "uint256"
536
+ }
537
+ ],
538
+ "stateMutability": "view",
539
+ "type": "function"
540
+ },
541
+ {
542
+ "inputs": [],
543
+ "name": "availableRewards",
544
+ "outputs": [
545
+ {
546
+ "internalType": "uint256",
547
+ "name": "",
548
+ "type": "uint256"
549
+ }
550
+ ],
551
+ "stateMutability": "view",
552
+ "type": "function"
553
+ },
554
+ {
555
+ "inputs": [],
556
+ "name": "balance",
557
+ "outputs": [
558
+ {
559
+ "internalType": "uint256",
560
+ "name": "",
561
+ "type": "uint256"
562
+ }
563
+ ],
564
+ "stateMutability": "view",
565
+ "type": "function"
566
+ },
567
+ {
568
+ "inputs": [
569
+ {
570
+ "internalType": "uint256",
571
+ "name": "serviceId",
572
+ "type": "uint256"
573
+ }
574
+ ],
575
+ "name": "calculateStakingLastReward",
576
+ "outputs": [
577
+ {
578
+ "internalType": "uint256",
579
+ "name": "reward",
580
+ "type": "uint256"
581
+ }
582
+ ],
583
+ "stateMutability": "view",
584
+ "type": "function"
585
+ },
586
+ {
587
+ "inputs": [
588
+ {
589
+ "internalType": "uint256",
590
+ "name": "serviceId",
591
+ "type": "uint256"
592
+ }
593
+ ],
594
+ "name": "calculateStakingReward",
595
+ "outputs": [
596
+ {
597
+ "internalType": "uint256",
598
+ "name": "reward",
599
+ "type": "uint256"
600
+ }
601
+ ],
602
+ "stateMutability": "view",
603
+ "type": "function"
604
+ },
605
+ {
606
+ "inputs": [],
607
+ "name": "checkpoint",
608
+ "outputs": [
609
+ {
610
+ "internalType": "uint256[]",
611
+ "name": "",
612
+ "type": "uint256[]"
613
+ },
614
+ {
615
+ "internalType": "uint256[][]",
616
+ "name": "",
617
+ "type": "uint256[][]"
618
+ },
619
+ {
620
+ "internalType": "uint256[]",
621
+ "name": "",
622
+ "type": "uint256[]"
623
+ },
624
+ {
625
+ "internalType": "uint256[]",
626
+ "name": "",
627
+ "type": "uint256[]"
628
+ },
629
+ {
630
+ "internalType": "uint256[]",
631
+ "name": "evictServiceIds",
632
+ "type": "uint256[]"
633
+ }
634
+ ],
635
+ "stateMutability": "nonpayable",
636
+ "type": "function"
637
+ },
638
+ {
639
+ "inputs": [
640
+ {
641
+ "internalType": "uint256",
642
+ "name": "serviceId",
643
+ "type": "uint256"
644
+ }
645
+ ],
646
+ "name": "checkpointAndClaim",
647
+ "outputs": [
648
+ {
649
+ "internalType": "uint256",
650
+ "name": "",
651
+ "type": "uint256"
652
+ }
653
+ ],
654
+ "stateMutability": "nonpayable",
655
+ "type": "function"
656
+ },
657
+ {
658
+ "inputs": [
659
+ {
660
+ "internalType": "uint256",
661
+ "name": "serviceId",
662
+ "type": "uint256"
663
+ }
664
+ ],
665
+ "name": "claim",
666
+ "outputs": [
667
+ {
668
+ "internalType": "uint256",
669
+ "name": "",
670
+ "type": "uint256"
671
+ }
672
+ ],
673
+ "stateMutability": "nonpayable",
674
+ "type": "function"
675
+ },
676
+ {
677
+ "inputs": [],
678
+ "name": "configHash",
679
+ "outputs": [
680
+ {
681
+ "internalType": "bytes32",
682
+ "name": "",
683
+ "type": "bytes32"
684
+ }
685
+ ],
686
+ "stateMutability": "view",
687
+ "type": "function"
688
+ },
689
+ {
690
+ "inputs": [
691
+ {
692
+ "internalType": "uint256",
693
+ "name": "amount",
694
+ "type": "uint256"
695
+ }
696
+ ],
697
+ "name": "deposit",
698
+ "outputs": [],
699
+ "stateMutability": "nonpayable",
700
+ "type": "function"
701
+ },
702
+ {
703
+ "inputs": [],
704
+ "name": "emissionsAmount",
705
+ "outputs": [
706
+ {
707
+ "internalType": "uint256",
708
+ "name": "",
709
+ "type": "uint256"
710
+ }
711
+ ],
712
+ "stateMutability": "view",
713
+ "type": "function"
714
+ },
715
+ {
716
+ "inputs": [],
717
+ "name": "epochCounter",
718
+ "outputs": [
719
+ {
720
+ "internalType": "uint256",
721
+ "name": "",
722
+ "type": "uint256"
723
+ }
724
+ ],
725
+ "stateMutability": "view",
726
+ "type": "function"
727
+ },
728
+ {
729
+ "inputs": [],
730
+ "name": "getAgentIds",
731
+ "outputs": [
732
+ {
733
+ "internalType": "uint256[]",
734
+ "name": "",
735
+ "type": "uint256[]"
736
+ }
737
+ ],
738
+ "stateMutability": "view",
739
+ "type": "function"
740
+ },
741
+ {
742
+ "inputs": [],
743
+ "name": "getNextRewardCheckpointTimestamp",
744
+ "outputs": [
745
+ {
746
+ "internalType": "uint256",
747
+ "name": "tsNext",
748
+ "type": "uint256"
749
+ }
750
+ ],
751
+ "stateMutability": "view",
752
+ "type": "function"
753
+ },
754
+ {
755
+ "inputs": [],
756
+ "name": "getServiceIds",
757
+ "outputs": [
758
+ {
759
+ "internalType": "uint256[]",
760
+ "name": "",
761
+ "type": "uint256[]"
762
+ }
763
+ ],
764
+ "stateMutability": "view",
765
+ "type": "function"
766
+ },
767
+ {
768
+ "inputs": [
769
+ {
770
+ "internalType": "uint256",
771
+ "name": "serviceId",
772
+ "type": "uint256"
773
+ }
774
+ ],
775
+ "name": "getServiceInfo",
776
+ "outputs": [
777
+ {
778
+ "components": [
779
+ {
780
+ "internalType": "address",
781
+ "name": "multisig",
782
+ "type": "address"
783
+ },
784
+ {
785
+ "internalType": "address",
786
+ "name": "owner",
787
+ "type": "address"
788
+ },
789
+ {
790
+ "internalType": "uint256[]",
791
+ "name": "nonces",
792
+ "type": "uint256[]"
793
+ },
794
+ {
795
+ "internalType": "uint256",
796
+ "name": "tsStart",
797
+ "type": "uint256"
798
+ },
799
+ {
800
+ "internalType": "uint256",
801
+ "name": "reward",
802
+ "type": "uint256"
803
+ },
804
+ {
805
+ "internalType": "uint256",
806
+ "name": "inactivity",
807
+ "type": "uint256"
808
+ }
809
+ ],
810
+ "internalType": "struct ServiceInfo",
811
+ "name": "sInfo",
812
+ "type": "tuple"
813
+ }
814
+ ],
815
+ "stateMutability": "view",
816
+ "type": "function"
817
+ },
818
+ {
819
+ "inputs": [
820
+ {
821
+ "internalType": "uint256",
822
+ "name": "serviceId",
823
+ "type": "uint256"
824
+ }
825
+ ],
826
+ "name": "getStakingState",
827
+ "outputs": [
828
+ {
829
+ "internalType": "enum StakingBase.StakingState",
830
+ "name": "stakingState",
831
+ "type": "uint8"
832
+ }
833
+ ],
834
+ "stateMutability": "view",
835
+ "type": "function"
836
+ },
837
+ {
838
+ "inputs": [
839
+ {
840
+ "components": [
841
+ {
842
+ "internalType": "bytes32",
843
+ "name": "metadataHash",
844
+ "type": "bytes32"
845
+ },
846
+ {
847
+ "internalType": "uint256",
848
+ "name": "maxNumServices",
849
+ "type": "uint256"
850
+ },
851
+ {
852
+ "internalType": "uint256",
853
+ "name": "rewardsPerSecond",
854
+ "type": "uint256"
855
+ },
856
+ {
857
+ "internalType": "uint256",
858
+ "name": "minStakingDeposit",
859
+ "type": "uint256"
860
+ },
861
+ {
862
+ "internalType": "uint256",
863
+ "name": "minNumStakingPeriods",
864
+ "type": "uint256"
865
+ },
866
+ {
867
+ "internalType": "uint256",
868
+ "name": "maxNumInactivityPeriods",
869
+ "type": "uint256"
870
+ },
871
+ {
872
+ "internalType": "uint256",
873
+ "name": "livenessPeriod",
874
+ "type": "uint256"
875
+ },
876
+ {
877
+ "internalType": "uint256",
878
+ "name": "timeForEmissions",
879
+ "type": "uint256"
880
+ },
881
+ {
882
+ "internalType": "uint256",
883
+ "name": "numAgentInstances",
884
+ "type": "uint256"
885
+ },
886
+ {
887
+ "internalType": "uint256[]",
888
+ "name": "agentIds",
889
+ "type": "uint256[]"
890
+ },
891
+ {
892
+ "internalType": "uint256",
893
+ "name": "threshold",
894
+ "type": "uint256"
895
+ },
896
+ {
897
+ "internalType": "bytes32",
898
+ "name": "configHash",
899
+ "type": "bytes32"
900
+ },
901
+ {
902
+ "internalType": "bytes32",
903
+ "name": "proxyHash",
904
+ "type": "bytes32"
905
+ },
906
+ {
907
+ "internalType": "address",
908
+ "name": "serviceRegistry",
909
+ "type": "address"
910
+ },
911
+ {
912
+ "internalType": "address",
913
+ "name": "activityChecker",
914
+ "type": "address"
915
+ }
916
+ ],
917
+ "internalType": "struct StakingBase.StakingParams",
918
+ "name": "_stakingParams",
919
+ "type": "tuple"
920
+ },
921
+ {
922
+ "internalType": "address",
923
+ "name": "_serviceRegistryTokenUtility",
924
+ "type": "address"
925
+ },
926
+ {
927
+ "internalType": "address",
928
+ "name": "_stakingToken",
929
+ "type": "address"
930
+ }
931
+ ],
932
+ "name": "initialize",
933
+ "outputs": [],
934
+ "stateMutability": "nonpayable",
935
+ "type": "function"
936
+ },
937
+ {
938
+ "inputs": [],
939
+ "name": "livenessPeriod",
940
+ "outputs": [
941
+ {
942
+ "internalType": "uint256",
943
+ "name": "",
944
+ "type": "uint256"
945
+ }
946
+ ],
947
+ "stateMutability": "view",
948
+ "type": "function"
949
+ },
950
+ {
951
+ "inputs": [
952
+ {
953
+ "internalType": "uint256",
954
+ "name": "",
955
+ "type": "uint256"
956
+ }
957
+ ],
958
+ "name": "mapServiceInfo",
959
+ "outputs": [
960
+ {
961
+ "internalType": "address",
962
+ "name": "multisig",
963
+ "type": "address"
964
+ },
965
+ {
966
+ "internalType": "address",
967
+ "name": "owner",
968
+ "type": "address"
969
+ },
970
+ {
971
+ "internalType": "uint256",
972
+ "name": "tsStart",
973
+ "type": "uint256"
974
+ },
975
+ {
976
+ "internalType": "uint256",
977
+ "name": "reward",
978
+ "type": "uint256"
979
+ },
980
+ {
981
+ "internalType": "uint256",
982
+ "name": "inactivity",
983
+ "type": "uint256"
984
+ }
985
+ ],
986
+ "stateMutability": "view",
987
+ "type": "function"
988
+ },
989
+ {
990
+ "inputs": [],
991
+ "name": "maxInactivityDuration",
992
+ "outputs": [
993
+ {
994
+ "internalType": "uint256",
995
+ "name": "",
996
+ "type": "uint256"
997
+ }
998
+ ],
999
+ "stateMutability": "view",
1000
+ "type": "function"
1001
+ },
1002
+ {
1003
+ "inputs": [],
1004
+ "name": "maxNumInactivityPeriods",
1005
+ "outputs": [
1006
+ {
1007
+ "internalType": "uint256",
1008
+ "name": "",
1009
+ "type": "uint256"
1010
+ }
1011
+ ],
1012
+ "stateMutability": "view",
1013
+ "type": "function"
1014
+ },
1015
+ {
1016
+ "inputs": [],
1017
+ "name": "maxNumServices",
1018
+ "outputs": [
1019
+ {
1020
+ "internalType": "uint256",
1021
+ "name": "",
1022
+ "type": "uint256"
1023
+ }
1024
+ ],
1025
+ "stateMutability": "view",
1026
+ "type": "function"
1027
+ },
1028
+ {
1029
+ "inputs": [],
1030
+ "name": "metadataHash",
1031
+ "outputs": [
1032
+ {
1033
+ "internalType": "bytes32",
1034
+ "name": "",
1035
+ "type": "bytes32"
1036
+ }
1037
+ ],
1038
+ "stateMutability": "view",
1039
+ "type": "function"
1040
+ },
1041
+ {
1042
+ "inputs": [],
1043
+ "name": "minStakingDeposit",
1044
+ "outputs": [
1045
+ {
1046
+ "internalType": "uint256",
1047
+ "name": "",
1048
+ "type": "uint256"
1049
+ }
1050
+ ],
1051
+ "stateMutability": "view",
1052
+ "type": "function"
1053
+ },
1054
+ {
1055
+ "inputs": [],
1056
+ "name": "minStakingDuration",
1057
+ "outputs": [
1058
+ {
1059
+ "internalType": "uint256",
1060
+ "name": "",
1061
+ "type": "uint256"
1062
+ }
1063
+ ],
1064
+ "stateMutability": "view",
1065
+ "type": "function"
1066
+ },
1067
+ {
1068
+ "inputs": [],
1069
+ "name": "numAgentInstances",
1070
+ "outputs": [
1071
+ {
1072
+ "internalType": "uint256",
1073
+ "name": "",
1074
+ "type": "uint256"
1075
+ }
1076
+ ],
1077
+ "stateMutability": "view",
1078
+ "type": "function"
1079
+ },
1080
+ {
1081
+ "inputs": [
1082
+ {
1083
+ "internalType": "address",
1084
+ "name": "",
1085
+ "type": "address"
1086
+ },
1087
+ {
1088
+ "internalType": "address",
1089
+ "name": "",
1090
+ "type": "address"
1091
+ },
1092
+ {
1093
+ "internalType": "uint256",
1094
+ "name": "",
1095
+ "type": "uint256"
1096
+ },
1097
+ {
1098
+ "internalType": "bytes",
1099
+ "name": "",
1100
+ "type": "bytes"
1101
+ }
1102
+ ],
1103
+ "name": "onERC721Received",
1104
+ "outputs": [
1105
+ {
1106
+ "internalType": "bytes4",
1107
+ "name": "",
1108
+ "type": "bytes4"
1109
+ }
1110
+ ],
1111
+ "stateMutability": "nonpayable",
1112
+ "type": "function"
1113
+ },
1114
+ {
1115
+ "inputs": [],
1116
+ "name": "proxyHash",
1117
+ "outputs": [
1118
+ {
1119
+ "internalType": "bytes32",
1120
+ "name": "",
1121
+ "type": "bytes32"
1122
+ }
1123
+ ],
1124
+ "stateMutability": "view",
1125
+ "type": "function"
1126
+ },
1127
+ {
1128
+ "inputs": [],
1129
+ "name": "rewardsPerSecond",
1130
+ "outputs": [
1131
+ {
1132
+ "internalType": "uint256",
1133
+ "name": "",
1134
+ "type": "uint256"
1135
+ }
1136
+ ],
1137
+ "stateMutability": "view",
1138
+ "type": "function"
1139
+ },
1140
+ {
1141
+ "inputs": [],
1142
+ "name": "serviceRegistry",
1143
+ "outputs": [
1144
+ {
1145
+ "internalType": "address",
1146
+ "name": "",
1147
+ "type": "address"
1148
+ }
1149
+ ],
1150
+ "stateMutability": "view",
1151
+ "type": "function"
1152
+ },
1153
+ {
1154
+ "inputs": [],
1155
+ "name": "serviceRegistryTokenUtility",
1156
+ "outputs": [
1157
+ {
1158
+ "internalType": "address",
1159
+ "name": "",
1160
+ "type": "address"
1161
+ }
1162
+ ],
1163
+ "stateMutability": "view",
1164
+ "type": "function"
1165
+ },
1166
+ {
1167
+ "inputs": [
1168
+ {
1169
+ "internalType": "uint256",
1170
+ "name": "",
1171
+ "type": "uint256"
1172
+ }
1173
+ ],
1174
+ "name": "setServiceIds",
1175
+ "outputs": [
1176
+ {
1177
+ "internalType": "uint256",
1178
+ "name": "",
1179
+ "type": "uint256"
1180
+ }
1181
+ ],
1182
+ "stateMutability": "view",
1183
+ "type": "function"
1184
+ },
1185
+ {
1186
+ "inputs": [
1187
+ {
1188
+ "internalType": "uint256",
1189
+ "name": "serviceId",
1190
+ "type": "uint256"
1191
+ }
1192
+ ],
1193
+ "name": "stake",
1194
+ "outputs": [],
1195
+ "stateMutability": "nonpayable",
1196
+ "type": "function"
1197
+ },
1198
+ {
1199
+ "inputs": [],
1200
+ "name": "stakingToken",
1201
+ "outputs": [
1202
+ {
1203
+ "internalType": "address",
1204
+ "name": "",
1205
+ "type": "address"
1206
+ }
1207
+ ],
1208
+ "stateMutability": "view",
1209
+ "type": "function"
1210
+ },
1211
+ {
1212
+ "inputs": [],
1213
+ "name": "threshold",
1214
+ "outputs": [
1215
+ {
1216
+ "internalType": "uint256",
1217
+ "name": "",
1218
+ "type": "uint256"
1219
+ }
1220
+ ],
1221
+ "stateMutability": "view",
1222
+ "type": "function"
1223
+ },
1224
+ {
1225
+ "inputs": [],
1226
+ "name": "timeForEmissions",
1227
+ "outputs": [
1228
+ {
1229
+ "internalType": "uint256",
1230
+ "name": "",
1231
+ "type": "uint256"
1232
+ }
1233
+ ],
1234
+ "stateMutability": "view",
1235
+ "type": "function"
1236
+ },
1237
+ {
1238
+ "inputs": [],
1239
+ "name": "tsCheckpoint",
1240
+ "outputs": [
1241
+ {
1242
+ "internalType": "uint256",
1243
+ "name": "",
1244
+ "type": "uint256"
1245
+ }
1246
+ ],
1247
+ "stateMutability": "view",
1248
+ "type": "function"
1249
+ },
1250
+ {
1251
+ "inputs": [
1252
+ {
1253
+ "internalType": "uint256",
1254
+ "name": "serviceId",
1255
+ "type": "uint256"
1256
+ }
1257
+ ],
1258
+ "name": "unstake",
1259
+ "outputs": [
1260
+ {
1261
+ "internalType": "uint256",
1262
+ "name": "reward",
1263
+ "type": "uint256"
1264
+ }
1265
+ ],
1266
+ "stateMutability": "nonpayable",
1267
+ "type": "function"
1268
+ }
1269
+ ],
1270
+ "bytecode": "0x6102606040523480156200001257600080fd5b506040516200383a3803806200383a833981016040819052620000359162000453565b8484828260000151600014806200004e57506020830151155b806200005c575060a0830151155b806200006a575060c0830151155b8062000078575060e0830151155b806200008657506060830151155b806200009457506080830151155b15620000b357604051637c946ed760e01b815260040160405180910390fd5b826080015183606001511015620000f5576060830151608084015160405163491a2bb160e01b8152600481019290925260248201526044015b60405180910390fd5b6002836040015110156200012d57604080840151905163491a2bb160e01b8152600481019190915260026024820152604401620000ec565b6001600160a01b038216620001555760405163d92e233d60e01b815260040160405180910390fd5b82516080908152602084015160a0908152604085015160c09081529185015160e0908152908501516101005290840151610120908152908401516101409081526001600160a01b0384166101a0529084015161016052830151610180526000805b846101000151518110156200029257818561010001518281518110620001e057620001e062000576565b6020026020010151116200022d57846101000151818151811062000208576200020862000576565b6020026020010151604051632ab10b0b60e21b8152600401620000ec91815260200190565b846101000151818151811062000247576200024762000576565b602090810291909101015160048054600181810183556000929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0182905590925001620001b6565b5081620002b257604051637c946ed760e01b815260040160405180910390fd5b6101c0829052610100516060850151620002cd91906200058c565b6101e052610100516080850151620002e691906200058c565b6102005250504260035550506001600160a01b03821615806200031057506001600160a01b038316155b156200032f5760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b0390811661024052166102205250620005b89050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156200038957620003896200034d565b60405290565b600082601f830112620003a157600080fd5b815160206001600160401b0380831115620003c057620003c06200034d565b8260051b604051601f19603f83011681018181108482111715620003e857620003e86200034d565b60405293845260208187018101949081019250878511156200040957600080fd5b6020870191505b848210156200042b5781518352918301919083019062000410565b979650505050505050565b80516001600160a01b03811681146200044e57600080fd5b919050565b600080600080600060a086880312156200046c57600080fd5b85516001600160401b03808211156200048457600080fd5b90870190610160828a0312156200049a57600080fd5b620004a462000363565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e082015261010080840151838111156200050357600080fd5b620005118c8287016200038f565b918301919091525061012083810151908201526101409283015192810192909252509450620005436020870162000436565b9350620005536040870162000436565b9250620005636060870162000436565b9150608086015190509295509295909350565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417620005b257634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161311962000721600039600081816104110152818161130901528181611c1401528181611d1e0152611d6201526000818161030501528181611ca40152611e0e01526000818161068e015281816118a50152611b1401526000818161024b0152818161074d015261079f01526000818161044b0152610fca0152600081816105cf01528181610a0101528181610d8601526111bd0152600081816105f601528181610e4e0152610e7d01526000818161036201528181610ec40152610ef80152600081816103c30152610e0c0152600081816103ea015261294a01526000818161038901528181611bc60152611fb80152600061049b01526000818161061d0152611d9901526000818161064401526122ae0152600081816102de01528181610d0d0152610d4101526131196000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c8063a0ed60e011610145578063cbcf252a116100bd578063eb338c961161008c578063f4dce71411610071578063f4dce71414610681578063f86ad2b614610689578063ffa1ad74146106b057600080fd5b8063eb338c9614610666578063f189e85a1461067957600080fd5b8063cbcf252a146105ca578063e1f1176d146105f1578063e77cdcc914610618578063eacdaabc1461063f57600080fd5b8063b69ef8a811610114578063c2c4c5c1116100f9578063c2c4c5c11461057e578063c889921d14610597578063cae2a5f0146105aa57600080fd5b8063b69ef8a814610562578063b6b55f251461056b57600080fd5b8063a0ed60e014610496578063a694fc3a146104bd578063a74466ad146104d0578063b15087601461054d57600080fd5b806352c824f5116101d857806372f702f3116101a7578063809cee2f1161018c578063809cee2f1461044657806382a8ea581461046d578063879d90901461048d57600080fd5b806372f702f31461040c57806378e061361461043357600080fd5b806352c824f51461038457806356e76058146103ab5780635829c5ec146103be578063592cf3fb146103e557600080fd5b8063287140511161021457806328714051146103005780632e17de781461033f5780633e7329971461035457806342cde4e81461035d57600080fd5b806308ae7e541461024657806314b19c5a14610280578063150b7a021461028957806316a75172146102d9575b600080fd5b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61026d60005481565b6102a8610297366004612a0a565b630a85bd0160e11b95945050505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610277565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b6103277f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610277565b61035261034d366004612aa9565b6106e1565b005b61026d60035481565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b61026d6103b9366004612aa9565b610acf565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b6103277f000000000000000000000000000000000000000000000000000000000000000081565b61026d610441366004612aa9565b610af0565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b61048061047b366004612aa9565b610bba565b6040516102779190612afe565b61026d60025481565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b6103526104cb366004612aa9565b610cb1565b61051a6104de366004612aa9565b6005602081905260009182526040909120805460018201546003830154600484015493909401546001600160a01b039283169492909116929085565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a001610277565b61055561127e565b6040516102779190612b65565b61026d60015481565b610352610579366004612aa9565b6112d6565b610586611378565b604051610277959493929190612b78565b61026d6105a5366004612aa9565b6119ad565b6105bd6105b8366004612aa9565b611a69565b6040516102779190612c3d565b6103277f000000000000000000000000000000000000000000000000000000000000000081565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b61026d610674366004612aa9565b611b5c565b610555611b6c565b61026d611bc2565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b6106d4604051806040016040528060058152602001640302e312e360dc1b81525081565b6040516102779190612c65565b600081815260056020526040902060018101546001600160a01b0316331461073857600181015460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044015b60405180910390fd5b600381015460006107498242612cca565b90507f0000000000000000000000000000000000000000000000000000000000000000811115801561077d57506000600254115b156107cb5760405163ba2bbc6b60e01b815260048101859052602481018290527f0000000000000000000000000000000000000000000000000000000000000000604482015260640161072f565b6000806107d6611378565b945050505091508151600003610837576107ee611b6c565b9150815167ffffffffffffffff81111561080a5761080a612cdd565b604051908082528060200260200182016040528015610833578160200160208202803683370190505b5090505b6000805b8351821015610898578783838151811061085757610857612cf3565b60200260200101510315610898578784838151811061087857610878612cf3565b60200260200101510361088d57506001610898565b81600101915061083b565b600487015460028801805460408051602080840282018101909252828152600093909290918301828280156108ec57602002820191906000526020600020905b8154815260200190600101908083116108d8575b50508c5460008f8152600560205260408120805473ffffffffffffffffffffffffffffffffffffffff19908116825560018201805490911690559596506001600160a01b03909116949350915061094890506002830182612974565b506000600382018190556004820181905560059091015583156109d7576006805461097590600190612cca565b8154811061098557610985612cf3565b9060005260206000200154600686815481106109a3576109a3612cf3565b60009182526020909120015560068054806109c0576109c0612d09565b600190038181906000526020600020016000905590555b604051632142170760e11b8152306004820152336024820152604481018c90526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90606401600060405180830381600087803b158015610a4557600080fd5b505af1158015610a59573d6000803e3d6000fd5b505050506000831115610a7057610a708184611bf7565b806001600160a01b0316336001600160a01b03168c7f950733f4c0bf951b8e770f3cc619a4288e7b59b1236d59aeaf2c238488e8ae816000548688604051610aba93929190612d1f565b60405180910390a45050505050505050505050565b60048181548110610adf57600080fd5b600091825260209091200154905081565b6000818152600560209081526040808320815160c08101835281546001600160a01b0390811682526001830154168185015260028201805484518187028101870186528181528796939586019390929190830182828015610b7057602002820191906000526020600020905b815481526020019060010190808311610b5c575b505050505081526020016003820154815260200160048201548152602001600582015481525050905080608001519150610ba9836119ad565b610bb39083612d48565b9392505050565b610c056040518060c0016040528060006001600160a01b0316815260200160006001600160a01b03168152602001606081526020016000815260200160008152602001600081525090565b600082815260056020908152604091829020825160c08101845281546001600160a01b0390811682526001830154168184015260028201805485518186028101860187528181529295939493860193830182828015610c8357602002820191906000526020600020905b815481526020019060010190808311610c6f575b5050505050815260200160038201548152602001600482015481526020016005820154815250509050919050565b600254600003610cd45760405163afb0be3360e01b815260040160405180910390fd5b6000818152600560205260409020600381015415610d085760405163b4817ce760e01b81526004810183905260240161072f565b6006547f00000000000000000000000000000000000000000000000000000000000000008103610d6d5760405163fd20861560e01b81527f0000000000000000000000000000000000000000000000000000000000000000600482015260240161072f565b60405163ef0e239b60e01b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ef0e239b90602401600060405180830381865afa158015610dd5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dfd9190810190612e79565b9050806080015163ffffffff167f000000000000000000000000000000000000000000000000000000000000000014610e4c57604051637ad404bf60e11b81526004810185905260240161072f565b7f000000000000000000000000000000000000000000000000000000000000000015801590610e9f575080604001517f000000000000000000000000000000000000000000000000000000000000000014155b15610ec057604051637ad404bf60e11b81526004810185905260240161072f565b60007f0000000000000000000000000000000000000000000000000000000000000000118015610f1a5750806060015163ffffffff167f000000000000000000000000000000000000000000000000000000000000000014155b15610f3b57604051637ad404bf60e11b81526004810185905260240161072f565b60048160c001516005811115610f5357610f53612c27565b14610f92578060c001516005811115610f6e57610f6e612c27565b604051633c053f9d60e21b815260048101919091526024810185905260440161072f565b600081602001516001600160a01b0316803b806020016040519081016040528181526000908060200190933c805190602001209050807f00000000000000000000000000000000000000000000000000000000000000001461101757602082015160405162a2307960e51b81526001600160a01b03909116600482015260240161072f565b60045480156110e05760e08301515181811461104957604051637ad404bf60e11b81526004810188905260240161072f565b60005b818110156110dd578460e00151818151811061106a5761106a612cf3565b602002602001015163ffffffff166004828154811061108b5761108b612cf3565b9060005260206000200154146110d557600481815481106110ae576110ae612cf3565b9060005260206000200154604051632ab10b0b60e21b815260040161072f91815260200190565b60010161104c565b50505b6111018684600001516bffffffffffffffffffffffff168560e00151611c81565b602083015185546001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff199182161787556001870180549091163317905560009061114790611f02565b805190915061115f9060028801906020840190612995565b50426003870155600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01879055604051632142170760e11b8152336004820152306024820152604481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342842e0e90606401600060405180830381600087803b15801561120957600080fd5b505af115801561121d573d6000803e3d6000fd5b5050505083602001516001600160a01b0316336001600160a01b0316887faa6b005b4958114a0c90492461c24af6525ae0178db7fbf44125ae9217c69ccb6000548560405161126d929190612f57565b60405180910390a450505050505050565b606060048054806020026020016040519081016040528092919081815260200182805480156112cc57602002820191906000526020600020905b8154815260200190600101908083116112b8575b5050505050905090565b6000816001546112e69190612d48565b90506000826002546112f89190612d48565b6001839055600281905590506113307f0000000000000000000000000000000000000000000000000000000000000000333086611f13565b604080518481526020810184905290810182905233907f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e9060600160405180910390a2505050565b6060806060806060600080600080600080600080611394611f9d565b97509750975097509750975097509750606080845167ffffffffffffffff8111156113c1576113c1612cdd565b6040519080825280602002602001820160405280156113ea578160200160208202803683370190505b509a506000891561177d578967ffffffffffffffff81111561140e5761140e612cdd565b604051908082528060200260200182016040528015611437578160200160208202803683370190505b5092508967ffffffffffffffff81111561145357611453612cdd565b60405190808252806020026020018201604052801561147c578160200160208202803683370190505b5091508a8911156116865760008060015b8c811015611579578b8e8b83815181106114a9576114a9612cf3565b60200260200101516114bb9190612f70565b6114c59190612f87565b92506114d18383612d48565b91508a81815181106114e5576114e5612cf3565b602002602001015193508a818151811061150157611501612cf3565b602002602001015186828151811061151b5761151b612cf3565b6020026020010181815250508285828151811061153a5761153a612cf3565b6020026020010181815250508260056000868152602001908152602001600020600401600082825461156c9190612d48565b909155505060010161148d565b508a8d8a60008151811061158f5761158f612cf3565b60200260200101516115a19190612f70565b6115ab9190612f87565b91506115b78282612d48565b9050896000815181106115cc576115cc612cf3565b60200260200101519250896000815181106115e9576115e9612cf3565b60200260200101518560008151811061160457611604612cf3565b602002602001018181525050808d111561162f57611622818e612cca565b61162c9083612d48565b91505b818460008151811061164357611643612cf3565b602002602001018181525050816005600085815260200190815260200160002060040160008282546116759190612d48565b9091555060009d5061177792505050565b60005b8a811015611769578881815181106116a3576116a3612cf3565b602002602001015191508881815181106116bf576116bf612cf3565b60200260200101518482815181106116d9576116d9612cf3565b6020026020010181815250508781815181106116f7576116f7612cf3565b602002602001015183828151811061171157611711612cf3565b60200260200101818152505087818151811061172f5761172f612cf3565b602002602001015160056000848152602001908152602001600020600401600082825461175c9190612d48565b9091555050600101611689565b50611774898c612cca565b9a505b60028b90555b855115611997576000995060005b8651811015611930578681815181106117a6576117a6612cf3565b602002602001015191508581815181106117c2576117c2612cf3565b60200260200101516005600084815260200190815260200160002060020190805190602001906117f3929190612995565b50600085828151811061180857611808612cf3565b602002602001015111156119155784818151811061182857611828612cf3565b602002602001015160056000848152602001908152602001600020600501546118519190612d48565b85828151811061186357611863612cf3565b60200260200101818152505084818151811061188157611881612cf3565b602002602001015160056000848152602001908152602001600020600501819055507f00000000000000000000000000000000000000000000000000000000000000008582815181106118d6576118d6612cf3565b6020026020010151111561191057818d82815181106118f7576118f7612cf3565b60209081029190910101528a61190c81612fa9565b9b50505b611928565b6000828152600560208190526040822001555b60010161178b565b508915611942576119428c858c61239b565b42600355600054611954816001612d48565b60005560405181907f06a98bdd4732811ab3214800ed1ada2dce66a2bce301d250c3ca7d6b461ee6669061198d908f9088908890612fc2565b60405180910390a2505b50939e929d509b50919950969750505050505050565b6000806000806000806119be611f9d565b5050509450945094509450945060005b84811015611a5e57878382815181106119e9576119e9612cf3565b602002602001015103611a565785841115611a35578386838381518110611a1257611a12612cf3565b6020026020010151611a249190612f70565b611a2e9190612f87565b9650611a5e565b818181518110611a4757611a47612cf3565b60200260200101519650611a5e565b6001016119ce565b505050505050919050565b6000818152600560209081526040808320815160c08101835281546001600160a01b0390811682526001830154168185015260028201805484518187028101870186528181528796939586019390929190830182828015611ae957602002820191906000526020600020905b815481526020019060010190808311611ad5575b50505050508152602001600382015481526020016004820154815260200160058201548152505090507f00000000000000000000000000000000000000000000000000000000000000008160a001511115611b475760029150611b56565b606081015115611b5657600191505b50919050565b60068181548110610adf57600080fd5b606060068054806020026020016040519081016040528092919081815260200182805480156112cc57602002820191906000526020600020908154815260200190600101908083116112b8575050505050905090565b60007f0000000000000000000000000000000000000000000000000000000000000000600354611bf29190612d48565b905090565b8060016000828254611c099190612cca565b90915550611c3a90507f00000000000000000000000000000000000000000000000000000000000000008383612760565b816001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436482604051611c7591815260200190565b60405180910390a25050565b604051633cebfa4f60e01b81526004810184905260009081906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633cebfa4f906024016040805180830381865afa158015611cea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0e9190612ff7565b91509150816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614611d9757604051630b80380d60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301528316602482015260440161072f565b7f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff8216811115611dfe57604051632b30b24760e21b81526bffffffffffffffffffffffff831660048201526024810182905260440161072f565b60005b8451811015611ef95760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166375c1f93489888581518110611e4e57611e4e612cf3565b60200260200101516040518363ffffffff1660e01b8152600401611e8292919091825263ffffffff16602082015260400190565b602060405180830381865afa158015611e9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec3919061302c565b905082811015611ef057604051632b30b24760e21b8152600481018290526024810184905260440161072f565b50600101611e01565b50505050505050565b6060611f0d826127e3565b92915050565b60006040516323b872dd60e01b6000528460045283602452826044526020600060646000808a5af13d15601f3d1160016000511416171691506000606052806040525080611f965760405163abae3d6d60e01b81526001600160a01b0380871660048301528086166024830152841660448201526064810183905260840161072f565b5050505050565b600080600060608060608060606000600354905060025498507f00000000000000000000000000000000000000000000000000000000000000008142611fe39190612cca565b10158015611ff15750600089115b15612390576006548067ffffffffffffffff81111561201257612012612cdd565b60405190808252806020026020018201604052801561203b578160200160208202803683370190505b5094508067ffffffffffffffff81111561205757612057612cdd565b604051908082528060200260200182016040528015612080578160200160208202803683370190505b5096508067ffffffffffffffff81111561209c5761209c612cdd565b6040519080825280602002602001820160405280156120c5578160200160208202803683370190505b5095508067ffffffffffffffff8111156120e1576120e1612cdd565b60405190808252806020026020018201604052801561211457816020015b60608152602001906001900390816120ff5790505b5093508067ffffffffffffffff81111561213057612130612cdd565b604051908082528060200260200182016040528015612159578160200160208202803683370190505b50925060005b8181101561238d576006818154811061217a5761217a612cf3565b906000526020600020015486828151811061219757612197612cf3565b6020026020010181815250506000600560008884815181106121bb576121bb612cf3565b602090810291909101810151825281019190915260400160002080549091506121ec906001600160a01b0316611f02565b8683815181106121fe576121fe612cf3565b6020908102919091010152600381015484908181111561221c578091505b6122268242612cca565b905060006122a089868151811061223f5761223f612cf3565b60200260200101518560020180548060200260200160405190810160405280929190818152602001828054801561229557602002820191906000526020600020905b815481526020019060010190808311612281575b50505050508461288b565b9050801561235e576122d2827f0000000000000000000000000000000000000000000000000000000000000000612f70565b8b8f815181106122e4576122e4612cf3565b6020026020010181815250508a8e8151811061230257612302612cf3565b60200260200101518d6123159190612d48565b9c5089858151811061232957612329612cf3565b60200260200101518c8f8151811061234357612343612cf3565b60209081029190910101526123578e612fa9565b9d5061237e565b8188868151811061237157612371612cf3565b6020026020010181815250505b5050505080600101905061215f565b50505b509091929394959697565b825160008267ffffffffffffffff8111156123b8576123b8612cdd565b6040519080825280602002602001820160405280156123e1578160200160208202803683370190505b50905060008367ffffffffffffffff8111156123ff576123ff612cdd565b604051908082528060200260200182016040528015612428578160200160208202803683370190505b50905060008467ffffffffffffffff81111561244657612446612cdd565b60405190808252806020026020018201604052801561246f578160200160208202803683370190505b50905060008567ffffffffffffffff81111561248d5761248d612cdd565b6040519080825280602002602001820160405280156124b6578160200160208202803683370190505b50905060008667ffffffffffffffff8111156124d4576124d4612cdd565b6040519080825280602002602001820160405280156124fd578160200160208202803683370190505b50905060008060005b8881101561265d5760008c828151811061252257612522612cf3565b60200260200101511115612655578b818151811061254257612542612cf3565b602002602001015191508188848151811061255f5761255f612cf3565b6020908102919091018101919091526000838152600590915260409020600181015488516001600160a01b03909116908990869081106125a1576125a1612cf3565b6001600160a01b039283166020918202929092010152815488519116908890869081106125d0576125d0612cf3565b60200260200101906001600160a01b031690816001600160a01b0316815250508b828151811061260257612602612cf3565b602002602001015186858151811061261c5761261c612cf3565b6020026020010181815250508185858151811061263b5761263b612cf3565b60209081029190910101528361265081612fa9565b945050505b600101612506565b50885b8015612712578861267081613045565b99506000905084612682600184612cca565b8151811061269257612692612cf3565b6020026020010151905060068a815481106126af576126af612cf3565b9060005260206000200154600682815481106126cd576126cd612cf3565b60009182526020909120015560068054806126ea576126ea612d09565b60019003818190600052602060002001600090559055508061270b90613045565b9050612660565b506000547fd19a3d42ed383465e4058c322d9411aeac76ddb8454d22e139fc99808bd569528888888860405161274b9493929190613096565b60405180910390a25050505050505050505050565b600060405163a9059cbb60e01b6000528360045282602452602060006044600080895af13d15601f3d11600160005114161716915060006060528060405250806127dd5760405163abae3d6d60e01b81526001600160a01b038086166004830152306024830152841660448201526064810183905260840161072f565b50505050565b60408051600180825281830190925260609160208083019080368337019050509050816001600160a01b031663affed0e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612843573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612867919061302c565b8160008151811061287a5761287a612cf3565b602002602001018181525050919050565b60006128988484846128a0565b949350505050565b600080821180156128e45750826000815181106128bf576128bf612cf3565b6020026020010151846000815181106128da576128da612cf3565b6020026020010151115b15610bb357600082846000815181106128ff576128ff612cf3565b60200260200101518660008151811061291a5761291a612cf3565b602002602001015161292c9190612cca565b61293e90670de0b6b3a7640000612f70565b6129489190612f87565b7f0000000000000000000000000000000000000000000000000000000000000000111595945050505050565b508054600082559060005260206000209081019061299291906129e0565b50565b8280548282559060005260206000209081019282156129d0579160200282015b828111156129d05782518255916020019190600101906129b5565b506129dc9291506129e0565b5090565b5b808211156129dc57600081556001016129e1565b6001600160a01b038116811461299257600080fd5b600080600080600060808688031215612a2257600080fd5b8535612a2d816129f5565b94506020860135612a3d816129f5565b935060408601359250606086013567ffffffffffffffff80821115612a6157600080fd5b818801915088601f830112612a7557600080fd5b813581811115612a8457600080fd5b896020828501011115612a9657600080fd5b9699959850939650602001949392505050565b600060208284031215612abb57600080fd5b5035919050565b60008151808452602080850194506020840160005b83811015612af357815187529582019590820190600101612ad7565b509495945050505050565b6020815260006001600160a01b0380845116602084015280602085015116604084015250604083015160c06060840152612b3b60e0840182612ac2565b905060608401516080840152608084015160a084015260a084015160c08401528091505092915050565b602081526000610bb36020830184612ac2565b60a081526000612b8b60a0830188612ac2565b6020838203818501528188518084528284019150828160051b850101838b0160005b83811015612bdb57601f19878403018552612bc9838351612ac2565b94860194925090850190600101612bad565b50508681036040880152612bef818b612ac2565b9450505050508281036060840152612c078186612ac2565b90508281036080840152612c1b8185612ac2565b98975050505050505050565b634e487b7160e01b600052602160045260246000fd5b6020810160038310612c5f57634e487b7160e01b600052602160045260246000fd5b91905290565b60006020808352835180602085015260005b81811015612c9357858101830151858201604001528201612c77565b506000604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611f0d57611f0d612cb4565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b838152606060208201526000612d386060830185612ac2565b9050826040830152949350505050565b80820180821115611f0d57611f0d612cb4565b604051610100810167ffffffffffffffff81118282101715612d7f57612d7f612cdd565b60405290565b80516bffffffffffffffffffffffff81168114612da157600080fd5b919050565b8051612da1816129f5565b805163ffffffff81168114612da157600080fd5b805160068110612da157600080fd5b600082601f830112612de557600080fd5b8151602067ffffffffffffffff80831115612e0257612e02612cdd565b8260051b604051601f19603f83011681018181108482111715612e2757612e27612cdd565b6040529384526020818701810194908101925087851115612e4757600080fd5b6020870191505b84821015612e6e57612e5f82612db1565b83529183019190830190612e4e565b979650505050505050565b600060208284031215612e8b57600080fd5b815167ffffffffffffffff80821115612ea357600080fd5b908301906101008286031215612eb857600080fd5b612ec0612d5b565b612ec983612d85565b8152612ed760208401612da6565b602082015260408301516040820152612ef260608401612db1565b6060820152612f0360808401612db1565b6080820152612f1460a08401612db1565b60a0820152612f2560c08401612dc5565b60c082015260e083015182811115612f3c57600080fd5b612f4887828601612dd4565b60e08301525095945050505050565b8281526040602082015260006128986040830184612ac2565b8082028115828204841417611f0d57611f0d612cb4565b600082612fa457634e487b7160e01b600052601260045260246000fd5b500490565b600060018201612fbb57612fbb612cb4565b5060010190565b838152606060208201526000612fdb6060830185612ac2565b8281036040840152612fed8185612ac2565b9695505050505050565b6000806040838503121561300a57600080fd5b8251613015816129f5565b915061302360208401612d85565b90509250929050565b60006020828403121561303e57600080fd5b5051919050565b60008161305457613054612cb4565b506000190190565b60008151808452602080850194506020840160005b83811015612af35781516001600160a01b031687529582019590820190600101613071565b6080815260006130a96080830187612ac2565b82810360208401526130bb818761305c565b905082810360408401526130cf818661305c565b90508281036060840152612e6e8185612ac256fea26469706673582212201cbb3243bdf2246a74a754c4b24385dc52b256b192f67778a3b3a76648374a5864736f6c63430008170033",
1271
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102415760003560e01c8063a0ed60e011610145578063cbcf252a116100bd578063eb338c961161008c578063f4dce71411610071578063f4dce71414610681578063f86ad2b614610689578063ffa1ad74146106b057600080fd5b8063eb338c9614610666578063f189e85a1461067957600080fd5b8063cbcf252a146105ca578063e1f1176d146105f1578063e77cdcc914610618578063eacdaabc1461063f57600080fd5b8063b69ef8a811610114578063c2c4c5c1116100f9578063c2c4c5c11461057e578063c889921d14610597578063cae2a5f0146105aa57600080fd5b8063b69ef8a814610562578063b6b55f251461056b57600080fd5b8063a0ed60e014610496578063a694fc3a146104bd578063a74466ad146104d0578063b15087601461054d57600080fd5b806352c824f5116101d857806372f702f3116101a7578063809cee2f1161018c578063809cee2f1461044657806382a8ea581461046d578063879d90901461048d57600080fd5b806372f702f31461040c57806378e061361461043357600080fd5b806352c824f51461038457806356e76058146103ab5780635829c5ec146103be578063592cf3fb146103e557600080fd5b8063287140511161021457806328714051146103005780632e17de781461033f5780633e7329971461035457806342cde4e81461035d57600080fd5b806308ae7e541461024657806314b19c5a14610280578063150b7a021461028957806316a75172146102d9575b600080fd5b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61026d60005481565b6102a8610297366004612a0a565b630a85bd0160e11b95945050505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610277565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b6103277f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610277565b61035261034d366004612aa9565b6106e1565b005b61026d60035481565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b61026d6103b9366004612aa9565b610acf565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b6103277f000000000000000000000000000000000000000000000000000000000000000081565b61026d610441366004612aa9565b610af0565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b61048061047b366004612aa9565b610bba565b6040516102779190612afe565b61026d60025481565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b6103526104cb366004612aa9565b610cb1565b61051a6104de366004612aa9565b6005602081905260009182526040909120805460018201546003830154600484015493909401546001600160a01b039283169492909116929085565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a001610277565b61055561127e565b6040516102779190612b65565b61026d60015481565b610352610579366004612aa9565b6112d6565b610586611378565b604051610277959493929190612b78565b61026d6105a5366004612aa9565b6119ad565b6105bd6105b8366004612aa9565b611a69565b6040516102779190612c3d565b6103277f000000000000000000000000000000000000000000000000000000000000000081565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b61026d610674366004612aa9565b611b5c565b610555611b6c565b61026d611bc2565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b6106d4604051806040016040528060058152602001640302e312e360dc1b81525081565b6040516102779190612c65565b600081815260056020526040902060018101546001600160a01b0316331461073857600181015460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044015b60405180910390fd5b600381015460006107498242612cca565b90507f0000000000000000000000000000000000000000000000000000000000000000811115801561077d57506000600254115b156107cb5760405163ba2bbc6b60e01b815260048101859052602481018290527f0000000000000000000000000000000000000000000000000000000000000000604482015260640161072f565b6000806107d6611378565b945050505091508151600003610837576107ee611b6c565b9150815167ffffffffffffffff81111561080a5761080a612cdd565b604051908082528060200260200182016040528015610833578160200160208202803683370190505b5090505b6000805b8351821015610898578783838151811061085757610857612cf3565b60200260200101510315610898578784838151811061087857610878612cf3565b60200260200101510361088d57506001610898565b81600101915061083b565b600487015460028801805460408051602080840282018101909252828152600093909290918301828280156108ec57602002820191906000526020600020905b8154815260200190600101908083116108d8575b50508c5460008f8152600560205260408120805473ffffffffffffffffffffffffffffffffffffffff19908116825560018201805490911690559596506001600160a01b03909116949350915061094890506002830182612974565b506000600382018190556004820181905560059091015583156109d7576006805461097590600190612cca565b8154811061098557610985612cf3565b9060005260206000200154600686815481106109a3576109a3612cf3565b60009182526020909120015560068054806109c0576109c0612d09565b600190038181906000526020600020016000905590555b604051632142170760e11b8152306004820152336024820152604481018c90526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90606401600060405180830381600087803b158015610a4557600080fd5b505af1158015610a59573d6000803e3d6000fd5b505050506000831115610a7057610a708184611bf7565b806001600160a01b0316336001600160a01b03168c7f950733f4c0bf951b8e770f3cc619a4288e7b59b1236d59aeaf2c238488e8ae816000548688604051610aba93929190612d1f565b60405180910390a45050505050505050505050565b60048181548110610adf57600080fd5b600091825260209091200154905081565b6000818152600560209081526040808320815160c08101835281546001600160a01b0390811682526001830154168185015260028201805484518187028101870186528181528796939586019390929190830182828015610b7057602002820191906000526020600020905b815481526020019060010190808311610b5c575b505050505081526020016003820154815260200160048201548152602001600582015481525050905080608001519150610ba9836119ad565b610bb39083612d48565b9392505050565b610c056040518060c0016040528060006001600160a01b0316815260200160006001600160a01b03168152602001606081526020016000815260200160008152602001600081525090565b600082815260056020908152604091829020825160c08101845281546001600160a01b0390811682526001830154168184015260028201805485518186028101860187528181529295939493860193830182828015610c8357602002820191906000526020600020905b815481526020019060010190808311610c6f575b5050505050815260200160038201548152602001600482015481526020016005820154815250509050919050565b600254600003610cd45760405163afb0be3360e01b815260040160405180910390fd5b6000818152600560205260409020600381015415610d085760405163b4817ce760e01b81526004810183905260240161072f565b6006547f00000000000000000000000000000000000000000000000000000000000000008103610d6d5760405163fd20861560e01b81527f0000000000000000000000000000000000000000000000000000000000000000600482015260240161072f565b60405163ef0e239b60e01b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ef0e239b90602401600060405180830381865afa158015610dd5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dfd9190810190612e79565b9050806080015163ffffffff167f000000000000000000000000000000000000000000000000000000000000000014610e4c57604051637ad404bf60e11b81526004810185905260240161072f565b7f000000000000000000000000000000000000000000000000000000000000000015801590610e9f575080604001517f000000000000000000000000000000000000000000000000000000000000000014155b15610ec057604051637ad404bf60e11b81526004810185905260240161072f565b60007f0000000000000000000000000000000000000000000000000000000000000000118015610f1a5750806060015163ffffffff167f000000000000000000000000000000000000000000000000000000000000000014155b15610f3b57604051637ad404bf60e11b81526004810185905260240161072f565b60048160c001516005811115610f5357610f53612c27565b14610f92578060c001516005811115610f6e57610f6e612c27565b604051633c053f9d60e21b815260048101919091526024810185905260440161072f565b600081602001516001600160a01b0316803b806020016040519081016040528181526000908060200190933c805190602001209050807f00000000000000000000000000000000000000000000000000000000000000001461101757602082015160405162a2307960e51b81526001600160a01b03909116600482015260240161072f565b60045480156110e05760e08301515181811461104957604051637ad404bf60e11b81526004810188905260240161072f565b60005b818110156110dd578460e00151818151811061106a5761106a612cf3565b602002602001015163ffffffff166004828154811061108b5761108b612cf3565b9060005260206000200154146110d557600481815481106110ae576110ae612cf3565b9060005260206000200154604051632ab10b0b60e21b815260040161072f91815260200190565b60010161104c565b50505b6111018684600001516bffffffffffffffffffffffff168560e00151611c81565b602083015185546001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff199182161787556001870180549091163317905560009061114790611f02565b805190915061115f9060028801906020840190612995565b50426003870155600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01879055604051632142170760e11b8152336004820152306024820152604481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342842e0e90606401600060405180830381600087803b15801561120957600080fd5b505af115801561121d573d6000803e3d6000fd5b5050505083602001516001600160a01b0316336001600160a01b0316887faa6b005b4958114a0c90492461c24af6525ae0178db7fbf44125ae9217c69ccb6000548560405161126d929190612f57565b60405180910390a450505050505050565b606060048054806020026020016040519081016040528092919081815260200182805480156112cc57602002820191906000526020600020905b8154815260200190600101908083116112b8575b5050505050905090565b6000816001546112e69190612d48565b90506000826002546112f89190612d48565b6001839055600281905590506113307f0000000000000000000000000000000000000000000000000000000000000000333086611f13565b604080518481526020810184905290810182905233907f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e9060600160405180910390a2505050565b6060806060806060600080600080600080600080611394611f9d565b97509750975097509750975097509750606080845167ffffffffffffffff8111156113c1576113c1612cdd565b6040519080825280602002602001820160405280156113ea578160200160208202803683370190505b509a506000891561177d578967ffffffffffffffff81111561140e5761140e612cdd565b604051908082528060200260200182016040528015611437578160200160208202803683370190505b5092508967ffffffffffffffff81111561145357611453612cdd565b60405190808252806020026020018201604052801561147c578160200160208202803683370190505b5091508a8911156116865760008060015b8c811015611579578b8e8b83815181106114a9576114a9612cf3565b60200260200101516114bb9190612f70565b6114c59190612f87565b92506114d18383612d48565b91508a81815181106114e5576114e5612cf3565b602002602001015193508a818151811061150157611501612cf3565b602002602001015186828151811061151b5761151b612cf3565b6020026020010181815250508285828151811061153a5761153a612cf3565b6020026020010181815250508260056000868152602001908152602001600020600401600082825461156c9190612d48565b909155505060010161148d565b508a8d8a60008151811061158f5761158f612cf3565b60200260200101516115a19190612f70565b6115ab9190612f87565b91506115b78282612d48565b9050896000815181106115cc576115cc612cf3565b60200260200101519250896000815181106115e9576115e9612cf3565b60200260200101518560008151811061160457611604612cf3565b602002602001018181525050808d111561162f57611622818e612cca565b61162c9083612d48565b91505b818460008151811061164357611643612cf3565b602002602001018181525050816005600085815260200190815260200160002060040160008282546116759190612d48565b9091555060009d5061177792505050565b60005b8a811015611769578881815181106116a3576116a3612cf3565b602002602001015191508881815181106116bf576116bf612cf3565b60200260200101518482815181106116d9576116d9612cf3565b6020026020010181815250508781815181106116f7576116f7612cf3565b602002602001015183828151811061171157611711612cf3565b60200260200101818152505087818151811061172f5761172f612cf3565b602002602001015160056000848152602001908152602001600020600401600082825461175c9190612d48565b9091555050600101611689565b50611774898c612cca565b9a505b60028b90555b855115611997576000995060005b8651811015611930578681815181106117a6576117a6612cf3565b602002602001015191508581815181106117c2576117c2612cf3565b60200260200101516005600084815260200190815260200160002060020190805190602001906117f3929190612995565b50600085828151811061180857611808612cf3565b602002602001015111156119155784818151811061182857611828612cf3565b602002602001015160056000848152602001908152602001600020600501546118519190612d48565b85828151811061186357611863612cf3565b60200260200101818152505084818151811061188157611881612cf3565b602002602001015160056000848152602001908152602001600020600501819055507f00000000000000000000000000000000000000000000000000000000000000008582815181106118d6576118d6612cf3565b6020026020010151111561191057818d82815181106118f7576118f7612cf3565b60209081029190910101528a61190c81612fa9565b9b50505b611928565b6000828152600560208190526040822001555b60010161178b565b508915611942576119428c858c61239b565b42600355600054611954816001612d48565b60005560405181907f06a98bdd4732811ab3214800ed1ada2dce66a2bce301d250c3ca7d6b461ee6669061198d908f9088908890612fc2565b60405180910390a2505b50939e929d509b50919950969750505050505050565b6000806000806000806119be611f9d565b5050509450945094509450945060005b84811015611a5e57878382815181106119e9576119e9612cf3565b602002602001015103611a565785841115611a35578386838381518110611a1257611a12612cf3565b6020026020010151611a249190612f70565b611a2e9190612f87565b9650611a5e565b818181518110611a4757611a47612cf3565b60200260200101519650611a5e565b6001016119ce565b505050505050919050565b6000818152600560209081526040808320815160c08101835281546001600160a01b0390811682526001830154168185015260028201805484518187028101870186528181528796939586019390929190830182828015611ae957602002820191906000526020600020905b815481526020019060010190808311611ad5575b50505050508152602001600382015481526020016004820154815260200160058201548152505090507f00000000000000000000000000000000000000000000000000000000000000008160a001511115611b475760029150611b56565b606081015115611b5657600191505b50919050565b60068181548110610adf57600080fd5b606060068054806020026020016040519081016040528092919081815260200182805480156112cc57602002820191906000526020600020908154815260200190600101908083116112b8575050505050905090565b60007f0000000000000000000000000000000000000000000000000000000000000000600354611bf29190612d48565b905090565b8060016000828254611c099190612cca565b90915550611c3a90507f00000000000000000000000000000000000000000000000000000000000000008383612760565b816001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436482604051611c7591815260200190565b60405180910390a25050565b604051633cebfa4f60e01b81526004810184905260009081906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633cebfa4f906024016040805180830381865afa158015611cea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0e9190612ff7565b91509150816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614611d9757604051630b80380d60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301528316602482015260440161072f565b7f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff8216811115611dfe57604051632b30b24760e21b81526bffffffffffffffffffffffff831660048201526024810182905260440161072f565b60005b8451811015611ef95760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166375c1f93489888581518110611e4e57611e4e612cf3565b60200260200101516040518363ffffffff1660e01b8152600401611e8292919091825263ffffffff16602082015260400190565b602060405180830381865afa158015611e9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec3919061302c565b905082811015611ef057604051632b30b24760e21b8152600481018290526024810184905260440161072f565b50600101611e01565b50505050505050565b6060611f0d826127e3565b92915050565b60006040516323b872dd60e01b6000528460045283602452826044526020600060646000808a5af13d15601f3d1160016000511416171691506000606052806040525080611f965760405163abae3d6d60e01b81526001600160a01b0380871660048301528086166024830152841660448201526064810183905260840161072f565b5050505050565b600080600060608060608060606000600354905060025498507f00000000000000000000000000000000000000000000000000000000000000008142611fe39190612cca565b10158015611ff15750600089115b15612390576006548067ffffffffffffffff81111561201257612012612cdd565b60405190808252806020026020018201604052801561203b578160200160208202803683370190505b5094508067ffffffffffffffff81111561205757612057612cdd565b604051908082528060200260200182016040528015612080578160200160208202803683370190505b5096508067ffffffffffffffff81111561209c5761209c612cdd565b6040519080825280602002602001820160405280156120c5578160200160208202803683370190505b5095508067ffffffffffffffff8111156120e1576120e1612cdd565b60405190808252806020026020018201604052801561211457816020015b60608152602001906001900390816120ff5790505b5093508067ffffffffffffffff81111561213057612130612cdd565b604051908082528060200260200182016040528015612159578160200160208202803683370190505b50925060005b8181101561238d576006818154811061217a5761217a612cf3565b906000526020600020015486828151811061219757612197612cf3565b6020026020010181815250506000600560008884815181106121bb576121bb612cf3565b602090810291909101810151825281019190915260400160002080549091506121ec906001600160a01b0316611f02565b8683815181106121fe576121fe612cf3565b6020908102919091010152600381015484908181111561221c578091505b6122268242612cca565b905060006122a089868151811061223f5761223f612cf3565b60200260200101518560020180548060200260200160405190810160405280929190818152602001828054801561229557602002820191906000526020600020905b815481526020019060010190808311612281575b50505050508461288b565b9050801561235e576122d2827f0000000000000000000000000000000000000000000000000000000000000000612f70565b8b8f815181106122e4576122e4612cf3565b6020026020010181815250508a8e8151811061230257612302612cf3565b60200260200101518d6123159190612d48565b9c5089858151811061232957612329612cf3565b60200260200101518c8f8151811061234357612343612cf3565b60209081029190910101526123578e612fa9565b9d5061237e565b8188868151811061237157612371612cf3565b6020026020010181815250505b5050505080600101905061215f565b50505b509091929394959697565b825160008267ffffffffffffffff8111156123b8576123b8612cdd565b6040519080825280602002602001820160405280156123e1578160200160208202803683370190505b50905060008367ffffffffffffffff8111156123ff576123ff612cdd565b604051908082528060200260200182016040528015612428578160200160208202803683370190505b50905060008467ffffffffffffffff81111561244657612446612cdd565b60405190808252806020026020018201604052801561246f578160200160208202803683370190505b50905060008567ffffffffffffffff81111561248d5761248d612cdd565b6040519080825280602002602001820160405280156124b6578160200160208202803683370190505b50905060008667ffffffffffffffff8111156124d4576124d4612cdd565b6040519080825280602002602001820160405280156124fd578160200160208202803683370190505b50905060008060005b8881101561265d5760008c828151811061252257612522612cf3565b60200260200101511115612655578b818151811061254257612542612cf3565b602002602001015191508188848151811061255f5761255f612cf3565b6020908102919091018101919091526000838152600590915260409020600181015488516001600160a01b03909116908990869081106125a1576125a1612cf3565b6001600160a01b039283166020918202929092010152815488519116908890869081106125d0576125d0612cf3565b60200260200101906001600160a01b031690816001600160a01b0316815250508b828151811061260257612602612cf3565b602002602001015186858151811061261c5761261c612cf3565b6020026020010181815250508185858151811061263b5761263b612cf3565b60209081029190910101528361265081612fa9565b945050505b600101612506565b50885b8015612712578861267081613045565b99506000905084612682600184612cca565b8151811061269257612692612cf3565b6020026020010151905060068a815481106126af576126af612cf3565b9060005260206000200154600682815481106126cd576126cd612cf3565b60009182526020909120015560068054806126ea576126ea612d09565b60019003818190600052602060002001600090559055508061270b90613045565b9050612660565b506000547fd19a3d42ed383465e4058c322d9411aeac76ddb8454d22e139fc99808bd569528888888860405161274b9493929190613096565b60405180910390a25050505050505050505050565b600060405163a9059cbb60e01b6000528360045282602452602060006044600080895af13d15601f3d11600160005114161716915060006060528060405250806127dd5760405163abae3d6d60e01b81526001600160a01b038086166004830152306024830152841660448201526064810183905260840161072f565b50505050565b60408051600180825281830190925260609160208083019080368337019050509050816001600160a01b031663affed0e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612843573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612867919061302c565b8160008151811061287a5761287a612cf3565b602002602001018181525050919050565b60006128988484846128a0565b949350505050565b600080821180156128e45750826000815181106128bf576128bf612cf3565b6020026020010151846000815181106128da576128da612cf3565b6020026020010151115b15610bb357600082846000815181106128ff576128ff612cf3565b60200260200101518660008151811061291a5761291a612cf3565b602002602001015161292c9190612cca565b61293e90670de0b6b3a7640000612f70565b6129489190612f87565b7f0000000000000000000000000000000000000000000000000000000000000000111595945050505050565b508054600082559060005260206000209081019061299291906129e0565b50565b8280548282559060005260206000209081019282156129d0579160200282015b828111156129d05782518255916020019190600101906129b5565b506129dc9291506129e0565b5090565b5b808211156129dc57600081556001016129e1565b6001600160a01b038116811461299257600080fd5b600080600080600060808688031215612a2257600080fd5b8535612a2d816129f5565b94506020860135612a3d816129f5565b935060408601359250606086013567ffffffffffffffff80821115612a6157600080fd5b818801915088601f830112612a7557600080fd5b813581811115612a8457600080fd5b896020828501011115612a9657600080fd5b9699959850939650602001949392505050565b600060208284031215612abb57600080fd5b5035919050565b60008151808452602080850194506020840160005b83811015612af357815187529582019590820190600101612ad7565b509495945050505050565b6020815260006001600160a01b0380845116602084015280602085015116604084015250604083015160c06060840152612b3b60e0840182612ac2565b905060608401516080840152608084015160a084015260a084015160c08401528091505092915050565b602081526000610bb36020830184612ac2565b60a081526000612b8b60a0830188612ac2565b6020838203818501528188518084528284019150828160051b850101838b0160005b83811015612bdb57601f19878403018552612bc9838351612ac2565b94860194925090850190600101612bad565b50508681036040880152612bef818b612ac2565b9450505050508281036060840152612c078186612ac2565b90508281036080840152612c1b8185612ac2565b98975050505050505050565b634e487b7160e01b600052602160045260246000fd5b6020810160038310612c5f57634e487b7160e01b600052602160045260246000fd5b91905290565b60006020808352835180602085015260005b81811015612c9357858101830151858201604001528201612c77565b506000604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611f0d57611f0d612cb4565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b838152606060208201526000612d386060830185612ac2565b9050826040830152949350505050565b80820180821115611f0d57611f0d612cb4565b604051610100810167ffffffffffffffff81118282101715612d7f57612d7f612cdd565b60405290565b80516bffffffffffffffffffffffff81168114612da157600080fd5b919050565b8051612da1816129f5565b805163ffffffff81168114612da157600080fd5b805160068110612da157600080fd5b600082601f830112612de557600080fd5b8151602067ffffffffffffffff80831115612e0257612e02612cdd565b8260051b604051601f19603f83011681018181108482111715612e2757612e27612cdd565b6040529384526020818701810194908101925087851115612e4757600080fd5b6020870191505b84821015612e6e57612e5f82612db1565b83529183019190830190612e4e565b979650505050505050565b600060208284031215612e8b57600080fd5b815167ffffffffffffffff80821115612ea357600080fd5b908301906101008286031215612eb857600080fd5b612ec0612d5b565b612ec983612d85565b8152612ed760208401612da6565b602082015260408301516040820152612ef260608401612db1565b6060820152612f0360808401612db1565b6080820152612f1460a08401612db1565b60a0820152612f2560c08401612dc5565b60c082015260e083015182811115612f3c57600080fd5b612f4887828601612dd4565b60e08301525095945050505050565b8281526040602082015260006128986040830184612ac2565b8082028115828204841417611f0d57611f0d612cb4565b600082612fa457634e487b7160e01b600052601260045260246000fd5b500490565b600060018201612fbb57612fbb612cb4565b5060010190565b838152606060208201526000612fdb6060830185612ac2565b8281036040840152612fed8185612ac2565b9695505050505050565b6000806040838503121561300a57600080fd5b8251613015816129f5565b915061302360208401612d85565b90509250929050565b60006020828403121561303e57600080fd5b5051919050565b60008161305457613054612cb4565b506000190190565b60008151808452602080850194506020840160005b83811015612af35781516001600160a01b031687529582019590820190600101613071565b6080815260006130a96080830187612ac2565b82810360208401526130bb818761305c565b905082810360408401526130cf818661305c565b90508281036060840152612e6e8185612ac256fea26469706673582212201cbb3243bdf2246a74a754c4b24385dc52b256b192f67778a3b3a76648374a5864736f6c63430008170033",
1272
+ "linkReferences": {},
1273
+ "deployedLinkReferences": {}
1274
+ }
contracts/Vault.json ADDED
@@ -0,0 +1,1186 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "contractName": "",
3
+ "abi": [
4
+ {
5
+ "inputs": [
6
+ {
7
+ "internalType": "contract IAuthorizer",
8
+ "name": "authorizer",
9
+ "type": "address"
10
+ },
11
+ {
12
+ "internalType": "contract IWETH",
13
+ "name": "weth",
14
+ "type": "address"
15
+ },
16
+ {
17
+ "internalType": "uint256",
18
+ "name": "pauseWindowDuration",
19
+ "type": "uint256"
20
+ },
21
+ {
22
+ "internalType": "uint256",
23
+ "name": "bufferPeriodDuration",
24
+ "type": "uint256"
25
+ }
26
+ ],
27
+ "stateMutability": "nonpayable",
28
+ "type": "constructor"
29
+ },
30
+ {
31
+ "anonymous": false,
32
+ "inputs": [
33
+ {
34
+ "indexed": true,
35
+ "internalType": "contract IAuthorizer",
36
+ "name": "newAuthorizer",
37
+ "type": "address"
38
+ }
39
+ ],
40
+ "name": "AuthorizerChanged",
41
+ "type": "event"
42
+ },
43
+ {
44
+ "anonymous": false,
45
+ "inputs": [
46
+ {
47
+ "indexed": true,
48
+ "internalType": "contract IERC20",
49
+ "name": "token",
50
+ "type": "address"
51
+ },
52
+ {
53
+ "indexed": true,
54
+ "internalType": "address",
55
+ "name": "sender",
56
+ "type": "address"
57
+ },
58
+ {
59
+ "indexed": false,
60
+ "internalType": "address",
61
+ "name": "recipient",
62
+ "type": "address"
63
+ },
64
+ {
65
+ "indexed": false,
66
+ "internalType": "uint256",
67
+ "name": "amount",
68
+ "type": "uint256"
69
+ }
70
+ ],
71
+ "name": "ExternalBalanceTransfer",
72
+ "type": "event"
73
+ },
74
+ {
75
+ "anonymous": false,
76
+ "inputs": [
77
+ {
78
+ "indexed": true,
79
+ "internalType": "contract IFlashLoanRecipient",
80
+ "name": "recipient",
81
+ "type": "address"
82
+ },
83
+ {
84
+ "indexed": true,
85
+ "internalType": "contract IERC20",
86
+ "name": "token",
87
+ "type": "address"
88
+ },
89
+ {
90
+ "indexed": false,
91
+ "internalType": "uint256",
92
+ "name": "amount",
93
+ "type": "uint256"
94
+ },
95
+ {
96
+ "indexed": false,
97
+ "internalType": "uint256",
98
+ "name": "feeAmount",
99
+ "type": "uint256"
100
+ }
101
+ ],
102
+ "name": "FlashLoan",
103
+ "type": "event"
104
+ },
105
+ {
106
+ "anonymous": false,
107
+ "inputs": [
108
+ {
109
+ "indexed": true,
110
+ "internalType": "address",
111
+ "name": "user",
112
+ "type": "address"
113
+ },
114
+ {
115
+ "indexed": true,
116
+ "internalType": "contract IERC20",
117
+ "name": "token",
118
+ "type": "address"
119
+ },
120
+ {
121
+ "indexed": false,
122
+ "internalType": "int256",
123
+ "name": "delta",
124
+ "type": "int256"
125
+ }
126
+ ],
127
+ "name": "InternalBalanceChanged",
128
+ "type": "event"
129
+ },
130
+ {
131
+ "anonymous": false,
132
+ "inputs": [
133
+ {
134
+ "indexed": false,
135
+ "internalType": "bool",
136
+ "name": "paused",
137
+ "type": "bool"
138
+ }
139
+ ],
140
+ "name": "PausedStateChanged",
141
+ "type": "event"
142
+ },
143
+ {
144
+ "anonymous": false,
145
+ "inputs": [
146
+ {
147
+ "indexed": true,
148
+ "internalType": "bytes32",
149
+ "name": "poolId",
150
+ "type": "bytes32"
151
+ },
152
+ {
153
+ "indexed": true,
154
+ "internalType": "address",
155
+ "name": "liquidityProvider",
156
+ "type": "address"
157
+ },
158
+ {
159
+ "indexed": false,
160
+ "internalType": "contract IERC20[]",
161
+ "name": "tokens",
162
+ "type": "address[]"
163
+ },
164
+ {
165
+ "indexed": false,
166
+ "internalType": "int256[]",
167
+ "name": "deltas",
168
+ "type": "int256[]"
169
+ },
170
+ {
171
+ "indexed": false,
172
+ "internalType": "uint256[]",
173
+ "name": "protocolFeeAmounts",
174
+ "type": "uint256[]"
175
+ }
176
+ ],
177
+ "name": "PoolBalanceChanged",
178
+ "type": "event"
179
+ },
180
+ {
181
+ "anonymous": false,
182
+ "inputs": [
183
+ {
184
+ "indexed": true,
185
+ "internalType": "bytes32",
186
+ "name": "poolId",
187
+ "type": "bytes32"
188
+ },
189
+ {
190
+ "indexed": true,
191
+ "internalType": "address",
192
+ "name": "assetManager",
193
+ "type": "address"
194
+ },
195
+ {
196
+ "indexed": true,
197
+ "internalType": "contract IERC20",
198
+ "name": "token",
199
+ "type": "address"
200
+ },
201
+ {
202
+ "indexed": false,
203
+ "internalType": "int256",
204
+ "name": "cashDelta",
205
+ "type": "int256"
206
+ },
207
+ {
208
+ "indexed": false,
209
+ "internalType": "int256",
210
+ "name": "managedDelta",
211
+ "type": "int256"
212
+ }
213
+ ],
214
+ "name": "PoolBalanceManaged",
215
+ "type": "event"
216
+ },
217
+ {
218
+ "anonymous": false,
219
+ "inputs": [
220
+ {
221
+ "indexed": true,
222
+ "internalType": "bytes32",
223
+ "name": "poolId",
224
+ "type": "bytes32"
225
+ },
226
+ {
227
+ "indexed": true,
228
+ "internalType": "address",
229
+ "name": "poolAddress",
230
+ "type": "address"
231
+ },
232
+ {
233
+ "indexed": false,
234
+ "internalType": "enum IVault.PoolSpecialization",
235
+ "name": "specialization",
236
+ "type": "uint8"
237
+ }
238
+ ],
239
+ "name": "PoolRegistered",
240
+ "type": "event"
241
+ },
242
+ {
243
+ "anonymous": false,
244
+ "inputs": [
245
+ {
246
+ "indexed": true,
247
+ "internalType": "address",
248
+ "name": "relayer",
249
+ "type": "address"
250
+ },
251
+ {
252
+ "indexed": true,
253
+ "internalType": "address",
254
+ "name": "sender",
255
+ "type": "address"
256
+ },
257
+ {
258
+ "indexed": false,
259
+ "internalType": "bool",
260
+ "name": "approved",
261
+ "type": "bool"
262
+ }
263
+ ],
264
+ "name": "RelayerApprovalChanged",
265
+ "type": "event"
266
+ },
267
+ {
268
+ "anonymous": false,
269
+ "inputs": [
270
+ {
271
+ "indexed": true,
272
+ "internalType": "bytes32",
273
+ "name": "poolId",
274
+ "type": "bytes32"
275
+ },
276
+ {
277
+ "indexed": true,
278
+ "internalType": "contract IERC20",
279
+ "name": "tokenIn",
280
+ "type": "address"
281
+ },
282
+ {
283
+ "indexed": true,
284
+ "internalType": "contract IERC20",
285
+ "name": "tokenOut",
286
+ "type": "address"
287
+ },
288
+ {
289
+ "indexed": false,
290
+ "internalType": "uint256",
291
+ "name": "amountIn",
292
+ "type": "uint256"
293
+ },
294
+ {
295
+ "indexed": false,
296
+ "internalType": "uint256",
297
+ "name": "amountOut",
298
+ "type": "uint256"
299
+ }
300
+ ],
301
+ "name": "Swap",
302
+ "type": "event"
303
+ },
304
+ {
305
+ "anonymous": false,
306
+ "inputs": [
307
+ {
308
+ "indexed": true,
309
+ "internalType": "bytes32",
310
+ "name": "poolId",
311
+ "type": "bytes32"
312
+ },
313
+ {
314
+ "indexed": false,
315
+ "internalType": "contract IERC20[]",
316
+ "name": "tokens",
317
+ "type": "address[]"
318
+ }
319
+ ],
320
+ "name": "TokensDeregistered",
321
+ "type": "event"
322
+ },
323
+ {
324
+ "anonymous": false,
325
+ "inputs": [
326
+ {
327
+ "indexed": true,
328
+ "internalType": "bytes32",
329
+ "name": "poolId",
330
+ "type": "bytes32"
331
+ },
332
+ {
333
+ "indexed": false,
334
+ "internalType": "contract IERC20[]",
335
+ "name": "tokens",
336
+ "type": "address[]"
337
+ },
338
+ {
339
+ "indexed": false,
340
+ "internalType": "address[]",
341
+ "name": "assetManagers",
342
+ "type": "address[]"
343
+ }
344
+ ],
345
+ "name": "TokensRegistered",
346
+ "type": "event"
347
+ },
348
+ {
349
+ "inputs": [],
350
+ "name": "WETH",
351
+ "outputs": [
352
+ {
353
+ "internalType": "contract IWETH",
354
+ "name": "",
355
+ "type": "address"
356
+ }
357
+ ],
358
+ "stateMutability": "view",
359
+ "type": "function"
360
+ },
361
+ {
362
+ "inputs": [
363
+ {
364
+ "internalType": "enum IVault.SwapKind",
365
+ "name": "kind",
366
+ "type": "uint8"
367
+ },
368
+ {
369
+ "components": [
370
+ {
371
+ "internalType": "bytes32",
372
+ "name": "poolId",
373
+ "type": "bytes32"
374
+ },
375
+ {
376
+ "internalType": "uint256",
377
+ "name": "assetInIndex",
378
+ "type": "uint256"
379
+ },
380
+ {
381
+ "internalType": "uint256",
382
+ "name": "assetOutIndex",
383
+ "type": "uint256"
384
+ },
385
+ {
386
+ "internalType": "uint256",
387
+ "name": "amount",
388
+ "type": "uint256"
389
+ },
390
+ {
391
+ "internalType": "bytes",
392
+ "name": "userData",
393
+ "type": "bytes"
394
+ }
395
+ ],
396
+ "internalType": "struct IVault.BatchSwapStep[]",
397
+ "name": "swaps",
398
+ "type": "tuple[]"
399
+ },
400
+ {
401
+ "internalType": "contract IAsset[]",
402
+ "name": "assets",
403
+ "type": "address[]"
404
+ },
405
+ {
406
+ "components": [
407
+ {
408
+ "internalType": "address",
409
+ "name": "sender",
410
+ "type": "address"
411
+ },
412
+ {
413
+ "internalType": "bool",
414
+ "name": "fromInternalBalance",
415
+ "type": "bool"
416
+ },
417
+ {
418
+ "internalType": "address payable",
419
+ "name": "recipient",
420
+ "type": "address"
421
+ },
422
+ {
423
+ "internalType": "bool",
424
+ "name": "toInternalBalance",
425
+ "type": "bool"
426
+ }
427
+ ],
428
+ "internalType": "struct IVault.FundManagement",
429
+ "name": "funds",
430
+ "type": "tuple"
431
+ },
432
+ {
433
+ "internalType": "int256[]",
434
+ "name": "limits",
435
+ "type": "int256[]"
436
+ },
437
+ {
438
+ "internalType": "uint256",
439
+ "name": "deadline",
440
+ "type": "uint256"
441
+ }
442
+ ],
443
+ "name": "batchSwap",
444
+ "outputs": [
445
+ {
446
+ "internalType": "int256[]",
447
+ "name": "assetDeltas",
448
+ "type": "int256[]"
449
+ }
450
+ ],
451
+ "stateMutability": "payable",
452
+ "type": "function"
453
+ },
454
+ {
455
+ "inputs": [
456
+ {
457
+ "internalType": "bytes32",
458
+ "name": "poolId",
459
+ "type": "bytes32"
460
+ },
461
+ {
462
+ "internalType": "contract IERC20[]",
463
+ "name": "tokens",
464
+ "type": "address[]"
465
+ }
466
+ ],
467
+ "name": "deregisterTokens",
468
+ "outputs": [],
469
+ "stateMutability": "nonpayable",
470
+ "type": "function"
471
+ },
472
+ {
473
+ "inputs": [
474
+ {
475
+ "internalType": "bytes32",
476
+ "name": "poolId",
477
+ "type": "bytes32"
478
+ },
479
+ {
480
+ "internalType": "address",
481
+ "name": "sender",
482
+ "type": "address"
483
+ },
484
+ {
485
+ "internalType": "address payable",
486
+ "name": "recipient",
487
+ "type": "address"
488
+ },
489
+ {
490
+ "components": [
491
+ {
492
+ "internalType": "contract IAsset[]",
493
+ "name": "assets",
494
+ "type": "address[]"
495
+ },
496
+ {
497
+ "internalType": "uint256[]",
498
+ "name": "minAmountsOut",
499
+ "type": "uint256[]"
500
+ },
501
+ {
502
+ "internalType": "bytes",
503
+ "name": "userData",
504
+ "type": "bytes"
505
+ },
506
+ {
507
+ "internalType": "bool",
508
+ "name": "toInternalBalance",
509
+ "type": "bool"
510
+ }
511
+ ],
512
+ "internalType": "struct IVault.ExitPoolRequest",
513
+ "name": "request",
514
+ "type": "tuple"
515
+ }
516
+ ],
517
+ "name": "exitPool",
518
+ "outputs": [],
519
+ "stateMutability": "nonpayable",
520
+ "type": "function"
521
+ },
522
+ {
523
+ "inputs": [
524
+ {
525
+ "internalType": "contract IFlashLoanRecipient",
526
+ "name": "recipient",
527
+ "type": "address"
528
+ },
529
+ {
530
+ "internalType": "contract IERC20[]",
531
+ "name": "tokens",
532
+ "type": "address[]"
533
+ },
534
+ {
535
+ "internalType": "uint256[]",
536
+ "name": "amounts",
537
+ "type": "uint256[]"
538
+ },
539
+ {
540
+ "internalType": "bytes",
541
+ "name": "userData",
542
+ "type": "bytes"
543
+ }
544
+ ],
545
+ "name": "flashLoan",
546
+ "outputs": [],
547
+ "stateMutability": "nonpayable",
548
+ "type": "function"
549
+ },
550
+ {
551
+ "inputs": [
552
+ {
553
+ "internalType": "bytes4",
554
+ "name": "selector",
555
+ "type": "bytes4"
556
+ }
557
+ ],
558
+ "name": "getActionId",
559
+ "outputs": [
560
+ {
561
+ "internalType": "bytes32",
562
+ "name": "",
563
+ "type": "bytes32"
564
+ }
565
+ ],
566
+ "stateMutability": "view",
567
+ "type": "function"
568
+ },
569
+ {
570
+ "inputs": [],
571
+ "name": "getAuthorizer",
572
+ "outputs": [
573
+ {
574
+ "internalType": "contract IAuthorizer",
575
+ "name": "",
576
+ "type": "address"
577
+ }
578
+ ],
579
+ "stateMutability": "view",
580
+ "type": "function"
581
+ },
582
+ {
583
+ "inputs": [],
584
+ "name": "getDomainSeparator",
585
+ "outputs": [
586
+ {
587
+ "internalType": "bytes32",
588
+ "name": "",
589
+ "type": "bytes32"
590
+ }
591
+ ],
592
+ "stateMutability": "view",
593
+ "type": "function"
594
+ },
595
+ {
596
+ "inputs": [
597
+ {
598
+ "internalType": "address",
599
+ "name": "user",
600
+ "type": "address"
601
+ },
602
+ {
603
+ "internalType": "contract IERC20[]",
604
+ "name": "tokens",
605
+ "type": "address[]"
606
+ }
607
+ ],
608
+ "name": "getInternalBalance",
609
+ "outputs": [
610
+ {
611
+ "internalType": "uint256[]",
612
+ "name": "balances",
613
+ "type": "uint256[]"
614
+ }
615
+ ],
616
+ "stateMutability": "view",
617
+ "type": "function"
618
+ },
619
+ {
620
+ "inputs": [
621
+ {
622
+ "internalType": "address",
623
+ "name": "user",
624
+ "type": "address"
625
+ }
626
+ ],
627
+ "name": "getNextNonce",
628
+ "outputs": [
629
+ {
630
+ "internalType": "uint256",
631
+ "name": "",
632
+ "type": "uint256"
633
+ }
634
+ ],
635
+ "stateMutability": "view",
636
+ "type": "function"
637
+ },
638
+ {
639
+ "inputs": [],
640
+ "name": "getPausedState",
641
+ "outputs": [
642
+ {
643
+ "internalType": "bool",
644
+ "name": "paused",
645
+ "type": "bool"
646
+ },
647
+ {
648
+ "internalType": "uint256",
649
+ "name": "pauseWindowEndTime",
650
+ "type": "uint256"
651
+ },
652
+ {
653
+ "internalType": "uint256",
654
+ "name": "bufferPeriodEndTime",
655
+ "type": "uint256"
656
+ }
657
+ ],
658
+ "stateMutability": "view",
659
+ "type": "function"
660
+ },
661
+ {
662
+ "inputs": [
663
+ {
664
+ "internalType": "bytes32",
665
+ "name": "poolId",
666
+ "type": "bytes32"
667
+ }
668
+ ],
669
+ "name": "getPool",
670
+ "outputs": [
671
+ {
672
+ "internalType": "address",
673
+ "name": "",
674
+ "type": "address"
675
+ },
676
+ {
677
+ "internalType": "enum IVault.PoolSpecialization",
678
+ "name": "",
679
+ "type": "uint8"
680
+ }
681
+ ],
682
+ "stateMutability": "view",
683
+ "type": "function"
684
+ },
685
+ {
686
+ "inputs": [
687
+ {
688
+ "internalType": "bytes32",
689
+ "name": "poolId",
690
+ "type": "bytes32"
691
+ },
692
+ {
693
+ "internalType": "contract IERC20",
694
+ "name": "token",
695
+ "type": "address"
696
+ }
697
+ ],
698
+ "name": "getPoolTokenInfo",
699
+ "outputs": [
700
+ {
701
+ "internalType": "uint256",
702
+ "name": "cash",
703
+ "type": "uint256"
704
+ },
705
+ {
706
+ "internalType": "uint256",
707
+ "name": "managed",
708
+ "type": "uint256"
709
+ },
710
+ {
711
+ "internalType": "uint256",
712
+ "name": "lastChangeBlock",
713
+ "type": "uint256"
714
+ },
715
+ {
716
+ "internalType": "address",
717
+ "name": "assetManager",
718
+ "type": "address"
719
+ }
720
+ ],
721
+ "stateMutability": "view",
722
+ "type": "function"
723
+ },
724
+ {
725
+ "inputs": [
726
+ {
727
+ "internalType": "bytes32",
728
+ "name": "poolId",
729
+ "type": "bytes32"
730
+ }
731
+ ],
732
+ "name": "getPoolTokens",
733
+ "outputs": [
734
+ {
735
+ "internalType": "contract IERC20[]",
736
+ "name": "tokens",
737
+ "type": "address[]"
738
+ },
739
+ {
740
+ "internalType": "uint256[]",
741
+ "name": "balances",
742
+ "type": "uint256[]"
743
+ },
744
+ {
745
+ "internalType": "uint256",
746
+ "name": "lastChangeBlock",
747
+ "type": "uint256"
748
+ }
749
+ ],
750
+ "stateMutability": "view",
751
+ "type": "function"
752
+ },
753
+ {
754
+ "inputs": [],
755
+ "name": "getProtocolFeesCollector",
756
+ "outputs": [
757
+ {
758
+ "internalType": "contract ProtocolFeesCollector",
759
+ "name": "",
760
+ "type": "address"
761
+ }
762
+ ],
763
+ "stateMutability": "view",
764
+ "type": "function"
765
+ },
766
+ {
767
+ "inputs": [
768
+ {
769
+ "internalType": "address",
770
+ "name": "user",
771
+ "type": "address"
772
+ },
773
+ {
774
+ "internalType": "address",
775
+ "name": "relayer",
776
+ "type": "address"
777
+ }
778
+ ],
779
+ "name": "hasApprovedRelayer",
780
+ "outputs": [
781
+ {
782
+ "internalType": "bool",
783
+ "name": "",
784
+ "type": "bool"
785
+ }
786
+ ],
787
+ "stateMutability": "view",
788
+ "type": "function"
789
+ },
790
+ {
791
+ "inputs": [
792
+ {
793
+ "internalType": "bytes32",
794
+ "name": "poolId",
795
+ "type": "bytes32"
796
+ },
797
+ {
798
+ "internalType": "address",
799
+ "name": "sender",
800
+ "type": "address"
801
+ },
802
+ {
803
+ "internalType": "address",
804
+ "name": "recipient",
805
+ "type": "address"
806
+ },
807
+ {
808
+ "components": [
809
+ {
810
+ "internalType": "contract IAsset[]",
811
+ "name": "assets",
812
+ "type": "address[]"
813
+ },
814
+ {
815
+ "internalType": "uint256[]",
816
+ "name": "maxAmountsIn",
817
+ "type": "uint256[]"
818
+ },
819
+ {
820
+ "internalType": "bytes",
821
+ "name": "userData",
822
+ "type": "bytes"
823
+ },
824
+ {
825
+ "internalType": "bool",
826
+ "name": "fromInternalBalance",
827
+ "type": "bool"
828
+ }
829
+ ],
830
+ "internalType": "struct IVault.JoinPoolRequest",
831
+ "name": "request",
832
+ "type": "tuple"
833
+ }
834
+ ],
835
+ "name": "joinPool",
836
+ "outputs": [],
837
+ "stateMutability": "payable",
838
+ "type": "function"
839
+ },
840
+ {
841
+ "inputs": [
842
+ {
843
+ "components": [
844
+ {
845
+ "internalType": "enum IVault.PoolBalanceOpKind",
846
+ "name": "kind",
847
+ "type": "uint8"
848
+ },
849
+ {
850
+ "internalType": "bytes32",
851
+ "name": "poolId",
852
+ "type": "bytes32"
853
+ },
854
+ {
855
+ "internalType": "contract IERC20",
856
+ "name": "token",
857
+ "type": "address"
858
+ },
859
+ {
860
+ "internalType": "uint256",
861
+ "name": "amount",
862
+ "type": "uint256"
863
+ }
864
+ ],
865
+ "internalType": "struct IVault.PoolBalanceOp[]",
866
+ "name": "ops",
867
+ "type": "tuple[]"
868
+ }
869
+ ],
870
+ "name": "managePoolBalance",
871
+ "outputs": [],
872
+ "stateMutability": "nonpayable",
873
+ "type": "function"
874
+ },
875
+ {
876
+ "inputs": [
877
+ {
878
+ "components": [
879
+ {
880
+ "internalType": "enum IVault.UserBalanceOpKind",
881
+ "name": "kind",
882
+ "type": "uint8"
883
+ },
884
+ {
885
+ "internalType": "contract IAsset",
886
+ "name": "asset",
887
+ "type": "address"
888
+ },
889
+ {
890
+ "internalType": "uint256",
891
+ "name": "amount",
892
+ "type": "uint256"
893
+ },
894
+ {
895
+ "internalType": "address",
896
+ "name": "sender",
897
+ "type": "address"
898
+ },
899
+ {
900
+ "internalType": "address payable",
901
+ "name": "recipient",
902
+ "type": "address"
903
+ }
904
+ ],
905
+ "internalType": "struct IVault.UserBalanceOp[]",
906
+ "name": "ops",
907
+ "type": "tuple[]"
908
+ }
909
+ ],
910
+ "name": "manageUserBalance",
911
+ "outputs": [],
912
+ "stateMutability": "payable",
913
+ "type": "function"
914
+ },
915
+ {
916
+ "inputs": [
917
+ {
918
+ "internalType": "enum IVault.SwapKind",
919
+ "name": "kind",
920
+ "type": "uint8"
921
+ },
922
+ {
923
+ "components": [
924
+ {
925
+ "internalType": "bytes32",
926
+ "name": "poolId",
927
+ "type": "bytes32"
928
+ },
929
+ {
930
+ "internalType": "uint256",
931
+ "name": "assetInIndex",
932
+ "type": "uint256"
933
+ },
934
+ {
935
+ "internalType": "uint256",
936
+ "name": "assetOutIndex",
937
+ "type": "uint256"
938
+ },
939
+ {
940
+ "internalType": "uint256",
941
+ "name": "amount",
942
+ "type": "uint256"
943
+ },
944
+ {
945
+ "internalType": "bytes",
946
+ "name": "userData",
947
+ "type": "bytes"
948
+ }
949
+ ],
950
+ "internalType": "struct IVault.BatchSwapStep[]",
951
+ "name": "swaps",
952
+ "type": "tuple[]"
953
+ },
954
+ {
955
+ "internalType": "contract IAsset[]",
956
+ "name": "assets",
957
+ "type": "address[]"
958
+ },
959
+ {
960
+ "components": [
961
+ {
962
+ "internalType": "address",
963
+ "name": "sender",
964
+ "type": "address"
965
+ },
966
+ {
967
+ "internalType": "bool",
968
+ "name": "fromInternalBalance",
969
+ "type": "bool"
970
+ },
971
+ {
972
+ "internalType": "address payable",
973
+ "name": "recipient",
974
+ "type": "address"
975
+ },
976
+ {
977
+ "internalType": "bool",
978
+ "name": "toInternalBalance",
979
+ "type": "bool"
980
+ }
981
+ ],
982
+ "internalType": "struct IVault.FundManagement",
983
+ "name": "funds",
984
+ "type": "tuple"
985
+ }
986
+ ],
987
+ "name": "queryBatchSwap",
988
+ "outputs": [
989
+ {
990
+ "internalType": "int256[]",
991
+ "name": "",
992
+ "type": "int256[]"
993
+ }
994
+ ],
995
+ "stateMutability": "nonpayable",
996
+ "type": "function"
997
+ },
998
+ {
999
+ "inputs": [
1000
+ {
1001
+ "internalType": "enum IVault.PoolSpecialization",
1002
+ "name": "specialization",
1003
+ "type": "uint8"
1004
+ }
1005
+ ],
1006
+ "name": "registerPool",
1007
+ "outputs": [
1008
+ {
1009
+ "internalType": "bytes32",
1010
+ "name": "",
1011
+ "type": "bytes32"
1012
+ }
1013
+ ],
1014
+ "stateMutability": "nonpayable",
1015
+ "type": "function"
1016
+ },
1017
+ {
1018
+ "inputs": [
1019
+ {
1020
+ "internalType": "bytes32",
1021
+ "name": "poolId",
1022
+ "type": "bytes32"
1023
+ },
1024
+ {
1025
+ "internalType": "contract IERC20[]",
1026
+ "name": "tokens",
1027
+ "type": "address[]"
1028
+ },
1029
+ {
1030
+ "internalType": "address[]",
1031
+ "name": "assetManagers",
1032
+ "type": "address[]"
1033
+ }
1034
+ ],
1035
+ "name": "registerTokens",
1036
+ "outputs": [],
1037
+ "stateMutability": "nonpayable",
1038
+ "type": "function"
1039
+ },
1040
+ {
1041
+ "inputs": [
1042
+ {
1043
+ "internalType": "contract IAuthorizer",
1044
+ "name": "newAuthorizer",
1045
+ "type": "address"
1046
+ }
1047
+ ],
1048
+ "name": "setAuthorizer",
1049
+ "outputs": [],
1050
+ "stateMutability": "nonpayable",
1051
+ "type": "function"
1052
+ },
1053
+ {
1054
+ "inputs": [
1055
+ {
1056
+ "internalType": "bool",
1057
+ "name": "paused",
1058
+ "type": "bool"
1059
+ }
1060
+ ],
1061
+ "name": "setPaused",
1062
+ "outputs": [],
1063
+ "stateMutability": "nonpayable",
1064
+ "type": "function"
1065
+ },
1066
+ {
1067
+ "inputs": [
1068
+ {
1069
+ "internalType": "address",
1070
+ "name": "sender",
1071
+ "type": "address"
1072
+ },
1073
+ {
1074
+ "internalType": "address",
1075
+ "name": "relayer",
1076
+ "type": "address"
1077
+ },
1078
+ {
1079
+ "internalType": "bool",
1080
+ "name": "approved",
1081
+ "type": "bool"
1082
+ }
1083
+ ],
1084
+ "name": "setRelayerApproval",
1085
+ "outputs": [],
1086
+ "stateMutability": "nonpayable",
1087
+ "type": "function"
1088
+ },
1089
+ {
1090
+ "inputs": [
1091
+ {
1092
+ "components": [
1093
+ {
1094
+ "internalType": "bytes32",
1095
+ "name": "poolId",
1096
+ "type": "bytes32"
1097
+ },
1098
+ {
1099
+ "internalType": "enum IVault.SwapKind",
1100
+ "name": "kind",
1101
+ "type": "uint8"
1102
+ },
1103
+ {
1104
+ "internalType": "contract IAsset",
1105
+ "name": "assetIn",
1106
+ "type": "address"
1107
+ },
1108
+ {
1109
+ "internalType": "contract IAsset",
1110
+ "name": "assetOut",
1111
+ "type": "address"
1112
+ },
1113
+ {
1114
+ "internalType": "uint256",
1115
+ "name": "amount",
1116
+ "type": "uint256"
1117
+ },
1118
+ {
1119
+ "internalType": "bytes",
1120
+ "name": "userData",
1121
+ "type": "bytes"
1122
+ }
1123
+ ],
1124
+ "internalType": "struct IVault.SingleSwap",
1125
+ "name": "singleSwap",
1126
+ "type": "tuple"
1127
+ },
1128
+ {
1129
+ "components": [
1130
+ {
1131
+ "internalType": "address",
1132
+ "name": "sender",
1133
+ "type": "address"
1134
+ },
1135
+ {
1136
+ "internalType": "bool",
1137
+ "name": "fromInternalBalance",
1138
+ "type": "bool"
1139
+ },
1140
+ {
1141
+ "internalType": "address payable",
1142
+ "name": "recipient",
1143
+ "type": "address"
1144
+ },
1145
+ {
1146
+ "internalType": "bool",
1147
+ "name": "toInternalBalance",
1148
+ "type": "bool"
1149
+ }
1150
+ ],
1151
+ "internalType": "struct IVault.FundManagement",
1152
+ "name": "funds",
1153
+ "type": "tuple"
1154
+ },
1155
+ {
1156
+ "internalType": "uint256",
1157
+ "name": "limit",
1158
+ "type": "uint256"
1159
+ },
1160
+ {
1161
+ "internalType": "uint256",
1162
+ "name": "deadline",
1163
+ "type": "uint256"
1164
+ }
1165
+ ],
1166
+ "name": "swap",
1167
+ "outputs": [
1168
+ {
1169
+ "internalType": "uint256",
1170
+ "name": "amountCalculated",
1171
+ "type": "uint256"
1172
+ }
1173
+ ],
1174
+ "stateMutability": "payable",
1175
+ "type": "function"
1176
+ },
1177
+ {
1178
+ "stateMutability": "payable",
1179
+ "type": "receive"
1180
+ }
1181
+ ],
1182
+ "bytecode": "",
1183
+ "deployedBytecode": "",
1184
+ "linkReferences": {},
1185
+ "deployedLinkReferences": {}
1186
+ }
contracts/service_registry_abi.json ADDED
@@ -0,0 +1 @@
 
 
1
+ [{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"AgentInstanceRegistered","type":"error"},{"inputs":[{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"AgentInstancesSlotsFilled","type":"error"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"}],"name":"AgentNotFound","type":"error"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"},{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"AgentNotInService","type":"error"},{"inputs":[{"internalType":"uint256","name":"componentId","type":"uint256"}],"name":"ComponentNotFound","type":"error"},{"inputs":[],"name":"HashExists","type":"error"},{"inputs":[{"internalType":"uint256","name":"sent","type":"uint256"},{"internalType":"uint256","name":"expected","type":"uint256"},{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"IncorrectAgentBondingValue","type":"error"},{"inputs":[{"internalType":"uint256","name":"sent","type":"uint256"},{"internalType":"uint256","name":"expected","type":"uint256"},{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"IncorrectRegistrationDepositValue","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"manager","type":"address"}],"name":"ManagerOnly","type":"error"},{"inputs":[{"internalType":"address","name":"provided","type":"address"},{"internalType":"address","name":"expected","type":"address"},{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"OnlyOwnServiceMultisig","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"OperatorHasNoInstances","type":"error"},{"inputs":[{"internalType":"uint256","name":"provided","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"Overflow","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"OwnerOnly","type":"error"},{"inputs":[],"name":"Paused","type":"error"},{"inputs":[],"name":"ReentrancyGuard","type":"error"},{"inputs":[{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"ServiceMustBeInactive","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferFailed","type":"error"},{"inputs":[{"internalType":"address","name":"multisig","type":"address"}],"name":"UnauthorizedMultisig","type":"error"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"}],"name":"WrongAgentId","type":"error"},{"inputs":[{"internalType":"uint256","name":"numValues1","type":"uint256"},{"internalType":"uint256","name":"numValues2","type":"uint256"}],"name":"WrongArrayLength","type":"error"},{"inputs":[{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"WrongOperator","type":"error"},{"inputs":[{"internalType":"uint256","name":"state","type":"uint256"},{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"WrongServiceState","type":"error"},{"inputs":[{"internalType":"uint256","name":"currentThreshold","type":"uint256"},{"internalType":"uint256","name":"minThreshold","type":"uint256"},{"internalType":"uint256","name":"maxThreshold","type":"uint256"}],"name":"WrongThreshold","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"inputs":[],"name":"ZeroValue","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"ActivateRegistration","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"baseURI","type":"string"}],"name":"BaseURIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"serviceId","type":"uint256"},{"indexed":true,"internalType":"address","name":"multisig","type":"address"}],"name":"CreateMultisigWithAgents","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"serviceId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"configHash","type":"bytes32"}],"name":"CreateService","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"DeployService","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"drainer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Drain","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"drainer","type":"address"}],"name":"DrainerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"ManagerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"OperatorSlashed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"OperatorUnbond","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"OwnerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Refund","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"uint256","name":"serviceId","type":"uint256"},{"indexed":true,"internalType":"address","name":"agentInstance","type":"address"},{"indexed":false,"internalType":"uint256","name":"agentId","type":"uint256"}],"name":"RegisterInstance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"TerminateService","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"serviceId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"configHash","type":"bytes32"}],"name":"UpdateService","type":"event"},{"inputs":[],"name":"CID_PREFIX","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"serviceOwner","type":"address"},{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"activateRegistration","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newDrainer","type":"address"}],"name":"changeDrainer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"changeManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"multisig","type":"address"},{"internalType":"bool","name":"permission","type":"bool"}],"name":"changeMultisigPermission","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"serviceOwner","type":"address"},{"internalType":"bytes32","name":"configHash","type":"bytes32"},{"internalType":"uint32[]","name":"agentIds","type":"uint32[]"},{"components":[{"internalType":"uint32","name":"slots","type":"uint32"},{"internalType":"uint96","name":"bond","type":"uint96"}],"internalType":"struct AgentParams[]","name":"agentParams","type":"tuple[]"},{"internalType":"uint32","name":"threshold","type":"uint32"}],"name":"create","outputs":[{"internalType":"uint256","name":"serviceId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"serviceOwner","type":"address"},{"internalType":"uint256","name":"serviceId","type":"uint256"},{"internalType":"address","name":"multisigImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"deploy","outputs":[{"internalType":"address","name":"multisig","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"drain","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"drainer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"unitId","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"getAgentInstances","outputs":[{"internalType":"uint256","name":"numAgentInstances","type":"uint256"},{"internalType":"address[]","name":"agentInstances","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"getAgentParams","outputs":[{"internalType":"uint256","name":"numAgentIds","type":"uint256"},{"components":[{"internalType":"uint32","name":"slots","type":"uint32"},{"internalType":"uint96","name":"bond","type":"uint96"}],"internalType":"struct AgentParams[]","name":"agentParams","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"serviceId","type":"uint256"},{"internalType":"uint256","name":"agentId","type":"uint256"}],"name":"getInstancesForAgentId","outputs":[{"internalType":"uint256","name":"numAgentInstances","type":"uint256"},{"internalType":"address[]","name":"agentInstances","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"getOperatorBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"getPreviousHashes","outputs":[{"internalType":"uint256","name":"numHashes","type":"uint256"},{"internalType":"bytes32[]","name":"configHashes","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"getService","outputs":[{"components":[{"internalType":"uint96","name":"securityDeposit","type":"uint96"},{"internalType":"address","name":"multisig","type":"address"},{"internalType":"bytes32","name":"configHash","type":"bytes32"},{"internalType":"uint32","name":"threshold","type":"uint32"},{"internalType":"uint32","name":"maxNumAgentInstances","type":"uint32"},{"internalType":"uint32","name":"numAgentInstances","type":"uint32"},{"internalType":"enum ServiceRegistryL2.ServiceState","name":"state","type":"uint8"},{"internalType":"uint32[]","name":"agentIds","type":"uint32[]"}],"internalType":"struct ServiceRegistryL2.Service","name":"service","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mapAgentInstanceOperators","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"mapConfigHashes","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mapMultisigs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"mapOperatorAndServiceIdAgentInstances","outputs":[{"internalType":"address","name":"instance","type":"address"},{"internalType":"uint32","name":"agentId","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mapOperatorAndServiceIdOperatorBalances","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"mapServiceAndAgentIdAgentInstances","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mapServiceAndAgentIdAgentParams","outputs":[{"internalType":"uint32","name":"slots","type":"uint32"},{"internalType":"uint96","name":"bond","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mapServices","outputs":[{"internalType":"uint96","name":"securityDeposit","type":"uint96"},{"internalType":"address","name":"multisig","type":"address"},{"internalType":"bytes32","name":"configHash","type":"bytes32"},{"internalType":"uint32","name":"threshold","type":"uint32"},{"internalType":"uint32","name":"maxNumAgentInstances","type":"uint32"},{"internalType":"uint32","name":"numAgentInstances","type":"uint32"},{"internalType":"enum ServiceRegistryL2.ServiceState","name":"state","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"serviceId","type":"uint256"},{"internalType":"address[]","name":"agentInstances","type":"address[]"},{"internalType":"uint32[]","name":"agentIds","type":"uint32[]"}],"name":"registerAgents","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"bURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"agentInstances","type":"address[]"},{"internalType":"uint96[]","name":"amounts","type":"uint96[]"},{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"slash","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"slashedFunds","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"serviceOwner","type":"address"},{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"terminate","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"refund","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"unitId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"unitId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"unbond","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"refund","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"serviceOwner","type":"address"},{"internalType":"bytes32","name":"configHash","type":"bytes32"},{"internalType":"uint32[]","name":"agentIds","type":"uint32[]"},{"components":[{"internalType":"uint32","name":"slots","type":"uint32"},{"internalType":"uint96","name":"bond","type":"uint96"}],"internalType":"struct AgentParams[]","name":"agentParams","type":"tuple[]"},{"internalType":"uint32","name":"threshold","type":"uint32"},{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"update","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
daily_transactions_new.csv ADDED
@@ -0,0 +1,223 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ chain,safe_address,date,transaction_hash,timestamp,from,to,value_eth,agent_address
2
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-09-19,0xb5cdd01edbc80bddf67edea2a88bc71d86372f1cc603c311da4b593e20376048,2024-09-19 00:16:41,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,
3
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-09-19,0x3514a3d2a1e0462a11ebf4a64f2dbeb10405052fbb060d5b62b978ea601b1bd6,2024-09-19 00:17:03,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,
4
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-09-19,0x98385000a78c7b85800e1551ed64d1ef4b31ce7a4e7dfa49a8d0800a3f143fdb,2024-09-19 00:17:23,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,
5
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-09-20,0x583b8737470ba6912c373a03dc2429554f560dd4a5ab98f7449a815c12e7a447,2024-09-20 06:07:35,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,
6
+ base,0xa13DFc6DdCFF0B5B637e721ee83d6cF7E0676e73,2024-09-19,0x3c9bff22604410db277f50b2a2305ca93bf0b93e91e29ec34f4be15557e4a5bb,2024-09-19 15:48:11,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0xa13dfc6ddcff0b5b637e721ee83d6cf7e0676e73,0.0,
7
+ base,0xa13DFc6DdCFF0B5B637e721ee83d6cF7E0676e73,2024-09-19,0xc056887d8d0850dab2414be04894b8137b79f3a1e39185315fc41179564e8880,2024-09-19 15:48:39,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0xa13dfc6ddcff0b5b637e721ee83d6cf7e0676e73,0.0,
8
+ base,0xa13DFc6DdCFF0B5B637e721ee83d6cF7E0676e73,2024-09-19,0xdb88168a449551c5d61fab051c683bba16b52a438d0de6d8eab9f724caa1aebb,2024-09-19 18:33:15,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0xa13dfc6ddcff0b5b637e721ee83d6cf7e0676e73,0.0,
9
+ ethereum,0xDD58D70646e51eA332aE3Bc2D43CB336A3F50D3C,2024-09-19,0x766bcbe570f81eda83cdedc82574c6f1cfd076d967fcbb0e5aa7e0d530bfa89c,2024-09-19 15:16:11,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0xdd58d70646e51ea332ae3bc2d43cb336a3f50d3c,0.0,
10
+ ethereum,0xDD58D70646e51eA332aE3Bc2D43CB336A3F50D3C,2024-09-19,0x06d25b87f3322ac8f7e55f105d1e95a706453b166c36179ea8c595f3375500ec,2024-09-19 15:44:59,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0xdd58d70646e51ea332ae3bc2d43cb336a3f50d3c,0.0,
11
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-26,0x2d77abf9ca4c5430b05b74767158b9d08f5135f985a34a19e4a6221e17959677,2024-09-26 23:26:43,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
12
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-26,0xb143af4766236055e4fb30912eb7c79f171e1a1d9f69936d53bc5bbe7f89108e,2024-09-26 23:27:03,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
13
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-26,0x38af0f7ef29b9b604b18fd68388da25ff04a5230a7d3da96d0e2850e3e5aa380,2024-09-26 23:27:25,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
14
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-26,0xad4bafff9ce4f0eca88928931143d4cda3a750f6e8a2155e3519d10d3f58ab6b,2024-09-26 23:27:47,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
15
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-27,0x6c320f41b7a137430474a785cb0006a189884d75f93e8941d5044b2ace0c6f79,2024-09-27 17:50:57,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
16
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-27,0xe1ca0e0f238a13e94d1b270992584924c87ced3acc666da9f808f4c789a2ae37,2024-09-27 18:16:49,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
17
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-27,0x1a713b1b719b9a64c95d706ef5f339e93d183fa3cfb01ed41f5d7ad3bbbaeee1,2024-09-27 18:17:11,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
18
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-27,0x0cfe8b5333e7bb213629a412e46742bfda3a7206366e4b0a02aa6a9fe1b13602,2024-09-27 18:17:35,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
19
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-27,0xca2b584bc17078eed70a91ad3c371f5b99945a97f1396516968bbcaa57454848,2024-09-27 18:17:57,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
20
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-28,0x4ab554c57c4aec076e3b18cbb57d0d928911ff4b4fb5e6856b5e7e7cd613f783,2024-09-28 17:51:31,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
21
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-28,0xed357b343ca86b7387c53a560568bed89f244f42e765879efb918f26139ed79e,2024-09-28 18:17:21,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
22
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-28,0x7ba1746736b944b47e175f3a87d9766b2e0406204ce228770f89bd5c0c6a1473,2024-09-28 18:17:45,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
23
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-28,0x03c98aef9e44614676d96481d58c3f6a65cc0518dbbe872998107421b73b0c19,2024-09-28 18:18:07,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
24
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-28,0x2a7837f17aafdab94dd4531f131995e53035ddae9a2e841a2175883296d3be89,2024-09-28 18:18:29,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
25
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-29,0x50195e96bf0fffbb03fc107a9dc7c8e6a8e3e56ce66b34ff07c6e9e03e1ff2f9,2024-09-29 17:56:05,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
26
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-29,0x6e8b7cde35dfa4e8685468efc4372a0ddc29dbe6402cdd7aa9558420e99b76d3,2024-09-29 18:21:53,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
27
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-29,0x3dcd18338ae0b8fdee620b5a624403b37acf7c0e9358337f223068ef803f8780,2024-09-29 18:22:17,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
28
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-29,0xd4cde9b125d7f1fb6a3a643d0f1dcecfedafa35a56b082e45496a57df1e630da,2024-09-29 18:22:39,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
29
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-29,0x58afed267747fd871fcde3d259789b11527c813734c5385f024bfd65c0d80477,2024-09-29 18:23:03,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
30
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-30,0x3603d6513b26de8f6e8fa30c068afd9357543559a44b500770eebb39d70a37bb,2024-09-30 17:59:49,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
31
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-30,0xa5829b7d23f43925c76c444d8b3982e7e36a5c772fa1e52a195f170bec7bdeff,2024-09-30 18:25:43,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
32
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-30,0xaac5a58e3c17589b3fc738875f2ca63d4b8a931cd4d83b605c1c63904b3a8c7b,2024-09-30 18:26:07,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
33
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-30,0x23123c823bcc0bd6e7debb6cf898c09f9633b307fa0362a5b695860fcd26556d,2024-09-30 18:26:29,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
34
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-09-30,0x2ef4002702b6c5e822b7f1eb56ef8868b485cd6133ea75e324f52d9d961e7f39,2024-09-30 18:26:51,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
35
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-01,0x07edf2c1d52bd085b483a4d78d68f66f3b960c2f8b00a116c75f356d395014a2,2024-10-01 18:04:13,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
36
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-01,0x002d1e1a828b3a5bf0b9a1aafea84e3b2aa1baa3821f365f56740d7d2ad7a728,2024-10-01 18:30:05,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
37
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-01,0x1c13d5371972b9483d3fec56a30bc3a3037192077d4aa53dea7ca264fec9713e,2024-10-01 18:30:29,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
38
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-01,0x3b27d64ff2953ecf83ad012f6491c6811c53e4a741d6f001418c2341a72a005c,2024-10-01 18:30:53,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
39
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-01,0xab518b126e28e79cadd4787192bddf14982e53f1147596537020e29b263ea06e,2024-10-01 18:31:17,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
40
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-02,0x03bed38602800fe269f10de492385ba526a84ec2cc7f9baa23619bd35da85fd7,2024-10-02 18:08:25,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
41
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-02,0xd22d313ad6e3182c458f622bca14d43bb8b9ca9048d26091314120eb89327ae4,2024-10-02 18:34:21,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
42
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-02,0x675ccf60999d108687723fbad766b4fe9c88fc4124922075f4eb66a419069f00,2024-10-02 18:34:45,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
43
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-02,0xae6738f676a6df8468dd35631a84e236196f31781e10f42b59a5f2e06ec8d621,2024-10-02 18:35:11,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
44
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-02,0x2f52592f281c86e3595310037a111a6aaec3a35e0c291197878f5ceffd060e47,2024-10-02 18:35:33,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
45
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-02,0x4177e1d24e370c07740cb39146afb5bb8d94ea86a7cc7d99a91418063a2e51e1,2024-10-02 22:47:59,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
46
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-02,0x67eef64284209d9ac03f57cdfa8f23ee9ad158ae12d92a3d5d70263c76d50311,2024-10-02 22:48:23,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
47
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-02,0xe1b09e4690cad0315a50f6e651a1e4f7e7636f089fc897b92fdf9de3efb88848,2024-10-02 22:48:47,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
48
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-02,0xd716065247d7d17f2d5df0b0884efb1429b9fd8429390ecb8c368139d73269f8,2024-10-02 22:49:09,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
49
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-03,0xbdd16cc721c952ac2db3dacb6084babeb8a13c17ba1dbb44a642f766ef806c40,2024-10-03 18:09:11,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
50
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-03,0x2296dbb131d0a670822fbd3f682d550aa40fdc039759041ba5a178050b0e6e9c,2024-10-03 18:34:59,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
51
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-03,0x15926312822752070924174de37cda4d3d8f03f2f0970b07ab04bc2e153f8f28,2024-10-03 18:35:23,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
52
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-03,0xa8d6ced16e7154fbcbbafb4959cb3ca2a772c5184280e41818c3e0a77ea99cc9,2024-10-03 18:35:45,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
53
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-03,0xd34ce2ec71e543c0d043ab81500450c7ba15784af08cd162041ab9c861dffcd4,2024-10-03 18:36:09,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
54
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-04,0xa2f5c1d49938c2c522053a6e580950e47f13cbd8969b584f759e7455aeab190e,2024-10-04 18:14:23,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
55
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-04,0x255f06717a24abbf83a3e38458b7f319131f49ea78b407f7cc3b730044d0f903,2024-10-04 18:40:17,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
56
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-04,0x7edc08a131c9c98d38a6ab7f9d8e9f712919ec20cc9d4039b81af0ae3d7b73c7,2024-10-04 18:40:39,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
57
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-04,0xf791d1891ab8c19cd188f36733e7b2283e0d9c03b6eb1fae8ec02cf8ce743ab2,2024-10-04 18:41:01,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
58
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-04,0xb6a6a874ab5990e90df1a82071653b4ae76849945493bfa0c138943bcb4ec27a,2024-10-04 18:41:25,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
59
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-05,0xca9355317dbe951c691cbc00663c285a2f7b2ebe6ba6c97d56323b43d2ca5b4d,2024-10-05 18:16:33,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
60
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-05,0x8bc424a0b63e30bb90eae9f3d8b39331e9eeab3dca931398c55e812daeec67aa,2024-10-05 18:42:27,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
61
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-05,0x67e4281c16ef8943674c5a754bfb9424bedc76cee05cb18689ee6ae00f813c16,2024-10-05 18:42:49,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
62
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-05,0x5727658de3c9c2203db2f902c2ab793acd1743d48c34976f94d69ace7da13c85,2024-10-05 18:43:13,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
63
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-05,0x3d0716682ef361878ec806fcd13312c2bbb3992f6d1579972bcda7f3a071d0c9,2024-10-05 18:43:37,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
64
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-06,0x950db9e6fb2ffef17e18108f78cdee3ea67e50fe1f77bf217ddc2187391878c4,2024-10-06 18:18:17,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
65
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-06,0x082ee7e680fbe729a6d4762f44937472341f0dbbab0246bd2453e7d6789a7a04,2024-10-06 18:44:09,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
66
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-06,0xb48ca890464e5f5a936a2b37356b45d6d899ba35ac2dd786ed32106979bd182b,2024-10-06 18:44:33,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
67
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-06,0x01249bb16afd6e82b29107db57fb010aa1566e952808826609097850f28d6e95,2024-10-06 18:44:57,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
68
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-06,0xb01eeefc632f63e689de5b5b46cdd98f8ef5c363c1c3ae72c7fb34bdfdecc9b0,2024-10-06 18:45:19,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
69
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-07,0x566a02173d6d0d03acfc0c3d460db03793af4b55465e8ab2af17b4db03e1225b,2024-10-07 18:19:49,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
70
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-07,0xb12acc7e1b984e34b35763ae63b82e651b12b984e8e0a4ef6d4962984f1e59c1,2024-10-07 18:45:37,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
71
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-07,0x9be5b67d4cdf13c079aa44674c30554cbe2d6545463e3afc6327822cd4a6499f,2024-10-07 18:46:01,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
72
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-07,0xdc5c6fd66965fa021891c3914a9d3138bfee598902cf82a7327222193accf47c,2024-10-07 18:46:23,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
73
+ optimism,0x37036d9A0E4aDE3898336a42CC31c71387D48B78,2024-10-07,0xc6ec42440f16143e30decf95356285ff2c996a80b7377324e2db27c28922ac6f,2024-10-07 18:46:45,0x050e90bea65c9ba6416996bb6fffa8f925885d40,0x37036d9a0e4ade3898336a42cc31c71387d48b78,0.0,
74
+ optimism,0x5EFC7B394A916aC8090a7D6221F798AbFb9F5510,2024-10-04,0xdf58f14196a0693e1d767996fcec10b487efa8f6758ece46b47af91ecc820249,2024-10-04 19:09:29,0x554d1444b6a38fa2eb18d86f2c10f42be630c89d,0x5efc7b394a916ac8090a7d6221f798abfb9f5510,0.0,
75
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-09-26,0x3cffb2e0ad7a1112415619dc7cdf87d4549eaa1eb15f6f349be8ab69aae5cd23,2024-09-26 18:16:59,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,
76
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-09-26,0x0da11730c3f7bb0cc1ab62939d76cdbbcadb0cebf1af74319fbb5061816aac43,2024-09-26 18:17:17,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,
77
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-09-26,0xa15b9e0cc87e4bb10cdfacc978353396432ff1fe90d6518930e5f0793a8b37a9,2024-09-26 18:17:37,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,
78
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-09-26,0xca171f90a61c0894165d9927c4ecd3353a3e042db4b2c795042be91331d6de2f,2024-09-26 18:17:55,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,
79
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-09-27,0x34ea9a3d8e63d645df4ea9358f8bf66a90a4c8a3725fdfdc235d1b4287ee9c84,2024-09-27 17:51:19,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,
80
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-09-27,0xbebdf9ea646631ff785d04a11b4a1f9f9d34a28d941fa64162a75e11759ceaae,2024-09-27 17:51:37,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,
81
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-09-27,0x74ce4551cc81a4d8a6e550aeb20f321d05bc119383e07587f4cb4b50f288ec01,2024-09-27 17:51:59,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,
82
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-09-27,0x907910b3d3a536beaa703ed074348883356b9226a00d840787afdc9a77cfe3fc,2024-09-27 17:52:17,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,
83
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-04,0x54a5d52d4bae5f2a448b6518f70bc804bb12b7094c906ea1069c0533df0ce8a1,2024-10-04 23:12:35,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,
84
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-04,0x356719746d140a01e0958320beae6c7d2fd3c665d3735740aea4b37ed94d8e55,2024-10-04 23:12:53,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,
85
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-04,0x858c90cfc4558e5cbd1bc5ba9224d38c227a52238e9a01df145021338cef23fb,2024-10-04 23:13:13,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,
86
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-04,0xe410d7236f09f4c4f2e520417c5d392b0c90f8e3c146bf59a150fb7cd2b013b4,2024-10-04 23:13:31,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,
87
+ optimism,0x5f0C4273Ff97ae91fc8D2fc8621b5E37a741d1b1,2024-10-07,0x64e43a3197333fc6efcd577837649b54e25c47ccbc9d00f91a11d368e25009e9,2024-10-07 11:57:33,0xa0ff35bfbd3c42e3afe29255742c7558498f5544,0x5f0c4273ff97ae91fc8d2fc8621b5e37a741d1b1,0.0,
88
+ optimism,0x5f0C4273Ff97ae91fc8D2fc8621b5E37a741d1b1,2024-10-07,0xc0bdf9c0215249d766034fe8999569c6fedbc3e973386731f68e180c03d9a430,2024-10-07 12:12:29,0xa0ff35bfbd3c42e3afe29255742c7558498f5544,0x5f0c4273ff97ae91fc8d2fc8621b5e37a741d1b1,0.0,
89
+ optimism,0x5f0C4273Ff97ae91fc8D2fc8621b5E37a741d1b1,2024-10-07,0x426ec7fe2dddc83ebc5ae45163841743465ed4f3a3a3fcd5e29d9224fb35fb1b,2024-10-07 12:13:21,0xa0ff35bfbd3c42e3afe29255742c7558498f5544,0x5f0c4273ff97ae91fc8d2fc8621b5e37a741d1b1,0.0,
90
+ base,0xaC55EEb3fdAcfdFae78c62cAA58934900Ad54ED2,2024-09-26,0x1927d44a64dcb7d49a853c7aecae452009100433458a575d207b6fe564bcb254,2024-09-26 17:51:17,0x66749af7e077bfa30aca7c671d56f07e95304722,0xac55eeb3fdacfdfae78c62caa58934900ad54ed2,0.0,
91
+ base,0xaC55EEb3fdAcfdFae78c62cAA58934900Ad54ED2,2024-09-26,0x60bad359d0e6a3f07979c8370ba1226f6a5effdfe47c901fbb7e4b1f44c805e5,2024-09-26 18:29:31,0x66749af7e077bfa30aca7c671d56f07e95304722,0xac55eeb3fdacfdfae78c62caa58934900ad54ed2,0.0,
92
+ base,0xaC55EEb3fdAcfdFae78c62cAA58934900Ad54ED2,2024-09-29,0x5d3f63be96d60a282a0d5b8216e22101dfc384999a5b5a5de59ade764c59367d,2024-09-29 17:33:13,0x66749af7e077bfa30aca7c671d56f07e95304722,0xac55eeb3fdacfdfae78c62caa58934900ad54ed2,0.0,
93
+ base,0xaC55EEb3fdAcfdFae78c62cAA58934900Ad54ED2,2024-09-29,0xcd4986fc3a3406e2ae5a3246a72f04b6b3500f6074c64433582947606a202486,2024-09-29 17:33:43,0x66749af7e077bfa30aca7c671d56f07e95304722,0xac55eeb3fdacfdfae78c62caa58934900ad54ed2,0.0,
94
+ ethereum,0xe1EC43B9e4aF80c0b50579AB820f0Ca4304D4DB0,2024-09-26,0x44c17afd9cf22261dc7881c0b72453f532d724d87a6b8a0fc41b5ee524223248,2024-09-26 17:49:59,0x66749af7e077bfa30aca7c671d56f07e95304722,0xe1ec43b9e4af80c0b50579ab820f0ca4304d4db0,0.0,
95
+ ethereum,0xe1EC43B9e4aF80c0b50579AB820f0Ca4304D4DB0,2024-09-26,0x4e1b99d3a5457ac8e6598dacd0b163217965cc69fe9dbe97fb7f1829e7879a52,2024-09-26 18:28:59,0x66749af7e077bfa30aca7c671d56f07e95304722,0xe1ec43b9e4af80c0b50579ab820f0ca4304d4db0,0.0,
96
+ ethereum,0xb0830c65499ff2A25D10D895970b152193b13FCf,2024-10-04,0x2d6cd40bc7862c05d8a1cf26b473a58aab79b322d98fecd304b261eda46ada20,2024-10-04 18:56:35,0x554d1444b6a38fa2eb18d86f2c10f42be630c89d,0xb0830c65499ff2a25d10d895970b152193b13fcf,0.0,
97
+ ethereum,0x654F17A32fE4ebAEBD6A0669AFD4f7392A7A47BE,2024-10-07,0x7928005ff789c7f3615ab40a8368695be812835ddba4b0645bc4043dd9ec5ae5,2024-10-07 11:45:59,0xa0ff35bfbd3c42e3afe29255742c7558498f5544,0x654f17a32fe4ebaebd6a0669afd4f7392a7a47be,0.0,
98
+ ethereum,0x654F17A32fE4ebAEBD6A0669AFD4f7392A7A47BE,2024-10-07,0xaf3e92969ca37a7999c81c509d33c5b50b2f212574752c22916cde6f7c58c49a,2024-10-07 12:11:11,0xa0ff35bfbd3c42e3afe29255742c7558498f5544,0x654f17a32fe4ebaebd6a0669afd4f7392a7a47be,0.0,
99
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-08,0xaee13886847dc95d2e608ab7d56f9630dc59122ac807168f9ca952c6163c5a81,2024-10-08 15:32:07,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
100
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-08,0x1d913feaa55fc772cded5a1464e30b1a162d4d81ead9c353498ba272678b71ab,2024-10-08 15:32:27,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
101
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-08,0x9bac7a0e70877600504770e9baab57aca80e605ef154c4023fb58ece09c5cbc3,2024-10-08 15:32:41,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
102
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-08,0x84bde757adfa865b03b5a3aad8c535c80de02e89e679a79408c613ce68f7e53b,2024-10-08 15:32:59,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
103
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-13,0xdc6264296464eec917a29cfa499671e1101b76493199a9d2d708fac9ed7dc2ad,2024-10-13 00:28:39,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
104
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-13,0x1e64654a1ca673846f73da3af87e9b64aa201794c2739687fe19bc61a1856eee,2024-10-13 00:28:57,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
105
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-13,0x621252dc18c34d105930349c91c717b20b15942ea9cf559f3fd873f9ee4e2a6f,2024-10-13 00:29:19,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
106
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-13,0x9f59766b0e38e91500646912786b19e2e09d1c7ad76834468ae9d83a68fc482d,2024-10-13 00:29:39,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
107
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-13,0x3c322ee250f3fe6a003920d58054e73950706a803f93a3f45bdf87c3cdf89d9b,2024-10-13 18:29:23,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
108
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-13,0x44068297bf896955f23d92757957292f066446efb329d3c9771ba220d5556321,2024-10-13 18:55:27,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
109
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-13,0x3f0b301a85002d1c89e912c5fb59004dbcb425eaa30df4582a672db0b4d4c376,2024-10-13 18:55:45,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
110
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-13,0x2aa1b5207df4b04baec42408893544f59c977e34048b445aa7172def84f89c8a,2024-10-13 18:56:03,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
111
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-13,0x304741cf12f71f523ef9d4f9a166f9f123e251c8e486cd73d0f5ca9152587ea8,2024-10-13 18:56:23,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
112
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-14,0xa2c5c1805397e690208aa98456f20e41718077a151a03fbfddea6b1e870a428e,2024-10-14 09:31:55,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
113
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-16,0x8c5fe6db3b2e873853884d5855f4d495aa7f3740edb15ca38dd1991f350efbf2,2024-10-16 19:44:05,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
114
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-16,0x12f7bff8f9124c87bb5f024d3f6a7408541cba2012ab5cf91307f6bbdebc917a,2024-10-16 19:44:25,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
115
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-16,0x890bab71cb998b2ce20bf726a399935234feaae1634fff1379cd6b176eeedfee,2024-10-16 19:44:45,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
116
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-16,0x456d9007e0d58381f0368c41c83f8ae2e8ac98439decfd91ab401436ac97719b,2024-10-16 19:45:05,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
117
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-17,0x58a8b1331e4f65b3a0500931b968867a89c9c09ea51ca6633fc5ad607535aaa3,2024-10-17 18:43:21,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
118
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-17,0x3cefa7ad4c42a59b536f844f2523bf9b9a083de4ec2e6b1e03fc239aa80f2ab9,2024-10-17 19:09:15,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
119
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-17,0x269a707d5e892bd9970261cc7c46c9fc504b18aecf115f5ebdb274959d0b3ebf,2024-10-17 19:09:35,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
120
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-17,0x7ffeabb33e2e802e21ec2a65e994c020d22b29944bc740f924e549deec34ce26,2024-10-17 19:09:55,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
121
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-17,0x14d3ed4f990013913f74ca3eebcc0ae5e4a2ba1092f11292009761977b202d63,2024-10-17 19:10:15,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
122
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-18,0x532448cdfbeff3df4bb62f481eaffa078b2c5adc72b69642cfb69079665ff522,2024-10-18 18:45:19,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
123
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-18,0x713bc3c78922b7f1106daa1e655472b9b026368545fd768c9ea7b92309947334,2024-10-18 19:11:19,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
124
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-18,0x95a42baa217807385097803f3a143fffb20b746e90696c8a46b047e7c7e6e7f3,2024-10-18 19:11:39,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
125
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-18,0x9367d6e66f04fa982057b71015105a71d62e412a8f15893ee94e4c1acc94a6ee,2024-10-18 19:11:59,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
126
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-18,0xa0436d809e9fc7181f96389b233e9205cde9b323f0112b228af72d651a81c9d5,2024-10-18 19:12:19,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
127
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-19,0x4bcd3ce86be93a62fb338feadd3a4ea2446de2d8a200ad4c041b141a19c10201,2024-10-19 18:47:51,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
128
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-19,0x740660a2af7e3109e4790e5d63c2044cceda76f63447b6bd0cca721113dc84f7,2024-10-19 19:13:43,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
129
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-19,0xbdf047bc27897dee5bbf00437cb7e03ae9eac0928fd749341c92c10d437d9dd4,2024-10-19 19:14:01,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
130
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-19,0xf34f26b8357cc5ef4d274a68fb7ab4bfa74c0548a8c534304cdaaf0460b204b4,2024-10-19 19:14:17,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
131
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-19,0x6c6747478eda1d352e6f6c7178dbd75123870574047730e418a4f0a3fb6c1cf4,2024-10-19 19:14:35,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
132
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-20,0xa2879a875d64fead59ca4129aa717104c4b33b2a762187e1e48c7bebb6c0b353,2024-10-20 18:49:09,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
133
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-20,0x423585ea66b5b290b569dd8b84f56b7a9e8d330cb06f3701db163791fcff2714,2024-10-20 19:15:05,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
134
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-20,0x672ec755a343763daa8b687f01e71c1b088815a41192c4aff62d68b801c956c5,2024-10-20 19:15:25,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
135
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-20,0x434e1ee73b31f0a559c24f57c6914346d9a44fa388a75bf130204e75800a61cf,2024-10-20 19:15:47,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
136
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-20,0x68f45e463facb02da1963b43646341a90755c539f767e6ee6adf70513d051c03,2024-10-20 19:16:15,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
137
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-21,0xb89c76c2eb8d73b8998decea57c8e3e77730e0aacbb469b7708973ee4bc27cf8,2024-10-21 18:49:31,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
138
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-21,0x90b00da8ae4eb267161baa3e33a98bbdb23749df77e6b66733c5efaa45b1d178,2024-10-21 19:15:27,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
139
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-21,0xa000f5cb6f82557048c04256b173c17ad077524f3adbec9bf011a246d6a0f2e1,2024-10-21 19:15:45,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
140
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-21,0xc222a959b5246a4fd564d3bc5f282b618e2c16960f671b93bb28ab23f23f7fda,2024-10-21 19:16:05,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
141
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-21,0x47c0ab659de596bc52edc299a957ae2504fc203852a9eb697936b5155aff3e3a,2024-10-21 19:16:23,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
142
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-22,0xf4075fb335e25c08d3ef7761e837624ba584391f5c8278ee871d1bffde785ed2,2024-10-22 18:54:15,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
143
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-22,0x8bbfb98576ebcd9d1ce5d3e94624b60daa0b2b4be4aadeb3f1cf3e33c816fe3d,2024-10-22 18:54:33,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
144
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-22,0x913ff32263bace6c07f713c63bc9328d57cabfac0f39d741ad1f31e7770e0e35,2024-10-22 18:54:53,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
145
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-22,0x8b1d52b325e6fc187124a7176a34d2fdf57761890a4d45f13eef99f6111cf7cd,2024-10-22 18:55:11,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
146
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-23,0x93bcad48afc8a95d24eca58f220753f0534e60ad8b4690d022540834471feaba,2024-10-23 18:54:11,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
147
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-23,0x146f693496b5cf221180b709351b7fbc39c5a428637bc06c87f4a5904ce84821,2024-10-23 19:19:59,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
148
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-23,0x9896ff4ee5456131fc4949f1c4e01acc013751a1763bbf103562caef2515cb1d,2024-10-23 19:20:19,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
149
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-23,0x320182ea16bfb101d94e092338a993ffcfc92e55cc46030e18198e845ba8794c,2024-10-23 19:20:39,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
150
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-23,0x76ba277dfdd9bef45034b33f074da67a8626fab5bb147eb21088a881ecbeef0c,2024-10-23 19:20:59,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
151
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-24,0x264fa35911f00f1a1b513beb2f32d4d5c281cb00493f96894cf981d881d840b1,2024-10-24 18:58:45,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
152
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-24,0xe77ee3efdb94a400fbb9e5413561bc9625f676a7bc599a3cbdf62096bcd012dd,2024-10-24 19:24:37,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
153
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-24,0x518f90668a03279ea9a67e57e1f77300aa9e551267e24e3c74d488ef031dec61,2024-10-24 19:24:57,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
154
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-24,0xe74cf41e7d6809c0833ebd576464f0cb3d909689c050b809aeab68eec748c0e0,2024-10-24 19:25:17,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
155
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-24,0x360ef20f43eb93b89ffa27f5c8d8172d7cef3736fa6760c136f3f6c6069d1f15,2024-10-24 19:25:37,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
156
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-25,0x1ef28e781f3d79a97f68f65ee074f4d5fc2017b5cd873de4c9b8aa14481aceba,2024-10-25 18:59:59,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
157
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-25,0xd236de3085624b6076c806dd047510a045427eaffc2a442fd0f519f9d9634e85,2024-10-25 19:25:49,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
158
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-25,0xee4dabd6cb62b7edcdcab7bd57f6ac5e20d525387a25f16758cc8d1ecd19f73b,2024-10-25 19:26:09,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
159
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-25,0x5b6224dc73111cfd98476df1b0dd985cad877898bbd93b6e5ef08f6f72853c8b,2024-10-25 19:26:29,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
160
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-25,0x05317fd0de5f014271756ba00fb4ee549bda6b04c6990815fdb380cbbbbc6d09,2024-10-25 19:26:47,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
161
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-26,0x217f3af788804ae6e562907d9521f723954a33600f414672653ea27580068465,2024-10-26 19:05:07,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
162
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-26,0xa2b613d431ca658ac1021ff3c23a68a0de4cd0b8a4e66b19b9af3b6150f9d516,2024-10-26 19:30:55,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
163
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-26,0x66c7c50ad857ef0d2a85ef5995c66a03be668354be4cb3d95e45528a21536a38,2024-10-26 19:31:09,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
164
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-26,0xfc2f9428e250fbe061b0654d93d3a11357aded6ab8a77e3909dfa81ef46441ba,2024-10-26 19:31:29,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
165
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-26,0x375a00e2b2a0b054cc05720614d93c507de8e2b5e2172c7a8634e0657ccdc6b8,2024-10-26 19:31:49,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
166
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-27,0xd3cb6bb7d734ffda7fdf1fb5acbf59de43ec0de8029493598ceb66eee64c826e,2024-10-27 19:09:05,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
167
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-27,0x9fb681cfbd404e934da5caa9501ad344f09cbf7392da91e877aa9beaa79f8d5b,2024-10-27 19:34:53,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
168
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-27,0x5531415dba71092cca3d3692f881825c21494b4a805a76fdc2d8cc241ba21671,2024-10-27 19:35:11,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
169
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-27,0x88ebc564c11d0d965d695ccef18b6f74a8f912845cf881b804fe4ac40fca4496,2024-10-27 19:35:31,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
170
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-27,0x0fc54a1c69c596af4e206d8f75785fb20f1a6e2045861f859b7645f5b4f0386e,2024-10-27 19:35:51,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
171
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-28,0xa00031a4011c14d0bbc21708512ef70a5a2a5d375f030382672538a793127589,2024-10-28 19:10:33,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
172
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-28,0x8d02c3c70e6ee4f3b3b87ce24c97c00b0d7e1b6491fde0c57a31a99b27174f99,2024-10-28 19:36:29,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
173
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-28,0xeda6184920bb594ad0449b6fe9762cc3444684df691e722963fefca8f2626fe2,2024-10-28 19:36:55,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
174
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-28,0x95477eafc145e1d5b1f418266041acf086e5ef68d3e9cde3ab04bb3c26d87824,2024-10-28 19:37:15,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
175
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-28,0x2fecdf097c478a3a9c95fe2388690037b4d36deeedc8e43fead5301821216e64,2024-10-28 19:37:35,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
176
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-29,0xe01b84d49c84e01c5715a9f8c4459126758201b57d224a6f82e76e15085a71e4,2024-10-29 19:13:05,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
177
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-29,0xf02f9f552b4034c184b13da263df2fb0d1f2d646df7add4b125a196079b2abd3,2024-10-29 19:38:55,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
178
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-29,0x3938b5bd5b140b0b65d377727634264f1d6bf5406f7541c542151eb5d4bba689,2024-10-29 19:39:15,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
179
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-29,0x9026951710b3a50c1f810aae614d91e36a0cff079a095d5665fe075a9043cc55,2024-10-29 19:39:35,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
180
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-29,0x223eb50fcfe4197559b263fa627e836c3eb34ca5aed52debdc10c1f7cab43c9d,2024-10-29 19:39:53,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
181
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-30,0x8582916cc4cebe710368798b63a258579e191aa8458ef3ab053d6bd94742ca66,2024-10-30 19:15:53,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
182
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-30,0xd0e43873574f9b5d2ebf2e574e8df23b3e28848f38c9d87d05ff4f049e677af4,2024-10-30 19:41:45,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
183
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-30,0x2df7a6b5e288b33fbf5d6d781d303bb38eccd3b524f363ae1af3588c04b0b7aa,2024-10-30 19:42:03,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
184
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-30,0x28c95deb4a724ce96f75db7e571f33f76246c7820c4b6c3c7676b99535abc49a,2024-10-30 19:42:17,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
185
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-30,0x158bb912fb5c9fb2cc0dbe39403ebd89af6c43ce1a4f52967a56aec88d1b75c5,2024-10-30 19:42:37,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
186
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-31,0x040dc97e7862c2c8171404a551e1a384ece5660a57e954eb74854dacf9c61fb4,2024-10-31 19:17:05,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
187
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-31,0x9da0aac3d1fdc020b59a9189477a0da83ed977fffb95621ec44217144cadf551,2024-10-31 19:42:51,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
188
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-31,0x2f33cf3b588fc7c64f35de8fc59037f4d0adf1a0d3eb51d4252a21cc50c8eb7e,2024-10-31 19:43:11,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
189
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-31,0xc31f680881727987cd0acbb1a41cfb4181893e302a8efdca6fe8ea7de0a41099,2024-10-31 19:43:29,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
190
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-10-31,0x85e404a4890a59a6effaecc5264d520c29e390507ac3928ccf2315e3b5fe793e,2024-10-31 19:43:49,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
191
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-01,0x1802f2651936e4546c66de5da6938e44b87264441b7474cd4467550c404eec22,2024-11-01 19:19:17,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
192
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-01,0x7ad26e34cfb57041448e8fe66e13e4b7b4ef455420fb991cc7b80173156c63f3,2024-11-01 19:45:07,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
193
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-01,0x68fb23d59aee63bd0828eeacba23401f9e8f4c3cfe14c4ee68a0770232fd0c6d,2024-11-01 19:45:27,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
194
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-01,0x6782b12f2d402145479c2d924b23f2192cc28785e56be161606081de2fde68bf,2024-11-01 19:45:45,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
195
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-01,0xe07a8e535f1bae4b0a24069cefa0bf27cde63fb62adc6ca60a59b1f497d935a6,2024-11-01 19:46:03,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
196
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-02,0x617248afac580453cc0d28a3f15797f8834e814e07c562c7647418c2717fc3a1,2024-11-02 19:21:25,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
197
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-02,0x85f67b51bca14306a725ea35185273710f3bc67425394c949d96ddd9b58bd3e3,2024-11-02 19:47:19,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
198
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-02,0x5f736fd5a5a858e89a982a294810b0e394d729cf159f69f72a6d4f8bbf819372,2024-11-02 19:47:37,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
199
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-02,0x88d799d9b24ce3b9c2022127b1a9fce4851089fac6b589d35dc1fe636554eb72,2024-11-02 19:47:57,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
200
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-02,0x5318d7a208a8656d937407312e98832708116a215c30b9aa6bcfc02be714e463,2024-11-02 19:48:15,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
201
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-03,0xb4c218e08e15d67bdce233db280b2c39fbb12eaf6868b3f4fc361b60f92dc3cf,2024-11-03 19:23:19,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
202
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-03,0xd2d2cfeb9a5c6cf7a2cdc8598702a45146da4579f800628499e04189ea3de559,2024-11-03 19:49:29,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
203
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-03,0xcd0efd92eefc80a14e8cdfd866fe663625ef810eccd0470399482847551e274f,2024-11-03 19:49:49,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
204
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-03,0x4b776be31cc433cf87cf5b71028711a432a98ad9cef38a9954f9f8c7b30fe0fd,2024-11-03 19:50:09,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
205
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-03,0x403310590961833ed5e0232ccd9e465d0bea968c1ac9ca8eca409c692fa5faba,2024-11-03 19:50:29,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
206
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-04,0x7a53660c46a06ce181c632c18f982bbad090d0c392b14d563c451525120ce91f,2024-11-04 19:27:41,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
207
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-04,0x9f1e5fe60f6582d654d3fc157d7e54ab3c7e90f1a5cb5f9d1bd2fb2da03d7118,2024-11-04 19:53:31,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
208
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-04,0x8b7c93c5f72a7fb1be439f5dcfff758ae7734278c86eb0bb942a30ce6d59d9cc,2024-11-04 19:53:49,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
209
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-04,0xa5d6de28b1f0e6ff99acd54d4d27933b75ef41477e2d3d985fee6d7bad107fb5,2024-11-04 19:54:09,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
210
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-04,0xb27813f63f526a86f3f219c25c2d93a0013fc75b1830647bfec622eeddcf337f,2024-11-04 19:54:27,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
211
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-05,0x6ff2f5c8fdb1ff1cdcc1e2af37c8584f0876fcf2eb08c07913f5b8320f5a98f0,2024-11-05 19:29:29,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
212
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-05,0x31991c9e4c950e833211a6088f1a92fe48beb77aec9ff91d052348982529f0c9,2024-11-05 19:55:23,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
213
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-05,0x6a49f3b11d3b74400e6226377fab2f120e4ae1c612cb543038012449481c9c96,2024-11-05 19:55:41,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
214
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-05,0x74cd714e4161130f3f65722c2d8320119a73b9b4903e35ef4c33262b0c8de825,2024-11-05 19:55:59,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
215
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-05,0xc2dc3ffc66d1c310f93449a456dd3e753940f5468c09daa0788435755a7014bd,2024-11-05 19:56:21,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
216
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-06,0x50bef7a9a824cc2f0bb71f0e18a494d31ddf9940eca724414155cc7337f4fb3a,2024-11-06 19:31:07,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
217
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-06,0xa57c0b6fa67f07d324fa72730e30246915fa2d8ad624c159e3f64b0135707b52,2024-11-06 19:31:25,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
218
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-06,0xfcfadc6d2a48eb5a1ccbe37896c5ad40fab88eb68b54313d2be7270f64cb3606,2024-11-06 19:31:45,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
219
+ optimism,0x65F0fDeBCe6E62c195A3Bd5f2447c87991BEbFF1,2024-11-06,0x3818bfd6ec999bf226e75c57b02976bcc96ce3bb0fb1fe7bd8b9c3a4a3b9dd7c,2024-11-06 19:32:05,0x66749af7e077bfa30aca7c671d56f07e95304722,0x65f0fdebce6e62c195a3bd5f2447c87991bebff1,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
220
+ optimism,0x5f0C4273Ff97ae91fc8D2fc8621b5E37a741d1b1,2024-10-08,0xc1cdf7fe5e6cf49304dff2c6f0e21c2efe6eaee974397569a5bf6d8a07f25278,2024-10-08 15:43:15,0xa0ff35bfbd3c42e3afe29255742c7558498f5544,0x5f0c4273ff97ae91fc8d2fc8621b5e37a741d1b1,0.0,0xA0fF35Bfbd3C42E3aFE29255742C7558498f5544
221
+ optimism,0x5f0C4273Ff97ae91fc8D2fc8621b5E37a741d1b1,2024-10-08,0x4bd5c053da25974ede509aece519ff525c8021498ac001ec733f5f10a8ce2a8d,2024-10-08 15:43:49,0xa0ff35bfbd3c42e3afe29255742c7558498f5544,0x5f0c4273ff97ae91fc8d2fc8621b5e37a741d1b1,0.0,0xA0fF35Bfbd3C42E3aFE29255742C7558498f5544
222
+ optimism,0x5f0C4273Ff97ae91fc8D2fc8621b5E37a741d1b1,2024-10-16,0x2f2befe741ea2f67d1866ad2391f4449a25a24b282bb55a2671aff77ca4c0f8c,2024-10-16 17:26:29,0xa0ff35bfbd3c42e3afe29255742c7558498f5544,0x5f0c4273ff97ae91fc8d2fc8621b5e37a741d1b1,0.0,0xA0fF35Bfbd3C42E3aFE29255742C7558498f5544
223
+ base,0xaC55EEb3fdAcfdFae78c62cAA58934900Ad54ED2,2024-10-14,0xc0b652ed397ccf290383de61e39564df58c60ff0838e23db7fbb16e39ab92278,2024-10-14 09:31:17,0x66749af7e077bfa30aca7c671d56f07e95304722,0xac55eeb3fdacfdfae78c62caa58934900ad54ed2,0.0,0x66749AF7e077Bfa30aca7c671d56F07E95304722
daily_value_locked.csv ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ chain_name,date,event,topic_0,from,to,token_id,token0,token1,liquidity,amount0,amount1,amount0_usd,amount1_usd
2
+ optimism,2024-10-07,Transfer,0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef,0x0000000000000000000000000000000000000000,0x5f0c4273ff97ae91fc8d2fc8621b5e37a741d1b1,826974,0x2218a117083f5B482B0bB821d27056Ba9c04b1D3,0xdFA46478F9e5EA86d57387849598dbFB2e964b02,13516644515555081265,8.98929230571145,20.324144854406946,9.97811445933971,10.184307041674192
3
+ base,2024-09-19,Transfer,0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef,0x0000000000000000000000000000000000000000,0xa13dfc6ddcff0b5b637e721ee83d6cf7e0676e73,963863,0x01CCF4941298a0b5AC4714c0E1799a2dF8387048,0x4200000000000000000000000000000000000006,1210264887099988865,359.58545796548844,0.0040734158306472,9.341785679831974,10.270669941235578
4
+ base,2024-09-26,Transfer,0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef,0x0000000000000000000000000000000000000000,0xac55eeb3fdacfdfae78c62caa58934900ad54ed2,978001,0x01CCF4941298a0b5AC4714c0E1799a2dF8387048,0x4200000000000000000000000000000000000006,1524286215726092055,469.7981777244338,0.004945631076533,12.205037194519935,12.469864740059744
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ web3
2
+ gradio
3
+ plotly
4
+ pandas
5
+ requests
6
+ python-dotenv
restart_space.py ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from huggingface_hub import HfApi
2
+ import os
3
+
4
+ def restart_space():
5
+ token = os.environ['HF_TOKEN'] # Please navigate to Settings > Secrets and variables > Actions and define "HF_TOKEN".
6
+ repo_id = "gxurxv/optimus-metrics" # Please replace this value with the name of your own Hugging Face Space.
7
+
8
+ try:
9
+ HfApi().restart_space(repo_id=repo_id, token=token)
10
+ print(f"Successfully restarted Space: {repo_id}")
11
+ except Exception as e:
12
+ print(f"Failed to restart Space {repo_id}: {e}")
13
+
14
+ if __name__ == "__main__":
15
+ restart_space()