05 June 2018

第一部分:跟我一步一步看懂比特币现金(BCH)的交易(1)

第三章. 交易



再往下看就是533125区块包含的交易了,一共包含了149笔交易。


Pasted Graphic 7.png

⚠️Tips:

因为BCH地址及交易hash比较长,为节省篇幅,以下都用开头5个字符加省略号代替。

“hash”中文音译为哈希,可以简单认为一个hash字符串是一个唯一的标识,比特币地址、交易地址都是一个hash字符串,后面还会有一些详细解释。


首先看一下默认的第一笔交易,以3a517...开头的这笔,这里有一个绿色的“Coinbase”字样,代表这笔交易是这个区块的挖矿奖励,一共12.5个BCH,外加0.01350578BCH的交易手续费,发送到 qrcye… 这个BCH地址,这个BCH地址就是矿工的收币地址。


接下来看一下第二笔交易,交易号 a8e02… ,这是一笔正经的用户交易。


这笔交易分成两部分:输入 和 输出。

输入可以包含多个比特币地址(这笔交易只包含1个地址),输出也可以包含多个比特币地址(这笔交易包含两个地址)。


所谓一笔交易就是把若干比特币地址(输入)中的币转移到另外一些比特币地址(输出)中去。


输入地址中的BCH总和 = 输出地址中的BCH总和 + 矿工手续费


以上面交易为例:


16.00048706 BCH(地址qz42k...) = 5.99988877BCH (地址qr62d...)+ 10.00057569BCH(地址qquu2...)+ 0.00002260BCH(矿工费)


同时我们也注意到Coinbase交易只有输出,没有输入 — 意味着12.5BCH是凭空产生的,所有的比特币都是这样凭空产生的 — 惊不惊喜?意不意外?


现在我们再点击 a8e02… 这个交易,看一下这个交易的详细信息。


Pasted Graphic 8.png

为了方便起见,我们给 qz42k... 这个地址的拥有者起个名字叫Alice。


我猜测这笔交易很可能是Alice给另一个人(我们也给他起个名字叫Bob)转了1笔BCH,金额可能是 6BCH(5.99988约等于6) 或者 10BCH。


有人可能要问了,Alice明明把16BCH输出到了两个地址上,为什么说只转了1笔给Bob呢?又是哪一笔是给Bob的呢?


其实我是基于比特币的“找零机制”做出的猜测,下面就介绍一下比特币的找零机制。


比特币的找零机制有悖于人们的常识,比如我用支付宝给你转100块钱,按照寻常思维,会先从我的支付宝账户扣掉100,然后再在你的支付宝账户加上100,整个交易完成。但比特币不是这样,如果Alice给Bob转10BCH,BCH钱包不会只转出10BCH,而是把Alice的地址中的所有BCH都转出,其中10BCH转到了Bob的钱包地址上,另外6BCH转到哪里了呢?其实这6个BCH是作为找零转到了Alice的另外一个地址上(钱包自动为Alice创建一个新的地址,Alice拥有这个地址的私钥)。


比特币为什么要采用这种奇怪的找零机制呢?一方面是出于保护隐私的考虑,因为在外人看来,只能知道一个地址往另外两个地址转了币,但并不知道哪一笔是转给别人的,哪一笔是转给自己的,以上面的交易为例,外人并不知道是转了6BCH还是10BCH,这无形中给追踪比特币的流向增加了难度,你只能看到比特币在地址之间流动,却不知道其背后的人。不过最重要的一个原因,是为了保护公钥,一个比特币地址一旦发生转账,公钥就暴露了(写到了每笔交易的输出脚本中),虽说目前暴露公钥不是什么大问题,但不敢保证以后量子计算机出现能够破解比特币的加密算法,通过公钥猜出私钥偷走里面的币,但是找零机制保证了存有余额的比特币地址只被使用一次,一旦发生转账,剩下的金额就被发送到一个从未在网上出现过的新地址里,也就谈不上暴露,穷举所有公钥即便是量子计算机也无能为力。从这一点也可以看出比特币发明者-中本聪的深谋远虑。


顺便提一句,在使用比特币全节点钱包的时候,比特币的找零机制会带来一个坑,如果转账次数超过100次,需要重新备份私钥,不然重新导入私钥时可能会导致丢币,因为现在大家大都使用轻钱包,通过若干个单词助记符生成私钥,所以这里不过多做介绍了,感兴趣的自行搜索。


上面一段谈了很多数字加密货币专有的名词,初学者可能难以理解,下面一章就来介绍一下比特币(BCH)的私钥,公钥和地址之间的关系。

第三部分:跟我一步一步看懂比特币现金(BCH)的交易(3)