首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用python构建一个自己的区块链(2)

在上一篇文章《用python构建一个自己的区块链》中,提到了单机区块链的构造。但是仅仅有构造是远远不够的,因为那样仅仅是“有”一个区块链,而无法进行任何的操作。本篇的内容就是在其之上构建应用,使其能够“跑起来”。

目录

2-1 进行交易

使用“交易”这个词其实并不准确,更准确的描述应该叫做“数据记录”。所谓的交易,沿用的是比特币的叫法。在比特币中,记录的是交易信息。在其他区块链应用中,也可以记录其他信息,例如声明,公证,whatever。

首先,我们需要声明一个变量存储当前待处理的交易信息:

接下来,将要记录的(交易)信息加入到current_transaction中。这些信息会在下一个区块被挖出来的时候加入其中。

2-2 挖矿

挖矿可以说是区块链最不可或缺的功能了。其原理就是找到一个新的proof_of_work,构造一个新的区块,把要处理的交易信息写入区块中。首先获取当前最后一个块的proof_of_work,然后计算出新的proof_of_work,然后以此构建新的区块。

在这里我们构建新区块的时候,在新的区块中追加了一笔交易,给发现新的区块的用户一笔奖励金(激励机制)。奖励金的发送者是0,即没有发送者,而接收者则是创建新区块的人,即找到新的proof_of_work的人。这里的金额可以是固定值,也可以根据算法即时算出。比特币的每4年减半的特性也是由此定义的。

2-3 密钥和公钥的生成

不论是交易或是记录信息,都需要标识用户的身份。传统的方法,是使用用户名和密码来标识,但是这在p2p的区块链网络中不可行:你不可能将密码存储在别人的终端上。而且,也没有一个可以信得过的中心来验证密码的对错。

区块链通常使用非对称加密来进行身份标识。每个用户拥有一个私钥,并能由私钥生成公钥。反过来,公钥无法生成私钥。公钥可以作为交易的接收方的标识使用,并全网公布。

当你需要发送一笔金额的时候,则应该用自己的私钥来生成公钥,以防止造假。用户可能知道他人的公钥,但是因为不知道他的私钥,也就无法代替他进行发送,而只能发送给他。这样就避免了信息泄漏的风险。

我们将密钥存储在本地的wallet.dat文件中。如果是第一次打开程序,则会提示用户输入一段代码来帮助生成一个新的密钥。最终的密钥由用户输入的字符串、当前的时间戳以及两个随机数hash而成,有1024位,可以充分避免被碰撞带来的账户泄漏的风险。当然,这个算法和最终密钥的复杂度可以自由更改。

总结

到此,这个简单的单机区块链已经可以运作了。其功能只有交易和挖矿,不过这也就是区块链的最初的雏形。当然,它还不是完善的,区块链技术之所以充满魅力,还是在于它去中心化的特性。

在把这套区块链搬到p2p网络之后,还会面对区块链中最著名也是最复杂的问题,即分歧。这就需要一致性(共识)机制。如果无法达成共识,则需要分叉——这是最终的不得已的方案。

未完待续……

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180309G0K0B500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券