为什么 Dapp(去中心化应用)一般都建立在以太坊上而不是比特币上
作者:BitMEX Research
来源:<https://blog.bitmex.com/dapps-or-only-bitcoin-transactions-the-2014-debate/>
摘要:在这篇文章中,我们会解释为什么 Dapp(去中心化应用)一般都建立在以太坊上而不是比特币上,这需要我们回到 2014 年 3 月。我们研究了一场关于一套叫做 “Couterparty” 的 Dapp 协议应不应该、应该如何使用比特币区块链的争论。这时候这场争论也被叫做 “OP_Return 之争”。我们解释了 OP_Return 的用法和侧链的历史。我们的结论是,不论你喜不喜欢,比特币社区在 2014 年的文化就是那样的,而且,对比特币交易数据的另类用途的负面评价,极大地推动了 Dapp 的开发者迁移到像以太坊这样的系统上,尽管还有其他因素存在。
我们经常会问这样一个问题:为什么那些 Dapp,比如分布式交易所,一般都建立在以太坊上,而不是比特币上?毕竟,在比特币上开发 Dapp,包括分布式交易所、域名系统乃至 token,是完全可以做到的。这当然有几个方面的原因,例如:1)以太坊的原生编程语言更灵活,所以开发 Dapp 更加简单;2)以太坊的出块时间更短,这会让 Dapp 对用户更友好;3)比特币选择了一个更保守的区块大小限制,所以比特币上的手续费可能会更高。这里讲的所有因素都有影响,但是,在我们看来,这些因素的影响通常被高估了。最重要的因素是文化。一些比特币人和比特币开发者就是不想要这种类型的活动在比特币区块链上发生,而且他们成功地阻遏了它们。这个过程似乎主要发生在 2014 年 3 月;这段时间里发生的事情就是这篇文章的主题。与此同时,其它区块链(比如以太坊)的推广者,可能利用并放大了比特币开发者这种明显的立场,来帮助自己的链获得关注。
就像我们在 2020 年 9 月的报告中提到的那样,2014 年初,Counterparty 发布了。Counterparty 是一个建立在比特币上的协议层,支持诸如创建新代币和代币分布式交易所等功能。这个系统的工作原理是使用比特币交易数据的一部分,将它们用在 Counterparty 协议中,协议本身作为一个函数,实现诸如创造代币、发送代币、在分布式交易所中为代币出价等功能。
更准确地说,一开始,Counterparty 使用比特币操作码 OP_CHECKMULTISIG,将 Counterparty 相关的数据包含到比特币区块链上。这个操作码的预期功能是验证一笔 Pay-to-Script-hash(P2SH)多签名交易的签名。作为一个例子,2014 年 7 月发起的一笔 Counterparty 交易可见此处。这笔交易将比特币发回了其原本的地址,还带有三个额外的输出,这些输出的脚本正是跟 Counterparty 协议相关的数据。这笔交易的用意是创建一种叫做 TICKET 的代币。使用 OP_CHECKMULTISIG 算是一个黑客技巧,因为这并不是这个操作码的设想用途。Counterparty 现在使用比特币的 OP_Return 操作码来存储数据,在某种程度上,这更符合开发者的意图。举个例子,这是一笔最近的 Counterparty 交易,使用了 OP_Retrun。
在 2014 年初,围绕着 Counterparty 出现了许多实验、开发者活动和创新,人们也很激动;它领先于一个叫做 “Mastercoin” 的竞争对手平台。
OP_Retrun 是一种比特币交易输出,已被证明是不可花费的。它可以用来烧掉比特币,以及在比特币区块链上存储任意数据。因为这些数据不是 UTXO 集的一部分,这样存储数据被认为有助于扩展比特币,因为剪枝模式的节点不需要存储 OP_Retrun 数据。
比特币的共识规则允许的 OP_Retrun 输出体积上限为 10000 字节。举个例子,在 2013 年 5 月,有人在这笔交易里利用了这个特性。这个 OP_Retrun 输出包含了 1987 年 Rick Astley 的一首歌 “Never Gonna Give You Up” 的歌词,这首歌跟 Rickrolling 表情包潮流有关。
在 2014 年以前,包含 OP_Retrun 输出的交易是不标准的,不会被常规的比特币节点转发。但是,如果某个矿工打包了这样的交易,节点也会认为它们是有效的。到 2014 年 3 月,Bitcoin Core 0.9.0 发布,将 OP_Retrun 输出纳入为标准交易的类型,因此,这种交易也会被节点转发。当时的更新说明这样说:
这一变更并不是鼓励在区块链中存储数据。这次的 OP_Retrun 变更创造了一种可证明可剪枝的输出,以避免永远不可花费的输出被用来存储任意数据(比如图片) —— 有一些这样的方案已经部署了 —— 这样会导致比特币的 UTXO 数据库膨胀。在区块链上存储任意数据依然是个糟糕的想法;在别的地方存储跟货币无关的数据会更便宜也更高效。
来源:<https://bitcoin.org/en/release/v0.9.0#opreturn-and-data-in-the-block-chain>
Bitcoin Core 0.9.0 只会转发 OP_Retrun 输出小于等于 40 字节的交易;要是数据大于这个体量,这笔交易依然是有效的,但不会被节点转发。这个限制一开始预期是 80 字节,但是,经过许多讨论之后,开发者们最终同意是 40 字节。需要说明的是,OP_Retrun 的转发限制在 Bitcoin Core 的发行版本中从未下降过。
在 2016 年的 Bitcoin Core .011.1 中,允许转发的 OP_Retrun 大小限制提高到 80 字节;而在 2016 年底的 Bitcoin Core .012.0 中,提高到 83 字节,这个限制也一直沿用到今天。这意味着,如果你想让一笔带有 OP_Retrun 输出且该输出的体积大于 83 字节的交易上链,你要么得自己把它挖出,要么得把它直接发给某个矿工。
在 2014 年 3 月 20 日,比特币的主要贡献者之一 Jeff Garzik 开始在 Bitcointalk 论坛的 Counterparty 帖子中发言。他批评了 Counterparty 对区块空间的用法
单从数据来说,我没有看到任何一种在区块链上存储数据的方案不能用一条哈希值来安全地替代。你不需要在区块链上存储数据。这完全是智力上的懒惰。带时间戳的哈希值是同样安全的,效率还更高。更进一步地说,你可以在比特币上挂载一条次级链,这也可以证明是可行的。
来源:<https://bitcointalk.org/index.php?topic=395761.msg5796379#msg5796379>
Jeff 还说:
CheckMultiSig 很明显是为 ECDSA 公钥而设计的,不是为任意数据而设计的。所以把这个操作用在其目标之外的地方,会产生负面的、也许是意外的甚至不可知的结果,你都不必奇怪。Counterparty 交易并不是 “根据比特币协议” 而运行的,它们是溜过去了,因为这些操作码从未被预期以这种方式使用。
来源:<https://bitcointalk.org/index.php?topic=395761.msg5827189#msg5827189>
你可能奇怪 Jeff 居然会有这种观点,因为在 2017 年,他似乎是 “大区块主义者”,这种对区块空间用法的保守思想似乎与他支持大区块的想法有矛盾。但是,这个明显的矛盾在 2014 年还没有显露出来。Jeff 的这种看法在那时候是几乎所有活跃开发者都或多或少同意的,而这些人中也有一些在日后成了大区块主义者。我们只能说,一个人对区块大小限制的看法,跟他对这个问题的看法没有必然关联。那时候 Jeff 是一个非常受人尊重的开发者,而这些帖子也成了 Counterparty 开发者和用户的一个重大关切。
一个假名为 “BitcoinTangibleTrust” 的 Counterparty 开发者回复 Jeff 道:
毫无疑问你是对的。我们不需要在区块链上存储数据。带时间戳的哈希值同样安全而且效率更高。可以证明次级链能够挂载在比特币上。但是,就像 PhantomPhreak(Counterparty 的联合创始人和开发主管)说的,Counterparty 是使用每一笔 1-of-3 多签名交易来存储 256 字节的数据。此外,所有这些多签名交易也都是由矿工来处理的。
这个开发者继续批评比特币开发者 OP_Retrun 输出限制在 40 字节(而非 80 字节):
如果 OP_Retrun 是为了 叫停/减少 使用多签名输出来存储数据的行为(并减少区块链的膨胀),我担心减低允许的 OP_Retrun 输出大小,会意外地让多签名输出对元协议变得更有吸引力,而 OP_Retrun 则更没有吸引力。
上面提到的 Counterparty 开发主管和联合创始人 “PhantomPhreak”则声称:
你们的想法是我们可以在一个次级区块链上存储数据,然后将带时间戳的数据的哈希值存在比特币区块链上,哈希值的大小也不超过 40 字节。我们不这么做的理由并不是 “智力上的懒惰”,而是实现上的复杂性。Counterparty 不是一个计算机科学项目;为了开发速度上的好处,它被设计得尽可能简单。甚至我们不得不使用多签名输出来存储我们的数据,OP_Retrun 输出太小了。你们颠倒黑白,把更糟糕的用法定义成了更好的用法。
第二天,Jeff 回应道:
这就叫 “搭便车”。给定绝大多数 —— 超过 90% —— 的比特币区块链应用都是货币的用法,使用全节点作为呆数据(dumb data)的存储终端就是滥用所有志愿者的网络资源。整个网络都会复制交易数据,那为什么不搭个便车呢?Mastercoin 和 Counterparty 没有参与现有的社区,而是直接 “啪” 一下打开开关,就开始使用比特币的 P2P 节点作为多余的数据仓库。一个未花费的交易输出从来没被设想过成为任意数据的仓库。它能被这样滥用,不代表这样的用法就是对的,也不代表它是更高效的,更不代表它是最优的解决方案。UTXO(未花费的交易输出)数据库是整个网络的快速访问数据库。每一个节点都需要这个数据库尽可能小,这样处理交易的速度才最快。将任意数据编码到未花费的交易输出里,是网络层的滥用,就这么简单。整个网络都承担这个成本。
来源:<https://bitcointalk.org/index.php?topic=395761.msg5815887#msg5815887>
由于 Jeff 在社区中的地位很高,Counterparty 社区中的大部分人似乎都热衷于参与进来,解决这个问题。比如 BitcoinTangibleTrust 就回应道:
感谢你分享你的想法,Jeff。那么,你会帮我们参与到现在的 bitcoin core-dev 社区中吗?Counterparty 有兴趣作为负责任的伙伴,因为我们为了生存也需要比特币区块链。请告诉我们,我们该如何合作解决这个问题呢?
来源:<https://bitcointalk.org/index.php?topic=395761.msg5816031#msg5816031>
另一个 Counterparty 开发者提出了另一个观点:
如果不实施破坏性的变更,比特币的协议有办法阻止 XCP 这样使用它吗?
要是比特币开发者没办法屏蔽 Counterparty 相关的交易,也许这种反对就不重要,Counterparty 也会继续这样使用比特币(这也不需要谁的许可)。但是,比特币开发者 Luke-Jr 那时候也是矿池运营者,他也参与到了辩论中:
矿工应该过滤掉滥用行为。
来源:<https://bitcointalk.org/index.php?topic=395761.msg5816503#msg5816503>
然后 Luke-jr 建议这样的系统可以使用合并挖矿的侧链来实现,这就能防止区块链的膨胀:
问题不在于使用新的层(layers),而在于把事情强加给没有这样的意愿的人。新的层可以在选择进入(opt-in)的基础上实现,这样既不会使区块链膨胀,又不会强迫不参与的人存储数据。
Luke 也被问到为什么比特币开发者将也许转发的 OP_Retrun 输入体积上限从最初提议的 80 字节降低到 40 字节。Luke 用下面三点来回应:
Luke-Jr 继续说:
幸运的是,随着矿工回归到去中心化,我们将看到整体上更少的 滥用/洪泛 交易,无论是 OP_Retrun 还是其它情形。现在,如果谁能说出一个使用交易来存储哈希值的有效且必要的用途,显然那是一个矿工会严肃考虑开挖的用途。
来源:<https://bitcointalk.org/index.php?topic=395761.msg5817170#msg5817170>
那时候 Luke 的矿池也开始过滤 Counterparty 相关的交易。这时候,恐惧和不确定感开始在 Counterparty 社区内蔓延。他们需要 OP_Retrun 输出有 80 字节,不然他们就不得不继续使用 OP_CHECKMULTISIG 操作码。根据 Luke 的说法,OP_Retrun 输出不太可能提高到 80 字节。除此之外,一些人害怕开发者会进一步降低这个上限,不明示地把 Counterparty 赶出去。比特币开发者看起来对 Counterparty 非常不友好,因此有些人担心很难再继续使用比特币协议。
2014 年 3 月 25 日,以太坊的主要创始人 Vitalik Buterin 加入了进来,他主张这场辩论应该更多围绕着费用,只要你支付了足够多的费用,你的交易就应该被认为是可以正当进入区块链的。今天,以太坊的手续费算法非常的复杂,在不同的区块链用法上有不同的上限和费率,本质上也是在解决 OP_Retrun 问题。有人主张比特币的 SegWit(隔离见证)也在一定程度上缓解了这个问题。
“OP_Retrun 变成一个问题是协议的失败。在理想的世界里根本就不存在 “滥用” 这个概念;费用是强制征收的,而且是仔细构造的,以接近一笔交易给整个网络造成的实际成本”,他说,“只要你能为自己做的事支付费用,那你就可以做,不必有任何疑问”。
来源:<https://www.coindesk.com/markets/2014/03/25/developers-battle-over-bitcoin-block-chain/>
2014 年 3 月 27 日,Counterparty 改变了它构造交易的方式,以绕过 Luke-Jr 的挖矿过滤器。但是,几天之后 Luke 就说:
大新闻!过滤器增加了过滤这些垃圾的功能!不到 5 分钟,只要 1 行代码!
来源:<https://bitcointalk.org/index.php?topic=395761.msg5955613#msg5955613>
Luke-Jr 也指名道姓把 Counterparty 说成是滥用的一种形式:
这就是一种滥用,因为你强迫他人 下载/存储你的数据,不给他们自由选择。每一个全节点都必须下载完整的区块链(无论可不可以修剪!)。每一个全节点都同意下载和存储金融交易。但不是每个全节点都同意存储别的东西。对此我们需要 100% 的共识,而不能仅仅是某个子集(即,不能仅仅是矿工;也不能仅仅是开发者),甚至多数共识也不行。但是,每个人都可以存储非区块链的数据。你把数据放到区块链上,除了强迫不想存储的人存储这些数据意外,别无收获。你们解释一下,这不是滥用是什么?
来源:<https://bitcointalk.org/index.php?topic=395761.msg5826443#msg5826443>
如你所料,比特币开发者的担忧最终遭到了一些 Counterparty 开发者和用户的挫败感和愤怒。我们在下面列举了一些意见。首先是一位叫做 “proqupine” 的用户,对 Luke-Jr 的矿池屏蔽 Counterparty 交易的评论:
你根本不是作为开发者在负责任地寻找解决方案 —— 你是在鼓励猫鼠游戏。你知不知道你也在败坏网络的中立性(net-neutraility)?而且你还试图把规定人们应该和不应该在区块链上做什么交易的权力据为己有。那些你不喜欢的人接下来会面临什么局面?你会不会制裁从位于你不喜欢其政府的对外政策的国家的节点广播出来的交易?
来源:<https://bitcointalk.org/index.php?topic=395761.msg5955738#msg5955738>
在 2014 年3 月 21 日,proqupine 又说:
你们且慢,“每个节点都同意存储 X 类型的数据,都不同意存储 Y 类型的数据” 这件事情是什么时候决定的?没准我还不同意存储跟洗钱、毒品和军火买卖、人口贩卖活动等等相关的交易呢。你基本上否定了协议的中立性,断言协议应该和不应该怎么使用;而且,你不是在使用第一人称说话,而是使用了 “我们”,给人印象是你在代表所有矿工和协议用户。
来源:<https://bitcointalk.org/index.php?topic=395761.msg5826584#msg5826584>
其他人质疑何以 Jeff 和 Luke 有超越他人的权力、可以否决特定用途:
我没法认可这种态度。我从来不知道比特币还有主人。我以为我,以及其他一百万人是主人呢 :)
Counterparty 的联合创始人之一 PhantomPhreak 说:
首先,Counterparty 交易也是金融交易。其次,每个全节点都已经同意了下载和存储比特币区块链,并没有缩减范围。也就是所有根据比特币协议而构造的交易,Counterparty 交易当然也在其中。中本聪在创世区块中嵌入了一条政治新闻,看在上帝的份上 …… 你对比特币的可能用途的看法,比其他人要狭隘得多。
来源:<https://bitcointalk.org/index.php?topic=395761.msg5826770#msg5826770>
TA 继续说:
比特币做了许多一开始没有预想到的事。当然,我们也喜欢比现在更优越的解决方案。Counterparty 一开始的设计是使用 OP_Retrun 来存储所有的消息数据,我认为这是非常优雅的,而且对区块链的影响非常小。我们围绕 Gavin 在正式的 Bitcoin 博客里宣布的 80 字节的限制安排了我们所有的消息格式。我们使用多签名的输出,是因为我们没有别的选择。我们不希望延展比特币协议。我们只想在里面做事,尽可能简单、尽可能直接,这样可以得到稳定性、安全性等等方面的好处 ……
来源:<https://bitcointalk.org/index.php?topic=395761.msg5827473#msg5827473>
还有:
再说一遍,我们在区块链上只存储金融数据,而且我们也为自己使用的空间付费了。OP_Retrun 输出中的金融交易,并不比全节点存储的其它任何东西更有害。
来源:<https://bitcointalk.org/index.php?topic=395761.msg5827688#msg5827688>
另一个用户 “bitewhizz” 说:
如果你不想存,那你就不存,就这么简单,别用比特币、别下载区块链,这是你的自由。但是,我的同意,意味着我相信比特币在转账之外还有更多的功能;而且,基于一个事实:没有人拥有比特币这个项目,而且有一个 OP_Retrun 在那里,我看不出有什么理由要删除这个功能,就因为你不想存一个本来你就有自由不存的东西。
来源:<https://bitcointalk.org/index.php?topic=395761.msg5827897#msg5827897>
“Anotheranonlol” 说:
我真的没办法理解,一笔 Counterparty 交易怎么就不是一笔金融交易了?我同样无法理解的观点是,就因为 1000 个节点中有 1 个不想接受这种数据,它就该默认被禁止。近来 Mt.Gox 的事情和大量的黑客、盗窃和损失,都因为你在一个中心化的实体中存放自己的资金,而 Counterparty 已经提出了一种允许去中心化、免信任地解决这个问题的方案。
来源:<https://bitcointalk.org/index.php?topic=395761.msg5827776#msg5827776>
“Baddw” 说:
事实就是,任何人都可以在任何时间在区块链上存入任何数据。它已经,也正在被用于这种用途。每个运行比特币节点的人应该都已经知道了这件事情;如果他们不知道,在他们安装 Bitcoin-QT 的时候应该有一个提醒,告诉他们这一点(如果可以有的话;我自己是没见过)。任何比特币的交易都可以只是一笔简单的资金转移,也可以是一封情书,也可以是引爆炸弹的一个导火索。消除这些可能性也会杀死比特币。
来源:<https://bitcointalk.org/index.php?topic=395761.msg5827749#msg5827749>
Baddw 还说:
计算机历史中的绝大部分伟大的进步,都是人们发现发明者意料之外用途的结果(实际上,整个的人类科技史也是)。好事情是这些发明家没有那么狭隘,没有不让别人利用自己的发明。那些这样做的人,也发现自己很快被超越了。
来源:<https://bitcointalk.org/index.php?topic=395761.msg5827925#msg5827925>
从评论中可以明显看出,许多 Counterparty 的用户和开发者都对比特币开发者的态度感到惊讶和失望。虽然整个项目在继续,就像 Mastercoin 一样,很有可能,一些开发者因此离开了比特币,在别的区块链系统(比如以太坊)上开发他们的协议,不论这是好是坏。但是,其他人也有不一样的看法。
在 OP_Retrun 辩论期间,Counterparty 和区块链膨胀的反对者基本上都提到了一些形式的合并挖矿侧链,作为 Dapp 的一种解决方案。实际上,据说中本聪也更喜欢这条路径,并在 2010 年 10 月表示支持一个域名系统:
我认为,BitDNS 可以放在一个完全独立的网络和专门的区块链上,而且这条链可以和比特币分享 CPU 算力。唯一的交集是让矿工可以同时搜索对两个网络都有效的工作量证明。
来源:<https://bitcointalk.org/index.php?topic=1790.msg28696#msg28696>
使用侧链来实现这样的 Dapp 系统有许多困难,而且,今天我们显然比 2014 年的时候对这些弱点有了更深入的认识,那时候许多人只是假设这种模式可以工作:
在 2014 年 3 月,Counterparty 开发者(xnova)列举了他对侧链观点的反对意见。
而且,如果我没有遗漏什么的话,我们将依然需要解析次级链中的区块的数据来获得我们存储的数据(至少,如果我们假设这是一个比特币或比特币衍生的实现,就是如此)。所以:
- 这将无法为 Counterparty 在染色币(Colored Coin)上提供的功能(即,去中心化交易所、打赌、资产召回、分红、差价合约,等等)启用 SPV 类型的 Counterparty 轻节点
- 它将弱化 Counterparty 交易的安全性
- 它将极大地增加实现的复杂性(也即增加出现 bug 和漏洞的几率)
唯一的可疑的好处是 稍微 放松我们对区块链的存储要求(即,也许每一笔交易少占用 20~40 字节?)。我看不出这合理在哪儿。还有一点,Counterparty 可以为比特币带来许多好处,随着以太坊(以及其它相似的,不以比特币为原型的 “2.0” 币)出现之后,这一点会变得越来越明显。我个人的感觉是,至少比特币可能非常需要为生态提供这种类型的功能,以便在实质上跟以太坊以及(未来的)群众的愿望清单展开竞争 —— 不然就有被淘汰的风险,至少在投资者和金融市场运营者中是这样。如果比特币能得到他们的理解、信任和思想共鸣,他们有能力为比特币生态系统带来数十亿甚至数万亿的投资。
来源:<https://bitcointalk.org/index.php?topic=395761.msg5799174#msg5799174>
看起来,一些声称偏爱侧链解决方案的人并不真的对 Dapp 感兴趣,自己也没有实验过它们。因此他们从未深入思考过开发一个分布式交易所的复杂性,以及为什么每个用户的每一个操作都需要安全性。绝大部分比特币开发者似乎只对自己感兴趣的东西开放,而且很清楚地知道自己想要什么:抗审查的货币、非政治化的货币、电子现金,等等……
在 2014 年后,大部分对 Dapp 感兴趣的开发者都专注于在以太坊和其它系统上开发,而不是在比特币上开发。此后,以太坊获得了压倒性的开发者兴趣和势能,而比特币上的 Dapp 开发则很少。本文的重点是强调,这一切的主要推动力并不必然是手续费或者以太坊的虚拟机和以太坊更强的技术空间,而直接就是因为许多比特币人和比特币开发者不想让 Dapp 建立在比特币上,而且他们也对这些特性不感兴趣。不论是好是坏,一些比特币人故意将许多 Dapp 的开发者赶出社区。一些比特币人相信,大部分的 Dapp 都跟不可持续的骗局有关,或者这些活动对比特币的安全不利,不应受到欢迎,等等。与此同时,另类币(例如以太坊)的一些支持者可能夸大了所谓的 “OP_Retrun 之争” 的影响和意义,来促进他们的正在发育的区块链。
自 2014 年依赖,许多人的观点都发生了变化。比特币也需要交易费来生存。在 2016 年底,比特币的区块基本是满的,手续费也比较高,更多人开始认可,任何支付了手续费的交易都是 “正当的”。以太坊上的一些 Dapp,比如 Uniswap(分布式交易所)和 AAVE、Compound(借贷协议),已经被证明(在一定程度上)既成功又有趣。尽管如此,比特币人是否真的在乎这些协议、希望它们建立在比特币上,依然是个悬而未决的问题,更不必说人们会不会真的去开发和使用了。
(完)
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!