@mainsail/evm-contracts 0.0.1-evm.5 → 0.0.1-evm.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1074 @@
1
+ {
2
+ "abi": [
3
+ {
4
+ "type": "function",
5
+ "name": "UPGRADE_INTERFACE_VERSION",
6
+ "inputs": [],
7
+ "outputs": [{ "name": "", "type": "string", "internalType": "string" }],
8
+ "stateMutability": "view"
9
+ },
10
+ {
11
+ "type": "function",
12
+ "name": "activeValidatorsCount",
13
+ "inputs": [],
14
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
15
+ "stateMutability": "view"
16
+ },
17
+ {
18
+ "type": "function",
19
+ "name": "addValidator",
20
+ "inputs": [
21
+ { "name": "addr", "type": "address", "internalType": "address" },
22
+ { "name": "blsPublicKey", "type": "bytes", "internalType": "bytes" },
23
+ { "name": "isResigned", "type": "bool", "internalType": "bool" }
24
+ ],
25
+ "outputs": [],
26
+ "stateMutability": "nonpayable"
27
+ },
28
+ {
29
+ "type": "function",
30
+ "name": "addVotes",
31
+ "inputs": [
32
+ { "name": "voters", "type": "address[]", "internalType": "address[]" },
33
+ { "name": "validators", "type": "address[]", "internalType": "address[]" }
34
+ ],
35
+ "outputs": [],
36
+ "stateMutability": "nonpayable"
37
+ },
38
+ {
39
+ "type": "function",
40
+ "name": "calculateRoundValidators",
41
+ "inputs": [{ "name": "n", "type": "uint8", "internalType": "uint8" }],
42
+ "outputs": [],
43
+ "stateMutability": "nonpayable"
44
+ },
45
+ {
46
+ "type": "function",
47
+ "name": "fee",
48
+ "inputs": [],
49
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
50
+ "stateMutability": "view"
51
+ },
52
+ {
53
+ "type": "function",
54
+ "name": "getAllValidators",
55
+ "inputs": [],
56
+ "outputs": [
57
+ {
58
+ "name": "",
59
+ "type": "tuple[]",
60
+ "internalType": "struct ConsensusV1.Validator[]",
61
+ "components": [
62
+ { "name": "addr", "type": "address", "internalType": "address" },
63
+ {
64
+ "name": "data",
65
+ "type": "tuple",
66
+ "internalType": "struct ConsensusV1.ValidatorData",
67
+ "components": [
68
+ { "name": "voteBalance", "type": "uint256", "internalType": "uint256" },
69
+ { "name": "fee", "type": "uint128", "internalType": "uint128" },
70
+ { "name": "votersCount", "type": "uint64", "internalType": "uint64" },
71
+ { "name": "isResigned", "type": "bool", "internalType": "bool" },
72
+ { "name": "blsPublicKey", "type": "bytes", "internalType": "bytes" }
73
+ ]
74
+ }
75
+ ]
76
+ }
77
+ ],
78
+ "stateMutability": "view"
79
+ },
80
+ {
81
+ "type": "function",
82
+ "name": "getRoundValidators",
83
+ "inputs": [],
84
+ "outputs": [
85
+ {
86
+ "name": "",
87
+ "type": "tuple[]",
88
+ "internalType": "struct ConsensusV1.Validator[]",
89
+ "components": [
90
+ { "name": "addr", "type": "address", "internalType": "address" },
91
+ {
92
+ "name": "data",
93
+ "type": "tuple",
94
+ "internalType": "struct ConsensusV1.ValidatorData",
95
+ "components": [
96
+ { "name": "voteBalance", "type": "uint256", "internalType": "uint256" },
97
+ { "name": "fee", "type": "uint128", "internalType": "uint128" },
98
+ { "name": "votersCount", "type": "uint64", "internalType": "uint64" },
99
+ { "name": "isResigned", "type": "bool", "internalType": "bool" },
100
+ { "name": "blsPublicKey", "type": "bytes", "internalType": "bytes" }
101
+ ]
102
+ }
103
+ ]
104
+ }
105
+ ],
106
+ "stateMutability": "view"
107
+ },
108
+ {
109
+ "type": "function",
110
+ "name": "getRounds",
111
+ "inputs": [
112
+ { "name": "offset", "type": "uint256", "internalType": "uint256" },
113
+ { "name": "count", "type": "uint256", "internalType": "uint256" }
114
+ ],
115
+ "outputs": [
116
+ {
117
+ "name": "",
118
+ "type": "tuple[]",
119
+ "internalType": "struct ConsensusV1.Round[]",
120
+ "components": [
121
+ { "name": "round", "type": "uint256", "internalType": "uint256" },
122
+ {
123
+ "name": "validators",
124
+ "type": "tuple[]",
125
+ "internalType": "struct ConsensusV1.RoundValidator[]",
126
+ "components": [
127
+ { "name": "addr", "type": "address", "internalType": "address" },
128
+ { "name": "voteBalance", "type": "uint256", "internalType": "uint256" }
129
+ ]
130
+ }
131
+ ]
132
+ }
133
+ ],
134
+ "stateMutability": "view"
135
+ },
136
+ {
137
+ "type": "function",
138
+ "name": "getRoundsCount",
139
+ "inputs": [],
140
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
141
+ "stateMutability": "view"
142
+ },
143
+ {
144
+ "type": "function",
145
+ "name": "getValidator",
146
+ "inputs": [{ "name": "addr", "type": "address", "internalType": "address" }],
147
+ "outputs": [
148
+ {
149
+ "name": "",
150
+ "type": "tuple",
151
+ "internalType": "struct ConsensusV1.Validator",
152
+ "components": [
153
+ { "name": "addr", "type": "address", "internalType": "address" },
154
+ {
155
+ "name": "data",
156
+ "type": "tuple",
157
+ "internalType": "struct ConsensusV1.ValidatorData",
158
+ "components": [
159
+ { "name": "voteBalance", "type": "uint256", "internalType": "uint256" },
160
+ { "name": "fee", "type": "uint128", "internalType": "uint128" },
161
+ { "name": "votersCount", "type": "uint64", "internalType": "uint64" },
162
+ { "name": "isResigned", "type": "bool", "internalType": "bool" },
163
+ { "name": "blsPublicKey", "type": "bytes", "internalType": "bytes" }
164
+ ]
165
+ }
166
+ ]
167
+ }
168
+ ],
169
+ "stateMutability": "view"
170
+ },
171
+ {
172
+ "type": "function",
173
+ "name": "getVotes",
174
+ "inputs": [
175
+ { "name": "addr", "type": "address", "internalType": "address" },
176
+ { "name": "count", "type": "uint256", "internalType": "uint256" }
177
+ ],
178
+ "outputs": [
179
+ {
180
+ "name": "",
181
+ "type": "tuple[]",
182
+ "internalType": "struct ConsensusV1.VoteResult[]",
183
+ "components": [
184
+ { "name": "voter", "type": "address", "internalType": "address" },
185
+ { "name": "validator", "type": "address", "internalType": "address" }
186
+ ]
187
+ }
188
+ ],
189
+ "stateMutability": "view"
190
+ },
191
+ {
192
+ "type": "function",
193
+ "name": "getVotesCount",
194
+ "inputs": [],
195
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
196
+ "stateMutability": "view"
197
+ },
198
+ {
199
+ "type": "function",
200
+ "name": "initialize",
201
+ "inputs": [{ "name": "registrationFee", "type": "uint128", "internalType": "uint128" }],
202
+ "outputs": [],
203
+ "stateMutability": "nonpayable"
204
+ },
205
+ {
206
+ "type": "function",
207
+ "name": "isValidatorRegistered",
208
+ "inputs": [{ "name": "addr", "type": "address", "internalType": "address" }],
209
+ "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
210
+ "stateMutability": "view"
211
+ },
212
+ {
213
+ "type": "function",
214
+ "name": "owner",
215
+ "inputs": [],
216
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
217
+ "stateMutability": "view"
218
+ },
219
+ {
220
+ "type": "function",
221
+ "name": "proxiableUUID",
222
+ "inputs": [],
223
+ "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
224
+ "stateMutability": "view"
225
+ },
226
+ {
227
+ "type": "function",
228
+ "name": "registerValidator",
229
+ "inputs": [
230
+ { "name": "blsPublicKey", "type": "bytes", "internalType": "bytes" },
231
+ { "name": "proofOfPossession", "type": "bytes", "internalType": "bytes" }
232
+ ],
233
+ "outputs": [],
234
+ "stateMutability": "payable"
235
+ },
236
+ {
237
+ "type": "function",
238
+ "name": "renounceOwnership",
239
+ "inputs": [],
240
+ "outputs": [],
241
+ "stateMutability": "nonpayable"
242
+ },
243
+ { "type": "function", "name": "resignValidator", "inputs": [], "outputs": [], "stateMutability": "nonpayable" },
244
+ {
245
+ "type": "function",
246
+ "name": "resignedValidatorsCount",
247
+ "inputs": [],
248
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
249
+ "stateMutability": "view"
250
+ },
251
+ {
252
+ "type": "function",
253
+ "name": "roundValidatorsCount",
254
+ "inputs": [],
255
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
256
+ "stateMutability": "view"
257
+ },
258
+ {
259
+ "type": "function",
260
+ "name": "setFee",
261
+ "inputs": [{ "name": "registrationFee", "type": "uint128", "internalType": "uint128" }],
262
+ "outputs": [],
263
+ "stateMutability": "nonpayable"
264
+ },
265
+ {
266
+ "type": "function",
267
+ "name": "transferOwnership",
268
+ "inputs": [{ "name": "newOwner", "type": "address", "internalType": "address" }],
269
+ "outputs": [],
270
+ "stateMutability": "nonpayable"
271
+ },
272
+ { "type": "function", "name": "unvote", "inputs": [], "outputs": [], "stateMutability": "nonpayable" },
273
+ {
274
+ "type": "function",
275
+ "name": "updateValidator",
276
+ "inputs": [
277
+ { "name": "blsPublicKey", "type": "bytes", "internalType": "bytes" },
278
+ { "name": "proofOfPossession", "type": "bytes", "internalType": "bytes" }
279
+ ],
280
+ "outputs": [],
281
+ "stateMutability": "nonpayable"
282
+ },
283
+ {
284
+ "type": "function",
285
+ "name": "updateVoters",
286
+ "inputs": [{ "name": "voters", "type": "address[]", "internalType": "address[]" }],
287
+ "outputs": [],
288
+ "stateMutability": "nonpayable"
289
+ },
290
+ {
291
+ "type": "function",
292
+ "name": "upgradeToAndCall",
293
+ "inputs": [
294
+ { "name": "newImplementation", "type": "address", "internalType": "address" },
295
+ { "name": "data", "type": "bytes", "internalType": "bytes" }
296
+ ],
297
+ "outputs": [],
298
+ "stateMutability": "payable"
299
+ },
300
+ {
301
+ "type": "function",
302
+ "name": "validatorsCount",
303
+ "inputs": [],
304
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
305
+ "stateMutability": "view"
306
+ },
307
+ {
308
+ "type": "function",
309
+ "name": "version",
310
+ "inputs": [],
311
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
312
+ "stateMutability": "pure"
313
+ },
314
+ {
315
+ "type": "function",
316
+ "name": "vote",
317
+ "inputs": [{ "name": "addr", "type": "address", "internalType": "address" }],
318
+ "outputs": [],
319
+ "stateMutability": "nonpayable"
320
+ },
321
+ {
322
+ "type": "event",
323
+ "name": "FeeUpdated",
324
+ "inputs": [{ "name": "fee", "type": "uint256", "indexed": false, "internalType": "uint256" }],
325
+ "anonymous": false
326
+ },
327
+ {
328
+ "type": "event",
329
+ "name": "Initialized",
330
+ "inputs": [{ "name": "version", "type": "uint64", "indexed": false, "internalType": "uint64" }],
331
+ "anonymous": false
332
+ },
333
+ {
334
+ "type": "event",
335
+ "name": "OwnershipTransferred",
336
+ "inputs": [
337
+ { "name": "previousOwner", "type": "address", "indexed": true, "internalType": "address" },
338
+ { "name": "newOwner", "type": "address", "indexed": true, "internalType": "address" }
339
+ ],
340
+ "anonymous": false
341
+ },
342
+ {
343
+ "type": "event",
344
+ "name": "Unvoted",
345
+ "inputs": [
346
+ { "name": "voter", "type": "address", "indexed": false, "internalType": "address" },
347
+ { "name": "validator", "type": "address", "indexed": false, "internalType": "address" }
348
+ ],
349
+ "anonymous": false
350
+ },
351
+ {
352
+ "type": "event",
353
+ "name": "Upgraded",
354
+ "inputs": [{ "name": "implementation", "type": "address", "indexed": true, "internalType": "address" }],
355
+ "anonymous": false
356
+ },
357
+ {
358
+ "type": "event",
359
+ "name": "ValidatorRegistered",
360
+ "inputs": [
361
+ { "name": "addr", "type": "address", "indexed": false, "internalType": "address" },
362
+ { "name": "blsPublicKey", "type": "bytes", "indexed": false, "internalType": "bytes" }
363
+ ],
364
+ "anonymous": false
365
+ },
366
+ {
367
+ "type": "event",
368
+ "name": "ValidatorResigned",
369
+ "inputs": [{ "name": "addr", "type": "address", "indexed": false, "internalType": "address" }],
370
+ "anonymous": false
371
+ },
372
+ {
373
+ "type": "event",
374
+ "name": "ValidatorUpdated",
375
+ "inputs": [
376
+ { "name": "addr", "type": "address", "indexed": false, "internalType": "address" },
377
+ { "name": "blsPublicKey", "type": "bytes", "indexed": false, "internalType": "bytes" }
378
+ ],
379
+ "anonymous": false
380
+ },
381
+ {
382
+ "type": "event",
383
+ "name": "Voted",
384
+ "inputs": [
385
+ { "name": "voter", "type": "address", "indexed": false, "internalType": "address" },
386
+ { "name": "validator", "type": "address", "indexed": false, "internalType": "address" }
387
+ ],
388
+ "anonymous": false
389
+ },
390
+ {
391
+ "type": "error",
392
+ "name": "AddressEmptyCode",
393
+ "inputs": [{ "name": "target", "type": "address", "internalType": "address" }]
394
+ },
395
+ { "type": "error", "name": "AlreadyVoted", "inputs": [] },
396
+ { "type": "error", "name": "BellowMinValidators", "inputs": [] },
397
+ { "type": "error", "name": "BlsKeyAlreadyRegistered", "inputs": [] },
398
+ { "type": "error", "name": "BlsKeyIsInvalid", "inputs": [] },
399
+ { "type": "error", "name": "CallerIsNotValidator", "inputs": [] },
400
+ {
401
+ "type": "error",
402
+ "name": "ERC1967InvalidImplementation",
403
+ "inputs": [{ "name": "implementation", "type": "address", "internalType": "address" }]
404
+ },
405
+ { "type": "error", "name": "ERC1967NonPayable", "inputs": [] },
406
+ { "type": "error", "name": "FailedCall", "inputs": [] },
407
+ { "type": "error", "name": "ImportIsNotAllowed", "inputs": [] },
408
+ { "type": "error", "name": "InvalidFee", "inputs": [] },
409
+ { "type": "error", "name": "InvalidInitialization", "inputs": [] },
410
+ { "type": "error", "name": "InvalidInputLength", "inputs": [] },
411
+ { "type": "error", "name": "InvalidParameters", "inputs": [] },
412
+ { "type": "error", "name": "InvalidProofOfPossession", "inputs": [] },
413
+ {
414
+ "type": "error",
415
+ "name": "InvalidRange",
416
+ "inputs": [
417
+ { "name": "min", "type": "uint256", "internalType": "uint256" },
418
+ { "name": "max", "type": "uint256", "internalType": "uint256" }
419
+ ]
420
+ },
421
+ { "type": "error", "name": "MissingVote", "inputs": [] },
422
+ { "type": "error", "name": "NoActiveValidators", "inputs": [] },
423
+ { "type": "error", "name": "NotInitializing", "inputs": [] },
424
+ {
425
+ "type": "error",
426
+ "name": "OwnableInvalidOwner",
427
+ "inputs": [{ "name": "owner", "type": "address", "internalType": "address" }]
428
+ },
429
+ {
430
+ "type": "error",
431
+ "name": "OwnableUnauthorizedAccount",
432
+ "inputs": [{ "name": "account", "type": "address", "internalType": "address" }]
433
+ },
434
+ { "type": "error", "name": "PrecompileCallFailed", "inputs": [] },
435
+ { "type": "error", "name": "RefundFailed", "inputs": [] },
436
+ { "type": "error", "name": "UUPSUnauthorizedCallContext", "inputs": [] },
437
+ {
438
+ "type": "error",
439
+ "name": "UUPSUnsupportedProxiableUUID",
440
+ "inputs": [{ "name": "slot", "type": "bytes32", "internalType": "bytes32" }]
441
+ },
442
+ { "type": "error", "name": "ValidatorAlreadyRegistered", "inputs": [] },
443
+ { "type": "error", "name": "ValidatorAlreadyResigned", "inputs": [] },
444
+ { "type": "error", "name": "ValidatorNotRegistered", "inputs": [] },
445
+ { "type": "error", "name": "VoteResignedValidator", "inputs": [] },
446
+ { "type": "error", "name": "VoteSameValidator", "inputs": [] },
447
+ { "type": "error", "name": "VoteValidatorWithoutBlsPublicKey", "inputs": [] }
448
+ ],
449
+ "bytecode": {
450
+ "object": "0x60a0604052306080523480156012575f5ffd5b5060805161424b6100395f395f81816126630152818161268c01526127cb015261424b5ff3fe6080604052600436106101d0575f3560e01c80637c8a92c3116100fd578063c5a7444911610092578063eb9019d411610062578063eb9019d414610512578063ed612f8c1461053e578063f2fde38b14610552578063f3513a3714610571575f5ffd5b8063c5a7444914610488578063d04a68c7146104a7578063ddca3f43146104d6578063e9257dc8146104f3575f5ffd5b8063a250eaf1116100cd578063a250eaf114610402578063ad3cb1cc14610423578063b84d356e14610460578063b85f5da214610474575f5ffd5b80637c8a92c31461036a5780638da5cb5b146103895780638f062626146103cf578063a09686c4146103ee575f5ffd5b80633687f24a1161017357806354fd4d501161014357806354fd4d501461030557806356db9ef1146103185780636dd7d8ea14610337578063715018a614610356575f5ffd5b80633687f24a1461029357806340f74f47146102b25780634f1ef286146102de57806352d1902d146102f1575f5ffd5b80631b605b86116101ae5780631b605b8614610237578063226f26451461024b5780632bdf6d43146102605780633174b6891461027f575f5ffd5b80630777cbef146101d45780630d2bd909146101f75780631904bb2e1461020b575b5f5ffd5b3480156101df575f5ffd5b506006545b6040519081526020015b60405180910390f35b348015610202575f5ffd5b506004546101e4565b348015610216575f5ffd5b5061022a6102253660046138a3565b610585565b6040516101ee919061397e565b348015610242575f5ffd5b50600a546101e4565b61025e6102593660046139d4565b6106c2565b005b34801561026b575f5ffd5b5061025e61027a366004613a7e565b6108ec565b34801561028a575f5ffd5b5061025e61093a565b34801561029e575f5ffd5b5061025e6102ad366004613abc565b610989565b3480156102bd575f5ffd5b506102d16102cc366004613ae2565b6109e6565b6040516101ee9190613b02565b61025e6102ec366004613bcf565b610b79565b3480156102fc575f5ffd5b506101e4610b98565b348015610310575f5ffd5b5060016101e4565b348015610323575f5ffd5b5061025e610332366004613abc565b610bb3565b348015610342575f5ffd5b5061025e6103513660046138a3565b610cca565b348015610361575f5ffd5b5061025e610f7d565b348015610375575f5ffd5b5061025e610384366004613c90565b610f90565b348015610394575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b0390911681526020016101ee565b3480156103da575f5ffd5b5061025e6103e93660046139d4565b611214565b3480156103f9575f5ffd5b506011546101e4565b34801561040d575f5ffd5b506104166112f4565b6040516101ee9190613cf5565b34801561042e575f5ffd5b50610453604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101ee9190613d4c565b34801561046b575f5ffd5b50600e546101e4565b34801561047f575f5ffd5b5061025e6114b7565b348015610493575f5ffd5b5061025e6104a2366004613d5e565b61162c565b3480156104b2575f5ffd5b506104c66104c13660046138a3565b611bfa565b60405190151581526020016101ee565b3480156104e1575f5ffd5b506010546001600160801b03166101e4565b3480156104fe575f5ffd5b5061025e61050d366004613d7e565b611c17565b34801561051d575f5ffd5b5061053161052c366004613ddc565b611cda565b6040516101ee9190613e04565b348015610549575f5ffd5b506003546101e4565b34801561055d575f5ffd5b5061025e61056c3660046138a3565b611edb565b34801561057c575f5ffd5b50610416611f18565b61058d613795565b61059682611bfa565b6105b35760405163510b8aad60e11b815260040160405180910390fd5b6040805180820182526001600160a01b0384168082525f908152602081815290839020835160a0810185528154815260018201546001600160801b03811682850152600160801b81046001600160401b031695820195909552600160c01b90940460ff161515606085015260028101805493949285019360808401919061063990613e5e565b80601f016020809104026020016040519081016040528092919081815260200182805461066590613e5e565b80156106b05780601f10610687576101008083540402835291602001916106b0565b820191905f5260205f20905b81548152906001019060200180831161069357829003601f168201915b50505091909252505050905292915050565b6010546001600160801b031634146106ed576040516358d620b360e01b815260040160405180910390fd5b335f9081526001602052604090205460ff161561071d5760405163132e7efb60e31b815260040160405180910390fd5b610729848484846120d5565b610746576040516392536faf60e01b815260040160405180910390fd5b61075084846121e6565b5f6040518060a001604052805f8152602001346001600160801b031681526020015f6001600160401b031681526020015f1515815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525050338152600160208181526040808420805460ff19168417905583825292839020855181559085015191810180549386015160608701511515600160c01b0260ff60c01b196001600160401b03909216600160801b026001600160c01b03199096166001600160801b039095169490941794909417939093169190911790915560808301519293508392909150600282019061085a9082613ed4565b5050600380546001810182555f919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b031916339081179091556108aa915061225a565b7f61809fa303a3a57f4d70552f533f3e0b003173d424590cd4bb22a2afe000990c3386866040516108dd93929190613f8e565b60405180910390a15050505050565b6108f46122cd565b5f5b818110156109355761092d83838381811061091357610913613fcd565b905060200201602081019061092891906138a3565b612328565b6001016108f6565b505050565b7f6572af8bf9a0a86efb88dcc30011626a15c9c4603503aa4466a3f87a1867deef33610964612402565b604080516001600160a01b0393841681529290911660208301520160405180910390a1565b6109916122cd565b601080546001600160801b0319166001600160801b0383169081179091556040519081527f8c4d35e54a3f2ef1134138fd8ea3daee6a3c89e10d2665996babdf70261e2c76906020015b60405180910390a150565b60606109f06122cd565b60115482908410610a0257505f610a26565b601154610a0f8486613ff5565b1115610a2657601154610a23908590614008565b90505b5f816001600160401b03811115610a3f57610a3f613bbb565b604051908082528060200260200182016040528015610a8457816020015b604080518082019091525f815260606020820152815260200190600190039081610a5d5790505b5090505f5b82811015610b6e5760405180604001604052808288610aa89190613ff5565b610ab3906001613ff5565b81526020016011610ac4848a613ff5565b81548110610ad457610ad4613fcd565b905f5260205f2001805480602002602001604051908101604052809291908181526020015f905b82821015610b42575f848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101610afb565b50505050815250828281518110610b5b57610b5b613fcd565b6020908102919091010152600101610a89565b509150505b92915050565b610b81612658565b610b8a826126fc565b610b948282612704565b5050565b5f610ba16127c0565b505f5160206141f65f395f51905f5290565b5f610bbc612809565b805490915060ff600160401b82041615906001600160401b03165f81158015610be25750825b90505f826001600160401b03166001148015610bfd5750303b155b905081158015610c0b575080155b15610c295760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c5357845460ff60401b1916600160401b1785555b610c5c33612831565b6001600f55601080546001600160801b0319166001600160801b0388161790558315610cc257845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b610cd381611bfa565b610cf05760405163510b8aad60e11b815260040160405180910390fd5b6001600160a01b0381165f9081526020819052604090206001810154600160c01b900460ff1615610d345760405163510ae2bd60e11b815260040160405180910390fd5b806002018054610d4390613e5e565b90505f03610d645760405163970c784d60e01b815260040160405180910390fd5b335f90815260076020526040902080546001600160a01b03848116911603610d9f57604051630d41c52760e01b815260040160405180910390fd5b80546001600160a01b031615610db957610db7612402565b505b604080516080810182526001600160a01b03808616825233803160208085019182525f85870181815260608701828152948252600790925295909520935184549084166001600160a01b03199182161785559051600185015593516002840180549184169186169190911790555160039092018054928216929093169190911790915560085416610e6b5760088054336001600160a01b03199182168117909255600980549091169091179055610ec2565b600980546001600160a01b039081165f9081526007602052604080822060030180546001600160a01b0319908116339081179092558554828552929093206002018054841692909416919091179092558254161790555b600a8054905f610ed18361401b565b9091555050815433319083905f90610eea908490613ff5565b909155505060018281018054601090610f14908490600160801b90046001600160401b0316614033565b82546001600160401b039182166101009390930a928302919092021990911617905550604080513381526001600160a01b03851660208201527fce0c7a2a940807f7dc2ce7a615c2532e915e6c0ac9a08bc4ed9d515a710a53e2910160405180910390a1505050565b610f856122cd565b610f8e5f612842565b565b610f986122cd565b60115415610fb9576040516349625b3b60e01b815260040160405180910390fd5b6001600160a01b0384165f9081526001602052604090205460ff1615610ff25760405163132e7efb60e31b815260040160405180910390fd5b60025f8484604051611005929190614052565b604080519182900390912082526020820192909252015f205460ff161561103f57604051637e4c066f60e01b815260040160405180910390fd5b811561104f5761104f83836121e6565b5f6040518060a001604052805f81526020015f6001600160801b031681526020015f6001600160401b03168152602001831515815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250506001600160a01b0388168152600160208181526040808420805460ff19168417905583825292839020855181559085015191810180549386015160608701511515600160c01b0260ff60c01b196001600160401b03909216600160801b026001600160c01b03199096166001600160801b03909516949094179490941793909316919091179091556080830151929350839290915060028201906111629082613ed4565b5050600380546001810182555f919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0388161790555081156111ca5760068054905f6111c48361401b565b91905055505b6111d3856128b2565b156111e1576111e18561225a565b7f61809fa303a3a57f4d70552f533f3e0b003173d424590cd4bb22a2afe000990c8585856040516108dd93929190613f8e565b61121d33611bfa565b61123a5760405163510b8aad60e11b815260040160405180910390fd5b611246848484846120d5565b611263576040516392536faf60e01b815260040160405180910390fd5b61126d84846121e6565b335f908152602081905260409020600201611289848683614061565b50611293336128b2565b80156112a557506112a3336128fb565b155b156112b3576112b33361225a565b7f4af0b5984c9f88659d661fb64dcb63a5b946809cf1c78a8c6e0f6ef93c9170323385856040516112e693929190613f8e565b60405180910390a150505050565b600c546060905f906001600160401b0381111561131357611313613bbb565b60405190808252806020026020018201604052801561134c57816020015b611339613795565b8152602001906001900390816113315790505b5090505f5b600c548110156114b1575f600c828154811061136f5761136f613fcd565b5f918252602080832091909101546001600160a01b031680835282825260409283902083518085018552828152845160a0810186528254815260018301546001600160801b03811682870152600160801b81046001600160401b031696820196909652600160c01b90950460ff1615156060860152600282018054939650919490938401929091859160808401919061140790613e5e565b80601f016020809104026020016040519081016040528092919081815260200182805461143390613e5e565b801561147e5780601f106114555761010080835404028352916020019161147e565b820191905f5260205f20905b81548152906001019060200180831161146157829003601f168201915b50505050508152505081525084848151811061149c5761149c613fcd565b60209081029190910101525050600101611351565b50919050565b6114c033611bfa565b6114dd5760405163668191af60e11b815260040160405180910390fd5b335f9081526020819052604090206001810154600160c01b900460ff161561151857604051632d8b5c9760e21b815260040160405180910390fd5b600f546004541161153c57604051633b15f1f760e21b815260040160405180910390fd5b6001818101805460ff60c01b1916600160c01b179055600680545f90611563908490613ff5565b9091555061157290503361295d565b60018101546001600160801b0316156115fc5760018101546040515f9133916001600160801b03909116908381818185875af1925050503d805f81146115d3576040519150601f19603f3d011682016040523d82523d5f602084013e6115d8565b606091505b50509050806115fa57604051633c31275160e21b815260040160405180910390fd5b505b6040513381527f24250fc1ec78a1405ddd4cc8b75964858af228d05faa8d4bc1302966d8a54117906020016109db565b6116346122cd565b8060ff165f0361165757604051630e52390960e41b815260040160405180910390fd5b60ff8116600f55611666612a6d565b61166e612c0b565b600d80546001600160a01b03191690556004545f906116939060ff8416908390612c5c565b90508060ff165f036116b8576040516367c0fced60e01b815260040160405180910390fd5b5f5b6004548110156119c5575f600482815481106116d8576116d8613fcd565b5f9182526020808320909101546001600160a01b031680835290829052604090912060018101549192509060ff600160c01b9091041680611727575080600201805461172390613e5e565b1590505b156117335750506119bd565b600d546001600160a01b031661176e5750600d80546001600160a01b0319166001600160a01b03929092169190911790556001600e556119bd565b8360ff16600e54101561178c576117858285612cae565b50506119bd565b600d546001600160a01b039081165f9081526020818152604091829020825180840184529386168452825160a0810184528554815260018601546001600160801b03811682850152600160801b81046001600160401b031694820194909452600160c01b90930460ff161515606084015260028501805491946119aa9490938401929091879160808401919061182190613e5e565b80601f016020809104026020016040519081016040528092919081815260200182805461184d90613e5e565b80156118985780601f1061186f57610100808354040283529160200191611898565b820191905f5260205f20905b81548152906001019060200180831161187b57829003601f168201915b505050919092525050509052604080518082018252600d546001600160a01b03168152815160a0810183528554815260018601546001600160801b038116602080840191909152600160801b82046001600160401b031694830194909452600160c01b900460ff161515606082015260028601805492938401928791608084019161192290613e5e565b80601f016020809104026020016040519081016040528092919081815260200182805461194e90613e5e565b80156119995780601f1061197057610100808354040283529160200191611999565b820191905f5260205f20905b81548152906001019060200180831161197c57829003601f168201915b5050505050815250508152506130f3565b156119b9576119b98386612cae565b5050505b6001016116ba565b50600e545f036119e8576040516367c0fced60e01b815260040160405180910390fd5b600d54600e546001600160a01b03909116905f906001600160401b03811115611a1357611a13613bbb565b604051908082528060200260200182016040528015611a3c578160200160208202803683370190505b5090505f5b600e54811015611a965782828281518110611a5e57611a5e613fcd565b6001600160a01b039283166020918202929092018101919091529381165f908152600b90945260409093205490921691600101611a41565b50611aa08161312f565b601180546001810182555f9182527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680190611add90600c906137f6565b600f546001600160401b03811115611af757611af7613bbb565b604051908082528060200260200182016040528015611b20578160200160208202803683370190505b508051611b3591600c91602090910190613811565b505f5b600f54811015610cc2575f83600e5483611b52919061411a565b81518110611b6257611b62613fcd565b6020026020010151905080600c8381548110611b8057611b80613fcd565b5f918252602080832090910180546001600160a01b039485166001600160a01b0319918216179091556040805180820182529585168087528452838352832054858301908152875460018181018a558986529390942095516002909402909501805493909416921691909117825591519082015501611b38565b6001600160a01b03165f9081526001602052604090205460ff1690565b611c1f6122cd565b828114611c6b5760405162461bcd60e51b81526020600482015260156024820152740d2dce0eae840d8cadccee8d040dad2e6dac2e8c6d605b1b60448201526064015b60405180910390fd5b5f5b83811015611cd357611ccb858583818110611c8a57611c8a613fcd565b9050602002016020810190611c9f91906138a3565b848484818110611cb157611cb1613fcd565b9050602002016020810190611cc691906138a3565b613246565b600101611c6d565b5050505050565b6060611ce46122cd565b5f611cf2835f600a54612c5c565b6001600160401b03811115611d0957611d09613bbb565b604051908082528060200260200182016040528015611d4d57816020015b604080518082019091525f8082526020820152815260200190600190039081611d275790505b506008549091506001600160a01b0390811690851615611d8657506001600160a01b038085165f90815260076020526040902060030154165b5f5b6001600160a01b03821615801590611d9f57508481105b15611e14576001600160a01b038083165f818152600760209081526040918290208251808401909352928252825490931692810192909252908483611de38161401b565b945081518110611df557611df5613fcd565b6020908102919091010152600301546001600160a01b03169150611d88565b80835103611e2757829350505050610b73565b5f816001600160401b03811115611e4057611e40613bbb565b604051908082528060200260200182016040528015611e8457816020015b604080518082019091525f8082526020820152815260200190600190039081611e5e5790505b5090505f5b82811015611ed057848181518110611ea357611ea3613fcd565b6020026020010151828281518110611ebd57611ebd613fcd565b6020908102919091010152600101611e89565b509695505050505050565b611ee36122cd565b6001600160a01b038116611f0c57604051631e4fbdf760e01b81525f6004820152602401611c62565b611f1581612842565b50565b6003546060905f906001600160401b03811115611f3757611f37613bbb565b604051908082528060200260200182016040528015611f7057816020015b611f5d613795565b815260200190600190039081611f555790505b5090505f5b6003548110156114b1575f60038281548110611f9357611f93613fcd565b5f918252602080832091909101546001600160a01b031680835282825260409283902083518085018552828152845160a0810186528254815260018301546001600160801b03811682870152600160801b81046001600160401b031696820196909652600160c01b90950460ff1615156060860152600282018054939650919490938401929091859160808401919061202b90613e5e565b80601f016020809104026020016040519081016040528092919081815260200182805461205790613e5e565b80156120a25780601f10612079576101008083540402835291602001916120a2565b820191905f5260205f20905b81548152906001019060200180831161208557829003601f168201915b5050505050815250508152508484815181106120c0576120c0613fcd565b60209081029190910101525050600101611f75565b5f603084146120f757604051637db491eb60e01b815260040160405180910390fd5b6060821461211857604051637db491eb60e01b815260040160405180910390fd5b5f858585856040516020016121309493929190614139565b60405160208183030381529060405290505f5f63011812006001600160a01b03168360405161215f9190614158565b5f60405180830381855afa9150503d805f8114612197576040519150601f19603f3d011682016040523d82523d5f602084013e61219c565b606091505b50915091508115806121b057508051602014155b156121ce57604051633f48ffd960e21b815260040160405180910390fd5b6121d781614173565b60011498975050505050505050565b5f82826040516121f7929190614052565b60408051918290039091205f8181526002602052919091205490915060ff161561223457604051637e4c066f60e01b815260040160405180910390fd5b61223e83836134b2565b5f908152600260205260409020805460ff191660011790555050565b60048054600180820183555f8390527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90910180546001600160a01b0319166001600160a01b03851617905590546122b29190614008565b6001600160a01b039091165f90815260056020526040902055565b336122ff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610f8e5760405163118cdaa760e01b8152336004820152602401611c62565b6001600160a01b038082165f908152600760205260409020805490911661234d575050565b60018101546001600160a01b038316318110156123ab57612378816001600160a01b03851631614008565b82546001600160a01b03165f90815260208190526040812080549091906123a0908490613ff5565b909155506123ed9050565b6123bf6001600160a01b0384163182614008565b82546001600160a01b03165f90815260208190526040812080549091906123e7908490614008565b90915550505b506001600160a01b0390911631600190910155565b335f90815260076020526040812080546001600160a01b03166124385760405163498ea63d60e01b815260040160405180910390fd5b6009546008546001600160a01b0391821691160361247157600880546001600160a01b0319908116909155600980549091169055612584565b600954336001600160a01b03909116036124ca576002810180546001600160a01b039081165f90815260076020526040902060030180546001600160a01b03199081169091559154600980549093169116179055612584565b600854336001600160a01b039091160361252e576009546001600160a01b039081165f9081526007602052604080822060020180546001600160a01b0319908116909155600880548086168552929093206003015491169216919091179055612584565b60038181018054600280850180546001600160a01b039081165f9081526007602052604080822090970180549583166001600160a01b031996871617905591549454811682529490200180549290931691161790555b80546001600160a01b03165f81815260208190526040812060018401548154919290918391906125b5908490614008565b9091555050600181810180546010906125df908490600160801b90046001600160401b0316614196565b82546001600160401b039182166101009390930a928302919092021990911617905550335f90815260076020526040812080546001600160a01b031990811682556001820183905560028201805482169055600390910180549091169055600a80549161264b836141b5565b9091555091949350505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806126de57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166126d25f5160206141f65f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15610f8e5760405163703e46dd60e11b815260040160405180910390fd5b611f156122cd565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561275e575060408051601f3d908101601f1916820190925261275b918101906141ca565b60015b61278657604051634c9c8ce360e01b81526001600160a01b0383166004820152602401611c62565b5f5160206141f65f395f51905f5281146127b657604051632a87526960e21b815260048101829052602401611c62565b61093583836134d3565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f8e5760405163703e46dd60e11b815260040160405180910390fd5b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610b73565b612839613528565b611f158161354d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b6001600160a01b0381165f9081526020819052604081206001810154600160c01b900460ff161580156128f457508060020180546128ef90613e5e565b151590505b9392505050565b6001600160a01b0381165f90815260056020526040812054600454811061292457505f92915050565b826001600160a01b03166004828154811061294157612941613fcd565b5f918252602090912001546001600160a01b0316149392505050565b612966816128fb565b61296d5750565b6001600160a01b0381165f9081526005602052604081205460045490919061299790600190614008565b9050808214612a1c575f600482815481106129b4576129b4613fcd565b5f91825260209091200154600480546001600160a01b0390921692508291859081106129e2576129e2613fcd565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559290911681526005909152604090208290555b6004805480612a2d57612a2d6141e1565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092556001600160a01b03949094168152600590935250506040812055565b6004545f819003612a7b5750565b5f612a87600183614008565b90505b8015610b94575f612a9c826001613ff5565b60408051426020820152908101849052606001604051602081830303815290604052805190602001205f1c612ad1919061411a565b9050808203612ae05750612bf9565b5f60048381548110612af457612af4613fcd565b5f918252602082200154600480546001600160a01b0390921693509084908110612b2057612b20613fcd565b5f91825260209091200154600480546001600160a01b0390921692509084908110612b4d57612b4d613fcd565b5f91825260209091200154600480546001600160a01b039092169186908110612b7857612b78613fcd565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508160048481548110612bb757612bb7613fcd565b5f91825260208083209190910180546001600160a01b0319166001600160a01b0394851617905593821681526005909352604080842094909455168152208190555b80612c03816141b5565b915050612a8a565b600d546001600160a01b03165b6001600160a01b03811615612c55576001600160a01b039081165f908152600b6020526040902080546001600160a01b0319811690915516612c18565b505f600e55565b5f81831115612c8857604051632457cde760e01b81526004810184905260248101839052604401611c62565b82841015612c975750816128f4565b81841115612ca65750806128f4565b509192915050565b6001600160a01b0382165f90815260208181526040808320815160a0810183528154815260018201546001600160801b03811694820194909452600160801b84046001600160401b031692810192909252600160c01b90920460ff1615156060820152600282018054919291608084019190612d2990613e5e565b80601f0160208091040260200160405190810160405280929190818152602001828054612d5590613e5e565b8015612da05780601f10612d7757610100808354040283529160200191612da0565b820191905f5260205f20905b815481529060010190602001808311612d8357829003601f168201915b505050919092525050604080518082018252600d546001600160a01b03168082525f908152602081815290839020835160a0810185528154815260018201546001600160801b03811682850152600160801b81046001600160401b031695820195909552600160c01b90940460ff1615156060850152600281018054969750612ee196939550918501939290916080840191612e3b90613e5e565b80601f0160208091040260200160405190810160405280929190818152602001828054612e6790613e5e565b8015612eb25780601f10612e8957610100808354040283529160200191612eb2565b820191905f5260205f20905b815481529060010190602001808311612e9557829003601f168201915b5050505050815250508152506040518060400160405280866001600160a01b03168152602001848152506130f3565b15612ef457612eef83613555565b613094565b600d546001600160a01b039081165f818152600b6020526040902054909116905b6001600160a01b038216612f3257612f2d81866135a6565b613091565b6040805180820182526001600160a01b0384168082525f908152602081815290839020835160a0810185528154815260018201546001600160801b03811682850152600160801b81046001600160401b031695820195909552600160c01b90940460ff1615156060850152600281018054613061959385019392916080840191612fbb90613e5e565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe790613e5e565b80156130325780601f1061300957610100808354040283529160200191613032565b820191905f5260205f20905b81548152906001019060200180831161301557829003601f168201915b5050505050815250508152506040518060400160405280886001600160a01b03168152602001868152506130f3565b1561307057612f2d81866135a6565b506001600160a01b038082165f908152600b60205260409020541690612f15565b50505b8160ff16600e54111561093557600d80546001600160a01b039081165f908152600b6020526040812080546001600160a01b03198082169092558454931692168217909255600e805491926130e8836141b5565b919050555050505050565b6020808201515190830151515f91900361311f5750805182516001600160a01b03918216911610610b73565b5060209081015151910151511190565b80515f81900361313d575050565b5f613149600183614008565b90505b8015610935575f61315e826001613ff5565b60408051426020820152908101849052606001604051602081830303815290604052805190602001205f1c613193919061411a565b90505f8483815181106131a8576131a8613fcd565b602002602001015190508482815181106131c4576131c4613fcd565b60200260200101518584815181106131de576131de613fcd565b60200260200101906001600160a01b031690816001600160a01b0316815250508085838151811061321157613211613fcd565b60200260200101906001600160a01b031690816001600160a01b0316815250505050808061323e906141b5565b91505061314c565b60115415613267576040516349625b3b60e01b815260040160405180910390fd5b61327081611bfa565b61328d5760405163510b8aad60e11b815260040160405180910390fd5b6001600160a01b038083165f9081526007602052604090208054909116156132c857604051637c9a1cf960e01b815260040160405180910390fd5b604080516080810182526001600160a01b038085168252858116803160208085019182525f85870181815260608701828152948252600790925295909520935184549084166001600160a01b0319918216178555905160018501559351600284018054918416918616919091179055516003909201805492821692909316919091179091556008541661338557600880546001600160a01b0385166001600160a01b031991821681179092556009805490911690911790556133dd565b600980546001600160a01b039081165f9081526007602052604080822060030180548489166001600160a01b031991821681179092558554828552929093206002018054841692909416919091179092558254161790555b600a8054905f6133ec8361401b565b90915550506001600160a01b038083165f9081526020819052604081208054909286163191839161341e908490613ff5565b909155505060018181018054601090613448908490600160801b90046001600160401b0316614033565b92506101000a8154816001600160401b0302191690836001600160401b031602179055507fce0c7a2a940807f7dc2ce7a615c2532e915e6c0ac9a08bc4ed9d515a710a53e284846040516112e69291906001600160a01b0392831681529116602082015260400190565b60308114610b94576040516305db9dbd60e01b815260040160405180910390fd5b6134dc82613604565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115613520576109358282613667565b610b946136d9565b6135306136f8565b610f8e57604051631afcd79f60e31b815260040160405180910390fd5b611ee3613528565b600d80546001600160a01b038381165f818152600b602052604081208054939094166001600160a01b031993841617909355835490911617909155600e80549161359e8361401b565b919050555050565b6001600160a01b038281165f818152600b602052604080822080548686168085529284208054919096166001600160a01b03199182161790955592825282549093169092179055600e8054916135fb8361401b565b91905055505050565b806001600160a01b03163b5f0361363957604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611c62565b5f5160206141f65f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b0316846040516136839190614158565b5f60405180830381855af49150503d805f81146136bb576040519150601f19603f3d011682016040523d82523d5f602084013e6136c0565b606091505b50915091506136d0858383613711565b95945050505050565b3415610f8e5760405163b398979f60e01b815260040160405180910390fd5b5f613701612809565b54600160401b900460ff16919050565b606082613726576137218261376d565b6128f4565b815115801561373d57506001600160a01b0384163b155b1561376657604051639996b31560e01b81526001600160a01b0385166004820152602401611c62565b50806128f4565b80511561377c57805160208201fd5b60405163d6bda27560e01b815260040160405180910390fd5b60405180604001604052805f6001600160a01b031681526020016137f16040518060a001604052805f81526020015f6001600160801b031681526020015f6001600160401b031681526020015f15158152602001606081525090565b905290565b5080545f8255905f5260205f2090810190611f159190613874565b828054828255905f5260205f20908101928215613864579160200282015b8281111561386457825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061382f565b50613870929150613874565b5090565b5b80821115613870575f8155600101613875565b80356001600160a01b038116811461389e575f5ffd5b919050565b5f602082840312156138b3575f5ffd5b6128f482613888565b5f5b838110156138d65781810151838201526020016138be565b50505f910152565b5f81518084526138f58160208601602086016138bc565b601f01601f19169290920160200192915050565b60018060a01b0381511682525f602082015160406020850152805160408501526001600160801b0360208201511660608501526001600160401b0360408201511660808501526060810151151560a08501526080810151905060a060c085015261397660e08501826138de565b949350505050565b602081525f6128f46020830184613909565b5f5f83601f8401126139a0575f5ffd5b5081356001600160401b038111156139b6575f5ffd5b6020830191508360208285010111156139cd575f5ffd5b9250929050565b5f5f5f5f604085870312156139e7575f5ffd5b84356001600160401b038111156139fc575f5ffd5b613a0887828801613990565b90955093505060208501356001600160401b03811115613a26575f5ffd5b613a3287828801613990565b95989497509550505050565b5f5f83601f840112613a4e575f5ffd5b5081356001600160401b03811115613a64575f5ffd5b6020830191508360208260051b85010111156139cd575f5ffd5b5f5f60208385031215613a8f575f5ffd5b82356001600160401b03811115613aa4575f5ffd5b613ab085828601613a3e565b90969095509350505050565b5f60208284031215613acc575f5ffd5b81356001600160801b03811681146128f4575f5ffd5b5f5f60408385031215613af3575f5ffd5b50508035926020909101359150565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613baf57868503603f19018452815180518652602090810151604082880181905281519088018190529101905f9060608801905b80831015613b9757835180516001600160a01b03168352602090810151818401529093019260019290920191604090910190613b60565b50965050506020938401939190910190600101613b28565b50929695505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215613be0575f5ffd5b613be983613888565b915060208301356001600160401b03811115613c03575f5ffd5b8301601f81018513613c13575f5ffd5b80356001600160401b03811115613c2c57613c2c613bbb565b604051601f8201601f19908116603f011681016001600160401b0381118282101715613c5a57613c5a613bbb565b604052818152828201602001871015613c71575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f5f5f60608587031215613ca3575f5ffd5b613cac85613888565b935060208501356001600160401b03811115613cc6575f5ffd5b613cd287828801613990565b90945092505060408501358015158114613cea575f5ffd5b939692955090935050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613baf57603f19878603018452613d37858351613909565b94506020938401939190910190600101613d1b565b602081525f6128f460208301846138de565b5f60208284031215613d6e575f5ffd5b813560ff811681146128f4575f5ffd5b5f5f5f5f60408587031215613d91575f5ffd5b84356001600160401b03811115613da6575f5ffd5b613db287828801613a3e565b90955093505060208501356001600160401b03811115613dd0575f5ffd5b613a3287828801613a3e565b5f5f60408385031215613ded575f5ffd5b613df683613888565b946020939093013593505050565b602080825282518282018190525f918401906040840190835b81811015613e5357835180516001600160a01b039081168552602091820151168185015290930192604090920191600101613e1d565b509095945050505050565b600181811c90821680613e7257607f821691505b6020821081036114b157634e487b7160e01b5f52602260045260245ffd5b601f82111561093557805f5260205f20601f840160051c81016020851015613eb55750805b601f840160051c820191505b81811015611cd3575f8155600101613ec1565b81516001600160401b03811115613eed57613eed613bbb565b613f0181613efb8454613e5e565b84613e90565b6020601f821160018114613f33575f8315613f1c5750848201515b5f19600385901b1c1916600184901b178455611cd3565b5f84815260208120601f198516915b82811015613f625787850151825560209485019460019092019101613f42565b5084821015613f7f57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03841681526040602082018190528101829052818360608301375f818301606090810191909152601f909201601f1916010192915050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b7357610b73613fe1565b81810381811115610b7357610b73613fe1565b5f6001820161402c5761402c613fe1565b5060010190565b6001600160401b038181168382160190811115610b7357610b73613fe1565b818382375f9101908152919050565b6001600160401b0383111561407857614078613bbb565b61408c836140868354613e5e565b83613e90565b5f601f8411600181146140bd575f85156140a65750838201355b5f19600387901b1c1916600186901b178355611cd3565b5f83815260208120601f198716915b828110156140ec57868501358255602094850194600190920191016140cc565b5086821015614108575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f8261413457634e487b7160e01b5f52601260045260245ffd5b500690565b838582375f8482015f8152838582375f93019283525090949350505050565b5f82516141698184602087016138bc565b9190910192915050565b805160208083015191908110156114b1575f1960209190910360031b1b16919050565b6001600160401b038281168282160390811115610b7357610b73613fe1565b5f816141c3576141c3613fe1565b505f190190565b5f602082840312156141da575f5ffd5b5051919050565b634e487b7160e01b5f52603160045260245ffdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220239ca47940153ca95050e872fcd474f2e4c0506fb5d9affc9c904a9db13f056864736f6c634300081b0033",
451
+ "sourceMap": "1684:23443:34:-:0;;;1171:4:21;1128:48;;1684:23443:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
452
+ "linkReferences": {}
453
+ },
454
+ "methodIdentifiers": {
455
+ "UPGRADE_INTERFACE_VERSION()": "ad3cb1cc",
456
+ "activeValidatorsCount()": "0d2bd909",
457
+ "addValidator(address,bytes,bool)": "7c8a92c3",
458
+ "addVotes(address[],address[])": "e9257dc8",
459
+ "calculateRoundValidators(uint8)": "c5a74449",
460
+ "fee()": "ddca3f43",
461
+ "getAllValidators()": "f3513a37",
462
+ "getRoundValidators()": "a250eaf1",
463
+ "getRounds(uint256,uint256)": "40f74f47",
464
+ "getRoundsCount()": "a09686c4",
465
+ "getValidator(address)": "1904bb2e",
466
+ "getVotes(address,uint256)": "eb9019d4",
467
+ "getVotesCount()": "1b605b86",
468
+ "initialize(uint128)": "56db9ef1",
469
+ "isValidatorRegistered(address)": "d04a68c7",
470
+ "owner()": "8da5cb5b",
471
+ "proxiableUUID()": "52d1902d",
472
+ "registerValidator(bytes,bytes)": "226f2645",
473
+ "renounceOwnership()": "715018a6",
474
+ "resignValidator()": "b85f5da2",
475
+ "resignedValidatorsCount()": "0777cbef",
476
+ "roundValidatorsCount()": "b84d356e",
477
+ "setFee(uint128)": "3687f24a",
478
+ "transferOwnership(address)": "f2fde38b",
479
+ "unvote()": "3174b689",
480
+ "updateValidator(bytes,bytes)": "8f062626",
481
+ "updateVoters(address[])": "2bdf6d43",
482
+ "upgradeToAndCall(address,bytes)": "4f1ef286",
483
+ "validatorsCount()": "ed612f8c",
484
+ "version()": "54fd4d50",
485
+ "vote(address)": "6dd7d8ea"
486
+ },
487
+ "rawMetadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyVoted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BellowMinValidators\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BlsKeyAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BlsKeyIsInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerIsNotValidator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ImportIsNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidFee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInputLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidParameters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProofOfPossession\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"InvalidRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MissingVote\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoActiveValidators\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PrecompileCallFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RefundFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidatorAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidatorAlreadyResigned\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VoteResignedValidator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VoteSameValidator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VoteValidatorWithoutBlsPublicKey\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"FeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"Unvoted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"name\":\"ValidatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"ValidatorResigned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"name\":\"ValidatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"Voted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeValidatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isResigned\",\"type\":\"bool\"}],\"name\":\"addValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"voters\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"validators\",\"type\":\"address[]\"}],\"name\":\"addVotes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"}],\"name\":\"calculateRoundValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"voteBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"fee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"votersCount\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isResigned\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"internalType\":\"struct ConsensusV1.ValidatorData\",\"name\":\"data\",\"type\":\"tuple\"}],\"internalType\":\"struct ConsensusV1.Validator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRoundValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"voteBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"fee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"votersCount\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isResigned\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"internalType\":\"struct ConsensusV1.ValidatorData\",\"name\":\"data\",\"type\":\"tuple\"}],\"internalType\":\"struct ConsensusV1.Validator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getRounds\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"voteBalance\",\"type\":\"uint256\"}],\"internalType\":\"struct ConsensusV1.RoundValidator[]\",\"name\":\"validators\",\"type\":\"tuple[]\"}],\"internalType\":\"struct ConsensusV1.Round[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRoundsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"voteBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"fee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"votersCount\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isResigned\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"internalType\":\"struct ConsensusV1.ValidatorData\",\"name\":\"data\",\"type\":\"tuple\"}],\"internalType\":\"struct ConsensusV1.Validator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getVotes\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"internalType\":\"struct ConsensusV1.VoteResult[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVotesCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"registrationFee\",\"type\":\"uint128\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isValidatorRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofOfPossession\",\"type\":\"bytes\"}],\"name\":\"registerValidator\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resignValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resignedValidatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"roundValidatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"registrationFee\",\"type\":\"uint128\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unvote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofOfPossession\",\"type\":\"bytes\"}],\"name\":\"updateValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"voters\",\"type\":\"address[]\"}],\"name\":\"updateVoters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"vote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/consensus/ConsensusV1.sol\":\"ConsensusV1\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@contracts/=src/\",\":@forge-std/=lib/forge-std/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x574a7451e42724f7de29e2855c392a8a5020acd695169466a18459467d719d63\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5bc189f63b639ee173dd7b6fecc39baf7113bf161776aea22b34c57fdd1872ec\",\"dweb:/ipfs/QmZAf2VtjDLRULqjJkde6LNsxAg12tUqpPqgUQQZbAjgtZ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196\",\"dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://271f914261a19d87117a777e0924ada545c16191ef9b00cc40b0134fc14ebc70\",\"dweb:/ipfs/QmdvVNWHGHQrGGPonZJs5NuzTevTjZRM2zayKrDJf7WBA2\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x06871a0948d0fed9316ae59ee4368527e144911f5e284755312b5bfcde8b27ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3c30e46d061d8a450c561935a1236b1885aa76ffab93a19b26dcb8868c839843\",\"dweb:/ipfs/QmZbWbeDyixTyYkVtJvuiQYfkQz12pS7zxWZF3Ju9PYwGH\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"src/consensus/BLSPoP.sol\":{\"keccak256\":\"0x19842d7113033964e1f51c97458aa44cb5efc41618b67fc7f949f48824cfd3ee\",\"license\":\"GNU GENERAL PUBLIC LICENSE\",\"urls\":[\"bzz-raw://a6d8f6d87bef7eff7b1e475d1f82ed401c20e5f83a9cdd8724dd27fc67a1ef26\",\"dweb:/ipfs/QmbyRGmCF1vi5NwZmN9p4T55XVs2kdoRJx8ZiBFU4evRYe\"]},\"src/consensus/ConsensusV1.sol\":{\"keccak256\":\"0x32c0841d05f559c4dbbaf2478891e7e1979e6d6f4b541cde9ada1e3b3747eac9\",\"license\":\"GNU GENERAL PUBLIC LICENSE\",\"urls\":[\"bzz-raw://35a52180a27c0818efa6cc80445db16c9d655a0004bfb1db599c0dc5d0588ee4\",\"dweb:/ipfs/Qmd4cjwm4CWNJFihLM4sbNqSEPALoXXfsdDS3MhDzcvvGR\"]}},\"version\":1}",
488
+ "metadata": {
489
+ "compiler": { "version": "0.8.27+commit.40a35a09" },
490
+ "language": "Solidity",
491
+ "output": {
492
+ "abi": [
493
+ {
494
+ "inputs": [{ "internalType": "address", "name": "target", "type": "address" }],
495
+ "type": "error",
496
+ "name": "AddressEmptyCode"
497
+ },
498
+ { "inputs": [], "type": "error", "name": "AlreadyVoted" },
499
+ { "inputs": [], "type": "error", "name": "BellowMinValidators" },
500
+ { "inputs": [], "type": "error", "name": "BlsKeyAlreadyRegistered" },
501
+ { "inputs": [], "type": "error", "name": "BlsKeyIsInvalid" },
502
+ { "inputs": [], "type": "error", "name": "CallerIsNotValidator" },
503
+ {
504
+ "inputs": [{ "internalType": "address", "name": "implementation", "type": "address" }],
505
+ "type": "error",
506
+ "name": "ERC1967InvalidImplementation"
507
+ },
508
+ { "inputs": [], "type": "error", "name": "ERC1967NonPayable" },
509
+ { "inputs": [], "type": "error", "name": "FailedCall" },
510
+ { "inputs": [], "type": "error", "name": "ImportIsNotAllowed" },
511
+ { "inputs": [], "type": "error", "name": "InvalidFee" },
512
+ { "inputs": [], "type": "error", "name": "InvalidInitialization" },
513
+ { "inputs": [], "type": "error", "name": "InvalidInputLength" },
514
+ { "inputs": [], "type": "error", "name": "InvalidParameters" },
515
+ { "inputs": [], "type": "error", "name": "InvalidProofOfPossession" },
516
+ {
517
+ "inputs": [
518
+ { "internalType": "uint256", "name": "min", "type": "uint256" },
519
+ { "internalType": "uint256", "name": "max", "type": "uint256" }
520
+ ],
521
+ "type": "error",
522
+ "name": "InvalidRange"
523
+ },
524
+ { "inputs": [], "type": "error", "name": "MissingVote" },
525
+ { "inputs": [], "type": "error", "name": "NoActiveValidators" },
526
+ { "inputs": [], "type": "error", "name": "NotInitializing" },
527
+ {
528
+ "inputs": [{ "internalType": "address", "name": "owner", "type": "address" }],
529
+ "type": "error",
530
+ "name": "OwnableInvalidOwner"
531
+ },
532
+ {
533
+ "inputs": [{ "internalType": "address", "name": "account", "type": "address" }],
534
+ "type": "error",
535
+ "name": "OwnableUnauthorizedAccount"
536
+ },
537
+ { "inputs": [], "type": "error", "name": "PrecompileCallFailed" },
538
+ { "inputs": [], "type": "error", "name": "RefundFailed" },
539
+ { "inputs": [], "type": "error", "name": "UUPSUnauthorizedCallContext" },
540
+ {
541
+ "inputs": [{ "internalType": "bytes32", "name": "slot", "type": "bytes32" }],
542
+ "type": "error",
543
+ "name": "UUPSUnsupportedProxiableUUID"
544
+ },
545
+ { "inputs": [], "type": "error", "name": "ValidatorAlreadyRegistered" },
546
+ { "inputs": [], "type": "error", "name": "ValidatorAlreadyResigned" },
547
+ { "inputs": [], "type": "error", "name": "ValidatorNotRegistered" },
548
+ { "inputs": [], "type": "error", "name": "VoteResignedValidator" },
549
+ { "inputs": [], "type": "error", "name": "VoteSameValidator" },
550
+ { "inputs": [], "type": "error", "name": "VoteValidatorWithoutBlsPublicKey" },
551
+ {
552
+ "inputs": [{ "internalType": "uint256", "name": "fee", "type": "uint256", "indexed": false }],
553
+ "type": "event",
554
+ "name": "FeeUpdated",
555
+ "anonymous": false
556
+ },
557
+ {
558
+ "inputs": [{ "internalType": "uint64", "name": "version", "type": "uint64", "indexed": false }],
559
+ "type": "event",
560
+ "name": "Initialized",
561
+ "anonymous": false
562
+ },
563
+ {
564
+ "inputs": [
565
+ { "internalType": "address", "name": "previousOwner", "type": "address", "indexed": true },
566
+ { "internalType": "address", "name": "newOwner", "type": "address", "indexed": true }
567
+ ],
568
+ "type": "event",
569
+ "name": "OwnershipTransferred",
570
+ "anonymous": false
571
+ },
572
+ {
573
+ "inputs": [
574
+ { "internalType": "address", "name": "voter", "type": "address", "indexed": false },
575
+ { "internalType": "address", "name": "validator", "type": "address", "indexed": false }
576
+ ],
577
+ "type": "event",
578
+ "name": "Unvoted",
579
+ "anonymous": false
580
+ },
581
+ {
582
+ "inputs": [
583
+ { "internalType": "address", "name": "implementation", "type": "address", "indexed": true }
584
+ ],
585
+ "type": "event",
586
+ "name": "Upgraded",
587
+ "anonymous": false
588
+ },
589
+ {
590
+ "inputs": [
591
+ { "internalType": "address", "name": "addr", "type": "address", "indexed": false },
592
+ { "internalType": "bytes", "name": "blsPublicKey", "type": "bytes", "indexed": false }
593
+ ],
594
+ "type": "event",
595
+ "name": "ValidatorRegistered",
596
+ "anonymous": false
597
+ },
598
+ {
599
+ "inputs": [{ "internalType": "address", "name": "addr", "type": "address", "indexed": false }],
600
+ "type": "event",
601
+ "name": "ValidatorResigned",
602
+ "anonymous": false
603
+ },
604
+ {
605
+ "inputs": [
606
+ { "internalType": "address", "name": "addr", "type": "address", "indexed": false },
607
+ { "internalType": "bytes", "name": "blsPublicKey", "type": "bytes", "indexed": false }
608
+ ],
609
+ "type": "event",
610
+ "name": "ValidatorUpdated",
611
+ "anonymous": false
612
+ },
613
+ {
614
+ "inputs": [
615
+ { "internalType": "address", "name": "voter", "type": "address", "indexed": false },
616
+ { "internalType": "address", "name": "validator", "type": "address", "indexed": false }
617
+ ],
618
+ "type": "event",
619
+ "name": "Voted",
620
+ "anonymous": false
621
+ },
622
+ {
623
+ "inputs": [],
624
+ "stateMutability": "view",
625
+ "type": "function",
626
+ "name": "UPGRADE_INTERFACE_VERSION",
627
+ "outputs": [{ "internalType": "string", "name": "", "type": "string" }]
628
+ },
629
+ {
630
+ "inputs": [],
631
+ "stateMutability": "view",
632
+ "type": "function",
633
+ "name": "activeValidatorsCount",
634
+ "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }]
635
+ },
636
+ {
637
+ "inputs": [
638
+ { "internalType": "address", "name": "addr", "type": "address" },
639
+ { "internalType": "bytes", "name": "blsPublicKey", "type": "bytes" },
640
+ { "internalType": "bool", "name": "isResigned", "type": "bool" }
641
+ ],
642
+ "stateMutability": "nonpayable",
643
+ "type": "function",
644
+ "name": "addValidator"
645
+ },
646
+ {
647
+ "inputs": [
648
+ { "internalType": "address[]", "name": "voters", "type": "address[]" },
649
+ { "internalType": "address[]", "name": "validators", "type": "address[]" }
650
+ ],
651
+ "stateMutability": "nonpayable",
652
+ "type": "function",
653
+ "name": "addVotes"
654
+ },
655
+ {
656
+ "inputs": [{ "internalType": "uint8", "name": "n", "type": "uint8" }],
657
+ "stateMutability": "nonpayable",
658
+ "type": "function",
659
+ "name": "calculateRoundValidators"
660
+ },
661
+ {
662
+ "inputs": [],
663
+ "stateMutability": "view",
664
+ "type": "function",
665
+ "name": "fee",
666
+ "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }]
667
+ },
668
+ {
669
+ "inputs": [],
670
+ "stateMutability": "view",
671
+ "type": "function",
672
+ "name": "getAllValidators",
673
+ "outputs": [
674
+ {
675
+ "internalType": "struct ConsensusV1.Validator[]",
676
+ "name": "",
677
+ "type": "tuple[]",
678
+ "components": [
679
+ { "internalType": "address", "name": "addr", "type": "address" },
680
+ {
681
+ "internalType": "struct ConsensusV1.ValidatorData",
682
+ "name": "data",
683
+ "type": "tuple",
684
+ "components": [
685
+ { "internalType": "uint256", "name": "voteBalance", "type": "uint256" },
686
+ { "internalType": "uint128", "name": "fee", "type": "uint128" },
687
+ { "internalType": "uint64", "name": "votersCount", "type": "uint64" },
688
+ { "internalType": "bool", "name": "isResigned", "type": "bool" },
689
+ { "internalType": "bytes", "name": "blsPublicKey", "type": "bytes" }
690
+ ]
691
+ }
692
+ ]
693
+ }
694
+ ]
695
+ },
696
+ {
697
+ "inputs": [],
698
+ "stateMutability": "view",
699
+ "type": "function",
700
+ "name": "getRoundValidators",
701
+ "outputs": [
702
+ {
703
+ "internalType": "struct ConsensusV1.Validator[]",
704
+ "name": "",
705
+ "type": "tuple[]",
706
+ "components": [
707
+ { "internalType": "address", "name": "addr", "type": "address" },
708
+ {
709
+ "internalType": "struct ConsensusV1.ValidatorData",
710
+ "name": "data",
711
+ "type": "tuple",
712
+ "components": [
713
+ { "internalType": "uint256", "name": "voteBalance", "type": "uint256" },
714
+ { "internalType": "uint128", "name": "fee", "type": "uint128" },
715
+ { "internalType": "uint64", "name": "votersCount", "type": "uint64" },
716
+ { "internalType": "bool", "name": "isResigned", "type": "bool" },
717
+ { "internalType": "bytes", "name": "blsPublicKey", "type": "bytes" }
718
+ ]
719
+ }
720
+ ]
721
+ }
722
+ ]
723
+ },
724
+ {
725
+ "inputs": [
726
+ { "internalType": "uint256", "name": "offset", "type": "uint256" },
727
+ { "internalType": "uint256", "name": "count", "type": "uint256" }
728
+ ],
729
+ "stateMutability": "view",
730
+ "type": "function",
731
+ "name": "getRounds",
732
+ "outputs": [
733
+ {
734
+ "internalType": "struct ConsensusV1.Round[]",
735
+ "name": "",
736
+ "type": "tuple[]",
737
+ "components": [
738
+ { "internalType": "uint256", "name": "round", "type": "uint256" },
739
+ {
740
+ "internalType": "struct ConsensusV1.RoundValidator[]",
741
+ "name": "validators",
742
+ "type": "tuple[]",
743
+ "components": [
744
+ { "internalType": "address", "name": "addr", "type": "address" },
745
+ { "internalType": "uint256", "name": "voteBalance", "type": "uint256" }
746
+ ]
747
+ }
748
+ ]
749
+ }
750
+ ]
751
+ },
752
+ {
753
+ "inputs": [],
754
+ "stateMutability": "view",
755
+ "type": "function",
756
+ "name": "getRoundsCount",
757
+ "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }]
758
+ },
759
+ {
760
+ "inputs": [{ "internalType": "address", "name": "addr", "type": "address" }],
761
+ "stateMutability": "view",
762
+ "type": "function",
763
+ "name": "getValidator",
764
+ "outputs": [
765
+ {
766
+ "internalType": "struct ConsensusV1.Validator",
767
+ "name": "",
768
+ "type": "tuple",
769
+ "components": [
770
+ { "internalType": "address", "name": "addr", "type": "address" },
771
+ {
772
+ "internalType": "struct ConsensusV1.ValidatorData",
773
+ "name": "data",
774
+ "type": "tuple",
775
+ "components": [
776
+ { "internalType": "uint256", "name": "voteBalance", "type": "uint256" },
777
+ { "internalType": "uint128", "name": "fee", "type": "uint128" },
778
+ { "internalType": "uint64", "name": "votersCount", "type": "uint64" },
779
+ { "internalType": "bool", "name": "isResigned", "type": "bool" },
780
+ { "internalType": "bytes", "name": "blsPublicKey", "type": "bytes" }
781
+ ]
782
+ }
783
+ ]
784
+ }
785
+ ]
786
+ },
787
+ {
788
+ "inputs": [
789
+ { "internalType": "address", "name": "addr", "type": "address" },
790
+ { "internalType": "uint256", "name": "count", "type": "uint256" }
791
+ ],
792
+ "stateMutability": "view",
793
+ "type": "function",
794
+ "name": "getVotes",
795
+ "outputs": [
796
+ {
797
+ "internalType": "struct ConsensusV1.VoteResult[]",
798
+ "name": "",
799
+ "type": "tuple[]",
800
+ "components": [
801
+ { "internalType": "address", "name": "voter", "type": "address" },
802
+ { "internalType": "address", "name": "validator", "type": "address" }
803
+ ]
804
+ }
805
+ ]
806
+ },
807
+ {
808
+ "inputs": [],
809
+ "stateMutability": "view",
810
+ "type": "function",
811
+ "name": "getVotesCount",
812
+ "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }]
813
+ },
814
+ {
815
+ "inputs": [{ "internalType": "uint128", "name": "registrationFee", "type": "uint128" }],
816
+ "stateMutability": "nonpayable",
817
+ "type": "function",
818
+ "name": "initialize"
819
+ },
820
+ {
821
+ "inputs": [{ "internalType": "address", "name": "addr", "type": "address" }],
822
+ "stateMutability": "view",
823
+ "type": "function",
824
+ "name": "isValidatorRegistered",
825
+ "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
826
+ },
827
+ {
828
+ "inputs": [],
829
+ "stateMutability": "view",
830
+ "type": "function",
831
+ "name": "owner",
832
+ "outputs": [{ "internalType": "address", "name": "", "type": "address" }]
833
+ },
834
+ {
835
+ "inputs": [],
836
+ "stateMutability": "view",
837
+ "type": "function",
838
+ "name": "proxiableUUID",
839
+ "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }]
840
+ },
841
+ {
842
+ "inputs": [
843
+ { "internalType": "bytes", "name": "blsPublicKey", "type": "bytes" },
844
+ { "internalType": "bytes", "name": "proofOfPossession", "type": "bytes" }
845
+ ],
846
+ "stateMutability": "payable",
847
+ "type": "function",
848
+ "name": "registerValidator"
849
+ },
850
+ { "inputs": [], "stateMutability": "nonpayable", "type": "function", "name": "renounceOwnership" },
851
+ { "inputs": [], "stateMutability": "nonpayable", "type": "function", "name": "resignValidator" },
852
+ {
853
+ "inputs": [],
854
+ "stateMutability": "view",
855
+ "type": "function",
856
+ "name": "resignedValidatorsCount",
857
+ "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }]
858
+ },
859
+ {
860
+ "inputs": [],
861
+ "stateMutability": "view",
862
+ "type": "function",
863
+ "name": "roundValidatorsCount",
864
+ "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }]
865
+ },
866
+ {
867
+ "inputs": [{ "internalType": "uint128", "name": "registrationFee", "type": "uint128" }],
868
+ "stateMutability": "nonpayable",
869
+ "type": "function",
870
+ "name": "setFee"
871
+ },
872
+ {
873
+ "inputs": [{ "internalType": "address", "name": "newOwner", "type": "address" }],
874
+ "stateMutability": "nonpayable",
875
+ "type": "function",
876
+ "name": "transferOwnership"
877
+ },
878
+ { "inputs": [], "stateMutability": "nonpayable", "type": "function", "name": "unvote" },
879
+ {
880
+ "inputs": [
881
+ { "internalType": "bytes", "name": "blsPublicKey", "type": "bytes" },
882
+ { "internalType": "bytes", "name": "proofOfPossession", "type": "bytes" }
883
+ ],
884
+ "stateMutability": "nonpayable",
885
+ "type": "function",
886
+ "name": "updateValidator"
887
+ },
888
+ {
889
+ "inputs": [{ "internalType": "address[]", "name": "voters", "type": "address[]" }],
890
+ "stateMutability": "nonpayable",
891
+ "type": "function",
892
+ "name": "updateVoters"
893
+ },
894
+ {
895
+ "inputs": [
896
+ { "internalType": "address", "name": "newImplementation", "type": "address" },
897
+ { "internalType": "bytes", "name": "data", "type": "bytes" }
898
+ ],
899
+ "stateMutability": "payable",
900
+ "type": "function",
901
+ "name": "upgradeToAndCall"
902
+ },
903
+ {
904
+ "inputs": [],
905
+ "stateMutability": "view",
906
+ "type": "function",
907
+ "name": "validatorsCount",
908
+ "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }]
909
+ },
910
+ {
911
+ "inputs": [],
912
+ "stateMutability": "pure",
913
+ "type": "function",
914
+ "name": "version",
915
+ "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }]
916
+ },
917
+ {
918
+ "inputs": [{ "internalType": "address", "name": "addr", "type": "address" }],
919
+ "stateMutability": "nonpayable",
920
+ "type": "function",
921
+ "name": "vote"
922
+ }
923
+ ],
924
+ "devdoc": {
925
+ "kind": "dev",
926
+ "methods": {
927
+ "owner()": { "details": "Returns the address of the current owner." },
928
+ "proxiableUUID()": {
929
+ "details": "Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."
930
+ },
931
+ "renounceOwnership()": {
932
+ "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."
933
+ },
934
+ "transferOwnership(address)": {
935
+ "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
936
+ },
937
+ "upgradeToAndCall(address,bytes)": {
938
+ "custom:oz-upgrades-unsafe-allow-reachable": "delegatecall",
939
+ "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."
940
+ }
941
+ },
942
+ "version": 1
943
+ },
944
+ "userdoc": { "kind": "user", "methods": {}, "version": 1 }
945
+ },
946
+ "settings": {
947
+ "remappings": [
948
+ "@contracts/=src/",
949
+ "@forge-std/=lib/forge-std/src/",
950
+ "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
951
+ "@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/",
952
+ "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
953
+ "forge-std/=lib/forge-std/src/",
954
+ "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/",
955
+ "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
956
+ "openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/",
957
+ "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/"
958
+ ],
959
+ "optimizer": { "enabled": true, "runs": 200 },
960
+ "metadata": { "bytecodeHash": "ipfs" },
961
+ "compilationTarget": { "src/consensus/ConsensusV1.sol": "ConsensusV1" },
962
+ "evmVersion": "shanghai",
963
+ "libraries": {}
964
+ },
965
+ "sources": {
966
+ "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": {
967
+ "keccak256": "0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a",
968
+ "urls": [
969
+ "bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6",
970
+ "dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"
971
+ ],
972
+ "license": "MIT"
973
+ },
974
+ "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": {
975
+ "keccak256": "0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05",
976
+ "urls": [
977
+ "bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08",
978
+ "dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q"
979
+ ],
980
+ "license": "MIT"
981
+ },
982
+ "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol": {
983
+ "keccak256": "0x574a7451e42724f7de29e2855c392a8a5020acd695169466a18459467d719d63",
984
+ "urls": [
985
+ "bzz-raw://5bc189f63b639ee173dd7b6fecc39baf7113bf161776aea22b34c57fdd1872ec",
986
+ "dweb:/ipfs/QmZAf2VtjDLRULqjJkde6LNsxAg12tUqpPqgUQQZbAjgtZ"
987
+ ],
988
+ "license": "MIT"
989
+ },
990
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": {
991
+ "keccak256": "0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397",
992
+ "urls": [
993
+ "bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9",
994
+ "dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"
995
+ ],
996
+ "license": "MIT"
997
+ },
998
+ "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol": {
999
+ "keccak256": "0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486",
1000
+ "urls": [
1001
+ "bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d",
1002
+ "dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7"
1003
+ ],
1004
+ "license": "MIT"
1005
+ },
1006
+ "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": {
1007
+ "keccak256": "0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d",
1008
+ "urls": [
1009
+ "bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196",
1010
+ "dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA"
1011
+ ],
1012
+ "license": "MIT"
1013
+ },
1014
+ "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol": {
1015
+ "keccak256": "0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898",
1016
+ "urls": [
1017
+ "bzz-raw://271f914261a19d87117a777e0924ada545c16191ef9b00cc40b0134fc14ebc70",
1018
+ "dweb:/ipfs/QmdvVNWHGHQrGGPonZJs5NuzTevTjZRM2zayKrDJf7WBA2"
1019
+ ],
1020
+ "license": "MIT"
1021
+ },
1022
+ "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": {
1023
+ "keccak256": "0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c",
1024
+ "urls": [
1025
+ "bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa",
1026
+ "dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM"
1027
+ ],
1028
+ "license": "MIT"
1029
+ },
1030
+ "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol": {
1031
+ "keccak256": "0x06871a0948d0fed9316ae59ee4368527e144911f5e284755312b5bfcde8b27ea",
1032
+ "urls": [
1033
+ "bzz-raw://3c30e46d061d8a450c561935a1236b1885aa76ffab93a19b26dcb8868c839843",
1034
+ "dweb:/ipfs/QmZbWbeDyixTyYkVtJvuiQYfkQz12pS7zxWZF3Ju9PYwGH"
1035
+ ],
1036
+ "license": "MIT"
1037
+ },
1038
+ "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol": {
1039
+ "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123",
1040
+ "urls": [
1041
+ "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf",
1042
+ "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"
1043
+ ],
1044
+ "license": "MIT"
1045
+ },
1046
+ "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": {
1047
+ "keccak256": "0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97",
1048
+ "urls": [
1049
+ "bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b",
1050
+ "dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"
1051
+ ],
1052
+ "license": "MIT"
1053
+ },
1054
+ "src/consensus/BLSPoP.sol": {
1055
+ "keccak256": "0x19842d7113033964e1f51c97458aa44cb5efc41618b67fc7f949f48824cfd3ee",
1056
+ "urls": [
1057
+ "bzz-raw://a6d8f6d87bef7eff7b1e475d1f82ed401c20e5f83a9cdd8724dd27fc67a1ef26",
1058
+ "dweb:/ipfs/QmbyRGmCF1vi5NwZmN9p4T55XVs2kdoRJx8ZiBFU4evRYe"
1059
+ ],
1060
+ "license": "GNU GENERAL PUBLIC LICENSE"
1061
+ },
1062
+ "src/consensus/ConsensusV1.sol": {
1063
+ "keccak256": "0x32c0841d05f559c4dbbaf2478891e7e1979e6d6f4b541cde9ada1e3b3747eac9",
1064
+ "urls": [
1065
+ "bzz-raw://35a52180a27c0818efa6cc80445db16c9d655a0004bfb1db599c0dc5d0588ee4",
1066
+ "dweb:/ipfs/Qmd4cjwm4CWNJFihLM4sbNqSEPALoXXfsdDS3MhDzcvvGR"
1067
+ ],
1068
+ "license": "GNU GENERAL PUBLIC LICENSE"
1069
+ }
1070
+ },
1071
+ "version": 1
1072
+ },
1073
+ "id": 34
1074
+ }