40行python开发一个区块链
链客,专为开发者而生,有问必答!
此文章来自区块链技术社区,未经允许拒绝转载。
尽管有人认为区块链目前还是个不成熟的解决方案,但它无疑称得上是计算机发展历史上的一个奇迹。但是,到底区块链是什么呢? 我们将通过动手实现一个迷你的区块链来帮你真正理解区块链技术的核心原理。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服务层,以及限制在一定时间内可以添加到链中的新块数量的工作量证明算法。
相关文章:

网络实验的背景流
在最近做的网络实验中,发现背景流必须要先于实验流开始,并且要长于实验流的时间,这样才能看出实验流的规律。如果背景流后发于实验流,就会变成竞争模式,实验流就会被抢占或者挤压。转载于:https://www.cnblogs.com/fen…

python捕获异常后处理_python异常捕获处理
一、异常处理 在程序运行过程中,总会遇到各种各样的错误。程序一旦出错就停止运行了,此时就需要捕捉异常,通过捕捉到的异常,我们再去做对应的处理 写一个函数,实现除法运算 def calc(a,b): return a/b print(calc(5,1)…

《JS权威指南学习总结--第十一章子集和扩展》
js子集和扩展:http://www.cnblogs.com/ahthw/p/4298449.html ES6新增let和const关键字:http://www.cnblogs.com/telnetzhang/p/5639949.html JS中 var 和 let 关键字的区别:http://www.w3cfuns.com/notes/21400/891cac0f6bff2d7f25d3084618e8…

最常见的 35 个 Python 面试题及答案
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 作为一个 Python 新手,你必须熟悉基础知识。在本文中我们将讨论一些 Python 面试的基础问题和高级问题以及答案,以帮助你完…

PHP 中日期时间函数 date() 用法总结
[导读] date()是我们常用的一个日期时间函数,下面我来总结一下关于date()函数的各种形式的用法,有需要学习的朋友可参考。格式化日期date() 函数的第一个参数规定了如何格式化日期 时间。它使用字母来表示日期和时间 格式化日期date() 函数的第一个参数规…

mac mysql的安装
mac是重装的系统,很干净,没有xmpp等组合的服务器。 1. 安装mysql server https://dev.mysql.com/downloads/mysql/ 这里是官网地址,选择需要的版本下载,我下载的是第一个dmg的,进入后,会让登陆或注册&#…

windows系统和linux系统可以使用相同的js代码吗_「React 手册 」在 Windows 下使用 React , 你需要注意这些问题...
大家好,本篇内容,我要和大家聊聊使用 Windows 开发 React ,你需要注意的一些问题。首先说明下,我不是使用 windows 进行开发,因为其配置开发环境来说不是特别方便,我更喜欢 苹果mac 或者乌班图这样的系统&a…

以太坊:比特币 + 无限可能
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 还记你得刚学编程时,第一次使用“对象”的感觉吗?还记你第一次尝试函数式编程的样子吗?这些编程范式࿰…

thinkphp5内置标签
thinkphp5内置标签 知道内置标签怎么用,查手册的时候好查 却功能的时候在里面找着来用 内置标签一览 1 内置标签2 3 变量输出使用普通标签就足够了,但是要完成其他的控制、循环和判断功能,就需要借助模板引擎的标签库4 功能了,系统…

python可视化窗口制作一个摇骰子游戏_使用python制作一个抽奖小游戏——骰子游戏...
1.模拟真实环境掷骰子 从Python标准库中调用模块:random——random中包含以各种方式生成随机数的函数 从random中引用randint这一函数——骰子都是有固定面数 from random import randint **2. **创建Die类**** 骰子属性sides(面数)默认为6面…

C#拾遗(一、基本类型)
1. C#是一种块结构语言,用花括号{}分块,但是用#region和#endregion来定义可以展开和折叠的代码区域 #region 这是引用区 using System; ...... #endregion 2. C#简单类型都是小写,bool,string类型要区别于Java的写法;float、decim…

我不喜欢Go语言的十个理由
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 Go 语言有多火爆?国外如 Google、AWS、Cloudflare、CoreOS 等,国内如七牛、阿里、知乎等都已经开始大规模使用 Go 语言开发…

写扩展性好的代码:函数
http://blog.jobbole.com/107442/转载于:https://www.cnblogs.com/answercard/p/8862006.html

PHP学习笔记:万能随机字符串生成函数(已经封装好)
做验证码用到的,然后就把这个函数封装起来,使用时候要设置2个参数: $str设置里要被采集的字符串,比如: $strefasfgzsrhftjxjxjhsrth; 则在函数里面生成的字符串就回从efasfgzsrhftjxjxjhsrth里面随机抓取; …

python中getopt函数_python getopt模块详解
getopt这个函数 就是用来抽取 sys.argv 获得的用户输入来确定执行步骤。 getopt是个模块,而这个模块里面又有getopt 函数,所以getopt需要这样这样用。 getopt.getopt( [命令行参数列表], "短选项", [长选项列表] ) 该函数返回两个值. opts 和a…

Go语言的前景分析
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 抓住时代的趋势 在上篇文章中,也就是那个跨维度的打击,是可以直接秒杀的中,提到这个时代的问题,这次…

SQL获取当月天数的几种方法
SQL获取当月天数的几种方法 原文:SQL获取当月天数的几种方法 日期直接减去int类型的数字 等于 DATEADD(DAY,- 数字,日期) 下面三种方法: 1,日期加一个月减去当前天数,相当于这个月最后一天的日期。然后获取天数。(注意,…

移动端zepot媒体查询media queries
使用zepot做轮播图<head> <meta charset"utf-8"> <meta name"viewport" content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, minimum-scale1.0"> <title>jd首页</title> <link…

前端try catch是如何捕获异常的_一文告诉你如何优雅处理前端异常?
前端一直是距离用户最近的一层,随着产品的日益完善,我们会更加注重用户体验,而前端异常却如鲠在喉,甚是烦人。一、为什么要处理异常?异常是不可控的,会影响最终的呈现结果,但是我们有充分的理由…

区块链热度不断,那么究竟是泡沫还是未来?
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链究竟是泡沫还是未来,需要落脚到实际运用中去判断。区块链区别于传统服务器,其宗旨不是为现实世界带来某个特定的产品&…

集成 Kendo UI for Angular 2 控件
伴随着 Angular 2 的正式 release,Kendo UI for Angular 2 的第一批控件已经发布了,当前是 Beta 版本,免费使用。 官方站点:Kendo UI for Angular 2 Kendo UI for Angular 被打包成独立的多个 NPM package,在 Progres…

按钮垂直居中_带下拉按钮的动态图表
小伙伴们好啊,今天和大家一起分享一个图表制作的技巧,先来看看效果:这个图表里,其实有三个数据系列,分别是一深一浅两个颜色的条形图,再就是大大的圆圈儿,其实是用散点图模拟出来的。先来看数据…

第一周Access课总结
第一周Access课总结 1:这节课学到了什么? 这节课重点学了数据库是用来干什么 做什么的 老师怕我们理解不了 用了很长时间向我们举了很多的例子 让我们终于知道了数据库是用来干嘛的了 顾名思义 数据库就是存放数据的仓库 是长期存放在计算机内 有组织…

以太坊,EOS和其他DApps的总数达到2,432,但没有大规模采用
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 根据分散应用监测网站StateOfTheDApps,每月创建的新DApps数量的最高水平是2018年12月。去年最后一个月共有179个新的DApps上线。 以太…

docker logstash_用于监视Kubernetes和Docker的六大开源工具
Kubernetes和Docker是在DevOps圈中最常听到的两个词。Docker是一个工具,它使你能够以容器化的方式运行应用程序,Kubernetes是一个用于编排、管理容器的平台——如果你想使用Docker CLI去手动地管理数千个容器,这是不切实际的。然而࿰…

大道至简第一章读后感
当今社会,信息化飞速发展,软件的需求也越来越高,而《大道至简》给我们点透了编程的精义。 大道至简第一是讲的便是编程的精义,文章借愚公移山这个故事来阐释编程的基本思路:出现一个问题(惩山北之塞&#x…

nginx resolver 指令的使用
官方解释下就是:反向代理的场景,upstream后端用域名时,配置resolver以便于nginx能够解析该域名 Configures name servers used to resolve names of upstream servers into addresses 官网地址:http://nginx.org/en/docs/http/ngx…

以太坊和EOS DApp数量上升
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 目前,在最受欢迎的智能合约平台以太坊和EOS上,每月大约有180个新的去中心化应用程序(DApps),该数量处于历史最高…

转载iOS开发中常见的警告及错误
iOS警告收录及科学快速的消除方法 前言:现在你维护的项目有多少警告?看着几百条警告觉得心里烦么?你真的觉得警告又不是错误可以完全不管么? 如果你也被这些问题困惑,可以和我一起进行下面的操作。其实大部分的警告都是…

数学思想 —— 低维与高维的统一
在平面几何有勾股定理:“假设三角形ABC的两边AB、AC互相垂直,则有关系: AB2AC2BC2当我们拓展到空间,类比平面几何的勾股定理并研究三棱锥的侧面面积与底面面积的关系时,我们可得到相应结论:假设三棱锥A-BCD…