链客,专为开发者而生,有问必答!

此文章来自区块链技术社区,未经允许拒绝转载。

尽管有人认为区块链目前还是个不成熟的解决方案,但它无疑称得上是计算机发展历史上的一个奇迹。但是,到底区块链是什么呢? 我们将通过动手实现一个迷你的区块链来帮你真正理解区块链技术的核心原理。python源代码保存在Github。

区块链

区块链是一个公开的数字账本,它按时间顺序记录比特币或其他加密货币发生的交易。

更一般的讲,区块链是一个公共数据库,新的数据将存储在一个被称为”块“的容器中,然后块会被添加到一个不可篡改的链,因此被称为”区块链“。当我们谈到比特币或其他加密货币时,这些数据指的是交易记录。当然,你可以将任何类型的数据存入区块链。

区块链技术已经催生了全新的、完全数字化的货币,如比特币和莱特币,这些货币并不是由中央政府发行或管理的。这一技术给那些不认可当前银行系统人带来了新的自由。区块链同时也为分布式计算带来了革命性的创新,例如,以太坊区块链引入了一些有趣的概念,比如智能合约。

在本文中,我将用不到50行的Python 2代码来做一个简单的区块链。我称它为SnakeCoin。

我们首先将定义“块”的数据结构。在区块链中,每个块都存储一个时间戳和一个可选地索引。在SnakeCoin中,我们将把两者都存储起来。为了确保整个区块链的完整性,每个块都有一个用于自我标识的哈希。与比特币一样,每个块的哈希将是对块索引、时间戳、数据和前块哈希计算出的加密哈希值。其中你可以在数据中保存任何内容。

太棒了!现在有了块的数据结构,不过我们的目的是实现一个区块链,所以需要将块添加到一个链中。如前所述,每个块都需要前一个块的信息。但是按照这个说法就会有一个问题,如何添加区块链的第一个块?嗯,链中的第一个块,或者说创世块,是一个特殊的块。在很多情况下需要手动添加或者采用单独的处理逻辑。

下面将创建一个函数,它的作用就是简单地返回一个创世块。这个块的索引为0:

现在已经创建好了创世块,接下来需要一个函数,以便在区块链中生成后续的块。这个函数将以链中的前一个块为参数,生成并返回新块。当新块的哈希值计算利用了来自前面块的信息时,区块链的完整性就会随着每个新块而增加。如果不这样的话,外部组织就更容易“改变过去”,用他们伪造的块来取代链中的块。这一系列的块哈希可以作为加密的证据,有助于确保一旦将块添加到区块链,它就不能被替换或删除。

大部分的重要工作已经完成,现在可以创建区块链了!在我们的实现中,区块链就是一个简单的Python列表。列表的第一个元素是创世块。当然,我们还需要添加后续的块。因为SnakeCoin可以说是世界上最迷你的区块链,我们在这里只添加20个新的块。可以用for循环来生成新块:

下面来测试一下我们的区块链。

跑通了!如果希望在控制台中查看更多信息,可以编辑源文件并打印每个块的时间戳或块中的数据。

这就是SnakeCoin的全部内容。为了使SnakeCoin能够达到生产级区块链的规模,还需要添加更多的功能,比如用来跟踪多个节点上区块链变化的P2P服务层,以及限制在一定时间内可以添加到链中的新块数量的工作量证明算法。

如果想学习Python,可以加154+725.1666,我可以提供学习方法、学习路径、学习材料、学习平台给你。

也欢迎大家订阅公众号:Python从程序猿到程序员

尽管有人认为区块链目前还是个不成熟的解决方案,但它无疑称得上是计算机发展历史上的一个奇迹。但是,到底区块链是什么呢? 我们将通过动手实现一个迷你的区块链来帮你真正理解区块链技术的核心原理。python源代码保存在Github。

区块链

区块链是一个公开的数字账本,它按时间顺序记录比特币或其他加密货币发生的交易。

更一般的讲,区块链是一个公共数据库,新的数据将存储在一个被称为”块“的容器中,然后块会被添加到一个不可篡改的链,因此被称为”区块链“。当我们谈到比特币或其他加密货币时,这些数据指的是交易记录。当然,你可以将任何类型的数据存入区块链。

区块链技术已经催生了全新的、完全数字化的货币,如比特币和莱特币,这些货币并不是由中央政府发行或管理的。这一技术给那些不认可当前银行系统人带来了新的自由。区块链同时也为分布式计算带来了革命性的创新,例如,以太坊区块链引入了一些有趣的概念,比如智能合约。

在本文中,我将用不到50行的Python 2代码来做一个简单的区块链。我称它为SnakeCoin。

我们首先将定义“块”的数据结构。在区块链中,每个块都存储一个时间戳和一个可选地索引。在SnakeCoin中,我们将把两者都存储起来。为了确保整个区块链的完整性,每个块都有一个用于自我标识的哈希。与比特币一样,每个块的哈希将是对块索引、时间戳、数据和前块哈希计算出的加密哈希值。其中你可以在数据中保存任何内容。

太棒了!现在有了块的数据结构,不过我们的目的是实现一个区块链,所以需要将块添加到一个链中。如前所述,每个块都需要前一个块的信息。但是按照这个说法就会有一个问题,如何添加区块链的第一个块?嗯,链中的第一个块,或者说创世块,是一个特殊的块。在很多情况下需要手动添加或者采用单独的处理逻辑。

下面将创建一个函数,它的作用就是简单地返回一个创世块。这个块的索引为0:

现在已经创建好了创世块,接下来需要一个函数,以便在区块链中生成后续的块。这个函数将以链中的前一个块为参数,生成并返回新块。当新块的哈希值计算利用了来自前面块的信息时,区块链的完整性就会随着每个新块而增加。如果不这样的话,外部组织就更容易“改变过去”,用他们伪造的块来取代链中的块。这一系列的块哈希可以作为加密的证据,有助于确保一旦将块添加到区块链,它就不能被替换或删除。

大部分的重要工作已经完成,现在可以创建区块链了!在我们的实现中,区块链就是一个简单的Python列表。列表的第一个元素是创世块。当然,我们还需要添加后续的块。因为SnakeCoin可以说是世界上最迷你的区块链,我们在这里只添加20个新的块。可以用for循环来生成新块:

下面来测试一下我们的区块链。

跑通了!如果希望在控制台中查看更多信息,可以编辑源文件并打印每个块的时间戳或块中的数据。

这就是SnakeCoin的全部内容。为了使SnakeCoin能够达到生产级区块链的规模,还需要添加更多的功能,比如用来跟踪多个节点上区块链变化的P2P服务层,以及限制在一定时间内可以添加到链中的新块数量的工作量证明算法。

40行python开发一个区块链相关推荐

  1. python开发一个区块链只需40多行

    40多行python代码开发一个区块链?可信吗?我们将通过Python 2动手开发实现一个迷你区块链来帮你真正理解区块链技术的核心原理.python开发区块链的源代码保存在Github. 尽管有人认为 ...

  2. python做客户端适合吗_太简单!只学十分钟,Python菜鸟也能开发一个区块链客户端...

    原标题:太简单!只学十分钟,Python菜鸟也能开发一个区块链客户端 作者:Adil Moujahid 编译:kou.Eli 本文转自区块链大本营(ID:blockchai_camp),转载需授权 区 ...

  3. 通过python构建一个区块链来学习区块链

    了解区块链Blockchains如何工作的最快方法就是构建一个区块链.你来到这里是因为,和我一样,你对加密钱币的崛起感到很兴奋.而且你想知道区块链是如何工作的,想了解它们背后的基本技术. 但理解区块链 ...

  4. 如何用 Python 快速开发一个区块链数据结构?

    作者 | arjuna sky kok 整理 | Aholiab 出品 | 区块链大本营(blockchain_camp) 根据IEEE此前的一项调查,Python已成为最受开发者欢迎的语言之一.由于 ...

  5. 手机编写python挖矿_用 Python 从零开发一个区块链应用

    本篇教程是面向各能力层级的 Python 开发者介绍区块链(blockchain).你将通过从零实现一个公链(public blockchain)和构建一个简单的应用来确切理解区块链到底是什么. 你将 ...

  6. 太简单!只学十分钟,Python菜鸟也能开发一个区块链客户端

     区块链技术以其去中心化特性成为又一具有颠覆性特征的技术.Python作为一种面向对象的解释型计算机程序设计语言,因其具有丰富和强大的库,常被称为"胶水语言",简单.易上手,是区 ...

  7. 如何开发一个区块链应用程序

    区块链是一项巧妙的发明,有望使数字世界更加安全和分散.通过允许数字信息的分发而不是复制,区块链技术创建了一种新型互联网.最初是为数字货币比特币而设计的,现在科技界正在寻找该技术的其他潜在用途.在不久的 ...

  8. 200行代码构建一个区块链

    区块链的基本概念非常简单:一个存储不断增加的有序记录的分布式数据库.然而,当我们谈论区块链时,我们很容易将其与区块链要解决的问题混淆,比如误解为流行的,基于区块链的,像比特币和以太坊一样的项目.术语& ...

  9. 用Python从零开始创建区块链

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 前言 如果你还没有听说过 3 点钟区块链群,说明你还不是链圈的人:如果你还没有加入 3 点钟区块链群,说明你还不是链圈的 ...

最新文章

  1. 海量秋招面试资料等你来拿!你离大厂也许并不远
  2. polyrate使用方法_pytorch必须掌握的的4种学习率衰减策略
  3. 关于java代码生成器---上篇之原理
  4. Novas Verdi、Debussy ,Synopsys VCS,Candence NC-Verilog,Mentor Graphics工具介绍
  5. mysql dba系统学习(21)mysql存储引擎InnoDB
  6. Java实战之04JavaWeb-02Request和Response
  7. mysql有imp命令吗_快速MySQL Imp
  8. javacript 裁切图片
  9. mysql 连接 中文_大佬们E语言连接MYSQL输出中文乱码怎么破
  10. nginx下只能通过域名,禁止使用ip访问
  11. 素筛打表(输出小于n最大素数)
  12. Kube-Proxy IPVS模式源码分析
  13. win10安装Unbuntu的Linux系统的虚拟机02
  14. 高效能人士的七个习惯_如何成为高效能人士?——《高效能人士的七个习惯》读后感...
  15. 魔兽世界模型文件.m2 在D3D下的渲染
  16. Maven —— was cached in the local repository, resolution will not be reattempted until the update ...
  17. 中国工程院院士倪光南:政府应加大核心技术市场化引导
  18. HEAD detached at ---
  19. java append 报错_Append HDFS报错 is already the current lease holder
  20. flink运行job任务时报错 Could not retrieve the execution result

热门文章

  1. 下列关于Java多线程并发控制_下列关于Java多线程并发控制机制的叙述中,错误的是...
  2. python缩进在程序中长度统一且强制使用_Python习题纠错1
  3. JSP的执行过程(详解)
  4. python opencv local_threshold_Python-OpenCV中的cv2.threshold
  5. 微信小程序之apply和call ( 附示例代码和注释讲解) apply call  bind
  6. iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用(上)
  7. 我是如何设计 Upload 上传组件的
  8. 旅行家的预算[贪心]
  9. android 52 粘滞广播
  10. ceph存储引擎bluestore解析