与比特币的连接

在前一节中,我们将 Stacks 描述为为比特币带来智能合约功能,而不修改比特币本身,并稍微解释了链的工作方式。

这是一个很大的承诺,但 Stacks 实际上如何实现它?以及是什么使 Stacks 在其他比特币层和像以太坊这样的区块链中独树一帜?

在深入了解 Stacks 的技术细节之前,先从高层次概览它所要解决的问题以及它如何解决这些问题是很重要的。我们将在文档中进一步深入探讨这些主题,但先形成一个高层次的整体图景有助于将一切整合起来。

这个主题有点像兔子洞,这一节相当长,但它将让你深入理解 Stacks 想要解决的确切问题以及它如何解决这些问题。

我们开始吧。

Stacks 是比特币的 L2 吗?

Stacks 是用于智能合约的比特币层。将其归类为 layer-1 (L1)、layer-2 (L2) 还是侧链取决于所使用的定义。一般来说,L1 链是主权性的,这意味着 (a) 它们有自己的安全预算,并且 (b) 它们可以在不依赖任何其他 L1 链的情况下生存。L2 链通常没有自己的安全预算,而是共享底层 L1 链的安全性,并且在没有底层 L1 链的情况下无法存在。L2 可以使用多种不同的设计机制,我们在 Stacks 在其他比特币层中的位置 一节中介绍了几种机制以及 Stacks 的比较。

Stacks 于 2021 年初的初始版本具有与比特币 L1 分离的安全预算。尽管 Stacks 层在没有比特币 L1 的情况下无法运行,但参与该项目的开发者将其描述为一个与现有分类不完全匹配的不同系统,有时使用 layer 1.5 这个术语(参见 这篇 Decrypt 文章arrow-up-right 作为示例)。

2024 年的 Nakamoto 版本将使 Stacks 与比特币共享相同的安全预算。也就是说,100% 的比特币算力将决定 Stacks 层的终局性。要对 Stacks 的区块/交易进行重组,攻击者需要对比特币 L1 本身进行重组(这非常难以实现,因此对于比特币层来说是一个很好的安全特性)。更多细节见 Stacks 白皮书arrow-up-right.

在以太坊和其他较新生态系统中使用的 L2 定义有所不同,侧重于使用仅有的 L1 安全性和 L1 矿工来提取资产的能力。按照该定义,鉴于一组 peg-out 签名者决定用户是否可以提取 sBTC,Stacks 层并不明显是一个 L2。比特币无法在不更改比特币 L1 的情况下支持这种验证(未来可能会发生改变)。以太坊的 L2 定义也不完全适用于比特币 L2,因为在比特币的场景中,新的资产是在 L2 上发行的,而不是在 L1 上(L1 仅有 BTC 作为资产)。因此,使用“资产可提取的安全性”定义并不能直接适用,因为资产是在 L2 上定义和使用的,并且通常不会被提取回比特币 L1(BTC 本身除外)。相反,更重要的是“在比特币上的结算”,即合约数据和状态是否由 100% 的比特币算力来保障。

请记住,比特币上的 L2 还必须承担扩展功能和可扩展性的额外目的,这意味着 L2 根据 L1 的功能实现根本不同的目标。

用户和开发者自然而然地称 Stacks 为比特币 L2,因为这是一个更容易理解的概念。Stacks 层的一些属性也支持将其视为比特币 L2 的概念:

1

比特币终局性

100% 的比特币算力决定区块排序和交易终局性。

2

共识运行在比特币 L1 上

Stacks 的共识运行在比特币 L1 上,Stacks L2 无法在没有比特币 L1 的情况下运行或生存。

3

sBTC 与经济单位

通过去中心化的比特币挂钩(称为 sBTC),Stacks 层的大部分经济活动将以 BTC 作为经济单位。预计大多数用户将仅在钱包和应用中使用比特币,然后将他们的 BTC 挂回比特币 L1。

4

数据在比特币 L1 上被哈希并存储

Stacks 上的所有数据和交易都会自动被哈希并在每个比特币区块上永久存储在比特币 L1 上。任何人都可以通过检查比特币 L1 上的相应哈希来验证 Stacks 上的某些数据是否有效。这种在 L1 上紧凑地存储哈希的方式在某种程度上类似于 rollup(尽管还有其他不同之处)。你可以在 区块生成 一节中介绍了几种机制以及 Stacks 的比较。

5

合约可以读取比特币 L1

Stacks 层上的合约可以读取比特币 L1 的交易并对其作出响应。Stacks 层上的资产可以通过比特币 L1 的交易来移动。

鉴于以上所有细节,为什么有些人会认为 Stacks 不是比特币 L2?这个问题经常出现有几个原因:

1

旧的安全预算材料

Stacks 的初始版本(2021 年初发布)有一个独立的安全预算,而在 Nakamoto 版本中则改为继承 100% 的比特币算力。

2

以太坊 L2 的提取定义不完全适配

根据以太坊对 L2 的定义,用户应能够仅通过进行一个 L1 交易并仅依赖 L1 的安全性来提取他们的基础层资产(例如 Lightning 就满足此条件)。该定义不适用于比特币 L2,因为资产并未在比特币 L1 上定义,而是在 L2 上定义。唯一相关的资产是从比特币 L1 挂钩过来的 BTC,因为其他所有资产本身就是 L2 的本地资产。在即将发布的 Stacks 版本中,用户可以仅通过发送一个比特币 L1 交易来提取他们的 BTC,但比特币 L1 无法验证该复杂交易,并且多数 peg-out 签名者需要在 peg-out 请求上签名。在理想情况下,比特币矿工可以验证此类交易,但那将需要对比特币 L1 进行更改。因此,Stacks 的设计优化为一种去中心化且可在不更改比特币 L1 的情况下部署的方法。如果未来可以对比特币 L1 进行更改,那么 Stacks 层的安全性也能从中受益。

3

健康的比特币怀疑主义

比特币社区成员通常对各种主张持怀疑态度,并密切留意任何虚假的营销说法。这对比特币生态系统来说通常是一件健康的事情,也有助于建立免疫系统。一些社区成员可能在未完全阅读技术细节和理由之前,会对 Stacks 作为比特币层或 L2 持怀疑态度。关于这个话题也有一个很好的 Twitter 线索arrow-up-right

那么我们为什么不将 Stacks 称为“侧链”呢?在比特币中,侧链通常具有不同于比特币 L1 的安全预算,通常是参与侧链的一部分比特币矿工(他们不遵循 100% 的比特币终局性),它们的共识在侧链上运行(而不是在比特币 L1 上运行),并且它们不会在比特币 L1 上发布它们的数据/哈希。由于 Stacks 的共识运行在比特币 L1 上,它遵循比特币的终局性,并在 L1 上发布数据/哈希,因此并不完全符合侧链的定义。

为什么 Stacks 需要代币?

这把我们带到加密货币和比特币世界中的一个核心哲学性讨论:区块链是否需要代币。

让我们从代币存在的根本原因开始:为区块链的维护和前进提供资金。

比特币就是一种代币。它是一种用于激励矿工向链中添加新块的加密货币。在比特币的情况下,挖矿奖励按预定计划设定,一旦这些挖矿奖励耗尽,区块链将需要仅靠交易费用来维持运行。

区块链的目的是对链上曾经发生的每一笔交易保留永久的历史记录。区块链本质上是账本。代币方面被用作一种激励机制来保护和维护链。

这就是像 Lightning 和其他 P2P 网络不需要代币的原因:它们不需要维持历史记录。基于通道的解决方案(如 Lightning)依赖用户之间打开 2-of-2 的多签。一旦这些通道关闭,状态就会消失。当我们谈论一个应当维护全球金融系统的系统时,正确地激励该系统的维护就非常重要。

我们在 Stacks 及其目标的上下文中来看这个概念。Stacks 旨在为比特币提供智能合约功能,作为在比特币之上构建去中心化经济的编程轨道。

许多比特币社区成员对新代币持怀疑态度,这是有道理的。市面上有无数项目强制在其项目中使用代币,很多情况下实际上并不需要代币。Stacks 项目由一群长期在比特币 L1 上构建应用和协议的比特币开发者发起(例如,BNS 在 2015 年在比特币 L1 上推出,是使用 OP_RETURN 的最大协议之一),他们有在没有任何代币的情况下在比特币 L1 上构建的长期历史。那么为什么一群比特币开发者决定为 Stacks L2 设置一个单独的代币呢?好问题!让我们深入细节。

Stacks 代币(STX)主要用于两件事:

1

激励 Stacks L2 的矿工

新铸造的 STX 用于激励 Stacks L2 上的去中心化出块。

2

激励 peg-out 签名者

参与 peg-out 操作的签名者会获得以 STX 支付的激励,以使他们在经济上与协议规则保持一致。

移除代币的唯一方法是将 Stacks 构建为像 Liquid 那样的联盟网络。在联盟中,预先选择的一组公司控制挖矿和出块,并且需要信任预先选择的一组公司来处理 peg-out 交易。

Stacks 的开发者希望设计一个开放且无许可的系统。实现去中心化挖矿过程的唯一途径是通过激励。如上所述,这也是比特币的工作方式,新铸造的 BTC 用作挖矿新块的激励,世界上任何人都可以决定成为矿工。任何拥有 BTC 的人都可以挖掘 Stacks L2 链,它是开放且无许可的。

同样,sBTC 的设计是使签名者的群体是开放且无许可的(不同于联盟)。这些签名者在经济上有动力正确地遵循 peg-out 请求的协议规则。在联盟中,用户需要盲目信任预设的联盟成员才能将其 BTC 从联盟中取出并返回到比特币 L1。Stacks 的开发者希望有一种开放、无许可且去中心化的方式将 BTC 从比特币 L1 转移到 Stacks L2 并再返回。这通过经济激励实现,也就是需要一个代币。

除了这两个原因外,STX 还用于支付交易的燃气费。然而,一旦即将到来的 sBTC 挂钩上线,预计 Stacks L2 的大部分经济将遵循比特币标准并以 BTC 作为经济单位运行。预计用户大多只会直接使用比特币并在钱包和应用中使用 BTC(燃气费可以通过后台的原子互换以 BTC 支付)。需要注意的是,BTC 无法用于 Stacks L2 上的挖矿激励,因为激励去中心化出块的唯一方法是通过协议新铸造的资产(类似于比特币本身的工作方式),也就是需要一个代币。

Stacks 与比特币之间的共生关系

Stacks 与比特币相辅相成。Stacks 利用了比特币的极端去中心化、其 PoW 共识机制以及其作为加密货币的价值。

但 Stacks 也通过解锁额外的用例来补充比特币,从而随着时间的推移增加其价值。这也有助于解决在 coinbase 奖励消失、比特币必须仅靠交易费用运行之后的未来可维护性问题。

如果比特币仅被视为一种价值存储,则每笔交易的经济密度(即交换的价值量)将非常有限。但如果比特币是整个去中心化经济的基础,那么那些 交易将变得更加有价值arrow-up-right,从而提高交易费用。这对于在 coinbase 奖励下降时激励矿工继续保护网络至关重要。

从比特币状态读取

赋予 Stacks 链与比特币连接超能力的东西不仅是其在协议层面如何与比特币连接(如上所述),还在于我们如何在编程层面利用该比特币。

这就是 Clarity 的作用。Clarity 是 Stacks 的智能合约语言,也是我们实际构建许多相关功能的方式。

Clarity 常被宣传的功能之一是其内置访问比特币链状态的能力,但它到底是如何实现的?由于 Stacks 的 PoX 机制,每个 Stacks 区块都与一个比特币区块相连,并且可以使用 get-burn-block-info? 函数查询比特币区块头哈希。

该函数允许我们传入一个比特币区块高度并返回该区块头的哈希。Clarity 关键字 burn-block-height 将为我们提供比特币链的当前区块高度。

然而, get-burn-block-info? 仅在该高度的比特币区块已被处理且是在 Stacks 链启动之后创建时才返回该比特币区块的数据。因此,如果我们想评估某件事是否在比特币上发生,我们必须至少等待一个区块之后才能进行。

这是 Clarity 合约能够作为比特币编程层的第一步。当一个 BTC 交易被发起时,首先需要发生的是 Clarity 合约需要得知该交易。可以通过手动利用上面讨论的 Clarity 函数来实现这一点。

这是使用 Stacks 构建比特币去中心化应用的第一个组成部分,即对比特币链的读取访问。

接下来,让我们更深入地探讨 Stacks 如何“建立在比特币之上”——通过查看 Stacks 的区块生成机制,即转移证明(Proof of Transfer)。

最后更新于

这有帮助吗?