@keep-network/tbtc-v2 0.1.1-dev.8 → 0.1.1-dev.80
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/README.adoc +12 -0
- package/artifacts/Bank.json +757 -0
- package/artifacts/Bridge.json +2644 -0
- package/artifacts/Deposit.json +117 -0
- package/artifacts/DepositSweep.json +77 -0
- package/artifacts/EcdsaDkgValidator.json +532 -0
- package/artifacts/EcdsaInactivity.json +156 -0
- package/artifacts/EcdsaSortitionPool.json +1004 -0
- package/artifacts/Fraud.json +164 -0
- package/artifacts/KeepRegistry.json +99 -0
- package/artifacts/KeepStake.json +286 -0
- package/artifacts/KeepToken.json +711 -0
- package/artifacts/KeepTokenStaking.json +483 -0
- package/artifacts/MovingFunds.json +249 -0
- package/artifacts/NuCypherStakingEscrow.json +256 -0
- package/artifacts/NuCypherToken.json +711 -0
- package/artifacts/RandomBeaconStub.json +141 -0
- package/artifacts/Redemption.json +162 -0
- package/artifacts/ReimbursementPool.json +509 -0
- package/artifacts/Relay.json +123 -0
- package/artifacts/T.json +1148 -0
- package/artifacts/TBTC.json +27 -26
- package/artifacts/TBTCToken.json +27 -26
- package/artifacts/TBTCVault.json +462 -0
- package/artifacts/TokenStaking.json +2288 -0
- package/artifacts/TokenholderGovernor.json +1795 -0
- package/artifacts/TokenholderTimelock.json +1058 -0
- package/artifacts/VendingMachine.json +30 -29
- package/artifacts/VendingMachineKeep.json +400 -0
- package/artifacts/VendingMachineNuCypher.json +400 -0
- package/artifacts/WalletRegistry.json +1843 -0
- package/artifacts/WalletRegistryGovernance.json +2754 -0
- package/artifacts/Wallets.json +186 -0
- package/artifacts/solcInputs/4f6d4f5cd1e3d835e20ed55926a445cd.json +311 -0
- package/build/contracts/GovernanceUtils.sol/GovernanceUtils.dbg.json +1 -1
- package/build/contracts/GovernanceUtils.sol/GovernanceUtils.json +2 -2
- package/build/contracts/bank/Bank.sol/Bank.dbg.json +1 -1
- package/build/contracts/bank/Bank.sol/Bank.json +25 -2
- package/build/contracts/bank/IReceiveBalanceApproval.sol/IReceiveBalanceApproval.dbg.json +4 -0
- package/build/contracts/bank/IReceiveBalanceApproval.sol/IReceiveBalanceApproval.json +34 -0
- 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 +2516 -196
- package/build/contracts/bridge/BridgeState.sol/BridgeState.dbg.json +4 -0
- package/build/contracts/bridge/BridgeState.sol/BridgeState.json +226 -0
- package/build/contracts/bridge/Deposit.sol/Deposit.dbg.json +4 -0
- package/build/contracts/bridge/Deposit.sol/Deposit.json +72 -0
- package/build/contracts/bridge/DepositSweep.sol/DepositSweep.dbg.json +4 -0
- package/build/contracts/bridge/DepositSweep.sol/DepositSweep.json +30 -0
- package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.dbg.json +4 -0
- package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.json +10 -0
- package/build/contracts/bridge/Fraud.sol/Fraud.dbg.json +4 -0
- package/build/contracts/bridge/Fraud.sol/Fraud.json +86 -0
- package/build/contracts/bridge/Heartbeat.sol/Heartbeat.dbg.json +4 -0
- package/build/contracts/bridge/Heartbeat.sol/Heartbeat.json +10 -0
- package/build/contracts/bridge/IRelay.sol/IRelay.dbg.json +4 -0
- package/build/contracts/bridge/IRelay.sol/IRelay.json +37 -0
- package/build/contracts/bridge/MovingFunds.sol/MovingFunds.dbg.json +4 -0
- package/build/contracts/bridge/MovingFunds.sol/MovingFunds.json +138 -0
- package/build/contracts/bridge/Redemption.sol/OutboundTx.dbg.json +4 -0
- package/build/contracts/bridge/Redemption.sol/OutboundTx.json +10 -0
- package/build/contracts/bridge/Redemption.sol/Redemption.dbg.json +4 -0
- package/build/contracts/bridge/Redemption.sol/Redemption.json +92 -0
- package/build/contracts/bridge/VendingMachine.sol/VendingMachine.dbg.json +1 -1
- package/build/contracts/bridge/VendingMachine.sol/VendingMachine.json +2 -2
- package/build/contracts/bridge/Wallets.sol/Wallets.dbg.json +4 -0
- package/build/contracts/bridge/Wallets.sol/Wallets.json +112 -0
- package/build/contracts/token/TBTC.sol/TBTC.dbg.json +1 -1
- package/build/contracts/token/TBTC.sol/TBTC.json +2 -2
- package/build/contracts/vault/DonationVault.sol/DonationVault.dbg.json +4 -0
- package/build/contracts/vault/DonationVault.sol/DonationVault.json +108 -0
- package/build/contracts/vault/IVault.sol/IVault.dbg.json +1 -1
- package/build/contracts/vault/IVault.sol/IVault.json +24 -1
- package/build/contracts/vault/TBTCVault.sol/TBTCVault.dbg.json +1 -1
- package/build/contracts/vault/TBTCVault.sol/TBTCVault.json +126 -7
- package/contracts/GovernanceUtils.sol +4 -4
- package/contracts/bank/Bank.sol +45 -20
- package/contracts/bank/IReceiveBalanceApproval.sol +45 -0
- package/contracts/bridge/BitcoinTx.sol +232 -10
- package/contracts/bridge/Bridge.sol +1601 -244
- package/contracts/bridge/BridgeState.sol +739 -0
- package/contracts/bridge/Deposit.sol +269 -0
- package/contracts/bridge/DepositSweep.sol +571 -0
- package/contracts/bridge/EcdsaLib.sol +45 -0
- package/contracts/bridge/Fraud.sol +604 -0
- package/contracts/bridge/Heartbeat.sol +112 -0
- package/contracts/bridge/IRelay.sol +28 -0
- package/contracts/bridge/MovingFunds.sol +1089 -0
- package/contracts/bridge/Redemption.sol +867 -0
- package/contracts/bridge/VendingMachine.sol +1 -1
- package/contracts/bridge/Wallets.sol +553 -0
- package/contracts/hardhat-dependency-compiler/.hardhat-dependency-compiler +1 -0
- package/contracts/hardhat-dependency-compiler/@keep-network/ecdsa/contracts/WalletRegistry.sol +3 -0
- package/contracts/hardhat-dependency-compiler/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol +3 -0
- package/contracts/hardhat-dependency-compiler/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol +3 -0
- package/contracts/token/TBTC.sol +1 -1
- package/contracts/vault/DonationVault.sol +125 -0
- package/contracts/vault/IVault.sol +19 -13
- package/contracts/vault/TBTCVault.sol +58 -8
- package/deploy/00_resolve_relay.ts +28 -0
- package/deploy/04_deploy_bank.ts +27 -0
- package/deploy/05_deploy_bridge.ts +80 -0
- package/deploy/06_deploy_tbtc_vault.ts +30 -0
- package/deploy/07_bank_update_bridge.ts +19 -0
- package/deploy/08_transfer_ownership.ts +15 -0
- package/deploy/09_transfer_governance.ts +20 -0
- package/deploy/10_transfer_proxy_admin_ownership.ts +30 -0
- package/deploy/11_deploy_proxy_admin_with_deputy.ts +33 -0
- package/export.json +15993 -475
- package/package.json +32 -25
- package/artifacts/solcInputs/4cf328e09411ac69d75a3c381680bc2c.json +0 -128
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
// ██████████████ ▐████▌ ██████████████
|
|
4
|
+
// ██████████████ ▐████▌ ██████████████
|
|
5
|
+
// ▐████▌ ▐████▌
|
|
6
|
+
// ▐████▌ ▐████▌
|
|
7
|
+
// ██████████████ ▐████▌ ██████████████
|
|
8
|
+
// ██████████████ ▐████▌ ██████████████
|
|
9
|
+
// ▐████▌ ▐████▌
|
|
10
|
+
// ▐████▌ ▐████▌
|
|
11
|
+
// ▐████▌ ▐████▌
|
|
12
|
+
// ▐████▌ ▐████▌
|
|
13
|
+
// ▐████▌ ▐████▌
|
|
14
|
+
// ▐████▌ ▐████▌
|
|
15
|
+
|
|
16
|
+
pragma solidity ^0.8.9;
|
|
17
|
+
|
|
18
|
+
import {BytesLib} from "@keep-network/bitcoin-spv-sol/contracts/BytesLib.sol";
|
|
19
|
+
|
|
20
|
+
/// @title Bridge wallet heartbeat
|
|
21
|
+
/// @notice The library establishes expected format for heartbeat messages
|
|
22
|
+
/// signed by wallet ECDSA signing group. Heartbeat messages are
|
|
23
|
+
/// constructed in such a way that they can not be used as a Bitcoin
|
|
24
|
+
/// transaction preimages.
|
|
25
|
+
/// @dev The smallest Bitcoin non-coinbase transaction is a one spending an
|
|
26
|
+
/// OP_TRUE anyonecanspend output and creating 1 OP_TRUE anyonecanspend
|
|
27
|
+
/// output. Such a transaction has 61 bytes (see `BitcoinTx` documentation):
|
|
28
|
+
/// 4 bytes for version
|
|
29
|
+
/// 1 byte for tx_in_count
|
|
30
|
+
/// 36 bytes for tx_in.previous_output
|
|
31
|
+
/// 1 byte for tx_in.script_bytes (value: 0)
|
|
32
|
+
/// 0 bytes for tx_in.signature_script
|
|
33
|
+
/// 4 bytes for tx_in.sequence
|
|
34
|
+
/// 1 byte for tx_out_count
|
|
35
|
+
/// 8 bytes for tx_out.value
|
|
36
|
+
/// 1 byte for tx_out.pk_script_bytes
|
|
37
|
+
/// 1 byte for tx_out.pk_script
|
|
38
|
+
/// 4 bytes for lock_time
|
|
39
|
+
///
|
|
40
|
+
///
|
|
41
|
+
/// The smallest Bitcoin coinbase transaction is a one creating
|
|
42
|
+
/// 1 OP_TRUE anyonecanspend output and having an empty coinbase script.
|
|
43
|
+
/// Such a transaction has 65 bytes:
|
|
44
|
+
/// 4 bytes for version
|
|
45
|
+
/// 1 byte for tx_in_count
|
|
46
|
+
/// 32 bytes for tx_in.hash (all 0x00)
|
|
47
|
+
/// 4 bytes for tx_in.index (all 0xff)
|
|
48
|
+
/// 1 byte for tx_in.script_bytes (value: 0)
|
|
49
|
+
/// 4 bytes for tx_in.height
|
|
50
|
+
/// 0 byte for tx_in.coinbase_script
|
|
51
|
+
/// 4 bytes for tx_in.sequence
|
|
52
|
+
/// 1 byte for tx_out_count
|
|
53
|
+
/// 8 bytes for tx_out.value
|
|
54
|
+
/// 1 byte for tx_out.pk_script_bytes
|
|
55
|
+
/// 1 byte for tx_out.pk_script
|
|
56
|
+
/// 4 bytes for lock_time
|
|
57
|
+
///
|
|
58
|
+
///
|
|
59
|
+
/// A SIGHASH flag is used to indicate which part of the transaction is
|
|
60
|
+
/// signed by the ECDSA signature. There are currently 3 flags:
|
|
61
|
+
/// SIGHASH_ALL, SIGHASH_NONE, SIGHASH_SINGLE, and different combinations
|
|
62
|
+
/// of these flags.
|
|
63
|
+
///
|
|
64
|
+
/// No matter the SIGHASH flag and no matter the combination, the following
|
|
65
|
+
/// fields from the transaction are always included in the constructed
|
|
66
|
+
/// preimage:
|
|
67
|
+
/// 4 bytes for version
|
|
68
|
+
/// 36 bytes for tx_in.previous_output (or tx_in.hash + tx_in.index for coinbase)
|
|
69
|
+
/// 4 bytes for lock_time
|
|
70
|
+
///
|
|
71
|
+
/// Additionally, the last 4 bytes of the preimage determines the SIGHASH
|
|
72
|
+
/// flag.
|
|
73
|
+
///
|
|
74
|
+
/// This is enough to say there is no way the preimage could be shorter
|
|
75
|
+
/// than 4 + 36 + 4 + 4 = 48 bytes.
|
|
76
|
+
///
|
|
77
|
+
/// For this reason, we construct the heartbeat message, as a 16-byte
|
|
78
|
+
/// message. The first 8 bytes are 0xffffffffffffffff. The last 8 bytes
|
|
79
|
+
/// are for an arbitrary uint64, being a signed heartbeat nonce (for
|
|
80
|
+
/// example, the last Ethereum block hash).
|
|
81
|
+
///
|
|
82
|
+
/// The message being signed by the wallet when executing the heartbeat
|
|
83
|
+
/// protocol should be Bitcoin's hash256 (double SHA-256) of the heartbeat
|
|
84
|
+
/// message:
|
|
85
|
+
/// heartbeat_sighash = hash256(heartbeat_message)
|
|
86
|
+
library Heartbeat {
|
|
87
|
+
using BytesLib for bytes;
|
|
88
|
+
|
|
89
|
+
/// @notice Determines if the signed byte array is a valid, non-fraudulent
|
|
90
|
+
/// heartbeat message.
|
|
91
|
+
/// @param message Message signed by the wallet. It is a potential heartbeat
|
|
92
|
+
/// message, Bitcoin transaction preimage, or an arbitrary signed
|
|
93
|
+
/// bytes.
|
|
94
|
+
/// @dev Wallet heartbeat message must be exactly 16 bytes long with the first
|
|
95
|
+
/// 8 bytes set to 0xffffffffffffffff.
|
|
96
|
+
/// @return True if valid heartbeat message, false otherwise.
|
|
97
|
+
function isValidHeartbeatMessage(bytes calldata message)
|
|
98
|
+
internal
|
|
99
|
+
pure
|
|
100
|
+
returns (bool)
|
|
101
|
+
{
|
|
102
|
+
if (message.length != 16) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (message.slice8(0) != 0xffffffffffffffff) {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
// ██████████████ ▐████▌ ██████████████
|
|
4
|
+
// ██████████████ ▐████▌ ██████████████
|
|
5
|
+
// ▐████▌ ▐████▌
|
|
6
|
+
// ▐████▌ ▐████▌
|
|
7
|
+
// ██████████████ ▐████▌ ██████████████
|
|
8
|
+
// ██████████████ ▐████▌ ██████████████
|
|
9
|
+
// ▐████▌ ▐████▌
|
|
10
|
+
// ▐████▌ ▐████▌
|
|
11
|
+
// ▐████▌ ▐████▌
|
|
12
|
+
// ▐████▌ ▐████▌
|
|
13
|
+
// ▐████▌ ▐████▌
|
|
14
|
+
// ▐████▌ ▐████▌
|
|
15
|
+
|
|
16
|
+
pragma solidity ^0.8.9;
|
|
17
|
+
|
|
18
|
+
/// @title Interface for the Bitcoin relay
|
|
19
|
+
/// @notice Contains only the methods needed by tBTC v2. The Bitcoin relay
|
|
20
|
+
/// provides the difficulty of the previous and current epoch. One
|
|
21
|
+
/// difficulty epoch spans 2016 blocks.
|
|
22
|
+
interface IRelay {
|
|
23
|
+
/// @notice Returns the difficulty of the current epoch.
|
|
24
|
+
function getCurrentEpochDifficulty() external view returns (uint256);
|
|
25
|
+
|
|
26
|
+
/// @notice Returns the difficulty of the previous epoch.
|
|
27
|
+
function getPrevEpochDifficulty() external view returns (uint256);
|
|
28
|
+
}
|