收藏本站 网站导航 开放平台 Monday, November 4, 2024 星期一
  • 微信

区块链节点遍历_区块链是怎样防止数据篡改的

来源 中金网 10-01 06:39
摘要: 本资讯是关于区块链是怎样防止数据篡改的,什么是区块链,什么是区块链挖矿是做什么详细介绍区块链和虚拟货币,比特币之挖矿与共识(二)相关的内容,由数字区块链为您收集整理请点击查看详情

  Ⅰ 什么是区块链

  用最简单的术语来说,区块链是一个分布式分类账。

  要理解这意味着什么,我们首先要看一下它的对立面:一个集中的分类账。因为区块链技术是从金融开始的,下面我们也将使用银行作为例子进行介绍。

  以下是我们使用银行借记卡交易的过程:

  你可以在商店刷卡购买商品。

  商家向你的银行发送账单,以获得商定的金额。

  你的银行会验证你是否可能授权购买。

  银行将钱汇给商家。

  最后,银行在其分类账中记录了这些信息。

  这里涉及很多技术,但基本上就是这样。最后一步很重要 - 银行记录了客户所做的所有交易。这个分类账一直回到银行做的第一笔交易。

  该分类账由银行保管,维护和监管。你可以在自己的在线银行帐户中阅读,但无法对其进行更改。银行完全控制。如果它决定做出改变,那么你无能为力。

  至关重要的是,如果黑客能够访问银行的分类账,那就可能导致很多问题。他们可以更改帐户余额,使其看起来像某些交易从未发生过,等等。

  这就是分布式账本如此酷的原因。

  区块链网络可视化

  如果银行在分布式分类账上运作,银行的每个成员都会有一份分类账的副本,每当银行的任何成员进行购买时,他们都会告诉银行的其他所有成员。

  每个成员都将验证事务并将其添加到分类帐(添加的记录称为“块”)。这有一些重要的好处,因为没有可以操纵记录的集中权限。黑客访问一个分类帐不会是一个大问题,因为其他分类帐可以轻松验证它。

  另一方面,它需要大量的工作。简而言之,第二个系统是区块链(至少在财务方案中)。

  如上所述,区块链是一个分散的交易清单。如果我发送小明2个比特币,我会向网络中的每个人发送一条消息,说“我正在发送小明2个比特币”,他们都会记录交易。

  区块链的未来,它将如何改变我们的生活?

  关于区块链,有一点很重要,它是公共资源,没有人真正拥有它,因为每个人都拥有它。

  区块链不仅仅是科幻小说。我们不需要理解这项技术背后的机制,但你需要明白,它在未来20年里可能会彻底改变我们的生活。

  这听起来很大胆,但请记住,20年前,我们还在Netscape上浏览互联网,使用最先进的摩托罗拉翻盖手机,购买我们的第一台DVD播放机。当时,如果我们幻想电脑可以拿在手里,在上面还可以买车、付款、看电影,那一定会被认为是天方夜谭。

  虽然区块链的影响可能不像互联网那样明显,也不如手机那么有形,但区块链将切实解决日常生活中的诸多烦恼。比如中介坑人、交易拖延等。在我们现在的生活中,中间商随处可见,我们理所当然地认为他们是生活的一部分。如果有一天,这些中介不复存在,你会发现这个世界将会变成另外一个样子。

  幻想一下,到2040年,区块链或将成为一种成熟的、应用广泛的技术。当某一天,你离不开区块链就像现在离不开互联网一样,你就会惊觉这种去中心化的记账技术已化繁就简,成为你生活方式的一部分

  Ⅱ 比特币之挖矿与共识(二)

  比特币共识机制的第三步是通过网络中的每个节点独立校验每个新区块。当新区块在网络中传播时,每一个节点在将它 转发到其节点之前,会进行一系列的测试去验证它。这确保了只有有效的区块会在网络中传播。

  独立校验还确保了诚实 的矿工生成的区块可以被纳入到区块链中,从而获得奖励。行为不诚实的矿工所产生的区块将被拒绝,这不但使他们失 去了奖励,而且也浪费了本来可以去寻找工作量证明解的机会,因而导致其电费亏损。

  当一个节点接收到一个新的区块,它将对照一个长长的标准清单对该区块进行验证,若没有通过验证,这个区块将被拒 绝。这些标准可以在比特币核心客户端的CheckBlock函数和CheckBlockHead函数中获得

  它包括:

   为什么矿工不为他们自己记录一笔交易去获得数以千计的比特币?

  这 是因为每一个节点根据相同的规则对区块进行校验。一个无效的coinbase交易将使整个区块无效,这将导致该区块被拒 绝,因此,该交易就不会成为总账的一部分。矿工们必须构建一个完美的区块,基于所有节点共享的规则,并且根据正 确工作量证明的解决方案进行挖矿,他们要花费大量的电力挖矿才能做到这一点。如果他们作弊,所有的电力和努力都 会浪费。这就是为什么独立校验是去中心化共识的重要组成部分。

  比特币去中心化的共识机制的最后一步是将区块集合至有最大工作量证明的链中。一旦一个节点验证了一个新的区块, 它将尝试将新的区块连接到到现存的区块链,将它们组装起来。

  节点维护三种区块:第一种是连接到主链上的,第二种是从主链上产生分支的(备用链),最后一种是在已知链中没有 找到已知父区块的。在验证过程中,一旦发现有不符合标准的地方,验证就会失败,这样区块会被节点拒绝,所以也不 会加入到任何一条链中。

  任何时候,主链都是累计了最多难度的区块链。在一般情况下,主链也是包含最多区块的那个链,除非有两个等长的链 并且其中一个有更多的工作量证明。主链也会有一些分支,这些分支中的区块与主链上的区块互为“兄弟”区块。这些区 块是有效的,但不是主链的一部分。 保留这些分支的目的是如果在未来的某个时刻它们中的一个延长了并在难度值上超 过了主链,那么后续的区块就会引用它们。

  如果节点收到了一个有效的区块,而在现有的区块链中却未找到它的父区块,那么这个区块被认为是“孤块”。孤块会被 保存在孤块池中,直到它们的父区块被节点收到。一旦收到了父区块并且将其连接到现有区块链上,节点就会将孤块从 孤块池中取出,并且连接到它的父区块,让它作为区块链的一部分。当两个区块在很短的时间间隔内被挖出来,节点有 可能会以相反的顺序接收到它们,这个时候孤块现象就会出现。

  选择了最大难度的区块链后,所有的节点最终在全网范围内达成共识。随着更多的工作量证明被添加到链中,链的暂时性差异最终会得到解决。挖矿节点通过“投票”来选择它们想要延长的区块链,当它们挖出一个新块并且延长了一个链, 新块本身就代表它们的投票。

  因为区块链是去中心化的数据结构,所以不同副本之间不能总是保持一致。区块有可能在不同时间到达不同节点,导致节点有不同的区块链全貌。

  解决的办法是,每一个节点总是选择并尝试延长代表累计了最大工作量证明的区块链,也就 是最长的或最大累计工作的链(greatest cumulative work chain)。节点通过累加链上的每个区块的工作量,得到建立这个链所要付出的工作量证明的总量。只要所有的节点选择最长累计工作的区块链,整个比特币网络最终会收敛到一致的状态。分叉即在不同区块链间发生的临时差异,当更多的区块添加到了某个分叉中,这个问题便会迎刃而解。

  提示由于全球网络中的传输延迟,本节中描述的区块链分叉自动会发生。

  然而,倒三角形的区块不会被丢弃。它被链接到星形链的父区块,并形成备用链。虽然节点X认为自己已经正确选择了获胜链,但是它还会保存“丢失”链,使得“丢失”链如果可能最终“获胜”,它还具有重新打包的所需的信息。

  这是一个链的重新共识,因为这些节点被迫修改他们对块链的立场,把自己纳入更长的链。任何从事延伸星形-倒三角形的矿工现在都将停止这项工作,因为他们的候选人是“孤儿”,因为他们的父母“倒三角形”不再是最长的连锁。

   “倒三角形”内的交易重新插入到内存池中用来包含在下一个块中,因为它们所在的块不再位于主链中。

  整个网络重新回到单一链状态,星形-三角形-菱形,“菱形”成为链中的最后一个块。所有矿工立即开始研究以“菱形”为父区块的候选块,以扩展这条星形-三角形-菱形链。

  从理论上来说,两个区块的分叉是有可能的,这种情况发生在因先前分叉而相互对立起来的矿工,又几乎同时发现了两个不同区块的解。

  然而,这种情况发生的几率是很低的。单区块分叉每周都会发生,而双块分叉则非常罕见。比特币将区块间隔设计为10分钟,是在更快速的交易确认和更低的分叉概率间作出的妥协。更短的区块产生间隔会让交易清算更快地完成,也会导致更加频繁地区块链分叉。与之相对地,更长的间隔会减少分叉数量,却会导致更长的清算时间。

  2012年以来,比特币挖矿发展出一个解决区块头基本结构限制的方案。在比特币的早期,矿工可以通过遍历随机数 (Nonce)获得符合要求的hash来挖出一个块。

  难度增长后,矿工经常在尝试了40亿个值后仍然没有出块。然而,这很容 易通过读取块的时间戳并计算经过的时间来解决。因为时间戳是区块头的一部分,它的变化可以让矿工用不同的随机值 再次遍历。当挖矿硬件的速度达到了4GH/秒,这种方法变得越来越困难,因为随机数的取值在一秒内就被用尽了。

  当出现ASIC矿机并很快达到了TH/秒的hash速率后,挖矿软件为了找到有效的块, 需要更多的空间来储存nonce值 。可以把时间戳延后一点,但将来如果把它移动得太远,会导致区块变为无效。

  区块头需要信息来源的一个新的“变革”。解决方案是使用coinbase交易作为额外的随机值来源,因为coinbase脚本可以储存2-100字节的数据,矿工们开始使用这个空间作为额外随机值的来源,允许他们去探索一个大得多的区块头值范围来找到有效的块。这个coinbase交易包含在merkle树中,这意味着任何coinbase脚本的变化将导致Merkle根的变化。

  8个字节的额外随机数,加上4个字节的“标准”随机数,允许矿工每秒尝试2^96(8后面跟28个零)种可能性而无需修改时间戳。如果未来矿工穿过了以上所有的可能性,他们还可以通过修改时间戳来解决。同样,coinbase脚本中也有更多额外的空间可以为将来随机数的扩展做准备。

  比特币的共识机制指的是,被矿工(或矿池)试图使用自己的算力实行欺骗或破坏的难度很大,至少理论上是这样。就像我们前面讲的,比特币的共识机制依赖于这样一个前提,那就是绝大多数的矿工,出于自己利益最大化的考虑,都会 通过诚实地挖矿来维持整个比特币系统。然而,当一个或者一群拥有了整个系统中大量算力的矿工出现之后,他们就可以通过攻击比特币的共识机制来达到破坏比特币网络的安全性和可靠性的目的。

  值得注意的是,共识攻击只能影响整个区块链未来的共识,或者说,最多能影响不久的过去几个区块的共识(最多影响过去10个块)。而且随着时间的推移,整个比特币块链被篡改的可能性越来越低。

  理论上,一个区块链分叉可以变得很长,但实际上,要想实现一个非常长的区块链分叉需要的算力非常非常大,随着整个比特币区块链逐渐增长,过去的区块基本可以认为是无法被分叉篡改的。

   同时,共识攻击也不会影响用户的私钥以及加密算法(ECDSA)。

  共识攻击也 不能从其他的钱包那里偷到比特币、不签名地支付比特币、重新分配比特币、改变过去的交易或者改变比特币持有纪录。共识攻击能够造成的唯一影响是影响最近的区块(最多10个)并且通过拒绝服务来影响未来区块的生成。

  共识攻击的一个典型场景就是“51%攻击”。想象这么一个场景,一群矿工控制了整个比特币网络51%的算力,他们联合起来打算攻击整个比特币系统。由于这群矿工可以生成绝大多数的块,他们就可以通过故意制造块链分叉来实现“双重支 付”或者通过拒绝服务的方式来阻止特定的交易或者攻击特定的钱包地址。

  区块链分叉/双重支付攻击指的是攻击者通过 不承认最近的某个交易,并在这个交易之前重构新的块,从而生成新的分叉,继而实现双重支付。有了充足算力的保证,一个攻击者可以一次性篡改最近的6个或者更多的区块,从而使得这些区块包含的本应无法篡改的交易消失。

  值得注意的是,双重支付只能在攻击者拥有的钱包所发生的交易上进行,因为只有钱包的拥有者才能生成一个合法的签名用于双重支付交易。攻击者在自己的交易上进行双重支付攻击,如果可以通过使交易无效而实现对于不可逆转的购买行为不予付款, 这种攻击就是有利可图的。

  攻击者Mallory在Carol的画廊买了描绘伟大的中本聪的三联组画(The Great Fire),Mallory通过转账价值25万美金的比特币 与Carol进行交易。在等到一个而不是六个交易确认之后,Carol放心地将这幅组画包好,交给了Mallory。这时,Mallory 的一个同伙,一个拥有大量算力的矿池的人Paul,在这笔交易写进区块链的时候,开始了51%攻击。

  首先,Paul利用自己矿池的算力重新计算包含这笔交易的块,并且在新块里将原来的交易替换成了另外一笔交易(比如直接转给了Mallory 的另一个钱包而不是Carol的),从而实现了“双重支付”。这笔“双重支付”交易使用了跟原有交易一致的UTXO,但收款人被替换成了Mallory的钱包地址。

  然后,Paul利用矿池在伪造的块的基础上,又计算出一个更新的块,这样,包含这 笔“双重支付”交易的块链比原有的块链高出了一个块。到此,高度更高的分叉区块链取代了原有的区块链,“双重支付”交 易取代了原来给Carol的交易,Carol既没有收到价值25万美金的比特币,原本拥有的三幅价值连城的画也被Mallory白白 拿走了。

  在整个过程中,Paul矿池里的其他矿工可能自始至终都没有觉察到这笔“双重支付”交易有什么异样,因为挖矿程序都是自动在运行,并且不会时时监控每一个区块中的每一笔交易。

  为了避免这类攻击,售卖大宗商品的商家应该在交易得到全网的6个确认之后再交付商品。或者,商家应该使用第三方 的多方签名的账户进行交易,并且也要等到交易账户获得全网多个确认之后再交付商品。一条交易的确认数越多,越难 被攻击者通过51%攻击篡改。

  对于大宗商品的交易,即使在付款24小时之后再发货,对买卖双方来说使用比特币支付也 是方便并且有效率的。而24小时之后,这笔交易的全网确认数将达到至少144个(能有效降低被51%攻击的可能性)。

  需要注意的是,51%攻击并不是像它的命名里说的那样,攻击者需要至少51%的算力才能发起,实际上,即使其拥有不 到51%的系统算力,依然可以尝试发起这种攻击。之所以命名为51%攻击,只是因为在攻击者的算力达到51%这个阈值 的时候,其发起的攻击尝试几乎肯定会成功。

  本质上来看,共识攻击,就像是系统中所有矿工的算力被分成了两组,一 组为诚实算力,一组为攻击者算力,两组人都在争先恐后地计算块链上的新块,只是攻击者算力算出来的是精心构造 的、包含或者剔除了某些交易的块。因此,攻击者拥有的算力越少,在这场决逐中获胜的可能性就越小。

  从另一个角度 讲,一个攻击者拥有的算力越多,其故意创造的分叉块链就可能越长,可能被篡改的最近的块或者或者受其控制的未来 的块就会越多。一些安全研究组织利用统计模型得出的结论是,算力达到全网的30%就足以发动51%攻击了。全网算力的急剧增长已经使得比特币系统不再可能被某一个矿工攻击,因为一个矿工已经不可能占据全网哪怕的1%算 力。

  待补充

  待补充

  Ⅲ Blockstack简介

  一、概要

  Blockstack是一个分散式应用程序的新互联网,配备了一整套开源开发工具来构建和引导分散的应用程序和协议生态系统。用户拥有自己的数据,浏览器就是开始所需的一切,Blockstack是区块链的“Google”。

  Blockstack是一款集成了分散式数据、分散式应用程序、分散式用户数据的区块链浏览器应用。

  所谓分布式互联网,用户在此之上拥有对其身份的所有权,数据和身份绑定,存储在自己的私有设备,或者云端,从而取消了对第三方机构的依赖。而开发者可以开发分布式的应用本地运行,调用用户的API,在用户许可的情况下访问用户数据,从而不用考虑数据的存储问题。Blockstack通过这种方式将数据主权交还给用户,用户数据由用户保管,未经用户许可,任何第三方无法访问用户数据。由于用户拥有了数据主权,用户可以随心所欲转移,不用再受到平台限制。

  二、Blockstack的实现原理

  Blockstack在底层区块链之上构建了一个与之隔离的命名系统。底层的区块链用来记录“名-值(name-value)”对的状态变化,利用区块链的共识协议,命名系统中的各项操作(例如命名注册,更新,转让等)可以在全网达成共识,不可篡改。

  Blockstack采用了数据平面与控制平面分离的思想,将命名控制和命名相关数据分离。

  控制平面包括底层区块链和之上的虚拟链,定义了注册名字,创建名字-身份绑定的协议。

  数据平面负责数据存储,主要包括

  (1)用来通过哈希值或URL找到数据的zone file

  (2)外部存储(Dropbox,S3,IPFS等)。数据由与其绑定的名字所对应的密钥对签名。客户端从数据平面读取数据,并且通过zone file中的数据哈希和名字所有者的公钥对数据进行完整性和可靠性验证。

  这种数据平面与控制平面相分离的思想使得Blockstack不依附于任何一种特定的区块链,也就是说用户可以根据自己的需求选择不同的区块链

  三、Blockstack的层次

  为了实现命名与存储功能,Blockstack具有四个层次:控制平面的区块链层和虚拟链层,以及数据平面的路由层和数据存储层。具体实现如下图所示

  1、区块链层(Blockchain Layer)

  区块链层处于最底层,主要提供两项服务:

  (1)Blockstack的各项操作是编码在底层区块链的交易记录中的,区块链层负责存储Blockstack的操作序列;

  (2)为写入区块链的操作的顺序提供共识。

  2、虚拟链层(Virtualchain Layer)

  虚拟链层是Blockstack的核心,定义了Blockstack节点的各种操作,且只有Blockstack节点能感知到这一层,单纯的区块链节点虽然能读取到操作的原文,但无法对其解析。

  虚拟链层还定义了接收和拒绝Blockstack操作的规则。例如,注册命名操作被接收的条件是这个名字还没有其他用户注册。

  3、路由层(Routing Layer)

  Blockstack将路由请求(如何找到数据)与实际的数据存储分开,这样就给了用户可以选择数据存储的余地,用户既可以选择存在商用的云存储(如亚马逊S3,或者Dropbox)也可以选择自己的私有存储或者p2p存储系统。

  路由信息存储在zone files里,这与DNS的zone file在形式上几乎相同,如上图所示。虚拟链将名字与zone file的哈希值绑定,存储在控制平面,而zone file本身是存储在路由层(目前的实现方式是存储在分布式哈希表中)。用户可以充分信任路由层,因为用户可以随时将zone file与控制平面的哈希值对比,来校验zone file是否被改动。

  4、存储层(Storage Layer)

  存储层是用户实际存放数据的地方。所有数据都会被名字所有者对应的密钥对签名。通过这种链外存储的方式,用户可以存储任意大小的数据,而且因为数据的哈希值是存储在控制层的,因此用户不用担心数据被篡改。

  数据在存储层的存储方式有两种:多变存储和非多变存储。两者的区别主要在于在修改数据时是否同时修改zone file,分别适用于数据经常需要修改,以及数据几乎不会被修改的情况。

  5、命名系统

  Blockstack使用四层的结构实现了分布式命名系统。名字归属于底层区块链的地址以及相应的私钥。和Namecoin一样,用户需要先预定(preoder),之后才能注册(register)名字。最先将预定操作和注册操作成功写入区块链的用户可以获得对某个名字的所有权。名字被注册后,用户可以使用更新(update)命令向该名字下发送更新的数据。用户也可以使用转让(transfer)操作将名字转让给别的地址。撤销(revoke)命令可以暂时终止对这一名字的操作。

  四、总结

  区块链技术给互联网带来了激动人心的前景。分布式的命名与存储系统使得用户保有对身份与数据的绝对控制权,第三方的程序若想要访问用户的数据需要用户授权。Blockstack项目虽然目前还不是很成熟,但其设计的思想和理念十分贴合互联网未来的发展方向,也是区块链技术落地应用的典范。

  https://zhuanlan.hu.com/p/29823215

  Ⅳ 区块链的组成部分

  区块链的组成部分如下:

  开放性:区块链的系统数据是公开透明的,每个人都可以参与进来,比如租房子,你可以知道这个房子以前的出租信息,有没出现过问题,当然这里头的一些个人私有信息是加密的。

  自治性:区块链采用基于协商一致的规范和协议(比如一套公开透明的算法),然后各个节点就按照这个规范来操作,这样就是所有的东西都有机器完成,就没有人情成分。 使得对人的信任改成了对机器的信任,任何人为的干预不起作用。

  信息不可篡改:如果信息存储到区块链中就被永久保存,是没办法去改变,至于 51% 攻击,基本不可能实现。

  匿名性:区块链上面没有个人的信息,因为这些都是加密的,是一堆数字字母组成的字符串,这样就不会出现你的各种身份证信息、电话号码被倒卖的现象。

  Ⅳ 以太坊技术系列-以太坊数据结构

  本篇文章和大家介绍一下以太坊的数据结构,上篇文章我们提到,以太坊为了实现智能合约这一功能,使用了基于账户的模型。我们来看看以太坊中数据结构。

  既然是基于账户的模型,我们需要通过账户地址找到账户的状态。就像通过银行卡号可以找到你在银行中的各种信息一样。最简单的想法当然是一个简单的哈希表 key是账户地址 value是账户状态。但这里有个问题解决不了。

  轻节点如何校验账户合法性?

  上篇我们说过,区块链中有2类节点,全节点和轻节点,轻节点只会存储block header,所以轻节点如何才能校验账号是否合法呢?

  这个思路和我们平时用的md5校验一致,我们会对区块内的信息进行hash运算从而得出区块内信息唯一确定的值,区块链所有节点中这个值都是相同的。

  在这个过程中我们用到了一种数据结构Merkle Tree(哈希树),我们先看下Merkle Tree(哈希树)的示意图。

  上篇文章说到区块链中的链表(哈希链)和我们平时常见链表不同的是将指针从地址改为了hash指,这里也一样,哈希树和二叉树的区别有2个

  1.将地址改为了哈希值

  2.只有叶子节点存储数据

  回到之前的问题轻节点是如何校验1个账户或交易是否是在链上的呢?

  整个流程如上图所示

  1.轻节点需要判断1个账号是否合法

  2.轻节点由于只存储block header,所以拿到1个账号的时候会向全节点发出请求

  3.全节点存储了所有账户状态,将账户路径中的需要计算用到的hash值返回给轻节点

  4.轻节点本地进行计算根hash值,如果计算结果和自己存储一致则账户合法,不一致则不合法。

  那以太坊中的账户信息的数据结构就是这样吗?

  直接用这样的数据结构来存储账户信息会有2个问题

  查找困难

  生成hash值不确定

  第1个问题应该比较容易发现,在这个树中寻找1个账号需要的复杂度是O(n),因为没有任何顺序。

  第2个问题其实也是因为无序导致的,无序的组合每个节点针对同一批账户生成的hash值不一致,这就导致无法达成共识。

  既然2个问题都和顺序有关,那我们类似二叉排序树一样,使用哈希排序树是不是就可以解决问题了呢?

  使用排序树后会带来另外1个问题

  插入困难

  因为要维持树是有序的,很可能带来树结构的很大变动。

  以太坊中使用了另外一种数据结构字典树。和哈希树不同,字典树应该是很多地方都有使用。我们简单来看下字典树的结构。

  字典树能够较好地解决哈希树的2个缺点1.查找困难 2.生成的hash值不确定以及排序二叉树的1个缺点 插入困难。

  但字典树我们可以看到可能树的深度可能由于部分元素导致整棵树深度非常深。

  这时我们可以进一步优化,将相同路径进行压缩。这就是压缩字典树。

  将哈希树和压缩字典树结合,就可以得到以太坊存储账户的最终数据结构-MPT。

  将压缩字典树里面的指针从地址改为指针,并且将数据存储在叶子节点中即可。

  介绍完状态树的数据结构,我们接下来讨论1个问题,区块中存储的账户状态是什么样的范围。有2种选择。

  只保存当时区块中产生交易的账户状态。

  保存全局所有的账户。

  我们可以看下这2种方式,无非就是空间和时间的平衡,只保存当前区块产生的交易意味着是做懒加载(需要的时候才去寻找账户),在区块链中这个代价是非常大的,因为寻找的账户之前从未交易过,这样会遍历整个区块链。另外一种保存全局的账户方式虽然看起来空间消耗较大,但查找快捷,而且空间的问题我们可以通过其他方式优化。所以最终以太坊选择了第2种每个区块都报错全局所有账户的方式。

  我们来看下以太坊中是如何保存状态树的。

  可以看到以太坊中虽然每个区块都保存了全部账户,但是会将未发生变化的账户状态指向前1个节点,本身只存储发生变化的状态,这样可以较大程度优化空间占用。

  介绍完以太坊中比较复杂的状态树后,我们继续来看看以太坊中的另外两棵树,交易树和收据树。

  首先介绍一下,为什么需要交易树&收据树。

  1.交易树

  虽然以太坊是基于账户的模型,但是就像银行不仅会存储银行卡的余额,还会存储卡中的每笔钱怎么来的以及怎么花的。交易树中就存储着当前区块中的包含的所有交易。

  2.收据树

  由于智能合约的引入增加了不少复杂性,所以以太坊用收据树存储着一些交易操作的额外信息。比如交易过程中执行日志就包含在收据树中方便查询。收据树和交易树是一一对应的。每发生一次交易就会有一次收据。

  和状态树不同交易树和收据树只维护当前区块内发生的交易,因为当时区块发生交易时不需要再去查找另外1个交易,也就之前需要可能遍历整个区块链的查找操作了。

  由于以太坊中的出块速度较快,我们进行一些查询一些符合条件交易的时候会面临大量数据遍历困难的问题。收据树中引入了布隆过滤器可以帮助我们有效缓解这一困难。

  布隆过滤器将大集合中每个元素进行hash运算映射到1个较小的集合,这时再来1个元素要判断是否在大集合的时候,不需要遍历整个大集合,而是去进行hash运算去小集合中寻找是否存在,如果不存在,肯定不在大集合中,如果存在则不能说明任何问题。

  如上图所示,布隆过滤器只能证明某1个元素不在集合中,不能证明1个元素在结合中。

  以太坊中如果我们要在较多区块中寻找某1个交易,则可以利用布隆过滤器,过滤掉肯定不存在目标交易的区块,然后进入收据树内继续利用布隆过滤器筛选,剩下的才是可能的目标交易的交易,进行一一比对即可。

  我们介绍了以太坊的核心数据结构,状态树&交易树&收据树,他们都是使用相同的数据结构-哈希压缩字典树。但状态树是维护1颗全局账户树,交易树和收据树则是维护本区块内的交易或收据。

  介绍完数据结构后,后面我们会用几篇文章来介绍以太坊中的一些核心算法,比如共识机制,挖矿算法等。

  Ⅵ 区块链技术

  背景:比特币诞生之后,发现该技术很先进,才发现了区块链技术。比特币和区块链技术同时被发现。

  1.1 比特币诞生的目的:

  ①货币交易就有记录,即账本;

  ②中心化机构记账弊端——可篡改;易超发

   比特币解决第一个问题:防篡改——hash函数

  1.2 hash函数(加密方式)

  ①作用:将任意长度的字符串,转换成固定长度(sha256)的输出。输出也被称为hash值。

  ②特点:很难找到两个不同的x和y,使得h(x)=h(y)。

  ③应用:md5文件加密

  1.3 区块链

  ①定义

  区块:将总账本拆分成区块存储

  区块链:在每个区块上,增加区块头。其中记录父区块的hash值。通过每个区块存储父区块的hash值,将所有的区块按照顺序连接起来,形成区块链。

  ②区块链如何防止交易记录被篡改

  形成区块链后,篡改任一交易,会导致该交易区块hash值和其子区块中不同,发现篡改。

  即使继续篡改子区块头中hash值,会导致子区块hash值和孙区块中不同,发现篡改。

  1.4 区块链本质

  ①比特币和区块链本质:一个人人可见的大账本,只记录交易。

  ②核心技术:通过密码学hash函数+数据结构,保证账本记录不可篡改。

  ③核心功能:创造信任。法币依靠政府公信力,比特币依靠技术。

  1.5如何交易

  ①进行交易,需要有账号和密码,对应公钥和私钥

  私钥:一串256位的二进制数字,获取不需要申请,甚至不需要电脑,自己抛硬币256次就生成了私钥

  地址由私钥转化而成。地址不能反推私钥。

  地址即身份,代表了在比特币世界的ID。

  一个地址产生之后,只有进入区块链账本,才能被大家知道。

  ②数字签名技术

  签名函数sign(张三的私钥,转账信息:张三转10元给李四) = 本次转账签名

  验证韩式verify(张三的地址,转账信息:张三转10元给李四,本次转账签名) = True

  张三通过签名函数sign(),使用自己的私钥对本次交易进行签名。

  任何人可以通过验证韩式vertify(),来验证此次签名是否有由持有张三私钥的张三本人发出。是返回true,反之为false。

  sign()和verify()由密码学保证不被破解。·

  ③完成交易

  张三将转账信息和签名在全网供内部。在账户有余额的前提下,验证签名是true后,即会记录到区块链账本中。一旦记录,张三的账户减少10元,李四增加10元。

  支持一对一,一对多,多对已,多对多的交易方式。

   比特币世界中,私钥就是一切!!!

  1.6中心化记账

  ①中心化记账优点:

  a.不管哪个中心记账,都不用太担心

  b.中心化记账,效率高

  ②中心化记账缺点:

  a 拒绝服务攻击

  b 厌倦后停止服务

  c 中心机构易被攻击。比如破坏服务器、网络,监守自盗、法律终止、政府干预等

  历史 上所有有中心化机构的机密货币尝试都失败了。

   比特币解决第二个问题:如何去中心化

  1.7 去中心化记账

  ①去中心化:人人都可以记账。每个人都可以保留完整的账本。

  任何人都可以下载开源程序,参与P2P网络,监听全世界发送的交易,成为记账节点,参与记账。

  ②去中心化记账流程

  某人发起一笔交易后,向全网广播。

  每个记账节点,持续监听、持续全网交易。收到一笔新交易,验证准确性后,将其放入交易池并继续向其它节点传播。

  因为网络传播,同一时间不同记账节点的交一次不一定相同。

  每隔10分钟,从所有记账节点当中,按照某种方式抽取1名,将其交易池作为下一个区块,并向全网广播。

  其它节点根据最新的区块中的交易,删除自己交易池中已经被记录的交易,继续记账,等待下一次被选中。

  ③去中心化记账特点

  每隔10分钟产生一个区块,但不是所有在这10分钟之内的交易都能记录。

  获得记账权的记账节点,将得到50个比特币的奖励。每21万个区块(约4年)后,奖励减半。总量约2100万枚,预计2040年开采完。

  记录一个区块的奖励,也是比特币唯一的发行方式。

  ④如何分配记账权:POW(proof of work) 方式

  记账几点通过计算一下数学题,来争夺记账权。

  找到某随即数,使得一下不等式成立:

  除了从0开始遍历随机数碰运气之外,没有其它解法,解题的过程,又叫做挖矿。

  谁先解对,谁就得到记账权。

  某记账节点率先找到解,即向全网公布。其他节点验证无误之后,在新区块之后重新开始新一轮的计算。这个方式被称为POW。

  ⑤难度调整

  每个区块产生的时间并不是正好10分钟

  随着比特币发展,全网算力不算提升。

  为了应对算力的变化,每隔2016个区块(大约2周),会加大或者减少难度,使得每个区块产生的平均时间是10分钟。

  #欧易OKEx# #比特币[超话]# #数字货币#

  Ⅶ 区块链是怎样防止数据篡改的

  区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。

  跟传统的分布式存储有所不同,区块链的分布式存储的独特性主要体现在两个方面:一是区块链每个节点都按照块链式结构存储完整的数据,传统分布式存储一般是将数据按照一定的规则分成多份进行存储。二是区块链每个节点存储都是独立的、地位等同的,依靠共识机制保证存储的一致性,而传统分布式存储一般是通过中心节点往其他备份节点同步数据。

  没有任何一个节点可以单独记录账本数据,从而避免了单一记账人被控制或者被贿赂而记假账的可能性。也由于记账节点足够多,理论上讲除非所有的节点被破坏,否则账目就不会丢失,从而保证了账目数据的安全性。

  存储在区块链上的交易信息是公开的,但是账户身份信息是高度加密的,只有在数据拥有者授权的情况下才能访问到,从而保证了数据的安全和个人的隐私。

  区块链提出了四种不同的共识机制,适用于不同的应用场景,在效率和安全性之间取得平衡。

  基于以上特点,这种数据存储技术是可以完美防止数据被篡改的可能性,在现实中也可以运用到很多领域之中,比我们的电子存证技术在电子合同签署上提供了更安全可靠的保证。

  Ⅷ 什么是区块链挖矿是做什么详细介绍区块链和虚拟货币

  在比特币刚发行的时候人们发现了,它去中心化,不受任何中心管制;它完全开放,除了交易信息加密之外整个系统信息高度透明,技术都是开源的;安全性,只要不能控制全部节点的%51,就无法肆意修改数据,这使得它相对安全;独立性,整个模式和比特币不依赖任何第三方,所有节点都在系统内验证、交换数据,不受任何干预

  我们这里详细解释什么是区块链技术,说白了就是区块+链,那什么是 “区块” ?什么又是 “链” 呢?

  区块就是一个账本交易记账由分布在不同地方的多个节点共同完成,而且每一个节点记录的是完整的账目,因此它们都可以参与监督交易合法性,同时也可以共同为其作证

  每一个区块包含了前一个区块的加密散列、相应时间戳记以及交易资料(通常用默克尔树(Merkle tree)算法计算的散列值表示),这样的设计使得区块内容具有难以篡改的特性。用区块链技术所串接的分布式账本能让两方有效记录交易,且可永久查验此交易。

   哈希函数h()的作用:将任意长度的字符串,转换成固定长度(例如256位)的输出。输出也被称为 哈希值 ,这个输出不可逆

  很难找到两个不同的x和y,使得h(x) = h(y),也就是说两个不同的输入,会有不同的输出。理论上说两个不同的输入可能会有不同的输出,但这几乎不可能,比方说一个无限的空间映射到一个有限的空间,肯定存在多对一的情况,理论存在,但没有任何规律,保证你无法通过数学上的任何推断来找到这个结果,为什么这里是256位呢?不是更长的呢?因为256位已经足够安全。

  将账本拆分成块,比如一个本子的一张纸就是一个区块,每个区块记录一段时间内的交易,列如10分钟

  我们把每张纸比作一个一个 区块 ,在每个区块的上面增加一部分内容我们把它叫做 区块头 ,其中记录父区块的哈希值,通过每个区块储存父区块的哈希值,将所有区块按顺利连接起来,形成区块链

  把 1区块 的哈希值记录到 2区块 的区块头上,如此操作每个区块的区块头都记录父区块的哈希值,每个区块都按照顺序链接起来了,这就叫做区块链。第一个区块没有区块头,又被称之为创世区块

  区块链是一个账本,在账本上只有发生了交易你的账户上的钱才会变多和变少,需要进行交易那么首先需要一个账号和密码,就像你的银行卡有账号和密码别人就可以对你进行一个转账,在区块账本上这个账号密码就是公钥和私钥

  老王(已有私钥,公钥),想转给张10个BTC,需要一些操作

  证明是老王本人发出转账 签名函数Sign (老王的私钥 + 转账信息:老王转给张三10 BTC)=本次专账签名

  验证是老王本人发出转账 验证函数Verify (老王的地址 + 转账详细:老王转给张三10 BTC + 本次转账签名)=true

  一旦转账记录到区块从此谁也不能改变它,张三增加10 BTC,老王则相应减少10 BTC,整个操作都是自动的,比如你的钱包app它会帮你去做这样的事情,app知道你的私钥,你告诉钱包交易内容,钱包签名向全网公布,等待其他人来验证这笔交易

  中心化记账效率会更高,银行、政府或者支付宝帮你记账,都很可靠,因为他们都无法动你的钱,除非它们有你的私钥

  中心化记账存在一些缺点

  去中心化人人都可以记账,每个人可以保留一个完整的账本。任何人都可以下载开源程序,参与比特币的p2p网络,监听来自全世界发送的交易,成为记账节点,参与记账,假设小逸发布了一笔交易向全网广播,A记账节点监听到了这笔交易,A验证了这笔交易位true之后放入交易池继续向其它节点传播,因为是网络传播,同一时间不同记账节点的交易池不一定相同,每10分钟,从所有记账节点当中,按照某个方式抽取一名,验证这个节点的交易为true之后,之后将这个选中的节点交易池中的交易记录与自己(A)节点的交易池中的交易记录对比一下,对比完之后会将自己交易池中已经被选中记账节点记录的交易删掉,别的不动继续记账等待下一次被选中,每隔10分钟就是一个循环,这个10分钟所有记账节点正常记账,10分钟之后再选出一个节点把它交易池当中的交易作为一个新的区块,这个区块来自所有记账节点中我任意选择的一个记账节点的交易池,如此不断循环往复

  交易并不是被记录就完成,只有当这笔交易变成了某一个区块,这笔交易才算是真正的完成。这就是去中心化的一个记账的完整的流程,你的交易并不会第一时间被记录,因为p2p网络传播需要时间,如果被选中区块的节点还没有接受到你的交易,交易就没有完成。每10分钟产生一个区块,但不是所有在10分钟内的交易都能记录。10分钟只是一个平均值

  去中心化记账的特点,有记账权的记账节点,每十分钟被选中的节点它会获得50BTC奖励,每21万个区块差不多4年,奖励减半,比特币自发行已经两次减半,那么每十分钟产生一个新的区块这个记账节点得到的奖励是10.5BTC,每隔4年减半那么可以算出BTC的总量大约为2100万枚,预计2040年开采完,记录一个区块的奖励也是比特币唯一的发行方式,当BTC开采完之后,记账节点可以获得的收益就只有交易的手续费了

  记账节点通过题目来争夺记账权,

  找到某位随机数使得等式不成立

   SHA256哈希函数 (随机数 + 父区块哈希值 + 交易池中的交易) 某一指定值)

  从0开始遍历随机数碰运气之外,没有其它解法,解题的过程,又叫做 挖矿 ,所以解这个题目的记账节点又被称之为 矿工 ,你遍历随机数越快你拿到这个记账权的可能性就越大,这个遍历速度就被矿老板们称之为 算力 ,为了得到这个算力,矿老板们就会购买更多且更高算力的矿机

  谁先解对,谁就得到记账权。A记账节点率先找到解,即向全网公布,其他节点验证无误之后,A节点就获得了这个区块,获得12.5个BTC的收益,在新区块之后重新开始新一轮计算。这个方式被称之为(POW)分配记账权

  一般大约10分钟解出这个随机数,10并不绝对,因为解开这个题目的过程本就是个碰运气的过程,未来应对算力的变化,比特币每隔2016个区块,大约两周,会加大或减小难度,使得平均产生区块的时间是十分钟

  每一个区块包含了前一个区块的加密散列、相应时间戳记以及交易资料(通常用默克尔树(Merkle tree)算法计算的散列值表示),这样的设计使得区块内容具有难以篡改的特性。用区块链技术所串接的分布式账本能让两方有效记录交易,且可永久查验此交易。

  和传统存储的数据不同的是,区块链每个节点都按照块链式结构存储完整的数据,区块链每个节点存储都是独立的、地位等同的,依靠共识机制保证存储的一致性,而传统分布式存储一般是通过中心节点往其他备份节点同步数据。

  麻将作为中国传统的区块链项目,四个矿工一组,先碰撞出13个数字正确哈希值的矿工可以获得记账权并得到奖励。

  很多人讲区块链是骗局比特币是骗局,这也许是个骗局,但是这个技术已经被广泛地承认和应用,区块链涉及的密码学知识一般人再借几个脑子给你你也搞不懂,在一个相对理性的角度看待问题最重要,千万别听风就是雨。

  这门技术有着不可思议的地方 在一个没有中心没有监管的情况下保持着绝对的秩序 这个只需由大家的共识建立的信任,比特币创造了这个共识,在区块链的世界里每个人都是公平平等的。

  Ⅸ 区块链网络中的节点包括

  区块链网络中的节点包括手机、矿机和服务器等等。

  节点指的是区块链网络中的计算机,由大量个人或者家庭用户参与的区块链,每个个人或者家庭都是区块链的节点。

  区块链是由一个个小区块组成,形成一个区块节点的每个人互不相识,但彼此之间却相互信任,因为他们也有一个共同的目的,就是都想获得机制的奖励。

免责声明:中金网发布此信息目的在于传播更多信息,与本网站立场无关。中金网不保证该信息的准确性、真实性、完整性、有效性等。相关信息并未经过本网站证实,不构成任何投资建议,据此操作,风险自担。