1.5 两种简单的加密货币
高飞币GoofyCoin
◊ 第一个规则:指定高飞可以随时创建新币,且这些新创建的币都属于他。
为创建新币,高飞生成一个他之前从未生成的唯一的货币编号(uniqueCoinID),并建立字符串“CreateCoin [uniqueCoinID]”。
然后,他使用秘密签署密钥计算这个字符串的数字签名,该字符串与高飞的签名就构成一单位币。任何人都可以验证该新币包含高飞有效签名,因此该新币为有效币。
◊ 第二个规则:币的所有人可以通过签署声明表示“将这个币转给X”(其中X为公钥),将其转给另一个人。
(图, 高飞币创造集交易过程)
◊ 任何人都可以验证一只币的有效性,跟随哈希指针追溯到它是由高飞创建,并验证过程中所有签名。
高飞币的安全隐患——双重支付问题:假设爱丽丝通过把她签署的声明发送给鲍勃,即将她的币转给鲍勃,但并没有告诉其他人。她也可以创建另一个签名,声明将同样一只币转给了查克(Chuck)。
!!!双重支付是任何加密货币需要解决的主要问题之一。
财奴币ScroogeCoin
财奴币是以高飞币为基础创建的,但在数据结构方面更复杂。解决了双重支付问题。
一个叫财奴的指定实体将负责公布包含所有发生过的交易历史记录的仅增账目(append-only ledger),账目的仅增特性保证了写入这个账目的任何数据都会永久保留下来。如果账目真的为仅增,通过要求所有的交易在被接收前都写入项目,我们可以用其防止双重支付的发生。
财奴可以建立一个区块链(我们之前已经讨论过其数据结构),对于区块链,财奴要进行数字签名,因此,这从而就形成了一系列数据块,每个数据块都包含一次交易,每个区块包含交易的ID、交易的内容,以及上一个区块的哈希指针。财奴数字签名是针对最后一个哈希指针(它约束整个结构中所有的数据),并将签名与区块链一起发布。
在财奴币中,只有在由财奴签名的区块链的交易才算数。
财奴币中有两种交易。第一种是造币(CreateCoins),可以在一次交易中创建多个币量。
造币交易创造多个货币。每一个货币在交易中都有一个序号。其次,每一个货币也有一定的数量,来对应某个数目的财奴币。最后,每一个货币还有一个造币记录,在货币被制造出来的时候对应的公钥。因此,造币交易创造了多个不同数量和归属于不同拥有者的新货币。我们将这些货币称为虚拟货币ID,指的是该次交易中交易ID和货币序号的组合。
第二种交易是付币(PayCoins)。这一交易会消耗币,就是说消除它们,并创建具有相同总值的新币。新币可能属于不同的人(公钥),这一交易必须由每一个支付该币的人来进行签署。
如果以下四个条件为真,付币交易有效:
● 被消耗的币为有效货币,即它们是在之前的交易中创建的。
● 被消耗的币没有在之前的某交易中被消耗掉。就是说,本次交易不是双重支出。
● 本次交易产生的币值量等于消耗的币值量,也就是说,只有财奴才可以创建新币。
● 本次交易被消耗的所有币均有其所有者的有效签署。
财奴存在的问题:中心化。财奴的权利太大,他可以停止支持其他用户的交易,可以拒绝公开交易还可以想要多少币,就给他自己创建多少。财奴也可能厌倦整个系统,因此完全停止更新区块链。
为改善财奴币,并建立一个可行系统,我们需要解决的主要技术问题是:我们是否能让系统“去财奴化”?