@keep-network/tbtc-v2 0.1.1-dev.40 → 0.1.1-dev.43
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.
- package/artifacts/TBTC.json +3 -3
- package/artifacts/TBTCToken.json +3 -3
- package/artifacts/VendingMachine.json +10 -10
- package/artifacts/solcInputs/{f1a50b67569d88ee54efa3e22c6b484e.json → f2c15d3cf1bd9566483f595c5ed30ccc.json} +25 -25
- package/build/contracts/GovernanceUtils.sol/GovernanceUtils.dbg.json +1 -1
- package/build/contracts/bank/Bank.sol/Bank.dbg.json +1 -1
- package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.dbg.json +1 -1
- package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.json +2 -2
- package/build/contracts/bridge/Bridge.sol/Bridge.dbg.json +1 -1
- package/build/contracts/bridge/Bridge.sol/Bridge.json +191 -331
- package/build/contracts/bridge/BridgeState.sol/BridgeState.dbg.json +1 -1
- package/build/contracts/bridge/BridgeState.sol/BridgeState.json +35 -3
- package/build/contracts/bridge/Deposit.sol/Deposit.dbg.json +1 -1
- package/build/contracts/bridge/Deposit.sol/Deposit.json +2 -2
- package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.dbg.json +1 -1
- package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.json +2 -2
- package/build/contracts/bridge/Fraud.sol/Fraud.dbg.json +4 -0
- package/build/contracts/bridge/Fraud.sol/Fraud.json +86 -0
- package/build/contracts/bridge/IRelay.sol/IRelay.dbg.json +1 -1
- package/build/contracts/bridge/MovingFunds.sol/MovingFunds.dbg.json +1 -1
- package/build/contracts/bridge/MovingFunds.sol/MovingFunds.json +4 -22
- package/build/contracts/bridge/Redemption.sol/OutboundTx.dbg.json +4 -0
- package/build/contracts/bridge/{Redeem.sol → Redemption.sol}/OutboundTx.json +3 -3
- package/build/contracts/bridge/Redemption.sol/Redemption.dbg.json +4 -0
- package/build/contracts/bridge/Redemption.sol/Redemption.json +92 -0
- package/build/contracts/bridge/Sweep.sol/Sweep.dbg.json +1 -1
- package/build/contracts/bridge/Sweep.sol/Sweep.json +2 -2
- package/build/contracts/bridge/VendingMachine.sol/VendingMachine.dbg.json +1 -1
- package/build/contracts/bridge/Wallets.sol/Wallets.dbg.json +1 -1
- package/build/contracts/bridge/Wallets.sol/Wallets.json +2 -47
- package/build/contracts/token/TBTC.sol/TBTC.dbg.json +1 -1
- package/build/contracts/vault/IVault.sol/IVault.dbg.json +1 -1
- package/build/contracts/vault/TBTCVault.sol/TBTCVault.dbg.json +1 -1
- package/contracts/bridge/BitcoinTx.sol +19 -26
- package/contracts/bridge/Bridge.sol +476 -534
- package/contracts/bridge/BridgeState.sol +190 -129
- package/contracts/bridge/Deposit.sol +23 -4
- package/contracts/bridge/EcdsaLib.sol +15 -0
- package/contracts/bridge/{Frauds.sol → Fraud.sol} +75 -146
- package/contracts/bridge/MovingFunds.sol +15 -9
- package/contracts/bridge/{Redeem.sol → Redemption.sol} +19 -17
- package/contracts/bridge/Sweep.sol +16 -9
- package/contracts/bridge/Wallets.sol +40 -121
- package/package.json +1 -1
- package/build/contracts/bridge/Frauds.sol/Frauds.dbg.json +0 -4
- package/build/contracts/bridge/Frauds.sol/Frauds.json +0 -138
- package/build/contracts/bridge/Redeem.sol/OutboundTx.dbg.json +0 -4
- package/build/contracts/bridge/Redeem.sol/Redeem.dbg.json +0 -4
- package/build/contracts/bridge/Redeem.sol/Redeem.json +0 -110
|
@@ -21,6 +21,7 @@ import {EcdsaDkg} from "@keep-network/ecdsa/contracts/libraries/EcdsaDkg.sol";
|
|
|
21
21
|
|
|
22
22
|
import "./BitcoinTx.sol";
|
|
23
23
|
import "./EcdsaLib.sol";
|
|
24
|
+
import "./BridgeState.sol";
|
|
24
25
|
|
|
25
26
|
/// @title Wallet library
|
|
26
27
|
/// @notice Library responsible for handling integration between Bridge
|
|
@@ -28,32 +29,6 @@ import "./EcdsaLib.sol";
|
|
|
28
29
|
library Wallets {
|
|
29
30
|
using BTCUtils for bytes;
|
|
30
31
|
|
|
31
|
-
/// @notice Struct that groups the state managed by the library.
|
|
32
|
-
struct Data {
|
|
33
|
-
// ECDSA Wallet Registry contract handle.
|
|
34
|
-
EcdsaWalletRegistry registry;
|
|
35
|
-
// Determines how frequently a new wallet creation can be requested.
|
|
36
|
-
// Value in seconds.
|
|
37
|
-
uint32 creationPeriod;
|
|
38
|
-
// The minimum BTC threshold in satoshi that is used to decide about
|
|
39
|
-
// wallet creation or closing.
|
|
40
|
-
uint64 minBtcBalance;
|
|
41
|
-
// The maximum BTC threshold in satoshi that is used to decide about
|
|
42
|
-
// wallet creation.
|
|
43
|
-
uint64 maxBtcBalance;
|
|
44
|
-
// The maximum age of a wallet in seconds, after which the wallet
|
|
45
|
-
// moving funds process can be requested.
|
|
46
|
-
uint32 maxAge;
|
|
47
|
-
// 20-byte wallet public key hash being reference to the currently
|
|
48
|
-
// active wallet. Can be unset to the zero value under certain
|
|
49
|
-
// circumstances.
|
|
50
|
-
bytes20 activeWalletPubKeyHash;
|
|
51
|
-
// Maps the 20-byte wallet public key hash (computed using Bitcoin
|
|
52
|
-
// HASH160 over the compressed ECDSA public key) to the basic wallet
|
|
53
|
-
// information like state and pending redemptions value.
|
|
54
|
-
mapping(bytes20 => Wallet) registeredWallets;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
32
|
/// @notice Represents wallet state:
|
|
58
33
|
enum WalletState {
|
|
59
34
|
/// @dev The wallet is unknown to the Bridge.
|
|
@@ -101,15 +76,6 @@ library Wallets {
|
|
|
101
76
|
bytes32 movingFundsTargetWalletsCommitmentHash;
|
|
102
77
|
}
|
|
103
78
|
|
|
104
|
-
event WalletCreationPeriodUpdated(uint32 newCreationPeriod);
|
|
105
|
-
|
|
106
|
-
event WalletBtcBalanceRangeUpdated(
|
|
107
|
-
uint64 newMinBtcBalance,
|
|
108
|
-
uint64 newMaxBtcBalance
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
event WalletMaxAgeUpdated(uint32 newMaxAge);
|
|
112
|
-
|
|
113
79
|
event NewWalletRequested();
|
|
114
80
|
|
|
115
81
|
event NewWalletRegistered(
|
|
@@ -132,64 +98,6 @@ library Wallets {
|
|
|
132
98
|
bytes20 indexed walletPubKeyHash
|
|
133
99
|
);
|
|
134
100
|
|
|
135
|
-
/// @notice Initializes state invariants.
|
|
136
|
-
/// @param registry ECDSA Wallet Registry reference
|
|
137
|
-
/// @dev Requirements:
|
|
138
|
-
/// - ECDSA Wallet Registry address must not be initialized
|
|
139
|
-
function init(Data storage self, address registry) external {
|
|
140
|
-
require(
|
|
141
|
-
registry != address(0),
|
|
142
|
-
"ECDSA Wallet Registry address cannot be zero"
|
|
143
|
-
);
|
|
144
|
-
require(
|
|
145
|
-
address(self.registry) == address(0),
|
|
146
|
-
"ECDSA Wallet Registry address already set"
|
|
147
|
-
);
|
|
148
|
-
|
|
149
|
-
self.registry = EcdsaWalletRegistry(registry);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/// @notice Sets the wallet creation period.
|
|
153
|
-
/// @param creationPeriod New value of the wallet creation period
|
|
154
|
-
function setCreationPeriod(Data storage self, uint32 creationPeriod)
|
|
155
|
-
external
|
|
156
|
-
{
|
|
157
|
-
self.creationPeriod = creationPeriod;
|
|
158
|
-
|
|
159
|
-
emit WalletCreationPeriodUpdated(creationPeriod);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/// @notice Sets the minimum and maximum BTC balance parameters.
|
|
163
|
-
/// @param minBtcBalance New value of the minimum BTC balance
|
|
164
|
-
/// @param maxBtcBalance New value of the maximum BTC balance
|
|
165
|
-
/// @dev Requirements:
|
|
166
|
-
/// - Minimum BTC balance must be greater than zero
|
|
167
|
-
/// - Maximum BTC balance must be greater than minimum BTC balance
|
|
168
|
-
function setBtcBalanceRange(
|
|
169
|
-
Data storage self,
|
|
170
|
-
uint64 minBtcBalance,
|
|
171
|
-
uint64 maxBtcBalance
|
|
172
|
-
) external {
|
|
173
|
-
require(minBtcBalance > 0, "Minimum must be greater than zero");
|
|
174
|
-
require(
|
|
175
|
-
maxBtcBalance > minBtcBalance,
|
|
176
|
-
"Maximum must be greater than the minimum"
|
|
177
|
-
);
|
|
178
|
-
|
|
179
|
-
self.minBtcBalance = minBtcBalance;
|
|
180
|
-
self.maxBtcBalance = maxBtcBalance;
|
|
181
|
-
|
|
182
|
-
emit WalletBtcBalanceRangeUpdated(minBtcBalance, maxBtcBalance);
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/// @notice Sets the wallet maximum age.
|
|
186
|
-
/// @param maxAge New value of the wallet maximum age
|
|
187
|
-
function setMaxAge(Data storage self, uint32 maxAge) external {
|
|
188
|
-
self.maxAge = maxAge;
|
|
189
|
-
|
|
190
|
-
emit WalletMaxAgeUpdated(maxAge);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
101
|
/// @notice Requests creation of a new wallet. This function just
|
|
194
102
|
/// forms a request and the creation process is performed
|
|
195
103
|
/// asynchronously. Outcome of that process should be delivered
|
|
@@ -210,11 +118,12 @@ library Wallets {
|
|
|
210
118
|
/// was elapsed since its creation time
|
|
211
119
|
/// - The active wallet BTC balance is above the maximum threshold
|
|
212
120
|
function requestNewWallet(
|
|
213
|
-
|
|
121
|
+
BridgeState.Storage storage self,
|
|
214
122
|
BitcoinTx.UTXO calldata activeWalletMainUtxo
|
|
215
123
|
) external {
|
|
216
124
|
require(
|
|
217
|
-
self.
|
|
125
|
+
self.ecdsaWalletRegistry.getWalletCreationState() ==
|
|
126
|
+
EcdsaDkg.State.IDLE,
|
|
218
127
|
"Wallet creation already in progress"
|
|
219
128
|
);
|
|
220
129
|
|
|
@@ -235,19 +144,19 @@ library Wallets {
|
|
|
235
144
|
.createdAt;
|
|
236
145
|
/* solhint-disable-next-line not-rely-on-time */
|
|
237
146
|
bool activeWalletOldEnough = block.timestamp >=
|
|
238
|
-
activeWalletCreatedAt + self.
|
|
147
|
+
activeWalletCreatedAt + self.walletCreationPeriod;
|
|
239
148
|
|
|
240
149
|
require(
|
|
241
150
|
(activeWalletOldEnough &&
|
|
242
|
-
activeWalletBtcBalance >= self.
|
|
243
|
-
activeWalletBtcBalance >= self.
|
|
151
|
+
activeWalletBtcBalance >= self.walletMinBtcBalance) ||
|
|
152
|
+
activeWalletBtcBalance >= self.walletMaxBtcBalance,
|
|
244
153
|
"Wallet creation conditions are not met"
|
|
245
154
|
);
|
|
246
155
|
}
|
|
247
156
|
|
|
248
157
|
emit NewWalletRequested();
|
|
249
158
|
|
|
250
|
-
self.
|
|
159
|
+
self.ecdsaWalletRegistry.requestNewWallet();
|
|
251
160
|
}
|
|
252
161
|
|
|
253
162
|
/// @notice Gets BTC balance for given the wallet.
|
|
@@ -261,7 +170,7 @@ library Wallets {
|
|
|
261
170
|
/// If the wallet has no main UTXO, this parameter can be empty as it
|
|
262
171
|
/// is ignored.
|
|
263
172
|
function getWalletBtcBalance(
|
|
264
|
-
|
|
173
|
+
BridgeState.Storage storage self,
|
|
265
174
|
bytes20 walletPubKeyHash,
|
|
266
175
|
BitcoinTx.UTXO calldata walletMainUtxo
|
|
267
176
|
) internal view returns (uint64 walletBtcBalance) {
|
|
@@ -300,13 +209,13 @@ library Wallets {
|
|
|
300
209
|
/// - The only caller authorized to call this function is `registry`
|
|
301
210
|
/// - Given wallet data must not belong to an already registered wallet
|
|
302
211
|
function registerNewWallet(
|
|
303
|
-
|
|
212
|
+
BridgeState.Storage storage self,
|
|
304
213
|
bytes32 ecdsaWalletID,
|
|
305
214
|
bytes32 publicKeyX,
|
|
306
215
|
bytes32 publicKeyY
|
|
307
216
|
) external {
|
|
308
217
|
require(
|
|
309
|
-
msg.sender == address(self.
|
|
218
|
+
msg.sender == address(self.ecdsaWalletRegistry),
|
|
310
219
|
"Caller is not the ECDSA Wallet Registry"
|
|
311
220
|
);
|
|
312
221
|
|
|
@@ -339,12 +248,12 @@ library Wallets {
|
|
|
339
248
|
/// - The only caller authorized to call this function is `registry`
|
|
340
249
|
/// - Wallet must be in Live state
|
|
341
250
|
function notifyWalletHeartbeatFailed(
|
|
342
|
-
|
|
251
|
+
BridgeState.Storage storage self,
|
|
343
252
|
bytes32 publicKeyX,
|
|
344
253
|
bytes32 publicKeyY
|
|
345
254
|
) external {
|
|
346
255
|
require(
|
|
347
|
-
msg.sender == address(self.
|
|
256
|
+
msg.sender == address(self.ecdsaWalletRegistry),
|
|
348
257
|
"Caller is not the ECDSA Wallet Registry"
|
|
349
258
|
);
|
|
350
259
|
|
|
@@ -370,10 +279,10 @@ library Wallets {
|
|
|
370
279
|
/// @param walletPubKeyHash 20-byte public key hash of the wallet
|
|
371
280
|
/// @dev Requirements:
|
|
372
281
|
/// - The wallet must be in the `Live` or `MovingFunds` state
|
|
373
|
-
function
|
|
374
|
-
|
|
282
|
+
function notifyWalletTimedOutRedemption(
|
|
283
|
+
BridgeState.Storage storage self,
|
|
375
284
|
bytes20 walletPubKeyHash
|
|
376
|
-
)
|
|
285
|
+
) internal {
|
|
377
286
|
WalletState walletState = self
|
|
378
287
|
.registeredWallets[walletPubKeyHash]
|
|
379
288
|
.state;
|
|
@@ -408,7 +317,7 @@ library Wallets {
|
|
|
408
317
|
/// assumed to be zero.
|
|
409
318
|
/// - Wallet must be in Live state
|
|
410
319
|
function notifyCloseableWallet(
|
|
411
|
-
|
|
320
|
+
BridgeState.Storage storage self,
|
|
412
321
|
bytes20 walletPubKeyHash,
|
|
413
322
|
BitcoinTx.UTXO calldata walletMainUtxo
|
|
414
323
|
) external {
|
|
@@ -425,12 +334,12 @@ library Wallets {
|
|
|
425
334
|
|
|
426
335
|
/* solhint-disable-next-line not-rely-on-time */
|
|
427
336
|
bool walletOldEnough = block.timestamp >=
|
|
428
|
-
wallet.createdAt + self.
|
|
337
|
+
wallet.createdAt + self.walletMaxAge;
|
|
429
338
|
|
|
430
339
|
require(
|
|
431
340
|
walletOldEnough ||
|
|
432
341
|
getWalletBtcBalance(self, walletPubKeyHash, walletMainUtxo) <
|
|
433
|
-
self.
|
|
342
|
+
self.walletMinBtcBalance,
|
|
434
343
|
"Wallet needs to be old enough or have too few satoshis"
|
|
435
344
|
);
|
|
436
345
|
|
|
@@ -446,7 +355,10 @@ library Wallets {
|
|
|
446
355
|
/// @param walletPubKeyHash 20-byte public key hash of the wallet
|
|
447
356
|
/// @dev Requirements:
|
|
448
357
|
/// - The caller must make sure that the wallet is in the Live state
|
|
449
|
-
function moveFunds(
|
|
358
|
+
function moveFunds(
|
|
359
|
+
BridgeState.Storage storage self,
|
|
360
|
+
bytes20 walletPubKeyHash
|
|
361
|
+
) internal {
|
|
450
362
|
Wallet storage wallet = self.registeredWallets[walletPubKeyHash];
|
|
451
363
|
|
|
452
364
|
if (wallet.mainUtxoHash == bytes32(0)) {
|
|
@@ -476,14 +388,17 @@ library Wallets {
|
|
|
476
388
|
/// @dev Requirements:
|
|
477
389
|
/// - The caller must make sure that the wallet is in the
|
|
478
390
|
/// Live or MovingFunds state.
|
|
479
|
-
function closeWallet(
|
|
391
|
+
function closeWallet(
|
|
392
|
+
BridgeState.Storage storage self,
|
|
393
|
+
bytes20 walletPubKeyHash
|
|
394
|
+
) internal {
|
|
480
395
|
Wallet storage wallet = self.registeredWallets[walletPubKeyHash];
|
|
481
396
|
|
|
482
397
|
wallet.state = WalletState.Closed;
|
|
483
398
|
|
|
484
399
|
emit WalletClosed(wallet.ecdsaWalletID, walletPubKeyHash);
|
|
485
400
|
|
|
486
|
-
self.
|
|
401
|
+
self.ecdsaWalletRegistry.closeWallet(wallet.ecdsaWalletID);
|
|
487
402
|
}
|
|
488
403
|
|
|
489
404
|
/// @notice Reports about a fraud committed by the given wallet. This
|
|
@@ -493,7 +408,10 @@ library Wallets {
|
|
|
493
408
|
/// @param walletPubKeyHash 20-byte public key hash of the wallet
|
|
494
409
|
/// @dev Requirements:
|
|
495
410
|
/// - Wallet must be in Live or MovingFunds state
|
|
496
|
-
function
|
|
411
|
+
function notifyWalletFraud(
|
|
412
|
+
BridgeState.Storage storage self,
|
|
413
|
+
bytes20 walletPubKeyHash
|
|
414
|
+
) internal {
|
|
497
415
|
WalletState walletState = self
|
|
498
416
|
.registeredWallets[walletPubKeyHash]
|
|
499
417
|
.state;
|
|
@@ -518,9 +436,10 @@ library Wallets {
|
|
|
518
436
|
/// @dev Requirements:
|
|
519
437
|
/// - The caller must make sure that the wallet is in the
|
|
520
438
|
/// Live or MovingFunds state.
|
|
521
|
-
function terminateWallet(
|
|
522
|
-
|
|
523
|
-
|
|
439
|
+
function terminateWallet(
|
|
440
|
+
BridgeState.Storage storage self,
|
|
441
|
+
bytes20 walletPubKeyHash
|
|
442
|
+
) internal {
|
|
524
443
|
Wallet storage wallet = self.registeredWallets[walletPubKeyHash];
|
|
525
444
|
|
|
526
445
|
wallet.state = WalletState.Terminated;
|
|
@@ -534,7 +453,7 @@ library Wallets {
|
|
|
534
453
|
delete self.activeWalletPubKeyHash;
|
|
535
454
|
}
|
|
536
455
|
|
|
537
|
-
self.
|
|
456
|
+
self.ecdsaWalletRegistry.closeWallet(wallet.ecdsaWalletID);
|
|
538
457
|
}
|
|
539
458
|
|
|
540
459
|
/// @notice Notifies that the wallet completed the moving funds process
|
|
@@ -553,11 +472,11 @@ library Wallets {
|
|
|
553
472
|
/// wallet.
|
|
554
473
|
/// - The actual target wallets used in the moving funds transaction
|
|
555
474
|
/// must be exactly the same as the target wallets commitment.
|
|
556
|
-
function
|
|
557
|
-
|
|
475
|
+
function notifyWalletFundsMoved(
|
|
476
|
+
BridgeState.Storage storage self,
|
|
558
477
|
bytes20 walletPubKeyHash,
|
|
559
478
|
bytes32 targetWalletsHash
|
|
560
|
-
)
|
|
479
|
+
) internal {
|
|
561
480
|
Wallet storage wallet = self.registeredWallets[walletPubKeyHash];
|
|
562
481
|
// Check that the wallet is in the MovingFunds state but don't check
|
|
563
482
|
// if the moving funds timeout is exceeded. That should give a
|
package/package.json
CHANGED
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"_format": "hh-sol-artifact-1",
|
|
3
|
-
"contractName": "Frauds",
|
|
4
|
-
"sourceName": "contracts/bridge/Frauds.sol",
|
|
5
|
-
"abi": [
|
|
6
|
-
{
|
|
7
|
-
"anonymous": false,
|
|
8
|
-
"inputs": [
|
|
9
|
-
{
|
|
10
|
-
"indexed": false,
|
|
11
|
-
"internalType": "bytes20",
|
|
12
|
-
"name": "walletPublicKeyHash",
|
|
13
|
-
"type": "bytes20"
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
"indexed": false,
|
|
17
|
-
"internalType": "bytes32",
|
|
18
|
-
"name": "sighash",
|
|
19
|
-
"type": "bytes32"
|
|
20
|
-
}
|
|
21
|
-
],
|
|
22
|
-
"name": "FraudChallengeDefeatTimedOut",
|
|
23
|
-
"type": "event"
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
"anonymous": false,
|
|
27
|
-
"inputs": [
|
|
28
|
-
{
|
|
29
|
-
"indexed": false,
|
|
30
|
-
"internalType": "uint256",
|
|
31
|
-
"name": "newFraudChallengeDefeatTimeout",
|
|
32
|
-
"type": "uint256"
|
|
33
|
-
}
|
|
34
|
-
],
|
|
35
|
-
"name": "FraudChallengeDefeatTimeoutUpdated",
|
|
36
|
-
"type": "event"
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
"anonymous": false,
|
|
40
|
-
"inputs": [
|
|
41
|
-
{
|
|
42
|
-
"indexed": false,
|
|
43
|
-
"internalType": "bytes20",
|
|
44
|
-
"name": "walletPublicKeyHash",
|
|
45
|
-
"type": "bytes20"
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
"indexed": false,
|
|
49
|
-
"internalType": "bytes32",
|
|
50
|
-
"name": "sighash",
|
|
51
|
-
"type": "bytes32"
|
|
52
|
-
}
|
|
53
|
-
],
|
|
54
|
-
"name": "FraudChallengeDefeated",
|
|
55
|
-
"type": "event"
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
"anonymous": false,
|
|
59
|
-
"inputs": [
|
|
60
|
-
{
|
|
61
|
-
"indexed": false,
|
|
62
|
-
"internalType": "uint256",
|
|
63
|
-
"name": "newFraudChallengeDepositAmount",
|
|
64
|
-
"type": "uint256"
|
|
65
|
-
}
|
|
66
|
-
],
|
|
67
|
-
"name": "FraudChallengeDepositAmountUpdated",
|
|
68
|
-
"type": "event"
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
"anonymous": false,
|
|
72
|
-
"inputs": [
|
|
73
|
-
{
|
|
74
|
-
"indexed": false,
|
|
75
|
-
"internalType": "bytes20",
|
|
76
|
-
"name": "walletPublicKeyHash",
|
|
77
|
-
"type": "bytes20"
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
"indexed": false,
|
|
81
|
-
"internalType": "bytes32",
|
|
82
|
-
"name": "sighash",
|
|
83
|
-
"type": "bytes32"
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
"indexed": false,
|
|
87
|
-
"internalType": "uint8",
|
|
88
|
-
"name": "v",
|
|
89
|
-
"type": "uint8"
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
"indexed": false,
|
|
93
|
-
"internalType": "bytes32",
|
|
94
|
-
"name": "r",
|
|
95
|
-
"type": "bytes32"
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
"indexed": false,
|
|
99
|
-
"internalType": "bytes32",
|
|
100
|
-
"name": "s",
|
|
101
|
-
"type": "bytes32"
|
|
102
|
-
}
|
|
103
|
-
],
|
|
104
|
-
"name": "FraudChallengeSubmitted",
|
|
105
|
-
"type": "event"
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
"anonymous": false,
|
|
109
|
-
"inputs": [
|
|
110
|
-
{
|
|
111
|
-
"indexed": false,
|
|
112
|
-
"internalType": "uint256",
|
|
113
|
-
"name": "newFraudNotifierRewardMultiplier",
|
|
114
|
-
"type": "uint256"
|
|
115
|
-
}
|
|
116
|
-
],
|
|
117
|
-
"name": "FraudNotifierRewardMultiplierUpdated",
|
|
118
|
-
"type": "event"
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
"anonymous": false,
|
|
122
|
-
"inputs": [
|
|
123
|
-
{
|
|
124
|
-
"indexed": false,
|
|
125
|
-
"internalType": "uint256",
|
|
126
|
-
"name": "newFraudSlashingAmount",
|
|
127
|
-
"type": "uint256"
|
|
128
|
-
}
|
|
129
|
-
],
|
|
130
|
-
"name": "FraudSlashingAmountUpdated",
|
|
131
|
-
"type": "event"
|
|
132
|
-
}
|
|
133
|
-
],
|
|
134
|
-
"bytecode": "0x611aad61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100925760003560e01c8063545227871161006557806354522787146101195780639a08b74014610139578063c945968614610159578063e6d20d451461018b57600080fd5b80632123f1c41461009757806321e76ee8146100b95780633f31f49f146100d957806340399403146100f9575b600080fd5b8180156100a357600080fd5b506100b76100b23660046116bd565b6101ab565b005b8180156100c557600080fd5b506100b76100d4366004611721565b6101e6565b8180156100e557600080fd5b506100b76100f4366004611774565b6104f3565b81801561010557600080fd5b506100b76101143660046116bd565b6106e4565b81801561012557600080fd5b506100b76101343660046116bd565b61077e565b81801561014557600080fd5b506100b7610154366004611819565b61082c565b81801561016557600080fd5b506101796101743660046118ae565b610a9c565b60405190815260200160405180910390f35b81801561019757600080fd5b506100b76101a63660046116bd565b610c72565b8082556040518181527fdf25ccd778c4ac0298894525a8bd99ba018936d0c6ea0b6fc212507531c0adb7906020015b60405180910390a15050565b60008383836040516020016101fd93929190611931565b60408051601f198184030181529181528151602092830120600081815260048901909352912060028101549192509063ffffffff166102835760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520646f6573206e6f74206578697374000060448201526064015b60405180910390fd5b6002810154640100000000900460ff16156102f25760405162461bcd60e51b815260206004820152602960248201527f4672617564206368616c6c656e67652068617320616c7265616479206265656e604482015268081c995cdbdb1d995960ba1b606482015260840161027a565b6002808701549082015461030c919063ffffffff16611959565b4210156103815760405162461bcd60e51b815260206004820152603260248201527f4672617564206368616c6c656e67652064656665617420706572696f6420646960448201527f64206e6f742074696d65206f7574207965740000000000000000000000000000606482015260840161027a565b60028101805464ff0000000019166401000000001790558054600182015460405173ffffffffffffffffffffffffffffffffffffffff90921691620186a091906000818181858888f193505050503d80600081146103fb576040519150601f19603f3d011682016040523d82523d6000602084013e610400565b606091505b505050600061049061044c600088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610d0c9050565b604080516020601f8a0181900481028201810190925288815261048b91908a8a808385018382808284376000920191909152509293925050610d0c9050565b610d14565b9050600061049d82610dbf565b604080516bffffffffffffffffffffffff1983168152602081018890529192507f635230b60143449f10a365568e2bd95e3e8aaed03855631722941c2bad634b7791015b60405180910390a15050505050505050565b600061053484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610de692505050565b9050600086868360405160200161054d93929190611931565b60408051601f198184030181528282528051602091820120600081815260048d0190925291902060028101805464ff00000000191664010000000017905560018101549193509173ffffffffffffffffffffffffffffffffffffffff861691620186a091600060405180830381858888f193505050503d80600081146105ef576040519150601f19603f3d011682016040523d82523d6000602084013e6105f4565b606091505b505050600061067f61064060008b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610d0c9050565b604080516020601f8d018190048102820181019092528b815261048b91908d8d808385018382808284376000920191909152509293925050610d0c9050565b9050600061068c82610dbf565b604080516bffffffffffffffffffffffff1983168152602081018890529192507f6ff720470ffad78f316655e2c7fc77a76763c13de0e19ee52149916ba7e44d3b910160405180910390a15050505050505050505050565b600081116107475760405162461bcd60e51b815260206004820152602a60248201527f4672617564206368616c6c656e6765206465666561742074696d656f7574206d6044820152690757374206265203e20360b41b606482015260840161027a565b600282018190556040518181527f1e833ee8be2754de7dae1749a8438b691fda5b0695db2b2b8311b23270406d5a906020016101da565b60648111156107f55760405162461bcd60e51b815260206004820152602f60248201527f4672617564206e6f74696669657220726577617264206d756c7469706c69657260448201527f206d757374206265203c3d203130300000000000000000000000000000000000606482015260840161027a565b600182018190556040518181527feddb2abfc2e3aa166fbafa0dbaa077f0ec7663ddc8a535253bb35ed4ab70c877906020016101da565b85600301543410156108a65760405162461bcd60e51b815260206004820152602660248201527f54686520616d6f756e74206f6620455448206465706f7369746564206973207460448201527f6f6f206c6f770000000000000000000000000000000000000000000000000000606482015260840161027a565b6108fe85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508692506108f29150506060850160408601611971565b84356020860135610ea5565b61094a5760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726520766572696669636174696f6e206661696c7572650000604482015260640161027a565b600085858460405160200161096193929190611931565b60408051601f198184030181529181528151602092830120600081815260048b01909352912060028101549192509063ffffffff16156109e35760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520616c7265616479206578697374730000604482015260640161027a565b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000163317815534600182015560028101805464ffffffffff191663ffffffff42161790557ff4aa58d09ba5de017eac597806dfcfc2cad287816cb1eb7729a032c82680c94d8585610a5c6060870160408801611971565b604080516bffffffffffffffffffffffff19909416845260208085019390935260ff9091169083015285356060830152850135608082015260a0016104e1565b600080610ade85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610de692505050565b90506000878783604051602001610af793929190611931565b60408051601f198184030181529181528151602092830120600081815260048d01909352912060028101549192509063ffffffff16610b785760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520646f6573206e6f742065786973740000604482015260640161027a565b6002810154640100000000900460ff1615610be75760405162461bcd60e51b815260206004820152602960248201527f4672617564206368616c6c656e67652068617320616c7265616479206265656e604482015268081c995cdbdb1d995960ba1b606482015260840161027a565b610bf18787610fb5565b63ffffffff16600114610c465760405162461bcd60e51b815260206004820152601260248201527f57726f6e67207369676861736820747970650000000000000000000000000000604482015260640161027a565b84610c5a57610c558787611035565b610c64565b610c648787611279565b9a9950505050505050505050565b60008111610cd55760405162461bcd60e51b815260206004820152602a60248201527f4672617564206368616c6c656e6765206465706f73697420616d6f756e74206d6044820152690757374206265203e20360b41b606482015260840161027a565b600382018190556040518181527fac6cc6a5e862456c7f1a3827f078d9a355cb82eef2353c4167e872673b48570c906020016101da565b016020015190565b60606000610d23600284611994565b610d4e57507f0200000000000000000000000000000000000000000000000000000000000000610d71565b507f03000000000000000000000000000000000000000000000000000000000000005b6040517fff0000000000000000000000000000000000000000000000000000000000000082166020820152602181018590526041016040516020818303038152906040529150505b92915050565b60006020600083516020850160025afa50602060006020600060035afa5050600c51919050565b600060028083604051610df991906119b6565b602060405180830381855afa158015610e16573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610e3991906119f1565b604051602001610e4b91815260200190565b60408051601f1981840301815290829052610e65916119b6565b602060405180830381855afa158015610e82573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610db991906119f1565b60008551604014610f1e5760405162461bcd60e51b815260206004820152602760248201527f526571756972657320756e636f6d7072657373656420756e707265666978656460448201527f207075626b657900000000000000000000000000000000000000000000000000606482015260840161027a565b6000610f298761136f565b604080516000808252602082018084528a905260ff89169282019290925260608101879052608081018690529192509060019060a0016020604051602081039080840390855afa158015610f81573d6000803e3d6000fd5b5050604051601f19015173ffffffffffffffffffffffffffffffffffffffff90811693169290921498975050505050505050565b600080611005610fc6600485611a0a565b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b905060e081901c60d882901c63ff00ff001662ff00ff60e884901c1617601081811b91901c175b95945050505050565b600080600061107e600486868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061140a9050565b90925090506000611090836005611959565b905060005b8281101561126f5760006110e28389898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506115889050565b90506000611129848a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506115d39050565b915050801561124e576000611177858b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b905060006111e76111c1878d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061161a9050565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b9050818160405160200161122a92919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6040516020818303038152906040528051906020012060001c98505050505061126f565b6112588285611959565b93505050808061126790611a21565b915050611095565b5050505092915050565b6000806112c0604485858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b9050600061130b6111c1604487878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061161a9050565b9050818160405160200161134e92919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b60408051601f19818403018152919052805160209091012095945050505050565b600081516040146113e85760405162461bcd60e51b815260206004820152602d60248201527f5075626b6579206d7573742062652036342d62797465207261772c20756e636f60448201527f6d70726573736564206b65792e00000000000000000000000000000000000000606482015260840161027a565b50805160209091012090565b60006114038383016020015190565b9392505050565b60008060006114198585611631565b905060ff811661144b57600085858151811061143757611437611a3c565b016020015190935060f81c91506115819050565b83611457826001611a52565b60ff166114649190611959565b8551101561147b5760001960009250925050611581565b60008160ff16600214156114c0576114b56114a161149a876001611959565b88906113f4565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611577565b8160ff16600414156114ea576114dd6111c161149a876001611959565b63ffffffff169050611577565b8160ff16600814156115775761156a61150761149a876001611959565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b600080600061159785856115d3565b90925090506000198214156115b25760001992505050610db9565b806115be836025611959565b6115c89190611959565b61102c906004611959565b6000806115e1836025611959565b845110156115f6575060001990506000611581565b60008061160d86611608876024611959565b61140a565b9097909650945050505050565b600061140361162a836020611959565b84906113f4565b600082828151811061164557611645611a3c565b60209101015160f81c60ff141561165e57506008610db9565b82828151811061167057611670611a3c565b60209101015160f81c60fe141561168957506004610db9565b82828151811061169b5761169b611a3c565b60209101015160f81c60fd14156116b457506002610db9565b50600092915050565b600080604083850312156116d057600080fd5b50508035926020909101359150565b60008083601f8401126116f157600080fd5b50813567ffffffffffffffff81111561170957600080fd5b60208301915083602082850101111561158157600080fd5b6000806000806060858703121561173757600080fd5b84359350602085013567ffffffffffffffff81111561175557600080fd5b611761878288016116df565b9598909750949560400135949350505050565b6000806000806000806080878903121561178d57600080fd5b86359550602087013567ffffffffffffffff808211156117ac57600080fd5b6117b88a838b016116df565b909750955060408901359150808211156117d157600080fd5b506117de89828a016116df565b909450925050606087013573ffffffffffffffffffffffffffffffffffffffff8116811461180b57600080fd5b809150509295509295509295565b60008060008060008086880360e081121561183357600080fd5b87359650602088013567ffffffffffffffff81111561185157600080fd5b61185d8a828b016116df565b90975095505060408801356bffffffffffffffffffffffff198116811461188357600080fd5b93506060888101359350607f198201121561189d57600080fd5b506080870190509295509295509295565b600080600080600080608087890312156118c757600080fd5b86359550602087013567ffffffffffffffff808211156118e657600080fd5b6118f28a838b016116df565b9097509550604089013591508082111561190b57600080fd5b5061191889828a016116df565b9094509250506060870135801515811461180b57600080fd5b82848237909101908152602001919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561196c5761196c611943565b500190565b60006020828403121561198357600080fd5b813560ff8116811461140357600080fd5b6000826119b157634e487b7160e01b600052601260045260246000fd5b500690565b6000825160005b818110156119d757602081860181015185830152016119bd565b818111156119e6576000828501525b509190910192915050565b600060208284031215611a0357600080fd5b5051919050565b600082821015611a1c57611a1c611943565b500390565b6000600019821415611a3557611a35611943565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff84168060ff03821115611a6f57611a6f611943565b01939250505056fea2646970667358221220a7852305a50b8d90eec1ab9ee1801ea51a07a1ee5abc1ae4beb865d85e9cf0fa64736f6c63430008090033",
|
|
135
|
-
"deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100925760003560e01c8063545227871161006557806354522787146101195780639a08b74014610139578063c945968614610159578063e6d20d451461018b57600080fd5b80632123f1c41461009757806321e76ee8146100b95780633f31f49f146100d957806340399403146100f9575b600080fd5b8180156100a357600080fd5b506100b76100b23660046116bd565b6101ab565b005b8180156100c557600080fd5b506100b76100d4366004611721565b6101e6565b8180156100e557600080fd5b506100b76100f4366004611774565b6104f3565b81801561010557600080fd5b506100b76101143660046116bd565b6106e4565b81801561012557600080fd5b506100b76101343660046116bd565b61077e565b81801561014557600080fd5b506100b7610154366004611819565b61082c565b81801561016557600080fd5b506101796101743660046118ae565b610a9c565b60405190815260200160405180910390f35b81801561019757600080fd5b506100b76101a63660046116bd565b610c72565b8082556040518181527fdf25ccd778c4ac0298894525a8bd99ba018936d0c6ea0b6fc212507531c0adb7906020015b60405180910390a15050565b60008383836040516020016101fd93929190611931565b60408051601f198184030181529181528151602092830120600081815260048901909352912060028101549192509063ffffffff166102835760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520646f6573206e6f74206578697374000060448201526064015b60405180910390fd5b6002810154640100000000900460ff16156102f25760405162461bcd60e51b815260206004820152602960248201527f4672617564206368616c6c656e67652068617320616c7265616479206265656e604482015268081c995cdbdb1d995960ba1b606482015260840161027a565b6002808701549082015461030c919063ffffffff16611959565b4210156103815760405162461bcd60e51b815260206004820152603260248201527f4672617564206368616c6c656e67652064656665617420706572696f6420646960448201527f64206e6f742074696d65206f7574207965740000000000000000000000000000606482015260840161027a565b60028101805464ff0000000019166401000000001790558054600182015460405173ffffffffffffffffffffffffffffffffffffffff90921691620186a091906000818181858888f193505050503d80600081146103fb576040519150601f19603f3d011682016040523d82523d6000602084013e610400565b606091505b505050600061049061044c600088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610d0c9050565b604080516020601f8a0181900481028201810190925288815261048b91908a8a808385018382808284376000920191909152509293925050610d0c9050565b610d14565b9050600061049d82610dbf565b604080516bffffffffffffffffffffffff1983168152602081018890529192507f635230b60143449f10a365568e2bd95e3e8aaed03855631722941c2bad634b7791015b60405180910390a15050505050505050565b600061053484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610de692505050565b9050600086868360405160200161054d93929190611931565b60408051601f198184030181528282528051602091820120600081815260048d0190925291902060028101805464ff00000000191664010000000017905560018101549193509173ffffffffffffffffffffffffffffffffffffffff861691620186a091600060405180830381858888f193505050503d80600081146105ef576040519150601f19603f3d011682016040523d82523d6000602084013e6105f4565b606091505b505050600061067f61064060008b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610d0c9050565b604080516020601f8d018190048102820181019092528b815261048b91908d8d808385018382808284376000920191909152509293925050610d0c9050565b9050600061068c82610dbf565b604080516bffffffffffffffffffffffff1983168152602081018890529192507f6ff720470ffad78f316655e2c7fc77a76763c13de0e19ee52149916ba7e44d3b910160405180910390a15050505050505050505050565b600081116107475760405162461bcd60e51b815260206004820152602a60248201527f4672617564206368616c6c656e6765206465666561742074696d656f7574206d6044820152690757374206265203e20360b41b606482015260840161027a565b600282018190556040518181527f1e833ee8be2754de7dae1749a8438b691fda5b0695db2b2b8311b23270406d5a906020016101da565b60648111156107f55760405162461bcd60e51b815260206004820152602f60248201527f4672617564206e6f74696669657220726577617264206d756c7469706c69657260448201527f206d757374206265203c3d203130300000000000000000000000000000000000606482015260840161027a565b600182018190556040518181527feddb2abfc2e3aa166fbafa0dbaa077f0ec7663ddc8a535253bb35ed4ab70c877906020016101da565b85600301543410156108a65760405162461bcd60e51b815260206004820152602660248201527f54686520616d6f756e74206f6620455448206465706f7369746564206973207460448201527f6f6f206c6f770000000000000000000000000000000000000000000000000000606482015260840161027a565b6108fe85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508692506108f29150506060850160408601611971565b84356020860135610ea5565b61094a5760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726520766572696669636174696f6e206661696c7572650000604482015260640161027a565b600085858460405160200161096193929190611931565b60408051601f198184030181529181528151602092830120600081815260048b01909352912060028101549192509063ffffffff16156109e35760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520616c7265616479206578697374730000604482015260640161027a565b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000163317815534600182015560028101805464ffffffffff191663ffffffff42161790557ff4aa58d09ba5de017eac597806dfcfc2cad287816cb1eb7729a032c82680c94d8585610a5c6060870160408801611971565b604080516bffffffffffffffffffffffff19909416845260208085019390935260ff9091169083015285356060830152850135608082015260a0016104e1565b600080610ade85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610de692505050565b90506000878783604051602001610af793929190611931565b60408051601f198184030181529181528151602092830120600081815260048d01909352912060028101549192509063ffffffff16610b785760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520646f6573206e6f742065786973740000604482015260640161027a565b6002810154640100000000900460ff1615610be75760405162461bcd60e51b815260206004820152602960248201527f4672617564206368616c6c656e67652068617320616c7265616479206265656e604482015268081c995cdbdb1d995960ba1b606482015260840161027a565b610bf18787610fb5565b63ffffffff16600114610c465760405162461bcd60e51b815260206004820152601260248201527f57726f6e67207369676861736820747970650000000000000000000000000000604482015260640161027a565b84610c5a57610c558787611035565b610c64565b610c648787611279565b9a9950505050505050505050565b60008111610cd55760405162461bcd60e51b815260206004820152602a60248201527f4672617564206368616c6c656e6765206465706f73697420616d6f756e74206d6044820152690757374206265203e20360b41b606482015260840161027a565b600382018190556040518181527fac6cc6a5e862456c7f1a3827f078d9a355cb82eef2353c4167e872673b48570c906020016101da565b016020015190565b60606000610d23600284611994565b610d4e57507f0200000000000000000000000000000000000000000000000000000000000000610d71565b507f03000000000000000000000000000000000000000000000000000000000000005b6040517fff0000000000000000000000000000000000000000000000000000000000000082166020820152602181018590526041016040516020818303038152906040529150505b92915050565b60006020600083516020850160025afa50602060006020600060035afa5050600c51919050565b600060028083604051610df991906119b6565b602060405180830381855afa158015610e16573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610e3991906119f1565b604051602001610e4b91815260200190565b60408051601f1981840301815290829052610e65916119b6565b602060405180830381855afa158015610e82573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610db991906119f1565b60008551604014610f1e5760405162461bcd60e51b815260206004820152602760248201527f526571756972657320756e636f6d7072657373656420756e707265666978656460448201527f207075626b657900000000000000000000000000000000000000000000000000606482015260840161027a565b6000610f298761136f565b604080516000808252602082018084528a905260ff89169282019290925260608101879052608081018690529192509060019060a0016020604051602081039080840390855afa158015610f81573d6000803e3d6000fd5b5050604051601f19015173ffffffffffffffffffffffffffffffffffffffff90811693169290921498975050505050505050565b600080611005610fc6600485611a0a565b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b905060e081901c60d882901c63ff00ff001662ff00ff60e884901c1617601081811b91901c175b95945050505050565b600080600061107e600486868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061140a9050565b90925090506000611090836005611959565b905060005b8281101561126f5760006110e28389898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506115889050565b90506000611129848a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506115d39050565b915050801561124e576000611177858b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b905060006111e76111c1878d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061161a9050565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b9050818160405160200161122a92919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6040516020818303038152906040528051906020012060001c98505050505061126f565b6112588285611959565b93505050808061126790611a21565b915050611095565b5050505092915050565b6000806112c0604485858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b9050600061130b6111c1604487878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061161a9050565b9050818160405160200161134e92919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b60408051601f19818403018152919052805160209091012095945050505050565b600081516040146113e85760405162461bcd60e51b815260206004820152602d60248201527f5075626b6579206d7573742062652036342d62797465207261772c20756e636f60448201527f6d70726573736564206b65792e00000000000000000000000000000000000000606482015260840161027a565b50805160209091012090565b60006114038383016020015190565b9392505050565b60008060006114198585611631565b905060ff811661144b57600085858151811061143757611437611a3c565b016020015190935060f81c91506115819050565b83611457826001611a52565b60ff166114649190611959565b8551101561147b5760001960009250925050611581565b60008160ff16600214156114c0576114b56114a161149a876001611959565b88906113f4565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611577565b8160ff16600414156114ea576114dd6111c161149a876001611959565b63ffffffff169050611577565b8160ff16600814156115775761156a61150761149a876001611959565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b600080600061159785856115d3565b90925090506000198214156115b25760001992505050610db9565b806115be836025611959565b6115c89190611959565b61102c906004611959565b6000806115e1836025611959565b845110156115f6575060001990506000611581565b60008061160d86611608876024611959565b61140a565b9097909650945050505050565b600061140361162a836020611959565b84906113f4565b600082828151811061164557611645611a3c565b60209101015160f81c60ff141561165e57506008610db9565b82828151811061167057611670611a3c565b60209101015160f81c60fe141561168957506004610db9565b82828151811061169b5761169b611a3c565b60209101015160f81c60fd14156116b457506002610db9565b50600092915050565b600080604083850312156116d057600080fd5b50508035926020909101359150565b60008083601f8401126116f157600080fd5b50813567ffffffffffffffff81111561170957600080fd5b60208301915083602082850101111561158157600080fd5b6000806000806060858703121561173757600080fd5b84359350602085013567ffffffffffffffff81111561175557600080fd5b611761878288016116df565b9598909750949560400135949350505050565b6000806000806000806080878903121561178d57600080fd5b86359550602087013567ffffffffffffffff808211156117ac57600080fd5b6117b88a838b016116df565b909750955060408901359150808211156117d157600080fd5b506117de89828a016116df565b909450925050606087013573ffffffffffffffffffffffffffffffffffffffff8116811461180b57600080fd5b809150509295509295509295565b60008060008060008086880360e081121561183357600080fd5b87359650602088013567ffffffffffffffff81111561185157600080fd5b61185d8a828b016116df565b90975095505060408801356bffffffffffffffffffffffff198116811461188357600080fd5b93506060888101359350607f198201121561189d57600080fd5b506080870190509295509295509295565b600080600080600080608087890312156118c757600080fd5b86359550602087013567ffffffffffffffff808211156118e657600080fd5b6118f28a838b016116df565b9097509550604089013591508082111561190b57600080fd5b5061191889828a016116df565b9094509250506060870135801515811461180b57600080fd5b82848237909101908152602001919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561196c5761196c611943565b500190565b60006020828403121561198357600080fd5b813560ff8116811461140357600080fd5b6000826119b157634e487b7160e01b600052601260045260246000fd5b500690565b6000825160005b818110156119d757602081860181015185830152016119bd565b818111156119e6576000828501525b509190910192915050565b600060208284031215611a0357600080fd5b5051919050565b600082821015611a1c57611a1c611943565b500390565b6000600019821415611a3557611a35611943565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff84168060ff03821115611a6f57611a6f611943565b01939250505056fea2646970667358221220a7852305a50b8d90eec1ab9ee1801ea51a07a1ee5abc1ae4beb865d85e9cf0fa64736f6c63430008090033",
|
|
136
|
-
"linkReferences": {},
|
|
137
|
-
"deployedLinkReferences": {}
|
|
138
|
-
}
|