如何创建一个最小的区块链

作者: 云时之间 | 来源:发表于2018-03-05 20:57 被阅读110次

这是我在一个外文网站上看到的一篇博文,作者通过50行代码写出了区块链的简化版本.麻雀虽小,但是五脏俱全.我觉得通过实践,这是了解区块链的一个好的方式.于是我将代码实现了下.并且通过这篇文章,说说我读这个代码的时候的思路.

在这串代码里我们主要使用了两个库.这两个库都是python里边自带的,一个是hashlib,这个库里边提供了主要的摘要算法.比如MD5和SHA等.另外一个库是datatime模块.这个模块是python里提供时间日期的模块.在区块链里边,每个区块都需要储存一个时间戳(也就是当前的时间)和一个索引.因此这个库为我们提供了使用的工具.

1:初始化函数

首先我们定义区块链的初始参数,我们这里因为是最基本的区块链,这里只包含我们需要的几个参数,但是这些参数是大部分区块链所需要的.比如每个链的索引位置,时间数据以及哈希值.

2:加密函数

区块链说到底就是产生一堆数值让大家去计算,看谁算的快,而计算的时候我们需要的一个算法就是在这个加密函数里产生.

这里我们使用的是hashlib里边的sha256加密,然后将其进行更新,为了确保整个区块链的完整性,每个区块都会有一个自我识别的散列。和比特币一样,每个块的散列将是块的索引,时间戳,数据和前一个块散列的散列的加密散列.然后我们去使用hexdigest返回一个16进制的加密结果.

3:初始化函数

这个创建一个起源块,起始的链的数目是0,这个应该要注意一下.其他就是你想给定的参数,具体传递的参数参照函数1.

4:后续函数

这个函数是为以后的区块链产生做准备,这里边的规则是可以我们认为给定的,所以我们现在看很多的山寨币或者空气币光凭发行方的一口说法是不可信的,因为他们既做裁判有做庄家,一旦改变了规则,散户被套牢的风险极大.

5:调用函数区块链本身就是一个简单的Python列表。列表的第一个元素是创世区块。当然,我们需要添加后续的块。由于这个例子是最小的区块链,我们只会添加100个新区块。我们可以用for循环来做到这一点。

接下来无非就是调用上边的参数,然后输入你想要产生的块链就可以.

6:运行结果

这就是这个小程序所提供的一切。如果想要让这个规模达到当今生产区块链的规模,我们必须添加更多功能,如服务器层来追踪多台机器上链块的变化,以及工作量验证算法,以限制添加到给定的时间段。

如果你想了解更多地关于区块链的技术,可以查看原始比特币白皮书。祝你好运!

相关文章

  • 如何创建一个最小的区块链

    这是我在一个外文网站上看到的一篇博文,作者通过50行代码写出了区块链的简化版本.麻雀虽小,但是五脏俱全.我觉得通过...

  • Web3极客日报 #3

    如何构建一个最小化的区块链 原文链接(英文) 中文翻译 @Caos: 文章作者描述了一款最小可用的区块链需要具备什...

  • [译] NaiveCoin: 如何创建一种加密货币 #1

    1: 搭建最小可用的区块链 原文链接 #1: Minimal working blockchain 概要 区块链...

  • 区块链算法及Go语言实现

    索引:理论部分构建一个自己的区块链1.创建区块2.创建区块链3.http server暴露区块链接口 代码传送门:...

  • 只用120行Java代码写一个自己的区块链

    通过本文,你将可以做到: 1、创建自己的区块链2、理解 hash 函数是如何保持区块链的完整性的3、如何创造并添加...

  • 哈希与区块链

    了解区块链哈希如何工作非常重要。但为了做到这一点,我们需要先了解区块链创建的核心原则之一。区块链技术是上个世纪最具...

  • JS 实现区块链—工作量证明

    今天我们通过 js 实现一个区块链应用,帮助您更好地理解区块链技术原理 创建区块链 区块链验证 工作量证明防纂改 ...

  • 使用Java创建第一个区块链

    本系列教程的目的是帮助你了解如何开发区块链技术。在本教程中,我们将: 创建你的第一个非常基础的区块链。 实施简单的...

  • 以太坊区块链搭建

    如何安装 查看安装好的geth版本号 开始创建以太坊私有链 初始化一个创世区块 初始化创世区块时,要先创建一个ge...

  • go公链实战0x05交易(1)

    区块链区块的作用是打包链上产生的交易,可以说交易是区块链至关重要的一个组成部分.在区块链中,交易一旦被创建,就没有...

网友评论

    本文标题:如何创建一个最小的区块链

    本文链接:https://www.haomeiwen.com/subject/kekkfftx.html