区块链开发底层交易虚拟币的找零机制是什么?

来源:互联网 发布:timeedit控件优化 编辑:程序博客网 时间:2024/05/03 08:09

区块链爱好者(QQ:53016353)

山寨币的找零机制一直让人有些迷惑,明明只向一个地址发送了山寨币为什么 blockchain 上面的显示的有时是1个地址对多个地址,有时是多个地址对1个地址,有时又显示多个地址对多个地址?



为什么山寨币资深用户要提醒大家当山寨币钱包交易100次以上时再次交易后要重新备份钱包,恢复以前的钱包备份有可能会遭遇损失?


是的,这一切都是因为山寨币的找零(Change)机制,详细为大家解释一下山寨币的找零机制是怎样运作的。


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


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


比如你想从商店买一块钱的棒棒糖,你打开你的钱包,发现里面只有一张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 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 8个月宝宝吃了纸怎么办 宝宝出生两天了不吃不喝怎么办 八个月宝宝阴唇边红肿痛怎么办 儿童五周岁九个月比同龄矮怎么办 8个月宝宝长牙母乳喂养咬人怎么办 6周的孩子视力低常怎么办 宝宝吃了甜食生痰咳嗽怎么办 两个月的边牧抵抗力差怎么办 阴茎勃起后向上翘的厉害怎么办 5个月宝宝发烧38.5度怎么办 9个月宝宝发烧38.5度怎么办 八个月宝宝只吃母乳不吃奶粉怎么办 八个月母乳不够宝宝不吃奶粉怎么办 八个月宝宝吃母乳不吃奶粉怎么办 八个月宝宝戒奶不吃奶粉怎么办 刚满月的宝宝发烧38度怎么办 未满月的宝宝发烧38度怎么办 半月大的婴儿吃奶就漾奶怎么办 上司交给你不能完成的任务怎么办 电脑光驱里放入光碟放不出来怎么办 黑暗之魂3太难了怎么办 苹果手机下载的游戏闪退怎么办 宝宝两岁了不怎么爱拉大便怎么办? 小狗脖子发硬疼的直叫怎么办 厨房里有很多小虫子围着鸡蛋怎么办 狗生小狗后几天不吃饭怎么办 还没满月的小兔子突然死了怎么办 宝宝小鸡被蚊子咬后肿得很大怎么办 不知道是哪知兔子下的小兔怎么办 兔子生完小兔不吃东西了怎么办 人工喂养七天的小羊拉希怎么办 仔兔出生3天吃过奶就尿怎么办 小兔子买回来两天不拉屎怎么办 大狗生了小狗把小狗咬死了怎么办 狗妈妈一直咬小狗的脐带怎么办 狗狗体内驱虫驱不干净怎么办 打老鼠脚被老鼠咬了怎么办 天正画的cad打开显示空白怎么办 苹果手机信息被拉进群聊怎么办 空调的控制线的报验资料怎么办 窗窗户罩子护栏上的瓦楞板怎么办