主页 > imtoken最新安卓下载 > 比特币系统如何确认交易?

比特币系统如何确认交易?

imtoken最新安卓下载 2023-01-17 09:59:40

货币系统必须能够在相对较短的时间内确认交易并确保其不可被篡改。这是最基本的要求。今天就整理一下这次交易确认的流程,仅供大家参考。很多人都明白我还是用了唐强的文章,在此感谢,同时声明这不是原创,相当于看完后学习笔记。

首先说一下比特币系统的记账方式,或者说直白一点,就是记录交易的方式。

先说一个概念:UTXO,指的是未花费的交易输出

比特币的记账模型与传统的中心化记账模型有一个难以理解的区别:比特币没有账户的概念。

具体来说,比特币的记账系统是记录和确认每一笔交易本身,交易本身,交易本身,也就是A到B转账的过程,而不是记录A和B的余额变化,最终的余额通过扫描交易数据计算得出。

传统的记账系统(银行)通过记录和保存每个账户的余额变化数据来验证交易,也就是说,对于每笔交易,不同的账户(一般是2个),余额会做相应的调整和保存,并且交易记录完成。 A 将 100 万转给 B,然后先将 A 的余额减少 100 万,同时将 B 的余额增加 100 万。根据会计,有借方必有贷方,贷方必等额。

为什么会这样?为什么比特币系统不采用实时更新账户余额的方式来记账?主要有两个原因:

如何支付比特币交易_sitehzd.com 比特币交易网币币交易_比特币币币交易是什么意思

1.节省算力和存储空间。因为如果采用余额模式,为了避免双重支付,即使你的账户没有变,比特币系统中的任何一个客户端(钱包)都有交易和变,所有客户端都有同步数据,否则,如果B All整个系统的账户余额信息不同步更新。当 A 向 B 转账时,B 无法知道 A 的账户是否有足够的余额。 A 甚至有可能同时向 B 和 C 转移相同的比特币。由于 B 和 C 都没有更新 A 的余额信息,所以他们不知道 A 的账户实际上没有那么多钱。

传统的支付系统不同。对于每笔交易,只有付款人和收款人的余额发生变化,最多是中心化服务器数据发生变化,因此只需要同步少量数据。 (这是相对于区块链而言的),其实由于所有的记账都是由中心服务器完成的,所以不需要额外的同步,只需要在完成记录的同时存储数据即可。因此,用于数据存储的集中式系统具有优势。如果比特币也采用这种平衡思想,那它肯定会失败(虽然还不能确定它会成功)。

2.如果采用记录账户余额的方式如何支付比特币交易,那么当不同节点的更新存在时间差时,很容易出现双花。简而言之,A 向 B 和 C 转移相同的比特币,由于 BC 的地理位置不同,附近的节点不同,有可能都被确认为交易。虽然随着时间的推移,比特币系统会达成竞争共识,只确认一笔交易。但是,无论是BC都提供,到头来,一定有人吃亏。

比特币系统是怎么做的:即只确认交易本身,直接记录交易的输入输出:每一笔比特币交易都有输入输出,有人付给你的钱就是“交易输入” (对你而言),如果你收到的钱是你支付的,称为“交易输出”,而您收到但未支付的钱称为“未使用的交易输出”(UTXO)。是待付款状态。

矿工将每笔交易本身的数据(输入和输出)打包成块,并通过竞争计算确保它们不会被篡改。事实上,如果确认了 6 个区块,那么全球总量的算力是无法改变的。

如果需要确认余额,则使用客户端(钱包)扫描一个账户的输入输出数据,即可计算出该账户的余额。与更新所有账​​户的余额数据相比,太容易了,不到1秒就可以完成。

如何支付比特币交易_比特币币币交易是什么意思_sitehzd.com 比特币交易网币币交易

说完比特币系统的记账方式,再来说说具体的支付流程,双方如何确认交易已经完成?让我们先谈谈一个关键概念:

SPV:简单的付款验证。我们在与比特币交易时,必须确保交易成功后,才能提供相应的服务或商品,即我们付钱发货。为什么叫“简单验证”?因为这种验证方式,不需要下载所有的交易数据,只需验证区块头数据即可。

什么是区块头?

简单回顾一下,区块链通过将一段时间内的交易数据打包成一个区块来记录交易,然后随着时间的推移,区块不断积累和叠加。联锁形成区块链,区块链越长,修改难度越大。一般来说,6个区块后,全世界的电脑都不能修改了。

每个区块头信息代表一个区块,就像区块的身份证一样,你看到我的身份证就可以知道我是谁,你脑海中也能想出我的身高、长相,甚至职业,爱好等信息,在区块链世界中,系统可以通过区块头识别区块信息的方方面面。

区块头的核心是 Markle Tree Root。那么默克尔树的根是从哪里来的呢?假设这个区块包含n个交易信息(n为偶数),那么每一个交易都有一个哈希值(Hn),那么我将这些哈希值排成一行,从第一个开始,相邻的上再进行一次哈希计算Operation的两个hash值,得到n/(2^k)个hash值,不断计算,最后得到1个hash值,这个hash值就是Merkle树的根。下图可以直观的表示这个过程:

sitehzd.com 比特币交易网币币交易_比特币币币交易是什么意思_如何支付比特币交易

n 不是偶数也没关系,比如k+1(k 是偶数),把多余的那笔交易放在一边,计算k 笔交易的Merkle 树根后,使用该交易的哈希值Merkle树根与下单交易的hash值进行hash,可以得到n个交易的这个Merkle根。

这个过程在现实中需要重复多少次才能计算出默克尔根?稍微观察一下上图可以看出,每进行一次相邻哈希值的打包哈希计算,得到的哈希值的个数就会减少一半,也就是以2为底的个数呈指数级减少,而还原速度相当快。

假设有2048笔交易,进行一次打包hash计算得到1024个hash值

进行第二次打包hash计算得到512个hash值

执行3次打包哈希计算得到256个哈希值

比特币币币交易是什么意思_如何支付比特币交易_sitehzd.com 比特币交易网币币交易

...

执行 11 次打包得到 1 个哈希值。

也就是说,只要进行11次打包hash计算,就可以得到Merkle树根,

使用对数表(高中数学有的,我也复习一下可以发现,如果有65536个交易,需要16个打包hash计算。如果有1,048,576个交易,需要20个打包hash计算,而每次hash计算大约需要0.01秒,那么计算20次需要0.2秒,还是很快的。

说了这么多,重点来了,如果客户给我转了1个比特币,我怎么确认交易是被比特币网络确认的,不能被篡改?通俗的讲,你如何确认你收到了钱?分 4 步:

首先:我的钱包软件计算了这笔交易的哈希值。

sitehzd.com 比特币交易网币币交易_如何支付比特币交易_比特币币币交易是什么意思

第二:我从最近的全节点下载所有区块头信息(包括所有交易数据),大约40M。

第三:全节点反馈给我几个(这个数字和上面提到的获取Merkle树根所需的打包哈希操作的次数一样)在这个交换分支上的关键节点哈希值,我依次用这些哈希值对本次交易的哈希值进行哈希,得到本次交易的区块的默克尔树根。

假设这个区块有16笔交易,这个交易的hash值是Hk,那么全节点反馈给我的是下图中蓝色的交易hash值。

第四:比较我计算的Merkle树根和之前下载的块头信息。如果一致,则证明本次交易记录在本区块中。

说到这里,大家应该可以明白,通过Merkle树根比较法,比特币钱包可以在比较短的时间内确认交易的真实性。

但我不得不说如何支付比特币交易,比特币的系统还是有很大缺陷的。前面说过,10分钟左右会产生一个区块,也就是说,如果我的交易在这个区块的第一笔交易,我需要10分钟才能拿到这个区块的Merkle根来确认交易。如果我想更安全,6个区块认证后,我需要一个小时,如果网络拥塞,时间会更长,所以基本上不可能用比特币进行小额交易,就像我必须打车去机场,我付一笔钱,司机要一个小时才能让我上车,一点实际意义都没有。这也是去中心化所付出的代价。希望随着区块链技术的发展,这个问题能够得到解决,或者我们可以在去中心化和效率之间找到一个相对的平衡点。听说BM团队开发的EOS正在朝着这个高效交易的方向发展,我们拭目以待。