层面:有哪些区块链
公链的逻辑:
1.中心化与去中心化
2.区块链共识和智能合约
3.业务逻辑和激励机制
4.隐私与保护
5.规则大于数据
区块的数据结构:
上一个区块哈希值
本区块哈希值
挖矿随机数
难度
时间戳
交易信息1
交易信息2
交易信息3
.....
Coin与Token的区别
你知道区块链中的“不可能三角”吗?即区块链无法同时达到可扩展性(Scalability)、去中心化(Decentralization)和安全(Security)。这三个要素中只能同时兼顾两个,比如,要想追求“去中心化”和“安全”就势必会牺牲“可扩展性”。因为要想保证开放性、自治性、不可篡改等去中心化网络特性就需要赋予任意节点均等的权利和义务,也就是说,系统中任意节点都需要对交易数据进行全量计算和存储。这样一来,整体系统的性能就会受限于单个节点的性能上限,进而限制整体系统的可扩展性。
可扩展性是目前区块链普遍面临的一大挑战。以太坊创始人Vitalik Buterin就曾表示过:“扩展性也许是排在第一位的问题。扩展性问题已经成为很多系统的坟墓。这是一个重大而艰巨的挑战。这些都是已知的事实。”为有效应对这一挑战,很多项目正在尝试以“IPFS+区块链”协同合作的方式提升区块链的可扩展性。但IPFS又是什么?如何提升区块链的可扩展性?今天的万向区块链小课堂就带大家了解一下IPFS。
IPFS是什么?
IPFS全称Interplanetary File System,星际文件系统,是一种点对点的开源分布式超媒体协议。它最初诞生于互联网界,旨在解决HTTP(超文本传输协议)引发的一些问题。说起HTTP,大家应该不陌生吧。我们在输入网址时通常都会在最开始输入http://。这一协议发明于1991年,并于1996年应用于网络浏览器。其主要作用就是支撑互联网上的数据通信,即规定互联网上的信息传输方式及浏览器和服务器的指令响应方式。
可以说HTTP是现今互联网运行的基石。但是诞生将近30年来,这一协议已逐渐过时,其弊端也已逐一显露。例如:
1、不支持同时从多个服务器下载文件,导致内容传输效率低下。
2、高带宽成本及大量重复文件堆积,加剧存储负荷。
3、随着服务器和服务提供商的中心化程度不断提高,互联网的监管也更加严格。
4、互联网能够存储的历史信息有限,难以追溯时间久远的历史信息记录。
5、连接不稳定导致连接速度慢、信息传输效率低。
诸如此类的问题不胜枚举。IPFS这一分布式文件存储系统则有望将这些难题一一突破。比如,在IPFS这一分布式协议中,用户不再从单一服务器中下载文件,而可以同时从网络中的其他多个节点处获取文件,提高下载效率。另外,这种分布式数据存储协议还通过会哈希加密保障网络信息的安全性。听起来是不是跟区块链有着异曲同工之妙呢。
IPFS如何运作?
首先,IPFS通过哈希值来对系统里的所有文件进行唯一身份标识,在此基础上剔除重复文件,记录文件的历史版本信息,实现文件的历史信息可追溯,从而确保网页内容不会因为服务器故障或虚拟主机崩溃而丢失。
其次,哈希加密也有助于保障文件内容的真实性。用户通过IPFS网络查找文件时,网络系统其实是以文件的哈希值作为标准,从储存文件的各节点中找到哈希值一致的文件返回给用户。
另外,IPFS中的节点通过哈希值相连,形成默克尔有向无环图(Merkle DAG)这一数据结构,因此具有以下几大优势:
1、内容可寻址:所有内容通过哈希值进行身份标识,方便查找追踪。
2、无重复内容:由于系统里的哈希值具有唯一性,相同内容会生成相同的哈希值,从而被系统判定为重复,并及时剔除。
3、内容不可篡改:系统的内容需通过哈希值校验。篡改内容后哈希值自然会发生变化,帮助系统识别出内容已被篡改,及时发现风险。
值得一提的是IPFS中的每个节点只会储存它需要或是感兴趣的内容,并为内容信息制作索引,便于节点之间了解各自储存了什么样的信息,方便后续查找。
综上,IPFS的分布式文件储存框架从根本上颠覆了HTTP以中心化的服务器传输内容的方式。用户不再从单一的服务器中搜索信息,而是可以从网络中成千上百万的其他节点中,依据文件的唯一身份标识(哈希值)快速获取信息,同时还能够实现文件的本地化离线获取,大大提升信息获取的效率和便捷性。
IPFS在区块链中的应用
无论是去中心化的分布式结构,还是运用密码学技术保障信息安全,我们都可以看到IPFS和区块链有诸多相似之处。同时,IPFS的发明者Juan Benet曾表示:“IPFS中的信息可以在互不信任的节点间传输且系统不会丧失信息的控制权,也不会面临安全风险。”这与区块链能够帮助缺乏信任的利益相关者进行低成本、高效率的协作这一应用价值有着异曲同工之妙。
IPFS和区块链如此高的吻合度让我们看到了这两项技术的融合潜力。IPFS技术通过哈希加密为海量数据生成不可篡改的永久性IPFS地址,再将地址信息储存在区块链上。这样相当于将原始数据简化成IPFS地址后再上链,在不牺牲去中心化和安全性的前提下扩充单个节点信息储存容量,从而整体网络的可扩展性,为解决区块链中的“不可能三角”问题提供可行方案。
已有不少项目尝试在区块链中应用IPFS技术,通过这种点对点的分布式文件系统提升节点的存储能力,为整体系统扩展和可持续发展奠定良好基石。随着区块链的应用场景不断拓展,对于该技术的性能要求也会逐渐提高,我们相信IPFS分布式储存协议将会通过提升区块链的可扩展性助力区块链应用的进一步发展。
层面:有哪些区块链
公链的逻辑:
1.中心化与去中心化
2.区块链共识和智能合约
3.业务逻辑和激励机制
4.隐私与保护
5.规则大于数据
区块的数据结构:
上一个区块哈希值 本区块哈希值 挖矿随机数 难度 时间戳 交易信息1 交易信息2 交易信息3 .....
Coin与Token的区别
转载于:https://www.cnblogs.com/1a2a/p/8727313.html
当我们谈论区块链时,总是离不开这些技术:分布式存储、P2P 网络和共识机制,本次我们要谈的问题就是出现在 P2P 对等网络协议上。
异形攻击实际上是一个所有公链都可能面临的问题,我们用以太坊为例子说明。以太坊的 P2P 网络主要采用了 Kademlia (简称 Kad ) 算法实现,Kad 是一种分布式哈希表( DHT )技术,使用该技术,可以实现在分布式环境下快速而又准确地路由、定位数据的问题。什么是异形攻击?
首先,我们先定义一个同类链的概念,是指使用了和其它区块链相同或兼容协议的区块链系统。
异形攻击又称地址池污染,是指诱使同类链的节点互相侵入和污染的一种攻击手法,漏洞的主要原因是同类链系统在通信协议上没有对非同类节点做识别。
以太坊异形攻击是指,以太坊同类链(具体的说是使用以太坊 P2P discv4 节点发现协议的公链,包括以太坊、以太经典)由于使用了兼容的握手协议,无法区分节点是否属于同个链,导致地址池互相污染,节点通信性能下降,最终造成节点阻塞的一种攻击方式。1. 正常的节点发现过程
以太坊同类链节点间通过 4 个 UDP 通信协议来完成节点发现,消息结构如下:
[1] ping: 探测一个节点是否在线
[2] pong: 响应 Ping 命令
[3] findnode: 查找与 Target 节点异或距离最近的其他节点
[4] neighbors: 响应 FindNode 命令,会返回一或多个节点
2. 攻击过程
准备工作:收集以太坊节点地址
我们找到了社区制作的一个地址库:
https://github.com/smartheye/EthStaticNodesTool/blob/master/MainNet/static-nodes.txt第一步:发起恶意握手。
攻击者 A 模拟整个握手过程,主动发起 ping 操作,并利用协议的第 4 步 neighbors,将返回的邻居表修改成我们收集到的以太坊节点地址,推送给受害节点 B(B 是一个以太坊同类链节点)。由于单次通信只能推送 16 个地址,我们需要多次推送以达到攻击效果。
第二步:污染地址池。
B 收到大量 A 返回的邻居表,尝试跟这些节点握手,并将这些节点加入了自己的地址池(俗称 K 桶)。
第三步:污染自动扩散。
让人意外的是,不同链的节点居然互相握手成功了,更为可怕的是,它们把各自地址池里已知的节点推送给了对方,导致更多的节点互相污染,最终扩散致整个网络。
漏洞危害
影响范围
我们对知名公链 QuarkChain 进行安全审计时发现,QuarkChain 的节点在遭受异形攻击后,节点性能严重下降,外部节点需要很长时间才能与受害节点建立连接。QuarkChain 团队随后修复了该问题。
理论上所有使用了以太坊 discv4 协议的区块链都可能受此漏洞影响,在发起测试后的一段时间,我们观测到 EtherNode 的监测节点也已经被污染了,污染的扩散速度似乎比想象中的要快。
也许,以太坊需要来一次清洗。
后记
1、 此漏洞对以太坊是否有影响?
以太坊的节点数量远大于其它同类链节点,并且节点间已经建立了稳定的连接,影响不明显。但对于其它的同类链节点,却会受到来自以太坊节点的强势侵入,导致通信阻塞。
2、 很多朋友关心除了以太坊之外,其它的公链是否有此问题,比如比特币和它的山寨币,比如使用了 libp2p 协议的公链,这些问题我们将在后续文章中披露!
十分感谢 QuarkChain 团队大力协助本次测试!
转自:慢雾科技
公链的交易速度慢总是被大家所诟病,近几年几个主流公链都有拥堵的情况。现在许多项目都标榜自己百万TPS,从而解决了公链性能不足的问题。但区块链性能问题真的解决了吗?不妨我们一起分析一下,看看公链的性能的瓶颈到底在哪里。
1 传统的POW共识
比特币作为区块链技术的开山鼻祖,其性能早已不能满足现在的交易需求,故而时常发生拥堵。我们先来看看下图比特币的记账过程:
比特币采用POW共识(工作量证明),其中主要有两个步骤耗费比较多的时间。一是做工作量证明(Time1),即算出符合要求的区块哈希值。二是全网广播(Time2),等待其他矿工确认这个区块的过程。
在设计时,比特币的出块时间设定为10分钟(即需要10分钟的工作量证明),每个区块的大小约1MB,一个块最多可以打包几千条交易数据。尽管单个区块可以包含千条交易信息,但由于至少需要10分钟才能完成一次出块,这导致平均单位时间内记录的交易信息低,即TPS低。
| TPS( transection per second )是常用的描述区块链性能的指标,指每秒处理业务的数量,是衡量一个系统吞吐量的重要参数。
由于出块慢导致比特币的TPS只有7左右。因此,比特币的拥堵常被归咎于其所用的POW共识机制。
有人会说可以通过增大区块的容量或是提高出块速度的方式来增加TPS,这样就不会拥堵了。这个想法很美好,但是实际上不能这么简单地增加交易吞吐量。增大区块容量会导致Time2的增加(广播时间变长),因为单个区块包含的字节变多了,所需要的传输时间也就相应变长;尽管提高出块速度会使Time1变小,但当出块速度太快而广播速度跟不上时,一个区块在被全网矿工确认之前,新的区块又被挖出来了,这样会出现分叉。分叉会降低网络的安全性。请参考下图:
本来不分叉时作恶的成本是不少于全网51%的算力。现在分叉以后假设A链分到60%的算力,B链40%的算力。如果想要作恶把A链回滚改到B链,只需要全网21%的算力就可以了。所以分叉降低了作恶的成本,使网络变得不安全。因此,10分钟的出块时间是比特币在安全与效率之间做的妥协。
所以在POW下不可以随意的加大区块容量或提高出块速度。这会增大分叉的可能,降低网络的安全性。
2 POS共识提升交易速度
由于POW的交易速度慢和高能耗,POS共识(权益证明)渐渐被更广泛的采纳。例如以太坊2.0中重要一步就是从POW共识转为POS共识。与POW不同,POS通过质押Token获得打包区块和投票的权利。其记账过程如下:
在POS中,矿工所出的块直接就是候选区块,省去了POW中工作量证明的步骤(Time1)。因为在质押代币成为矿工的时候就已经默认把打包的权利分配给矿工了。POS在出块以前就把打包权分配好了,而POW要在出块后再去竞争打包的权利。所以POS会比POW效率更高,甚至可以做到秒级确认。可见POS的交易性能较POW有了显著提升。
以太坊在现有POW共识下,TPS大概在30到40。虽然大大高于比特币,但还是时不时地拥堵,转账有时候要等上好几个小时才能完成。为了解决这个问题,以太坊选择放弃POW而采用效率更高的POS机制。今年ETH2.0的phase0信标链(Bacon Chain)启动,开始POS逐步取代POW,届时只需要质押32个ETH就可以成为矿工。
3 更高速度的DPOS
EOS的DPOS共识属于POS,由代币的持有者选出一些代表,再由这些代表轮流记账。DPOS本质是牺牲了去中心化来获得高吞吐量,EOS网络只有21个超级节点进行出块。
相比POS的几百上千个节点,EOS只需要在21个节点中广播,因此Time2所需时间会进一步缩短,TPS也将大大提高。
EOS在白皮书中宣称有百万级的TPS,可是在2019年的EIDOS空投时还是发生了拥堵。尽管改进了共识算法获得了超高的TPS,可为什么连一个空投项目都会引发拥堵?可见还有其他因素制约着区块链的性能。
区块链网络的性能不光和TPS,也就是吞吐量有关;还和单个全节点的性能有关。区块链网路中的常见节点大致有两种:全节点,轻节点。网络中每个全节点都要负责广播区块,确认交易。所以全节点要保存整个区块链的交易历史,还要存有全网所有的用户、DAPP的状态以便在交易时验证这些信息。轻节点只负责查询全节点的信息,不参与记账过程,所以轻节点不会对网络性能有什么贡献。在执行交易或运行DAPP时,会依赖全节点来完成,因此全节点的性能决定了交易执行的处理速度。但是区块链网络的性能并不是所有全节点的性能叠加,而是存在一个木桶效应。木桶的储水量取决于木桶中最短的那块板,整个网络的性能也受制于单个全节点的性能:全网性能不会高于单个全节点的性能。
EOS的拥堵正是受限于单个全节点的性能。EOS把全节点的性能分成RAM,CPU等资源。再把这些资源通证化,允许网络中用户通过租赁的方式最大程度的提高全节点的利用率。当短时间内出现大量处理请求,全节点的性能资源会快速枯竭,就像是运行了过多程序的电脑,再开个网页也会十分卡。2019年EIDOS空投引发的拥堵正式因为EOS网络中CPU资源快速告急,一笔转账所需的CPU超过了网络能分配给它的CPU而被搁置无法完成。
4 公链性能的瓶颈究竟在哪里?
从上面几个例子可以看出,改变共识算法可以在一定程度上提高吞吐量,增加TPS。但无论共识算法如何改变,始终逃不了Time2这个步骤:全网充分广播,待节点验证后确认区块。而这一过程的处理效率主要和广播的传输效率以及节点处理信息的能力有关。
广播的传输效率越高,网络的吞吐量就越大,TPS也就越高。吞吐量的物理上限是各个全节点之间的网络带宽,而网络带宽又受制于通讯技术和硬件设备。现在很多项目一味的鼓吹千百万级的TPS,这需要一个很高的网络带宽,要把所有全节点困在一个局域网里才有可能实现,但这样的网络几乎没有去中心化可言。
单个全节点的性能越好,其处理信息的能力就越高,公链性能就越强悍。可一味提高全节点的要求同样会导致中心化,比如只有一些高配置服务器才能做全节点,那这些节点就可能被一些大型公司控制。
综合来看,区块链的性能主要受限于网络带宽和单个全节点的性能。现在很多项目只一味的追求高TPS,使人误以为这样就提高了公链的性能。实际上他们只关注了网络带宽而忽略了全节点性能对整个网络性能的影响。对公链来说提高性能的关键是要保证在一定去中心化程度的基础上突破这两点限制。
5 突破瓶颈的办法
现在提出的最有可能实现的是分片(sharding)方案:把一条单链切分成好几组,每组叫一个shard。假设全网100个全节点,分组后每组只有20个全节,一个交易不用向全网所有的全节点广播确认,只要这组20个全节点局部验证了就行。这样提高了网络带宽的利用率。每组的节点也不同存储全网的用户信息,DAPP状态;主要存储自己这个小组的就好,减轻了节点负担,可以有效避免拥堵。
当然分片方案还要注意协调不同shard之间的运行。以太坊2.0的最终目的也是通过分片的扩容方案解决现有以太坊性能不足的问题。以太坊2.0的规划是5年,可见执行起来难度不小。现在为了克服公链的性能瓶颈,越来越多的方案被提出,相信未来一定能找到一个完美的解决办法。
参考资料:
1.《从以太坊网络拥堵说起》https://www.jianshu.com/p/7cc32f212a1d
2.《EOS出现区块网络拥堵?这件事其实是这样的》https://www.jianshu.com/p/04d01c0f4873
3.《时隔一年EOS又堵了,我们再次感受到了Fomo的力量》https://baijiahao.baidu.com/s?id=1649077077299497991&wfr=spider&for=pc
4.《EOS主网TPS再创新高,但TPS并不是越高越好》https://www.8btc.com/article/245055
5.《PoW和PoS的全面比较:各自的优劣在哪?》https://baijiahao.baidu.com/s?id=1627215065673166980&wfr=spider&for=pc
6.《区块链公链如何才能快起来 (一)》https://zhuanlan.zhihu.com/p/46766111
7.《号称「公链分片」技术的五大谎言 - 区块链公链如何才能快起来 (二)》https://zhuanlan.zhihu.com/p/47592706
希望大家可以关注微信公众号更加方便交流。公众号的文章也会率先更新~