山东建筑大学区块链@IT·互联网

你看过各种眼花缭乱的数字货币, 但你知道数字货币是如何产生的吗

2018-04-10  本文已影响47人  程序猿的雕刻时光

上一篇文章我介绍了密码学,通过简单易懂的例子说明数字货币中应用的加密技术。今天会继续帮大家搞清楚其它相关技术,数字货币是如何产生的。

图片来自于网络

数字货币需要考虑两方面:货币的创造和货币的交易。

货币的创造

我们假设在一个简单的数字货币中,银行A可以随意定义一个字符串uniqueCoinID作为币。

这个币用数字形式表达:

Coin0 = Enc(创建币 + uniqueCoinID,银行A的私钥)

备注:Enc代表加密函数

实质上就是银行A用自己的私钥对"创建币+uniqueCoinID"进行加密,这样就是一个数字货币了。

如果银行A把这个数字货币卖给用户B, 那么银行A可以创造一个新的交易数据:

Coin1 = Enc(支付给 + 用户B公钥 + H(Coin0),银行A私钥)

备注:H代表哈希函数

在这里使用用户B的公钥表示用户B的身份。

用户B可以任意创建公钥来表示自己的身份,这个就是数字货币的匿名性。

这个数据公布之后,就表示用户B收到了银行A给他的数字货币。

同样的,用户B把数字货币卖给用户C,那么用户B可以创造一个新的交易数据:

Coin2 = Enc(支付给 + 用户C公钥 + H(Coin1),用户B的私钥)

这个数据公布之后,就表示用户C收到了用户B给他的数字货币。

图片来自于网络

其实所谓某个人给了某个人的数字货币,只不过就是在账本上记录了这些交易记录,然后修改每个人的余额,上面的Coin0、Coin1、Coin2其实仅仅是一个交易记录。

货币的交易

如果我们把很多的交易记录放到一起,那么就形成了一个区块。可以认为一个区块就是一个子账本,子账本里面记录了很多不同人之间的交易。

通过追溯,我们就可以知道谁给了谁钱,然后就知道每个人账户里面有多少钱。

图片来自于网络

但是这个会造成一个问题,就是多重支付:

用户B可以把这个币Coin1支付给用户C之后,在用户D还没收到这项交易通知时,由于网络传递存在延迟,用户B还可以把Coin1支付给用户D。

这样用户B就可以用同样的数字货币进行多重消费而无法避免。

为了解决双重支付的问题,我们需要修改一下数字货币协议的内容。

下图显示了数字货币产生和货币交易的过程:

数字货币的产生和交易区块

其中显示了要消耗的币的代号以及需要交易的价值和接收者。transID73 代表了一个账本(区块),代号73。

左图在货币产生过程中,一共产生了三次货币,金额分别是 3.2、1.4、7.1。产生的货币分别给了三个人,用recipient(接收者)标出。

右图显示了交易,产生的货币,通过交易给了不同的人。交易的区块最后有一个发送方的签名,就是用发送方的私钥加密这个区块,用来确认这个确实是发送方发出来的。

在这种情况下,银行A就可以建立起一个区块链,如下图所示:

将区块链接,形成区块链​

每个区块链都表示产生货币或者交易货币。每个区块链都包含着上一个区块链的哈希值。

当新的区块产生的时候,银行A会来验证区块里面的每一项交易是不是有多重支付的嫌疑。如果每个交易都是合法的,那么银行A就会把新的区块加到链上,从而形成区块链。

大家可以认为区块是一个小账本,把小账本合起来变成了一个大账本,也就是区块链。

这个可以解决双重支付的问题, 但是需要银行A来执行,并没有去中心化。

预告:下一篇文章我会介绍比特币是如何实现去中心化的。

我会持续分享和区块链相关的干货,还会有一些投资建议和挖矿技巧,让小白也能看得懂。想上车的小伙伴们请多多关注、评论、点赞、转发,非常非常感谢!

上一篇下一篇

猜你喜欢

热点阅读