主页 > imtoken支持bcc > 【区块链】比特币的工作原理

【区块链】比特币的工作原理

imtoken支持bcc 2023-01-18 09:41:37

最近学习区块链相关内容。还处于比较初级的阶段,对一些虚拟货币的工作原理我也只是粗浅的了解。我打算写两篇文章来总结一下。本文主要介绍比特币的工作原理。稍后我会写一篇关于以太坊的文章。

说到区块链,大多数人可能首先想到的是比特币。比特币确实是这几年最火的区块链产品之一(不知道能不能下架),所以我的学习也是从比特币开始的,这有助于快速建立认知。在本文中,我们将首先简要介绍比特币的金融原理,即它是如何充当虚拟货币的;然后我们将专注于技术方面,包括如何实现不变性、共识协议等等。

不可变账本

我们日常生活中使用的法定货币,比如人民币、美元,都是纸币,本身没有价值,不能作为一般等价物,所以严格来说不是货币。纸币的本质是市场活动参与者认可的约定价值符号,这种共识是建立在政府信用背书的基础上的。

那么纸币是如何运作的呢?纸币的本质是银行发行的负债。更通俗的解释是银行给你的借条。纸币的数量代表一个特定的价值。纸币可以流通,因为每个人都信任银行,所以可以通过转移银行债务来购买商品。由于纸币的底层逻辑是基于会计的,所以账本的稳定性非常重要。只有当账本不能被随意篡改时,我们才能对其建立足够的信任。在纸币系统中,账本由银行维护。根据日常经验比特币挖矿难度详细数据,银行仍然足够可靠。例如,我们的存款金额不会改变,这代表了账本有一定的稳定性。但这并不意味着账本是完全不可变的。最常见的做法是银行增加货币发行量,通过增加账本上的账户总量来稀释每个账户的价值,也就是我们常说的通货膨胀。

那么比特币是如何解决类似问题的呢?作为一种虚拟货币,比特币也是以记账为基础的。它以区块链作为账本比特币挖矿难度详细数据,利用区块链不可篡改的特性来保证账本的稳定性。同时,可预见的比特币总量是固定的,2100w左右。而区块链本身具有去中心化的特点。结果是所有节点达成共识,可以避免中心化银行大量发币的行为。

比特币的数据结构

区块链是一个区块链表。每个块由块头和块体组成。块通过哈希指针连接。在通常的数据结构中,header 包含一些元数据,body 包含具体的数据。在区块链中也是如此。区块头包含版本号、指向父区块的哈希指针、默克尔树的根哈希值、用于挖掘的随机数噪声等字段;块体是以默克尔树的形式组织的交易数据。其示意图如下。

哈希指针

指针是我们熟悉的对象。指针指向内存中的一个对象,指针的值就是该对象的内存地址。通过指针我们可以找到对应的对象。

哈希指针除了帮助我们寻址之外,还附加了对象的哈希值。这里的哈希值作为一个数字签名,也就是验证对应的对象是否被改变了。所以hash指针起到了指向+防篡改的作用。

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

默克尔树

比特币中的交易数据在块体中以默克尔树的形式组织起来。 Merkle树的结构如图(图片来自比特币白皮书,不过画图好像有问题,有时间看代码确认一下具体结构再画图图片自己),它类似于二叉树,只是它使用哈希指针而不是普通指针。默克尔树根节点的哈希值会写入区块头,同时作为数字签名,防止数据被篡改。

默克尔树除了防止交易数据被篡改外,另一个重要的功能就是提供默克尔证明。在谈默克尔证明之前,先简单介绍一下背景。比特币中的节点分为两种:全节点和轻节点。全节点存储区块的完整数据,而轻节点只存储区块头。全节点验证交易是否写入区块链非常简单。它只需要检查该交易是否存在于对应的Merkle树中;那么轻节点如何检查和验证交易是否写入区块链?在?这一次需要默克尔证明。其示意图如下。

假设A要向B证明交易tx被写入区块链,那么A需要将交易tx的内容和交易在Merkle tree路径上的hash值给B比如上图中交易3的路径是hash 2和hash 01,B拿到交易3后,用Hash 3和Hash 2计算Hash 23,再用Hash 23和Hash 01计算root哈希值。 B 将计算的根哈希与其本地保存的根哈希进行比较。由于哈希函数的抗碰撞性,默克尔证明是不可能被伪造的。

POW 共识

上面提到了比特币中的一些数据结构,可以防止区块链中的数据被篡改。但是分布式系统还有一个关键问题,就是如何在节点之间达成共识。具体来说,在比特币中,是谁可以获得记账权。

在一些常见的共识算法中,比如大家熟悉的paxos、raft等,都是通过投票来达成共识的。投票确实是一种主流的共识机制,但投票机制的前提是必须解决会员问题。在比特币这样的公链中,它对全网开放,成员身份难以确定。因此,比特币设计了一种基于算力的投票机制,即工作量证明。

我们在上面提到了哪些字段包含在块头中。矿工确认交易打包到最新区块后,区块头中的字段基本确定,除了随机数的nonce值。 pow 机制是让矿工不断尝试不同的 nouce 值,使整个区块头的哈希值小于目标。由于哈希函数的特性,我们可以知道这个过程是完全不规则的,我们只能不断尝试不同的值。谁拥有更强的计算能力,谁就更有可能做对会计。所以比特币也叫算力投票。

比特币交易

这部分将介绍如何确认比特币交易的有效性。

—ing