作者DarkerDuck (达克鸭)
看板DigiCurrency
标题[Coin] 0-confirmation, Avalanche, Coordicide
时间Fri Jun 7 01:23:29 2019
这三个技术有个共通点,就是都很"快"
只是目的不太一样,但因为刚好历史上有部分技术互相传承,就一起讲吧。
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读空气达成共识是一致的。
--
simpleledger:qryeahexpqszdt9ffech6jhxu6wsfp0fnyhgd44ahf
Bitcoin: 1GxtyprMfcxE366BDUsg1skQyuAnxktZjc
https://www.blockchain.com/zh/btc/address/1GxtyprMfcxE366BDUsg1skQyuAnxktZjc
Bitcoin Cash: bitcoincash:qp928h4q4xasa5wh2x88xhsxgc4vwj6g95uzq0ak97
https://goo.gl/2qNr43
Ethereum: 0x4A2B1e35eb64141bbad4C58cB7D79692bC5Dbbc2
https://etherscan.io/address/0x4A2B1e35eb64141bbad4C58cB7D79692bC5Dbbc2
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.255.217.155 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/DigiCurrency/M.1559841811.A.B10.html
2507字 * 10星 = 25070 PCH
https://tinyurl.com/y4zuxbrf
1F:推 kugwa: 禁止deep reorg好像是BTC就有的?只是我不太懂 这样不会出 06/07 01:34
2F:→ kugwa: 问题吗 06/07 01:34
3F:推 kugwa: 所以Avalanche是让诚实矿工挑选的零确认交易更一致 06/07 01:37
4F:→ kugwa: 最终的共识当然还是以区块链里的为准 是这个感觉对吧 06/07 01:38
5F:→ DarkerDuck: 最终共识的确是以区块链里最长链为准 06/07 01:40
6F:→ DarkerDuck: 矿工也可以完全不理Avalanche的共识 06/07 01:41
7F:→ DarkerDuck: 只是它产生的区块会有很高的机会被orphan掉而已 06/07 01:41
8F:推 kugwa: 意思是跟Avalanche唱反调的矿工挖出的区块 即使已经领先一 06/07 01:51
9F:→ kugwa: 个高度 也不会被Avalanche节点所接受吗? 06/07 01:52
10F:→ kugwa: (设AB为一对双花交易 Avalanche节点决定的是A 唱反调的是 06/07 01:53
11F:→ kugwa: B) 06/07 01:53
12F:→ DarkerDuck: 是的,这运作方式其实跟segwit一样的 06/07 01:53
13F:→ DarkerDuck: 假如没有硬分叉写到consensus rule会这种状态 06/07 01:53
14F:→ DarkerDuck: 含有不符合segwit规则的segwit交易其实是valid chain 06/07 01:54
15F:→ DarkerDuck: 但因为验证segwit规则的算力占绝大多数 06/07 01:55
16F:→ DarkerDuck: 所以不会有问题 06/07 01:55
17F:→ DarkerDuck: 任何敢不验证segwit规则的矿工区块只会被丢弃 06/07 01:56
18F:→ kugwa: 可是这就不是以最长链为准了耶 还是说如果那条超过太多的话 06/07 01:56
所以你知道segwit的恐怖了吧,它其实偏离中本聪的想法非常多了
19F:→ DarkerDuck: 不过用在pre-consensus上就几乎没啥问题 06/07 01:57
20F:→ kugwa: 最後Avalanche节点们还是会一起反悔? 06/07 01:57
这是预共识,若要让Avalanche协定真正有效,不是约定好玩的话。
就是必须抛弃不遵守Avalanche预共识的区块。
不过因为在BCH里只处理conflict双花交易,
所以影响比segwit被搞到会影响到所有segwit地址好太多。
一个能够导致共识分裂的双花交易其实并没有常常产生。
就算矿工不鸟Avalanche,它的区块也不一定就会被抛弃。
https://doublespend.cash/
这边有统计数据,我认为真的需要用到Avalanche去处理的冲突交易,
一天大约一个区块而已。
21F:→ kugwa: 只是如果Avalanche节点占据多数算力的话 通常可以马上再反 06/07 01:58
22F:→ kugwa: 超而已 06/07 01:58
是的
23F:推 kugwa: 我知道很不常发生~只是想确认一下极端情况下采取的对策 06/07 02:08
24F:→ kugwa: 就是最长链跟Avalanche不一致的情况 06/07 02:09
25F:→ kugwa: 不管那条最长的领先多少 Avalanche节点都不会鸟那一条吗 06/07 02:11
这实作上我不知道怎麽做ㄝ
超过10个区块高度BCH就不会reorg了,
所以应该是领先十个区块就不应该再理Avalanche预共识。
26F:推 kugwa: 「领先十个区块就不应该再理Avalanche预共识」的意思 06/07 02:20
27F:→ kugwa: 就是当Avalanche节点们发现最後输太多 还是会往长的那条妥 06/07 02:20
28F:→ kugwa: 协吗 06/07 02:20
29F:→ kugwa: 抱歉不是要钻牛角尖 只是想确定板大的意思~ 06/07 02:21
这我不知道啊,只是要这样才合理,不然网路就分裂了。
30F:→ kugwa: 了解了~我也觉得这样才对 06/07 02:22
31F:→ kugwa: 总之Avalanche节点占据多数算力的情况下 最後输掉的情况很 06/07 02:22
32F:→ kugwa: 少 这样就够了 06/07 02:22
33F:推 camellala: 推 06/07 03:23
※ 编辑: DarkerDuck (111.255.217.155 台湾), 06/07/2019 04:00:15
※ 编辑: DarkerDuck (111.255.217.155 台湾), 06/07/2019 04:27:42
34F:推 coronach: 好文大推 06/07 05:36
35F:推 dnac6h12o6: 版主太猛了! 06/07 06:22
36F:推 desion30: 感谢版主,好文推荐 06/07 07:58
37F:推 lolo0856: bch会不会发生多数节点不愿意加入avalanche的状况呢? 06/07 08:13
这个问题好解决,就跟当初segwit在BTC上启动一样就好。
avalanche会需要多数矿工在区块链上投下同意票後才会启动。
38F:→ lolo0856: 因为目前看起来并没有经济诱因去驱动节点,不知道会不 06/07 08:16
39F:→ lolo0856: 会形成之前segwit在bch的状况 06/07 08:16
这个问题不错,虽然矿工加上pre-consensus协定并没有太大的短期好处。
但长期来说,这可大幅加强BCH的竞争力和使用者体验。
那麽BCH上的使用者和交易就会更多,长期来说,矿工当然就可以收到更多交易手续费。
从很多矿工其实都支持BCH来看,这些矿工并非短视近利,而更在意长期的发展性。
※ 编辑: DarkerDuck (111.255.217.155 台湾), 06/07/2019 08:23:56
40F:推 lolo0856: 发现上面好像有类似回答,再推个>< 06/07 08:20
41F:→ lolo0856: 觉得版主之前结合手续费的想法更能够保护网路安全 06/07 08:23
42F:推 ketao: 不明觉厉推 06/07 09:02
43F:推 qw5526259: 推推推 06/07 09:09
44F:推 Q8i: 黑鸦大真的是很强,对技术的了解令人敬佩不已 06/07 10:31
45F:→ Q8i: 看来IOTA要达到愿景真的不容易,还是期待,凸了木! 06/07 10:32
46F:推 itsdelovely: 推 06/07 10:58
47F:推 asoedarren: 神 06/07 11:04
48F:推 john371911: 解说推。 06/07 11:32
49F:推 goldflower: 推推 06/07 12:18
50F:推 ZERX: 推 06/07 12:53
51F:推 leftc: 推技术文 06/07 15:32
52F:推 remia81: 推 06/07 15:45
53F:推 weizxcvb: 推 06/07 16:17
54F:推 poorviv: 谢谢版主解说 06/07 18:58
※ 编辑: DarkerDuck (36.237.86.113 台湾), 06/07/2019 20:27:54
55F:推 kerkerdog: 推推 06/07 20:39
56F:推 ecoco1424: 推 06/07 22:48
57F:推 jorden: 推 06/07 23:29
58F:推 aierozent: 推 06/08 21:55
※ 编辑: DarkerDuck (111.255.218.160 台湾), 08/13/2019 09:09:38
59F:推 viudo: 推 12/15 22:40