比特币找零机制的理解:
你有一个比特币核心钱包文件Wallet.dat;里面存有100对地址私钥对。
假设现在你这个钱包总确认的余额有10BTC,
分别存储在:
地址A:3个BTC
地址B:3个BTC
地址C:2个BTC
地址D:2个BTC
其余96个地址都是BTC余额为零的地址。
此时如果你要向外发送1个BTC,(这个向外是广义的,意思就是只要你做发送操作,别管目标地址是谁的,甚至目标地址就是你这100个地址里面的某个地址,非0和不非0地址也都一样)
只要你做了一次这个操作,
你Wallet.dat里面的所有地址余额就全乱掉了,
而且你直接可以理解为此次操作后的所有余额细节都不可预测,这么理解是最简单的方法。
但是,比特币核心钱包有一个是可以向你保证的,就是无论如何,钱包发送操作后,你钱包内剩余的比特币总余额,绝对不会错。
这个剩余的余额,是这个Wallet.dat钱包里面的所有地址的余额累加得来的。(可能是100个地址,也可能此时已经超过了100个地址)
具体为啥要找零机制,因为你钱包里面有余额的地址当初可能并不是一次送进来的BTC,可能还分几次进来的。比特币每次的交易转账信息都记录在比特币的那条
互联网区块链上,是并不记录在钱包内的。
你这次发送的比特币数量未必能正好是某次送进来的数量。而且还要考虑矿工搬运费的消耗。一般都是凑不准的。
所以当初程序就这么写出来了,搞得每次发送后,地址上的余额全部都乱掉的。一般来说,人是看不出这里面的规律,你就当成是是软件的随机策略好了。
所以,每次发送币后,你的钱包可能就不再是原来那个钱包了。(里面的地址表已经有变化,某种情况下会多出一条地址的),你就需要重新备份你的最新的Wallet.dat。因为原来你备份的Wallet.dat里面的信息已经不足以涵盖了你现在的钱包内的新信息了。如果你不备份,一旦硬盘上的新Wallet.dat出意外,你这部分新信息就永久丢失了。丢失的信息无论是地址,还是私钥,都会导致这个丢失地址上的币从你的钱包消失。
你向自己钱包里面的地址发币也是这个结果,余额都会乱掉。但总额是不会错的,肯定是损失掉一次矿工搬运费后的总余额。