[Coin] 0-confirmation, Avalanche, Coordicide

楼主: DarkerDuck (達克鴨)   2019-06-07 01:23:29
这三个技术有个共通点,就是都很"快"
只是目的不太一样,但因为刚好历史上有部分技术互相传承,就一起讲吧。
Zero-confirmation是要让使用者快速安全地完成一笔小额交易。
Avalanche则是要尽快形成不可逆的预共识,避免零确认交易可被双花。
Coordicide则是要让全网达成finality共识,移掉COO。
Zero-confirmation现在已经快要变成黑历史了,不过在早期根本被当作理所当然。
而且是直接写在bitcoin.org网站上
https://web.archive.org/web/20140122225824/http://bitcoin.org/en/
Instant peer-to-peer transactions
而且是早在中本聪还在的时候就已经被提出的技术。
https://bitcointalk.org/index.php?topic=423.0
我之前有讲过Bitcoin交易的传输是flooding到整个P2P网络上。
但是假如有double spend交易发生,依照first seen规则,它是无法盖过原本的交易的。
唯一的可能性就是在第一笔交易A发出后,确定对方收到后,再瞬间发出双花交易B。
那么就有可能发生网络中同时有交易A和交易B,一直要到区块产生,才能产生共识。
Zero-confirmation技术就是先建立一个或多个连线非常良好的完整节点。
邻居高达上百个节点,不断监听整个网络中的交易讯息。
只要发现网络中同时有交易A和交易B,那很显然就是一个双花交易。
交易立刻不成立,而且只需要额外等待不到五秒。
而这就是早期无论是bitpay还是coinbase的标准支付方式,零确认数秒内即可交易完成。
https://youtu.be/ZWcezOH06Ds?t=106
但是还不够好,因为你要先建立一个连线非常良好的完整节点,耗费频宽啊。
所以BCH现在有个机制是dobule spend alert 机制,
只要任何一个节点发现了冲突的双花交易,立刻广播全网dobule spend alert。
敢双花还想逃,整个网络都知道了。任何利益关系人就可以立刻终止交易。
但是还不够好,因为矿工可以全部偷偷自己来,我要双花的交易干嘛广播。
等我挖出区块后,再塞到新挖出的区块就好了。
譬如我拥有30%的Bitcoin总算力,那我就有30%的机会成功双花。
而且在我成功前不会有任何人知道,可以不断尝试。
这就是零确认最大的问题,恶意矿工可以自己尝试双花。
所以通常交易所都要等三个确认以上,也就是平均三十分钟才会完成。
假如我们不想等确认,就会需要一个可以在极短时间内形成pre-consensus的机制。
也就是全网必须在极短时间内解决拜占庭问题,产生一个共识排除后来的双花交易。
像是日本人好像都会很有共识地在公共场所做同一件事情,因为他们会读"空气"
Avalanche这一系列的协定,其实基本概念就跟日本人读空气是一样的。
https://ipfs.io/ipfs/QmUy4jh5mGNZvLkjies1RWM4YuvJh5o2FYopNPVYwrRVGV
Avalanche只作用在冲突交易的共识形成,所以基本上并不影响后续PoW的运作。
矿工仍然可以自己选择要让那些交易进区块,哪些不要。
就算不写到consensus rule也是可以运作,就像是segwit那样。
只要大部分的矿工节点遵循Avalanche,不符合pre-consensus的双花交易区块就会被丢弃。
接下来的例子假设网络上有个冲突的双花交易A和交易B,需要网络凝聚共识决定。
下面有四个同样都是用读空气法则的共识协定:
越前面的越简单,但是越不安全。越后面的则比较复杂,但安全性较高。
Slush:
首先跟Bitcoin原来协定一样,交易先到先赢。一个节点将会有交易A或交易B。
每个节点会去问k个邻居节点你们是认定哪个交易?A或B交易?
假如邻居节点认定某笔交易的比率大于0.5k,也就是超过一半都认定是某笔交易。
那就无论自己原来是什么交易,都认定为该笔交易。
这个询问动作只要不断执行,在没有恶意节点的状态下,最后全网只会有一个共识交易。
但问题就是没办法防止恶意节点故意捣乱,没办法达到BFT。
一群恶意节点可以当变色龙,认定的交易乱跳导致最终共识无法确定。
Snowflake/Snowball:
为了避免共识乱跳的问题,这两个改进版的协定加上了类似finality的概念。
就像是BCH超过十个确认后,区块链不再reorg。deep reorg是不允许的。
Snowflake/Snowball加上了confidence值,当现在认定的交易被邻居连续地确认。
那confidence就加一,当confidence到达默认的阀值,就进到finality状态。
认定的交易就不再改变了。
Snowball则更难换认定的交易,不光是进到finality后不再改变认定的交易。
连进到finality状态前要改变认定的交易都必须新交易的confidence值大于旧交易。
现在总算达到最后完整版的雪崩协定
Avalanche:
与其用Snowball的新交易的confidence值需大于旧交易才能够改变。
其实还有让交易更难以被任意改变的方式,那就是IOTA的DAG。
现在致敬IOTA用DAG串起所有收到的未确认交易,越早期的交易越不容易逆转,权重越高。
这部份很类似于IOTA的tip selection algorithm
一样会去算冲突交易的权重,并比较两笔交易何者权重比较高。
邻居节点用这个方式去回答最高权重的冲突交易。
然后此交易的confidence++
跟之前方法一样,一样到达一个阀值后,进到early commitment。
这笔交易就是可以被接受的。
到这边已经差不多讲完整个雪崩协议家族了,但还是有个问题。
假如任何节点都可以进入pre-conseus,并且不用付出额外成本地执行雪崩协议,
那其实用Sybil attack产生大量恶意节点来摧毁整个Avalanche系统根本超简单。
这也就是为什么中本聪的共识机制根本不搞 1 IP 1 Vote的原因。
用Proof-of-Work来确保51%攻击要需要非常高的成本。
并且将其导入到整个Bitcoin利益模型之中,到现在还是无可取代的完美杰作。
这就是为什么我不认为一个完全没有手续费也没通膨加密货币有可能实现真正的去中心化。
因为形成一个去中心化的共识就是会需要付出额外的成本。
所以在BCH版本的Avalanche必须依照PoW特性做很多修改。
譬如在只有矿工节点才需要执行Avalanche,因为只有他们才会产生区块。
你必须至少在前一百个区块里至少产生一个区块才能参与Avalanche。
这已经可以产生非常高的女巫攻击成本。
而且产出区块越多,可以投越多票,更可以线性增加女巫攻击的难度。
甚至交易的confidence也会和现在正在进行中的PoW nonce值有关。
这部分并没有达到最终定案。不过BCHD目前很积极地要把Avalanche整合进来。
https://github.com/gcash/bchd/blob/avalanche/avalanche/spec.md
目前已经有些先期测试数据,只需要两秒就可以达成雪崩协定的finality。
https://shanma.pro/news/23603.html
也就是在未来只要交易所愿意,数秒内入账是有可能性的。
比那个闪电网络搞到现在,还是没什么交易所愿意接受这种风险。
LN甚至多Hop状态下交易速度还比较慢,Avalanche使用体验将会好很多。
https://twitter.com/haydenotto_/status/1135025360611844097
换到了IOTA的Coordicide,因为IOTA的Tangle并不具有共识达成finality的特性,
Tangle是一直在乱长的,tip selection algorithm是局域的,
所以IOTA基金会才要搞个COO,
直接跟你讲那些交易哪些tip给我优先挑,Tangle不要给我乱长。
直接milestone发出达成finality。
现在有了Avalanche这个概念,可以在极短时间内达成达成BFT的finality状态。
这实在是太棒啦,只有一个问题,前面已经提过的女巫攻击。
我不认为一个真正去中心化的共识可以在不耗费额外成本的状态下产生。
BCH要解决这个问题太简单了,直接把PoW拿来用,甚至可以直接带入BCH的利益体系中。
但是IOTA就不要手续费,所以也不会有矿工,用PoS则会有其他问题。
因此就另外创出了Mana和KYC解决这个问题。
它类似于PoS用资金来当作共识参与门槛,Put your money where your mouth is
再来剩下的部分我觉得和Avalanche就大同小异而已。
只不过把名称都改过而已。
把询问邻居节点的行为改成Cellular Consensus
为了让整个架构在数学上更无懈可击,
提出了加入了随机参数的Fast Probabilistic Consensus
但整个理念和Avalanche系列里的Snowflake/Snowball读空气达成共识是一致的。
作者: kugwa (kugwa)   2019-06-07 01:34:00
禁止deep reorg好像是BTC就有的?只是我不太懂 这样不会出问题吗所以Avalanche是让诚实矿工挑选的零确认交易更一致最终的共识当然还是以区块链里的为准 是这个感觉对吧
楼主: DarkerDuck (達克鴨)   2019-06-07 01:40:00
最终共识的确是以区块链里最长链为准矿工也可以完全不理Avalanche的共识只是它产生的区块会有很高的机会被orphan掉而已
作者: kugwa (kugwa)   2019-06-07 01:51:00
意思是跟Avalanche唱反调的矿工挖出的区块 即使已经领先一个高度 也不会被Avalanche节点所接受吗?(设AB为一对双花交易 Avalanche节点决定的是A 唱反调的是B)
楼主: DarkerDuck (達克鴨)   2019-06-07 01:53:00
是的,这运作方式其实跟segwit一样的假如没有硬分叉写到consensus rule会这种状态含有不符合segwit规则的segwit交易其实是valid chain但因为验证segwit规则的算力占绝大多数所以不会有问题任何敢不验证segwit规则的矿工区块只会被丢弃
作者: kugwa (kugwa)   2019-06-07 01:56:00
可是这就不是以最长链为准了耶 还是说如果那条超过太多的话
楼主: DarkerDuck (達克鴨)   2019-06-07 01:57:00
不过用在pre-consensus上就几乎没啥问题
作者: kugwa (kugwa)   2019-06-07 01:57:00
最后Avalanche节点们还是会一起反悔?只是如果Avalanche节点占据多数算力的话 通常可以马上再反超而已我知道很不常发生~只是想确认一下极端情况下采取的对策就是最长链跟Avalanche不一致的情况不管那条最长的领先多少 Avalanche节点都不会鸟那一条吗“领先十个区块就不应该再理Avalanche预共识”的意思就是当Avalanche节点们发现最后输太多 还是会往长的那条妥协吗抱歉不是要钻牛角尖 只是想确定板大的意思~了解了~我也觉得这样才对总之Avalanche节点占据多数算力的情况下 最后输掉的情况很少 这样就够了
作者: camellala (茸硬抬名器)   2019-06-07 03:23:00
作者: coronach (...)   2019-06-07 05:36:00
好文大推
作者: dnac6h12o6 (steven)   2019-06-07 06:22:00
版主太猛了!
作者: desion30 (五亿)   2019-06-07 07:58:00
感谢版主,好文推荐
作者: lolo0856 (lolot)   2019-06-07 08:13:00
bch会不会发生多数节点不愿意加入avalanche的状况呢?因为目前看起来并没有经济诱因去驱动节点,不知道会不会形成之前segwit在bch的状况发现上面好像有类似回答,再推个><觉得版主之前结合手续费的想法更能够保护网络安全
作者: ketao (ketao)   2019-06-07 09:02:00
不明觉厉推
作者: qw5526259 (缤纷乐)   2019-06-07 09:09:00
推推推
作者: Q8i (Q8i)   2019-06-07 10:31:00
黑鸦大真的是很强,对技术的了解令人敬佩不已看来IOTA要达到愿景真的不容易,还是期待,凸了木!
作者: itsdelovely (It's De-Lovely)   2019-06-07 10:58:00
作者: asoedarren (天真岁月阳仲寿)   2019-06-07 11:04:00
作者: john371911 (醬廖)   2019-06-07 11:32:00
解说推。
作者: goldflower (金色小黄花)   2019-06-07 12:18:00
推推
作者: ZERX (I am from Taiwan!!)   2019-06-07 12:53:00
作者: leftc (阿左)   2019-06-07 15:32:00
推技术文
作者: remia81   2019-06-07 15:45:00
作者: weizxcvb (XD)   2019-06-07 16:17:00
作者: poorviv (na)   2019-06-07 18:58:00
谢谢版主解说
作者: kerkerdog (kkd)   2019-06-07 20:39:00
推推
作者: ecoco1424 (ecoco1424)   2019-06-07 22:48:00
作者: jorden (William)   2019-06-07 23:29:00
作者: aierozent (丹尼斯)   2019-06-08 21:55:00

Links booklink

Contact Us: admin [ a t ] ucptt.com