肖臻公开课(五)——比特币中的实现

本笔记对应北京大学肖臻老师《区块链技术与应用》公开课第五课。

0.前言

在本节中,肖老师首先介绍基于交易的账本模式,然后解释了比特币中是如何通过一个新的数据结构——UTXO实现这种交易模式的。然后肖老师带领同学看了看具体的区块案例,最后介绍了区块链中的安全性的相关知识。

1.基于交易的账本模式

比特币采用的是基于交易的账本模式。每个区块中记录的是交易信息、转账交、铸币交易。但是没有具体记录某个账户中有多少钱,需要根据交易记录去推算。

而比特币使用一个特殊的数据结构UTXO对此账本模式进行实现。它维护的一个还没被花掉的交易的输出组成的集合,如下图所示,绿色的两个交易就保留在UTXO中,而红色的交易因为已经被花掉了,所以从UTXO中移除。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TKtbPjex-1677069509943)(https://gitee.com/yu88888//myimage/raw/master/master/image-20211014194125447.png)]

有几点需要注意的:

  • UTXO是为了检测double spending,想要花掉的币必须在这个集合中才是合法的,如果不在集合中要么不存在,要么被花过。全节点要在内存中维护UTXO结构。
  • 随着交易的发布,每个交易会消耗一些UTXO输出,但是也会产生新的输出。
  • 每个交易可以有多个输入,也可以有多个输出。所有输入的金额要等于所有输出的金额,即 total inputs = total outputs。有些交易会出现input > output,那么这个差额就是作为交易费给获得记账权的节点。
  • 以太坊使用的是基于账户的账本模式,显式的记录每个账户上的余额,比特币中没有记录余额,对用户的隐私保护较好,但是每次需要指出来源,开销更大。

一个区块的例子

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BNYef1CI-1677069509944)(https://gitee.com/yu88888//myimage/raw/master/master/image-20211014200329745.png)]

注意,区块中的nonce是4字节即32位整数,这个大小很容易就可以遍历一遍,因为比特币近些年太火爆了,挖矿的人数很多,所以挖矿的难度被调整的很高,单纯靠调整nonce是很可能得不到符合难度要求的解的(搜索空间不够大)。所以需要额外调整另外一个数值:铸币交易中的coinbase值。

2.挖矿过程的概率分析

挖矿的过程就是不断尝试nonce去求解puzzle,每次尝试可以看做一个伯努利试验。掷硬币就是一个最简单的伯努利试验,要么正面朝上要么反面朝上,这两个概率不必一样大,对于挖矿而言,成功和失败的概率相差非常悬殊,成功的概率很小。

当进行了大量的伯努利试验,这些伯努利试验就构成了伯努利过程(Bernoulli process:a sequence of independent Bernoulli trails)。伯努利过程的一个性质是无记忆性(memoryless),即做大量的试验,前面的试验结果对后面没有影响,例如掷硬币很多次都是反面朝上,下一次掷硬币正面朝上的概率也不会增加。

当伯努利分布(也即二项分布)的n很大而p很小时(试验次数很多,每次试验成功概率很小),可以近似为泊松分布。这里挖矿就是一个n很大p很小的伯努利过程,所以可以近似为泊松过程(Poisson process)。简单来说,就是将来还要挖多少时间”和“过去已经挖了多少时间”是没有关系的。

以上机制为了保证挖矿的公平性。

3.比特币安全性考虑

我们假设比特币网络中,大多数节点是诚实可靠的,但是不可避免的,记账权会落在少数有恶意的节点手上,这时候,这个恶意节点可以做坏事吗?

  • 能偷取别人的币吗?

显然不可以,如果要发起一个转账,那么需要转账人的私钥签名和公钥,同时还要对转账人上次交易进行回溯,验证转账人是否有足够的比特币,而如果偷取别人币,首先别人的私钥签名就无法得到。

  • 如果强行将上述的偷币交易写到区块链中会怎样?

大多数诚实的节点不会接受这个验证无法通过的候选区块,偷币的人不仅偷不到币,而且连区块奖励也得不到了。

  • 可以恶意的不记录某些交易吗?

这个行为可以做到,但是其行为本身来说是没有任何意义的。

因为在区块链中,本身就因为网络时延等因素,会导致有些交易在某次区块中被漏记,或者因为比特币系统中交易数达到了一个区块的上限,那么剩下的交易在这个区块中就不会被包含,但是总有一个诚实的区块会包含这笔交易。

猜你喜欢

转载自blog.csdn.net/doreen211/article/details/129170120