Bitcoin

比特币交易是如何工作的

Peter 说:本文是 http://www.coindesk.com/information/how-do-bitcoin-transactions-work/ 的翻译。

所谓比特币交易就是从一个比特币钱包向另一个中转账,每笔交易都有数字签名来保证安全。一个交易一旦发生那么就是对所有人都公开的,每个交易的历史可以最终追溯到相应的比特币最初被挖出来的那个点(这句话不太好理解,不过后面我们介绍输入输出的概念时,这个就比较清楚了)。

持有比特币等着升值确实是个好主意,不过要是谁都不用这种货币进行交易,那比特币就没啥实际意义了。今天咱们就来说说,当我们花比特币的时候,交易过程是如何工作的。

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

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

有的只是各个地址之间的转账记录,余额时增时减。所有的交易都存放在一个非常大的账本文件中,这个文件叫做“区块链”。如果想知道一个比特币地址中的余额,那么这个不是直接存放在比特币地址中的,我们需要到区块链中去计算出来。

一个交易长成啥样

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

发送过程如何进行

比特币交易中是如何发送币的呢?你需要两个东西,一个是比特币地址另一个是对应的私钥。比特币地址跟银行账号不一样,你不需要签署一堆文件去申请,它们是随机生成的,就是一串由字母和数字组成的字符串。私钥也是类似的一个字符串,但是这个是要严格保密的。比特币地址就好像一个透明的存钱罐,每个人都可以看到里面有什么,但是只有拥有私钥的人才能打开它。

当 Alice 想要给 Bob 转币的时候,就用私钥来签署一段信息,其中包括输入,数目和输出这三项前面已经提过的内容。这样,信息广播到比特币网络上,矿工就可以验证这次交易,把交易加入区块链中了。

为啥交易会有十分钟的等待时间

因为交易需要经过矿工的验证确认之后才能写到区块链之中,所以你必须要等待一下,等待他们挖矿成功。

比特币协议里面设置了挖矿完成的大概时间是10分钟。所以商家可能会等到你的交易所在的区块被确认之后才会给你发货。但是也有商家不会让你去等,基于对你的一个信任,相信你不会在交易没有得到确认之前有去拿同一笔钱花在别的地方。不过一般这只适用于小额交易。

输入和输出中的数额不相等怎么办?

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

当 Alice 想要给 Bob 转币的时候,她的钱包就会找到几个交易,让它们的数额加起来正好是 Alice 想要转的数目。 当然,很可能在 Alice 想要给 Bob 转币的时候,她没有办法找到几个交易加起来正好是转账数额。也许她想要转 30 个币,但是钱包中根本没有一个交易或是多个交易的和正好是这个数目。

同时,她没有办法把一个交易切割成小的数额。就是这样,你没有办法切割一个大的交易成为多个小数额,每次都必须花掉整个交易。但是不用担心,系统会给她把多发送出去的币作为找零还给你。

Alice 这时就可以把 Jane 给她发送过来的两个币发送给 Bob,这样 Jane 就是“输入”,Bob 就是“输出”,“数额”是30个币,这时 Alice 真正想要转账的数目。这样,Alice 的钱包就会自动给她的这次交易创建两个输出:把30个币给 Bob,剩下的30放到一个新的地址中,这个是找回的零钱。

交易过程收费吗?

交易手续费是综合多种因素得出的。有些钱包可以让你手动设置手续费。交易中那部分没有被对方收到,同时也没有找零回来的就是手续费。这笔钱最终会被得到记账权的那个幸运的矿工所得到。

目前,很多矿工都不收手续费。但是随着每次挖矿成功系统奖励给矿工的币不断减少,未来肯定会有更多的矿工会收取手续费的。

一直以来有一件很让人恼火的事情就是计算矿工费的过程非常复杂难懂。不过后来大家对协议做了相应的修改,现在的软件能够自动处理矿工费的问题了。

能开收据吗?

比特币系统设计时并没有考虑收据问题。不过0.9版本的比特币中稍微修改一下付款的方式,让整个过程更方便。支付服务商,例如 Bitpay,也提供一些基本交易过程提供不了的功能,例如提供收据或者交易确认页面等。

能发送小额的比特币吗?

比特币理论上是可以无限切割的。目前最小的比特币单位叫做“中本聪”,相当于0.00000001个比特币。