IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 【区块链】比特币的是如何工作的 -> 正文阅读

[区块链]【区块链】比特币的是如何工作的

最近在学习区块链相关的内容。目前还是处于比较初级的阶段,仅粗浅地了解了一些虚拟货币的工作原理,准备先写两篇总结一下。这篇主要介绍比特币的工作原理。后面还会写一篇以太坊相关的。

  • 图片都来自比特币白皮书,但是里面的图片感觉有些问题。后面看代码确认后再自己画下。

提起区块链,可能大部分人第一想到的都是比特币。比特币也确实是过去几年最火的区块链产品之一(不知道之一能不能去掉),所以我的学习也是从比特币开始的,这有助于快速地建立认知。在本文中,首先我们会简要介绍一下比特币的金融原理,即其如何作为虚拟币;然后会重点介绍技术方面的内容,包括如何实现不可篡改、共识协议等。

不可篡改的账本

日常生活我们使用的法币像人民币美元等都是纸币,其本身不具备价值,不能作为一般等价物,所以并不是严格意义上的货币。纸币本质是市场活动的参与者共同认可的一种约定的价值符号,这种共识的达成是基于政府的信用背书。
那么纸币是如何工作的呢?纸币本质是银行发行的负债,更通俗的解释就是银行给你的一张欠条。纸币的金额就代表着具体的数值。纸币能够流通在于大家都信任银行,所以可以通过转让银行债务的方式来购买商品。那既然纸币的底层逻辑是基于账务,那么账本的稳定性就很重要。只有账本不能被随便篡改,我们才能对其建立足够的信任。在纸币的体系中,账本是由银行维护的。基于日常经验,银行还是足够可靠的,比如我们的存款数额不会发生变动,这代表着账本的一定程度得稳定性。但是这并不代表着账本是完全不可更改的。最常见的方式就是银行增加货币的发行量,通过增大账本上的账务总量来稀释每一笔账务的价值,也就是我们常说的通货膨胀。
那么比特币是如何解决类似的问题的呢?作为一个虚拟货币,比特币同样是基于账务的。其采用区块链作为账本,利用区块链不可篡改的特性保证账本的稳定性。同时,比特币的可以预见的总量是固定的,在2100w左右。并且区块链本身具备去中心化的特性,其结果是所有节点所达成的共识,可以避免类似中心化的银行发布大量货币的行为。

比特币的数据结构

区块链是由区块组成的链表。每一个区块由block header和block body组成。区块和区块之间通过哈希指针进行连接。通常的数据结构中header都是带有一些元数据,body中带有具体的数据。区块链中也是如此。block header中含有版本号、指向父区块的哈希指针、merkle tree的root哈希值、用来挖矿的随机数nounce等字段;block body是以merkle tree的形式组织的交易数据。其示意图如下。

哈希指针

指针是我们所耳熟能详的对象。指针指向内存中的某个对象,指针的值为该对象的内存地址。通过指针我们能找到对应的对象。
哈希指针在除了能帮助我们寻址外,还附加了对象的哈希值。这里的哈希值起到的是数字签名的作用,即检验对应的对象是否被更改。所以哈希指针起到的是指向+防篡改的作用。

这里需要注意的一点是,指针的指向其实是通过内存地址实现的,但是同一对象在不同计算机后其内存地址是不同的。而区块链天然的具备分布式的特性,所以哈希指针的“指向”是结合KV型存储实现的。即K为对象哈希值,V为实际对象。

Merkle tree

比特币中的交易数据在block body中,以Merkle tree的形式进行组织。Merkle tree的结构如图所示(图片来自比特币白皮书,但似乎画的有点问题,有时间去看下代码确认具体的结构然后自己画下图),其和二叉树类似,只不过使用哈希指针代替了普通的指针。Merkle tree的根节点的哈希值会写入block header中,起到同样是数字签名的作用,防止数据被篡改。

Merkle tree除了能防止交易数据被篡改外,另外一个很重要的作用就是提供merkle proof。在说merkle proof前先大概介绍下背景。比特币中节点分为全节点和轻节点两种,全节点保存区块的完整数据,而轻节点只保存block header。对于全节点来说验证某个交易是否写入区块链是很简单的,只需要在对应的Merkle tree中查找交易是否存在即可;那么轻节点如何查验证某个交易是否写入区块链中呢?这个时间就需要merkle proof。其示意图如下。

假设A要向B证明交易tx被写入到区块链中,那么A需要发送交易tx的内容以及该交易在Merkle tree中的路径上的哈希值给B。例如,在上图中交易3的路径为哈希2和哈希01。B拿到交易3后,以哈希3和哈希2算出哈希23,再以哈希23和哈希01算出根哈希值。B以计算出的根哈希值和其本地持有的根哈希值比对。由于哈希函数的collision resistance特性可知merkle proof是不可能被伪造的。

POW共识

上面讲了一些比特币中的数据结构,能够防止区块链中的数据被篡改。但是在分布式系统中还有另外一个问题至关重要,即节点之间如何达成共识,具体到比特币中就是谁能够获得记账权呢。
在一些常见的共识算法中,比如我们耳熟能详的paxos、raft等,都会采用投票的方式来达成共识。投票确实是一种主流的共识机制,但是投票机制的前提是必须要解决membership的问题。在类似比特币的公链中,是面对全网公开的,membership很难确定。所以比特币设计了基于算力的投票机制,即proof of work。
上文中我们提到过block header中含有哪些字段。在某个矿工确认了最新的区块中要打包的交易后,block header中的字段的字段其实基本就确定了,除了随机数nounce值。pow机制就是让矿工不断尝试不同的nouce值,以使整个block header的哈希值小于target。由于哈希函数的特性我们可以知道,这个过程是完全没有规律可循的,只能不断地尝试不同的数值。谁的算力更强谁就更可能得到记账权。所以比特币也被称之为使用算力投票。

比特币中的交易

这部分内容会介绍下比特币中如何确认一个交易的有效性。

—ing

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2022-05-10 11:57:58  更:2022-05-10 11:58:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:14:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码