@keep-network/tbtc-v2 0.1.1-dev.39 → 0.1.1-dev.41
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/{518efc6faeb6612766a5b3fef24e13ad.json → e9b173393b9fd7287a0bfaa6d4eb4b71.json} +6 -6
- 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/Bridge.sol/Bridge.dbg.json +1 -1
- package/build/contracts/bridge/Bridge.sol/Bridge.json +99 -107
- package/build/contracts/bridge/BridgeState.sol/BridgeState.dbg.json +1 -1
- package/build/contracts/bridge/BridgeState.sol/BridgeState.json +2 -2
- 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/Fraud.sol/Fraud.dbg.json +4 -0
- package/build/contracts/bridge/Fraud.sol/Fraud.json +138 -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 +2 -2
- package/build/contracts/bridge/Redeem.sol/OutboundTx.dbg.json +1 -1
- package/build/contracts/bridge/Redeem.sol/OutboundTx.json +2 -2
- package/build/contracts/bridge/Redeem.sol/Redeem.dbg.json +1 -1
- package/build/contracts/bridge/Redeem.sol/Redeem.json +2 -2
- 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/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/Bridge.sol +56 -95
- package/contracts/bridge/BridgeState.sol +116 -111
- package/contracts/bridge/Deposit.sol +4 -4
- package/contracts/bridge/{Frauds.sol → Fraud.sol} +58 -131
- package/contracts/bridge/Sweep.sol +1 -1
- 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
|
@@ -18,32 +18,18 @@ pragma solidity ^0.8.9;
|
|
|
18
18
|
import {BytesLib} from "@keep-network/bitcoin-spv-sol/contracts/BytesLib.sol";
|
|
19
19
|
import {BTCUtils} from "@keep-network/bitcoin-spv-sol/contracts/BTCUtils.sol";
|
|
20
20
|
import {CheckBitcoinSigs} from "@keep-network/bitcoin-spv-sol/contracts/CheckBitcoinSigs.sol";
|
|
21
|
+
|
|
21
22
|
import "./BitcoinTx.sol";
|
|
22
23
|
import "./EcdsaLib.sol";
|
|
23
|
-
import "./
|
|
24
|
+
import "./BridgeState.sol";
|
|
25
|
+
import "./Wallets.sol";
|
|
24
26
|
|
|
25
|
-
library
|
|
27
|
+
library Fraud {
|
|
26
28
|
using BytesLib for bytes;
|
|
27
29
|
using BTCUtils for bytes;
|
|
28
30
|
using BTCUtils for uint32;
|
|
29
31
|
using EcdsaLib for bytes;
|
|
30
32
|
|
|
31
|
-
struct Data {
|
|
32
|
-
/// The amount of stake slashed from each member of a wallet for a fraud.
|
|
33
|
-
uint256 slashingAmount;
|
|
34
|
-
/// The percentage of the notifier reward from the staking contract
|
|
35
|
-
/// the notifier of a fraud receives. The value is in the range [0, 100].
|
|
36
|
-
uint256 notifierRewardMultiplier;
|
|
37
|
-
/// The amount of time the wallet has to defeat a fraud challenge.
|
|
38
|
-
uint256 challengeDefeatTimeout;
|
|
39
|
-
/// The amount of ETH in wei the party challenging the wallet for fraud
|
|
40
|
-
/// needs to deposit.
|
|
41
|
-
uint256 challengeDepositAmount;
|
|
42
|
-
/// Collection of all submitted fraud challenges indexed by challenge
|
|
43
|
-
/// key built as keccak256(walletPublicKey|sighash).
|
|
44
|
-
mapping(uint256 => FraudChallenge) challenges;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
33
|
struct FraudChallenge {
|
|
48
34
|
// The address of the party challenging the wallet.
|
|
49
35
|
address challenger;
|
|
@@ -101,8 +87,6 @@ library Frauds {
|
|
|
101
87
|
/// challenge or confiscated otherwise
|
|
102
88
|
/// @param walletPublicKey The public key of the wallet in the uncompressed
|
|
103
89
|
/// and unprefixed format (64 bytes)
|
|
104
|
-
/// @param walletPubKeyHash 20-byte public key hash (computed using Bitcoin
|
|
105
|
-
// HASH160 over the compressed ECDSA public key) of the wallet
|
|
106
90
|
/// @param sighash The hash that was used to produce the ECDSA signature
|
|
107
91
|
/// that is the subject of the fraud claim. This hash is constructed
|
|
108
92
|
/// by applying double SHA-256 over a serialized subset of the
|
|
@@ -111,20 +95,22 @@ library Frauds {
|
|
|
111
95
|
/// for reference
|
|
112
96
|
/// @param signature Bitcoin signature in the R/S/V format
|
|
113
97
|
/// @dev Requirements:
|
|
98
|
+
/// - Wallet behind `walletPublicKey` must be in `Live` or `MovingFunds`
|
|
99
|
+
/// state
|
|
114
100
|
/// - The challenger must send appropriate amount of ETH used as
|
|
115
101
|
/// fraud challenge deposit
|
|
116
102
|
/// - The signature (represented by r, s and v) must be generated by
|
|
117
|
-
/// the wallet behind `
|
|
103
|
+
/// the wallet behind `walletPublicKey` during signing of `sighash`
|
|
118
104
|
/// - Wallet can be challenged for the given signature only once
|
|
119
|
-
function
|
|
120
|
-
|
|
105
|
+
function submitFraudChallenge(
|
|
106
|
+
BridgeState.Storage storage self,
|
|
107
|
+
Wallets.Data storage wallets,
|
|
121
108
|
bytes calldata walletPublicKey,
|
|
122
|
-
bytes20 walletPubKeyHash,
|
|
123
109
|
bytes32 sighash,
|
|
124
110
|
BitcoinTx.RSVSignature calldata signature
|
|
125
111
|
) external {
|
|
126
112
|
require(
|
|
127
|
-
msg.value >= self.
|
|
113
|
+
msg.value >= self.fraudChallengeDepositAmount,
|
|
128
114
|
"The amount of ETH deposited is too low"
|
|
129
115
|
);
|
|
130
116
|
|
|
@@ -139,11 +125,27 @@ library Frauds {
|
|
|
139
125
|
"Signature verification failure"
|
|
140
126
|
);
|
|
141
127
|
|
|
128
|
+
bytes memory compressedWalletPublicKey = EcdsaLib.compressPublicKey(
|
|
129
|
+
walletPublicKey.slice32(0),
|
|
130
|
+
walletPublicKey.slice32(32)
|
|
131
|
+
);
|
|
132
|
+
bytes20 walletPubKeyHash = compressedWalletPublicKey.hash160View();
|
|
133
|
+
|
|
134
|
+
Wallets.Wallet storage wallet = wallets.registeredWallets[
|
|
135
|
+
walletPubKeyHash
|
|
136
|
+
];
|
|
137
|
+
|
|
138
|
+
require(
|
|
139
|
+
wallet.state == Wallets.WalletState.Live ||
|
|
140
|
+
wallet.state == Wallets.WalletState.MovingFunds,
|
|
141
|
+
"Wallet is neither in Live nor MovingFunds state"
|
|
142
|
+
);
|
|
143
|
+
|
|
142
144
|
uint256 challengeKey = uint256(
|
|
143
145
|
keccak256(abi.encodePacked(walletPublicKey, sighash))
|
|
144
146
|
);
|
|
145
147
|
|
|
146
|
-
FraudChallenge storage challenge = self.
|
|
148
|
+
FraudChallenge storage challenge = self.fraudChallenges[challengeKey];
|
|
147
149
|
require(challenge.reportedAt == 0, "Fraud challenge already exists");
|
|
148
150
|
|
|
149
151
|
challenge.challenger = msg.sender;
|
|
@@ -161,8 +163,18 @@ library Frauds {
|
|
|
161
163
|
);
|
|
162
164
|
}
|
|
163
165
|
|
|
164
|
-
/// @notice
|
|
165
|
-
///
|
|
166
|
+
/// @notice Allows to defeat a pending fraud challenge against a wallet if
|
|
167
|
+
/// the transaction that spends the UTXO follows the protocol rules.
|
|
168
|
+
/// In order to defeat the challenge the same `walletPublicKey` and
|
|
169
|
+
/// signature (represented by `r`, `s` and `v`) must be provided as
|
|
170
|
+
/// were used to calculate the sighash during input signing.
|
|
171
|
+
/// The fraud challenge defeat attempt will only succeed if the
|
|
172
|
+
/// inputs in the preimage are considered honestly spent by the
|
|
173
|
+
/// wallet. Therefore the transaction spending the UTXO must be
|
|
174
|
+
/// proven in the Bridge before a challenge defeat is called.
|
|
175
|
+
/// If successfully defeated, the fraud challenge is marked as
|
|
176
|
+
/// resolved and the amount of ether deposited by the challenger is
|
|
177
|
+
/// sent to the treasury.
|
|
166
178
|
/// @param walletPublicKey The public key of the wallet in the uncompressed
|
|
167
179
|
/// and unprefixed format (64 bytes)
|
|
168
180
|
/// @param preimage The preimage which produces sighash used to generate the
|
|
@@ -172,25 +184,26 @@ library Frauds {
|
|
|
172
184
|
/// produced for. See BIP-143 for reference
|
|
173
185
|
/// @param witness Flag indicating whether the preimage was produced for a
|
|
174
186
|
/// witness input. True for witness, false for non-witness input.
|
|
175
|
-
/// @return utxoKey UTXO key that identifies spent input.
|
|
176
187
|
/// @dev Requirements:
|
|
177
188
|
/// - `walletPublicKey` and `sighash` calculated as `hash256(preimage)`
|
|
178
189
|
/// must identify an open fraud challenge
|
|
179
190
|
/// - the preimage must be a valid preimage of a transaction generated
|
|
180
191
|
/// according to the protocol rules and already proved in the Bridge
|
|
181
|
-
|
|
182
|
-
|
|
192
|
+
/// - before a defeat attempt is made the transaction that spends the
|
|
193
|
+
/// given UTXO must be proven in the Bridge
|
|
194
|
+
function defeatFraudChallenge(
|
|
195
|
+
BridgeState.Storage storage self,
|
|
183
196
|
bytes calldata walletPublicKey,
|
|
184
197
|
bytes calldata preimage,
|
|
185
198
|
bool witness
|
|
186
|
-
) external
|
|
199
|
+
) external {
|
|
187
200
|
bytes32 sighash = preimage.hash256();
|
|
188
201
|
|
|
189
202
|
uint256 challengeKey = uint256(
|
|
190
203
|
keccak256(abi.encodePacked(walletPublicKey, sighash))
|
|
191
204
|
);
|
|
192
205
|
|
|
193
|
-
FraudChallenge storage challenge = self.
|
|
206
|
+
FraudChallenge storage challenge = self.fraudChallenges[challengeKey];
|
|
194
207
|
|
|
195
208
|
require(challenge.reportedAt > 0, "Fraud challenge does not exist");
|
|
196
209
|
require(
|
|
@@ -202,55 +215,23 @@ library Frauds {
|
|
|
202
215
|
// by type value `1`.
|
|
203
216
|
require(extractSighashType(preimage) == 1, "Wrong sighash type");
|
|
204
217
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
: extractUtxoKeyFromNonWitnessPreimage(preimage);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/// @notice Finalizes fraud challenge defeat by marking a pending fraud
|
|
212
|
-
/// challenge against the wallet as resolved and sending the ether
|
|
213
|
-
/// deposited by the challenger to the treasury.
|
|
214
|
-
/// In order to finalize the challenge defeat the same
|
|
215
|
-
/// `walletPublicKey` must be provided as was used in the fraud
|
|
216
|
-
/// challenge. Additionally a preimage must be provided which was
|
|
217
|
-
/// used to calculate the sighash during input signing.
|
|
218
|
-
/// @param walletPublicKey The public key of the wallet in the uncompressed
|
|
219
|
-
/// and unprefixed format (64 bytes)
|
|
220
|
-
/// @param preimage The preimage which produces sighash used to generate the
|
|
221
|
-
/// ECDSA signature that is the subject of the fraud claim. It is a
|
|
222
|
-
/// serialized subset of the transaction. The exact subset used as
|
|
223
|
-
/// the preimage depends on the transaction input the signature is
|
|
224
|
-
/// produced for. See BIP-143 for reference
|
|
225
|
-
/// @param treasury Treasury associated with the Bridge
|
|
226
|
-
/// @dev Requirements:
|
|
227
|
-
/// - `walletPublicKey` and `sighash` calculated as `hash256(preimage)`
|
|
228
|
-
/// must identify an open fraud challenge
|
|
229
|
-
/// - the preimage must be a valid preimage of a transaction generated
|
|
230
|
-
/// according to the protocol rules and already proved in the Bridge
|
|
231
|
-
/// - before a defeat attempt is made the transaction that spends the
|
|
232
|
-
/// given UTXO must be proven in the Bridge
|
|
233
|
-
function defeatChallenge(
|
|
234
|
-
Data storage self,
|
|
235
|
-
bytes calldata walletPublicKey,
|
|
236
|
-
bytes calldata preimage,
|
|
237
|
-
address treasury
|
|
238
|
-
) external {
|
|
239
|
-
bytes32 sighash = preimage.hash256();
|
|
218
|
+
uint256 utxoKey = witness
|
|
219
|
+
? extractUtxoKeyFromWitnessPreimage(preimage)
|
|
220
|
+
: extractUtxoKeyFromNonWitnessPreimage(preimage);
|
|
240
221
|
|
|
241
|
-
|
|
242
|
-
|
|
222
|
+
// Check that the UTXO key identifies a correctly spent UTXO.
|
|
223
|
+
require(
|
|
224
|
+
self.deposits[utxoKey].sweptAt > 0 || self.spentMainUTXOs[utxoKey],
|
|
225
|
+
"Spent UTXO not found among correctly spent UTXOs"
|
|
243
226
|
);
|
|
244
227
|
|
|
245
|
-
FraudChallenge storage challenge = self.challenges[challengeKey];
|
|
246
|
-
|
|
247
228
|
// Mark the challenge as resolved as it was successfully defeated
|
|
248
229
|
challenge.resolved = true;
|
|
249
230
|
|
|
250
231
|
// Send the ether deposited by the challenger to the treasury
|
|
251
232
|
/* solhint-disable avoid-low-level-calls */
|
|
252
233
|
// slither-disable-next-line low-level-calls
|
|
253
|
-
treasury.call{gas: 100000, value: challenge.depositAmount}("");
|
|
234
|
+
self.treasury.call{gas: 100000, value: challenge.depositAmount}("");
|
|
254
235
|
/* solhint-enable avoid-low-level-calls */
|
|
255
236
|
|
|
256
237
|
bytes memory compressedWalletPublicKey = EcdsaLib.compressPublicKey(
|
|
@@ -285,8 +266,8 @@ library Frauds {
|
|
|
285
266
|
/// challenge
|
|
286
267
|
/// - the amount of time indicated by `challengeDefeatTimeout` must pass
|
|
287
268
|
/// after the challenge was reported
|
|
288
|
-
function
|
|
289
|
-
|
|
269
|
+
function notifyFraudChallengeDefeatTimeout(
|
|
270
|
+
BridgeState.Storage storage self,
|
|
290
271
|
bytes calldata walletPublicKey,
|
|
291
272
|
bytes32 sighash
|
|
292
273
|
) external {
|
|
@@ -294,7 +275,7 @@ library Frauds {
|
|
|
294
275
|
keccak256(abi.encodePacked(walletPublicKey, sighash))
|
|
295
276
|
);
|
|
296
277
|
|
|
297
|
-
FraudChallenge storage challenge = self.
|
|
278
|
+
FraudChallenge storage challenge = self.fraudChallenges[challengeKey];
|
|
298
279
|
require(challenge.reportedAt > 0, "Fraud challenge does not exist");
|
|
299
280
|
require(
|
|
300
281
|
!challenge.resolved,
|
|
@@ -303,7 +284,7 @@ library Frauds {
|
|
|
303
284
|
require(
|
|
304
285
|
/* solhint-disable-next-line not-rely-on-time */
|
|
305
286
|
block.timestamp >=
|
|
306
|
-
challenge.reportedAt + self.
|
|
287
|
+
challenge.reportedAt + self.fraudChallengeDefeatTimeout,
|
|
307
288
|
"Fraud challenge defeat period did not time out yet"
|
|
308
289
|
);
|
|
309
290
|
|
|
@@ -329,60 +310,6 @@ library Frauds {
|
|
|
329
310
|
emit FraudChallengeDefeatTimedOut(walletPubKeyHash, sighash);
|
|
330
311
|
}
|
|
331
312
|
|
|
332
|
-
/// @notice Sets the new value for the `slashingAmount` parameter.
|
|
333
|
-
/// @param _newSlashingAmount the new value for `slashingAmount`
|
|
334
|
-
function setSlashingAmount(Data storage self, uint256 _newSlashingAmount)
|
|
335
|
-
external
|
|
336
|
-
{
|
|
337
|
-
self.slashingAmount = _newSlashingAmount;
|
|
338
|
-
emit FraudSlashingAmountUpdated(_newSlashingAmount);
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
/// @notice Sets the new value for the `notifierRewardMultiplier` parameter.
|
|
342
|
-
/// @param _newNotifierRewardMultiplier the new value for `notifierRewardMultiplier`
|
|
343
|
-
/// @dev The value of `notifierRewardMultiplier` must be <= 100.
|
|
344
|
-
function setNotifierRewardMultiplier(
|
|
345
|
-
Data storage self,
|
|
346
|
-
uint256 _newNotifierRewardMultiplier
|
|
347
|
-
) external {
|
|
348
|
-
require(
|
|
349
|
-
_newNotifierRewardMultiplier <= 100,
|
|
350
|
-
"Fraud notifier reward multiplier must be <= 100"
|
|
351
|
-
);
|
|
352
|
-
self.notifierRewardMultiplier = _newNotifierRewardMultiplier;
|
|
353
|
-
emit FraudNotifierRewardMultiplierUpdated(_newNotifierRewardMultiplier);
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
/// @notice Sets the new value for the `challengeDefeatTimeout` parameter.
|
|
357
|
-
/// @param _newChallengeDefeatTimeout the new value for `challengeDefeatTimeout`
|
|
358
|
-
/// @dev The value of `challengeDefeatTimeout` must be > 0.
|
|
359
|
-
function setChallengeDefeatTimeout(
|
|
360
|
-
Data storage self,
|
|
361
|
-
uint256 _newChallengeDefeatTimeout
|
|
362
|
-
) external {
|
|
363
|
-
require(
|
|
364
|
-
_newChallengeDefeatTimeout > 0,
|
|
365
|
-
"Fraud challenge defeat timeout must be > 0"
|
|
366
|
-
);
|
|
367
|
-
self.challengeDefeatTimeout = _newChallengeDefeatTimeout;
|
|
368
|
-
emit FraudChallengeDefeatTimeoutUpdated(_newChallengeDefeatTimeout);
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
/// @notice Sets the new value for the `challengeDepositAmount` parameter.
|
|
372
|
-
/// @param _newChallengeDepositAmount the new value for `challengeDepositAmount`
|
|
373
|
-
/// @dev The value of `challengeDepositAmount` must be > 0.
|
|
374
|
-
function setChallengeDepositAmount(
|
|
375
|
-
Data storage self,
|
|
376
|
-
uint256 _newChallengeDepositAmount
|
|
377
|
-
) external {
|
|
378
|
-
require(
|
|
379
|
-
_newChallengeDepositAmount > 0,
|
|
380
|
-
"Fraud challenge deposit amount must be > 0"
|
|
381
|
-
);
|
|
382
|
-
self.challengeDepositAmount = _newChallengeDepositAmount;
|
|
383
|
-
emit FraudChallengeDepositAmountUpdated(_newChallengeDepositAmount);
|
|
384
|
-
}
|
|
385
|
-
|
|
386
313
|
/// @notice Extracts the UTXO keys from the given preimage used during
|
|
387
314
|
/// signing of a witness input.
|
|
388
315
|
/// @param preimage The preimage which produces sighash used to generate the
|
|
@@ -363,7 +363,7 @@ library Sweep {
|
|
|
363
363
|
uint256 inputLength
|
|
364
364
|
) = parseTxInputAt(sweepTxInputVector, inputStartingIndex);
|
|
365
365
|
|
|
366
|
-
Deposit.
|
|
366
|
+
Deposit.DepositRequest storage deposit = self.deposits[
|
|
367
367
|
uint256(
|
|
368
368
|
keccak256(abi.encodePacked(outpointTxHash, outpointIndex))
|
|
369
369
|
)
|
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": "0x611aad61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100925760003560e01c8063545227871161006557806354522787146101195780639a08b74014610139578063c945968614610159578063e6d20d451461018b57600080fd5b80632123f1c41461009757806321e76ee8146100b95780633f31f49f146100d957806340399403146100f9575b600080fd5b8180156100a357600080fd5b506100b76100b23660046116bd565b6101ab565b005b8180156100c557600080fd5b506100b76100d4366004611721565b6101e6565b8180156100e557600080fd5b506100b76100f4366004611774565b6104f3565b81801561010557600080fd5b506100b76101143660046116bd565b6106e4565b81801561012557600080fd5b506100b76101343660046116bd565b61077e565b81801561014557600080fd5b506100b7610154366004611819565b61082c565b81801561016557600080fd5b506101796101743660046118ae565b610a9c565b60405190815260200160405180910390f35b81801561019757600080fd5b506100b76101a63660046116bd565b610c72565b8082556040518181527fdf25ccd778c4ac0298894525a8bd99ba018936d0c6ea0b6fc212507531c0adb7906020015b60405180910390a15050565b60008383836040516020016101fd93929190611931565b60408051601f198184030181529181528151602092830120600081815260048901909352912060028101549192509063ffffffff166102835760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520646f6573206e6f74206578697374000060448201526064015b60405180910390fd5b6002810154640100000000900460ff16156102f25760405162461bcd60e51b815260206004820152602960248201527f4672617564206368616c6c656e67652068617320616c7265616479206265656e604482015268081c995cdbdb1d995960ba1b606482015260840161027a565b6002808701549082015461030c919063ffffffff16611959565b4210156103815760405162461bcd60e51b815260206004820152603260248201527f4672617564206368616c6c656e67652064656665617420706572696f6420646960448201527f64206e6f742074696d65206f7574207965740000000000000000000000000000606482015260840161027a565b60028101805464ff0000000019166401000000001790558054600182015460405173ffffffffffffffffffffffffffffffffffffffff90921691620186a091906000818181858888f193505050503d80600081146103fb576040519150601f19603f3d011682016040523d82523d6000602084013e610400565b606091505b505050600061049061044c600088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610d0c9050565b604080516020601f8a0181900481028201810190925288815261048b91908a8a808385018382808284376000920191909152509293925050610d0c9050565b610d14565b9050600061049d82610dbf565b604080516bffffffffffffffffffffffff1983168152602081018890529192507f635230b60143449f10a365568e2bd95e3e8aaed03855631722941c2bad634b7791015b60405180910390a15050505050505050565b600061053484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610de692505050565b9050600086868360405160200161054d93929190611931565b60408051601f198184030181528282528051602091820120600081815260048d0190925291902060028101805464ff00000000191664010000000017905560018101549193509173ffffffffffffffffffffffffffffffffffffffff861691620186a091600060405180830381858888f193505050503d80600081146105ef576040519150601f19603f3d011682016040523d82523d6000602084013e6105f4565b606091505b505050600061067f61064060008b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610d0c9050565b604080516020601f8d018190048102820181019092528b815261048b91908d8d808385018382808284376000920191909152509293925050610d0c9050565b9050600061068c82610dbf565b604080516bffffffffffffffffffffffff1983168152602081018890529192507f6ff720470ffad78f316655e2c7fc77a76763c13de0e19ee52149916ba7e44d3b910160405180910390a15050505050505050505050565b600081116107475760405162461bcd60e51b815260206004820152602a60248201527f4672617564206368616c6c656e6765206465666561742074696d656f7574206d6044820152690757374206265203e20360b41b606482015260840161027a565b600282018190556040518181527f1e833ee8be2754de7dae1749a8438b691fda5b0695db2b2b8311b23270406d5a906020016101da565b60648111156107f55760405162461bcd60e51b815260206004820152602f60248201527f4672617564206e6f74696669657220726577617264206d756c7469706c69657260448201527f206d757374206265203c3d203130300000000000000000000000000000000000606482015260840161027a565b600182018190556040518181527feddb2abfc2e3aa166fbafa0dbaa077f0ec7663ddc8a535253bb35ed4ab70c877906020016101da565b85600301543410156108a65760405162461bcd60e51b815260206004820152602660248201527f54686520616d6f756e74206f6620455448206465706f7369746564206973207460448201527f6f6f206c6f770000000000000000000000000000000000000000000000000000606482015260840161027a565b6108fe85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508692506108f29150506060850160408601611971565b84356020860135610ea5565b61094a5760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726520766572696669636174696f6e206661696c7572650000604482015260640161027a565b600085858460405160200161096193929190611931565b60408051601f198184030181529181528151602092830120600081815260048b01909352912060028101549192509063ffffffff16156109e35760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520616c7265616479206578697374730000604482015260640161027a565b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000163317815534600182015560028101805464ffffffffff191663ffffffff42161790557ff4aa58d09ba5de017eac597806dfcfc2cad287816cb1eb7729a032c82680c94d8585610a5c6060870160408801611971565b604080516bffffffffffffffffffffffff19909416845260208085019390935260ff9091169083015285356060830152850135608082015260a0016104e1565b600080610ade85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610de692505050565b90506000878783604051602001610af793929190611931565b60408051601f198184030181529181528151602092830120600081815260048d01909352912060028101549192509063ffffffff16610b785760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520646f6573206e6f742065786973740000604482015260640161027a565b6002810154640100000000900460ff1615610be75760405162461bcd60e51b815260206004820152602960248201527f4672617564206368616c6c656e67652068617320616c7265616479206265656e604482015268081c995cdbdb1d995960ba1b606482015260840161027a565b610bf18787610fb5565b63ffffffff16600114610c465760405162461bcd60e51b815260206004820152601260248201527f57726f6e67207369676861736820747970650000000000000000000000000000604482015260640161027a565b84610c5a57610c558787611035565b610c64565b610c648787611279565b9a9950505050505050505050565b60008111610cd55760405162461bcd60e51b815260206004820152602a60248201527f4672617564206368616c6c656e6765206465706f73697420616d6f756e74206d6044820152690757374206265203e20360b41b606482015260840161027a565b600382018190556040518181527fac6cc6a5e862456c7f1a3827f078d9a355cb82eef2353c4167e872673b48570c906020016101da565b016020015190565b60606000610d23600284611994565b610d4e57507f0200000000000000000000000000000000000000000000000000000000000000610d71565b507f03000000000000000000000000000000000000000000000000000000000000005b6040517fff0000000000000000000000000000000000000000000000000000000000000082166020820152602181018590526041016040516020818303038152906040529150505b92915050565b60006020600083516020850160025afa50602060006020600060035afa5050600c51919050565b600060028083604051610df991906119b6565b602060405180830381855afa158015610e16573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610e3991906119f1565b604051602001610e4b91815260200190565b60408051601f1981840301815290829052610e65916119b6565b602060405180830381855afa158015610e82573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610db991906119f1565b60008551604014610f1e5760405162461bcd60e51b815260206004820152602760248201527f526571756972657320756e636f6d7072657373656420756e707265666978656460448201527f207075626b657900000000000000000000000000000000000000000000000000606482015260840161027a565b6000610f298761136f565b604080516000808252602082018084528a905260ff89169282019290925260608101879052608081018690529192509060019060a0016020604051602081039080840390855afa158015610f81573d6000803e3d6000fd5b5050604051601f19015173ffffffffffffffffffffffffffffffffffffffff90811693169290921498975050505050505050565b600080611005610fc6600485611a0a565b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b905060e081901c60d882901c63ff00ff001662ff00ff60e884901c1617601081811b91901c175b95945050505050565b600080600061107e600486868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061140a9050565b90925090506000611090836005611959565b905060005b8281101561126f5760006110e28389898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506115889050565b90506000611129848a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506115d39050565b915050801561124e576000611177858b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b905060006111e76111c1878d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061161a9050565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b9050818160405160200161122a92919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6040516020818303038152906040528051906020012060001c98505050505061126f565b6112588285611959565b93505050808061126790611a21565b915050611095565b5050505092915050565b6000806112c0604485858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b9050600061130b6111c1604487878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061161a9050565b9050818160405160200161134e92919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b60408051601f19818403018152919052805160209091012095945050505050565b600081516040146113e85760405162461bcd60e51b815260206004820152602d60248201527f5075626b6579206d7573742062652036342d62797465207261772c20756e636f60448201527f6d70726573736564206b65792e00000000000000000000000000000000000000606482015260840161027a565b50805160209091012090565b60006114038383016020015190565b9392505050565b60008060006114198585611631565b905060ff811661144b57600085858151811061143757611437611a3c565b016020015190935060f81c91506115819050565b83611457826001611a52565b60ff166114649190611959565b8551101561147b5760001960009250925050611581565b60008160ff16600214156114c0576114b56114a161149a876001611959565b88906113f4565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611577565b8160ff16600414156114ea576114dd6111c161149a876001611959565b63ffffffff169050611577565b8160ff16600814156115775761156a61150761149a876001611959565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b600080600061159785856115d3565b90925090506000198214156115b25760001992505050610db9565b806115be836025611959565b6115c89190611959565b61102c906004611959565b6000806115e1836025611959565b845110156115f6575060001990506000611581565b60008061160d86611608876024611959565b61140a565b9097909650945050505050565b600061140361162a836020611959565b84906113f4565b600082828151811061164557611645611a3c565b60209101015160f81c60ff141561165e57506008610db9565b82828151811061167057611670611a3c565b60209101015160f81c60fe141561168957506004610db9565b82828151811061169b5761169b611a3c565b60209101015160f81c60fd14156116b457506002610db9565b50600092915050565b600080604083850312156116d057600080fd5b50508035926020909101359150565b60008083601f8401126116f157600080fd5b50813567ffffffffffffffff81111561170957600080fd5b60208301915083602082850101111561158157600080fd5b6000806000806060858703121561173757600080fd5b84359350602085013567ffffffffffffffff81111561175557600080fd5b611761878288016116df565b9598909750949560400135949350505050565b6000806000806000806080878903121561178d57600080fd5b86359550602087013567ffffffffffffffff808211156117ac57600080fd5b6117b88a838b016116df565b909750955060408901359150808211156117d157600080fd5b506117de89828a016116df565b909450925050606087013573ffffffffffffffffffffffffffffffffffffffff8116811461180b57600080fd5b809150509295509295509295565b60008060008060008086880360e081121561183357600080fd5b87359650602088013567ffffffffffffffff81111561185157600080fd5b61185d8a828b016116df565b90975095505060408801356bffffffffffffffffffffffff198116811461188357600080fd5b93506060888101359350607f198201121561189d57600080fd5b506080870190509295509295509295565b600080600080600080608087890312156118c757600080fd5b86359550602087013567ffffffffffffffff808211156118e657600080fd5b6118f28a838b016116df565b9097509550604089013591508082111561190b57600080fd5b5061191889828a016116df565b9094509250506060870135801515811461180b57600080fd5b82848237909101908152602001919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561196c5761196c611943565b500190565b60006020828403121561198357600080fd5b813560ff8116811461140357600080fd5b6000826119b157634e487b7160e01b600052601260045260246000fd5b500690565b6000825160005b818110156119d757602081860181015185830152016119bd565b818111156119e6576000828501525b509190910192915050565b600060208284031215611a0357600080fd5b5051919050565b600082821015611a1c57611a1c611943565b500390565b6000600019821415611a3557611a35611943565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff84168060ff03821115611a6f57611a6f611943565b01939250505056fea26469706673582212202050293191319ae847f2416cdd295ee749317a94456cd29d741d976d949113fb64736f6c63430008090033",
|
|
135
|
-
"deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100925760003560e01c8063545227871161006557806354522787146101195780639a08b74014610139578063c945968614610159578063e6d20d451461018b57600080fd5b80632123f1c41461009757806321e76ee8146100b95780633f31f49f146100d957806340399403146100f9575b600080fd5b8180156100a357600080fd5b506100b76100b23660046116bd565b6101ab565b005b8180156100c557600080fd5b506100b76100d4366004611721565b6101e6565b8180156100e557600080fd5b506100b76100f4366004611774565b6104f3565b81801561010557600080fd5b506100b76101143660046116bd565b6106e4565b81801561012557600080fd5b506100b76101343660046116bd565b61077e565b81801561014557600080fd5b506100b7610154366004611819565b61082c565b81801561016557600080fd5b506101796101743660046118ae565b610a9c565b60405190815260200160405180910390f35b81801561019757600080fd5b506100b76101a63660046116bd565b610c72565b8082556040518181527fdf25ccd778c4ac0298894525a8bd99ba018936d0c6ea0b6fc212507531c0adb7906020015b60405180910390a15050565b60008383836040516020016101fd93929190611931565b60408051601f198184030181529181528151602092830120600081815260048901909352912060028101549192509063ffffffff166102835760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520646f6573206e6f74206578697374000060448201526064015b60405180910390fd5b6002810154640100000000900460ff16156102f25760405162461bcd60e51b815260206004820152602960248201527f4672617564206368616c6c656e67652068617320616c7265616479206265656e604482015268081c995cdbdb1d995960ba1b606482015260840161027a565b6002808701549082015461030c919063ffffffff16611959565b4210156103815760405162461bcd60e51b815260206004820152603260248201527f4672617564206368616c6c656e67652064656665617420706572696f6420646960448201527f64206e6f742074696d65206f7574207965740000000000000000000000000000606482015260840161027a565b60028101805464ff0000000019166401000000001790558054600182015460405173ffffffffffffffffffffffffffffffffffffffff90921691620186a091906000818181858888f193505050503d80600081146103fb576040519150601f19603f3d011682016040523d82523d6000602084013e610400565b606091505b505050600061049061044c600088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610d0c9050565b604080516020601f8a0181900481028201810190925288815261048b91908a8a808385018382808284376000920191909152509293925050610d0c9050565b610d14565b9050600061049d82610dbf565b604080516bffffffffffffffffffffffff1983168152602081018890529192507f635230b60143449f10a365568e2bd95e3e8aaed03855631722941c2bad634b7791015b60405180910390a15050505050505050565b600061053484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610de692505050565b9050600086868360405160200161054d93929190611931565b60408051601f198184030181528282528051602091820120600081815260048d0190925291902060028101805464ff00000000191664010000000017905560018101549193509173ffffffffffffffffffffffffffffffffffffffff861691620186a091600060405180830381858888f193505050503d80600081146105ef576040519150601f19603f3d011682016040523d82523d6000602084013e6105f4565b606091505b505050600061067f61064060008b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610d0c9050565b604080516020601f8d018190048102820181019092528b815261048b91908d8d808385018382808284376000920191909152509293925050610d0c9050565b9050600061068c82610dbf565b604080516bffffffffffffffffffffffff1983168152602081018890529192507f6ff720470ffad78f316655e2c7fc77a76763c13de0e19ee52149916ba7e44d3b910160405180910390a15050505050505050505050565b600081116107475760405162461bcd60e51b815260206004820152602a60248201527f4672617564206368616c6c656e6765206465666561742074696d656f7574206d6044820152690757374206265203e20360b41b606482015260840161027a565b600282018190556040518181527f1e833ee8be2754de7dae1749a8438b691fda5b0695db2b2b8311b23270406d5a906020016101da565b60648111156107f55760405162461bcd60e51b815260206004820152602f60248201527f4672617564206e6f74696669657220726577617264206d756c7469706c69657260448201527f206d757374206265203c3d203130300000000000000000000000000000000000606482015260840161027a565b600182018190556040518181527feddb2abfc2e3aa166fbafa0dbaa077f0ec7663ddc8a535253bb35ed4ab70c877906020016101da565b85600301543410156108a65760405162461bcd60e51b815260206004820152602660248201527f54686520616d6f756e74206f6620455448206465706f7369746564206973207460448201527f6f6f206c6f770000000000000000000000000000000000000000000000000000606482015260840161027a565b6108fe85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508692506108f29150506060850160408601611971565b84356020860135610ea5565b61094a5760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726520766572696669636174696f6e206661696c7572650000604482015260640161027a565b600085858460405160200161096193929190611931565b60408051601f198184030181529181528151602092830120600081815260048b01909352912060028101549192509063ffffffff16156109e35760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520616c7265616479206578697374730000604482015260640161027a565b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000163317815534600182015560028101805464ffffffffff191663ffffffff42161790557ff4aa58d09ba5de017eac597806dfcfc2cad287816cb1eb7729a032c82680c94d8585610a5c6060870160408801611971565b604080516bffffffffffffffffffffffff19909416845260208085019390935260ff9091169083015285356060830152850135608082015260a0016104e1565b600080610ade85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610de692505050565b90506000878783604051602001610af793929190611931565b60408051601f198184030181529181528151602092830120600081815260048d01909352912060028101549192509063ffffffff16610b785760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520646f6573206e6f742065786973740000604482015260640161027a565b6002810154640100000000900460ff1615610be75760405162461bcd60e51b815260206004820152602960248201527f4672617564206368616c6c656e67652068617320616c7265616479206265656e604482015268081c995cdbdb1d995960ba1b606482015260840161027a565b610bf18787610fb5565b63ffffffff16600114610c465760405162461bcd60e51b815260206004820152601260248201527f57726f6e67207369676861736820747970650000000000000000000000000000604482015260640161027a565b84610c5a57610c558787611035565b610c64565b610c648787611279565b9a9950505050505050505050565b60008111610cd55760405162461bcd60e51b815260206004820152602a60248201527f4672617564206368616c6c656e6765206465706f73697420616d6f756e74206d6044820152690757374206265203e20360b41b606482015260840161027a565b600382018190556040518181527fac6cc6a5e862456c7f1a3827f078d9a355cb82eef2353c4167e872673b48570c906020016101da565b016020015190565b60606000610d23600284611994565b610d4e57507f0200000000000000000000000000000000000000000000000000000000000000610d71565b507f03000000000000000000000000000000000000000000000000000000000000005b6040517fff0000000000000000000000000000000000000000000000000000000000000082166020820152602181018590526041016040516020818303038152906040529150505b92915050565b60006020600083516020850160025afa50602060006020600060035afa5050600c51919050565b600060028083604051610df991906119b6565b602060405180830381855afa158015610e16573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610e3991906119f1565b604051602001610e4b91815260200190565b60408051601f1981840301815290829052610e65916119b6565b602060405180830381855afa158015610e82573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610db991906119f1565b60008551604014610f1e5760405162461bcd60e51b815260206004820152602760248201527f526571756972657320756e636f6d7072657373656420756e707265666978656460448201527f207075626b657900000000000000000000000000000000000000000000000000606482015260840161027a565b6000610f298761136f565b604080516000808252602082018084528a905260ff89169282019290925260608101879052608081018690529192509060019060a0016020604051602081039080840390855afa158015610f81573d6000803e3d6000fd5b5050604051601f19015173ffffffffffffffffffffffffffffffffffffffff90811693169290921498975050505050505050565b600080611005610fc6600485611a0a565b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b905060e081901c60d882901c63ff00ff001662ff00ff60e884901c1617601081811b91901c175b95945050505050565b600080600061107e600486868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061140a9050565b90925090506000611090836005611959565b905060005b8281101561126f5760006110e28389898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506115889050565b90506000611129848a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506115d39050565b915050801561124e576000611177858b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b905060006111e76111c1878d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061161a9050565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b9050818160405160200161122a92919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6040516020818303038152906040528051906020012060001c98505050505061126f565b6112588285611959565b93505050808061126790611a21565b915050611095565b5050505092915050565b6000806112c0604485858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b9050600061130b6111c1604487878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061161a9050565b9050818160405160200161134e92919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b60408051601f19818403018152919052805160209091012095945050505050565b600081516040146113e85760405162461bcd60e51b815260206004820152602d60248201527f5075626b6579206d7573742062652036342d62797465207261772c20756e636f60448201527f6d70726573736564206b65792e00000000000000000000000000000000000000606482015260840161027a565b50805160209091012090565b60006114038383016020015190565b9392505050565b60008060006114198585611631565b905060ff811661144b57600085858151811061143757611437611a3c565b016020015190935060f81c91506115819050565b83611457826001611a52565b60ff166114649190611959565b8551101561147b5760001960009250925050611581565b60008160ff16600214156114c0576114b56114a161149a876001611959565b88906113f4565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611577565b8160ff16600414156114ea576114dd6111c161149a876001611959565b63ffffffff169050611577565b8160ff16600814156115775761156a61150761149a876001611959565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b600080600061159785856115d3565b90925090506000198214156115b25760001992505050610db9565b806115be836025611959565b6115c89190611959565b61102c906004611959565b6000806115e1836025611959565b845110156115f6575060001990506000611581565b60008061160d86611608876024611959565b61140a565b9097909650945050505050565b600061140361162a836020611959565b84906113f4565b600082828151811061164557611645611a3c565b60209101015160f81c60ff141561165e57506008610db9565b82828151811061167057611670611a3c565b60209101015160f81c60fe141561168957506004610db9565b82828151811061169b5761169b611a3c565b60209101015160f81c60fd14156116b457506002610db9565b50600092915050565b600080604083850312156116d057600080fd5b50508035926020909101359150565b60008083601f8401126116f157600080fd5b50813567ffffffffffffffff81111561170957600080fd5b60208301915083602082850101111561158157600080fd5b6000806000806060858703121561173757600080fd5b84359350602085013567ffffffffffffffff81111561175557600080fd5b611761878288016116df565b9598909750949560400135949350505050565b6000806000806000806080878903121561178d57600080fd5b86359550602087013567ffffffffffffffff808211156117ac57600080fd5b6117b88a838b016116df565b909750955060408901359150808211156117d157600080fd5b506117de89828a016116df565b909450925050606087013573ffffffffffffffffffffffffffffffffffffffff8116811461180b57600080fd5b809150509295509295509295565b60008060008060008086880360e081121561183357600080fd5b87359650602088013567ffffffffffffffff81111561185157600080fd5b61185d8a828b016116df565b90975095505060408801356bffffffffffffffffffffffff198116811461188357600080fd5b93506060888101359350607f198201121561189d57600080fd5b506080870190509295509295509295565b600080600080600080608087890312156118c757600080fd5b86359550602087013567ffffffffffffffff808211156118e657600080fd5b6118f28a838b016116df565b9097509550604089013591508082111561190b57600080fd5b5061191889828a016116df565b9094509250506060870135801515811461180b57600080fd5b82848237909101908152602001919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561196c5761196c611943565b500190565b60006020828403121561198357600080fd5b813560ff8116811461140357600080fd5b6000826119b157634e487b7160e01b600052601260045260246000fd5b500690565b6000825160005b818110156119d757602081860181015185830152016119bd565b818111156119e6576000828501525b509190910192915050565b600060208284031215611a0357600080fd5b5051919050565b600082821015611a1c57611a1c611943565b500390565b6000600019821415611a3557611a35611943565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff84168060ff03821115611a6f57611a6f611943565b01939250505056fea26469706673582212202050293191319ae847f2416cdd295ee749317a94456cd29d741d976d949113fb64736f6c63430008090033",
|
|
136
|
-
"linkReferences": {},
|
|
137
|
-
"deployedLinkReferences": {}
|
|
138
|
-
}
|