主页 > 下载imtoken钱包官方 > 区块链原理

区块链原理

下载imtoken钱包官方 2024-01-26 05:15:02

数据存储:什么是分布式记账竞争记账? 它是比特币系统的记账方式,解决了去中心化记账系统中如何保证比特币系统账本一致性的问题。 说明:在比特币网络中,全网矿工参与算力竞争。 算力高的矿工算力越强,获得记账权的可能性就越大。 成功夺取记账权的矿工负责记账,并将账本信息同步至全网。 作为回报,矿工将获得系统新生成的比特币 1 作为奖励。

数据存储:什么是分布式记账竞争记账?

它是比特币系统的记账方式,解决了去中心化记账系统中如何保证比特币系统账本一致性的问题。

说明:在比特币网络中,全网矿工参与算力竞争。 算力高的矿工算力越强,获得记账权的可能性就越大。 成功夺取记账权的矿工负责记账,并将账本信息同步至全网。 作为回报,矿工将获得系统新生成的比特币 1 作为奖励。

分布式账本定义

分布式账本技术是分布在多个计算机节点上的数据库。 每个节点都可以复制保存一个账本,每台电脑都可以独立更新。 其特点是账本不由任何中央机构维护,而是由各个计算机节点独立构建和记录。 在对新账本(也称为共识机制)进行投票后,一旦达成共识,分布式账本就会自行更新。

优势

在区块链中,系统中的每个人都有记账的机会。 系统会在这期间评出最快最好的记账员,将他们的记录写入账本,发送给系统。 系统中的其他人进行备份,以便系统中的每个人都有一个完整的分类帐。 篡改者需要同时修改上述文章中一半的系统节点数据,才能真正篡改数据。 这种篡改成本非常高,几乎不可能。

公链记账:什么是挖矿和奖励挖矿

挖矿是比特币系统在一段时间内确认比特币系统中发生的交易,并在区块链上记录新区块形成的过程。 简单来说,挖矿就是记账的过程。 矿工通过奖励新的比特币来鼓励矿工挖矿,所以挖矿就是产生比特币的过程。

比特币是如何开采的

每10分钟的比特币交易费,全网一起算一道算术题。 先算出答案的人就相当于挖了这个区块,矿工可以获得新产生的比特币。 随着比特币价值的增加,开采它的人数增加,开采难度呈指数级增长。 大家开始使用矿机挖矿,但是比特币的网络算力太大,个人很难购买矿机挖矿。 这么多矿工加入矿池一起挖矿。 矿场负责算力,矿池负责信息打包,矿池挖矿后按照矿场算力比例分配收益比特币。

交易支付:代币比特币和

比特币转账可以一次性转多个地址的余额,也可以一次性转多个地址(后者需要通知矿工,否则剩余的比特币可能会向矿工收费)

事务生命周期

1.有人提出要求

2.广播交易到p2p网络

3. 矿工验证交易的正确性

4. 多个交易组成一个区块

5. 新区块加入现有区块链

6.交易完成

系统奖励:交易币基础比特币和Q币

比特币是一种没有发行人的去中心化数字资产。 Q币是腾讯发行的一种类似于电子积分的电子货币。 它实际上不是一种货币。 Q币获得腾讯信用背书认可。 Q币的价值完全取决于人们对腾讯的信任。

交易币库

交易信息的前几个字节表示区块中包含的交易数量。 交易数量的类型是一个压缩大小的变长整数,每个区块的第一笔交易被指定为一笔交易。

多次更改交易输入格式,高度为1之前跟随的区块版本号。

可追溯性基础知识:什么是树

顾名思义,Tree是一棵存储哈希值的树。 树的叶子是数据块的哈希值,非叶子节点是它们对应的子节点的哈希值。

树结构散列

散列是将任意长度的数据映射到固定长度的数据的函数。 例如,对于数据的完整性验证,最简单的方法是对整个数据进行Hash运算,得到一个固定长度的Hash值,然后将得到的Hash值发布到互联网上,这样用户下载数据后,哈希将再次执行数据。 操作。 ,将比较运算的结果与网上公布的Hash值进行比较。 如果两个Hash值相等,说明下载的数据没有损坏。 而且,很难根据哈希值推断出原始数据的特征。

哈希表

当数据在对等网络中传输时,数据同时从多台机器下载,许多机器可以被认为是不稳定或不可信的。 要验证数据完整性,更好的方法是将大文件拆分为更小的块。 这样做的好处是,如果一小块数据在传输过程中损坏,您只需重新下载这块快速数据,而不用重新下载整个文件。 那么我们如何判断一小块数据是否损坏呢?

下载数据时,我们会先从可信来源获取正确的根Hash,然后将每一小块数据的Hash值拼在一起,再对这一长串做一个Hash,与根Hash进行比较。

我们从叶子节点开始,将最底层的两个相邻哈希合并为一个,进行一次哈希运算得到一个子哈希,逐层向上推。 如果一层是单一的,则缺少一层。 这个疏漏直接hash,最后形成一棵倒树。 在树的根部,将有一个名为 Root 的根散列。

在 p2p 网络中在线下载之前,从可信来源获取文件的根目录。 一旦扎根,它就可以从其他不受信任的来源获得。 受信任的根收到的支票。 如果它损坏或伪造,请从其他来源获取另一个,直到您获得与受信任的根匹配的一个。

和之间的主要区别

树的一个分支可以直接下载并立即验证,因为文件可以分解成小的数据块,这样如果一个数据损坏,只需要重新下载数据块,一个分支可以一次下载时间,分支机构可以立即验证。 可以下载数据。 并且只下载整个来验证。

树应用

1、数字签名的初衷是为了高效地处理-。 每条消息只能用于签署一条消息,但组合可以签署多条消息。 这种方法成为数字签名的有效框架,例如。

2. P2P网络 在P2P网络中,用于保证从其他节点接收到的数据块不被损坏或替换,甚至检查其他节点不会作弊或发布假块。

3、比特币树最早的应用是比特币,由中本聪在2009年描述和创建,用于存储每个区块的交易。

树和区块链分布式记账的问题

区块链是一种实现无中心分布式账本的技术。 账本技术的基本单位是“交易”。 整个账本由交易组成。 一个“区块”类似于账本中的一页,每一页记录若干个完整的账本,通过按时间顺序绑定账户的页面,形成一个完整的账本——“区块链”。 “区块”是交易的容器,“区块”通过密码学算法连接起来,形成时间序列上的“链”。

优势:

%title插图%num

数据很容易保持完整和加密安全。

缺点:

对于比特币系统来说,这不是什么大问题,因为到目前为止,比特币仍然是每10分钟出块一次,每个块1MB,即使再过100年,数据总量也不会大到单机不能处理它。 但对于一些企业级的区块链系统,情况就完全不同了。 每个区块可以很大,生成区块的速度会很快,数据量也会变得很大。

如何解决数据量过大的问题

在传统的数据系统中,也存在同样的情况。 一般的处理方法是将历史交易数据移动到其他专门的存储设备中,主机数据库保存账户的最新状态和最近一段时间的交易记录。 但是,在区块链系统中,尤其是在使用UTXO存储交易的区块链系统中,交易过程是被保留的,即如果一个账户没有交易,则不会出现在最新的区块中。 那么,按照传统数据库删除历史数据的方式,只要一个区块中有交易,没有后续交易,就不会有人使用这个交易账户,而是为了维护整个区块的密码学完整性和安全性链系统,这个必须要保留。 阻塞,

事实上,中本聪已经保留了一个最优解:tree()算法。

框图如下:

1、每个区块中的hash1是区块中所有交易的哈希值。 但是这个哈希值并不是通过把所有的交易串接成一个长串来计算出来的,而是通过tree()算法来计算这个哈希值的,我们称之为根。 (伟大的!)

2、这里的树算法并不是直接计算整个字符串的hash值,而是对每笔交易计算一个hash值,然后通过pairwise connection再次计算hash比特币生成原理,直到到达最顶端的root。 tree()算法最大的优点是可以直接删除每笔交易,只保留交易的哈希值。 这样,对于整个区块来说,其密码学的安全性和完整性没有改变,但数据量却可以大大减少。 (哈希值是32字节,一笔交易一般需要400多字节)。

区块链如何使用树来验证交易真实性

既然区块链采用了树状数据结构,那么我们如何才能快速找到交易并验证交易的真实性呢?

那么有人会说,每一笔交易都是通过hash计算出来的,直接保存所有数据。 是否容易验证一笔交易是否存在?

但是,由于中本聪在比特币发明之初就采用了轻钱包设计,简称SPV。

特征:

轻钱包不存储完整的区块链,只存储每个区块的区块头。 区块存储完整的交易信息,交易信息所需的存储量大多是上述交易头的千倍。 因此,如果只保存交易头,则可以大大减少本地客户端存储的区块链信息。

但是问题来了,没有交易信息可以验证怎么办?

这时,区块头就派上用场了。

在描述如何验证轻钱包时,重要的是首先要了解如何在其内部进行验证。

我们知道父子节点之间的操作关系。 因此,当我们要证明这棵树中有叶子节点时,只需要获取从叶子节点到根节点的运算过程中所需要的哈希值即可。 所有叶子节点都需要参与计算。

你可能会觉得有点奇怪,为什么不直接把所有的叶子节点都告诉它,你可以用所有的叶子节点来计算它,验证就通过了。 但事实是,由于每个父节点的哈希必须通过两个子节点的哈希运算得到比特币生成原理,所以我们只需要选择所有参与运算的节点就可以证明叶子节点存在于树中。 这减少了散列操作的数量。 而这些选中的节点,以及它们之间的层级关系,就是验证路径,也就是上图中方框下面的所有方框。

比特币网络中的交易只有在记录在区块链上并由 6 人确认后才被认为是真实的。 那么对于SPV轻钱包来说,如何知道一笔交易是否真实呢?

SPV在拿到一笔交易信息后(比如收到一笔钱),无法确认这笔交易是否合法,因此必须对交易的输入进行验证。 但是,它只捕获单笔交易的信息,并没有完整的本地区块链数据。 因此,对于比特币交易手续费,SPV 需要携带本次交易的信息向网络发送查询请求,并被调用。 当其他拥有完整区块链数据的客户端收到此请求时,会使用传递过来的交易信息在自己的区块链数据库中进行查询,并将验证路径返回给请求源。 SPV得到验证路径后,会再做一次验证。 确认无误后,交易才算可信。

根据上述文章的验证过程,会出现以下问题:

如何检查来自区块链的交易?

如何获取验证路径?

如何保证网络返回的验证路径不是伪造的?

如何检查来自区块链的交易?

区块链的数据结构是离散的。 比特币中的块存储在文件中。 要获取交易的验证路径,首先要获取交易所在的区块链。 这是一个复制查找过程,可能需要遍历所有块才能找到它们。

解决办法是:

1.修改每个block的数据结构为关系型数据库。 通过关系数据库,可以用SQL语句快速查询。 然而,遍历和查询所有区块链是一种浪费。

2.利用交易的时间戳快速定位区块位置,在附近的几个区块中快速查找

如何获取验证路径?

事实上,验证路径生成的前提是一棵完整的树已经存在。 市面上有很多树的实现包,有的包直接提供了获取叶子节点验证路径的方法。

客户端收到后,会执行以下步骤:

① 通过上述方法找到包含交易的区块

② 检查该区块是否在全网最长链中

③ 取出所有交易生成,使用方法获取交易的验证路径

④ 将验证路径回传给请求源

如何保证网络返回的验证路径不是伪造的?

SPV 收到响应后,会验证检索到的内容。 验证步骤如下:

1. 同步区块链,保证全网最长网络

2.先拿到,在区块链中搜索,确保在链上

3、用得到的验证路径再进行一次验证,保证所有的验证路径都是合法的

参考:

智联科技区块链教育。