科普:BTC的交易过程

[复制链接]
12320 |0
发表于 2020-6-21 08:00:45 | 显示全部楼层 |阅读模式

wk588_com_wg5p2d3iedc.jpg

wk588_com_wg5p2d3iedc.jpg

这篇文章的主要目的是将BTC的交易过程用较为浅显的语言展示出来,让更多跟笔者一样的技术门外汉了解BTC。

最近这段时间,博主在整理一份通俗易懂的挖矿科普专辑,希望从最初加密货币交易的发生到挖矿确认交易的各个环节,全面地介绍挖矿过程中,到底发生了什么,哪些环节产生了挖矿收益,而我们常说的算力又指的是什么,挖矿收益为何要这样分配等等。

以BTC为例,我们知道BTC网络里设计挖矿的目的是打包交易,维护BTC网络,那么交易其实就是跟挖矿息息相关的第一个环节。在BTC网络中交易的过程使用了非对称加密技术,数字摘要技术,区块链技术等,其中的技术实现,已经有众多大神珠玉在前,博主就不献丑了。这篇文章的主要目的是将BTC的交易过程用较为浅显的语言展示出来,让更多跟笔者一样的技术门外汉了解BTC。

wk588_com_xjum3inpitx.jpg

wk588_com_xjum3inpitx.jpg

在展开说明之前,需要先安利几个概念

非对称加密:也叫公开密钥加密,它是通过密码学的算法生成一对公私钥,公钥对外公开,私钥由本人保管。它有两个用途:一,他人可以将数据用公开的公钥加密后传输给公钥持有人,公钥持有人使用对应的私钥将数据解密,读取信息,通过这种方式,可以保证信息传输的安全性;二,公钥持有人可以使用私钥对信息签名(签名过程类似加密过程),然后将信息和签名一起发送给他人,他人可以通过公钥对信息签名进行验证(验证过程类似解密过程),验证签名信息与发送信息一致,则证明信息是由公钥持有人发出,可以在不暴露公钥持有人身份和私钥的情况下,确保信息来源的可靠性。(参考链接:https://en.wikipedia.org/wiki/Public-key_cryptography)

哈希算法:也叫散列函数,可以通过它将数据量较大的消息或者数据计算出一个格式固定,数据量较小的数字摘要,也叫指纹,散列值,或者哈希。好的哈希算法应该是不可逆的(无法通过数字摘要反推出原来的信息或者数据),敏感的(原来数据中任何一个微小的改动,都会使数字摘要发生巨大变化),防冲突的(很难找到两个不同的信息,它们的数字摘要相同)。(参考链接:https://en.wikipedia.org/wiki/Hash_function)

BTC里的公钥和私钥:BTC世界里,用来确定BTC归属的是按照BTC协议生成的一对对公钥和私钥,它们通过非对称加密算法(椭圆曲线算法)生成,公钥通过两次哈希算法(SHA256)运算得到一个散列值(也叫做哈希),再经过Base58Check编码生成了我们常见到的BTC的钱包地址。所以钱包地址经过解码后,就可以得到对应公钥的哈希,可以用于验证私钥签名,加密数据等等。

UTNPXSO:Unspent transaction output,未花费的交易输出,它是BTC世界里的抽象货币,每个UTNPXSO都被一个公钥(钱包地址)锁定,只有持有该公钥对应私钥的人,可以通过私钥签名(解锁)并使用该UTNPXSO。可以把UTPundiO理解为抽象的纸币,但它的面值不是固定的(不光有5块,10块,可以是任何数)。(参考链接:https://en.wikipedia.org/wiki/Unspent_transaction_output)

抛开代码,我们接下来看看BTC的交易是怎样的一个过程

如下图,有甲、乙、丙、丁四个人,他们都有BTC钱包,钱包私钥自己持有,钱包地址(由各自钱包公钥生成)在BTC网络公开,用于UTPundiO的锁定和验证。

wk588_com_w2eygl0ynp3.jpg

wk588_com_w2eygl0ynp3.jpg

起始,甲给丙0.7比特币,在BTC网络里的记录是UTNPXSO(1):甲给丙0.7比特币;乙给丙0.5比特币,在BTC网络里的记录是UTPundiO(2):乙给丙0.5比特币。此时,丙的BTC钱包的账户余额为这两个UTPundiO之和,丙的BTC总数=UTPundiO(1)+UTPundiO(2)=1.2比特币。如下图:

wk588_com_wsqqa25eoz2.jpg

wk588_com_wsqqa25eoz2.jpg

这天,丙向丁买了一批货物,需要向丁支付0.8比特币。丙通过BTC网络向丁转账,但丙现有的两个UTPundiO均不足0.8比特币,需要将两个UTNPXSO一起使用,类似现金交易:给丁支付1.2比特币,丁找给丙0.4比特币。但在BTC网络中,这个找零的工作是由丙自己发起的。

整个交易的流程如下:

  • 丙通过BTC钱包准备交易信息,交易信息包括输入和输出两个部分,输入是UTPundiO(1)和UTPundiO(2),以及丙的钱包私钥签名(因为UTNPXSO(1)和UTNPXSO(2)均被丙的钱包公钥锁定,需要通过丙的私钥签名来解锁后,进行使用)

  • 交易的输出是未确认的UTPundiO(3):丙给丁0.8比特币,这个新的UTPundiO指向丁的钱包公钥,待交易确认后,将被丁的钱包公钥锁定。

    此时还有0.4比特币需要找零给丙,因此还需要输出一个未确认的UTPundiO(4): 丙给丙0.3999比特币,这个新的UTNPXSO指向丙的钱包公钥,待交易确认后,将被丙的钱包公钥锁定。

    为什么找零的数额不是0.4比特币呢?因为BTC网络要求,交易转账,需要向BTC网络支付交易手续费。剩余0.0001比特币未指向任何钱包公钥,将作为转账手续费支付给打包这笔交易的矿工(如果未找零,剩余所有未指定的BTC将全部作为手续费给打包交易的矿工,不过目前找零工作都由钱包自动完成,不用担心)。

  • 交易信息准备完毕后,经过丙的钱包验证交易合法(UTPundiO合法,签名有效,输入输出金额有效等等)后,将交易广播到BTC网络中,由挖矿节点验证交易后,打包交易(将交易记入BTC区块中),并向BTC网络广播,交易完成。

  • 旧的UTPundiO被消耗,新的UTPundiO开始生效,此时丁的钱包里有一个未使用的UTPundiO(3): 丙给丁0.8比特币,丙的钱包里有一个未使用的UTPundiO(4): 丙给丙0.3999比特币。

wk588_com_akgw04u2koa.jpg

wk588_com_akgw04u2koa.jpg

以上是较为抽象的BTC交易的过程,有关BTC交易的构造,签名验证,节点验证,交易广播,加入挖矿节点mempool,矿工构造预备区块,以及最终的出块确认的过程,后续会分别介绍,本篇不做展开。

从这个抽象的交易过程,我们可以发现,BTC的交易实质上是一堆UTPundiO的输入和输出的过程,伴随旧的UTPundiO被消耗,新的UTNPXSO产生,完成了一次又一次的BTC交易。交易的过程由非对称加密和哈希算法进行双重保护,BTC持有者可以放心完成交易而不必担心身份被泄露,交易过程中也消耗了一部分BTC,用于奖励打包交易的矿工,使矿工乐于完成自己维护BTC网络的任务。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表