@keep-network/tbtc-v2 0.1.1-dev.48 → 0.1.1-dev.50
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 +34 -24
- package/artifacts/Bridge.json +490 -165
- package/artifacts/Deposit.json +9 -9
- package/artifacts/EcdsaDkgValidator.json +1 -1
- package/artifacts/EcdsaInactivity.json +1 -1
- package/artifacts/Fraud.json +7 -7
- 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 +32 -9
- package/artifacts/NuCypherStakingEscrow.json +1 -1
- package/artifacts/NuCypherToken.json +2 -2
- package/artifacts/RandomBeaconStub.json +1 -1
- package/artifacts/Redemption.json +9 -9
- package/artifacts/ReimbursementPool.json +2 -2
- package/artifacts/Relay.json +9 -9
- package/artifacts/SortitionPool.json +2 -2
- package/artifacts/Sweep.json +9 -9
- package/artifacts/T.json +2 -2
- package/artifacts/TBTC.json +3 -3
- package/artifacts/TBTCToken.json +3 -3
- package/artifacts/TokenStaking.json +1 -1
- package/artifacts/TokenholderGovernor.json +9 -9
- package/artifacts/TokenholderTimelock.json +8 -8
- package/artifacts/VendingMachine.json +10 -10
- package/artifacts/VendingMachineKeep.json +1 -1
- package/artifacts/VendingMachineNuCypher.json +1 -1
- package/artifacts/WalletRegistry.json +2 -2
- package/artifacts/WalletRegistryGovernance.json +2 -2
- package/artifacts/Wallets.json +7 -7
- package/artifacts/solcInputs/{f49989846c3f5df5088d1ac309787c24.json → b0c3ed0992bd570aaaee717425c37538.json} +3 -3
- package/build/contracts/GovernanceUtils.sol/GovernanceUtils.dbg.json +1 -1
- package/build/contracts/bank/Bank.sol/Bank.dbg.json +1 -1
- package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.dbg.json +1 -1
- package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.json +2 -2
- package/build/contracts/bridge/Bridge.sol/Bridge.dbg.json +1 -1
- package/build/contracts/bridge/Bridge.sol/Bridge.json +109 -32
- package/build/contracts/bridge/BridgeState.sol/BridgeState.dbg.json +1 -1
- package/build/contracts/bridge/BridgeState.sol/BridgeState.json +8 -2
- package/build/contracts/bridge/Deposit.sol/Deposit.dbg.json +1 -1
- package/build/contracts/bridge/Deposit.sol/Deposit.json +2 -2
- package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.dbg.json +1 -1
- package/build/contracts/bridge/Fraud.sol/Fraud.dbg.json +1 -1
- package/build/contracts/bridge/Fraud.sol/Fraud.json +2 -2
- package/build/contracts/bridge/IRelay.sol/IRelay.dbg.json +1 -1
- package/build/contracts/bridge/MovingFunds.sol/MovingFunds.dbg.json +1 -1
- package/build/contracts/bridge/MovingFunds.sol/MovingFunds.json +15 -2
- package/build/contracts/bridge/Redemption.sol/OutboundTx.dbg.json +1 -1
- package/build/contracts/bridge/Redemption.sol/OutboundTx.json +2 -2
- package/build/contracts/bridge/Redemption.sol/Redemption.dbg.json +1 -1
- package/build/contracts/bridge/Redemption.sol/Redemption.json +2 -2
- package/build/contracts/bridge/Sweep.sol/Sweep.dbg.json +1 -1
- package/build/contracts/bridge/Sweep.sol/Sweep.json +2 -2
- package/build/contracts/bridge/VendingMachine.sol/VendingMachine.dbg.json +1 -1
- package/build/contracts/bridge/Wallets.sol/Wallets.dbg.json +1 -1
- package/build/contracts/bridge/Wallets.sol/Wallets.json +2 -2
- package/build/contracts/token/TBTC.sol/TBTC.dbg.json +1 -1
- package/build/contracts/vault/IVault.sol/IVault.dbg.json +1 -1
- package/build/contracts/vault/TBTCVault.sol/TBTCVault.dbg.json +1 -1
- package/contracts/bridge/Bridge.sol +54 -5
- package/contracts/bridge/BridgeState.sol +25 -3
- package/contracts/bridge/MovingFunds.sol +45 -0
- package/deploy/04_deploy_bank.ts +2 -0
- package/deploy/05_deploy_bridge.ts +5 -1
- package/export.json +347 -6
- package/package.json +1 -1
|
@@ -105,8 +105,8 @@
|
|
|
105
105
|
"type": "event"
|
|
106
106
|
}
|
|
107
107
|
],
|
|
108
|
-
"bytecode": "
|
|
109
|
-
"deployedBytecode": "
|
|
108
|
+
"bytecode": "0x610fb261003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c80634afbe4c91461005b57806399b0b8471461007d578063c87de7f41461009d578063d079fbb1146100bd575b600080fd5b81801561006757600080fd5b5061007b610076366004610d56565b6100dd565b005b81801561008957600080fd5b5061007b610098366004610da0565b610305565b8180156100a957600080fd5b5061007b6100b8366004610df1565b610526565b8180156100c957600080fd5b5061007b6100d8366004610e1d565b61064c565b60028401546001600160a01b0316331461014e5760405162461bcd60e51b815260206004820152602760248201527f43616c6c6572206973206e6f74207468652045434453412057616c6c657420526044820152666567697374727960c81b60648201526084015b60405180910390fd5b600061016261015d848461094b565b6109f5565b6bffffffffffffffffffffffff198116600090815260168701602052604081209192506002820154600160a01b900460ff1660058111156101a5576101a5610e4a565b146102185760405162461bcd60e51b815260206004820152602860248201527f45434453412077616c6c657420686173206265656e20616c726561647920726560448201527f67697374657265640000000000000000000000000000000000000000000000006064820152608401610145565b848155600281018054600160a01b63ffffffff42811668010000000000000000027fffffffffffffffffffffff00ffffffffffffffff00000000ffffffffffffffff90931692909217811790925560148881018054606087901c73ffffffffffffffffffffffffffffffffffffffff19909116178082559390930490911691906102a183610e76565b91906101000a81548163ffffffff021916908363ffffffff16021790555050816bffffffffffffffffffffffff1916857f2dbb47dce81d6b11cca1f1e3b10143d6f7e1e7e92d2dd9aacbb1f875379d308e60405160405180910390a3505050505050565b601483015460601b6bffffffffffffffffffffffff1990811690831614156103955760405162461bcd60e51b815260206004820152602c60248201527f4163746976652077616c6c65742063616e6e6f7420626520636f6e736964657260448201527f656420636c6f736561626c6500000000000000000000000000000000000000006064820152608401610145565b6bffffffffffffffffffffffff1982166000908152601684016020526040902060016002820154600160a01b900460ff1660058111156103d7576103d7610e4a565b1461042f5760405162461bcd60e51b815260206004820152602260248201527f45434453412077616c6c6574206d75737420626520696e204c69766520737461604482015261746560f01b6064820152608401610145565b601384015460028201546000916104639163ffffffff600160a01b9092048216916801000000000000000090910416610e9a565b63ffffffff16421015905080806104a357506013850154640100000000900467ffffffffffffffff16610497868686610a1c565b67ffffffffffffffff16105b6105155760405162461bcd60e51b815260206004820152603660248201527f57616c6c6574206e6565647320746f206265206f6c6420656e6f756768206f7260448201527f206861766520746f6f20666577207361746f73686973000000000000000000006064820152608401610145565b61051f8585610b54565b5050505050565b60028301546001600160a01b031633146105925760405162461bcd60e51b815260206004820152602760248201527f43616c6c6572206973206e6f74207468652045434453412057616c6c657420526044820152666567697374727960c81b6064820152608401610145565b60006105a161015d848461094b565b905060016bffffffffffffffffffffffff1982166000908152601686016020526040902060020154600160a01b900460ff1660058111156105e4576105e4610e4a565b1461063c5760405162461bcd60e51b815260206004820152602260248201527f45434453412077616c6c6574206d75737420626520696e204c69766520737461604482015261746560f01b6064820152608401610145565b6106468482610b54565b50505050565b6002820154604080517fcc56238800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163cc562388916004808301926020929190829003018186803b1580156106ac57600080fd5b505afa1580156106c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e49190610ec2565b60038111156106f5576106f5610e4a565b146107685760405162461bcd60e51b815260206004820152602360248201527f57616c6c6574206372656174696f6e20616c726561647920696e2070726f677260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610145565b601482015460601b6bffffffffffffffffffffffff198116156108b3576000610792848385610a1c565b6bffffffffffffffffffffffff1983166000908152601686016020526040812060020154601387015492935063ffffffff680100000000000000009091048116926107de911683610e9a565b63ffffffff1642101590508080156108105750601386015467ffffffffffffffff640100000000909104811690841610155b8061083d5750601386015467ffffffffffffffff6c01000000000000000000000000909104811690841610155b6108af5760405162461bcd60e51b815260206004820152602660248201527f57616c6c6574206372656174696f6e20636f6e646974696f6e7320617265206e60448201527f6f74206d657400000000000000000000000000000000000000000000000000006064820152608401610145565b5050505b6040517f31fecb80caf1e1128496dd5a6f1083ba29fd5fe64c3fe04e2d1b6f9cfc27d5a390600090a18260020160009054906101000a90046001600160a01b03166001600160a01b03166372cc8c6d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561092e57600080fd5b505af1158015610942573d6000803e3d6000fd5b50505050505050565b6060600061095a600284610eea565b61098557507f02000000000000000000000000000000000000000000000000000000000000006109a8565b507f03000000000000000000000000000000000000000000000000000000000000005b6040517fff00000000000000000000000000000000000000000000000000000000000000821660208201526021810185905260410160405160208183030381529060405291505092915050565b60006020600083516020850160025afa50602060006020600060035afa5050600c51919050565b6bffffffffffffffffffffffff19821660009081526016840160205260408120600101548015610b4c57808335610a596040860160208701610f0c565b610a696060870160408801610f32565b604051602001610ad69392919092835260e09190911b7fffffffff0000000000000000000000000000000000000000000000000000000016602083015260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166024820152602c0190565b6040516020818303038152906040528051906020012014610b395760405162461bcd60e51b815260206004820152601d60248201527f496e76616c69642077616c6c6574206d61696e205554584f20646174610000006044820152606401610145565b610b496060840160408501610f32565b91505b509392505050565b6bffffffffffffffffffffffff198116600090815260168301602052604090206001810154610b8c57610b878383610ca8565b610c24565b60028101805463ffffffff42166c01000000000000000000000000027fffffffffffffffffffffff00ffffffff00000000ffffffffffffffffffffffff909116177402000000000000000000000000000000000000000017905580546040516bffffffffffffffffffffffff19841691907fbdc9ce990a067e5fd3a5d8dfc68e27e9f221aaa3fe55265e0b7e93c460b3efe290600090a35b601483015460601b6bffffffffffffffffffffffff199081169083161415610c665760148301805473ffffffffffffffffffffffffffffffffffffffff191690555b60148381018054600160a01b900463ffffffff1691610c8483610f5c565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505050565b6bffffffffffffffffffffffff198116600081815260168401602052604080822060028101805463ffffffff4216700100000000000000000000000000000000027fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff9091161774030000000000000000000000000000000000000000179055805491519093927f68cb496f5e64383745876664ef119840f154a729c03ba866b8aecb5c9f53d51691a3505050565b60008060008060808587031215610d6c57600080fd5b5050823594602084013594506040840135936060013592509050565b600060608284031215610d9a57600080fd5b50919050565b600080600060a08486031215610db557600080fd5b8335925060208401356bffffffffffffffffffffffff1981168114610dd957600080fd5b9150610de88560408601610d88565b90509250925092565b600080600060608486031215610e0657600080fd5b505081359360208301359350604090920135919050565b60008060808385031215610e3057600080fd5b82359150610e418460208501610d88565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff80831681811415610e9057610e90610e60565b6001019392505050565b600063ffffffff808316818516808303821115610eb957610eb9610e60565b01949350505050565b600060208284031215610ed457600080fd5b815160048110610ee357600080fd5b9392505050565b600082610f0757634e487b7160e01b600052601260045260246000fd5b500690565b600060208284031215610f1e57600080fd5b813563ffffffff81168114610ee357600080fd5b600060208284031215610f4457600080fd5b813567ffffffffffffffff81168114610ee357600080fd5b600063ffffffff821680610f7257610f72610e60565b600019019291505056fea26469706673582212200efeaa9f46016dfb9fab44a04d24a9fc948bb1dc7639c1f14ce2ba562840880b64736f6c63430008090033",
|
|
109
|
+
"deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c80634afbe4c91461005b57806399b0b8471461007d578063c87de7f41461009d578063d079fbb1146100bd575b600080fd5b81801561006757600080fd5b5061007b610076366004610d56565b6100dd565b005b81801561008957600080fd5b5061007b610098366004610da0565b610305565b8180156100a957600080fd5b5061007b6100b8366004610df1565b610526565b8180156100c957600080fd5b5061007b6100d8366004610e1d565b61064c565b60028401546001600160a01b0316331461014e5760405162461bcd60e51b815260206004820152602760248201527f43616c6c6572206973206e6f74207468652045434453412057616c6c657420526044820152666567697374727960c81b60648201526084015b60405180910390fd5b600061016261015d848461094b565b6109f5565b6bffffffffffffffffffffffff198116600090815260168701602052604081209192506002820154600160a01b900460ff1660058111156101a5576101a5610e4a565b146102185760405162461bcd60e51b815260206004820152602860248201527f45434453412077616c6c657420686173206265656e20616c726561647920726560448201527f67697374657265640000000000000000000000000000000000000000000000006064820152608401610145565b848155600281018054600160a01b63ffffffff42811668010000000000000000027fffffffffffffffffffffff00ffffffffffffffff00000000ffffffffffffffff90931692909217811790925560148881018054606087901c73ffffffffffffffffffffffffffffffffffffffff19909116178082559390930490911691906102a183610e76565b91906101000a81548163ffffffff021916908363ffffffff16021790555050816bffffffffffffffffffffffff1916857f2dbb47dce81d6b11cca1f1e3b10143d6f7e1e7e92d2dd9aacbb1f875379d308e60405160405180910390a3505050505050565b601483015460601b6bffffffffffffffffffffffff1990811690831614156103955760405162461bcd60e51b815260206004820152602c60248201527f4163746976652077616c6c65742063616e6e6f7420626520636f6e736964657260448201527f656420636c6f736561626c6500000000000000000000000000000000000000006064820152608401610145565b6bffffffffffffffffffffffff1982166000908152601684016020526040902060016002820154600160a01b900460ff1660058111156103d7576103d7610e4a565b1461042f5760405162461bcd60e51b815260206004820152602260248201527f45434453412077616c6c6574206d75737420626520696e204c69766520737461604482015261746560f01b6064820152608401610145565b601384015460028201546000916104639163ffffffff600160a01b9092048216916801000000000000000090910416610e9a565b63ffffffff16421015905080806104a357506013850154640100000000900467ffffffffffffffff16610497868686610a1c565b67ffffffffffffffff16105b6105155760405162461bcd60e51b815260206004820152603660248201527f57616c6c6574206e6565647320746f206265206f6c6420656e6f756768206f7260448201527f206861766520746f6f20666577207361746f73686973000000000000000000006064820152608401610145565b61051f8585610b54565b5050505050565b60028301546001600160a01b031633146105925760405162461bcd60e51b815260206004820152602760248201527f43616c6c6572206973206e6f74207468652045434453412057616c6c657420526044820152666567697374727960c81b6064820152608401610145565b60006105a161015d848461094b565b905060016bffffffffffffffffffffffff1982166000908152601686016020526040902060020154600160a01b900460ff1660058111156105e4576105e4610e4a565b1461063c5760405162461bcd60e51b815260206004820152602260248201527f45434453412077616c6c6574206d75737420626520696e204c69766520737461604482015261746560f01b6064820152608401610145565b6106468482610b54565b50505050565b6002820154604080517fcc56238800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163cc562388916004808301926020929190829003018186803b1580156106ac57600080fd5b505afa1580156106c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e49190610ec2565b60038111156106f5576106f5610e4a565b146107685760405162461bcd60e51b815260206004820152602360248201527f57616c6c6574206372656174696f6e20616c726561647920696e2070726f677260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610145565b601482015460601b6bffffffffffffffffffffffff198116156108b3576000610792848385610a1c565b6bffffffffffffffffffffffff1983166000908152601686016020526040812060020154601387015492935063ffffffff680100000000000000009091048116926107de911683610e9a565b63ffffffff1642101590508080156108105750601386015467ffffffffffffffff640100000000909104811690841610155b8061083d5750601386015467ffffffffffffffff6c01000000000000000000000000909104811690841610155b6108af5760405162461bcd60e51b815260206004820152602660248201527f57616c6c6574206372656174696f6e20636f6e646974696f6e7320617265206e60448201527f6f74206d657400000000000000000000000000000000000000000000000000006064820152608401610145565b5050505b6040517f31fecb80caf1e1128496dd5a6f1083ba29fd5fe64c3fe04e2d1b6f9cfc27d5a390600090a18260020160009054906101000a90046001600160a01b03166001600160a01b03166372cc8c6d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561092e57600080fd5b505af1158015610942573d6000803e3d6000fd5b50505050505050565b6060600061095a600284610eea565b61098557507f02000000000000000000000000000000000000000000000000000000000000006109a8565b507f03000000000000000000000000000000000000000000000000000000000000005b6040517fff00000000000000000000000000000000000000000000000000000000000000821660208201526021810185905260410160405160208183030381529060405291505092915050565b60006020600083516020850160025afa50602060006020600060035afa5050600c51919050565b6bffffffffffffffffffffffff19821660009081526016840160205260408120600101548015610b4c57808335610a596040860160208701610f0c565b610a696060870160408801610f32565b604051602001610ad69392919092835260e09190911b7fffffffff0000000000000000000000000000000000000000000000000000000016602083015260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166024820152602c0190565b6040516020818303038152906040528051906020012014610b395760405162461bcd60e51b815260206004820152601d60248201527f496e76616c69642077616c6c6574206d61696e205554584f20646174610000006044820152606401610145565b610b496060840160408501610f32565b91505b509392505050565b6bffffffffffffffffffffffff198116600090815260168301602052604090206001810154610b8c57610b878383610ca8565b610c24565b60028101805463ffffffff42166c01000000000000000000000000027fffffffffffffffffffffff00ffffffff00000000ffffffffffffffffffffffff909116177402000000000000000000000000000000000000000017905580546040516bffffffffffffffffffffffff19841691907fbdc9ce990a067e5fd3a5d8dfc68e27e9f221aaa3fe55265e0b7e93c460b3efe290600090a35b601483015460601b6bffffffffffffffffffffffff199081169083161415610c665760148301805473ffffffffffffffffffffffffffffffffffffffff191690555b60148381018054600160a01b900463ffffffff1691610c8483610f5c565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505050565b6bffffffffffffffffffffffff198116600081815260168401602052604080822060028101805463ffffffff4216700100000000000000000000000000000000027fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff9091161774030000000000000000000000000000000000000000179055805491519093927f68cb496f5e64383745876664ef119840f154a729c03ba866b8aecb5c9f53d51691a3505050565b60008060008060808587031215610d6c57600080fd5b5050823594602084013594506040840135936060013592509050565b600060608284031215610d9a57600080fd5b50919050565b600080600060a08486031215610db557600080fd5b8335925060208401356bffffffffffffffffffffffff1981168114610dd957600080fd5b9150610de88560408601610d88565b90509250925092565b600080600060608486031215610e0657600080fd5b505081359360208301359350604090920135919050565b60008060808385031215610e3057600080fd5b82359150610e418460208501610d88565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff80831681811415610e9057610e90610e60565b6001019392505050565b600063ffffffff808316818516808303821115610eb957610eb9610e60565b01949350505050565b600060208284031215610ed457600080fd5b815160048110610ee357600080fd5b9392505050565b600082610f0757634e487b7160e01b600052601260045260246000fd5b500690565b600060208284031215610f1e57600080fd5b813563ffffffff81168114610ee357600080fd5b600060208284031215610f4457600080fd5b813567ffffffffffffffff81168114610ee357600080fd5b600063ffffffff821680610f7257610f72610e60565b600019019291505056fea26469706673582212200efeaa9f46016dfb9fab44a04d24a9fc948bb1dc7639c1f14ce2ba562840880b64736f6c63430008090033",
|
|
110
110
|
"linkReferences": {},
|
|
111
111
|
"deployedLinkReferences": {}
|
|
112
112
|
}
|
|
@@ -119,6 +119,8 @@ contract Bridge is Governable, EcdsaWalletOwner {
|
|
|
119
119
|
|
|
120
120
|
event MovingFundsTimedOut(bytes20 walletPubKeyHash);
|
|
121
121
|
|
|
122
|
+
event MovingFundsBelowDustReported(bytes20 walletPubKeyHash);
|
|
123
|
+
|
|
122
124
|
event NewWalletRequested();
|
|
123
125
|
|
|
124
126
|
event NewWalletRegistered(
|
|
@@ -173,7 +175,8 @@ contract Bridge is Governable, EcdsaWalletOwner {
|
|
|
173
175
|
|
|
174
176
|
event MovingFundsParametersUpdated(
|
|
175
177
|
uint64 movingFundsTxMaxTotalFee,
|
|
176
|
-
uint32 movingFundsTimeout
|
|
178
|
+
uint32 movingFundsTimeout,
|
|
179
|
+
uint64 movingFundsDustThreshold
|
|
177
180
|
);
|
|
178
181
|
|
|
179
182
|
event WalletParametersUpdated(
|
|
@@ -226,6 +229,7 @@ contract Bridge is Governable, EcdsaWalletOwner {
|
|
|
226
229
|
self.redemptionTimeout = 172800; // 48 hours
|
|
227
230
|
self.movingFundsTxMaxTotalFee = 10000; // 10000 satoshi
|
|
228
231
|
self.movingFundsTimeout = 7 days;
|
|
232
|
+
self.movingFundsDustThreshold = 20000; // 20000 satoshi
|
|
229
233
|
self.fraudSlashingAmount = 10000 * 1e18; // 10000 T
|
|
230
234
|
self.fraudNotifierRewardMultiplier = 100; // 100%
|
|
231
235
|
self.fraudChallengeDefeatTimeout = 7 days;
|
|
@@ -581,6 +585,26 @@ contract Bridge is Governable, EcdsaWalletOwner {
|
|
|
581
585
|
self.notifyMovingFundsTimeout(walletPubKeyHash);
|
|
582
586
|
}
|
|
583
587
|
|
|
588
|
+
/// @notice Notifies about a moving funds wallet whose BTC balance is
|
|
589
|
+
/// below the moving funds dust threshold. Ends the moving funds
|
|
590
|
+
/// process and begins wallet closing immediately.
|
|
591
|
+
/// @param walletPubKeyHash 20-byte public key hash of the wallet
|
|
592
|
+
/// @param mainUtxo Data of the wallet's main UTXO, as currently known
|
|
593
|
+
/// on the Ethereum chain.
|
|
594
|
+
/// @dev Requirements:
|
|
595
|
+
/// - The wallet must be in the MovingFunds state
|
|
596
|
+
/// - The `mainUtxo` components must point to the recent main UTXO
|
|
597
|
+
/// of the given wallet, as currently known on the Ethereum chain.
|
|
598
|
+
/// If the wallet has no main UTXO, this parameter can be empty as it
|
|
599
|
+
/// is ignored.
|
|
600
|
+
/// - The wallet BTC balance must be below the moving funds threshold
|
|
601
|
+
function notifyMovingFundsBelowDust(
|
|
602
|
+
bytes20 walletPubKeyHash,
|
|
603
|
+
BitcoinTx.UTXO calldata mainUtxo
|
|
604
|
+
) external {
|
|
605
|
+
self.notifyMovingFundsBelowDust(walletPubKeyHash, mainUtxo);
|
|
606
|
+
}
|
|
607
|
+
|
|
584
608
|
/// @notice Requests creation of a new wallet. This function just
|
|
585
609
|
/// forms a request and the creation process is performed
|
|
586
610
|
/// asynchronously. Once a wallet is created, the ECDSA Wallet
|
|
@@ -896,16 +920,25 @@ contract Bridge is Governable, EcdsaWalletOwner {
|
|
|
896
920
|
/// be reported as timed out. It is counted from the moment when the
|
|
897
921
|
/// wallet was requested to move their funds and switched to the
|
|
898
922
|
/// MovingFunds state.
|
|
923
|
+
/// @param movingFundsDustThreshold New value of the moving funds dust
|
|
924
|
+
/// threshold. It is the minimal satoshi amount that makes sense to
|
|
925
|
+
// be transferred during the moving funds process. Moving funds
|
|
926
|
+
// wallets having their BTC balance below that value can begin
|
|
927
|
+
// closing immediately as transferring such a low value may not be
|
|
928
|
+
// possible due to BTC network fees.
|
|
899
929
|
/// @dev Requirements:
|
|
900
930
|
/// - Moving funds transaction max total fee must be greater than zero
|
|
901
931
|
/// - Moving funds timeout must be greater than zero
|
|
932
|
+
/// - Moving funds dust threshold must be greater than zero
|
|
902
933
|
function updateMovingFundsParameters(
|
|
903
934
|
uint64 movingFundsTxMaxTotalFee,
|
|
904
|
-
uint32 movingFundsTimeout
|
|
935
|
+
uint32 movingFundsTimeout,
|
|
936
|
+
uint64 movingFundsDustThreshold
|
|
905
937
|
) external onlyGovernance {
|
|
906
938
|
self.updateMovingFundsParameters(
|
|
907
939
|
movingFundsTxMaxTotalFee,
|
|
908
|
-
movingFundsTimeout
|
|
940
|
+
movingFundsTimeout,
|
|
941
|
+
movingFundsDustThreshold
|
|
909
942
|
);
|
|
910
943
|
}
|
|
911
944
|
|
|
@@ -1178,13 +1211,23 @@ contract Bridge is Governable, EcdsaWalletOwner {
|
|
|
1178
1211
|
/// can be reported as timed out. It is counted from the moment
|
|
1179
1212
|
/// when the wallet was requested to move their funds and switched
|
|
1180
1213
|
/// to the MovingFunds state. Value in seconds.
|
|
1214
|
+
/// @return movingFundsDustThreshold The minimal satoshi amount that makes
|
|
1215
|
+
// sense to be transferred during the moving funds process. Moving
|
|
1216
|
+
// funds wallets having their BTC balance below that value can
|
|
1217
|
+
// begin closing immediately as transferring such a low value may
|
|
1218
|
+
// not be possible due to BTC network fees.
|
|
1181
1219
|
function movingFundsParameters()
|
|
1182
1220
|
external
|
|
1183
1221
|
view
|
|
1184
|
-
returns (
|
|
1222
|
+
returns (
|
|
1223
|
+
uint64 movingFundsTxMaxTotalFee,
|
|
1224
|
+
uint32 movingFundsTimeout,
|
|
1225
|
+
uint64 movingFundsDustThreshold
|
|
1226
|
+
)
|
|
1185
1227
|
{
|
|
1186
1228
|
movingFundsTxMaxTotalFee = self.movingFundsTxMaxTotalFee;
|
|
1187
1229
|
movingFundsTimeout = self.movingFundsTimeout;
|
|
1230
|
+
movingFundsDustThreshold = self.movingFundsDustThreshold;
|
|
1188
1231
|
}
|
|
1189
1232
|
|
|
1190
1233
|
/// @return walletCreationPeriod Determines how frequently a new wallet
|
|
@@ -1252,13 +1295,19 @@ contract Bridge is Governable, EcdsaWalletOwner {
|
|
|
1252
1295
|
/// @return bank Address of the Bank the Bridge belongs to.
|
|
1253
1296
|
/// @return relay Address of the Bitcoin relay providing the current Bitcoin
|
|
1254
1297
|
/// network difficulty.
|
|
1298
|
+
/// @return ecdsaWalletRegistry Address of the ECDSA Wallet Registry.
|
|
1255
1299
|
function contractReferences()
|
|
1256
1300
|
external
|
|
1257
1301
|
view
|
|
1258
|
-
returns (
|
|
1302
|
+
returns (
|
|
1303
|
+
Bank bank,
|
|
1304
|
+
IRelay relay,
|
|
1305
|
+
EcdsaWalletRegistry ecdsaWalletRegistry
|
|
1306
|
+
)
|
|
1259
1307
|
{
|
|
1260
1308
|
bank = self.bank;
|
|
1261
1309
|
relay = self.relay;
|
|
1310
|
+
ecdsaWalletRegistry = self.ecdsaWalletRegistry;
|
|
1262
1311
|
}
|
|
1263
1312
|
|
|
1264
1313
|
/// @notice Address where the deposit treasury fees will be sent to.
|
|
@@ -88,6 +88,12 @@ library BridgeState {
|
|
|
88
88
|
// was requested to move their funds and switched to the MovingFunds
|
|
89
89
|
// state. Value in seconds.
|
|
90
90
|
uint32 movingFundsTimeout;
|
|
91
|
+
// The minimal satoshi amount that makes sense to be transferred during
|
|
92
|
+
// the moving funds process. Moving funds wallets having their BTC
|
|
93
|
+
// balance below that value can begin closing immediately as
|
|
94
|
+
// transferring such a low value may not be possible due to
|
|
95
|
+
// BTC network fees.
|
|
96
|
+
uint64 movingFundsDustThreshold;
|
|
91
97
|
// The minimal amount that can be requested for redemption.
|
|
92
98
|
// Value of this parameter must take into account the value of
|
|
93
99
|
// `redemptionTreasuryFeeDivisor` and `redemptionTxMaxFee`
|
|
@@ -212,7 +218,8 @@ library BridgeState {
|
|
|
212
218
|
|
|
213
219
|
event MovingFundsParametersUpdated(
|
|
214
220
|
uint64 movingFundsTxMaxTotalFee,
|
|
215
|
-
uint32 movingFundsTimeout
|
|
221
|
+
uint32 movingFundsTimeout,
|
|
222
|
+
uint64 movingFundsDustThreshold
|
|
216
223
|
);
|
|
217
224
|
|
|
218
225
|
event WalletParametersUpdated(
|
|
@@ -373,13 +380,21 @@ library BridgeState {
|
|
|
373
380
|
/// be reported as timed out. It is counted from the moment when the
|
|
374
381
|
/// wallet was requested to move their funds and switched to the
|
|
375
382
|
/// MovingFunds state.
|
|
383
|
+
/// @param _movingFundsDustThreshold New value of the moving funds dust
|
|
384
|
+
/// threshold. It is the minimal satoshi amount that makes sense to
|
|
385
|
+
// be transferred during the moving funds process. Moving funds
|
|
386
|
+
// wallets having their BTC balance below that value can begin
|
|
387
|
+
// closing immediately as transferring such a low value may not be
|
|
388
|
+
// possible due to BTC network fees.
|
|
376
389
|
/// @dev Requirements:
|
|
377
390
|
/// - Moving funds transaction max total fee must be greater than zero
|
|
378
391
|
/// - Moving funds timeout must be greater than zero
|
|
392
|
+
/// - Moving funds dust threshold must be greater than zero
|
|
379
393
|
function updateMovingFundsParameters(
|
|
380
394
|
Storage storage self,
|
|
381
395
|
uint64 _movingFundsTxMaxTotalFee,
|
|
382
|
-
uint32 _movingFundsTimeout
|
|
396
|
+
uint32 _movingFundsTimeout,
|
|
397
|
+
uint64 _movingFundsDustThreshold
|
|
383
398
|
) internal {
|
|
384
399
|
require(
|
|
385
400
|
_movingFundsTxMaxTotalFee > 0,
|
|
@@ -391,12 +406,19 @@ library BridgeState {
|
|
|
391
406
|
"Moving funds timeout must be greater than zero"
|
|
392
407
|
);
|
|
393
408
|
|
|
409
|
+
require(
|
|
410
|
+
_movingFundsDustThreshold > 0,
|
|
411
|
+
"Moving funds dust threshold must be greater than zero"
|
|
412
|
+
);
|
|
413
|
+
|
|
394
414
|
self.movingFundsTxMaxTotalFee = _movingFundsTxMaxTotalFee;
|
|
395
415
|
self.movingFundsTimeout = _movingFundsTimeout;
|
|
416
|
+
self.movingFundsDustThreshold = _movingFundsDustThreshold;
|
|
396
417
|
|
|
397
418
|
emit MovingFundsParametersUpdated(
|
|
398
419
|
_movingFundsTxMaxTotalFee,
|
|
399
|
-
_movingFundsTimeout
|
|
420
|
+
_movingFundsTimeout,
|
|
421
|
+
_movingFundsDustThreshold
|
|
400
422
|
);
|
|
401
423
|
}
|
|
402
424
|
|
|
@@ -52,6 +52,8 @@ library MovingFunds {
|
|
|
52
52
|
|
|
53
53
|
event MovingFundsTimedOut(bytes20 walletPubKeyHash);
|
|
54
54
|
|
|
55
|
+
event MovingFundsBelowDustReported(bytes20 walletPubKeyHash);
|
|
56
|
+
|
|
55
57
|
/// @notice Submits the moving funds target wallets commitment.
|
|
56
58
|
/// Once all requirements are met, that function registers the
|
|
57
59
|
/// target wallets commitment and opens the way for moving funds
|
|
@@ -463,4 +465,47 @@ library MovingFunds {
|
|
|
463
465
|
// slither-disable-next-line reentrancy-events
|
|
464
466
|
emit MovingFundsTimedOut(walletPubKeyHash);
|
|
465
467
|
}
|
|
468
|
+
|
|
469
|
+
/// @notice Notifies about a moving funds wallet whose BTC balance is
|
|
470
|
+
/// below the moving funds dust threshold. Ends the moving funds
|
|
471
|
+
/// process and begins wallet closing immediately.
|
|
472
|
+
/// @param walletPubKeyHash 20-byte public key hash of the wallet
|
|
473
|
+
/// @param mainUtxo Data of the wallet's main UTXO, as currently known
|
|
474
|
+
/// on the Ethereum chain.
|
|
475
|
+
/// @dev Requirements:
|
|
476
|
+
/// - The wallet must be in the MovingFunds state
|
|
477
|
+
/// - The `mainUtxo` components must point to the recent main UTXO
|
|
478
|
+
/// of the given wallet, as currently known on the Ethereum chain.
|
|
479
|
+
/// If the wallet has no main UTXO, this parameter can be empty as it
|
|
480
|
+
/// is ignored.
|
|
481
|
+
/// - The wallet BTC balance must be below the moving funds threshold
|
|
482
|
+
function notifyMovingFundsBelowDust(
|
|
483
|
+
BridgeState.Storage storage self,
|
|
484
|
+
bytes20 walletPubKeyHash,
|
|
485
|
+
BitcoinTx.UTXO calldata mainUtxo
|
|
486
|
+
) external {
|
|
487
|
+
Wallets.Wallet storage wallet = self.registeredWallets[
|
|
488
|
+
walletPubKeyHash
|
|
489
|
+
];
|
|
490
|
+
|
|
491
|
+
require(
|
|
492
|
+
wallet.state == Wallets.WalletState.MovingFunds,
|
|
493
|
+
"ECDSA wallet must be in MovingFunds state"
|
|
494
|
+
);
|
|
495
|
+
|
|
496
|
+
uint64 walletBtcBalance = self.getWalletBtcBalance(
|
|
497
|
+
walletPubKeyHash,
|
|
498
|
+
mainUtxo
|
|
499
|
+
);
|
|
500
|
+
|
|
501
|
+
require(
|
|
502
|
+
walletBtcBalance < self.movingFundsDustThreshold,
|
|
503
|
+
"Wallet BTC balance must be below the moving funds dust threshold"
|
|
504
|
+
);
|
|
505
|
+
|
|
506
|
+
self.beginWalletClosing(walletPubKeyHash);
|
|
507
|
+
|
|
508
|
+
// slither-disable-next-line reentrancy-events
|
|
509
|
+
emit MovingFundsBelowDustReported(walletPubKeyHash);
|
|
510
|
+
}
|
|
466
511
|
}
|
package/deploy/04_deploy_bank.ts
CHANGED
|
@@ -7,6 +7,8 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
|
|
|
7
7
|
const { deployer } = await getNamedAccounts()
|
|
8
8
|
|
|
9
9
|
const Bank = await deploy("Bank", {
|
|
10
|
+
contract:
|
|
11
|
+
deployments.getNetworkName() === "hardhat" ? "BankStub" : undefined,
|
|
10
12
|
from: deployer,
|
|
11
13
|
args: [],
|
|
12
14
|
log: true,
|
|
@@ -14,7 +14,9 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
|
|
|
14
14
|
// script from `@keep-network/ecdsa` is not invoked once again.
|
|
15
15
|
const WalletRegistry = await deployments.get("WalletRegistry")
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
// For local tests use `1`.
|
|
18
|
+
const txProofDifficultyFactor =
|
|
19
|
+
deployments.getNetworkName() === "hardhat" ? 1 : 6
|
|
18
20
|
|
|
19
21
|
const Deposit = await deploy("Deposit", { from: deployer, log: true })
|
|
20
22
|
const Sweep = await deploy("Sweep", { from: deployer, log: true })
|
|
@@ -27,6 +29,8 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
|
|
|
27
29
|
})
|
|
28
30
|
|
|
29
31
|
const Bridge = await deploy("Bridge", {
|
|
32
|
+
contract:
|
|
33
|
+
deployments.getNetworkName() === "hardhat" ? "BridgeStub" : undefined,
|
|
30
34
|
from: deployer,
|
|
31
35
|
args: [
|
|
32
36
|
Bank.address,
|