高飞币是所能想到的最简单的一种加密货币,,就像是个实验室的产物一样,还没有面世就被否决了,毕竟这只是一种最简单的加密货币,简单到都不完全具备货币的属性。
其特性包含两点:
这是高飞币的第一个特性,只要高飞愿意,随时随地都可以创建新币,当然这些新币的所有权都在高飞手中。
在创建新币的时候,高飞需要生成一个唯一的货币编号,也就是高飞币的编码,就可以根据这个货币编码来生产高飞币了。然后,他使用秘密签署密钥计算这个字符串的数字签名,该字符串与高飞的签名就构成一个单位的高飞币。任何人都可以验证该新币包含高飞有效签名,因此该新币为有效币。
转币其实是挺复杂的,并不是简单的交易现金一样,我把钱从我的手中传到你的手中,这钱就是你的了。 转币是需要通过一系列的密码学的加密程序来完成这个功能的:
假设Goofy想要将创建的一只币转给Alice。为达到这个目的,必须要有一个广而告之的声明“Goofy将此币转给Alice”,为此需要明确:
为了明确此币的身份:需要Goofy使用自己的私有签名来造币,该币具有一个unique coinID。由于在高飞币中,只有Goofy本人才可以创造新币,Goofy本人也将通过签署声明表示他使用唯一的货币编号来创建了这个新币,所以其他人只要能够验证这是Goofy创造的新币即可(只有无条件信任Goofy的诚实吗?我想是的,因为只有Goofy才能创造新币,能创造新币的人没有必要创造重复ID的币)。
为了明确是Goofy转给Alice的,高飞需要用自己的私钥和Alice的公钥,并且把该Alice的公钥通过自己的私钥签署到上面声明的“此币”的字符串中。这样就声明了此币是由Goofy转给Alice的。其他人如果要验证交易的真实性,只要拿着Goofy公布的公钥来验证即可。
假设Goofy通过把他签署的声明发送给Alice,即将他的币转给Alice,但并没有告诉其他人。他还可以再创建另一个签名,声明将同样一只币转给了Bob。对于Bob来说,这看起来是一个完全有效的交易,认为他是该币的所有人。Alice和Bob似乎都可以有效表示自己是那个币的所有人。这个就是所谓的双花,或者称双重支付(double spending),Goofy将同样一只币花了两次。当然货币本质上是不可能这样花的。
高飞币很简单,其货币转移机制其实与比特币非常相似,但是因为它并不安全,因此并不适合作为加密货币。
高飞币是有双重支付问题的,一旦有这个问题,就不具备货币的属性了。财奴币(ScroogeCoin)是在高飞币的基础上创建的,为了解决双重支付的问题,所以数据结构上会比高飞币复杂一些。
假设一个叫Scrooge的人,专门负责公布所有发生过交易的历史记录的仅增账目(即这个账目上的数据只可以增加,不能删除和修改),这个仅增账目的特性就保证了写入这个账目的任何数据都将被永久的保留下来。这样就可以所有的交易在被接收钱都写入账目,然后利用这个特性来防止双重支付的发生。因为如果之前的币已经转给了另外一个拥有者,那么大家都可以在这个账目上看到。
为了执行这个为执行这个仅增功能,Scrooge可以建立一个区块链,用作记账功能。对于区块链,财奴要进行数字签名,因此,这就形成了一系列数据区块,每个数据区块都包含一次交易(为了效率可以将多次交易记录到同一个区块上),每个区块包含交易的ID、交易的内容,以及上一个区块的哈希指针。财奴数字签名是针对最后一个哈希指针(它约束整个结构中所有的数据),并将签名与区块链一起发布。
在财奴币中,只有在由Scrooge签名的区块链的交易才有效。任何人都可以通过检验Scrooge在区块中的签名来验证交易是否经过财奴的认可,Scrooge会确保不会认可企图双重支付的交易。
所以带Hash指针的区块链就是为了保障仅增区块,如果在原有区块上增删交易记录或者改变已有交易,是计算困难并且最终是不可行的。
财奴币中有两种交易。第一种是造币(CreateCoins),类似于在高飞币中,Goofy可以创建新币的程序,而Scrooge将其进行了扩展,那就是可以在一次交易中创建多个币。造币交易如果是由Scrooge签署,从定义上说它总是有效的。(我们不会担心Scrooge什么时候有权创建新币或者可以创建多少,正如我们不担心在高飞币中,Goofy可以创建新币那样。这是基于信任的,就像现实中的中央银行负责的那样。)
第二种交易是付币(PayCoins)。这一交易会消耗币,就是说先销毁它们,然后创建数量相同的新币(Alice要付币给Bob,并不是直接像高飞币那样,签署一个Alice要将此币给Bob的声明,而是告诉Scrooge我要将此币给Bob,为此我将销毁我的这个币,然后由Scrooge记账,然后创建新币并分发给Bob)。新币可能属于不同的人(公钥),这一交易必须由每一个支付该币的人来进行签署。因此,如果你是本次交易中将会消耗的某只币的所有人,那么你就需要数字签署该交易,表明你同意花掉这只币。
==由销毁币和记账的行为可以保障不会有双重支出。==记账的行为保障将交易写入历史记录,当每个人都能查看历史记录的时候,这笔交易才真正发生了。因为直到发布该交易区块之前,有可能存在双重支付的行为。
我认为,区块链的本质是解决一个信任问题。基于这一点,就要假设区块链(公有链)上人们都是互不信任的,从而Scrooge这个高度中心化的角色很难被大家所信任,这种具有中央机构的加密货币的方式是很难被匿名系统所接受的。并且,从目前学到的内容而言,记账的查询效率问题如果被放大到中心化上,是不是也会产生某些效率的问题呢?另外,Scrooge虽然不能修改已经产生的区块,但是他仍然有权利拒绝Alice与Bob之间的交易,而且他和Goofy能够创建任意数量的币,会不会出现币的滥用或者超发问题,也是值得考虑的。
所以,我们需要一个去中心化的公开区块链,所有人必须一致同意哪些交易有效,而且有个去中心化的方式来产生货币,
事实上这样的系统就与BitCoin特别相似了。所以一个去中心化的系统需要解决如下的问题:
后面的学习中会一一道来。