作者DarkerDuck (达克鸭)
看板DigiCurrency
标题Re: [问题] 完全去中心化是否真的必要?
时间Mon Feb 26 16:17:00 2018
其实越研究最近对於区块链效率的额外改进方案,越会觉得中本聪的区块链真的是神解
对於全球性金流系统而言,最重要的是
可用性和
共识安全性。
比特币将可用性的优点体现在不分时间地点、都可以和任何人有比特币钱包进行交易
在共识安全性上,因为有全网共识,避免了双花和撤销交易的可能性,甚至比信用卡安全。
而依照CAP理论,所有的效率的改进方案几乎都会损害到区块链货币的可用性和安全性。
什麽是CAP理论呢?它是对於分散式资料系统的一种限制,你无法同时满足以下三点特性:
Consistency: 一致性 (所有节点在同一时间具有相同的数据)
区块链系统当然要有同样的数据资料,并且用PoW或PoS得到唯一有效的共识。
这是对於交易系统的安全性基本需求。
Availability: 可用性 (保证所有类型请求都可以在时限内获得回应)
对於全球金流系统可用性当然是最重要,
任何使用者可以跟使用网际网路一样,在任何时间、将所拥有的资金、转到任一地址。
Partition tolerance: 分隔容忍 (切割成子系统不会影响系统的继续运作)
中本聪的区块链系统基本上已经把一致性和可用性推到极限。
所以你今天要用比特币就一定要联网和区块链同步,大家共识必须一致。没有子系统。
实际上区块链系统在不拥塞的状态下根本完美得不得了,一般交易零确认快如闪电。
不信的可以去用零钱玩SatoshiDice,送出交易三秒内就会被侦测到完成一局。
有赢钱三秒内自己的钱包就会收到,根本是real-time的体验。
连博弈网站都敢这样搞,bitpay和coinbase也这样玩很久,代表小额零确认交易非常安全。
所以我一直认为增进区块链容量和效率的技术,才是全球金流系统真正该发展的方向。
那再来看看对於区块链效率的额外改进方案,是否真的是万灵丹,
可以在不影响一致性和可用性下改进金流系统的效率。
先以已经可以用的
Payment channel来看,
它的原理就是Alice和Bob先把自己一部分的资金锁到通道内,然後互相只交换未确认交易
只有最後要结束通道的时候,才把最後一次的结算交易丢给矿工做确认和结算。
那这样就大幅减低了矿工负担了,增加扩容可能性。因为资金先被锁住也不会被双花。
但问题是这极大幅度削弱了区块链货币的
可用性,你的资金被
锁住了。
本来比特币可以随时随地可以转给任何人,但现在被锁住只能转给特定人。
为了解决这个问题,所以後来又搞了一个极端复杂的金流网路,光白皮书就吓死人。
https://lightning.network/lightning-network-paper.pdf
BTC的
闪电网路,在ETH也有一个差不多一样的实作叫做Raiden雷电网路。
把on-chain fee推高,让Core一直狂推,把大家都赶到这个网路内,全部都连在一起。
那这样可用性不就变高了吗??
好像很合理。但问题是它的
可用性和本来的区块链系统相比
脆弱非常多。
首先你要发交易当然还是要锁钱,重点是和你连线的Payment Hub
不能离线,连自己也是。
实际上只要金流的路径中任何一个节点突然离线了,你的交易就会失败。
因此这些Payment Hub必定会是非常专业化的,才会闲着没事24小时开着永不断线。
但区块链系统大家都可以
随时上线和离线,但你仍然是永远可以使用。
更不要说路由问题,要去中化作routing一直是资讯科学里难解的问题。
现在的Internet实际上是用非常
中心化的方式去做routing,
就几个骨干ISP在网路交换中心做路由,甚至很多部分还是要靠人工设定的。
之前就有发生台湾网路交换中心隔壁机房失火,台湾就大断网的事件。
而目前闪电网路仍然是靠直接全网广播所有节点路由资讯,来寻找最佳的金流路径。
然後说这种方式可以解决本来区块链系统的扩容问题,这我真的笑了。
区块链的扩容瓶颈在於通讯瓶宽,你每发一笔交易就要全网广播到所有矿工节点。
结果现在变成更新路由资讯也要全网广播,一个hop广播一次。
可以预见的是,闪电网路系统的频宽扩容问题甚至会比本来区块链系统更为严重。
再来是闪电网路和一般stateless routing不一样,可不像一般通讯封包丢了就算了。
每个路径都还有收支平衡、金流宽度、交易状态等问题,挖靠,根本大爆炸。
更不要说
收款也必须在线这极大幅度影响可用性的问题。
要转大额款项更是不可能的任务。
可以想见的是闪电网路它的
可用性必定远远不如於原本的区块链金流系统。
那麽假如我们把区块链系统切割成一个一个的子系统,是否就可以扩容了呢??
那这其实就是
sharding和
plasma的目标。
https://blockgeeks.com/guides/what-are-ethereum-nodes-and-sharding/
shard可以把会互相交易的同一个DApp丢到同一个shard内。
shard内的交易只让该shard的随机validator去确认有效性,
然後写state root和tx group root到main chain上。
plasma则使用子区块链,同样把同样会互相交易的DApp丢到这个子区块链。
但其实这两个方案适合的是DApp的应用,一个DApp本来就只需要服务部分人,
而不是全部人,所以把DApp丢到shard内,或是plasma的子区块链内,非常适合
因此这两个方案只有ETH在研发,BTC根本没在推这两个方案。
但是全球金流网路这个应用是要服务所有人,要分割子系统就必定会导致延迟。
譬如每一国都有自己自己的shard或是plasma子区块链。
但是比特币相比於法币最大的优点就是无国界金流,结果变成所有跨国金流都有高延迟。
以shard来说就需要cross-shard communication,仍然是影响到原本金流系统的可用性。
当然也不排除後来有个比中本聪更神的人来解决这个问题XD。
所以有些系统乾脆对於去中心化的
一致性妥协,譬如IOTA,他必须靠COO来维持共识。
结果变成瓶仅卡在COO,拿掉COO理论上可以很快,但如何维持安全性共识仍然有挑战。
既然中本聪已经发明这麽好的东西,我认为金流系统把区块链推到极限才是主要目标。
譬如Graphene可以把区块链系统的通讯瓶宽效率搞到逼近於IOTA。
而weak-block可大幅强化零确认交易的安全性,本来就跟闪电网路一样快。
off-chain或是第二层的方案当然也可以同步研发,对於高频交易或特定应用很有用。
但直接把区块链系统直接盖掉反而弊大於利。
--
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), 来自: 36.237.120.143
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/DigiCurrency/M.1519633022.A.2CF.html
※ 编辑: DarkerDuck (36.237.120.143), 02/26/2018 16:33:24
1F:推 allen139443: 首推 02/26 16:34
2F:推 tcn1john: 再推 02/26 16:37
3F:推 freshego: 推 02/26 16:38
4F:推 poorviv: 推 02/26 16:46
5F:推 Fice: 推 02/26 16:52
6F:推 kugwa: 好多技术只听过没时间研究 感谢板大做整理 02/26 16:56
7F:推 ahaha777: 推 02/26 16:59
8F:推 ProtectChu56: 我想版大需要自m文XD 02/26 17:10
9F:推 brain1472000: 推 02/26 17:28
10F:推 ssnopra: 推 02/26 17:28
11F:推 ketao: 推 02/26 17:40
12F:推 EthereumPTT: 感觉ETH发展会比较好 02/26 17:41
13F:推 unojazz: 推 02/26 18:19
14F:推 CCben: 专业文整理 02/26 18:27
※ 编辑: DarkerDuck (36.237.120.143), 02/26/2018 18:35:50
15F:推 camellala: 谢谢板主专业解说,每次看板主的文章就是在提升自 02/26 18:43
16F:→ camellala: 己的知识层次 02/26 18:43
17F:推 berry383838: 版主威猛 02/26 19:06
18F:推 sss910278: 上一次听到CAP是大二修资料库的时候xDDD 02/26 19:09
19F:推 rmp4rmp4bear: 如果不是BCH可以改动难度,我大BCH为唯一正统 02/26 19:36
20F:推 davidchen329: 版主威 02/26 20:12
21F:推 camellala: 如果BCH能由PoW改成PoS,会更好 02/26 20:18
22F:推 jackshyu: 推长知识文 02/26 20:35
23F:推 tsl3333: 专业长知识 02/26 20:40
24F:推 evilplayer: 推推~~ 02/26 23:04
25F:推 timwu: 详细解说给推,聊点想法,sharding不算L2, core & EVM都要改 02/26 23:17
26F:→ timwu: phase2可能要fork才能上,我归类为L1, 再来 channel routing 02/26 23:18
27F:→ timwu: 我也觉得太复杂,所以我都只推简化版uRaiden, 只给eth 因为 02/26 23:21
28F:→ timwu: BTC script能力不够啊, 讲到跨国交易, 把猫猫嫩模都在L2处 02/26 23:24
29F:→ timwu: 理掉 主链就不会塞啦,POS也有加速效果 只是团队很少强调, 02/26 23:26
30F:→ timwu: eth fan最自豪的 现在都还没加速的超塞主链一天处理的交易 02/26 23:27
31F:推 martin77: 长知识了 02/26 23:28
32F:→ timwu: 数超过其他所有币种包含BTC的总和. 02/26 23:28
33F:推 treck: 推推 感谢解说 02/26 23:34
34F:推 coldcolour: 推 02/27 01:51
(DarkerDuck 删除 catfod 的推文: 农场连结)
(DarkerDuck 删除 catfod 的推文: 农场连结)
35F:推 sdtty: 所以ripple才是最强的... 02/27 07:40
36F:推 wukeepo: 好强喔 02/27 08:17
37F:→ DarkerDuck: Ripple并无法达成trustless去中心化共识 02/27 11:07
38F:→ DarkerDuck: 而且实际上Ripple的官方具有冻结帐号的权利 02/27 11:07
39F:→ DarkerDuck: 当然假如你不在意这两点,Ripple交易速度的确更快 02/27 11:10
40F:→ DarkerDuck: 只是这种东西和传统银行金流系统并无太大的差别 02/27 11:10
41F:推 steven01942: LTC现在就走在如此的路线上? 02/27 13:43
42F:推 goldflower: 推个 这篇好多关键字让人survey 02/27 13:54
43F:推 john371911: 推。graphene 还有什麽关键字查?有没有易读的中文资 02/28 00:05
44F:→ john371911: 料? 02/28 00:05
46F:→ DarkerDuck: 这是论文,和闪电网路相比,基本原理简单非常多 02/28 00:20
47F:→ DarkerDuck: 只是数学验证collision机率对於一般人比较困难 02/28 00:20
48F:→ DarkerDuck: 我用白话讲就是区块链系统的区块传播 02/28 00:20
49F:→ DarkerDuck: 不再包含所有交易,只需要包含这些交易的filter表 02/28 00:22
50F:→ DarkerDuck: 所以区块大小可以极大幅度缩小,达到逼近O(1) 02/28 00:22
51F:→ DarkerDuck: 剩下的扩容瓶颈就会主要是交易的通讯瓶宽 02/28 00:24
52F:→ DarkerDuck: 我一直觉得区块链系统才是简洁的金流解决方案 02/28 00:26
53F:→ DarkerDuck: 对於金流系统而言,复杂度太高根本是"大灾难" 02/28 00:27
55F:→ DarkerDuck: 中本聪的比特币论文也不到十页而已 02/28 00:27
57F:→ DarkerDuck: 研究结果指出可以让区块传播小到 "一个封包" 02/28 00:39
58F:→ DarkerDuck: 早期的比特币研究大部分的精力都在区块链系统改进上面 02/28 00:41
59F:→ DarkerDuck: 我真的非常赌烂现在的Core竟然"放弃了"区块链继续改进 02/28 00:42
60F:→ DarkerDuck: 直接丢一句区块链不可能改进扩容就算了 02/28 00:43
61F:→ DarkerDuck: 大家一起冒着丢钱的风险来用"去中心化"的LN喔 02/28 00:44
63F:推 rmp4rmp4bear: 觉得好像dna, 区块组成的长链用蜁转的收束方式可以 02/28 01:14
64F:→ rmp4rmp4bear: 大幅减少空间 02/28 01:14
65F:→ DarkerDuck: 其实这个技术不会缩小区块链大小 02/28 01:17
66F:→ DarkerDuck: 但可以极大幅度降低扩容後,孤立块的产生 02/28 01:17
67F:→ DarkerDuck: 这样矿工就更愿意把区块上限调高 02/28 01:17
68F:推 rmp4rmp4bear: 只是现在在把每个块只留能完整还原所有资讯的片段 02/28 01:18
69F:→ rmp4rmp4bear: 阶段 02/28 01:18
70F:→ rmp4rmp4bear: 了改 02/28 01:18
71F:→ DarkerDuck: 其实还有其他分散式的区块链储存以及UTXO查询技术 02/28 01:19
72F:→ DarkerDuck: 但是Core全当作没这回事,区块链就是废,LN就是棒棒棒 02/28 01:19
73F:→ DarkerDuck: 一些比较旧的区块链可以产生UTXO後砍掉,并分散储存 02/28 01:20
74F:→ DarkerDuck: 最近Core才刚把零确认交易这个超有用特性几乎废掉 02/28 01:28
75F:→ DarkerDuck: 说啥零确认交易不安全,RBF预设开启才能避免交易卡死 02/28 01:29
76F:→ DarkerDuck: 结果BCH有人悬赏1000美金看有没有人可双花零确认交易 02/28 01:29
77F:→ DarkerDuck: 到现在也没看到那些Core专家双花成功,笑死人 02/28 01:29
78F:推 a2935373: LN一定要online这点真的太北七了... 02/28 02:03
其实本来的BTC离线交易的能力是很强的:
发送端假如没有联网,然仍可以透过自己的私钥签章交易,
并且透过蓝芽、NFC甚至是QRcode传输给接收端,
接收端再把这个交易广播出去即可。
或是接收端没有联网,只丢个QRcode,发送端一样签章交易联网送给矿工即可。
79F:推 sdtty: 如果core那麽鸟 为何矿工算力没有站出来反抗呢? 一直想 02/28 17:04
80F:→ sdtty: 不透 02/28 17:04
81F:推 qxxrbull: 话说零确认交易没有办法成功做出double spending的原因 02/28 17:08
82F:→ qxxrbull: 是什麽? 我印象中不是实作还是要2确认才算不会被翻盘吗 02/28 17:08
交易所的实作大部分都是两确认以上,因为交易所几乎都是大额交易。
有钱能够使矿工推磨,那就有可能如後所述的买通矿工作双花交易。
所以交易所几乎都不愿意接受零确认交易。
不过也是有例外啦,早期的shapeshift的确会接受小金额的零确认币币交易。
83F:→ DarkerDuck: 矿工本身就唯利是图,已经做出BCH这个後备方案就好了 02/28 17:29
84F:→ DarkerDuck: 反正挖矿演算法都是一样的,哪个获利多就挖哪个 02/28 17:30
85F:→ DarkerDuck: 假如BCH的价格是BTC的十分之一,当然算力也是十分之一 02/28 17:30
86F:→ DarkerDuck: 零确认交易当然有机会可以double spend 02/28 17:30
87F:→ DarkerDuck: 但是你要和够多算力的矿工配合 02/28 17:31
88F:→ DarkerDuck: 不然依照BCH本身的共识规则,你双花交易根本传不出去 02/28 17:31
89F:→ DarkerDuck: 初版的BTC是禁止双花交易在网路中被转传的 02/28 17:32
90F:→ DarkerDuck: 结果被Core改掉,说这样有助於fee market 02/28 17:32
91F:→ DarkerDuck: 现在BCH又把这垃圾功能拿掉,所以根本不怕双花 02/28 17:33
92F:推 kugwa: 禁止双花交易在网路中被转传 02/28 17:35
93F:→ kugwa: 意思是mempool里是否允许双花的交易存在吗 02/28 17:36
94F:→ kugwa: *不允许 02/28 17:36
95F:→ DarkerDuck: 当然不允许,你双花交易会被视为conflict transaction 02/28 17:38
96F:→ DarkerDuck: 不光是进不了mempool,连转传出去都没办法 02/28 17:38
97F:→ DarkerDuck: 不过後来Core加了一个option flag叫做RBF 02/28 17:38
98F:→ DarkerDuck: 让更高手续费的交易可以取代原来mempool的交易 02/28 17:39
99F:→ DarkerDuck: 说这样有助於fee market,也能避免交易卡在mempool 02/28 17:39
100F:→ DarkerDuck: 现在更是直接当作预设值,所以BTC已经没有安全的 02/28 17:40
101F:→ DarkerDuck: 零确认交易了,这项本来中本聪有提到的特性被毁灭 02/28 17:40
102F:→ DarkerDuck: 不过Core当然可高兴了,这样LN的交易速度就没人可比了 02/28 17:40
我直接举个BCH要如何双花零确认交易的例子好了,
本来初版BTC的规则就是进到mempool的交易不能被取代,
所以接收端要安全地接受零确认交易只需要多连几个矿工节点,
大约同时连十几个矿池节点就足够达成90%算力保护。
https://bitcointalk.org/index.php?topic=423.0
因此要双花一笔零确认交易必须偷偷和拥有大算力矿工配合,或是根本就是内鬼。
(这也的确有发生过,双花SatoshiDice,但很快就被抓包,矿池就把那个内鬼员工开除)
首先把两个同私钥的钱包准备好,然後要和一个有高算力的矿池配合,譬如拥有30%的算力
这个矿池同样表面上一样不会转传双花交易,但却会把双花交易放到mempool里等确认。
既然拥有30%算力,就代表有30%的机率可以成功双花,假如是损耗很少的交易
譬如是胜率极高版本的SatoshiDice,那就有利可图。
等到确认後,整个矿工网路就会发现被婊了,怎麽被确认的交易不是mempool里的呢??
其实这很好抓,的确也有发生过,但是你要和矿工配合,而且也很容易被抓包。
但是当然还是有很多人认为不够安全,矿池真要这样搞装死你也无法可施。
所以也有改进方案提出。譬如双花警告系统,或是weak block。
不过以小额商品交易而言,这风险小到根本可以忽略,绝大部分双花尝试都是浪费钱而已
103F:推 kugwa: 我知道RBF是为了解决卡交易的情况 02/28 22:10
104F:→ kugwa: 但我也同意板大说的 没有transaction replacement的话 零确 02/28 22:11
105F:→ kugwa: 认交易就会很安全 02/28 22:11
106F:→ kugwa: 请问板大认为在disable RBF的情况下 要怎麽避免卡交易的情 02/28 22:15
107F:→ kugwa: 况发生呢 02/28 22:15
108F:→ kugwa: 是用policy解吗 例如mempool里太老的交易优先权会升高 02/28 22:17
最简单的方式就是让mempool的timeout时间变短,我觉得6小时就够了。
BTC历史上并没有发生超过六小时仍未有区块产生的情形。
而不是72小时或甚至是两个礼拜,那实在会让交易卡太久。
但也不用急着踢出mempool,而是标记为timeout,让使用者可以用更高手续费交易去取代
这样仍然是几乎不会影响到零确认交易,
因为零确认交易的policy本来就只会去接受手续费高到可以在下一个区块进去的交易。
而比特币本来就没有所谓的fee market去抢着进区块这种想法。
若要防止spam的话直接把relay fee调高即可。
让mempool的大小膨胀到区块大小的数百倍根本就是乱搞。
而区块大小限制应该是要远大於一般交易需求的。
在这种状态下,零确认的安全性甚至超越闪电网路。
※ 编辑: DarkerDuck (61.227.200.140), 03/01/2018 03:39:45
109F:推 ctes940008: 推 03/01 14:08
※ 编辑: DarkerDuck (61.227.200.140), 03/01/2018 14:30:06
※ 编辑: DarkerDuck (118.171.109.20), 03/29/2018 11:43:56
※ 编辑: DarkerDuck (36.237.86.94), 05/04/2019 04:29:36