区块链小趋势区块链研习社头号玩家好文推荐

【区块链】比特币找零机制是什么?

2019-01-22  本文已影响13人  贝壳小岛Official

一、浅析找零(Change)机制

比特币的找零机制一直让人有些迷惑,明明只向一个地址发送了比特币为什么BlockChain上面的显示的有时是1个地址对多个地址,有时是多个地址对1个地址,有时又显示多个地址对多个地址?
为什么比特币资深玩家会提醒大家当比特币钱包交易100次以上时再次交易后要重新备份钱包,恢复以前的钱包备份有可能会遭遇损失?

这一切都是因为比特币的找零(Change)机制。比特币 0.9 版里面加入了一个小白们期待已久的新功能:可以自行选择支付后的找零地址,对于这个功能的加入许多人都比较疑惑。下面我就来详细为大家解释一下比特币的找零机制是怎样运作的。

比特币找零机制

比特币交易的规则:将用户有权使用的若干比特币汇款地址上的之前交易的输出金额作为一次交易的输入,若干比特币收款地址上增加的交易金额作为本次交易的输出。输入金额必须大于等于输出金额,超出部分作为本次交易的手续费。手续费没有输出地址,奖励给将本次交易记账成功的矿工。

因为有时作为输出的金额超过了用户想要支付的金额。在这种情况下,比特币客户端会创建一个新的比特币地址,并把差额发送回这个地址,这就是比特币的找零机制。

二、举例说明

嗯~ 上面这样解释可能晦涩难懂。
举个例子:
比我需要转账给张三5个比特币,但是我的比特币分别在A/B/C三个比特币地址数量分别是 1 / 2 / 2 ,每个地址的余额都不足以支付5个比特币。

单个地址不足5个比特币

这时候我可以发起一笔转账,同时把A/B/C三个地址共5个比特币转给张三。

再举个例子:
如果我的比特币地址有5个比特币(多希望这是真的 哈哈~),但是我只需要转1个比特币给李四,我就需要在转账的时候告诉矿工,我有5个比特币其中1个转给李四,另外4个转回给我自己,转回给自己的部分比特币可是是原地址或是创建新的地址接收;在转账时千万别忘了说明,不然剩下的4个币就全给矿工当手续费了。

不做说明-多余的币给矿工做手续费

可能上面两个例子还是无法让你理解,那我再举个生活中的例子就会容易理解了。
比如我到超市买了一个3块钱的东西,我打开钱包发现只有一个面值10元的人民币,我能支付的最小金额是多少呢?当然不是3块钱,我也不可能把这10块钱撕下个近1/3给收银员。所以我必须把10元钱全部交给收银员,然后我只需支付3元收银员会找回给我7元。
这个交易流程可能就会如下
输入:

我的 10元 人民币

输出:

3元 给收银员

1元 给我,

1元 给我,

5元 给我

这种是生活中司空见惯的生活场景,当转换到比特币交易就可能会是这样一种场景。
现在让我们想象一下这样的场景:存在这样的一个系统,它允许收银员(或者其他什么人都可以)切实地销毁任意数量的真实货币(人民币),并且允许收银员打印出任意金额的真实货币作为替代。不一定是10元面额或者20元面额,如果需要的话,比如打印出 18.94537208 元面值的人民币。
同时为了防止双重支付和伪造,必须确保在任何时候,新创建的货币金额与被销毁的货币金额是完全一样的。在这种情况下,你的交易可能看起来像下面这样:

输入:

我的 10元 人民币被销毁

输出:

新发行的 3元 给收银员

新发行的 7元 给我

这就是比特币的运作机制。与法定货币不同,我们习惯把这种方式称之为交易单元的输入和输出。

当你“支付”比特币,并创建一次交易时,你必须将你支付地址上可供支付的金额(来自该地址之前交易的输出)作为新交易的输入。这样的地址可能不止一个,你的比特币钱包会暗自寻找你钱包中所有可供支付的输出金额(可能来自于不同地址),并把它们加在一起显示为钱包可用余额。比特币钱包文件中包含了所有找零地址的私钥,它们可以正常的接收或者发送比特币。但是,比特币官方客户端的界面上并不会把这些找零地址显示在地址簿中,也许是为了匿名性的必要,也许是为了减少客户的困惑,因此这也就造成很多人有疑惑。

上一篇下一篇

猜你喜欢

热点阅读