闪电网络

闪电网络的原理

闪电网络就是在链外专门设置一个通道(channel),所有的交易都在链上进行,只有最终结算在链上进行。这就好像我们的计算机体系结构里面加入的一个工作内存和主内存的 hiarachy。

过程描述如下:

  • 假设我和你,咱俩人经常交易,于是就在闪电网络上开个通道,容量是2BTC;
  • 通道里面AB在总量不超过2BTC的情况下随便相互收发,所有操作送到一个具有AB多重签名的地址,每次操作签名就好;
  • 通道里面的操作没有手续费,因为真实的BTC在链上其实没动过,通道里面的操作本质上是只是对俩人那两个BTC份额所有权的交易;
  • 等啥时候AB不想交易了,把隧道关闭,去真实的比特币主链上兑换一下自己在那两个BTC里的份额就好;
  • 高手续费只发生在打开,或是关闭一个通道的时候。

为什么闪电网络会不安全

这种侧链的出现,必然会导致庞大的中间人出现:

网络上会演化出一些大的中间人节点,这些节点有足够多的BTC,足够的流动性,和足够多的通道数量,所以你再也不用担心高额的手续费,自己去找中间人等等一系列麻烦。
然而这些节点,和矿工不一样,他们并不和你直接交易BTC,他们更像是一种“第三方清算组织”

也就是说,去中心化(随机的中心化)被局部的中心化所控制了。

这带来的麻烦是:

  • 要让这些组织在整个网络可信,他们一定会受制与金融监管,比如说KYC(Know you Customer,了解你的用户)和AML (anti-money laundering,反洗钱)。
  • 因为不在链上交易,所以盗窃是可能的,如果一个节点把旧的状态在链上发布出去,你的BTC可能和你的交易数目不符,被活生生偷走。
  • 想要防止盗窃,你要么自己跑一个全节点随时监控,要么雇第三方来干这事儿。

所以这些大的中间人节点,一定会满足以下这些条件:

  • 接受金融监管
  • 高流动性
  • 设立反欺诈部门,防止盗窃等行为
  • 对每笔交易收取小额手续费,作为设立节点的经济激励

这就又导致了传统银行行业的出现了。

这部分内容主要参考《闪电网络会毁了比特币,骚年你信不?》

有意思的是,比特币的核心团队(Core)是支持闪电网络的方案的。他们给出的理由比较原教旨主义,如果使用扩容的方式来提升比特币的性能,那么日后比特币的全账本节点就不能放在普通电脑之上了,只能被大公司所维护,也就违背了去中心化的初衷。当然,也有人认为 core 团队是有意维持低 TPS 使得转账手续费变得奇货可居,这样比特币网络能够获得更高的佣金来支付矿工高昂的电费,也可以创造为企业开发侧链(sidechain)的机会。他们专门成立了一家 BlockStream 公司,来寻找核心团队变现的机会。

不过侧链的出现,也有可能让主链上的挖矿事业深受打击。所以矿霸们都不愿意闪电网络出现?

CORE,或者比特大陆,其实就是两个山头。在比特大陆的描述里,CORE就是一群冥顽不灵的程序员。死守着原有内核,不予变通。沉浸在程序员的小世界里,根本不知道比特币发展需要什么。而比特大陆则是白衣骑士,将拯救比特币于水火。比特大陆才能带比特币飞到新的高度。你们这些“老家伙”,不要固执了。而在CORE的描述里,比特大陆就是把持着话语权,利用信息不对称,故意歪曲事实,绑架了矿工和国内比特币圈的舆论。还假惺惺的总是扮演中立客观方的角色,其实比特大陆才是真正的幕后大黑手,有着某种不可告人的秘密。

侧链

闪电网络其实是侧链的一种。从某些角度上说,交易所也是一种侧链。

侧链(sidechains)实质上不是特指某个区块链,而是指遵守侧链协议的所有区块链,该名词是相对与比特币主链来说的。侧链协议是指:可以让比特币安全地从比特币主链转移到其他区块链,又可以从其他区块链安全地返回比特币主链的一种协议。

侧链协议的目的是实现双向锚定(Two-way Peg),使得比特币可以在主链和侧链中互转(图)。

在一个侧链的生态系统里,新的代币(new tokens)只能在相应的比特币被冻结时才能创建。换句话说,如果你想在一个侧链上发行新币,你必须禁用(deactivate)你的一部分比特币。

侧链的工作过程是:

  • 把比特币转移到特意形成的地址上面。转移之后的比特币就被固定在这个地址上,你已经丧失了对其的控制权,实际上现在没有人对其拥有控制权。
  • 一旦固定比特币的交易被确认,你就给侧链发送一条消息,消息要包含是你做了比特币转移的交易自己该比特币已经被固定住了。一旦第二条区块链同意比特币的侧链,那按照预先的协议,会给你一定数量的该区块链上的代币,现在你对这些代币拥有控制权。
  • 具体的效果来看确实像是比特币流转到了别的区块链上,实际上你拥有的比特币只是被固定住了,没有被销毁成为新的代币。
  • 你想转回自己的比特币,那么操作是对称的。

所以侧链是场外交易的抵押-兑换模式。

隔离见证(SegWit)问题

每一个比特币交易的数据,可以被分为两个部分。一是交易内容本身,二是见证的数据内容本身。

扩容只是隔离见证的一个副作用,隔离见证通过软升级的方式还避免了比特币的漏洞。

有些人认为隔离见证是闪电网络的必要条件(core 团队),然而另外的人则认为隔离见证只是让闪电网络的实现变得更简单了而已。

传统的比特币区块里面,有个 script 部分,大概长这样:

  • scriptPubKey部分(由上一笔转账的转出者提供): OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
  • scriptSig部分(由这一笔转账的转出者提供):

实际上转账者拥有比特币,是拥有比特币的转移权。scriptPubKey 是由上一个转账的转账者输入的,算是 UTXO 的一部分。现在的转账者要使用这笔钱,就是要提供一个 sig 可以推出 pubKey,而 pubKey 又能推出上面的 pubKeyHash。矿工会在区块生成的时候做一个试算过程,来验证这个交易是不是合法的。

ScriptSig 如果能够被移出传统的 transaction 数据结构,也就可以让1兆大小的区块容纳更多的交易(Core 团队认为这可以让区块的实际容量达到原先容量的1.7x 倍)。支持隔离见证的钱包,将不再使用1开头的钱包地址,而是3开头的钱包地址。交易的发起者依然需要使用自己的签名来发起交易,验证交易的时候依然要走 script 的这个路子。但最终存入区块里的数据就不再包含这种签名(即见证)信息了。

没看过具体的数据结构,但被隔离出来的见证信息,最终还是应该存在链上的某些地方才对。

隔离见证能够解决三个问题:

  • 可以修复一个由交易延展性(transaction malleability)引起的问题。

  • 可以实现闪电网络。

  • 一定程度上增加一个区块里可容纳的交易数,缓解交易拥堵。

但其中最重要的,可能还是解决交易延展性问题。

先说一下交易延展性。比特币区块链上每笔交易记录里都包含有见证信息,交易的唯一标识(交易的哈希值)也是包括了见证信息计算出来的。由于见证算法的数学特性,任何人在拿到一个交易记录后,拿到其中的见证信息,然后可以在不需要知道私钥的情况下,很容易的拼凑出另外一个有效的见证信息。这样,他可以用拼凑出来的另外那个见证信息,拼凑上交易记录中的其他交易信息,制造出一个另外一个交易记录(哈希值不同)。如果可以让拼凑出来的交易记录先被写入区块链,那么,之前那个原始交易记录会被认为是无效的交易而失败。这不会造成双花,也不会对区块链造成破坏,但是对原始交易记录的发起者会造成困扰,因为如果拿着原始交易记录的哈希值找不到交易的成功记录。尤其是对于一些交易所,如果没有完整的内部日志,可能无法追溯交易记录,导致攻击者利用拼凑的交易记录先成功提币,再申诉说没有提到币,要求再次提币。

简而言之,就是 A 转了一笔钱给 B,流水单号为1。利用签名,可以制造出另一个流水单号为2,但仍然由 A 转给 B 的转账。虽然 B 确实拿到了这笔钱,流水单号位1的转账却作废了。这就使得交易有了可争议的地方。

大区块扩容

比特币现金(曾经的 BCC,现在的 BCH)是比特大陆江卓尔等人带头搞出来的,分 Core 的权的大容量区块产物。

此处有待补充。