详解比特币的找零机制

操作方法

  • 01

    比特币的找零机制一直让人有些迷惑,明明只向一个地址发送了比特币为什么 blockchain 上面的显示的有时是1个地址对多个地址,有时是多个地址对1个地址,有时又显示多个地址对多个地址? 为什么比特币资深用户要提醒大家当比特币钱包交易100次以上时再次交易后要重新备份钱包,恢复以前的钱包备份有可能会遭遇损失? 是的,这一切都是因为比特币的找零(Change)机制。本文参考 巴比特(www.8btc.com) ,详细为大家解释一下比特币的找零机制是怎样运作的。 比特币交易的规则:将用户有权使用的若干比特币汇款地址上的之前交易的输出金额作为一次交易的输入,若干比特币收款地址上增加的交易金额作为本次交易的输出。输入金额必须大于等于输出金额,超出部分作为本次交易的手续费。手续费没有输出地址,奖励给将本次交易记账成功的矿工。 因为有时作为输出的金额超过了用户想要支付的金额。在这种情况下,比特币客户端会创建一个新的比特币地址,并把差额发送回这个地址,这就是比特币的找零机制。 比如你想从商店买一块钱的棒棒糖,你打开你的钱包,发现里面只有一张20元面值的人民币。你能支付的最小金额是多少呢?当然不是1块钱,你不能把这张20元钱的纸币撕下20分之1再交给营业员。你必须把这张20元面值的人民币全部交给收银员,然后因为你只需要支付1元钱,收银员会找给你19元。 除了中央银行,法律禁止任何人自己发行人民币,所以人民币都是固定面额的。这次交易的流程看上去就像下面这样: 输入: 20元 人民币 输出: 1元 给 收银员 10元 给 你 5元 给 你 1元 给 你 1元 给 你 1元 给 你 1元 给 你 因为我们每天都这么进行一手交钱一手交货的交易,所以上面这个流程好像已经成为一种天经地义的事情。让我们打破这种思维惯性,看看会发生什么事。 现在让我们想象一下这样的场景:存在这样的一个系统,它允许收银员(或者其他什么人都可以)切实地销毁任意数量的真实货币(人民币),并且允许收银员打印出任意金额的真实货币作为替代。不一定是10元面额或者20元面额,如果需要的话,比如打印出 18.94537208 元面值的人民币。 同时为了防止双重支付和伪造,必须确保在任何时候,新创建的货币金额与被销毁的货币金额是完全一样的。在这种情况下,你的交易可能看起来像下面这样: 输入: 你的 20元 人民币 被销毁 输出: 新发行的 1元 给 收银员 新发行的 19元 给 你 这就是比特币的运作机制。与法定货币不同,我们习惯把这种方式称之为交易单元的输入和输出。 当你“支付”比特币,并创建一次交易时,你必须将你支付地址上可供支付的金额(来自该地址之前交易的输出)作为新交易的输入。这样的地址可能不止一个,你的比特币钱包会暗自寻找你钱包中所有可供支付的输出金额(可能来自于不同地址),并把它们加在一起显示为钱包可用余额。 所以,当你的比特币钱包说你有130个BTC时,它只是意味着你的所有地址上可供支付的交易输出加在一起共有130个BTC。这和你的普通钱包中放着1张100元和3张10元人民币差不多一个意思。 让我们查看上图表示这次交易:0a1c0b1ec0ac55a45b1555202daf2e08419648096f5bcc4267898d420dffef87,比特币客户端将 19f 地址上存在的之前某次交易的输出:10.89 BTC全部支付出去,实际交易金额为 10 BTC支付给 1KM这个地址, 0.89 BTC作为找零返还给 1HP 这个地址。 就像一个人不能只花20元人民币中的1元钱一样,比特币客户端也不能只支付 10.89 BTC中的 10 BTC给对方。 10.89 BTC的前次交易输出金额将全部作为新交易的输入金额,并在这个过程中产生了两个新的可供支付的输出金额,10 BTC给1KM,0.89 BTC给1HP,两个输出金额加在一起正好等于 10.89 BTC。 19f 地址上面存在过的这个10.89 BTC可供支付的输出金额在这次交易完成后将被彻底摧毁,整个比特币网络将防止它被再次支付。 而那两个新建立的可供支付的输出金额现在可以成为下次交易的输入了。 这次交易中,交易手续费为0。如果交易中支付手续费的话,输入和输出将会产生差额。(比如,输入 10.89 BTC,输出 10.88 BTC,交易手续费 = 0.01 BTC) 比特币钱包文件中包含了所有找零地址的私钥,它们可以正常的接收或者发送比特币。但是,比特币官方客户端的界面上并不会把这些找零地址显示在地址簿中,也许是为了匿名性的必要,也许是为了减少客户的困惑,虽然这也造成很多人新的疑惑。 因为比特币客户端一开始只产生100个客户专属地址的私钥(称为私钥池),在创建找零地址时会优先使用这100个地址中的某一个,但当这些地址都被使用之后,100个以外新的找零地址就会被创建。如果你只备份了一开始的100个地址的钱包,那么在上面这种情况下恢复钱包将丢失新的找零地址。 总之,在详细了解比特币的找零机制后,你就可以正确回答本文一开始提出的问题了,让我们一步步成为比特币的专家吧。

(0)

相关推荐

  • 怎样避免Bitcoin-Qt客户端的找零机制

    操作方法 01 比特币在转帐时,内部实现要求每一个输入都要被完全花掉,Bitcoin-Qt客户端会通过"找零"机制,将不想转给别人的部分转给自己的另外一个地址.而通常,这个&quo ...

  • 详解Vista/Win7内存管理让你更了解内存占用大的原因

    详解Vista/Win7内存管理,对于Windows Vista、Windows7的内存的使用,从XP升级的用户大多都认为:系统空闲时空闲的内存应该越多越好。而到了7的时代(更准确的说是Vista之后 ...

  • MentoHUST的使用教程详解

    本文是MentoHUST的使用教程,旨在介绍MentoHUST怎么用,MentoHUST是一个支持Windows、Linux、Mac OS下锐捷认证的程序(附带支持赛尔认证),Windows版Ment ...

  • 详解Vista/Win7内存管理

    详解Vista/Win7内存管理,对于Windows Vista、Windows7的内存的使用,从XP升级的用户大多都认为:系统空闲时空闲的内存应该越多越好。而到了7的时代(更准确的说是Vista之后 ...

  • CentOS下iptables详解

    一:前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防火墙 ...

  • C++ string详解

    之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够.字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是 ...

  • DNF核弹流奶妈玩法详解及附魔明细

    今天小编为大家带来DNF核弹流奶妈玩法详解及附魔明细,帮助大家解决在游戏中遇到的一些小问题. 操作方法 01 核弹的伤害成分,其实有尝试过核弹就会感觉到,相比于用提升单体伤害的方式去提升总体核弹量,还 ...

  • MAC小白--硬盘中各个文件夹详解2

    MAC小白--硬盘中各个文件夹详解 操作方法 01 Assistants 帮助用户完成配置和其它任务的程序. Audio 声音插件和设备驱动. ColorPickers 根据某一模式取色的资源,例如H ...

  • iptables详解

    操作方法 01 iptables详解 2012-09-12 20:53:28 分类: 原文地址:iptables详解 作者: 一:前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的, ...