# BitVM 入门

> 原文：<https://mirror.xyz/twhittle.eth/zXzocAl-wWiMSBAzhKnd6w0AJsftqgPTUfnh115fVPM>
>
> 作者：泰勒·惠特尔 ( [@Dr\_DAO\_](https://twitter.com/Dr_DAO_) )

### 介绍 <a href="#heading-introduction" id="heading-introduction"></a>

欢迎来到 BitVM 入门！如果您阅读下面的摘要并第一次就明白了，那么恭喜您。[请与我联系，以便我可以为您提供Taproot Wizards](https://taprootwizards.com/)的工作。如果您像我们 99% 的人一样既兴奋又困惑，请继续阅读！

[***摘要 - BitVM：在比特币上计算任何东西***](https://bitvm.org/)

*BitVM 是一种表达图灵完备比特币合约的计算范式。这不需要改变网络的共识规则。它们只是进行验证，而不是在比特币上执行计算，类似于乐观汇总。证明者声称给定函数评估某些特定输入到某些特定输出。如果该声明是错误的，那么验证者可以进行简洁的欺诈证明并惩罚证明者。使用这种机制，任何可计算的函数都可以在比特币上进行验证。*

*在 Taproot 地址中提交大型程序需要大量的链下计算和通信，但最终产生的链上占用空间很小。只要双方合作，就可以执行任意复杂的、有状态的链下计算，而不会在链上留下任何痕迹。仅在发生争议时才需要链上执行。*

尽管可能很难从抽象中提炼出来，但 BitVM 标志着我们认为比特币可能实现的范式转变。简而言之，BitVM 允许在比特币上执行任意计算。

好吧，“任意计算”是一个拗口的词，对非技术读者并没有真正的帮助。让我举个例子：国际象棋。

### 国际象棋、程序和智能合约语言 <a href="#heading-chess-programs--smart-contract-languages" id="heading-chess-programs--smart-contract-languages"></a>

国际象棋是一个定义明确的程序的例子，具有设定的约束和获胜条件。您有某些棋子可以在 8x8 棋盘上以特定方式移动。当国王被俘虏或双方都无法获胜时，您就知道游戏结束了。您可以将国际象棋视为具有某些任意计算的程序（例如，比特币中没有内置 chess.move\_knight(F4) 命令）。

现在假设 Vicky 和 ​​Paul 想要互相下盘棋。更重要的是，他们想对此下一个大赌注：获胜者将获得 1 BTC！鉴于这场游戏的赌注如此之大，他们希望有一种方法来验证谁赢了。

<figure><img src="https://mirror.xyz/_next/image?url=https%3A%2F%2Fimages.mirror-media.xyz%2Fpublication-images%2F6_0gXNIlF94ugL07xrl1d.png&#x26;w=3840&#x26;q=75" alt="《Vicky 和 ​​Paul 在一个神奇的世界里下棋，获胜者可以获得大量比特币》 - StarryAI" height="640" width="512"><figcaption><p>《Vicky 和 ​​Paul 在一个神奇的世界里下棋，获胜者可以获得大量比特币》 - StarryAI</p></figcaption></figure>

在区块链出现之前，Vicky 和 ​​Paul 最好的选择是找到一个值得信赖的第三方（我们称他为 Terrance）来观察比赛、宣布获胜者并托管/支付 1 BTC。但如果特伦斯不那么值得信任怎么办？也许特伦斯决定逃跑并为自己保留 1 个比特币。也许保罗贿赂了特伦斯，让他无论如何都成为胜利者。这些情况（或可能出现的无数其他情况）都不是理想的。

进入区块链！区块链的主要优点是它们将信任另一个人的需要转变为信任密码学和代码的需要。

那么为什么我们在比特币上看不到像[以太坊上那样](https://betterprogramming.pub/on-chain-chess-smart-contract-breakdown-7d01cdaaeb54)的链上国际象棋游戏\[^1]呢？

答案就在于比特币的底层语言：[脚本](https://en.bitcoin.it/wiki/Script)。

### 比特币脚本 <a href="#heading-bitcoin-script" id="heading-bitcoin-script"></a>

打个比方，将比特币/Script 想象为你的高中计算器，将以太坊/Solidity 想象为你的 iPhone（或者 Android，如果你像我一样）。你的 iPhone 可以运行应用程序开发人员编写的任何程序。另一方面，您的计算器仅限于一些数字和一些数学函数。也许那里有一些额外的按钮用于一些微积分，但没有人会将您的 TI-83 误认为是一部 iPhone。

<figure><img src="https://mirror.xyz/_next/image?url=https%3A%2F%2Fimages.mirror-media.xyz%2Fpublication-images%2FEpbCxtIJFOZX_qYa6C4an.png&#x26;w=3840&#x26;q=75" alt="脚本计算器按钮（左）与 Solidity 功能代码（右）"><figcaption><p>脚本计算器按钮（左）与 Solidity 功能代码（右）</p></figcaption></figure>

以太坊的智能合约语言 Solidity 被认为是“[图灵完备](https://en.wikipedia.org/wiki/Turing_completeness)”。虽然这并不完全正确，但在这种情况下使用它意味着 Solidity 可以运行几乎任何可以想象的程序。国际象棋、Defi 协议、零知识证明验证器——这些都可以直接在以太坊上实现。

然而，脚本并不被认为是图灵完备的。这意味着不可能在比特币的其他链上运行所有那些很酷的程序（直到现在！）。

如果您之前单击[“脚本”链接](https://en.bitcoin.it/wiki/Script)，您将看到一个称为操作码的列表。这些本质上是比特币计算器的按钮。您将看到简单操作的操作码，例如加法 (OP\_ADD) 和加密操作，例如散列 (OP\_SHA256)。

比特币上有大约 100 个操作码，它们是专门为限制可以完成的计算的复杂性而设计的。例如，截至撰写本文时，还没有用于将两个数字相乘的操作码，也没有用于将字符串相加的操作码。中本聪在比特币诞生之初就删除了这些操作码和许多其他操作码，以确保脚本不是图灵完备的。

### 比特币节点和避免任意长的计算 <a href="#heading-bitcoin-nodes--avoiding-arbitrarily-long-compute" id="heading-bitcoin-nodes--avoiding-arbitrarily-long-compute"></a>

那么为什么中本聪要对比特币做出如此严格的限制呢？答案在于比特币的经济学。比特币的安全性依赖于去中心化。它依赖于像你我这样的用户来运行节点并验证提交到网络的交易是否有效。全节点运行网络上每个区块中每笔交易的计算。与以太坊不同的是，用户为获取交易而必须支付的费用仅与执行交易所需的计算量松散相关。\[^2]

<figure><img src="https://mirror.xyz/_next/image?url=https%3A%2F%2Fimages.mirror-media.xyz%2Fpublication-images%2F7L9eqjsjShMYzgitBkOLd.png&#x26;w=3840&#x26;q=75" alt="这笔 2015 年的交易需要 5,569 个签名才能验证。 节点验证花费了超过一分钟！ Segwit 升级的部分目的是为了解决这个问题。"><figcaption><p>这笔 2015 年的交易需要 5,569 个签名才能验证。节点验证花费了超过一分钟！Segwit 升级的部分目的是为了解决这个问题。</p></figcaption></figure>

现在想象一下，如果有人将一笔交易包含在一个节点需要 2 小时运行的区块中，会发生什么。这实际上是比特币网络上的 DDoS！节点应及时验证区块，因为在验证前一个区块之前，矿工无法添加新区块。通过限制比特币的语言，中本聪确保节点验证区块所需的计算量永远不会失控。

输入 BitVM...

[Robin和](https://twitter.com/robin_linus?lang=en)[ZeroSync](https://zerosync.org/)的聪明团队想出了一种方法，允许这些任意程序在比特币上执行，而不需要让每个完整节点都运行程序中的每一行。

BitVM 通过一些疯狂的魔法实现了这一点。

首先，它在脚本中模拟[布尔逻辑门](https://en.wikipedia.org/wiki/Logic_gate)（计算机的构建块）。然后，它使用哈希锁和主根地址的结构来验证任意计算。最后，通过一个优雅的挑战协议，比特币网络可以判定哪一方（在我们的例子中是 Paul 或 Vicky）是正确的。我们将在以后的文章中深入探讨这一切是如何运作的。另外，[Shinobi 的文章](https://bitcoinmagazine.com/technical/the-big-deal-with-bitvm-arbitrary-computation-now-possible-on-bitcoin-without-a-fork)为好奇的读者提供了高级概述。现在，让我们回到一个级别并讨论这意味着什么。

### BitVM 能实现什么？ <a href="#heading-what-does-bitvm-enable" id="heading-what-does-bitvm-enable"></a>

了解了所有背景知识后，我们又回到了 BitVM。BitVM 创建了一种验证比特币任意计算的方法。

在 BitVM 出现之前，Paul 和 Vicky 无法下棋，也无法通过比特币验证结果。现在他们可以了！

BitVM 将允许他们每人存入 0.5 BTC 到他们共同控制的 2/2 多重签名地址中。如果他们都同意 Vicky 获胜，他们都会签署一项交易，将 1 BTC 发送给 Vicky。十分简单！然而，如果他们不同意，有一种方法可以验证**比特币上**发生的每一步棋，并**迫使**Paul 向 Vicky 发送 1 个 BTC。这就是 BitVM 如此特别的原因。

虽然[国际象棋是一个很酷的例子](https://github.com/mcbagz/LogicGates/blob/main/Example.ipynb)，但 BitVM 的设计空间是无限的。它将允许用户验证几乎所有程序都直接在比特币上正确运行！仅仅几周时间，我们就已经看到强大的团体[正在开发玩具程序](https://github.com/supertestnet/tapleaf-circuits)来测试这个新系统。

对于我来说，我对 BitVM 的潜力感到最兴奋：a)。启用信任最小化的桥梁，以及 b.) 验证零知识证明。这是零知识 (zk) 汇总的两个关键组成部分。如果您不熟悉 zk rollups，我推荐[这篇文章](https://mirror.xyz/twhittle.eth/JU2OOxTJO6LLKjd99Dan9lA-z09iOAxrInXn5JHx9wA)，其中介绍了为什么比特币最终需要 zk rollups。

*tl;dr* zk-rollups 是扩展比特币的圣杯。如果 BitVM 将比特币从计算器变成 iPhone，那么 zk rollups 就会将 iPhone 变成超级计算机。

到目前为止，zk rollup 还没有建立在比特币上，因为无法将 BTC 从主链可信地转移到 rollup，也无法验证 zk 证明。有了 BitVM，我们也许就能做到这两点！

如果 BitVM 能够增强比特币的性能以实现 zk rollups，那么完全链上比特币应用的新时代即将爆发。Defi、DAO、游戏等都将进入比特币。亲爱的读者，这就是 BitVM 的承诺。它应该会让你兴奋地看看接下来会发生什么！

### 笔记 <a href="#heading-notes" id="heading-notes"></a>

\[^1]：在以太坊上扩展这个国际象棋实现来向获胜者支付预定数量的 ETH 是很简单的。

\[^2]：以太坊之所以可以允许任意程序，是因为你为一笔交易设置的gas费代表了一个*限制*。想要运行“for”循环 100 万次迭代吗？没问题！节点将立即开始执行此操作。但是，如果您在迭代 756,203 时达到了 Gas 限制 - 网络将停止执行您的程序。你仍然支付了所有的汽油费，但你从未得到结果。

在比特币上，支付给网络的费用是为了保证*您*的交易将在所有节点上执行。因此，比特币无法根据您要求节点完成的工作量进行自我调节。例如，比特币上使用的签名哈希算法效率非常低。一位脾气暴躁的比特币用户决定提交一笔[需要 5,569 个签名才能验证的](https://mempool.space/tx/bb41a757f405890fb0f5856228e23b715702d714d59bf2b1feb70d8b2b4e3e08)交易，而节点花了一分钟多的时间来验证！Segwit 的创建部分是为了解决这个问题。

#### *结论性思考* <a href="#heading-concluding-thoughts" id="heading-concluding-thoughts"></a>

*BitVM 入门到此结束。谢谢阅读！*

*我正在考虑将第一部分纳入针对非技术读者的多部分 BitVM 系列（完整概述如下）。如果这让您感到兴奋，请在 Twitter 上告诉我*[*(@Dr\_DAO\_)*](http://x.com/Dr_DAO_)。*我一直在寻找新的方法来帮助社区更好地理解比特币。*

*BitVM 演练示例*

* *第一部分：什么是 BitVM，我为什么要关心？（本文）*
* *第二部分：计算机、程序和电路*
* *第二部分：致力于比特币计划*
* *第四部分：挑战协议*
* *第五部分：BitVM 面临哪些挑战？*

强烈感谢[Dazza](https://twitter.com/dazza9x)、[English](https://twitter.com/EnglishNFTea)、[Isabel](https://twitter.com/isabelfoxenduke)、[Jan](https://twitter.com/nonfungible_jan)、[Udi](https://twitter.com/udiWertheimer)和[Super Testnet](https://twitter.com/super_testnet)对本文的深思熟虑的评论。
