在区块链行业里,有两派人一直在争论:一个是以比特币和以太坊为首的社群,另一个是以EOS为首的社群。这两群人一直在争论谁才是真正的未来,双方都认为自己这边更有未来。其中EOS抗争的重点就是100万TPS。
这里先给TPS的科普一下,在区块链里面有个性能指标,叫做TPS,是每秒能确认的交易数量。早期比特币的TPS只有7笔/秒;以太坊只有几十笔/秒;而EOS号称可以做到100万笔/秒,但是经过实测,目前可以做到4000是没问题的。
那为什么会有如此巨大的差异呢?以太坊社群的粉丝认为以太坊和比特币是完全去中心化的,区块产生主要依靠全网所有矿工节点。而EOS只是一个“超级联盟链+Token”,这个联盟链由21个超级节点所组成的,所以EOS只有这21个超级节点参与生成区块。
可以看出来,因为EOS放弃了完全去中心化,引入了部分的中心,从而实现了很好的性能。当然,这也启发了后续比特币和以太坊的改良,它们也是适当地引入了中心,从而实现了更好的性能,如比特币的闪电网络,以太坊的分片技术。
但如果从另一个视角来看,特别是公链下DApp的用户数,EOS明显呈上升趋势,反观以太坊则呈下降趋势。主要原因是EOS能解决性能问题,而好的性能对游戏开发来说非常重要,目前的DApp用户数主要靠的就是游戏来吸引,所以才使EOS的用户数明显大于以太坊。下面张图,是EOS和以太坊DApp用户数的对比。
从图片中可以发现,EOS的24小时DApp用户数已经超越ETH一个数量级。从数据上来说,EOS更加符合区块链应用的场景落地,不得不说,EOS确实也是公链的伟大进步。
对于比特币、以太坊的狂热爱好者来说,完全去中心化才是区块链发展的未来,他们会认为EOS不够去中心化。这里我想要纠正一点:以太坊和比特币就是完全的去中心化吗?
从表面上看,以太坊和比特币是完全去中心化的。然而真相却并非如此,让我抽丝剥茧,一步步讲给你听,先从它们的原理入手。
区块链公链都要解决的一个问题:就是谁说了算的问题。其中“谁说了算”就是区块由谁产生,在区块链公链网络,不论节点再多,一段时间内都只有一个节点出块。在以太坊和比特币的设计中,他们每隔一段时间会产生一个区块,产生区块的过程叫做出块。而区块链本身就是由一个个区块串联起来行成,每个区块都要记录上一个区块的哈希。(只有第一个区块没有上一个区块的哈希,也被称为创世区块)。每个节点都有权利对所有的区块做永久的追溯,检查他们的合法性。只要其中有一个区块不匹配,那么从不匹配的区块开始,后面数据都是有问题的,就都要丢弃。
在比特币和以太坊的设计中,谁产生区块,谁就获得出块奖励。比特币的逻辑是每十分钟出一道猜数的数学题。谁能按照规则首先猜出符合要求的数字,谁就获得出块权;谁拥有出块权,谁就能获得出块奖励,也就是说这个区块产生的比特币就归这个出块节点所有。而这个挖矿的过程完全是由密码学来保证,没有任何规律可依,只能一个一个去尝试,也可以简单理解为暴力破解。矿工靠运气找到符合规则的数后,获得出块权,然后打包数据写入区块,从而获得比特币的奖励。
也许看到这里你已经发现问题了,对比特币来说,平均每十分钟出块一次,也就是每十分钟只有一个节点能够获得这个出块奖励。试想一下,一天只有24个小时,那么比特币一天最多只能出24x6=144个区块。这也意味着一天下来最多只有144个节点可以获得奖励。对比特币来说,成千上万人参与的一个区块链网络,但是最多只有144个人获得奖励,这本身就是不公平的。以太坊通过引入叔块的机制,将出块的时间大大缩短。但是没有从本质上解决这个问题,只是缓解了这个问题。
那怎么办呢?为了让大部分比特币矿工都能够积极参与进来,那就必须让大家都有币可分。于是比特币诞生了一个中心化的商业机构,叫做矿池,那么矿池是干什么的?
不知道大家有没有听过这样一个故事,很久很久以前,有一个酷爱数学的年轻国王向邻国一位美丽聪明的公主求婚。公主出了这样一道题:求出一个很大很大的17位数的真因子。若国王能在一天之内求出答案,公主便接受他的求婚,那么国王最后有没有跟公主结婚呢?
国王立即回国,向时任宰相的大数学家求教,大数学家在仔细思考后认为这个数有17位,则最小的一个真因子不会超过9位,于是他给国王出了一个主意:按自然数的顺序给全国的老百姓每人编一个号码发下去,让每个老百姓用自己的编号去除这个数,除尽了立即上报并获得赏金。最后,国王用这种方法求婚成功,抱得美人归。
矿池也是采用同样的原理,每一个小旷工就相当于一个农民,每个人都提供计算资源。注意,小矿工并不是真正意义上比特币网络中的矿工,它只是一个计算单元而已。矿池本质就是让每个小矿工有序的去进行计算,注意,是有序地进行。
矿池会将一个计算区间分配给每个小矿工。比如矿工A计算1-10,那么矿工B就计算11-20,以此类推,其中矿机能力强的多算一点,矿机弱的就少算一点。
这样不论最终是哪一个小矿工猜到了正确的数,矿池都将获得收益。矿池先获得区块奖励收益之后,再按照实际参与计算的次数,平均分配给矿池中的所有矿工,计算次数越多的小矿工获得收益相对越高,反之,则越少。
从这个角度来看,参与计算的节点并不是真正意义的矿工,矿池才是比特币网络中真正的矿工。其中矿池的任务就是计算的分派,让大家有序的去计算,但最终获得区块奖励的是矿池。当然矿池也不是白做,它会事先约定一个抽成比例,会抽取收益的百分比。由此可见,矿池首先是个中心化机构,其次是个商业机构。
除了通过矿池这种并行计算的方法提高挖矿成功的几率以外,大家也在想办法提高单机的计算能力。所以计算节点从最开始的CPU挖矿升级为GPU挖矿,然后再升级为ASIC专业矿机挖矿(比特大陆就是ASIC专业矿机的最大制造商)。但是专业矿机升级换代非常快,每一次更新性能都会有非常大的提升,新的机器性能往往是老机器的十倍。在这样的资源升级战中,,CPU、GPU、以及老式的矿机到后来基本上很难获得收益,因为算力比例太小。
于是,挖矿逐渐演变为谁先拥有最先进的机器,谁就能获得收益,而先进的机器往往掌握在专业矿机的制造商中,如比特大陆,后来他们建起了矿池和矿场。矿场是什么?
矿场就是把矿机直接托管在他们那里,参与的小矿工直接获得云挖矿的收益,他们只需要付钱,不用拿到矿机就能获得收益。
前面我说了,从比特币网络的技术视角看,矿池才是真正的矿工,而小矿工,他们只是计算资源而已。后续机器的高速迭代导致专业矿机厂家进入矿池,矿池的计算能力也逐步拉开差距,于是就分出了大矿池和小矿池,而且差距还在不断拉大。前面提过比特币一天产生的区块数目是有限的,也就意味着小矿池获得的收益将越来越少。小矿工很快发现在小矿池上分到的钱不如大矿池多,于是小矿工就会迁移至大矿池挖矿,渐渐地,就形成恶性循环,小矿池最终将无法生存而关闭。所以最终的结果就是:小矿池会越来越少,最后只剩下大矿池,大矿池形成寡头割据的局面。
矿池才是真正的矿工,更可怕的是,如果比特币和以太坊的矿池越来越少,越来越寡头化,甚至最后产生垄断,那就可能发生可怕的51%攻击。如果有那么一天,当其中一个矿池占据50%以上算力的时候,或者几个大矿池联合超过50%的算力,他就可以篡改新的区块,就可以他说了算。
最终只有极少数的大矿池割据整个矿工市场,或许最终存活的矿池数量还不如EOS的21个超级节点,但至少EOS的21个超级节点在“政治”上是平等的。
所以,简单理解。EOS相当于直接在治理上形成了21个确定的寡头节点,形成了相对的中心。而比特币和以太坊是在经济层面上自然形成了不确定性的寡头甚至垄断,形成了变相的中心。这么看来,至少EOS的21个超级节点的“政治权利”是平等的,他们轮流依次出块。而比特币因为经济上的竞争,就不好说了,现实世界中很多行业都从群雄逐鹿慢慢形成寡头,而最终由寡头形成垄断。从结果上看,比特币和以太坊追求的完全去中心化并没有真正做到,也许最后比特币和以太坊还没有EOS去中心化。
我在设计PPIO项目的时候也考虑了这个问题。
PPIO(https://pp.io)是个旨在给开发者提供一个可编程的去中心化存储分发网络,使得云存储更便宜,速度更快,更加隐私。
可能有人会有疑问,PPIO是完全去中心化呢,还是相对去中心化?如果治理上能做到完全去中心化,那经济上会不会重蹈比特币的覆辙?
我仔细分析了比特币,以太坊以及EOS 的原理,借鉴了EOS的一些设计理念,在保证性能和存储服务稳定性的同时,依然不损失区块链的公证性。所以设计了PPIO项目的3个阶段,从“弱中心”到“去中心”。具体可见我的另外两篇文章:
如果有关于PPIO的交流,可以通过下面的方式联系我:
wechat:omnigeeker(加我微信,注意备注PPIO)
- 从比特币、以太坊、libra的不同特点认识move语言
关于比特币.以太坊.libra,我们知道他们是不同的区块链应用,那么他们的根本差别在哪里呢. 其实,单从白皮书的标题,就可以大概看出三个项目在设计目标上的差异. 比特币的目标是 -- 可编程货币(Pr ...
- 从零构建以太坊(Ethereum)智能合约到项目实战——第23章 从零构建和部署去中心化投票App,decentralization Voting Dapp
P90 .1-从零构建和部署去中心化投票App-01 P91 .2-从零构建和部署去中心化投票App-02 P92 .3-从零构建和部署去中心化投票App-03 参考博文:http://liyuech ...
- ionic3 验证比特币,以太坊,莱特币和其他流行的加密货币地址
Install ❯❯❯ npm install cryptaddress-validatorionic3 中的引入 import * as cryptaddress from 'cryptaddres ...
- [中文] 以太坊(Ethereum )白皮书
以太坊(Ethereum ):下一代智能合约和去中心化应用平台 翻译|巨蟹 .少平 译者注|中文读者可以到以太坊爱好者社区(www.ethfans.org)获取最新的以太坊信息. 当中本聪在2009年 ...
- Solidity陷阱:以太坊的随机数生成
title: Solidity陷阱:以太坊的随机数生成 Solidity是一种相当新的语言,因为没有代码是完美的,它包含与代码相关的问题以及你希望用它完成的任务.本文将指导你使用随机数作为以太坊智能合 ...
- 以太坊和IPFS如何存储数据
如何将JSON文件存储在IPFS上,并使用Oraclize访问智能合约中的数据呢? 以太坊是一个成熟的区块链,使开发人员能够创建智能合约,在区块链上执行的程序可以由交易触发.人们经常将区块链称为数据库 ...
- 区块链教程(二):比特币、区块链、以太坊、Hyperledger的关系
不知道大家喜不喜欢音乐! 朋克音乐:诞生于七十年代中期,一种源于六十年代车库摇滚和前朋克摇滚的简单摇滚乐.它由一个简单悦耳的主旋律和三个和弦组成,经过演变,朋克已经逐渐脱离摇滚,成为一种独立的音乐,朋 ...
- 以太坊挖矿源码:ethash算法
本文具体分析以太坊的共识算法之一:实现了POW的以太坊共识引擎ethash. 关键字:ethash,共识算法,pow,Dagger Hashimoto,ASIC,struct{},nonce,FNV ...
- 如何从零开始学习区块链技术——推荐从以太坊开发DApp开始
很多人迷惑于区块链和以太坊,不知如何学习,本文简单说了一下学习的一些方法和资源. 一. 以太坊和区块链的关系 从区块链历史上来说,先诞生了比特币,当时并没有区块链这个技术和名词,然后业界从比特币中提取 ...
随机推荐
- NodeJs 设置跨域后页面全部变成了源码在浏览器上显示
百度搜索跨域后得到 app.all('*', function(req, res, next) { res.header("Access-Control-Allow-Origin" ...
- jasperreports+IReport 5.56,集成到Spring MVC4.0案例
首先,先说一下需求,项目需要打印一些报表,也没多想,直接就在jsp页面设置了样式,前台直接调用window.print()写了打印功能,但是例会的时候,领导提出需要一些比较麻烦的打印,自己写肯定费时间 ...
- Struts2 action 跳转到web-inf下,
初学,这个问题困扰了1天.刚开始以为代码或者是配置文件哪里写错了,仔细检查了好几遍确定代码没有错,实在没办法了,准备发帖求助.就在我截图的时候,突然发现我的@Action中有点别扭,即使他没有报错. ...
- Dictionary用法
https://www.cgjoy.com/thread-106639-1-1.html 1.新建字典,添加元素 dictionary<string,string>dic=newdict ...
- java的基础语法(标识符 修饰符 关键字)
Java 基础语法 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如 ...
- Java并发编程75道面试题及答案
1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon( ...
- day09 小练习 斐波那契数列 文件
#2.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素, # 并将其作为新列表返回. # def get_odd_list(info): # ul=info[1::2] # return ...
- 时间Date.js
<span style="line-height: 25.2px;">/** * 日期解析,字符串转日期 * @param dateString 可以为2017-02- ...
- LeetCode 104. Maximum Depth of Binary Tree C++ 解题报告
104. Maximum Depth of Binary Tree -- Easy 方法 使用递归 /** * Definition for a binary tree node. * struct ...
- Appium环境搭建——安装以及运行appium server失败点总结
一.运行Appium失败:未安装.Net Framework 4.5 之前安装AppScan安全测试工具时,就要求.Net 4.5以上环境,我其中一台电脑的系统是Win7-32bit的,安装.Net ...