Signer Criteria for sBTC, A Decentralized and Programmable Asset Backed 1:1 with BTC
By Adriano Di Luzio, Andre Serrano, Ashton Stephens, Daniel Jordon, Friedger Müffke, Jesus Najera, Joey Yandle, Jude Nelson, Mårten Blankfors, Tycho Onnasch
- Idea
- Draft
- Accepted
- CAB vote
- Recommended
- Activation
- Ratified
Abstract
This SIP proposes a new wrapped Bitcoin asset, called sBTC, which would be implemented on Stacks as a SIP-010 token. sBTC enables seamless and secure integration of Bitcoin into the Stacks ecosystem, unlocking decentralized applications and expanding Bitcoin's utility through smart contracts. Stacks today offers a smart contract runtime for Stacks-hosted assets, and the forthcoming Stacks 3.0 release provides lower transaction latency than Bitcoin for Stacks transactions. By providing a robust BTC-wrapping mechanism based on threshold signatures, users would be able to lock their real BTC on the Bitcoin chain, instantiate an equal amount of sBTC tokens on Stacks, use these sBTC tokens on Stacks, and eventually redeem them for real BTC at 1:1 parity, minus the cost of the relevant blockchain transaction fees.
This is the first of several SIPs that describe such a system. This SIP describes the threshold signature mechanism and solicits from the ecosystem both a list of signers and the criteria for vetting them. These sBTC signers would be responsible for collectively holding all locked BTC and redeeming sBTC for BTC upon request. Given the high-stakes nature of their work, the authors of this SIP believe that such a wrapped asset can only be made to work in practice if the Stacks ecosystem members can reach broad consensus on how these signers are chosen. Thus, the first sBTC SIP put forth for activation concerns the selection of sBTC signers.
This SIP outlines but does not describe in technical detail the workings of the first sBTC system. A separate SIP will be written to do so if this SIP successfully activates.
Introduction
Glossary
| Term | Definition |
|---|---|
| .sbtc contract | A smart contract (or a collection of contracts) defining the sBTC token and functions related to it. |
| Deposit API | A third-party API that communicates with the sBTC Signers via the sBTC Signer API. |
| SIP-10 Token | A token on the Stacks blockchain that adheres to the fungible token standards outlined in SIP-10. |
| Stacks Signer | An entity that receives PoX payouts for stacking their STX tokens and actively participating in the Stacks protocol by signing mined blocks. |
| sBTC | A SIP-10 token on the Stacks Blockchain that can be turned back into BTC on the Bitcoin Blockchain. 1 sBTC is equivalent to 1 BTC on the Bitcoin Blockchain. |
| sBTC operation | A smart contract function call that initiates some action from the sBTC protocol. |
| sBTC Peg Wallet | The single UTXO holding the entire BTC balance that’s pegged into sBTC. This peg wallet is managed and maintained by the sBTC Signers. |
| sBTC Signer | An entity that will sign sBTC operations and communicate with contracts on the chain to make that feasible. This entity has partial access to spending the sBTC UTXO. |
| sBTC Signer API | An API exposed by the sBTC Signer that handles basic low-level commands. |
| sBTC Signer Set | The set of all sBTC signers. Each is registered with the .sbtc contract and these entities as a group collectively maintain the sBTC's Bitcoin UTXO. |
| Two-way peg | A two-way peg allows assets to move between two blockchains in a trustless manner. This proposal focuses on implementing such a peg between Bitcoin and Stacks, enabling users to lock BTC on Bitcoin and mint an equivalent amount of sBTC on Stacks. |
| Wrapped Bitcoin | A tokenized version of Bitcoin on another blockchain, designed to maintain a 1:1 peg with BTC. It acts as a derivative asset that allows Bitcoin to be utilized in various decentralized applications and ecosystems. |
Specification
Deposits
The main steps of the sBTC Deposit flow will be as follows:
- Deposit request: A bitcoin holder creates a transaction on Bitcoin.
- The deposit transaction contains a UTXO (deposit UTXO) spendable by sBTC Signers, with an OP_DROP payload.
- The payload contains the recipient address of the sBTC and the maximum fee the depositor is willing to have go towards the consolidation of the deposits into a single UTXO.
- Proof of deposit: The bitcoin holder submits a proof of deposit on Stacks by invoking the Deposit API.
- Deposit accept:
- Deposit redeem: The sBTC Signers redeem the deposit by consuming the deposit UTXO, consolidating it into the sBTC UTXO.
- Mint: The sBTC Signers finalize the deposit acceptance making a Clarity contract call that mints the sBTC on the Stacks Layer.
Withdrawals (Redeeming sBTC)
The main steps of the sBTC withdrawal flow are as follows:
- Withdrawal request: An sBTC holder calls the
withdraw-requestfunction in the.sbtccontract.- This transfers the requested amount of sBTC to the
.sbtccontract & mints the user a non-transferable locked-sBTC as a placeholder.
- This transfers the requested amount of sBTC to the
- Withdrawal accept: If accepted, the following happens:
- The signers create a transaction on Bitcoin which returns the requested amount to the designated address.
- Once the Bitcoin transaction is confirmed, the signers make a smart contract call to one of the
.sbtccontracts to mark the transaction as fulfilled. - If successful, the resulting Stacks transaction will record the withdrawal request as complete & will accordingly burn the user’s locked-sBTC.
- Withdrawal reject: If instead the request is rejected, the sBTC signers will call the
withdraw-rejectfunction in the.sbtcsmart contract. This function does the following:- Returns the sBTC to the holder.
- Records the signer votes.
Related Work
WBTC
WBTC is a closed membership system made up of 50+ merchants and custodians with keys to the WBTC multisig contract on Ethereum. WBTC deposits and withdrawals can only be performed by the authorized merchants, and end users purchase WBTC directly from the merchants. Until recently, BTC was held in a Bitcoin multi-sig wallet secured solely by BitGo. Now, two of the three multi-sig keys are held by BitGo, while one is held by BiT Global.
tBTC v2
tBTC is an ERC-20 wrapped asset launched in May 2020. BTC is currently held and secured by a permissioned set of 35 Beta Staker Nodes from the Threshold Network. Seven DeFi protocols including Aave and Synthetix manage the minting and burning process, with Guardians monitoring to veto suspicious behavior. tBTC is natively minted on Ethereum and Arbitrum.
RBTC
rBTC is a wrapped BTC asset natively minted on Rootstock, an EVM-compatible sidechain. BTC is secured by a 5-of-9 multi-sig Bitcoin wallet controlled by the Powpeg Federation. Peg operations settle to Bitcoin via merge mining. Instead of collateralizing the system with a new token, peg operators are incentivized by earning a portion of transaction fees. PowPeg operators keep specialized hardware called PowHSMs active and connected to special types of Rootstock full nodes. Since the Bitcoin blockchain and the Rootstock sidechain are not entangled in a single blockchain or in a parent-child relation, peg-in and peg-out transactions require a high number of block confirmations. Peg-ins require 100 Bitcoin blocks, and peg-outs require 4000 Rootstock blocks (roughly 200 Bitcoin Blocks).
The following table summarizes the main design differences between these systems:
| Feature | WBTC | tBTC | rBTC | sBTC (this SIP) |
|---|---|---|---|---|
| Spending threshold | 2 of 3 | 51 of 100 | 5 of 9 | 11 of 15 |
| Bitcoin finality | No | No | Yes | Yes |
| Expected Peg-in speed | 1 hour | 1-3 hours | 16 hours | 0.5 hours |
| Expected Peg-out speed | 1 hour | 3-5 hours | 33.3 hours | 1 hour |
| Custodian rotation | No | Yes | No | Yes |
| Fee structure | % of BTC moved | % of BTC moved | Transaction fees | Transaction fees |
In conclusion, the sBTC system shares similarities with existing models but introduces some key distinctions:
- Bitcoin Finality: sBTC inherits Bitcoin finality from Stacks 3.0, which ensures that sBTC transactions receive the same level of security provided by the Bitcoin network.
- Faster Deposit & Withdrawal Times: sBTC enables BTC withdrawals without the long delays associated with block confirmations in other systems. This is achieved through the finality rules described in Stacks 3.0.
Activation
sBTC is designed to activate on Stacks 3.0 as defined in SIP-021. Therefore, this SIP is only meaningful when SIP-021 activates. The sBTC Working Group plans to observe at least 2-4 weeks of network behavior on Stacks Nakamoto to ensure a stable release. After this period, sBTC can be activated on the Stacks network without requiring a separate hard fork.
Process of Activation
Users can vote to approve this SIP with either their locked/stacked STX or with unlocked/liquid STX, or both. The SIP voting page can be found at sbtc.vote. The criteria for the stacker and non-stacker voting is as follows.
For Stackers:
In order for this SIP to activate, the following criteria must be met by the set of Stacked STX:
- At least 80 million Stacked STX must vote, with least 70% (56 million) voting "yes".
The voting addresses will be:
| Vote | Bitcoin Address | Stacks Address | Message | ASCII-encoded message | Bitcoin script |
|---|---|---|---|---|---|
| yes | 11111111111mdWK2VXcrA1e7dnvidC | SP00000000001WPAWSDEDMQ0B9J72P0KAK2 | yes-sip-28 | 000000000000000000007965732d7369702d3238 | OP_DUP OP_HASH160 000000000000000000007965732d7369702d3238 OP_EQUALVERIFY OP_CHECKSIG |
| no | 111111111111ACW5wa4RwyeKYEAzMD | SP000000000006WVSDEDMQ0B9J73E2TN78 | no-sip-28 | 00000000000000000000006e6f2d7369702d3238 | OP_DUP OP_HASH160 00000000000000000000006e6f2d7369702d3238 OP_EQUALVERIFY OP_CHECKSIG |
The addresses have been generated as follows:
- Encode
<message>in ASCII, with 0-padding. - Use the resulting
<encoding>in the Bitcoin scriptOP_DUPOP_HASH160<encoding>OP_EQUALVERIFYOP_CHECKSIG. - The Bitcoin address is the
base58checkof the hash of the Bitcoin script above. - The Stacks address is the
c32check-encodedBitcoin address.
Stackers (pool and solo) vote by sending Stacks dust to the corresponding Stacks address from the account where their Stacks are locked.
Solo stackers only can also vote by sending a bitcoin dust transaction (6000 sats) to the corresponding bitcoin address.
For Non-Stackers:
Users with liquid STX can vote on proposals directly at sBTC.vote using the Ecosystem DAO. Liquid STX is the user’s balance, less any STX they have locked in the PoX stacking protocol, at the block height at which the voting started (preventing the same STX from being transferred between accounts and used to effectively double vote). This is referred to generally as "snapshot" voting.
For this SIP to pass, 70% of all liquid STX committed by voting must be in favor of the proposal.
We believe that these thresholds are sufficient to demonstrate interest from Stackers -- Stacks users who have a long-term interest in the Stacks blockchain's successful operation -- in performing this upgrade.
Activation Status
At the end of Bitcoin block height 869,749, the following vote was recorded: A total of 135,940,943 STX participated, with 135,801,729 STX (99.90%) voting 'Yes' and 139,214 STX (0.10%) voting 'No'.
A breakdown of the vote is as follows:
- For STX locked in stacking, a total of 126,084,232 STX participated. Of this, 125,945,571 STX (99.89%) from 77 accounts voted 'Yes', while 138,661 STX (0.11%) from 1 account voted 'No'.
- For unlocked STX, a total of 9,718,049 STX participated. Of this, 9,717,496 STX (99.99%) from 1,175 accounts voted 'Yes', while 553 STX (0.01%) from 40 accounts voted 'No'.
All voting criteria from STX holders have been met. A breakdown of the transactions can be found here.
The API where results come from can be found here.
zadao.ai