@keep-network/tbtc-v2 0.1.1-dev.86 → 0.1.1-dev.89

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.
Files changed (64) hide show
  1. package/artifacts/Bank.json +3 -3
  2. package/artifacts/Bridge.json +5 -5
  3. package/artifacts/Deposit.json +2 -2
  4. package/artifacts/DepositSweep.json +2 -2
  5. package/artifacts/EcdsaDkgValidator.json +1 -1
  6. package/artifacts/EcdsaInactivity.json +1 -1
  7. package/artifacts/EcdsaSortitionPool.json +2 -2
  8. package/artifacts/Fraud.json +2 -2
  9. package/artifacts/KeepRegistry.json +1 -1
  10. package/artifacts/KeepStake.json +2 -2
  11. package/artifacts/KeepToken.json +2 -2
  12. package/artifacts/KeepTokenStaking.json +1 -1
  13. package/artifacts/MovingFunds.json +2 -2
  14. package/artifacts/NuCypherStakingEscrow.json +1 -1
  15. package/artifacts/NuCypherToken.json +2 -2
  16. package/artifacts/RandomBeaconStub.json +1 -1
  17. package/artifacts/Redemption.json +2 -2
  18. package/artifacts/ReimbursementPool.json +2 -2
  19. package/artifacts/Relay.json +2 -2
  20. package/artifacts/T.json +2 -2
  21. package/artifacts/TBTC.json +3 -3
  22. package/artifacts/TBTCToken.json +3 -3
  23. package/artifacts/TBTCVault.json +142 -69
  24. package/artifacts/TokenStaking.json +1 -1
  25. package/artifacts/TokenholderGovernor.json +9 -9
  26. package/artifacts/TokenholderTimelock.json +8 -8
  27. package/artifacts/VendingMachine.json +3 -3
  28. package/artifacts/VendingMachineKeep.json +1 -1
  29. package/artifacts/VendingMachineNuCypher.json +1 -1
  30. package/artifacts/WalletRegistry.json +5 -5
  31. package/artifacts/WalletRegistryGovernance.json +2 -2
  32. package/artifacts/Wallets.json +2 -2
  33. package/artifacts/solcInputs/{6371edede0c121e15ead18cf51551442.json → 00e4740299c76687f54267cd49adc9d5.json} +4 -4
  34. package/build/contracts/GovernanceUtils.sol/GovernanceUtils.dbg.json +1 -1
  35. package/build/contracts/bank/Bank.sol/Bank.dbg.json +1 -1
  36. package/build/contracts/bank/IReceiveBalanceApproval.sol/IReceiveBalanceApproval.dbg.json +1 -1
  37. package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.dbg.json +1 -1
  38. package/build/contracts/bridge/Bridge.sol/Bridge.dbg.json +1 -1
  39. package/build/contracts/bridge/BridgeState.sol/BridgeState.dbg.json +1 -1
  40. package/build/contracts/bridge/Deposit.sol/Deposit.dbg.json +1 -1
  41. package/build/contracts/bridge/DepositSweep.sol/DepositSweep.dbg.json +1 -1
  42. package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.dbg.json +1 -1
  43. package/build/contracts/bridge/Fraud.sol/Fraud.dbg.json +1 -1
  44. package/build/contracts/bridge/Heartbeat.sol/Heartbeat.dbg.json +1 -1
  45. package/build/contracts/bridge/IRelay.sol/IRelay.dbg.json +1 -1
  46. package/build/contracts/bridge/MovingFunds.sol/MovingFunds.dbg.json +1 -1
  47. package/build/contracts/bridge/Redemption.sol/OutboundTx.dbg.json +1 -1
  48. package/build/contracts/bridge/Redemption.sol/Redemption.dbg.json +1 -1
  49. package/build/contracts/bridge/VendingMachine.sol/VendingMachine.dbg.json +1 -1
  50. package/build/contracts/bridge/Wallets.sol/Wallets.dbg.json +1 -1
  51. package/build/contracts/token/TBTC.sol/TBTC.dbg.json +1 -1
  52. package/build/contracts/vault/DonationVault.sol/DonationVault.dbg.json +1 -1
  53. package/build/contracts/vault/IVault.sol/IVault.dbg.json +1 -1
  54. package/build/contracts/vault/TBTCVault.sol/TBTCVault.dbg.json +1 -1
  55. package/build/contracts/vault/TBTCVault.sol/TBTCVault.json +87 -29
  56. package/contracts/vault/TBTCVault.sol +68 -36
  57. package/deploy/{03_transfer_roles.ts → 03_transfer_vending_machine_roles.ts} +1 -1
  58. package/deploy/{08_transfer_ownership.ts → 08_transfer_bank_ownership.ts} +1 -1
  59. package/deploy/09_transfer_tbtc_vault_ownership.ts +15 -0
  60. package/deploy/{09_transfer_governance.ts → 10_transfer_bridge_governance.ts} +1 -1
  61. package/deploy/{10_transfer_proxy_admin_ownership.ts → 11_transfer_proxy_admin_ownership.ts} +0 -0
  62. package/deploy/{11_deploy_proxy_admin_with_deputy.ts → 12_deploy_proxy_admin_with_deputy.ts} +0 -0
  63. package/export.json +85 -27
  64. package/package.json +1 -1
@@ -23,19 +23,19 @@
23
23
  "anonymous": false,
24
24
  "inputs": [
25
25
  {
26
- "indexed": false,
26
+ "indexed": true,
27
27
  "internalType": "address",
28
- "name": "oldGovernance",
28
+ "name": "to",
29
29
  "type": "address"
30
30
  },
31
31
  {
32
32
  "indexed": false,
33
- "internalType": "address",
34
- "name": "newGovernance",
35
- "type": "address"
33
+ "internalType": "uint256",
34
+ "name": "amount",
35
+ "type": "uint256"
36
36
  }
37
37
  ],
38
- "name": "GovernanceTransferred",
38
+ "name": "Minted",
39
39
  "type": "event"
40
40
  },
41
41
  {
@@ -44,17 +44,17 @@
44
44
  {
45
45
  "indexed": true,
46
46
  "internalType": "address",
47
- "name": "to",
47
+ "name": "previousOwner",
48
48
  "type": "address"
49
49
  },
50
50
  {
51
- "indexed": false,
52
- "internalType": "uint256",
53
- "name": "amount",
54
- "type": "uint256"
51
+ "indexed": true,
52
+ "internalType": "address",
53
+ "name": "newOwner",
54
+ "type": "address"
55
55
  }
56
56
  ],
57
- "name": "Minted",
57
+ "name": "OwnershipTransferred",
58
58
  "type": "event"
59
59
  },
60
60
  {
@@ -141,19 +141,6 @@
141
141
  "stateMutability": "nonpayable",
142
142
  "type": "function"
143
143
  },
144
- {
145
- "inputs": [],
146
- "name": "governance",
147
- "outputs": [
148
- {
149
- "internalType": "address",
150
- "name": "",
151
- "type": "address"
152
- }
153
- ],
154
- "stateMutability": "view",
155
- "type": "function"
156
- },
157
144
  {
158
145
  "inputs": [
159
146
  {
@@ -193,6 +180,19 @@
193
180
  "stateMutability": "view",
194
181
  "type": "function"
195
182
  },
183
+ {
184
+ "inputs": [],
185
+ "name": "owner",
186
+ "outputs": [
187
+ {
188
+ "internalType": "address",
189
+ "name": "",
190
+ "type": "address"
191
+ }
192
+ ],
193
+ "stateMutability": "view",
194
+ "type": "function"
195
+ },
196
196
  {
197
197
  "inputs": [
198
198
  {
@@ -285,6 +285,29 @@
285
285
  "stateMutability": "nonpayable",
286
286
  "type": "function"
287
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
+ },
288
311
  {
289
312
  "inputs": [
290
313
  {
@@ -313,6 +336,41 @@
313
336
  "stateMutability": "nonpayable",
314
337
  "type": "function"
315
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
+ },
367
+ {
368
+ "inputs": [],
369
+ "name": "renounceOwnership",
370
+ "outputs": [],
371
+ "stateMutability": "nonpayable",
372
+ "type": "function"
373
+ },
316
374
  {
317
375
  "inputs": [],
318
376
  "name": "tbtcToken",
@@ -330,11 +388,11 @@
330
388
  "inputs": [
331
389
  {
332
390
  "internalType": "address",
333
- "name": "newGovernance",
391
+ "name": "newOwner",
334
392
  "type": "address"
335
393
  }
336
394
  ],
337
- "name": "transferGovernance",
395
+ "name": "transferOwnership",
338
396
  "outputs": [],
339
397
  "stateMutability": "nonpayable",
340
398
  "type": "function"
@@ -384,8 +442,8 @@
384
442
  "type": "function"
385
443
  }
386
444
  ],
387
- "bytecode": "0x60806040523480156200001157600080fd5b50604051620016ff380380620016ff8339810160408190526200003491620001b4565b6001600160a01b038216620000905760405162461bcd60e51b815260206004820181905260248201527f42616e6b2063616e206e6f7420626520746865207a65726f206164647265737360448201526064015b60405180910390fd5b6001600160a01b038116620000f75760405162461bcd60e51b815260206004820152602660248201527f5442544320746f6b656e2063616e206e6f7420626520746865207a65726f206160448201526564647265737360d01b606482015260840162000087565b603280546001600160a01b038085166001600160a01b031992831617909255603380549284169290911691909117905562000132336200013a565b5050620001f3565b600080546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b6001600160a01b0381168114620001b157600080fd5b50565b60008060408385031215620001c857600080fd5b8251620001d5816200019b565b6020840151909250620001e8816200019b565b809150509250929050565b6114fc80620002036000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806388aaf0c8116100b2578063a0712d6811610081578063d38bfff411610066578063d38bfff414610239578063e5d3d7141461024c578063fc4e51f61461025f57600080fd5b8063a0712d681461021c578063cfce08161461022f57600080fd5b806388aaf0c8146101d75780638f4ffcb1146101ea57806395131526146101fd5780639a508c8e1461021457600080fd5b806353dce4df116100ee57806353dce4df1461016e5780635aa6e6751461018157806364e779b1146101b157806376cdb03b146101c457600080fd5b80631171bda914610120578063461c637314610135578063475d057014610148578063479aa9271461015b575b600080fd5b61013361012e3660046110bb565b610272565b005b610133610143366004611148565b61035d565b6101336101563660046111f6565b610470565b610133610169366004611246565b61061d565b61013361017c36600461126a565b610741565b600054610194906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101336101bf3660046112b6565b610752565b603254610194906001600160a01b031681565b603454610194906001600160a01b031681565b6101336101f83660046112cf565b61075f565b61020660355481565b6040519081526020016101a8565b610133610834565b61013361022a3660046112b6565b61097b565b6102066201518081565b610133610247366004611246565b610acf565b603354610194906001600160a01b031681565b61013361026d366004611342565b610bae565b6000546001600160a01b031633146102d15760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064015b60405180910390fd5b6033546040517f1171bda90000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015284811660248301526044820184905290911690631171bda990606401600060405180830381600087803b15801561034057600080fd5b505af1158015610354573d6000803e3d6000fd5b50505050505050565b6032546001600160a01b031633146103b75760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b0000000000000000000060448201526064016102c8565b826104045760405162461bcd60e51b815260206004820152601760248201527f4e6f206465706f7369746f72732073706563696669656400000000000000000060448201526064016102c8565b60005b838110156104695761045785858381811061042457610424611398565b90506020020160208101906104399190611246565b84848481811061044b5761044b611398565b90506020020135610c92565b80610461816113c4565b915050610407565b5050505050565b6032546001600160a01b031633146104ca5760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b0000000000000000000060448201526064016102c8565b6032546040516370a0823160e01b81526001600160a01b038681166004830152859216906370a082319060240160206040518083038186803b15801561050f57600080fd5b505afa158015610523573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054791906113df565b10156105a05760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b60648201526084016102c8565b6105aa8484610c92565b603254604051631f1b6d2760e21b81526001600160a01b0386811660048301523060248301526044820186905290911690637c6db49c906064015b600060405180830381600087803b1580156105ff57600080fd5b505af1158015610613573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146106775760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064016102c8565b6001600160a01b0381166106cd5760405162461bcd60e51b815260206004820181905260248201527f4e6577207661756c7420616464726573732063616e6e6f74206265207a65726f60448201526064016102c8565b604080516001600160a01b03831681524260208201527f5cc842cab066489e13292128663547c68705dbf476f0131e0107f155719c6124910160405180910390a1426035556034805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61074d33848484610d27565b505050565b61075c3382610e90565b50565b6033546001600160a01b038481169116146107bc5760405162461bcd60e51b815260206004820152601160248201527f546f6b656e206973206e6f74205442544300000000000000000000000000000060448201526064016102c8565b336001600160a01b038416146108145760405162461bcd60e51b815260206004820152601860248201527f4f6e6c7920544254432063616c6c657220616c6c6f776564000000000000000060448201526064016102c8565b80610828576108238585610e90565b610469565b61046985858484610d27565b6000546001600160a01b0316331461088e5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064016102c8565b61089d60355462015180610f8b565b6034546040516001600160a01b0390911681527f81a9bb8030ed4116b405800280e065110a37afb57b69948e714c97fab23475ec9060200160405180910390a16033546034546040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b15801561093f57600080fd5b505af1158015610953573d6000803e3d6000fd5b50506034805473ffffffffffffffffffffffffffffffffffffffff1916905550506000603555565b6032546040516370a0823160e01b815233600482018190529183916001600160a01b03909116906370a082319060240160206040518083038186803b1580156109c357600080fd5b505afa1580156109d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fb91906113df565b1015610a545760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b60648201526084016102c8565b610a5e8183610c92565b603254604051631f1b6d2760e21b81526001600160a01b0383811660048301523060248301526044820185905290911690637c6db49c906064015b600060405180830381600087803b158015610ab357600080fd5b505af1158015610ac7573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610b295760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064016102c8565b6001600160a01b038116610ba55760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016102c8565b61075c81611038565b6000546001600160a01b03163314610c085760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064016102c8565b6033546040517ffc4e51f60000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063fc4e51f690610c599088908890889088908890600401611421565b600060405180830381600087803b158015610c7357600080fd5b505af1158015610c87573d6000803e3d6000fd5b505050505050505050565b816001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe82604051610ccd91815260200190565b60405180910390a26033546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260248201849052909116906340c10f1990604401610a99565b836001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b884604051610d6291815260200190565b60405180910390a260335460405163079cc67960e41b81526001600160a01b03868116600483015260248201869052909116906379cc679090604401600060405180830381600087803b158015610db857600080fd5b505af1158015610dcc573d6000803e3d6000fd5b5050603254604080517fe78cea9200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169350634a38757e9250839163e78cea9291600480820192602092909190829003018186803b158015610e3657600080fd5b505afa158015610e4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6e919061145f565b8585856040518563ffffffff1660e01b81526004016105e5949392919061147c565b816001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b882604051610ecb91815260200190565b60405180910390a260335460405163079cc67960e41b81526001600160a01b03848116600483015260248201849052909116906379cc679090604401600060405180830381600087803b158015610f2157600080fd5b505af1158015610f35573d6000803e3d6000fd5b50506032546040517f56a6d9ef0000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905290911692506356a6d9ef9150604401610a99565b60008211610fdb5760405162461bcd60e51b815260206004820152601460248201527f4368616e6765206e6f7420696e6974696174656400000000000000000000000060448201526064016102c8565b80610fe683426114af565b10156110345760405162461bcd60e51b815260206004820181905260248201527f476f7665726e616e63652064656c617920686173206e6f7420656c617073656460448201526064016102c8565b5050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff1983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b6001600160a01b038116811461075c57600080fd5b6000806000606084860312156110d057600080fd5b83356110db816110a6565b925060208401356110eb816110a6565b929592945050506040919091013590565b60008083601f84011261110e57600080fd5b50813567ffffffffffffffff81111561112657600080fd5b6020830191508360208260051b850101111561114157600080fd5b9250929050565b6000806000806040858703121561115e57600080fd5b843567ffffffffffffffff8082111561117657600080fd5b611182888389016110fc565b9096509450602087013591508082111561119b57600080fd5b506111a8878288016110fc565b95989497509550505050565b60008083601f8401126111c657600080fd5b50813567ffffffffffffffff8111156111de57600080fd5b60208301915083602082850101111561114157600080fd5b6000806000806060858703121561120c57600080fd5b8435611217816110a6565b935060208501359250604085013567ffffffffffffffff81111561123a57600080fd5b6111a8878288016111b4565b60006020828403121561125857600080fd5b8135611263816110a6565b9392505050565b60008060006040848603121561127f57600080fd5b83359250602084013567ffffffffffffffff81111561129d57600080fd5b6112a9868287016111b4565b9497909650939450505050565b6000602082840312156112c857600080fd5b5035919050565b6000806000806000608086880312156112e757600080fd5b85356112f2816110a6565b9450602086013593506040860135611309816110a6565b9250606086013567ffffffffffffffff81111561132557600080fd5b611331888289016111b4565b969995985093965092949392505050565b60008060008060006080868803121561135a57600080fd5b8535611365816110a6565b94506020860135611375816110a6565b935060408601359250606086013567ffffffffffffffff81111561132557600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156113d8576113d86113ae565b5060010190565b6000602082840312156113f157600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160a01b038088168352808716602084015250846040830152608060608301526114546080830184866113f8565b979650505050505050565b60006020828403121561147157600080fd5b8151611263816110a6565b6001600160a01b03851681528360208201526060604082015260006114a56060830184866113f8565b9695505050505050565b6000828210156114c1576114c16113ae565b50039056fea26469706673582212200f8bfa37abf07fe0f0b7d0c4323b017b9f180f7d5bce06dac02be2e3b3db907264736f6c63430008090033",
388
- "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061011b5760003560e01c806388aaf0c8116100b2578063a0712d6811610081578063d38bfff411610066578063d38bfff414610239578063e5d3d7141461024c578063fc4e51f61461025f57600080fd5b8063a0712d681461021c578063cfce08161461022f57600080fd5b806388aaf0c8146101d75780638f4ffcb1146101ea57806395131526146101fd5780639a508c8e1461021457600080fd5b806353dce4df116100ee57806353dce4df1461016e5780635aa6e6751461018157806364e779b1146101b157806376cdb03b146101c457600080fd5b80631171bda914610120578063461c637314610135578063475d057014610148578063479aa9271461015b575b600080fd5b61013361012e3660046110bb565b610272565b005b610133610143366004611148565b61035d565b6101336101563660046111f6565b610470565b610133610169366004611246565b61061d565b61013361017c36600461126a565b610741565b600054610194906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101336101bf3660046112b6565b610752565b603254610194906001600160a01b031681565b603454610194906001600160a01b031681565b6101336101f83660046112cf565b61075f565b61020660355481565b6040519081526020016101a8565b610133610834565b61013361022a3660046112b6565b61097b565b6102066201518081565b610133610247366004611246565b610acf565b603354610194906001600160a01b031681565b61013361026d366004611342565b610bae565b6000546001600160a01b031633146102d15760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064015b60405180910390fd5b6033546040517f1171bda90000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015284811660248301526044820184905290911690631171bda990606401600060405180830381600087803b15801561034057600080fd5b505af1158015610354573d6000803e3d6000fd5b50505050505050565b6032546001600160a01b031633146103b75760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b0000000000000000000060448201526064016102c8565b826104045760405162461bcd60e51b815260206004820152601760248201527f4e6f206465706f7369746f72732073706563696669656400000000000000000060448201526064016102c8565b60005b838110156104695761045785858381811061042457610424611398565b90506020020160208101906104399190611246565b84848481811061044b5761044b611398565b90506020020135610c92565b80610461816113c4565b915050610407565b5050505050565b6032546001600160a01b031633146104ca5760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b0000000000000000000060448201526064016102c8565b6032546040516370a0823160e01b81526001600160a01b038681166004830152859216906370a082319060240160206040518083038186803b15801561050f57600080fd5b505afa158015610523573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054791906113df565b10156105a05760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b60648201526084016102c8565b6105aa8484610c92565b603254604051631f1b6d2760e21b81526001600160a01b0386811660048301523060248301526044820186905290911690637c6db49c906064015b600060405180830381600087803b1580156105ff57600080fd5b505af1158015610613573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146106775760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064016102c8565b6001600160a01b0381166106cd5760405162461bcd60e51b815260206004820181905260248201527f4e6577207661756c7420616464726573732063616e6e6f74206265207a65726f60448201526064016102c8565b604080516001600160a01b03831681524260208201527f5cc842cab066489e13292128663547c68705dbf476f0131e0107f155719c6124910160405180910390a1426035556034805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61074d33848484610d27565b505050565b61075c3382610e90565b50565b6033546001600160a01b038481169116146107bc5760405162461bcd60e51b815260206004820152601160248201527f546f6b656e206973206e6f74205442544300000000000000000000000000000060448201526064016102c8565b336001600160a01b038416146108145760405162461bcd60e51b815260206004820152601860248201527f4f6e6c7920544254432063616c6c657220616c6c6f776564000000000000000060448201526064016102c8565b80610828576108238585610e90565b610469565b61046985858484610d27565b6000546001600160a01b0316331461088e5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064016102c8565b61089d60355462015180610f8b565b6034546040516001600160a01b0390911681527f81a9bb8030ed4116b405800280e065110a37afb57b69948e714c97fab23475ec9060200160405180910390a16033546034546040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b15801561093f57600080fd5b505af1158015610953573d6000803e3d6000fd5b50506034805473ffffffffffffffffffffffffffffffffffffffff1916905550506000603555565b6032546040516370a0823160e01b815233600482018190529183916001600160a01b03909116906370a082319060240160206040518083038186803b1580156109c357600080fd5b505afa1580156109d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fb91906113df565b1015610a545760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b60648201526084016102c8565b610a5e8183610c92565b603254604051631f1b6d2760e21b81526001600160a01b0383811660048301523060248301526044820185905290911690637c6db49c906064015b600060405180830381600087803b158015610ab357600080fd5b505af1158015610ac7573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610b295760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064016102c8565b6001600160a01b038116610ba55760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016102c8565b61075c81611038565b6000546001600160a01b03163314610c085760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064016102c8565b6033546040517ffc4e51f60000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063fc4e51f690610c599088908890889088908890600401611421565b600060405180830381600087803b158015610c7357600080fd5b505af1158015610c87573d6000803e3d6000fd5b505050505050505050565b816001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe82604051610ccd91815260200190565b60405180910390a26033546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260248201849052909116906340c10f1990604401610a99565b836001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b884604051610d6291815260200190565b60405180910390a260335460405163079cc67960e41b81526001600160a01b03868116600483015260248201869052909116906379cc679090604401600060405180830381600087803b158015610db857600080fd5b505af1158015610dcc573d6000803e3d6000fd5b5050603254604080517fe78cea9200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169350634a38757e9250839163e78cea9291600480820192602092909190829003018186803b158015610e3657600080fd5b505afa158015610e4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6e919061145f565b8585856040518563ffffffff1660e01b81526004016105e5949392919061147c565b816001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b882604051610ecb91815260200190565b60405180910390a260335460405163079cc67960e41b81526001600160a01b03848116600483015260248201849052909116906379cc679090604401600060405180830381600087803b158015610f2157600080fd5b505af1158015610f35573d6000803e3d6000fd5b50506032546040517f56a6d9ef0000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905290911692506356a6d9ef9150604401610a99565b60008211610fdb5760405162461bcd60e51b815260206004820152601460248201527f4368616e6765206e6f7420696e6974696174656400000000000000000000000060448201526064016102c8565b80610fe683426114af565b10156110345760405162461bcd60e51b815260206004820181905260248201527f476f7665726e616e63652064656c617920686173206e6f7420656c617073656460448201526064016102c8565b5050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff1983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b6001600160a01b038116811461075c57600080fd5b6000806000606084860312156110d057600080fd5b83356110db816110a6565b925060208401356110eb816110a6565b929592945050506040919091013590565b60008083601f84011261110e57600080fd5b50813567ffffffffffffffff81111561112657600080fd5b6020830191508360208260051b850101111561114157600080fd5b9250929050565b6000806000806040858703121561115e57600080fd5b843567ffffffffffffffff8082111561117657600080fd5b611182888389016110fc565b9096509450602087013591508082111561119b57600080fd5b506111a8878288016110fc565b95989497509550505050565b60008083601f8401126111c657600080fd5b50813567ffffffffffffffff8111156111de57600080fd5b60208301915083602082850101111561114157600080fd5b6000806000806060858703121561120c57600080fd5b8435611217816110a6565b935060208501359250604085013567ffffffffffffffff81111561123a57600080fd5b6111a8878288016111b4565b60006020828403121561125857600080fd5b8135611263816110a6565b9392505050565b60008060006040848603121561127f57600080fd5b83359250602084013567ffffffffffffffff81111561129d57600080fd5b6112a9868287016111b4565b9497909650939450505050565b6000602082840312156112c857600080fd5b5035919050565b6000806000806000608086880312156112e757600080fd5b85356112f2816110a6565b9450602086013593506040860135611309816110a6565b9250606086013567ffffffffffffffff81111561132557600080fd5b611331888289016111b4565b969995985093965092949392505050565b60008060008060006080868803121561135a57600080fd5b8535611365816110a6565b94506020860135611375816110a6565b935060408601359250606086013567ffffffffffffffff81111561132557600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156113d8576113d86113ae565b5060010190565b6000602082840312156113f157600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160a01b038088168352808716602084015250846040830152608060608301526114546080830184866113f8565b979650505050505050565b60006020828403121561147157600080fd5b8151611263816110a6565b6001600160a01b03851681528360208201526060604082015260006114a56060830184866113f8565b9695505050505050565b6000828210156114c1576114c16113ae565b50039056fea26469706673582212200f8bfa37abf07fe0f0b7d0c4323b017b9f180f7d5bce06dac02be2e3b3db907264736f6c63430008090033",
445
+ "bytecode": "0x60806040523480156200001157600080fd5b5060405162001d5c38038062001d5c83398101604081905262000034916200019d565b6200003f3362000134565b6001600160a01b0382166200009b5760405162461bcd60e51b815260206004820181905260248201527f42616e6b2063616e206e6f7420626520746865207a65726f206164647265737360448201526064015b60405180910390fd5b6001600160a01b038116620001025760405162461bcd60e51b815260206004820152602660248201527f5442544320746f6b656e2063616e206e6f7420626520746865207a65726f206160448201526564647265737360d01b606482015260840162000092565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055620001dc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200019a57600080fd5b50565b60008060408385031215620001b157600080fd5b8251620001be8162000184565b6020840151909250620001d18162000184565b809150509250929050565b611b7080620001ec6000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806388aaf0c8116100cd578063a0712d6811610081578063e5d3d71411610066578063e5d3d714146102b6578063f2fde38b146102c9578063fc4e51f6146102dc57600080fd5b8063a0712d6814610299578063cfce0816146102ac57600080fd5b80638f4ffcb1116100b25780638f4ffcb114610267578063951315261461027a5780639a508c8e1461029157600080fd5b806388aaf0c8146102435780638da5cb5b1461025657600080fd5b8063479aa9271161012457806364e779b11161010957806364e779b1146101f8578063715018a61461020b57806376cdb03b1461021357600080fd5b8063479aa927146101d257806353dce4df146101e557600080fd5b8063317dfa7611610155578063317dfa7614610199578063461c6373146101ac578063475d0570146101bf57600080fd5b80631171bda9146101715780632e73e39814610186575b600080fd5b61018461017f3660046116a0565b6102ef565b005b61018461019436600461172a565b610367565b6101846101a73660046116a0565b61044b565b6101846101ba3660046117e2565b610531565b6101846101cd36600461184e565b610644565b6101846101e036600461189e565b6107f1565b6101846101f33660046118bb565b610915565b610184610206366004611907565b610921565b61018461092e565b600154610226906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b600354610226906001600160a01b031681565b6000546001600160a01b0316610226565b610184610275366004611920565b610994565b61028360045481565b60405190815260200161023a565b610184610a69565b6101846102a7366004611907565b610caf565b6102836201518081565b600254610226906001600160a01b031681565b6101846102d736600461189e565b610e03565b6101846102ea36600461172a565b610ee2565b6000546001600160a01b0316331461034e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6103626001600160a01b0384168383610f89565b505050565b6000546001600160a01b031633146103c15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610345565b6002546040517ffc4e51f60000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063fc4e51f690610412908890889088908890889060040161199f565b600060405180830381600087803b15801561042c57600080fd5b505af1158015610440573d6000803e3d6000fd5b505050505050505050565b6000546001600160a01b031633146104a55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610345565b6002546040517f1171bda90000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015284811660248301526044820184905290911690631171bda990606401600060405180830381600087803b15801561051457600080fd5b505af1158015610528573d6000803e3d6000fd5b50505050505050565b6001546001600160a01b0316331461058b5760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b000000000000000000006044820152606401610345565b826105d85760405162461bcd60e51b815260206004820152601760248201527f4e6f206465706f7369746f7273207370656369666965640000000000000000006044820152606401610345565b60005b8381101561063d5761062b8585838181106105f8576105f86119d2565b905060200201602081019061060d919061189e565b84848481811061061f5761061f6119d2565b90506020020135611009565b80610635816119fe565b9150506105db565b5050505050565b6001546001600160a01b0316331461069e5760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b000000000000000000006044820152606401610345565b6001546040516370a0823160e01b81526001600160a01b038681166004830152859216906370a082319060240160206040518083038186803b1580156106e357600080fd5b505afa1580156106f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071b9190611a19565b10156107745760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b6064820152608401610345565b61077e8484611009565b600154604051631f1b6d2760e21b81526001600160a01b0386811660048301523060248301526044820186905290911690637c6db49c906064015b600060405180830381600087803b1580156107d357600080fd5b505af11580156107e7573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b0316331461084b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610345565b6001600160a01b0381166108a15760405162461bcd60e51b815260206004820181905260248201527f4e6577207661756c7420616464726573732063616e6e6f74206265207a65726f6044820152606401610345565b604080516001600160a01b03831681524260208201527f5cc842cab066489e13292128663547c68705dbf476f0131e0107f155719c6124910160405180910390a1426004556003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6103623384848461109e565b61092b3382611207565b50565b6000546001600160a01b031633146109885760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610345565b6109926000611302565b565b6002546001600160a01b038481169116146109f15760405162461bcd60e51b815260206004820152601160248201527f546f6b656e206973206e6f7420544254430000000000000000000000000000006044820152606401610345565b336001600160a01b03841614610a495760405162461bcd60e51b815260206004820152601860248201527f4f6e6c7920544254432063616c6c657220616c6c6f77656400000000000000006044820152606401610345565b80610a5d57610a588585611207565b61063d565b61063d8585848461109e565b6000546001600160a01b03163314610ac35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610345565b610ad26004546201518061135f565b6003546040516001600160a01b0390911681527f81a9bb8030ed4116b405800280e065110a37afb57b69948e714c97fab23475ec9060200160405180910390a16002546003546040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b158015610b7457600080fd5b505af1158015610b88573d6000803e3d6000fd5b50506001546003546040516370a0823160e01b81523060048201526001600160a01b0392831694506356a6d9ef935091169083906370a082319060240160206040518083038186803b158015610bdd57600080fd5b505afa158015610bf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c159190611a19565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015610c7357600080fd5b505af1158015610c87573d6000803e3d6000fd5b50506003805473ffffffffffffffffffffffffffffffffffffffff1916905550506000600455565b6001546040516370a0823160e01b815233600482018190529183916001600160a01b03909116906370a082319060240160206040518083038186803b158015610cf757600080fd5b505afa158015610d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2f9190611a19565b1015610d885760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b6064820152608401610345565b610d928183611009565b600154604051631f1b6d2760e21b81526001600160a01b0383811660048301523060248301526044820185905290911690637c6db49c906064015b600060405180830381600087803b158015610de757600080fd5b505af1158015610dfb573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610e5d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610345565b6001600160a01b038116610ed95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610345565b61092b81611302565b6000546001600160a01b03163314610f3c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610345565b6040517fb88d4fde0000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063b88d4fde90610412903090889088908890889060040161199f565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261036290849061140c565b816001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe8260405161104491815260200190565b60405180910390a26002546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260248201849052909116906340c10f1990604401610dcd565b836001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b8846040516110d991815260200190565b60405180910390a260025460405163079cc67960e41b81526001600160a01b03868116600483015260248201869052909116906379cc679090604401600060405180830381600087803b15801561112f57600080fd5b505af1158015611143573d6000803e3d6000fd5b5050600154604080517fe78cea9200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169350634a38757e9250839163e78cea9291600480820192602092909190829003018186803b1580156111ad57600080fd5b505afa1580156111c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e59190611a32565b8585856040518563ffffffff1660e01b81526004016107b99493929190611a4f565b816001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b88260405161124291815260200190565b60405180910390a260025460405163079cc67960e41b81526001600160a01b03848116600483015260248201849052909116906379cc679090604401600060405180830381600087803b15801561129857600080fd5b505af11580156112ac573d6000803e3d6000fd5b50506001546040517f56a6d9ef0000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905290911692506356a6d9ef9150604401610dcd565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082116113af5760405162461bcd60e51b815260206004820152601460248201527f4368616e6765206e6f7420696e697469617465640000000000000000000000006044820152606401610345565b806113ba8342611a82565b10156114085760405162461bcd60e51b815260206004820181905260248201527f476f7665726e616e63652064656c617920686173206e6f7420656c61707365646044820152606401610345565b5050565b6000611461826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166114f19092919063ffffffff16565b805190915015610362578080602001905181019061147f9190611a99565b6103625760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610345565b6060611500848460008561150a565b90505b9392505050565b6060824710156115825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610345565b6001600160a01b0385163b6115d95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610345565b600080866001600160a01b031685876040516115f59190611aeb565b60006040518083038185875af1925050503d8060008114611632576040519150601f19603f3d011682016040523d82523d6000602084013e611637565b606091505b5091509150611647828286611652565b979650505050505050565b60608315611661575081611503565b8251156116715782518084602001fd5b8160405162461bcd60e51b81526004016103459190611b07565b6001600160a01b038116811461092b57600080fd5b6000806000606084860312156116b557600080fd5b83356116c08161168b565b925060208401356116d08161168b565b929592945050506040919091013590565b60008083601f8401126116f357600080fd5b50813567ffffffffffffffff81111561170b57600080fd5b60208301915083602082850101111561172357600080fd5b9250929050565b60008060008060006080868803121561174257600080fd5b853561174d8161168b565b9450602086013561175d8161168b565b935060408601359250606086013567ffffffffffffffff81111561178057600080fd5b61178c888289016116e1565b969995985093965092949392505050565b60008083601f8401126117af57600080fd5b50813567ffffffffffffffff8111156117c757600080fd5b6020830191508360208260051b850101111561172357600080fd5b600080600080604085870312156117f857600080fd5b843567ffffffffffffffff8082111561181057600080fd5b61181c8883890161179d565b9096509450602087013591508082111561183557600080fd5b506118428782880161179d565b95989497509550505050565b6000806000806060858703121561186457600080fd5b843561186f8161168b565b935060208501359250604085013567ffffffffffffffff81111561189257600080fd5b611842878288016116e1565b6000602082840312156118b057600080fd5b81356115038161168b565b6000806000604084860312156118d057600080fd5b83359250602084013567ffffffffffffffff8111156118ee57600080fd5b6118fa868287016116e1565b9497909650939450505050565b60006020828403121561191957600080fd5b5035919050565b60008060008060006080868803121561193857600080fd5b85356119438161168b565b945060208601359350604086013561195a8161168b565b9250606086013567ffffffffffffffff81111561178057600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160a01b03808816835280871660208401525084604083015260806060830152611647608083018486611976565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611a1257611a126119e8565b5060010190565b600060208284031215611a2b57600080fd5b5051919050565b600060208284031215611a4457600080fd5b81516115038161168b565b6001600160a01b0385168152836020820152606060408201526000611a78606083018486611976565b9695505050505050565b600082821015611a9457611a946119e8565b500390565b600060208284031215611aab57600080fd5b8151801515811461150357600080fd5b60005b83811015611ad6578181015183820152602001611abe565b83811115611ae5576000848401525b50505050565b60008251611afd818460208701611abb565b9190910192915050565b6020815260008251806020840152611b26816040850160208701611abb565b601f01601f1916919091016040019291505056fea26469706673582212202f0ac7db0281ac8c0004326c7e746d4b696bcf247bcd9c4847c3d196e8ecc35464736f6c63430008090033",
446
+ "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061016c5760003560e01c806388aaf0c8116100cd578063a0712d6811610081578063e5d3d71411610066578063e5d3d714146102b6578063f2fde38b146102c9578063fc4e51f6146102dc57600080fd5b8063a0712d6814610299578063cfce0816146102ac57600080fd5b80638f4ffcb1116100b25780638f4ffcb114610267578063951315261461027a5780639a508c8e1461029157600080fd5b806388aaf0c8146102435780638da5cb5b1461025657600080fd5b8063479aa9271161012457806364e779b11161010957806364e779b1146101f8578063715018a61461020b57806376cdb03b1461021357600080fd5b8063479aa927146101d257806353dce4df146101e557600080fd5b8063317dfa7611610155578063317dfa7614610199578063461c6373146101ac578063475d0570146101bf57600080fd5b80631171bda9146101715780632e73e39814610186575b600080fd5b61018461017f3660046116a0565b6102ef565b005b61018461019436600461172a565b610367565b6101846101a73660046116a0565b61044b565b6101846101ba3660046117e2565b610531565b6101846101cd36600461184e565b610644565b6101846101e036600461189e565b6107f1565b6101846101f33660046118bb565b610915565b610184610206366004611907565b610921565b61018461092e565b600154610226906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b600354610226906001600160a01b031681565b6000546001600160a01b0316610226565b610184610275366004611920565b610994565b61028360045481565b60405190815260200161023a565b610184610a69565b6101846102a7366004611907565b610caf565b6102836201518081565b600254610226906001600160a01b031681565b6101846102d736600461189e565b610e03565b6101846102ea36600461172a565b610ee2565b6000546001600160a01b0316331461034e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6103626001600160a01b0384168383610f89565b505050565b6000546001600160a01b031633146103c15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610345565b6002546040517ffc4e51f60000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063fc4e51f690610412908890889088908890889060040161199f565b600060405180830381600087803b15801561042c57600080fd5b505af1158015610440573d6000803e3d6000fd5b505050505050505050565b6000546001600160a01b031633146104a55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610345565b6002546040517f1171bda90000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015284811660248301526044820184905290911690631171bda990606401600060405180830381600087803b15801561051457600080fd5b505af1158015610528573d6000803e3d6000fd5b50505050505050565b6001546001600160a01b0316331461058b5760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b000000000000000000006044820152606401610345565b826105d85760405162461bcd60e51b815260206004820152601760248201527f4e6f206465706f7369746f7273207370656369666965640000000000000000006044820152606401610345565b60005b8381101561063d5761062b8585838181106105f8576105f86119d2565b905060200201602081019061060d919061189e565b84848481811061061f5761061f6119d2565b90506020020135611009565b80610635816119fe565b9150506105db565b5050505050565b6001546001600160a01b0316331461069e5760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b000000000000000000006044820152606401610345565b6001546040516370a0823160e01b81526001600160a01b038681166004830152859216906370a082319060240160206040518083038186803b1580156106e357600080fd5b505afa1580156106f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071b9190611a19565b10156107745760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b6064820152608401610345565b61077e8484611009565b600154604051631f1b6d2760e21b81526001600160a01b0386811660048301523060248301526044820186905290911690637c6db49c906064015b600060405180830381600087803b1580156107d357600080fd5b505af11580156107e7573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b0316331461084b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610345565b6001600160a01b0381166108a15760405162461bcd60e51b815260206004820181905260248201527f4e6577207661756c7420616464726573732063616e6e6f74206265207a65726f6044820152606401610345565b604080516001600160a01b03831681524260208201527f5cc842cab066489e13292128663547c68705dbf476f0131e0107f155719c6124910160405180910390a1426004556003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6103623384848461109e565b61092b3382611207565b50565b6000546001600160a01b031633146109885760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610345565b6109926000611302565b565b6002546001600160a01b038481169116146109f15760405162461bcd60e51b815260206004820152601160248201527f546f6b656e206973206e6f7420544254430000000000000000000000000000006044820152606401610345565b336001600160a01b03841614610a495760405162461bcd60e51b815260206004820152601860248201527f4f6e6c7920544254432063616c6c657220616c6c6f77656400000000000000006044820152606401610345565b80610a5d57610a588585611207565b61063d565b61063d8585848461109e565b6000546001600160a01b03163314610ac35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610345565b610ad26004546201518061135f565b6003546040516001600160a01b0390911681527f81a9bb8030ed4116b405800280e065110a37afb57b69948e714c97fab23475ec9060200160405180910390a16002546003546040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b158015610b7457600080fd5b505af1158015610b88573d6000803e3d6000fd5b50506001546003546040516370a0823160e01b81523060048201526001600160a01b0392831694506356a6d9ef935091169083906370a082319060240160206040518083038186803b158015610bdd57600080fd5b505afa158015610bf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c159190611a19565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015610c7357600080fd5b505af1158015610c87573d6000803e3d6000fd5b50506003805473ffffffffffffffffffffffffffffffffffffffff1916905550506000600455565b6001546040516370a0823160e01b815233600482018190529183916001600160a01b03909116906370a082319060240160206040518083038186803b158015610cf757600080fd5b505afa158015610d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2f9190611a19565b1015610d885760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b6064820152608401610345565b610d928183611009565b600154604051631f1b6d2760e21b81526001600160a01b0383811660048301523060248301526044820185905290911690637c6db49c906064015b600060405180830381600087803b158015610de757600080fd5b505af1158015610dfb573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610e5d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610345565b6001600160a01b038116610ed95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610345565b61092b81611302565b6000546001600160a01b03163314610f3c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610345565b6040517fb88d4fde0000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063b88d4fde90610412903090889088908890889060040161199f565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261036290849061140c565b816001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe8260405161104491815260200190565b60405180910390a26002546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260248201849052909116906340c10f1990604401610dcd565b836001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b8846040516110d991815260200190565b60405180910390a260025460405163079cc67960e41b81526001600160a01b03868116600483015260248201869052909116906379cc679090604401600060405180830381600087803b15801561112f57600080fd5b505af1158015611143573d6000803e3d6000fd5b5050600154604080517fe78cea9200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169350634a38757e9250839163e78cea9291600480820192602092909190829003018186803b1580156111ad57600080fd5b505afa1580156111c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e59190611a32565b8585856040518563ffffffff1660e01b81526004016107b99493929190611a4f565b816001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b88260405161124291815260200190565b60405180910390a260025460405163079cc67960e41b81526001600160a01b03848116600483015260248201849052909116906379cc679090604401600060405180830381600087803b15801561129857600080fd5b505af11580156112ac573d6000803e3d6000fd5b50506001546040517f56a6d9ef0000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905290911692506356a6d9ef9150604401610dcd565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082116113af5760405162461bcd60e51b815260206004820152601460248201527f4368616e6765206e6f7420696e697469617465640000000000000000000000006044820152606401610345565b806113ba8342611a82565b10156114085760405162461bcd60e51b815260206004820181905260248201527f476f7665726e616e63652064656c617920686173206e6f7420656c61707365646044820152606401610345565b5050565b6000611461826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166114f19092919063ffffffff16565b805190915015610362578080602001905181019061147f9190611a99565b6103625760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610345565b6060611500848460008561150a565b90505b9392505050565b6060824710156115825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610345565b6001600160a01b0385163b6115d95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610345565b600080866001600160a01b031685876040516115f59190611aeb565b60006040518083038185875af1925050503d8060008114611632576040519150601f19603f3d011682016040523d82523d6000602084013e611637565b606091505b5091509150611647828286611652565b979650505050505050565b60608315611661575081611503565b8251156116715782518084602001fd5b8160405162461bcd60e51b81526004016103459190611b07565b6001600160a01b038116811461092b57600080fd5b6000806000606084860312156116b557600080fd5b83356116c08161168b565b925060208401356116d08161168b565b929592945050506040919091013590565b60008083601f8401126116f357600080fd5b50813567ffffffffffffffff81111561170b57600080fd5b60208301915083602082850101111561172357600080fd5b9250929050565b60008060008060006080868803121561174257600080fd5b853561174d8161168b565b9450602086013561175d8161168b565b935060408601359250606086013567ffffffffffffffff81111561178057600080fd5b61178c888289016116e1565b969995985093965092949392505050565b60008083601f8401126117af57600080fd5b50813567ffffffffffffffff8111156117c757600080fd5b6020830191508360208260051b850101111561172357600080fd5b600080600080604085870312156117f857600080fd5b843567ffffffffffffffff8082111561181057600080fd5b61181c8883890161179d565b9096509450602087013591508082111561183557600080fd5b506118428782880161179d565b95989497509550505050565b6000806000806060858703121561186457600080fd5b843561186f8161168b565b935060208501359250604085013567ffffffffffffffff81111561189257600080fd5b611842878288016116e1565b6000602082840312156118b057600080fd5b81356115038161168b565b6000806000604084860312156118d057600080fd5b83359250602084013567ffffffffffffffff8111156118ee57600080fd5b6118fa868287016116e1565b9497909650939450505050565b60006020828403121561191957600080fd5b5035919050565b60008060008060006080868803121561193857600080fd5b85356119438161168b565b945060208601359350604086013561195a8161168b565b9250606086013567ffffffffffffffff81111561178057600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160a01b03808816835280871660208401525084604083015260806060830152611647608083018486611976565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611a1257611a126119e8565b5060010190565b600060208284031215611a2b57600080fd5b5051919050565b600060208284031215611a4457600080fd5b81516115038161168b565b6001600160a01b0385168152836020820152606060408201526000611a78606083018486611976565b9695505050505050565b600082821015611a9457611a946119e8565b500390565b600060208284031215611aab57600080fd5b8151801515811461150357600080fd5b60005b83811015611ad6578181015183820152602001611abe565b83811115611ae5576000848401525b50505050565b60008251611afd818460208701611abb565b9190910192915050565b6020815260008251806020840152611b26816040850160208701611abb565b601f01601f1916919091016040019291505056fea26469706673582212202f0ac7db0281ac8c0004326c7e746d4b696bcf247bcd9c4847c3d196e8ecc35464736f6c63430008090033",
389
447
  "linkReferences": {},
390
448
  "deployedLinkReferences": {}
391
449
  }
@@ -15,7 +15,7 @@
15
15
 
16
16
  pragma solidity ^0.8.9;
17
17
 
18
- import "@keep-network/random-beacon/contracts/Governable.sol";
18
+ import "@openzeppelin/contracts/access/Ownable.sol";
19
19
 
20
20
  import "./IVault.sol";
21
21
  import "../bank/Bank.sol";
@@ -30,7 +30,9 @@ import "../GovernanceUtils.sol";
30
30
  /// Bank.
31
31
  /// @dev TBTC Vault is the owner of TBTC token contract and is the only contract
32
32
  /// minting the token.
33
- contract TBTCVault is IVault, Governable {
33
+ contract TBTCVault is IVault, Ownable {
34
+ using SafeERC20 for IERC20;
35
+
34
36
  /// @notice The time delay that needs to pass between initializing and
35
37
  /// finalizing upgrade to a new vault. The time delay forces the
36
38
  /// upgrading party to reflect on the vault address it is upgrading
@@ -81,36 +83,6 @@ contract TBTCVault is IVault, Governable {
81
83
 
82
84
  bank = _bank;
83
85
  tbtcToken = _tbtcToken;
84
-
85
- _transferGovernance(msg.sender);
86
- }
87
-
88
- /// @notice Allows the governance of the TBTCVault to recover any ERC20
89
- /// token sent mistakenly to the TBTC token contract address.
90
- /// @param token Address of the recovered ERC20 token contract.
91
- /// @param recipient Address the recovered token should be sent to.
92
- /// @param amount Recovered amount.
93
- function recoverERC20(
94
- IERC20 token,
95
- address recipient,
96
- uint256 amount
97
- ) external onlyGovernance {
98
- tbtcToken.recoverERC20(token, recipient, amount);
99
- }
100
-
101
- /// @notice Allows the governance of the TBTCVault to recover any ERC721
102
- /// token sent mistakenly to the TBTC token contract address.
103
- /// @param token Address of the recovered ERC721 token contract.
104
- /// @param recipient Address the recovered token should be sent to.
105
- /// @param tokenId Identifier of the recovered token.
106
- /// @param data Additional data.
107
- function recoverERC721(
108
- IERC721 token,
109
- address recipient,
110
- uint256 tokenId,
111
- bytes calldata data
112
- ) external onlyGovernance {
113
- tbtcToken.recoverERC721(token, recipient, tokenId, data);
114
86
  }
115
87
 
116
88
  /// @notice Transfers the given `amount` of the Bank balance from caller
@@ -223,7 +195,7 @@ contract TBTCVault is IVault, Governable {
223
195
  /// `UPGRADE_GOVERNANCE_DELAY` passes. Only the governance can
224
196
  /// initiate the upgrade.
225
197
  /// @param _newVault The new vault address.
226
- function initiateUpgrade(address _newVault) external onlyGovernance {
198
+ function initiateUpgrade(address _newVault) external onlyOwner {
227
199
  require(_newVault != address(0), "New vault address cannot be zero");
228
200
  /* solhint-disable-next-line not-rely-on-time */
229
201
  emit UpgradeInitiated(_newVault, block.timestamp);
@@ -235,20 +207,80 @@ contract TBTCVault is IVault, Governable {
235
207
  /// @notice Allows the governance to finalize vault upgrade process. The
236
208
  /// upgrade process needs to be first initiated with a call to
237
209
  /// `initiateUpgrade` and the `UPGRADE_GOVERNANCE_DELAY` needs to
238
- /// pass. Once the upgrade is finalized, the new vault will become
239
- /// an owner of TBTC token.
210
+ /// pass. Once the upgrade is finalized, the new vault becomes the
211
+ /// owner of the TBTC token and receives the whole Bank balance of
212
+ /// this vault.
240
213
  function finalizeUpgrade()
241
214
  external
242
- onlyGovernance
215
+ onlyOwner
243
216
  onlyAfterUpgradeGovernanceDelay
244
217
  {
245
218
  emit UpgradeFinalized(newVault);
246
219
  // slither-disable-next-line reentrancy-no-eth
247
220
  tbtcToken.transferOwnership(newVault);
221
+ bank.transferBalance(newVault, bank.balanceOf(address(this)));
248
222
  newVault = address(0);
249
223
  upgradeInitiatedTimestamp = 0;
250
224
  }
251
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 onlyOwner {
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 onlyOwner {
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 onlyOwner {
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 onlyOwner {
281
+ token.safeTransferFrom(address(this), recipient, tokenId, data);
282
+ }
283
+
252
284
  // slither-disable-next-line calls-loop
253
285
  function _mint(address minter, uint256 amount) internal {
254
286
  emit Minted(minter, amount);
@@ -38,7 +38,7 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
38
38
 
39
39
  export default func
40
40
 
41
- func.tags = ["TransferRoles"]
41
+ func.tags = ["TransferVendingMachineRoles"]
42
42
  func.dependencies = ["TBTC", "VendingMachine"]
43
43
  func.runAtTheEnd = true
44
44
  func.skip = async function (hre: HardhatRuntimeEnvironment): Promise<boolean> {
@@ -10,6 +10,6 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
10
10
 
11
11
  export default func
12
12
 
13
- func.tags = ["TransferOwnership"]
13
+ func.tags = ["TransferBankOwnership"]
14
14
  func.dependencies = ["Bank"]
15
15
  func.runAtTheEnd = true
@@ -0,0 +1,15 @@
1
+ import { HardhatRuntimeEnvironment } from "hardhat/types"
2
+ import { DeployFunction } from "hardhat-deploy/types"
3
+
4
+ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
5
+ const { getNamedAccounts, helpers } = hre
6
+ const { deployer, governance } = await getNamedAccounts()
7
+
8
+ await helpers.ownable.transferOwnership("TBTCVault", governance, deployer)
9
+ }
10
+
11
+ export default func
12
+
13
+ func.tags = ["TransferTBTCVaultOwnership"]
14
+ func.dependencies = ["TBTCVault"]
15
+ func.runAtTheEnd = true
@@ -15,6 +15,6 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
15
15
 
16
16
  export default func
17
17
 
18
- func.tags = ["TransferGovernance"]
18
+ func.tags = ["TransferBridgeGovernance"]
19
19
  func.dependencies = ["Bridge"]
20
20
  func.runAtTheEnd = true