所谓比特币交易就是从一个比特币钱包 https://zhuanlan.zhihu.com/p/44201923 向另一个中转账,每笔交易都有数字签名来保证安全。今天咱们就来说说,当我们进行比特币转账的时候,交易是如何工作的。

世上本无币,只有交易记录

理解比特币的基本一个要点就是,比特币的钱包里面其实根本就没有币,比特币账本上记录的只是钱包相关的交易。

比特币并不存在于任何地方,即使是硬盘上。有人如果持有比特币,那么他们其实是拥有特定比特币的地址,但是其实所谓的币并不是直接就存在于这个地址中的,地址就相当于你的银行账户。但是世界上没有一个可以摸得着的实物,或者是一个数据文件,可以被叫做一枚“比特币”的。

有的只是各个地址之间的转账记录,余额时增时减。所有的交易都存放在一个非常大的账本文件中,这个账本就叫做“区块链”。比特币地址对应的余额不是直接存放在区块链上的,而是需要到区块链中找出所有这个地址相关的交易,根据交易金额去计算出来。

交易细节

来具体查看一下一个交易的细节。这里我做了简化,忽略了手续费。详细了解交易过程要理解 UTXO 的概念 https://zhuanlan.zhihu.com/p/49205885 ,这里我们不展开。

如果 Alice 给 Bob 发送一些比特币,那么这个交易就有三项信息:

  • 输入。这里面记录了最初 Alice 拥有的这些币是从哪个地址转给她的,假设她是从她的朋友 Eve 那里得到的币。

  • 数目。这个就是 Alice 到底给 Bob 转了多少个比特币。

  • 输出。Bob 的比特币地址。

因为比特币只是以交易记录的形式存在,所以很多时候你的一个地址上面其实是对应很多个交易的。可能 Jane 发送给了 Alice 40个比特币,Lucy 给了40个,Eve 给了20个,这些都是不同时间的不同的交易,并没有被合成到 Alice 的一个钱包里形成一个有100个币的文件,而是仍然作为独立的各个交易记录存在。

当 Alice 想要给 Bob 转币的时候,她的钱包就会找到几个交易,让它们的数额加起来正好是想要转的数目。 当然,很可能在 Alice 想要给 Bob 转币的时候,她没有办法找到几个交易加起来正好是转账数额。也许她想要转 30 个币,但是钱包中根本没有一个交易或是多个交易的和正好是这个数目。同系统没有办法把一个交易切割成小的数额,每次都必须消耗掉整个交易,这里的交易对应严格的技术术语是“交易输出”,这里我们不必深究。但是不用担心,系统会创建一个新交易指向 Alice 把多发送出去的币作为找零还给她。

这样,Eve 和 Lucy 对 Alice 的交易作为输入,Alice 这边转账给 Bob 30个币,剩下的30个币,系统会作为找零转账给 Alice 。从这个简化的过程中,可以看出,转账过程就是系统上不断生成新交易销毁老交易。

交易发送过程如何进行

要让全网记录这次交易,需要首先让发送方用自己的私钥签署这次交易,然后要等待全网的确认。

比特币交易中是如何发送币的呢?你需要两个东西,一个是比特币地址另一个是对应的私钥。比特币地址跟银行账号不一样,你不需要签署一堆文件去申请,它们是随机生成的,就是一串由字母和数字组成的字符串。私钥也是类似的一个字符串,但是这个是要严格保密的。比特币地址就好像一个透明的存钱罐,每个人都可以看到里面有什么,但是只有拥有私钥的人才能打开它。当 Alice 想要给 Bob 转币的时候,就用私钥来签署一段信息,其中包括输入,数目和输出这三项前面已经提过的内容。

这样,信息广播到比特币网络上,矿工就可以验证这次交易,把交易加入区块链中了。交易需要经过矿工的验证确认之后才能写到区块链之中,所以你必须要等待一下,等待他们挖矿成功。挖矿过程其实就是记账过程,挖矿成功意味着全网都记录好了 Alice 的这次交易了,比特币也就发送成功了。

总结

关于比特币交易是如何工作的,主要内容就是这些了。最关键的一点就是,比特币大账本上是没有账户余额的,也没有一个比特币的概念,有的只是交易。给他人发送比特币,就是把以前他人给我转入比特币的交易找出来,凑够金额,转账给接收方。一旦交易经过挖矿,被全网矿工都记录到自己的账本之上了,比特币也就发送成功了。

参考: