糖果吃了那么多,你真的知道比特币分叉是咋回事吗?
简洁的语言 科学的归纳 艺术的区块链
最近有比特币的小伙伴除了感受有力而魔性的市场震荡外,想必还吃了不少糖果(分叉币)吧?
那么比特币为啥要分叉捏?
这得从比特币区块的扩容问题说起。早先比特币区块其实并没有容量上限,后来因为一些原因被设定了1M的区块容量上限。而如今比特币交易量剧增,交易确认速度慢,矛头直指1M的上限。
如果将一笔笔比特币交易看作一艘艘在河道行驶的船,船不多时一切都很完美。然后船渐渐多起来了,河道里塞不下了,有些船就只能在入河口等着。。。那叫一个心累。。。
当然这问题也可以花钱解决,多给河道守护者(矿工)一些小费(手续费/矿工费)就可以优先入河了。
还未发送的交易可以调高手续费获取优先权,已经发送的交易也可以单独给矿工小费和交易哈希(相当于交易单号)让矿工优先确认。
手续费的不断抬升确实令很多用户不满,但河道就这么宽,为了争取优先权也只能牺牲点银子啦。那么为什么河道只有这么点宽?也就是为什么比特币区块链容量被设定了1M的上限?
一种可能的原因是,在比特币早期常规用户只能使用Bitcoin QT这一种钱包(也就是现在的Bitcoin core钱包),而这个钱包需要用户下载完整的区块链才能使用,如果有人制造了大量的恶意小额交易,产生了体积很大的区块,那么一台运行速度比较慢的电脑在运行钱包时就很容易因为性能跟不上而拒绝服务,也就是受到了DoS攻击。
另一方面,也有可能在早期(08、09年),比特币挖矿是由CPU计算完成,而当时的验证算法效率还比较低,如果出现很大的区块,可能导致CPU计算量过大,特别是出现DDoS攻击的时候,在挖矿竞争中白白消耗了太多的算力,矿工挖出一个体积更大的区块需要消耗更多的算力,但挖出这个区块得到的比特币收益却没有等比增加。
也有可能是为了建立一个积极的比特币网络,各个节点需要更频繁地将新区块上传并同步到其他多个节点,如果区块大小设定为8M,则对上行带宽的要求就会很高,比特币区块链的同步就会更紧张。
因此,比特币创始人中本聪为区块设置了1M的上限。
那么现在交易拥堵的问题不断凸显,河道里有实在塞不下那么多船,河道是否有必要进行拓宽呢?(也就是1M的区块容量是否需要提升呢)。
有一波以矿工为代表的人认为有必要扩容,BITMAIN(比特币大陆)便在17年夏天主导分叉出了区块容量上限达到8M的BCH(比特币现金)。扩大区块容量就如同把河道拓宽,河道宽了,水路交通就能得到相应的改善。扩大区块容量确实能很直接的缩短交易确认时间,提升用户体验,但这种硬分叉会产生另一条主链另一种“克隆币”,带来比特币社区分裂的可能。而且区块的增大会使得普通电脑越来越难运行全节点钱包,结果全节点钱包沦为少数机构的专属,中心化的隐患也是不言而喻。
另一波人认为可以通过在河道上方建立空中通道来缓解拥堵,小而轻的船(小额高频交易)可以直接走空中通道,这样就不需要对河道进行拓宽(依然保留区块1M的上限),这种“空中通道”称之为闪电网络,可以很大程度上保持比特币原有的主链,也就对应的能减少中心化的隐患。
闪电网络这种方式还可以在船本身下功夫,如果船夫是交易信息,船是见证信息,后来发现船(见证信息)并不是必要的,只要船夫(交易信息)到达就可以了,那也可以让船走别的通道,只留下船夫在空中通道,行动似乎是更轻便更快捷啦!这种把船夫(交易信息)和船(见证信息)分离的方式称之为“隔离见证”。不过隔离见证可能要对比特币区块链做比较大的改动而产生工程风险,闪电网络也有被中心化机构掌控的可能性,所以社区对这种方式依然褒贬不一。
支持扩容的一方和支持闪电网络的一方在不断的争议、协商、达成共识和争议再现的过程中也在不断成长,都在为解决比特币网络的拥堵而努力着。而比特币分叉这件事却也在不断演变,从最初的为扩容提速降低手续费而分叉,发展成了更为多元化的目的。比如增加智能合约,增加可拓展性,实现在比特币网络上建立应用等。
分叉对与比特币的发展亦是各有利弊,Newbitki就不在此多作评论啦,分叉币的未来,也许需要时间的考验。
小编(万倍学者)水平有限,若图文中有不准确之处,欢迎大家留言指正~
- Flutter环境搭建
- java.net.ConnectException: Call From slaver1/192.168.19.128 to slaver1:8020 failed on connection exc
- 18/03/18 04:53:44 WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your clu
- 技术干货 | Hadoop3.0稳定版安装攻略来啦!
- ios逆向工具MonkeyDev简介
- 自定义下拉列表
- 身份证号码验证算法
- 技术干货 | hive安装部署
- js图片的预加载功能
- 简单理解通过原型继承
- 为我们的Web添加HTTPS支持
- 技术干货 | hbase配置详解
- javascript事件详解
- 使用Spring Boot开发Web项目
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux系统中 /etc/fstab 文件的深入解读
- bash命令使用详解
- 实例详解Linux 中的命令链接操作符
- Python 为什么不支持 switch 语句?
- centos安装jdk1.8时出现没有/lib/ld-linux.so.2:这个文件的原因分析
- Linux多线程编程快速入门
- Linux添加swap分区的方法
- linux下vsftpd的安装及配置使用详细步骤(推荐)
- Linux分区格式化的命令
- Linux调试工具GDB使用简易教程
- Linux 挂载分区的方法
- 使用Python生成Shell命令,批量执行程序代码解析
- 基于Ubuntu 18.04配置固定IP的方法教程
- 详细解读linux下swap分区的作用
- Linux下将源文件编译成目标文件的过程解析