这个问题,又衍生另一个问题。
SPV Node需要建立包含所有UTXO的UTXO Pool吗?
我们可以从Wallet(电子钱包)的角度去想这些问题。
Bitcoin的UTXO (Unspent Transaction Output),就是尚未花费的输出,相当于现实世界还没有花出去的钞票。
Software Wallet是SPV Node的一种,它会有一个Database储存属于该Wallet的UTXO Pool。
Wallet为何不存放别人的UTXO呢?
因为这样做没有多大用处。我们知道Wallet,相当于现实世界的钱包,Wallet所记录的UTXO,其值的加总,就相当于现实世界的钱包里放了多少钱。
现实世界里,你的钱包会记录别人的钱包有多少钱吗?
不会的。所以Bitcoin Wallet只记录所属的UTXO就好了。
使用新的Wallet,它的UTXO Pool为空的,因为还没有用它来进行Transaction。只要有Transaction发生,并且该Transaction收集到Block,成为Blockchain,该Transaction的Output就是UTXO了。这时Wallet的UTXO Pool就会记录一笔UTXO了。
UTXO Pool就是Persistent Database,如果被破坏了,UTXO不见了,是否表示钱就不见了?
我们使用Bitcoin不用担心Database消失这件事。因为Wallet的UTXO来自于Blockchain,而每一个Node都有相同的Blockchain。所以UTXO不见了,只要去连网,重新下载UTXO就好了。我们要担心的是Private Key消失或泄露。
即然Wallet的UTXO来自于网路上的Blockchain,为何还要自己保存一份在UTXO Pool?
那是为了Offline Payment方便。可以在离线状况,知道自己有多少钱。甚至可以做到离线支付。
如何预防 Malicious Wallet (恶意钱包)?
Bitcoin Wallet有很多型式,程式是其中一种。我们可以自己写一个Wallet程式,然后建立一个Transaction,去挖别人的UTXO,变成自己的吗?
如果有别人的Private Key,这么做是可行的,因为我们可以拿别人的Private Key对Transaction的Input签名。这样一来,当Transaction上传到某个Node,会被验证通过,进而放到Blockchain,这样钱就要不回来了。
所以Wallet的Private Key非常重要,绝不能泄露出去,也绝不能不遗失。因为若Private Key遗失,我们就没办将UTXO花掉。所以:
“Private Key遗失”,就是钱不见的意思。
“Private Key泄露”,就是钱随时会被愉走的意思。
所以有另一种Wallet叫Paper Wallet,就是将Private Key印出来,长的像钞票似的,上面有Private Key,还有它的二维码。说它长的像钞票,其实就是钞票。和一般钞票不同,这张钞票是不能给别人看到的,自己留者备份,防止Private Key遗失。
下图是“Mastering Bitcoin”这本书里,谈到的Paper Wallet
Paper Wallet安全吗?
这里有一个吊诡的地方。我们做Security System的都知道,存放Private Key最安全的地方是Secure Element,程式是无法读取里面的Private Key。
程式要能读取Private Key,才能列印。
若Private Key能被程式读取,表示它的储存方式是不安全的。
这里面还有很多细节,需要去探讨。用密码去保护Private Key,可能是其中一个方法。目前我还没有明确的答案。
-Count