这是关于比特币白皮书(Bitcoin: A Peer-to-Peer Electronic Cash System)的系列文章之一。文章主要结构:原文——翻译——解说。原文直接引用白皮书中的内容,方便大家直接查阅,大家也可通过地址 https://bitcoin.org/bitcoin.pdf 来看原文。翻译是我根据原文进行的翻译,不完全是直译,部分内容会通过我的理解进行更通俗的阐述,让大家更容易理解。解说是对本章节内容的解说。文中的翻译及解说若存在异议,欢迎交流,谢谢!
原文
9. Combining andSplitting Value
Although it would bepossible to handle coins individually, it would be unwieldy to make a separatetransaction for every cent in a transfer. To allow value to be split and combined, transactions contain multipleinputs and outputs. Normally there willbe either a single input from a larger previous transaction or multiple inputscombining smaller amounts, and at most two outputs: one for the payment, andone returning the change, if any, back to the sender.
Itshould be noted that fan-out, where a transaction depends on severaltransactions, and those transactions depend on many more, is not a problemhere. There is never the need to extracta complete standalone copy of a transaction's history.
翻译
9.组合与拆分价值
虽然系统可以逐个的去处理货币,但在转账中针对每一分钱去进行交易是很不切实际的。故交易中允许包含多个输入和多个输出,来对货币价值进行拆分和组合。通常,系统会将前面的一张大单交易,或者之前的几张小额交易进行组合作为输入,并包含最多两个输出:一个是支付的费用,另一个是找回给付款人的零钱。
需要指出的是,一个交易可能依赖很多个交易,而这多个交易又可能依赖于更多的交易,但这都不是一个问题。因为我们不需要提取完整的独立的交易历史副本。
解读
之前也说过,一个交易单里面,是包括了多个输入和多个输出的。
输入:连接的是要出这笔钱的那个交易。假设说有个交易单1是:A给B,5比特币。然后B想拿这5个比特币来转给C。那么,交易单2:B给C,5个比特币,这个交易单2的输入就是交易单1。
输出:指交易的接收方,刚开始可以简单的理解为与接收方钱包公钥地址hash值相关的值,其实公钥地址只是其一部分,输出一个脚本。
那有人可能会问了,不可能A给B 5个比特币,B就刚好想转5个比特币给C的吧。说不定只给C 4.5个比特币呢?那剩下的0.5个怎么办?一个很简单的方式,就是在输出里,不但包括接收方C的地址内容,还包括B自己的地址,并且给的比特币是0.5。这就很好的解决了找零钱的问题了。同时我们也一定要注意,输入是可以多个的,输出也可以多个。
这里顺便说一下,比特币之所以能够洗钱,也跟这个机制有关系。非常多的输入,以及非常多的输出,会造成追查者非常艰难跟踪哪些帐号是正常交易,哪些帐号是用来洗钱的。这是一个题外话了,大家可以稍微了解一下。
下面给出交易的数据结构,让大家对一个交易是怎么样的有个更加直观的印象:
- 比特币白皮书解读系列 -
领取专属 10元无门槛券
私享最新 技术干货