区块链原理说明
数据存储:什么是分布式记账竞争记账?
是比特币系统的记账方式,解决了去中心化记账系统中如何保证比特币系统账簿一致性的问题。
说明:在比特币网络中,全网矿工参与算力竞赛。算力高的矿工算力越强,获得记账权的可能性越大。成功抢占记账权的矿工负责记账,并将账本信息同步到全网,作为回报,矿工将获得系统新生成的比特币1作为奖励。
分布式账本定义
分布式账本技术是一种分布在多个计算机节点上的数据库,每个节点可以复制和保存一个账本,每台计算机可以独立更新。其特点是账本不由任何中央机构维护,而是由每个计算机节点独立构建和记录。在对新账本(也称为共识机制)进行投票后,一旦达成共识,分布式账本就会自行更新。
优势
在区块链中,系统中的每个人都有机会记账。系统会判断在此期间记账最快最好的人,将他们的记录内容写入账本,并发送给系统。系统中的其他人进行备份,使系统中的每个人都有一个完整的账本。篡改者需要同时修改一半以上的系统节点数据,才能真正篡改数据。这种篡改的成本非常高,几乎不可能。
公链记账:什么是挖矿和奖励挖矿
挖矿是在比特币系统中确认比特币系统中发生的交易一段时间,并记录在区块链上形成新区块的过程。简单来说,挖矿就是记账的过程。矿工通过奖励新生比特币来激励矿工挖矿,所以挖矿就是生成比特币的过程。
比特币如何挖矿
每 10 分钟比特币 交易费用,全网一起计算一道算术题。先算出答案的人相当于挖了这个块,矿工就可以得到新生成的比特币。随着比特币的价值增加,挖矿人数增加,挖矿难度成倍增加。大家开始用矿机挖矿,但是比特币的网络算力太大,个人购买矿机也很难挖矿。这么多矿工加入矿池一起挖矿。矿场负责计算,矿池负责信息打包,矿池根据挖矿后矿场算力的比例分配收益比特币。
交易支付:Token 比特币 and
比特币转账可以一次转账多个地址的余额,也可以一次转账到多个地址(后者需要通知矿工,否则剩余的比特币可能会向矿工收取费用)
事务的生命周期
1.有人提出要求
2. 向 p2p 网络广播交易
3.矿工验证交易的正确性
4.多个交易形成一个块
5. 新区块被添加到现有区块链中
6.交易完成
系统奖励:交易币基地比特币和Q币
比特币 是一种去中心化的数字资产,没有发行人。Q币是腾讯发行的一种电子货币,类似于电子积分。它实际上不是一种货币。Q币因腾讯信用背书而获得认可。Q币的价值完全取决于人们对腾讯的信任。
交易币基地
交易信息的前几个字节表示块中包含的交易数量。交易数量的类型是一个压缩大小的变长整数,每个区块的第一个交易被指定为一个交易。
的交易输入格式多次更改,高度为1之前遵从的区块版本号。
可追溯性的基础知识:什么是树
顾名思义,Tree 是一棵存储散列值的树。树的叶子是数据块的哈希值,非叶子节点是其对应子节点的哈希值。
树结构哈希
哈希是将任意长度的数据映射为固定长度的数据的函数。例如,对于数据完整性验证,最简单的方法是对整个数据进行Hash运算,得到一个固定长度的Hash值,然后将得到的Hash值发布到互联网上,这样用户下载数据后,Hash再次对数据执行操作。, 将比较运算的结果与网上公布的Hash值进行比较。如果两个Hash值相等,说明下载的数据没有损坏。而且,很难根据哈希值推断出原始数据的特征。
哈希表
当数据在点对点网络中传输时,数据会同时从多台机器下载,很多机器可以被认为是不稳定或不可信的。为了验证数据的完整性,更好的方法是将大文件拆分成小数据块。这样做的好处是,如果一小部分数据在传输过程中损坏,只需重新下载这个快速数据,而不是重新下载整个文件。那么我们如何确定小块数据是否已损坏?
在下载数据的时候,我们会先从一个可信的来源得到正确的根Hash,然后把每一小块数据的Hash值放在一起,然后对这个长串做一个Hash,和根Hash对比。
树
从叶子节点开始,我们将底层相邻的两个哈希合并为一个,并进行哈希运算得到子哈希,并逐层向上推。如果一层是单一的,就会缺少一层。这个遗漏直接hash,最后形成了一个倒挂的树。在树的根部,会有一个根哈希,称为 Root。
在 p2p 网络中下载网络之前,从受信任的来源获取文件的根目录。一旦获得根,就可以从其他不可信的来源获得。受信任的根收到的支票。如果它已损坏或伪造,请从其他来源获取另一个,直到您获得与受信任的树根匹配的一个。
和之间的主要区别
树的一个分支可以直接下载并立即验证,因为文件可以分成小数据块,这样如果一个数据损坏,只需重新下载数据块,一次可以下载一个分支,然后立即验证分支,如果分支验证通过后,就可以下载数据了。并且只下载整个来验证。
树应用
1.数字签名的初衷是高效处理-。每个消息只能用于签署一条消息,但组合可以签署多条消息。这种方法成为一种有效的数字签名框架,例如。
2. P2P网络 在P2P网络中,用于保证从其他节点接收到的数据块不被损坏、不被替换,甚至检查其他节点不会作弊或发布假块。
3. 比特币树最早的应用是比特币,由中本聪在2009年描述和创建,用于存储每个区块的交易。
树和区块链分布式记账存在的问题
区块链是一种实现无中心分布式总账的技术。总账技术的基本单位是“交易”。整个账本由交易组成。一个‘区块’类似于账本中的一个页面,每一页记录了若干个完整的账本,通过按时间顺序绑定账户的页面而形成一个完整的账本——‘区块链’。‘区块’是交易的容器,‘区块’通过密码算法连接起来,按照时间序列形成‘链’。
优势:
数据很容易保持完整并且是加密安全的。
缺点:
对于比特币系统来说,这不是什么大问题,因为到目前为止,比特币还是每10分钟出块,每块1MB,即使100年后,总数据量也不会大到单台机器无法处理。但对于一些企业级的区块链系统,情况就完全不同了。每个块可能非常大,生成块的速度会非常快,数据量也会变得非常大。
如何解决数据量过大的问题
在传统的数据系统中,同样存在这种情况。一般的处理方式是将历史交易数据移动到其他专门的存储设备上,主机数据库保存账户的最新状态和最近一段时间的交易记录。但是,在区块链系统中,特别是在使用UTXO存储交易的区块链系统中,交易的过程是被保存下来的,即如果一个账户没有交易,它就不会出现在最新的区块中。那么按照传统数据库中删除历史数据的方式,只要一个区块有交易,没有后续交易,就没有人使用这个交易账户,而是为了维护整个区块的密码学完整性和安全性区块链系统,这个必须保留。堵塞,
事实上,中本聪已经预留了一个最优解: tree() 算法。
框图如下:
1、每个区块中的Hash1是该区块中所有交易的哈希值。但是这个hash值并不是通过将所有的交易串联成一个长字符串来计算的,而是使用 tree()算法计算得到这个HASH值,我们称之为根。(伟大的!)
2.这里的树算法不是直接计算整个字符串的hash值,而是对每笔交易计算一个hash值,然后通过成对连接的方式再次计算hash,直到最顶层的根。 tree() 算法最大的优点是可以直接删除每笔交易,只保留该笔交易的哈希值。这样,对于整个区块来说,其密码安全性和完整性并没有改变,但数据量可以大大减少。(哈希值为32字节,一笔交易一般需要400多字节)。
区块链如何使用树来验证交易真实性
既然区块链采用了树的数据结构,我们如何快速找到交易并验证交易的真实性呢?
那么有人会说,每笔交易都是通过hash计算的,直接把所有数据都保存下来,验证一笔交易是否存在是不是很容易呢?
但是,由于中本聪在比特币发明之初就有轻钱包设计,简称SPV。
特征:
轻钱包不存储完整的区块链,只存储每个区块的区块头。块体存储完整的交易信息,交易信息所需的存储量大部分是交易头的千倍以上。因此,如果只保存交易头,可以大大减少本地客户端存储的区块链信息。
但是问题来了,如果没有交易信息需要验证怎么办?
这时,区块头开始发挥作用。
在描述如何验证轻钱包时,首先要了解如何在里面进行验证。
我们知道父节点和子节点之间的操作关系。因此,当我们要证明这棵树中存在一个叶子节点时,我们只需要获取从叶子节点到根节点的操作过程中需要的哈希值即可。所有叶子节点都需要参与计算。
你可能觉得有点奇怪,为什么不直接告诉它所有的叶子节点,你可以用所有的叶子节点计算它,验证通过。但事实是,因为每个父节点的hash必须通过两个子节点的hash运算得到,所以我们只需要选择所有参与运算的节点就可以证明叶子节点存在于树中。这减少了散列操作的数量。而这些被选中的节点,以及它们之间的层级关系,就是验证路径,也就是上图中方框下方的所有方框。
比特币网络中的交易只有被记录在区块链上并经过6人的确认才被认为是真实的。那么对于SPV轻钱包,如何知道一笔交易是否真实呢?
SPV 拿到一笔交易信息(比如收到一笔钱)后,无法确认该笔交易是否合法,因此必须验证该笔交易的输入。但是,它只获取单个交易的信息,并没有完整的本地区块链数据。因此比特币 交易费用,SPV 需要带着本次交易的信息向网络发起查询请求,被调用。当其他拥有完整区块链数据的客户端收到此请求时,会使用传递的交易信息在自己的区块链数据库中进行查询,并将验证路径返回给请求源。SPV拿到验证路径后,再做一次验证,确认无误后,认为交易可信。
根据以上验证过程,会出现以下问题:
如何检查来自区块链的交易?
如何获取验证路径?
如何保证网络上返回的验证路径不被伪造?
如何检查来自区块链的交易?
区块链的数据结构是离散的。比特币 中的块存储在文件中。要获得一笔交易的验证路径,必须先获得交易所在的区块链。这是一个复制查询过程,可能需要遍历所有块才能找到它们。
解决方案是:
1.将每个block的数据结构修改为关系型数据库。通过关系型数据库,可以用sql语句快速查询。但是,遍历和查询所有区块链是很浪费的。
2.利用交易的时间戳快速定位区块位置,在附近的几个区块中快速找到
如何获取验证路径?
事实上,验证路径生成的前提是已经存在一棵完整的树。市面上的树实现包很多,有的包直接给出了获取叶子节点验证路径的方法。
客户端收到后,将执行以下步骤:
① 通过上述方法找到包含该交易的区块
② 检查该区块是否在全网最长链中
③ 取出所有交易生成,使用方法获取交易的验证路径
④ 将验证路径发回请求源
如何保证网络上返回的验证路径不被伪造?
SPV得到响应后,对检索到的内容进行验证,验证步骤如下:
1. 同步区块链,保证全网最长
2.首先拿到它,在区块链中搜索,确保它在链上
3、使用获取到的验证路径再进行一次验证,确保验证路径全部合法
参考:
智联科技区块链教育。
本文由链应用发布,不代表链应用立场,转载联系作者并注明出处:https://www.xiangboz.cn/hangqing/5681.html