Releases: threshold-network/tbtc-v2
Release list
Solidity: v1.2.0
solidity/v1.2.0 is the release of two Solidity smart contracts supporting L2 bridging. Those two contracts will be deployed on EVM-compatible sidechains and L2s to enable efficient cross-chain tBTC liquidity. This release did not lead to the deployment of any contracts on the Ethereum Mainnet. The code released in this version is imported by respective cross-chain modules for EVM-compatible chains.
-
L2TBTC: Canonical L2/sidechain token implementation. tBTC token is minted on L1 and locked there to be moved to L2/sidechain. By deploying a canonical token on each L2/sidechain, we can ensure the supply of tBTC remains sacrosanct, while enabling quick, interoperable cross-chain bridges and localizing ecosystem risk.This contract is flexible enough to:
- Delegate minting authority to a native bridge on the chain, if present.
- Delegate minting authority to a short list of ecosystem bridges.
- Have mints and burns paused by any one of n guardians, allowing avoidance of contagion in case of a chain- or bridge-specific incident.
- Be governed and upgradeable.
The token is burnable by the token holder and supports EIP2612 permits. A token holder can authorize a transfer of their token with a signature conforming EIP712 standard instead of an on-chain transaction from their address. Anyone can submit this signature on the user's behalf by calling the permit function, paying gas fees, and possibly performing other actions in the same transaction. The governance can recover ERC20 and ERC721 tokens sent mistakenly to the
L2TBTCtoken contract. -
L2WormholeGateway: Selected cross-ecosystem bridges are given the minting authority for tBTC token on L2 and sidechains. This contract gives a minting authority to the Wormhole Bridge.The process of bridging from L1 to L2 (or sidechain) looks as follows:
- There is a tBTC holder on L1. The holder goes to the Wormhole Portal and selects the chain they want to bridge to.
- The holder submits one transaction to L1 locking their tBTC tokens in the bridge’s smart contract. After the transaction is mined, they wait about 15 minutes for the Ethereum block finality.
- The holder submits one transaction to L2 which is minting tokens. After that transaction is mined, they have their tBTC on L2.
The process of bridging from L2 (or sidechain) to L1 looks as follows:
- There is a tBTC holder on L2. That holder goes to the Wormhole Portal and selects one of the L2 chains they want to bridge from.
- The holder submits one transaction to L2 that is burning the token. After the transaction is mined, they wait about 15 minutes for the L2 block finality.
- The holder submits one transaction to L1 unlocking their tBTC tokens from the bridge’s smart contract. After that transaction is mined, they have their tBTC on L1.
This smart contract is integrated with step iii. of L1->L2 bridging and step i. of L2->L1 or L2->L2 bridging. When the user redeems the token on L2, this contract receives the Wormhole tBTC representation and mints the canonical tBTC in an equal amount. When the user sends their token from L1, this contract burns the canonical tBTC and sends Wormhole tBTC representation through the bridge in an equal amount.
The NPM package is available in the NPM registry as @keep-network/tbtc-v2@1.2.0
The commit hash for clean builds is 8b59d5e15e0b368b5bfba269312f1481f88ad224.
Signatures of commit hash from the development team (verify these in the Keybase app):
-
@pdyraga
BEGIN KEYBASE SALTPACK SIGNED MESSAGE. kXR7VktZdyH7rvq v5weRa0zk8SRO9e gN94erb57G43YvY asc2ypx7KtJhJpq tOozFkj38nmzbv9 WNLNJ9RYX81bFSB hASCbZPMtNhUVLc ImMVa5cZML9E0hz hLcqLvTCWmUbsAi RKPQdUv3IzIj2G7 YXJ0dOxG610QzYy DadJ1WSn7NFmjMl R9vflX9KeHJvHC0 GSHFirzwy50tsqN 7NK8Q0S8Pb8lHUG EJKea55SY9fhaCa . END KEYBASE SALTPACK SIGNED MESSAGE. -
@nkuba
BEGIN KEYBASE SALTPACK SIGNED MESSAGE. kXR7VktZdyH7rvq v5weRa0zkUgHswq LONGnytauGuQ68W zKcm0YTewHXEGd3 2M8FiSegATqrOrI BGDV4jqEJ1ocetF JASSPZUspXS871n APaOBjsarEvgF3K 5tIQ5prH0GrLkzM QeGwd0SrErWAQiY 8s8IgGvoT9nE8bu GuWZKIKYG9pVRn3 qkRHamPGEYW3fQb cKJqjUna82G9RWn DHpys0S8Pb8lHUG EJKea55SY9fhaCa . END KEYBASE SALTPACK SIGNED MESSAGE.
Finally, note that the full set of work that went into the solidity/v1.2.0 version can be found in the corresponding solidity/v1.2.0 milestone.
Cross-chain/arbitrum: v1.0.0
The release of cross-chain/arbitrum/v1.0.0 is one of the steps to facilitate the integration of Bitcoin into Ethereum L2 Arbitrum using the Wormhole cross-chain contracts. This implementation involves the deployment of two upgradeable generic contracts from the tbtc-v2 project. These contract artifacts are named ArbitrumTBTC and ArbitrumWormholeGateway in the NPM package. They were deployed behind the OpenZeppelin transparent proxy and their contract addresses are as follows:
L2TBTC: 0x6c84a8f1c29108f47a79964b5fe888d4f4d0de40L2WormholeGateway: 0x1293a54e160D1cd7075487898d65266081A15458
The L2WormholeGateway smart contract is authorized to mint L2TBTC, and can wrap and unwrap Wormhole-specific tBTC representation into the canonical L2TBTC token. Ownership, including ProxyAdmin, of these two contracts has been transferred to the Threshold Council (0x9f6e831c8f8939dc0c830c6e492e7cef4f9c2f5f)
The NPM package is available in the NPM registry as @keep-network/tbtc-v2-arbitrum
The commit hash for clean builds is 439db6e8dea89d8c9b0795a08820c6a6c3de5729.
Signatures of commit hash from the development team (verified in the Keybase app):
-
@nkuba
BEGIN KEYBASE SALTPACK SIGNED MESSAGE. kXR7VktZdyH7rvq v5weRa0zkUgHswq LONGnytauGuQ68W zKcm0YTewHXEGd3 2M8FiSegAURpxPs mn5N4f7QVvaWzny KU0VBnYYGpEvEYw fbDvWo471FAzRcE ZYpRlA8x1kYtxAf mSZpTyvNunsqxJR wRO0WXCmbdaawmY H6AYy5xPK4ydtCo DGoebCyJCGzqxUq Dmg7z8CMdRCiSjf 9ZqWD0oQd3ZgGDK 0Qb2sFLokJmcLWr . END KEYBASE SALTPACK SIGNED MESSAGE. -
@pdyraga
BEGIN KEYBASE SALTPACK SIGNED MESSAGE. kXR7VktZdyH7rvq v5weRa0zk8SRO9e gN94erb57G43YvY asc2ypx7KtJhJpq tOozFkj38okUg5U 1fOtNF2a2NYKvHN 7FJWs62Sp3kltCv ToPqN3dKmXMmkpP YlOAV8Rf3GogSKS bfOyJIwNFBXr5OF yLd99xszYA6QjMS JoPboWdShGN8Md9 mDJ7xUbL6F4TGjs YyYF2br2ANBzfTv cBmBZ0oQd3ZgGDK 0Qb2sFLokJmcLWr . END KEYBASE SALTPACK SIGNED MESSAGE.
Typescript: v1.1.0
typescript/v1.1.0 is the second release of the Typescript library allowing to interact with tBTC v2 smart contracts on Ethereum mainnet.
The NPM package is available in the NPM registry as @keep-network/tbtc-v2.ts@1.1.1
The commit hash for clean builds is 2cf639285993bab14776175827467660390ab365.
Signatures of commit hash from the development team (verify these in the Keybase app):
-
@nkuba
BEGIN KEYBASE SALTPACK SIGNED MESSAGE. kXR7VktZdyH7rvq v5weRa0zkUgHswq LONGnytauGuQ68W zKcm0YTewHXEGd3 2M8FiSegATw4wZO hZ6X6YQUlDCeVlJ OTzNh3y0ZPWTksU 3Ft5CdspUnw5V5P EWzHRkxecwW3jMR Jeb6l3m4xFeT2kf 1N5QpMiwidqogqY wSPR9PzwBZ9k2WF plCK5OzRb0dDhJB Z6ZI1SM95mBjI8m 3QO630Rc7BZKytl tlDMPIhLX0viI45 . END KEYBASE SALTPACK SIGNED MESSAGE. -
@lukasz-zimnoch
BEGIN KEYBASE SALTPACK SIGNED MESSAGE. kXR7VktZdyH7rvq v5weRa0zk90sDpX wIX07Cfy2Yz31Xq 8mliRvTpoVIDeBV VZiP1JZd9a61qWp SJtxUueYNT3xXUw UJxn1cDUwCkWQcr 3FDEgq8zoMNaCRB qJBZaAlF5T2xUPM 13fTwQUlLrOqwM2 crP5TcubdiNXPtx lbadfPArwkbxg3c mprQjnVwmXOjRid 6sbmezj1EZcHhuY 6VjFv0Rc7BZKytl tlDMPIhLX0viI45 . END KEYBASE SALTPACK SIGNED MESSAGE.
The full set of work that went into the 1.1.0 version can be found in the corresponding typescript/v1.1.0 milestone.
Solidity: v1.1.0 (Mainnet)
solidity/v1.1.0 is the Ethereum mainnet release of two Solidity smart contracts supporting tBTC v1 sunsetting.
VendingMachineV2 (0xcE1F983c29f7A6C0C0dFA78C4D8Fe7bdfe026d4B) is used to exchange tBTC v1 to tBTC v2 in a 1:1 ratio during the process of tBTC v1 bridge sunsetting. The redeemer selected by the DAO based on the "TIP-027b tBTC v1: The Sunsetting" proposal will deposit tBTC v2 tokens into VendingMachineV2 so that outstanding tBTC v1 token owners can upgrade to tBTC v2 tokens. The redeemer will withdraw the tBTC v1 tokens deposited into the contract to perform tBTC v1 redemptions. The redeemer may decide to withdraw their deposited tBTC v2 at any moment in time. The amount withdrawable is lower than the amount deposited in case tBTC v1 was exchanged for tBTC v2. This contract is owned by the redeemer.
VendingMachineV3 (0x7570a2350183b4BdF7CA74faD3Fc19048E6437e6 ) is used to exchange tBTC v1 to tBTC v2 in a 1:1 ratio after the tBTC v1 bridge sunsetting is completed. Since tBTC v1 bridge will no longer work, it will not be possible to perform BTC redemption with tBTC v1 tokens. This contract allows tBTC v1 owners to upgrade to tBTC v2 without any deadline. This way, tBTC v1 tokens left on the market are always backed by Bitcoin. The governance will deposit tBTC v2 into the contract in the amount equal to tBTC v1 supply. The governance is allowed to withdraw tBTC v2 only if tBTC v2 left in this contract is enough to cover the upgrade of all tBTC v1 left on the market. This contract is owned by the governance.
The NPM package is available in the NPM registry as @keep-network/tbtc-v2@1.1.0
The commit hash for clean builds is 9ef09f055eeb0be8ee9672a908ed38f118d869ad.
Signatures of commit hash from the development team (verify these in the Keybase app):
-
@pdyraga
BEGIN KEYBASE SALTPACK SIGNED MESSAGE. kXR7VktZdyH7rvq v5weRa0zk8SRO9e gN94erb57G43YvY asc2ypx7KtJhJpq tOozFkj38oOsDIQ 1KJPjp5ZhHlsX4p 7HDtN5j8f7tUsrh eNK2WRF0d6TityM ouyKUcqJ8o4YLPx GoglHOFvGdioPjj md89OSgAyGxJbDg gMbrrLcfSeb5lk0 Yk9wDDe0bn3tq45 pr3vfGp1S8fxu3r LdGyo0oRkw49euK zC6JPJeBlqzkkpo . END KEYBASE SALTPACK SIGNED MESSAGE. -
@nkuba
BEGIN KEYBASE SALTPACK SIGNED MESSAGE. kXR7VktZdyH7rvq v5weRa0zkUgHswq LONGnytauGuQ68W zKcm0YTewHXEGd3 2M8FiSegAU4U0cU XCzG3QTFgEM44t8 NFfr3TG9BvPyAN1 en3OkI14eQcd8WQ excbGzhs1PKR0Pm Daozr3aUfqaPhgd 03wgQ8CrXkkDgS6 gfxITI5HuaMpX7w 94XwKMW6afz0bwd gT5iq6Qm7xkSMjM nBrPO0oRkw49euK zC6JPJeBlqzkkpo . END KEYBASE SALTPACK SIGNED MESSAGE.
Finally, note that the full set of work that went into the solidity/v1.1.0 version can be found in the corresponding solidity/v1.1.0 milestone.
Solidity: v1.0.2 (Mainnet)
solidity/v1.0.2 is the first Ethereum mainnet release of Threshold Network’s tBTC v2. The industry’s only decentralized and scalable Bitcoin-to-Ethereum bridge. tBTC allows users to wrap their BTC in exchange for tBTC tokens that can be deployed in DeFi.
The NPM package is available in the NPM registry as @keep-network/tbtc-v2@1.0.2
The core contracts of tBTC v2 are:
Bank(0x65Fbae61ad2C8836fFbFB502A0dA41b0789D9Fc6) is a central component tracking Bitcoin balances. Balances can be transferred between balance owners, and balance owners can approve their balances to be spent by others. Balances in the Bank are updated for depositors who deposited their Bitcoin into the Bridge and only the Bridge can increase balances.Bridge(0x5e4861a80B55f035D899f66772117F00FA0E8e7B) manages BTC deposit and redemption flow and is increasing and decreasing balances in the Bank as a result of BTC deposit and redemption operations performed by depositors and redeemers.TBTCVault(0x9C070027cdC9dc8F82416B2e5314E11DFb4FE3CD) is the owner of TBTC token contract and is the only contract minting the token. TBTC is an application implemented on top of the Bank.
The commit hash for clean builds is 031bafae85c35dce909b1ab2a2e437dad9e70df2.
Signatures of commit hash from the development team (verify these in the Keybase app):
-
@lukasz-zimnoch
BEGIN KEYBASE SALTPACK SIGNED MESSAGE. kXR7VktZdyH7rvq v5weRa0zk90sDpX wIX07Cfy2Yz31Xq 8mliRvTpoVIDeBV VZiP1JZd9af7dPk 5bLvSf7TjqOCOWg RINLzx59w9xkjym dxpxmxQUkHpMmar 8qPeHTcniRnIGWM 7Op4ArQgffolH3q yo5aVl3hEeWtAFJ pJzSj4xyElaKlgw D8zFWU8mI2zJtXz R4KqE5HddjhILdB RRIUT0ox4Tgvam4 OqzvzgHr8IV02Ww . END KEYBASE SALTPACK SIGNED MESSAGE. -
@pdyraga
BEGIN KEYBASE SALTPACK SIGNED MESSAGE. kXR7VktZdyH7rvq v5weRa0zk8SRO9e gN94erb57G43YvY asc2ypx7KtJhJpq tOozFkj38nx9QsK JntcjaoUAydYwks ouh4nOSslnAU3Re X2LEtGTEyuCs7Ep uortBXh2JJtSEc9 Y9Owo7GzhDP2e2W 5wUDjfnyO2JiWM9 sUUeoQSKHhDuZv6 afIGrlxzPYpDAcx JI5zsBGMBfO0XVY OTHEX0ox4Tgvam4 OqzvzgHr8IV02Ww . END KEYBASE SALTPACK SIGNED MESSAGE. -
@nkuba
BEGIN KEYBASE SALTPACK SIGNED MESSAGE. kXR7VktZdyH7rvq v5weRa0zkUgHswq LONGnytauGuQ68W zKcm0YTewHXEGd3 2M8FiSegATyNPYw ujMhs3PwtzXPTo0 i06mAR7W91HuOtK T77W8sxOhUGiAM3 Uv845Wkz9yVcESQ IypCWy2NFyfqrgR pUzGk06QhDqR62M 1S7bvxP6tEAB3jq QAPVtySH5JhDDWL ZZksw9fgrADZPDd 375A90ox4Tgvam4 OqzvzgHr8IV02Ww . END KEYBASE SALTPACK SIGNED MESSAGE.
Finally, note that the full set of work that went into the solidity/v1.0.2 version can be found in the corresponding solidity/v1.0.2 milestone.
Typescript: v1.0.0
typescript/v1.0.0 is the first release of the Typescript library allowing to interact with tBTC v2 smart contracts on Ethereum mainnet.
The NPM package is available in the NPM registry as @keep-network/tbtc-v2.ts@1.0.0
Commit hash for clean builds is 620d4a1728dbcc8011e529cd2e7fed5d610b85ac.
Signatures of commit hash from the development team (verify these in the Keybase app):
-
@lukasz-zimnoch
BEGIN KEYBASE SALTPACK SIGNED MESSAGE. kXR7VktZdyH7rvq v5weRa0zk90sDpX wIX07Cfy2Yz31Xq 8mliRvTpoVIDeBV VZiP1JZd9aIFgdY s3yib45yvdoVcFd AyXfNY2hvbgrIMQ PJB3UlSV4sfioUT lJ2vMcJLBkwispu poJwQmvzh8RKTxY IjO1JAGJi4kMsyz PukihYOg3wbu56q jGtZ2gGXqnGX3JQ 5ZnmLbd9LRnZqgK QtO810pZVDIRNoS rlB7ri7tzdAURpD . END KEYBASE SALTPACK SIGNED MESSAGE. -
@nkuba
BEGIN KEYBASE SALTPACK SIGNED MESSAGE. kXR7VktZdyH7rvq v5weRa0zkUgHswq LONGnytauGuQ68W zKcm0YTewHXEGd3 2M8FiSegATxig18 jmFhJe3oCTAHU4t PKjkAKLwuuduNO0 qGDtxCyF9t0dVQH z51EuiJzMqMh1tv 5sgvg6rUTE7syn1 xrYzDfdtbvzAri5 cObuK7N5CkPtsJP LLdHhERulEqGAGU WqMZM3nImAI0Npw 5iqIT0pZVDIRNoS rlB7ri7tzdAURpD . END KEYBASE SALTPACK SIGNED MESSAGE. -
@pdyraga
BEGIN KEYBASE SALTPACK SIGNED MESSAGE. kXR7VktZdyH7rvq v5weRa0zk8SRO9e gN94erb57G43YvY asc2ypx7KtJhJpq tOozFkj38o8Jl24 Olqv1CgY2MdgYIH mcmkQ4GbzMKvZTQ MaPRF6SPHQejN9c jXf92NvhsdqKeFy 0AieWiycIXIqlGs dPmkebjxMW7Cwwx 1AXM8HjHsfvgiJI zuI8T0vgsu4Bdww G8kWR9T5DqFF4Yc lc1JR0pZVDIRNoS rlB7ri7tzdAURpD . END KEYBASE SALTPACK SIGNED MESSAGE.
Finally, note that the full set of work that went into the 1.0.0 version can be found in the corresponding typescript/v1.0.0 milestone.
Solidity: v0.1.0 (Mainnet)
solidity/v0.1.0 is the mainnet release of tBTC v2 token and Vending Machine contracts.
tBTC v2 token can be minted from tBTC v1 token in 1:1 ratio with tBTC v1 token deposited in the Vending Machine as collateral.
tBTC v2 token can be unminted back to tBTC v1 token with a fee controlled by the Governance. Vending Machine contract has been deployed with no unmint fee but the Governance has the power to update it with 7 days governance delay.
Vending Machine contract acts as a bridge between tBTC v1 and tBTC v2, allowing to mint tBTC v2 token before the system is ready and fully operational without sacrificing any security guarantees and decentralization of the project.
It is expected that this Vending Machine implementation will be updated by the Governance once tBTC v2 system is ready for launch.
In addition to the contracts, we are providing the release commit hash (which corresponds to the solidity/v0.1.0 tag) and associated signatures from the deployment team.
Commit hash for clean builds is 87ae4798a59b321bf5dd36646041182f466fe18d.
Signatures of commit hash from the deployment team (verify these in the Keybase app):
-
@pdyraga:
BEGIN KEYBASE SALTPACK SIGNED MESSAGE. kXR7VktZdyH7rvq v5weRa0zkKUP1mo cBOwsMO2Zoy9oS4 RuaO1bwgSUG4cNZ RnlK7jKb7isKdWg dmchqhZm06ZuBb4 vrBM3b1XPKZbYQW KnRmJRuBG2UWUAL Ke1Xhj8gC4NqsYb WcG21wMul4EWFoD cLc3ScntlQoDeXU maIXi2z6TBT7PS2 1ExoWrcqs2EnFpX zRpsKorJxhif4tX YRdRe0S7mjT6eH1 U4jgdRjPEd0IrOm . END KEYBASE SALTPACK SIGNED MESSAGE. -
@nkuba:
BEGIN KEYBASE SALTPACK SIGNED MESSAGE. kXR7VktZdyH7rvq v5weRa0zkUgHswq LONGnytauGuQ68W zKcm0YTewHXEGd3 2M8FiSegAUSSNbx O1WZ2NJTDTc38Ii bca62DwGFJQaIC1 f1I06tm8UqCPRa1 HublT62zTb1ka4Z omZnBTSR6MfKzkg qpCHR7fhveogeeX yIvyW11o7vaoDyf A3T2bBzJ1rlzCsC Srp9massC97eMd4 PkMhK0S7mjT6eH1 U4jgdRjPEd0IrOm . END KEYBASE SALTPACK SIGNED MESSAGE.
Finally, note that the full set of work that went into the solidity/v0.1.0 milestone can be found in the corresponding solidity/v0.1.0 milestone.