@keep-network/tbtc-v2 0.1.1-dev.84 → 0.1.1-dev.87
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/Bank.json +3 -3
- package/artifacts/Bridge.json +5 -5
- package/artifacts/Deposit.json +2 -2
- package/artifacts/DepositSweep.json +2 -2
- package/artifacts/EcdsaDkgValidator.json +1 -1
- package/artifacts/EcdsaInactivity.json +1 -1
- package/artifacts/EcdsaSortitionPool.json +2 -2
- package/artifacts/Fraud.json +2 -2
- package/artifacts/KeepRegistry.json +1 -1
- package/artifacts/KeepStake.json +2 -2
- package/artifacts/KeepToken.json +2 -2
- package/artifacts/KeepTokenStaking.json +1 -1
- package/artifacts/MovingFunds.json +2 -2
- package/artifacts/NuCypherStakingEscrow.json +1 -1
- package/artifacts/NuCypherToken.json +2 -2
- package/artifacts/RandomBeaconStub.json +1 -1
- package/artifacts/Redemption.json +2 -2
- package/artifacts/ReimbursementPool.json +2 -2
- package/artifacts/Relay.json +2 -2
- package/artifacts/T.json +2 -2
- package/artifacts/TBTC.json +3 -3
- package/artifacts/TBTCToken.json +3 -3
- package/artifacts/TBTCVault.json +212 -13
- package/artifacts/TokenStaking.json +1 -1
- package/artifacts/TokenholderGovernor.json +9 -9
- package/artifacts/TokenholderTimelock.json +8 -8
- package/artifacts/VendingMachine.json +3 -3
- package/artifacts/VendingMachineKeep.json +1 -1
- package/artifacts/VendingMachineNuCypher.json +1 -1
- package/artifacts/WalletRegistry.json +5 -5
- package/artifacts/WalletRegistryGovernance.json +2 -2
- package/artifacts/Wallets.json +2 -2
- package/artifacts/solcInputs/{0f79d51f4c2e0d6bf7d919933c677b91.json → b91d5d2f63dffec051f14a2922c0abf4.json} +7 -7
- package/build/contracts/GovernanceUtils.sol/GovernanceUtils.dbg.json +1 -1
- package/build/contracts/bank/Bank.sol/Bank.dbg.json +1 -1
- package/build/contracts/bank/IReceiveBalanceApproval.sol/IReceiveBalanceApproval.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/BridgeState.sol/BridgeState.dbg.json +1 -1
- package/build/contracts/bridge/Deposit.sol/Deposit.dbg.json +1 -1
- package/build/contracts/bridge/DepositSweep.sol/DepositSweep.dbg.json +1 -1
- package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.dbg.json +1 -1
- package/build/contracts/bridge/Fraud.sol/Fraud.dbg.json +1 -1
- package/build/contracts/bridge/Heartbeat.sol/Heartbeat.dbg.json +1 -1
- 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/Redemption.sol/OutboundTx.dbg.json +1 -1
- package/build/contracts/bridge/Redemption.sol/Redemption.dbg.json +1 -1
- 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/DonationVault.sol/DonationVault.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/build/contracts/vault/TBTCVault.sol/TBTCVault.json +144 -2
- package/contracts/vault/TBTCVault.sol +118 -29
- package/deploy/11_initialize_wallet_owner.ts +18 -0
- package/export.json +142 -0
- package/package.json +1 -1
|
@@ -76,6 +76,51 @@
|
|
|
76
76
|
"name": "Unminted",
|
|
77
77
|
"type": "event"
|
|
78
78
|
},
|
|
79
|
+
{
|
|
80
|
+
"anonymous": false,
|
|
81
|
+
"inputs": [
|
|
82
|
+
{
|
|
83
|
+
"indexed": false,
|
|
84
|
+
"internalType": "address",
|
|
85
|
+
"name": "newVault",
|
|
86
|
+
"type": "address"
|
|
87
|
+
}
|
|
88
|
+
],
|
|
89
|
+
"name": "UpgradeFinalized",
|
|
90
|
+
"type": "event"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"anonymous": false,
|
|
94
|
+
"inputs": [
|
|
95
|
+
{
|
|
96
|
+
"indexed": false,
|
|
97
|
+
"internalType": "address",
|
|
98
|
+
"name": "newVault",
|
|
99
|
+
"type": "address"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"indexed": false,
|
|
103
|
+
"internalType": "uint256",
|
|
104
|
+
"name": "timestamp",
|
|
105
|
+
"type": "uint256"
|
|
106
|
+
}
|
|
107
|
+
],
|
|
108
|
+
"name": "UpgradeInitiated",
|
|
109
|
+
"type": "event"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"inputs": [],
|
|
113
|
+
"name": "UPGRADE_GOVERNANCE_DELAY",
|
|
114
|
+
"outputs": [
|
|
115
|
+
{
|
|
116
|
+
"internalType": "uint256",
|
|
117
|
+
"name": "",
|
|
118
|
+
"type": "uint256"
|
|
119
|
+
}
|
|
120
|
+
],
|
|
121
|
+
"stateMutability": "view",
|
|
122
|
+
"type": "function"
|
|
123
|
+
},
|
|
79
124
|
{
|
|
80
125
|
"inputs": [],
|
|
81
126
|
"name": "bank",
|
|
@@ -89,6 +134,13 @@
|
|
|
89
134
|
"stateMutability": "view",
|
|
90
135
|
"type": "function"
|
|
91
136
|
},
|
|
137
|
+
{
|
|
138
|
+
"inputs": [],
|
|
139
|
+
"name": "finalizeUpgrade",
|
|
140
|
+
"outputs": [],
|
|
141
|
+
"stateMutability": "nonpayable",
|
|
142
|
+
"type": "function"
|
|
143
|
+
},
|
|
92
144
|
{
|
|
93
145
|
"inputs": [],
|
|
94
146
|
"name": "governance",
|
|
@@ -102,6 +154,19 @@
|
|
|
102
154
|
"stateMutability": "view",
|
|
103
155
|
"type": "function"
|
|
104
156
|
},
|
|
157
|
+
{
|
|
158
|
+
"inputs": [
|
|
159
|
+
{
|
|
160
|
+
"internalType": "address",
|
|
161
|
+
"name": "_newVault",
|
|
162
|
+
"type": "address"
|
|
163
|
+
}
|
|
164
|
+
],
|
|
165
|
+
"name": "initiateUpgrade",
|
|
166
|
+
"outputs": [],
|
|
167
|
+
"stateMutability": "nonpayable",
|
|
168
|
+
"type": "function"
|
|
169
|
+
},
|
|
105
170
|
{
|
|
106
171
|
"inputs": [
|
|
107
172
|
{
|
|
@@ -115,6 +180,19 @@
|
|
|
115
180
|
"stateMutability": "nonpayable",
|
|
116
181
|
"type": "function"
|
|
117
182
|
},
|
|
183
|
+
{
|
|
184
|
+
"inputs": [],
|
|
185
|
+
"name": "newVault",
|
|
186
|
+
"outputs": [
|
|
187
|
+
{
|
|
188
|
+
"internalType": "address",
|
|
189
|
+
"name": "",
|
|
190
|
+
"type": "address"
|
|
191
|
+
}
|
|
192
|
+
],
|
|
193
|
+
"stateMutability": "view",
|
|
194
|
+
"type": "function"
|
|
195
|
+
},
|
|
118
196
|
{
|
|
119
197
|
"inputs": [
|
|
120
198
|
{
|
|
@@ -207,6 +285,29 @@
|
|
|
207
285
|
"stateMutability": "nonpayable",
|
|
208
286
|
"type": "function"
|
|
209
287
|
},
|
|
288
|
+
{
|
|
289
|
+
"inputs": [
|
|
290
|
+
{
|
|
291
|
+
"internalType": "contract IERC20",
|
|
292
|
+
"name": "token",
|
|
293
|
+
"type": "address"
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
"internalType": "address",
|
|
297
|
+
"name": "recipient",
|
|
298
|
+
"type": "address"
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"internalType": "uint256",
|
|
302
|
+
"name": "amount",
|
|
303
|
+
"type": "uint256"
|
|
304
|
+
}
|
|
305
|
+
],
|
|
306
|
+
"name": "recoverERC20FromToken",
|
|
307
|
+
"outputs": [],
|
|
308
|
+
"stateMutability": "nonpayable",
|
|
309
|
+
"type": "function"
|
|
310
|
+
},
|
|
210
311
|
{
|
|
211
312
|
"inputs": [
|
|
212
313
|
{
|
|
@@ -235,6 +336,34 @@
|
|
|
235
336
|
"stateMutability": "nonpayable",
|
|
236
337
|
"type": "function"
|
|
237
338
|
},
|
|
339
|
+
{
|
|
340
|
+
"inputs": [
|
|
341
|
+
{
|
|
342
|
+
"internalType": "contract IERC721",
|
|
343
|
+
"name": "token",
|
|
344
|
+
"type": "address"
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
"internalType": "address",
|
|
348
|
+
"name": "recipient",
|
|
349
|
+
"type": "address"
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
"internalType": "uint256",
|
|
353
|
+
"name": "tokenId",
|
|
354
|
+
"type": "uint256"
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
"internalType": "bytes",
|
|
358
|
+
"name": "data",
|
|
359
|
+
"type": "bytes"
|
|
360
|
+
}
|
|
361
|
+
],
|
|
362
|
+
"name": "recoverERC721FromToken",
|
|
363
|
+
"outputs": [],
|
|
364
|
+
"stateMutability": "nonpayable",
|
|
365
|
+
"type": "function"
|
|
366
|
+
},
|
|
238
367
|
{
|
|
239
368
|
"inputs": [],
|
|
240
369
|
"name": "tbtcToken",
|
|
@@ -291,10 +420,23 @@
|
|
|
291
420
|
"outputs": [],
|
|
292
421
|
"stateMutability": "nonpayable",
|
|
293
422
|
"type": "function"
|
|
423
|
+
},
|
|
424
|
+
{
|
|
425
|
+
"inputs": [],
|
|
426
|
+
"name": "upgradeInitiatedTimestamp",
|
|
427
|
+
"outputs": [
|
|
428
|
+
{
|
|
429
|
+
"internalType": "uint256",
|
|
430
|
+
"name": "",
|
|
431
|
+
"type": "uint256"
|
|
432
|
+
}
|
|
433
|
+
],
|
|
434
|
+
"stateMutability": "view",
|
|
435
|
+
"type": "function"
|
|
294
436
|
}
|
|
295
437
|
],
|
|
296
|
-
"bytecode": "0x60806040523480156200001157600080fd5b506040516200133c3803806200133c8339810160408190526200003491620001b4565b6001600160a01b038216620000905760405162461bcd60e51b815260206004820181905260248201527f42616e6b2063616e206e6f7420626520746865207a65726f206164647265737360448201526064015b60405180910390fd5b6001600160a01b038116620000f75760405162461bcd60e51b815260206004820152602660248201527f5442544320746f6b656e2063616e206e6f7420626520746865207a65726f206160448201526564647265737360d01b606482015260840162000087565b603280546001600160a01b038085166001600160a01b031992831617909255603380549284169290911691909117905562000132336200013a565b5050620001f3565b600080546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b6001600160a01b0381168114620001b157600080fd5b50565b60008060408385031215620001c857600080fd5b8251620001d5816200019b565b6020840151909250620001e8816200019b565b809150509250929050565b61113980620002036000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806376cdb03b11610081578063d38bfff41161005b578063d38bfff4146101a2578063e5d3d714146101b5578063fc4e51f6146101c857600080fd5b806376cdb03b146101695780638f4ffcb11461017c578063a0712d681461018f57600080fd5b806353dce4df116100b257806353dce4df146101145780635aa6e6751461012757806364e779b11461015657600080fd5b80631171bda9146100d9578063461c6373146100ee578063475d057014610101575b600080fd5b6100ec6100e7366004610d17565b6101db565b005b6100ec6100fc366004610da4565b6102c6565b6100ec61010f366004610e52565b6103d9565b6100ec610122366004610ea2565b610586565b60005461013a906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100ec610164366004610eee565b610597565b60325461013a906001600160a01b031681565b6100ec61018a366004610f07565b6105a4565b6100ec61019d366004610eee565b610679565b6100ec6101b0366004610f7a565b6107cd565b60335461013a906001600160a01b031681565b6100ec6101d6366004610f9e565b6108ac565b6000546001600160a01b0316331461023a5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064015b60405180910390fd5b6033546040517f1171bda90000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015284811660248301526044820184905290911690631171bda990606401600060405180830381600087803b1580156102a957600080fd5b505af11580156102bd573d6000803e3d6000fd5b50505050505050565b6032546001600160a01b031633146103205760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b000000000000000000006044820152606401610231565b8261036d5760405162461bcd60e51b815260206004820152601760248201527f4e6f206465706f7369746f7273207370656369666965640000000000000000006044820152606401610231565b60005b838110156103d2576103c085858381811061038d5761038d610ff4565b90506020020160208101906103a29190610f7a565b8484848181106103b4576103b4610ff4565b90506020020135610990565b806103ca8161100a565b915050610370565b5050505050565b6032546001600160a01b031633146104335760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b000000000000000000006044820152606401610231565b6032546040516370a0823160e01b81526001600160a01b038681166004830152859216906370a082319060240160206040518083038186803b15801561047857600080fd5b505afa15801561048c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b09190611033565b10156105095760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b6064820152608401610231565b6105138484610990565b603254604051631f1b6d2760e21b81526001600160a01b0386811660048301523060248301526044820186905290911690637c6db49c906064015b600060405180830381600087803b15801561056857600080fd5b505af115801561057c573d6000803e3d6000fd5b5050505050505050565b61059233848484610a25565b505050565b6105a13382610b8e565b50565b6033546001600160a01b038481169116146106015760405162461bcd60e51b815260206004820152601160248201527f546f6b656e206973206e6f7420544254430000000000000000000000000000006044820152606401610231565b336001600160a01b038416146106595760405162461bcd60e51b815260206004820152601860248201527f4f6e6c7920544254432063616c6c657220616c6c6f77656400000000000000006044820152606401610231565b8061066d576106688585610b8e565b6103d2565b6103d285858484610a25565b6032546040516370a0823160e01b815233600482018190529183916001600160a01b03909116906370a082319060240160206040518083038186803b1580156106c157600080fd5b505afa1580156106d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f99190611033565b10156107525760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b6064820152608401610231565b61075c8183610990565b603254604051631f1b6d2760e21b81526001600160a01b0383811660048301523060248301526044820185905290911690637c6db49c906064015b600060405180830381600087803b1580156107b157600080fd5b505af11580156107c5573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146108275760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610231565b6001600160a01b0381166108a35760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610231565b6105a181610c89565b6000546001600160a01b031633146109065760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610231565b6033546040517ffc4e51f60000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063fc4e51f6906109579088908890889088908890600401611075565b600060405180830381600087803b15801561097157600080fd5b505af1158015610985573d6000803e3d6000fd5b505050505050505050565b816001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe826040516109cb91815260200190565b60405180910390a26033546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260248201849052909116906340c10f1990604401610797565b836001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b884604051610a6091815260200190565b60405180910390a260335460405163079cc67960e41b81526001600160a01b03868116600483015260248201869052909116906379cc679090604401600060405180830381600087803b158015610ab657600080fd5b505af1158015610aca573d6000803e3d6000fd5b5050603254604080517fe78cea9200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169350634a38757e9250839163e78cea9291600480820192602092909190829003018186803b158015610b3457600080fd5b505afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c91906110b3565b8585856040518563ffffffff1660e01b815260040161054e94939291906110d0565b816001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b882604051610bc991815260200190565b60405180910390a260335460405163079cc67960e41b81526001600160a01b03848116600483015260248201849052909116906379cc679090604401600060405180830381600087803b158015610c1f57600080fd5b505af1158015610c33573d6000803e3d6000fd5b50506032546040517f56a6d9ef0000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905290911692506356a6d9ef9150604401610797565b600080546001600160a01b038381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b6001600160a01b03811681146105a157600080fd5b600080600060608486031215610d2c57600080fd5b8335610d3781610d02565b92506020840135610d4781610d02565b929592945050506040919091013590565b60008083601f840112610d6a57600080fd5b50813567ffffffffffffffff811115610d8257600080fd5b6020830191508360208260051b8501011115610d9d57600080fd5b9250929050565b60008060008060408587031215610dba57600080fd5b843567ffffffffffffffff80821115610dd257600080fd5b610dde88838901610d58565b90965094506020870135915080821115610df757600080fd5b50610e0487828801610d58565b95989497509550505050565b60008083601f840112610e2257600080fd5b50813567ffffffffffffffff811115610e3a57600080fd5b602083019150836020828501011115610d9d57600080fd5b60008060008060608587031215610e6857600080fd5b8435610e7381610d02565b935060208501359250604085013567ffffffffffffffff811115610e9657600080fd5b610e0487828801610e10565b600080600060408486031215610eb757600080fd5b83359250602084013567ffffffffffffffff811115610ed557600080fd5b610ee186828701610e10565b9497909650939450505050565b600060208284031215610f0057600080fd5b5035919050565b600080600080600060808688031215610f1f57600080fd5b8535610f2a81610d02565b9450602086013593506040860135610f4181610d02565b9250606086013567ffffffffffffffff811115610f5d57600080fd5b610f6988828901610e10565b969995985093965092949392505050565b600060208284031215610f8c57600080fd5b8135610f9781610d02565b9392505050565b600080600080600060808688031215610fb657600080fd5b8535610fc181610d02565b94506020860135610fd181610d02565b935060408601359250606086013567ffffffffffffffff811115610f5d57600080fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141561102c57634e487b7160e01b600052601160045260246000fd5b5060010190565b60006020828403121561104557600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160a01b038088168352808716602084015250846040830152608060608301526110a860808301848661104c565b979650505050505050565b6000602082840312156110c557600080fd5b8151610f9781610d02565b6001600160a01b03851681528360208201526060604082015260006110f960608301848661104c565b969550505050505056fea2646970667358221220d2cfb91930afdd275bc94b23bee0885041e8e6f33971c1a8d00e04c1b5b1ccf064736f6c63430008090033",
|
|
297
|
-
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100d45760003560e01c806376cdb03b11610081578063d38bfff41161005b578063d38bfff4146101a2578063e5d3d714146101b5578063fc4e51f6146101c857600080fd5b806376cdb03b146101695780638f4ffcb11461017c578063a0712d681461018f57600080fd5b806353dce4df116100b257806353dce4df146101145780635aa6e6751461012757806364e779b11461015657600080fd5b80631171bda9146100d9578063461c6373146100ee578063475d057014610101575b600080fd5b6100ec6100e7366004610d17565b6101db565b005b6100ec6100fc366004610da4565b6102c6565b6100ec61010f366004610e52565b6103d9565b6100ec610122366004610ea2565b610586565b60005461013a906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100ec610164366004610eee565b610597565b60325461013a906001600160a01b031681565b6100ec61018a366004610f07565b6105a4565b6100ec61019d366004610eee565b610679565b6100ec6101b0366004610f7a565b6107cd565b60335461013a906001600160a01b031681565b6100ec6101d6366004610f9e565b6108ac565b6000546001600160a01b0316331461023a5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064015b60405180910390fd5b6033546040517f1171bda90000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015284811660248301526044820184905290911690631171bda990606401600060405180830381600087803b1580156102a957600080fd5b505af11580156102bd573d6000803e3d6000fd5b50505050505050565b6032546001600160a01b031633146103205760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b000000000000000000006044820152606401610231565b8261036d5760405162461bcd60e51b815260206004820152601760248201527f4e6f206465706f7369746f7273207370656369666965640000000000000000006044820152606401610231565b60005b838110156103d2576103c085858381811061038d5761038d610ff4565b90506020020160208101906103a29190610f7a565b8484848181106103b4576103b4610ff4565b90506020020135610990565b806103ca8161100a565b915050610370565b5050505050565b6032546001600160a01b031633146104335760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b000000000000000000006044820152606401610231565b6032546040516370a0823160e01b81526001600160a01b038681166004830152859216906370a082319060240160206040518083038186803b15801561047857600080fd5b505afa15801561048c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b09190611033565b10156105095760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b6064820152608401610231565b6105138484610990565b603254604051631f1b6d2760e21b81526001600160a01b0386811660048301523060248301526044820186905290911690637c6db49c906064015b600060405180830381600087803b15801561056857600080fd5b505af115801561057c573d6000803e3d6000fd5b5050505050505050565b61059233848484610a25565b505050565b6105a13382610b8e565b50565b6033546001600160a01b038481169116146106015760405162461bcd60e51b815260206004820152601160248201527f546f6b656e206973206e6f7420544254430000000000000000000000000000006044820152606401610231565b336001600160a01b038416146106595760405162461bcd60e51b815260206004820152601860248201527f4f6e6c7920544254432063616c6c657220616c6c6f77656400000000000000006044820152606401610231565b8061066d576106688585610b8e565b6103d2565b6103d285858484610a25565b6032546040516370a0823160e01b815233600482018190529183916001600160a01b03909116906370a082319060240160206040518083038186803b1580156106c157600080fd5b505afa1580156106d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f99190611033565b10156107525760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b6064820152608401610231565b61075c8183610990565b603254604051631f1b6d2760e21b81526001600160a01b0383811660048301523060248301526044820185905290911690637c6db49c906064015b600060405180830381600087803b1580156107b157600080fd5b505af11580156107c5573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146108275760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610231565b6001600160a01b0381166108a35760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610231565b6105a181610c89565b6000546001600160a01b031633146109065760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610231565b6033546040517ffc4e51f60000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063fc4e51f6906109579088908890889088908890600401611075565b600060405180830381600087803b15801561097157600080fd5b505af1158015610985573d6000803e3d6000fd5b505050505050505050565b816001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe826040516109cb91815260200190565b60405180910390a26033546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260248201849052909116906340c10f1990604401610797565b836001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b884604051610a6091815260200190565b60405180910390a260335460405163079cc67960e41b81526001600160a01b03868116600483015260248201869052909116906379cc679090604401600060405180830381600087803b158015610ab657600080fd5b505af1158015610aca573d6000803e3d6000fd5b5050603254604080517fe78cea9200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169350634a38757e9250839163e78cea9291600480820192602092909190829003018186803b158015610b3457600080fd5b505afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c91906110b3565b8585856040518563ffffffff1660e01b815260040161054e94939291906110d0565b816001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b882604051610bc991815260200190565b60405180910390a260335460405163079cc67960e41b81526001600160a01b03848116600483015260248201849052909116906379cc679090604401600060405180830381600087803b158015610c1f57600080fd5b505af1158015610c33573d6000803e3d6000fd5b50506032546040517f56a6d9ef0000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905290911692506356a6d9ef9150604401610797565b600080546001600160a01b038381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b6001600160a01b03811681146105a157600080fd5b600080600060608486031215610d2c57600080fd5b8335610d3781610d02565b92506020840135610d4781610d02565b929592945050506040919091013590565b60008083601f840112610d6a57600080fd5b50813567ffffffffffffffff811115610d8257600080fd5b6020830191508360208260051b8501011115610d9d57600080fd5b9250929050565b60008060008060408587031215610dba57600080fd5b843567ffffffffffffffff80821115610dd257600080fd5b610dde88838901610d58565b90965094506020870135915080821115610df757600080fd5b50610e0487828801610d58565b95989497509550505050565b60008083601f840112610e2257600080fd5b50813567ffffffffffffffff811115610e3a57600080fd5b602083019150836020828501011115610d9d57600080fd5b60008060008060608587031215610e6857600080fd5b8435610e7381610d02565b935060208501359250604085013567ffffffffffffffff811115610e9657600080fd5b610e0487828801610e10565b600080600060408486031215610eb757600080fd5b83359250602084013567ffffffffffffffff811115610ed557600080fd5b610ee186828701610e10565b9497909650939450505050565b600060208284031215610f0057600080fd5b5035919050565b600080600080600060808688031215610f1f57600080fd5b8535610f2a81610d02565b9450602086013593506040860135610f4181610d02565b9250606086013567ffffffffffffffff811115610f5d57600080fd5b610f6988828901610e10565b969995985093965092949392505050565b600060208284031215610f8c57600080fd5b8135610f9781610d02565b9392505050565b600080600080600060808688031215610fb657600080fd5b8535610fc181610d02565b94506020860135610fd181610d02565b935060408601359250606086013567ffffffffffffffff811115610f5d57600080fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141561102c57634e487b7160e01b600052601160045260246000fd5b5060010190565b60006020828403121561104557600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160a01b038088168352808716602084015250846040830152608060608301526110a860808301848661104c565b979650505050505050565b6000602082840312156110c557600080fd5b8151610f9781610d02565b6001600160a01b03851681528360208201526060604082015260006110f960608301848661104c565b969550505050505056fea2646970667358221220d2cfb91930afdd275bc94b23bee0885041e8e6f33971c1a8d00e04c1b5b1ccf064736f6c63430008090033",
|
|
438
|
+
"bytecode": "0x60806040523480156200001157600080fd5b5060405162001bfe38038062001bfe8339810160408190526200003491620001b4565b6001600160a01b038216620000905760405162461bcd60e51b815260206004820181905260248201527f42616e6b2063616e206e6f7420626520746865207a65726f206164647265737360448201526064015b60405180910390fd5b6001600160a01b038116620000f75760405162461bcd60e51b815260206004820152602660248201527f5442544320746f6b656e2063616e206e6f7420626520746865207a65726f206160448201526564647265737360d01b606482015260840162000087565b603280546001600160a01b038085166001600160a01b031992831617909255603380549284169290911691909117905562000132336200013a565b5050620001f3565b600080546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b6001600160a01b0381168114620001b157600080fd5b50565b60008060408385031215620001c857600080fd5b8251620001d5816200019b565b6020840151909250620001e8816200019b565b809150509250929050565b6119fb80620002036000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806376cdb03b116100cd578063a0712d6811610081578063d38bfff411610066578063d38bfff414610295578063e5d3d714146102a8578063fc4e51f6146102bb57600080fd5b8063a0712d6814610278578063cfce08161461028b57600080fd5b80638f4ffcb1116100b25780638f4ffcb11461024657806395131526146102595780639a508c8e1461027057600080fd5b806376cdb03b1461022057806388aaf0c81461023357600080fd5b8063475d05701161012457806353dce4df1161010957806353dce4df146101ca5780635aa6e675146101dd57806364e779b11461020d57600080fd5b8063475d0570146101a4578063479aa927146101b757600080fd5b80631171bda9146101565780632e73e3981461016b578063317dfa761461017e578063461c637314610191575b600080fd5b61016961016436600461152b565b6102ce565b005b6101696101793660046115b5565b610346565b61016961018c36600461152b565b61042a565b61016961019f36600461166d565b610510565b6101696101b23660046116d9565b610623565b6101696101c5366004611729565b6107d0565b6101696101d8366004611746565b6108f4565b6000546101f0906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61016961021b366004611792565b610900565b6032546101f0906001600160a01b031681565b6034546101f0906001600160a01b031681565b6101696102543660046117ab565b61090d565b61026260355481565b604051908152602001610204565b6101696109e2565b610169610286366004611792565b610b29565b6102626201518081565b6101696102a3366004611729565b610c7d565b6033546101f0906001600160a01b031681565b6101696102c93660046115b5565b610d5c565b6000546001600160a01b0316331461032d5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064015b60405180910390fd5b6103416001600160a01b0384168383610e03565b505050565b6000546001600160a01b031633146103a05760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b6033546040517ffc4e51f60000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063fc4e51f6906103f1908890889088908890889060040161182a565b600060405180830381600087803b15801561040b57600080fd5b505af115801561041f573d6000803e3d6000fd5b505050505050505050565b6000546001600160a01b031633146104845760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b6033546040517f1171bda90000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015284811660248301526044820184905290911690631171bda990606401600060405180830381600087803b1580156104f357600080fd5b505af1158015610507573d6000803e3d6000fd5b50505050505050565b6032546001600160a01b0316331461056a5760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b000000000000000000006044820152606401610324565b826105b75760405162461bcd60e51b815260206004820152601760248201527f4e6f206465706f7369746f7273207370656369666965640000000000000000006044820152606401610324565b60005b8381101561061c5761060a8585838181106105d7576105d761185d565b90506020020160208101906105ec9190611729565b8484848181106105fe576105fe61185d565b90506020020135610e83565b8061061481611889565b9150506105ba565b5050505050565b6032546001600160a01b0316331461067d5760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b000000000000000000006044820152606401610324565b6032546040516370a0823160e01b81526001600160a01b038681166004830152859216906370a082319060240160206040518083038186803b1580156106c257600080fd5b505afa1580156106d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fa91906118a4565b10156107535760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b6064820152608401610324565b61075d8484610e83565b603254604051631f1b6d2760e21b81526001600160a01b0386811660048301523060248301526044820186905290911690637c6db49c906064015b600060405180830381600087803b1580156107b257600080fd5b505af11580156107c6573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b0316331461082a5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b6001600160a01b0381166108805760405162461bcd60e51b815260206004820181905260248201527f4e6577207661756c7420616464726573732063616e6e6f74206265207a65726f6044820152606401610324565b604080516001600160a01b03831681524260208201527f5cc842cab066489e13292128663547c68705dbf476f0131e0107f155719c6124910160405180910390a1426035556034805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61034133848484610f18565b61090a3382611081565b50565b6033546001600160a01b0384811691161461096a5760405162461bcd60e51b815260206004820152601160248201527f546f6b656e206973206e6f7420544254430000000000000000000000000000006044820152606401610324565b336001600160a01b038416146109c25760405162461bcd60e51b815260206004820152601860248201527f4f6e6c7920544254432063616c6c657220616c6c6f77656400000000000000006044820152606401610324565b806109d6576109d18585611081565b61061c565b61061c85858484610f18565b6000546001600160a01b03163314610a3c5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b610a4b6035546201518061117c565b6034546040516001600160a01b0390911681527f81a9bb8030ed4116b405800280e065110a37afb57b69948e714c97fab23475ec9060200160405180910390a16033546034546040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b158015610aed57600080fd5b505af1158015610b01573d6000803e3d6000fd5b50506034805473ffffffffffffffffffffffffffffffffffffffff1916905550506000603555565b6032546040516370a0823160e01b815233600482018190529183916001600160a01b03909116906370a082319060240160206040518083038186803b158015610b7157600080fd5b505afa158015610b85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba991906118a4565b1015610c025760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b6064820152608401610324565b610c0c8183610e83565b603254604051631f1b6d2760e21b81526001600160a01b0383811660048301523060248301526044820185905290911690637c6db49c906064015b600060405180830381600087803b158015610c6157600080fd5b505af1158015610c75573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610cd75760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b6001600160a01b038116610d535760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610324565b61090a81611229565b6000546001600160a01b03163314610db65760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b6040517fb88d4fde0000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063b88d4fde906103f1903090889088908890889060040161182a565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610341908490611297565b816001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe82604051610ebe91815260200190565b60405180910390a26033546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260248201849052909116906340c10f1990604401610c47565b836001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b884604051610f5391815260200190565b60405180910390a260335460405163079cc67960e41b81526001600160a01b03868116600483015260248201869052909116906379cc679090604401600060405180830381600087803b158015610fa957600080fd5b505af1158015610fbd573d6000803e3d6000fd5b5050603254604080517fe78cea9200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169350634a38757e9250839163e78cea9291600480820192602092909190829003018186803b15801561102757600080fd5b505afa15801561103b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105f91906118bd565b8585856040518563ffffffff1660e01b815260040161079894939291906118da565b816001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b8826040516110bc91815260200190565b60405180910390a260335460405163079cc67960e41b81526001600160a01b03848116600483015260248201849052909116906379cc679090604401600060405180830381600087803b15801561111257600080fd5b505af1158015611126573d6000803e3d6000fd5b50506032546040517f56a6d9ef0000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905290911692506356a6d9ef9150604401610c47565b600082116111cc5760405162461bcd60e51b815260206004820152601460248201527f4368616e6765206e6f7420696e697469617465640000000000000000000000006044820152606401610324565b806111d7834261190d565b10156112255760405162461bcd60e51b815260206004820181905260248201527f476f7665726e616e63652064656c617920686173206e6f7420656c61707365646044820152606401610324565b5050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff1983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b60006112ec826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661137c9092919063ffffffff16565b805190915015610341578080602001905181019061130a9190611924565b6103415760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610324565b606061138b8484600085611395565b90505b9392505050565b60608247101561140d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610324565b6001600160a01b0385163b6114645760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610324565b600080866001600160a01b031685876040516114809190611976565b60006040518083038185875af1925050503d80600081146114bd576040519150601f19603f3d011682016040523d82523d6000602084013e6114c2565b606091505b50915091506114d28282866114dd565b979650505050505050565b606083156114ec57508161138e565b8251156114fc5782518084602001fd5b8160405162461bcd60e51b81526004016103249190611992565b6001600160a01b038116811461090a57600080fd5b60008060006060848603121561154057600080fd5b833561154b81611516565b9250602084013561155b81611516565b929592945050506040919091013590565b60008083601f84011261157e57600080fd5b50813567ffffffffffffffff81111561159657600080fd5b6020830191508360208285010111156115ae57600080fd5b9250929050565b6000806000806000608086880312156115cd57600080fd5b85356115d881611516565b945060208601356115e881611516565b935060408601359250606086013567ffffffffffffffff81111561160b57600080fd5b6116178882890161156c565b969995985093965092949392505050565b60008083601f84011261163a57600080fd5b50813567ffffffffffffffff81111561165257600080fd5b6020830191508360208260051b85010111156115ae57600080fd5b6000806000806040858703121561168357600080fd5b843567ffffffffffffffff8082111561169b57600080fd5b6116a788838901611628565b909650945060208701359150808211156116c057600080fd5b506116cd87828801611628565b95989497509550505050565b600080600080606085870312156116ef57600080fd5b84356116fa81611516565b935060208501359250604085013567ffffffffffffffff81111561171d57600080fd5b6116cd8782880161156c565b60006020828403121561173b57600080fd5b813561138e81611516565b60008060006040848603121561175b57600080fd5b83359250602084013567ffffffffffffffff81111561177957600080fd5b6117858682870161156c565b9497909650939450505050565b6000602082840312156117a457600080fd5b5035919050565b6000806000806000608086880312156117c357600080fd5b85356117ce81611516565b94506020860135935060408601356117e581611516565b9250606086013567ffffffffffffffff81111561160b57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160a01b038088168352808716602084015250846040830152608060608301526114d2608083018486611801565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561189d5761189d611873565b5060010190565b6000602082840312156118b657600080fd5b5051919050565b6000602082840312156118cf57600080fd5b815161138e81611516565b6001600160a01b0385168152836020820152606060408201526000611903606083018486611801565b9695505050505050565b60008282101561191f5761191f611873565b500390565b60006020828403121561193657600080fd5b8151801515811461138e57600080fd5b60005b83811015611961578181015183820152602001611949565b83811115611970576000848401525b50505050565b60008251611988818460208701611946565b9190910192915050565b60208152600082518060208401526119b1816040850160208701611946565b601f01601f1916919091016040019291505056fea26469706673582212205692253d56e7fc2993692b0fd45e0ab57941febf26f3611ea580b7c2a226784d64736f6c63430008090033",
|
|
439
|
+
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101515760003560e01c806376cdb03b116100cd578063a0712d6811610081578063d38bfff411610066578063d38bfff414610295578063e5d3d714146102a8578063fc4e51f6146102bb57600080fd5b8063a0712d6814610278578063cfce08161461028b57600080fd5b80638f4ffcb1116100b25780638f4ffcb11461024657806395131526146102595780639a508c8e1461027057600080fd5b806376cdb03b1461022057806388aaf0c81461023357600080fd5b8063475d05701161012457806353dce4df1161010957806353dce4df146101ca5780635aa6e675146101dd57806364e779b11461020d57600080fd5b8063475d0570146101a4578063479aa927146101b757600080fd5b80631171bda9146101565780632e73e3981461016b578063317dfa761461017e578063461c637314610191575b600080fd5b61016961016436600461152b565b6102ce565b005b6101696101793660046115b5565b610346565b61016961018c36600461152b565b61042a565b61016961019f36600461166d565b610510565b6101696101b23660046116d9565b610623565b6101696101c5366004611729565b6107d0565b6101696101d8366004611746565b6108f4565b6000546101f0906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61016961021b366004611792565b610900565b6032546101f0906001600160a01b031681565b6034546101f0906001600160a01b031681565b6101696102543660046117ab565b61090d565b61026260355481565b604051908152602001610204565b6101696109e2565b610169610286366004611792565b610b29565b6102626201518081565b6101696102a3366004611729565b610c7d565b6033546101f0906001600160a01b031681565b6101696102c93660046115b5565b610d5c565b6000546001600160a01b0316331461032d5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064015b60405180910390fd5b6103416001600160a01b0384168383610e03565b505050565b6000546001600160a01b031633146103a05760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b6033546040517ffc4e51f60000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063fc4e51f6906103f1908890889088908890889060040161182a565b600060405180830381600087803b15801561040b57600080fd5b505af115801561041f573d6000803e3d6000fd5b505050505050505050565b6000546001600160a01b031633146104845760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b6033546040517f1171bda90000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015284811660248301526044820184905290911690631171bda990606401600060405180830381600087803b1580156104f357600080fd5b505af1158015610507573d6000803e3d6000fd5b50505050505050565b6032546001600160a01b0316331461056a5760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b000000000000000000006044820152606401610324565b826105b75760405162461bcd60e51b815260206004820152601760248201527f4e6f206465706f7369746f7273207370656369666965640000000000000000006044820152606401610324565b60005b8381101561061c5761060a8585838181106105d7576105d761185d565b90506020020160208101906105ec9190611729565b8484848181106105fe576105fe61185d565b90506020020135610e83565b8061061481611889565b9150506105ba565b5050505050565b6032546001600160a01b0316331461067d5760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b000000000000000000006044820152606401610324565b6032546040516370a0823160e01b81526001600160a01b038681166004830152859216906370a082319060240160206040518083038186803b1580156106c257600080fd5b505afa1580156106d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fa91906118a4565b10156107535760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b6064820152608401610324565b61075d8484610e83565b603254604051631f1b6d2760e21b81526001600160a01b0386811660048301523060248301526044820186905290911690637c6db49c906064015b600060405180830381600087803b1580156107b257600080fd5b505af11580156107c6573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b0316331461082a5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b6001600160a01b0381166108805760405162461bcd60e51b815260206004820181905260248201527f4e6577207661756c7420616464726573732063616e6e6f74206265207a65726f6044820152606401610324565b604080516001600160a01b03831681524260208201527f5cc842cab066489e13292128663547c68705dbf476f0131e0107f155719c6124910160405180910390a1426035556034805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61034133848484610f18565b61090a3382611081565b50565b6033546001600160a01b0384811691161461096a5760405162461bcd60e51b815260206004820152601160248201527f546f6b656e206973206e6f7420544254430000000000000000000000000000006044820152606401610324565b336001600160a01b038416146109c25760405162461bcd60e51b815260206004820152601860248201527f4f6e6c7920544254432063616c6c657220616c6c6f77656400000000000000006044820152606401610324565b806109d6576109d18585611081565b61061c565b61061c85858484610f18565b6000546001600160a01b03163314610a3c5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b610a4b6035546201518061117c565b6034546040516001600160a01b0390911681527f81a9bb8030ed4116b405800280e065110a37afb57b69948e714c97fab23475ec9060200160405180910390a16033546034546040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b158015610aed57600080fd5b505af1158015610b01573d6000803e3d6000fd5b50506034805473ffffffffffffffffffffffffffffffffffffffff1916905550506000603555565b6032546040516370a0823160e01b815233600482018190529183916001600160a01b03909116906370a082319060240160206040518083038186803b158015610b7157600080fd5b505afa158015610b85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba991906118a4565b1015610c025760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b6064820152608401610324565b610c0c8183610e83565b603254604051631f1b6d2760e21b81526001600160a01b0383811660048301523060248301526044820185905290911690637c6db49c906064015b600060405180830381600087803b158015610c6157600080fd5b505af1158015610c75573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610cd75760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b6001600160a01b038116610d535760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610324565b61090a81611229565b6000546001600160a01b03163314610db65760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b6040517fb88d4fde0000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063b88d4fde906103f1903090889088908890889060040161182a565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610341908490611297565b816001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe82604051610ebe91815260200190565b60405180910390a26033546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260248201849052909116906340c10f1990604401610c47565b836001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b884604051610f5391815260200190565b60405180910390a260335460405163079cc67960e41b81526001600160a01b03868116600483015260248201869052909116906379cc679090604401600060405180830381600087803b158015610fa957600080fd5b505af1158015610fbd573d6000803e3d6000fd5b5050603254604080517fe78cea9200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169350634a38757e9250839163e78cea9291600480820192602092909190829003018186803b15801561102757600080fd5b505afa15801561103b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105f91906118bd565b8585856040518563ffffffff1660e01b815260040161079894939291906118da565b816001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b8826040516110bc91815260200190565b60405180910390a260335460405163079cc67960e41b81526001600160a01b03848116600483015260248201849052909116906379cc679090604401600060405180830381600087803b15801561111257600080fd5b505af1158015611126573d6000803e3d6000fd5b50506032546040517f56a6d9ef0000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905290911692506356a6d9ef9150604401610c47565b600082116111cc5760405162461bcd60e51b815260206004820152601460248201527f4368616e6765206e6f7420696e697469617465640000000000000000000000006044820152606401610324565b806111d7834261190d565b10156112255760405162461bcd60e51b815260206004820181905260248201527f476f7665726e616e63652064656c617920686173206e6f7420656c61707365646044820152606401610324565b5050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff1983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b60006112ec826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661137c9092919063ffffffff16565b805190915015610341578080602001905181019061130a9190611924565b6103415760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610324565b606061138b8484600085611395565b90505b9392505050565b60608247101561140d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610324565b6001600160a01b0385163b6114645760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610324565b600080866001600160a01b031685876040516114809190611976565b60006040518083038185875af1925050503d80600081146114bd576040519150601f19603f3d011682016040523d82523d6000602084013e6114c2565b606091505b50915091506114d28282866114dd565b979650505050505050565b606083156114ec57508161138e565b8251156114fc5782518084602001fd5b8160405162461bcd60e51b81526004016103249190611992565b6001600160a01b038116811461090a57600080fd5b60008060006060848603121561154057600080fd5b833561154b81611516565b9250602084013561155b81611516565b929592945050506040919091013590565b60008083601f84011261157e57600080fd5b50813567ffffffffffffffff81111561159657600080fd5b6020830191508360208285010111156115ae57600080fd5b9250929050565b6000806000806000608086880312156115cd57600080fd5b85356115d881611516565b945060208601356115e881611516565b935060408601359250606086013567ffffffffffffffff81111561160b57600080fd5b6116178882890161156c565b969995985093965092949392505050565b60008083601f84011261163a57600080fd5b50813567ffffffffffffffff81111561165257600080fd5b6020830191508360208260051b85010111156115ae57600080fd5b6000806000806040858703121561168357600080fd5b843567ffffffffffffffff8082111561169b57600080fd5b6116a788838901611628565b909650945060208701359150808211156116c057600080fd5b506116cd87828801611628565b95989497509550505050565b600080600080606085870312156116ef57600080fd5b84356116fa81611516565b935060208501359250604085013567ffffffffffffffff81111561171d57600080fd5b6116cd8782880161156c565b60006020828403121561173b57600080fd5b813561138e81611516565b60008060006040848603121561175b57600080fd5b83359250602084013567ffffffffffffffff81111561177957600080fd5b6117858682870161156c565b9497909650939450505050565b6000602082840312156117a457600080fd5b5035919050565b6000806000806000608086880312156117c357600080fd5b85356117ce81611516565b94506020860135935060408601356117e581611516565b9250606086013567ffffffffffffffff81111561160b57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160a01b038088168352808716602084015250846040830152608060608301526114d2608083018486611801565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561189d5761189d611873565b5060010190565b6000602082840312156118b657600080fd5b5051919050565b6000602082840312156118cf57600080fd5b815161138e81611516565b6001600160a01b0385168152836020820152606060408201526000611903606083018486611801565b9695505050505050565b60008282101561191f5761191f611873565b500390565b60006020828403121561193657600080fd5b8151801515811461138e57600080fd5b60005b83811015611961578181015183820152602001611949565b83811115611970576000848401525b50505050565b60008251611988818460208701611946565b9190910192915050565b60208152600082518060208401526119b1816040850160208701611946565b601f01601f1916919091016040019291505056fea26469706673582212205692253d56e7fc2993692b0fd45e0ab57941febf26f3611ea580b7c2a226784d64736f6c63430008090033",
|
|
298
440
|
"linkReferences": {},
|
|
299
441
|
"deployedLinkReferences": {}
|
|
300
442
|
}
|
|
@@ -20,6 +20,7 @@ import "@keep-network/random-beacon/contracts/Governable.sol";
|
|
|
20
20
|
import "./IVault.sol";
|
|
21
21
|
import "../bank/Bank.sol";
|
|
22
22
|
import "../token/TBTC.sol";
|
|
23
|
+
import "../GovernanceUtils.sol";
|
|
23
24
|
|
|
24
25
|
/// @title TBTC application vault
|
|
25
26
|
/// @notice TBTC is a fully Bitcoin-backed ERC-20 token pegged to the price of
|
|
@@ -30,18 +31,45 @@ import "../token/TBTC.sol";
|
|
|
30
31
|
/// @dev TBTC Vault is the owner of TBTC token contract and is the only contract
|
|
31
32
|
/// minting the token.
|
|
32
33
|
contract TBTCVault is IVault, Governable {
|
|
34
|
+
using SafeERC20 for IERC20;
|
|
35
|
+
|
|
36
|
+
/// @notice The time delay that needs to pass between initializing and
|
|
37
|
+
/// finalizing upgrade to a new vault. The time delay forces the
|
|
38
|
+
/// upgrading party to reflect on the vault address it is upgrading
|
|
39
|
+
/// to and lets all TBTC holders notice the planned
|
|
40
|
+
/// upgrade.
|
|
41
|
+
uint256 public constant UPGRADE_GOVERNANCE_DELAY = 24 hours;
|
|
42
|
+
|
|
33
43
|
Bank public bank;
|
|
34
44
|
TBTC public tbtcToken;
|
|
35
45
|
|
|
36
|
-
|
|
46
|
+
/// @notice The address of a new TBTC vault. Set only when the upgrade
|
|
47
|
+
/// process is pending. Once the upgrade gets finalized, the new
|
|
48
|
+
/// TBTC vault will become an owner of TBTC token.
|
|
49
|
+
address public newVault;
|
|
50
|
+
/// @notice The timestamp at which an upgrade to a new TBTC vault was
|
|
51
|
+
/// initiated. Set only when the upgrade process is pending.
|
|
52
|
+
uint256 public upgradeInitiatedTimestamp;
|
|
37
53
|
|
|
54
|
+
event Minted(address indexed to, uint256 amount);
|
|
38
55
|
event Unminted(address indexed from, uint256 amount);
|
|
39
56
|
|
|
57
|
+
event UpgradeInitiated(address newVault, uint256 timestamp);
|
|
58
|
+
event UpgradeFinalized(address newVault);
|
|
59
|
+
|
|
40
60
|
modifier onlyBank() {
|
|
41
61
|
require(msg.sender == address(bank), "Caller is not the Bank");
|
|
42
62
|
_;
|
|
43
63
|
}
|
|
44
64
|
|
|
65
|
+
modifier onlyAfterUpgradeGovernanceDelay() {
|
|
66
|
+
GovernanceUtils.onlyAfterGovernanceDelay(
|
|
67
|
+
upgradeInitiatedTimestamp,
|
|
68
|
+
UPGRADE_GOVERNANCE_DELAY
|
|
69
|
+
);
|
|
70
|
+
_;
|
|
71
|
+
}
|
|
72
|
+
|
|
45
73
|
constructor(Bank _bank, TBTC _tbtcToken) {
|
|
46
74
|
require(
|
|
47
75
|
address(_bank) != address(0),
|
|
@@ -59,34 +87,6 @@ contract TBTCVault is IVault, Governable {
|
|
|
59
87
|
_transferGovernance(msg.sender);
|
|
60
88
|
}
|
|
61
89
|
|
|
62
|
-
/// @notice Allows the governance of the TBTCVault to recover any ERC20
|
|
63
|
-
/// token sent mistakenly to the TBTC token contract address.
|
|
64
|
-
/// @param token Address of the recovered ERC20 token contract.
|
|
65
|
-
/// @param recipient Address the recovered token should be sent to.
|
|
66
|
-
/// @param amount Recovered amount.
|
|
67
|
-
function recoverERC20(
|
|
68
|
-
IERC20 token,
|
|
69
|
-
address recipient,
|
|
70
|
-
uint256 amount
|
|
71
|
-
) external onlyGovernance {
|
|
72
|
-
tbtcToken.recoverERC20(token, recipient, amount);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/// @notice Allows the governance of the TBTCVault to recover any ERC721
|
|
76
|
-
/// token sent mistakenly to the TBTC token contract address.
|
|
77
|
-
/// @param token Address of the recovered ERC721 token contract.
|
|
78
|
-
/// @param recipient Address the recovered token should be sent to.
|
|
79
|
-
/// @param tokenId Identifier of the recovered token.
|
|
80
|
-
/// @param data Additional data.
|
|
81
|
-
function recoverERC721(
|
|
82
|
-
IERC721 token,
|
|
83
|
-
address recipient,
|
|
84
|
-
uint256 tokenId,
|
|
85
|
-
bytes calldata data
|
|
86
|
-
) external onlyGovernance {
|
|
87
|
-
tbtcToken.recoverERC721(token, recipient, tokenId, data);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
90
|
/// @notice Transfers the given `amount` of the Bank balance from caller
|
|
91
91
|
/// to TBTC Vault, and mints `amount` of TBTC to the caller.
|
|
92
92
|
/// @dev TBTC Vault must have an allowance for caller's balance in the Bank
|
|
@@ -192,6 +192,95 @@ contract TBTCVault is IVault, Governable {
|
|
|
192
192
|
}
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
+
/// @notice Initiates vault upgrade process. The upgrade process needs to be
|
|
196
|
+
/// finalized with a call to `finalizeUpgrade` function after the
|
|
197
|
+
/// `UPGRADE_GOVERNANCE_DELAY` passes. Only the governance can
|
|
198
|
+
/// initiate the upgrade.
|
|
199
|
+
/// @param _newVault The new vault address.
|
|
200
|
+
function initiateUpgrade(address _newVault) external onlyGovernance {
|
|
201
|
+
require(_newVault != address(0), "New vault address cannot be zero");
|
|
202
|
+
/* solhint-disable-next-line not-rely-on-time */
|
|
203
|
+
emit UpgradeInitiated(_newVault, block.timestamp);
|
|
204
|
+
/* solhint-disable-next-line not-rely-on-time */
|
|
205
|
+
upgradeInitiatedTimestamp = block.timestamp;
|
|
206
|
+
newVault = _newVault;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/// @notice Allows the governance to finalize vault upgrade process. The
|
|
210
|
+
/// upgrade process needs to be first initiated with a call to
|
|
211
|
+
/// `initiateUpgrade` and the `UPGRADE_GOVERNANCE_DELAY` needs to
|
|
212
|
+
/// pass. Once the upgrade is finalized, the new vault will become
|
|
213
|
+
/// an owner of TBTC token.
|
|
214
|
+
function finalizeUpgrade()
|
|
215
|
+
external
|
|
216
|
+
onlyGovernance
|
|
217
|
+
onlyAfterUpgradeGovernanceDelay
|
|
218
|
+
{
|
|
219
|
+
emit UpgradeFinalized(newVault);
|
|
220
|
+
// slither-disable-next-line reentrancy-no-eth
|
|
221
|
+
tbtcToken.transferOwnership(newVault);
|
|
222
|
+
newVault = address(0);
|
|
223
|
+
upgradeInitiatedTimestamp = 0;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/// @notice Allows the governance of the TBTCVault to recover any ERC20
|
|
227
|
+
/// token sent mistakenly to the TBTC token contract address.
|
|
228
|
+
/// @param token Address of the recovered ERC20 token contract.
|
|
229
|
+
/// @param recipient Address the recovered token should be sent to.
|
|
230
|
+
/// @param amount Recovered amount.
|
|
231
|
+
function recoverERC20FromToken(
|
|
232
|
+
IERC20 token,
|
|
233
|
+
address recipient,
|
|
234
|
+
uint256 amount
|
|
235
|
+
) external onlyGovernance {
|
|
236
|
+
tbtcToken.recoverERC20(token, recipient, amount);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/// @notice Allows the governance of the TBTCVault to recover any ERC721
|
|
240
|
+
/// token sent mistakenly to the TBTC token contract address.
|
|
241
|
+
/// @param token Address of the recovered ERC721 token contract.
|
|
242
|
+
/// @param recipient Address the recovered token should be sent to.
|
|
243
|
+
/// @param tokenId Identifier of the recovered token.
|
|
244
|
+
/// @param data Additional data.
|
|
245
|
+
function recoverERC721FromToken(
|
|
246
|
+
IERC721 token,
|
|
247
|
+
address recipient,
|
|
248
|
+
uint256 tokenId,
|
|
249
|
+
bytes calldata data
|
|
250
|
+
) external onlyGovernance {
|
|
251
|
+
tbtcToken.recoverERC721(token, recipient, tokenId, data);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/// @notice Allows the governance of the TBTCVault to recover any ERC20
|
|
255
|
+
/// token sent - mistakenly or not - to the vault address. This
|
|
256
|
+
/// function should be used to withdraw TBTC v1 tokens transferred
|
|
257
|
+
/// to TBTCVault as a result of VendingMachine > TBTCVault upgrade.
|
|
258
|
+
/// @param token Address of the recovered ERC20 token contract.
|
|
259
|
+
/// @param recipient Address the recovered token should be sent to.
|
|
260
|
+
/// @param amount Recovered amount.
|
|
261
|
+
function recoverERC20(
|
|
262
|
+
IERC20 token,
|
|
263
|
+
address recipient,
|
|
264
|
+
uint256 amount
|
|
265
|
+
) external onlyGovernance {
|
|
266
|
+
token.safeTransfer(recipient, amount);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/// @notice Allows the governance of the TBTCVault to recover any ERC721
|
|
270
|
+
/// token sent mistakenly to the vault address.
|
|
271
|
+
/// @param token Address of the recovered ERC721 token contract.
|
|
272
|
+
/// @param recipient Address the recovered token should be sent to.
|
|
273
|
+
/// @param tokenId Identifier of the recovered token.
|
|
274
|
+
/// @param data Additional data.
|
|
275
|
+
function recoverERC721(
|
|
276
|
+
IERC721 token,
|
|
277
|
+
address recipient,
|
|
278
|
+
uint256 tokenId,
|
|
279
|
+
bytes calldata data
|
|
280
|
+
) external onlyGovernance {
|
|
281
|
+
token.safeTransferFrom(address(this), recipient, tokenId, data);
|
|
282
|
+
}
|
|
283
|
+
|
|
195
284
|
// slither-disable-next-line calls-loop
|
|
196
285
|
function _mint(address minter, uint256 amount) internal {
|
|
197
286
|
emit Minted(minter, amount);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { HardhatRuntimeEnvironment } from "hardhat/types"
|
|
2
|
+
import type { DeployFunction } from "hardhat-deploy/types"
|
|
3
|
+
|
|
4
|
+
import initializeWalletOwner from "@keep-network/ecdsa/export/tasks/initialize-wallet-owner"
|
|
5
|
+
|
|
6
|
+
const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => {
|
|
7
|
+
const Bridge = await hre.deployments.get("Bridge")
|
|
8
|
+
|
|
9
|
+
await initializeWalletOwner(hre, Bridge.address)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export default func
|
|
13
|
+
|
|
14
|
+
func.tags = ["InitializeWalletOwner"]
|
|
15
|
+
func.dependencies = ["Bridge"]
|
|
16
|
+
|
|
17
|
+
func.skip = async (hre: HardhatRuntimeEnvironment): Promise<boolean> =>
|
|
18
|
+
hre.network.name === "mainnet"
|