与比特币的关联

在上一节中,我们描述了 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 的情况下运行,参与该项目的开发者仍将其描述为一个不同的系统,并不完全适合现有分类,有时使用层 1.5 这一术语(参见 这篇 Decrypt 文章arrow-up-right 作为示例)。

即将发布的 Stacks 版本,被称为中本聪发布(Nakamoto release),将不再具有与比特币分离的安全预算。相反,100% 的比特币算力将决定 Stacks 层的最终性。在下一次升级之后,要重组 Stacks 区块/交易,攻击者需要重组比特币 L1 本身(这是非常困难的,因此对于比特币层来说是一个很好的安全属性)。更多细节见 Stacks 白皮书arrow-up-right.

在以太坊中使用的 L2 定义arrow-up-right ” 的定义不同,侧重于仅使用 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 上紧凑存储哈希的方式在某种程度上类似于 rollups(尽管还有其他差异)。您可以在 区块生成 一节中覆盖了其中的几种以及 Stacks 的比较。

5

中阅读有关该过程的更多信息。

合约可以读取比特币 L1

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

1

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

旧的安全预算资料

2

Stacks 的初始版本(2021 年初发布)有独立的安全预算,而在中本聪发布后改为跟随 100% 的比特币算力。仍然有旧的材料和博客文章在流传,仍在讨论最初的 Stacks 版本。这些旧资料可能会随着时间更新。

以太坊 L2 的撤回定义不完全适配

3

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

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

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

Stacks 层能与 rollups 一起工作吗?

可以!已经有一个活跃的研发工作,旨在将 rollups 与 Stacks 层集成。对于 Stacks 层和主权 rollups 来说,技术上具有挑战性的部分是如何将 BTC 转入和转出 Stacks 层或主权 rollup。去中心化的 BTC 挂钩, sBTC,既适用于 Stacks 层也适用于主权 rollups。在不修改比特币 L1 的情况下,采用类似 sBTC 的设计——由去中心化、开放成员资格的签名者群体组成——是将 BTC 在比特币层之间转移的最小信任方式。一旦比特币 L1 进行了必要的升级以支持有效性 rollups,即比特币 L1 能够强制执行从某一层的 BTC 提取,那么 Stacks 层也可以升级并从中受益。

鉴于像 sBTC 这样的信任最小化资产对于主权 rollups 是必要的,随着 sBTC 的推出,此类主权 rollups 的部署变得更加有趣。Stacks 层有可能为用于主权 rollup 的信任最小化 BTC 资产提供去中心化的签名者群体,并且数据可用性(DA)直接来自比特币 L1,例如通过 Ordinals。

为什么 Stacks 需要代币?

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

让我们先看代币存在的根本原因:为区块链的维护和未来发展提供资金。

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

区块链的目的是对链上发生的每笔交易保留永久的历史记录。区块链基本上就是分类账。代币部分被用作激励机制,以确保链的安全和维护。

这就是为什么像 Lightning 和其他点对点网络不需要代币的原因:它们不需要维护历史记录。基于通道的解决方案如 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 并再返回。这可以通过经济激励实现,也就是需要一个代币。

circle-info

随着越来越多的比特币层出现,在联盟式与开放网络设计之间存在一些细微差别。一些协议如 Botanix 的 Spiderchain 提供开放网络但具有不同的激励机制。我们在 Stacks 在其他层中 一节中覆盖了其中的几种以及 Stacks 的比较。

详细探讨了这些内容。

除了这两个原因外,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?arrow-up-right.

函数查询比特币区块头哈希。 该函数允许我们传入一个比特币区块高度并返回该区块头哈希。Clarity 关键字 burn-block-heightarrow-up-right 将给我们比特币链当前的区块高度。

但是, Clarity 经常被宣传的一个特性是它内置了对比特币链状态的访问能力,但它究竟如何做到这一点?由于 Stacks 的 PoX 机制,每个 Stacks 区块都与一个比特币区块相连,并且可以使用 只有在该高度的比特币区块已被处理且是在 Stacks 链启动之后创建时,才会返回该比特币区块的数据。因此,如果我们想评估某件事是否发生在比特币上,我们必须至少等到后面至少一个区块才能进行。

这是 Clarity 合约能够作为比特币编程层的第一步。当 BTC 交易被发起时,首先需要发生的事情是某个 Clarity 合约需要知道该交易的存在。这可以通过手动利用上面讨论的 Clarity 函数实现,比如 BTC 库arrow-up-right,正如 Catamaran Swapsarrow-up-right 所做的那样。

circle-info

请注意,通过 2.1 中新增的 Clarity 函数(如我们上面看到的 Clarity 经常被宣传的一个特性是它内置了对比特币链状态的访问能力,但它究竟如何做到这一点?由于 Stacks 的 PoX 机制,每个 Stacks 区块都与一个比特币区块相连,并且可以使用 函数)这一过程得以简化。

或者我们可以使用基于事件的架构进行自动化(尽管在我们的 dapp 中会带来一定程度的集中化),使用类似 Hiro 的 chainhooksarrow-up-right,它将允许我们在某个 BTC 交易发起时自动触发 Clarity 合约调用。

这是使用 Stacks 构建比特币 dapp 的第一个组成部分:对比特币链的读取访问。

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

最后更新于

这有帮助吗?