主页 > imtoken最新版本 > 第一节 区块链技术学习基础

第一节 区块链技术学习基础

imtoken最新版本 2024-01-25 05:09:22

区块链起源于比特币。 2008年11月,中本聪发表《比特币:一种点对点电子现金系统》,阐述了基于P2P网络技术、加密技术、时间戳技术、区块链技术等的电子现金系统的架构概念。比特币的诞生。 两个月后,比特币程序完成,自组织网络开始使用。 2009年1月3日,第一个序号为0的比特币创世区块诞生,2009年1月9日,序号为1的区块出现,并与序号为0的创世区块相连形成一条链,标志着区块链的诞生。 比特币发展缓慢,但近年来,作为比特币底层技术之一的区块链技术越来越受到关注。

区块链更多的可以看作是现有技术的应用,而不是简单的提出一种技术。 因此,在系统学习区块链技术之前,让我们先了解一下区块链都使用了哪些技术。

加密散列

在比特币技术中,使用了密码学中的两个函数。 第一个功能是散列。

首先,简单介绍一下散列。 比特币使用的哈希具有三个属性:

抗碰撞性(collision resistance):即对于某个哈希函数H(·),输入x和输入y,若x≠y,则存在H(x)≠H(y)hidding(单向不可逆):也就是说,假设有一个哈希函数H(·),给定一个输入x,我们可以得到一个哈希输出H(x),但是给定一个哈希输出H(x)和H(·),我们找不到x是什么. 也就是说,H(x) 不会泄露任何关于 x 的信息。 Puzzle friendly:由于hash值是不可预测的,如果想让H(x)落在一定范围内,也没有什么好办法,只能逐一尝试x。 这个特性使得打包区块时需要进行大量的计算(为了使哈希值落在一定范围内)。

比特币使用的哈希函数是 sha-256。 抗碰撞性主要用于保证区块链中每个区块的不可篡改; puzzle friendly 属性主要用于工作量确认。

非对称加密

使用的第二个密码函数是非对称加密。 当每个比特币用户创建一个帐户时,就会创建一个公私密钥对。 当a向b发送信息时,它使用b的公钥对信息进行加密,然后b使用自己的私钥对信息进行解密。 同时,在发布这样一条消息时,A需要使用自己的私钥对消息进行签名,这样网络中的其他节点就可以使用A的公钥来确认消息是否是A发布的。

在第三方中心化系统中,开户依赖于第三方。 但是,在去中心化的比特币系统中,显然不可能“申请一个账户”。 在比特币系统中,账户的申请由用户自己处理,即创建公钥-私钥对。

公钥和私钥的应用保证了“签名”的应用。 在比特币网络中转账时,“签名”可以用来明确转账是从哪个账户进行的,从而防止不法分子从其他账户中窃取比特币。

发布交易时,用自己的私钥签名,其他人可以根据公钥进行验证,从而保证交易是自己发起的。 也就是说,只有有了私钥,才能把账户里的比特币转走。

数据结构散列指针

区块链是将区块连接在一起的链,连接这些区块的是哈希指针。 哈希指针包含两部分数据:

指向信息存储的指针 数据块的哈希值

如下图所示,对于这个节点,白框是区块链的一个区块。 我们可以看到这个节点有两个指针(实际上是一个)比特币第一个区块诞生的时间,其中P是节点的地址,H()是节点的hash值,与节点中的内容有关。 当节点(区块)中的内容发生变化时,哈希值也会发生变化比特币第一个区块诞生的时间,从而保证区块内容不可篡改。

比特币第一个区块诞生的时间_比特币一个区块多少币_目前诞生比特币数量

在比特币中,其最基本的数据结构是由区块组成的区块链。 每个区块根据自己的区块内容生成自己的哈希值。 此外,每个区块(创世区块除外)都存储前一个区块的哈希值。 需要注意的是,本块的哈希生成取决于本块的内容,本块的内容包含了前一个块的哈希值。 这确保了块内容不被篡改。

块状结构

在区块链中,每个区块包含两部分数据:

区块头区块体

每个区块头都包含一个指向前一个区块的指针,还包含一个对前一个区块的区块头进行哈希处理得到的值。

比特币第一个区块诞生的时间_比特币一个区块多少币_目前诞生比特币数量

如果现在要修改第i个区块的信息,会导致这个区块的哈希值发生变化,这就需要第i+1个区块的哈希值发生变化,直到最后一个区块的哈希值发生变化数据发生变化,最终最后一个块的指针中的哈希值与最后一个块的哈希值不匹配。 这使得区块链不可变。

默克尔树

目前诞生比特币数量_比特币第一个区块诞生的时间_比特币一个区块多少币

上图是一个简单的Markle Tree,最下面的节点是交易数据块。 每个交易数据块都有一个哈希值。 将所有叶子节点的哈希值组合起来放到自己的父节点中,然后对得到的一级父节点取哈希,得到n/2个新的哈希值,通过不断迭代,得到根节点在图中可以得到。

实际上,区块头中存储的是根节点的哈希值(再次哈希)。 这种数据结构的好处是你只需要记住Root Hash(根哈希值)就可以检测树的任何部分的修改。 比如绘制的Markle Tree中的节点B发生变化,那么对应的第二层第一个节点中的第二个哈希值也会发生变化,那么根节点中的第一个哈希值也会发生变化,导致根哈希发生变化以及。

根据上一篇文章,我们知道区块链分为header和body。 Body是存储交易的地方,存储形式是Merkle树的形式。 在区块链中,默克尔树的每个叶子节点对应一个交易,除叶子节点外的所有节点都存储指向其左右子节点的哈希指针。 根据默克尔树的性质,只要修改任意一个叶子节点中的交易,根节点的哈希值就会发生变化。

在每个区块头中,除了包含指向前一个区块的指针和对前一个区块头进行哈希处理得到的值外,还包含当前区块体的默克尔树的根哈希。 但不包含具体的交易信息。

所以如果任何交易发生变化-》根节点哈希变化-》区块头保存的根节点哈希变化-》区块头哈希变化。这就要求后一个区块中保存的当前区块的哈希也必须同步变化,即很难做到。

下图是一个完整的比特币区块的信息

比特币第一个区块诞生的时间_比特币一个区块多少币_目前诞生比特币数量