存入与取出时间差异
理解为何将 BTC 存入为 sBTC 所需时间与将 sBTC 取回为 BTC 所需时间不同。
为什么存款如此快速而取款如此缓慢?
sBTC 允许用户通过称为 sBTC 的封装代币在 Stacks L2 上使用他们的 BTC。将 sBTC 转移到 Stacks L2 上可能只需 1 个比特币区块的时间,但将 sBTC 从 Stacks L2 转回原生比特币区块链则需要 6 个比特币区块。为什么会这样?
要理解为何移入 Stacks 层可以如此快速而移出却必须如此缓慢,我们首先需要了解 Stacks 区块链的共识机制。
Stacks 区块链使用一种称为转移证明(Proof of Transfer,或 PoX)的共识机制来铸造新区块。在每个比特币区块上,Stacks 区块链的矿工会牺牲一定量的比特币以竞标赢得制作接下来若干个 Stacks 区块的权利,他们将保留继续制作 Stacks 区块的权利,直到下一个比特币区块出现并且最新的竞标轮选出新的 Stacks 矿工。
确定哪些 Stacks 区块应绑定到哪个比特币区块
签名者(Stacks 区块链中相当于验证者的角色)查看比特币区块并根据当前拥有制作 Stacks 区块权利的矿工来批准新的 Stacks 区块,他们只批准在他们共同认为“最佳”的分叉中最近一次比特币区块竞标中获胜矿工提出的新块。只有当签名者一致认为提出该块的矿工是比特币区块链竞标的获胜者时,Stacks 区块链才可以新增区块,且所有签名者都在投票决定应当添加哪个区块,实际上共同决定哪个比特币分叉是最佳分叉。
这里有一个重要部分:如果签名者认为有一个新的、更好的比特币分叉与最近几个 Stacks 区块所基于的分叉不同,他们将只批准基于与该新比特币分叉关联的现有 Stacks 区块的新 Stacks 区块。换言之,所有建立在另一个比特币分叉上的、而不在该新的规范分叉中的 Stacks 区块都被视为无效;因此 Stacks 区块链也会产生分叉。
“Stacks 区块链与比特币区块链一起发生分叉。”
现在我们理解了这种分叉机制,让我们看看为什么从 Stacks 层移出必须如此缓慢。
为何从 sBTC 转为 BTC 需要更多时间
sBTC 作为一种代币存在于 Stacks 层,智能合约可以与之交互。要把 sBTC 从 Stacks 层转到比特币层,sBTC 的所有者会调用一个智能合约以启动我们称之为“提款”序列。这会让“sBTC 签名者”(与前面提到的签名者不同)知道他们需要在比特币区块链上创建一个交易,将 BTC 分发回用户。
如果 sBTC 签名者创建了一个在比特币上实施提款的交易,他们无法撤回该交易,并且该交易将在比特币区块链的每个分叉上有效。那么如果比特币区块链发生分叉且 Stacks 层上的提款被重组移除,会发生什么?就会出现一个无法收回的提款交易在比特币区块链上,将宝贵的 BTC 给予一个实际上并未在 Stacks 层上提现其 sBTC 的用户。
维护原始链的签名者能否强迫矿工重放所有先前已确认的交易?
Stacks 区块链是真正建立在比特币之上的第二层(Layer 2),你可以编写智能合约以基于对底层比特币区块链的观察而表现出不同的行为。例如,你可以编写一个 Stacks 合约,写明“如果最新的比特币区块哈希以偶数十六进制数字结尾则支付给 Jeff,若为奇数则支付给 Abigail。”现在当比特币区块链发生重组时,你可以重放这个原本支付给 Jeff 的交易,但它现在支付给 Abigail,如果这个合约正在发放 sBTC,会发生什么,且如果 Jeff 随后立即执行提款又会怎样?
因此最终,为了安全地处理一次提款,你需要有足够的把握它不会被重组移除。这意味着在 Stacks 区块链上发生 sBTC 提款交易之后,必须等到 6 个比特币区块(sBTC 签名者认为可接受的最终性标准)后才能处理该提款。
但那么,为什么存款最快可以在一个比特币区块内完成?
还记得 Stacks 如何随比特币分叉吗?假设有人在比特币区块链上进行存款以尝试铸造 sBTC,然后假设 sBTC 签名者立即铸造了 sBTC。如果比特币链发生分叉导致 Stacks 区块链也分叉,会发生什么?铸造会被重组移除!确实,该存款不再在比特币区块链上,但它在 Stacks 区块链上也不存在。如果该存款从未重新出现在比特币区块链上,sBTC 签名者就永远不会铸造 sBTC,因此也就没有什么可以被收回的。
比特币链拥有最终决定权
总之,对于从 Stacks 层向比特币层转移 sBTC 的操作,协议需要等待比特币达到足够的最终性;但从比特币层到 Stacks 层的转移在铸造时则不需要等待最终性,因为如果比特币层发生重组,Stacks 层会自行重组。
但从概念上记住,Stacks 区块链上的铸造调用与包含将 BTC 存入 Stacks 层的比特币区块一样具有最终性。如果你在 Stacks 层铸造 sBTC 并且想等待其具有最终性,你需要等待适当数量的比特币区块以认为其最终铸造,但这是由你决定的,而不是 sBTC 签名者决定的。
最后更新于
这有帮助吗?