如何创建一个最小的区块链
链客,专为开发者而生,有问必答!
此文章来自区块链技术社区,未经允许拒绝转载。
这是我在一个外文网站上看到的一篇博文,作者通过50行代码写出了区块链的简化版本.麻雀虽小,但是五脏俱全.我觉得通过实践,这是了解区块链的一个好的方式.于是我将代码实现了下.并且通过这篇文章,说说我读这个代码的时候的思路.
在这串代码里我们主要使用了两个库.这两个库都是python里边自带的,一个是hashlib,这个库里边提供了主要的摘要算法.比如MD5和SHA等.另外一个库是datatime模块.这个模块是python里提供时间日期的模块.在区块链里边,每个区块都需要储存一个时间戳(也就是当前的时间)和一个索引.因此这个库为我们提供了使用的工具.
1:初始化函数
首先我们定义区块链的初始参数,我们这里因为是最基本的区块链,这里只包含我们需要的几个参数,但是这些参数是大部分区块链所需要的.比如每个链的索引位置,时间数据以及哈希值.
2:加密函数
区块链说到底就是产生一堆数值让大家去计算,看谁算的快,而计算的时候我们需要的一个算法就是在这个加密函数里产生.
这里我们使用的是hashlib里边的sha256加密,然后将其进行更新,为了确保整个区块链的完整性,每个区块都会有一个自我识别的散列。和比特币一样,每个块的散列将是块的索引,时间戳,数据和前一个块散列的散列的加密散列.然后我们去使用hexdigest返回一个16进制的加密结果.
3:初始化函数
这个创建一个起源块,起始的链的数目是0,这个应该要注意一下.其他就是你想给定的参数,具体传递的参数参照函数1.
4:后续函数
这个函数是为以后的区块链产生做准备,这里边的规则是可以我们认为给定的,所以我们现在看很多的山寨币或者空气币光凭发行方的一口说法是不可信的,因为他们既做裁判有做庄家,一旦改变了规则,散户被套牢的风险极大.
5:调用函数区块链本身就是一个简单的Python列表。列表的第一个元素是创世区块。当然,我们需要添加后续的块。由于这个例子是最小的区块链,我们只会添加100个新区块。我们可以用for循环来做到这一点。
接下来无非就是调用上边的参数,然后输入你想要产生的块链就可以.
6:运行结果
这就是这个小程序所提供的一切。如果想要让这个规模达到当今生产区块链的规模,我们必须添加更多功能,如服务器层来追踪多台机器上链块的变化,以及工作量验证算法,以限制添加到给定的时间段。
如果你想了解更多地关于区块链的技术,可以查看原始比特币白皮书。祝你好运!
相关文章:

Linux 服务器上快速配置阿里巴巴 OPSX NTP服务
编辑文件 "/etc/ntp.conf",根据情况修改文件内容为: 互联网上的服务器:driftfile /var/lib/ntp/drift pidfile /var/run/ntpd.pid logfile /var/log/ntp.log restrict default kod nomodify notrap nopeer noquery restrict -6 default …

python爬取学校新闻_python-爬取校园新闻首页的新闻
1.作业代码 importrequestsfrom bs4 importBeautifulSoupfrom datetime importdatetime##1.用requests库和BeautifulSoup库,爬取校园新闻首页新闻的标题、链接、正文。# urlhttp://news.gzcc.cn/html/xiaoyuanxinwen/resrequests.get(url) res.encodingutf-8soupBea…

windows环境下,mysql的root密码丢失后重置方法
1、运行窗口输入 services.msc,检查mysql服务是否启动,如果启动手动停止或输入 net stop mysql 停止msyql服务。 2、打开cmd命令行,使用cd命令进入mysql 的bin目录 cd E:\TP\wamp\wamp\bin\mysql\mysql5.7.11\bin(此处是本地mysq…

区块链以及区块链技术总结
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 摘要:区块链是目前一个比较热门的新概念,蕴含了技术与金融两层概念。从技术角度来看,这是一个牺牲一致性效率且…

UOJ#7. 【NOI2014】购票 | 线段树 凸包优化DP
题目链接 UOJ #7 题解 首先这一定是DP!可以写出:\[f[i] \min_{ancestor\ j} \{f[j] (d[j] - d[i]) * p[i] q[i]\}\] 其中\(d[i]\)表示树上\(i\)的深度。 整理一下式子:\[f[i] \min_{ancestor\ j} \{f[j] - d[j] * p[i]\} d[i] * p[i] q…

python中集合的元素可以是任意数据类型_Python之基本数据类型——集合数据类型...
集合set(可变的数据类型): 数据结构以大括号{}表示,各元素逗号隔开,例:{1,2,3,4}。 集合特征:无序,元素不重复 创建集合: s{1,2,3} pirnt(s) #---------------{1,2,3} sset(hello) print(s) #--…

uv_timer_t的释放问题
项目中的计时器模块是用libuv做的,今天发现了点问题,是释放uv_timer_t引起了,我是在uv_timer_start的回调里释放该结构的,这里是不能释放了,因为回调完后,库还会使用uv_timer_t里的数据,之前没出…

区块链分支循环
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 分支循环 程序的流程控制结构一共有三种:顺序结构,选择结构,循环结构。 一、条件语句 1.1 If语句 语法格式…

c和python区别_C语言和python的区别
Python可以说是目前最火的语言之一了,人工智能的兴起让Python一夜之间变得家喻户晓,Python号称目前最最简单易学的语言,现在有不少高校开始将Python作为大一新生的入门语言。本萌新也刚开始接触Python,发现Python与其他语言确实有…

(1)访问控制 (2)final关键字 (3)对象创建的过程 (4)多态
1.访问控制(笔试题)1.1 常用的访问控制符 public - 公有的 protected - 保护的 啥也不写 - 默认的 private - 私有的 1.2 访问控制符的比较 访问控制符 访问权限 本类 本包中的类 子类 其他包的类---------------------------------------------------------------------------…

MySQL安装ODBC驱动出现126错误
需求:MySQL导入ODBC文件,需要安装ODBC驱动。 问题:本机的MySQL是5.0版本,刚开始下载的是5.3ODBC,然后出现以下错误: 解决方法:ODBC版本应该与MySQL版本一致,重新安装5.0版本的ODBC即…

超级账本的由来
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 1.1.1 超级账本的由来 当你拿起这本书开始阅读的时候,说明你对区块链技术已经有了相关的了解,而且想通过自己的努力或团队合…
你为什么应该经常访问招聘网站?招聘网站至少有4个方面的价值!
一、缘起读大学的时候,有时候会感到很迷茫,不知道毕业之后可以做什么,自己能拿到多少的月薪。于是,就想到去参加一些公司的招聘。大二大三的时候,就去武大参加了武汉中地数码等3个公司的笔试。但是,没有交答…

python去重复行_python去除文件中重复的行实例
python去除文件中重复的行,我们可以设置一个一个空list,res_list,用来加入没有出现过的字符行! 如果出现在res_list,我们就认为该行句子已经重复了,可以再加入到记录重复句子的list中。 如下代码࿱…

限制TensorFlow只在CPU上运行的方法
笔记本是NVIDIA GeForce 940M的显卡,只有2G的显存,运行TensorFlow代码时候常出现OOM(Out of Memory)的错误,原因是batch_size设置得太大导致显存不足。如果想让代码仅仅运行在CPU下,可在原代码中加入如下代码: import …

比特币挖矿——区块链技术
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 说明 区块链具有数据运行公开、不可篡改、可溯源、跨国际、去中心化的特点。因此越来越多地被应用在各个领域。区块链主要技术包括:分布…

Python黑帽编程2.4 流程控制
Python黑帽编程2.4 流程控制 本节要介绍的是Python编程中和流程控制有关的关键字和相关内容。 2.4.1 if …..else 先上一段代码: #!/usr/bin/python # -*- coding: UTF-8 -*- xint(input(请输入一个整数:)) if x0: print %d 0 % x elif x<0: print %d <0 % x…

【Flask】视图高级
# 视图高级笔记:### add_url_rule(rule,endpointNone,view_funcNone)这个方法用来添加url与视图函数的映射。如果没有填写endpoint,那么默认会使用view_func的名字作为endpoint。以后在使用url_for的时候,就要看在映射的时候有没有传递endpoi…

振动力学基础与matlab应用_【日文好书推荐】振动与噪声控制技术for机械设计者...
声海译读活动日文小组为大家推荐好书,《振动与噪声控制技术for机械设计者》作者:小林英男,欢迎大家围观讨论提出宝贵意见!目录译文(一)译者:穆瑞林-天津科技大学前言第一章 机械设计开发•设计者对振动•噪声技术入门所…

区块链是互联网未来十年中举足轻重的技术
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链是互联网未来十年中举足轻重的技术 区块链(Blockchain),或者说分布式账本(DLT, Distributed …

利用jdt快速实现pmd的功能
jdt可以做语法树分析,并且支持visitor模式对代码进行分析。跟pmd的分析方式一样,我们只要实现 visitor接口即可实现一个插件。 Service("requestMappingInfoService")public class RequestMappingInfoServiceImpl implements RequestMappingIn…

用R语言做词频统计_R语言 | 词频统计
Python网络爬虫与文本数据分析本章内容导入停用词读数据,分词剔除停用词导入停用词表library(dplyr)## [1] "?" "、" "。" "“" "”" "《" "》" "!" "…

PHP拿到别人项目如何修改为自己
以下为借助google翻译的,个人润色了一下,官方版里面感觉有很多问题,我这里有我个人修改大部分问题的版本,包括翻译完善,有需要的可以联系我:qyj8411163.com 1. 在您网站的根目录创建名为“webim”的文件夹。…

浅析Hyperledger Fabric共识算法
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链系统是一个分布式架构,交易账本信息由各个节点管理,组成一个庞大的分布式账本。在分布式系统中,各个节点收…

python 获取用户ip_Python爬虫教程:你还在苦苦拉票吗?刷票小程序案例原理剖析!...
你还在苦苦拉票吗?前言剖析投票原理处理思路具体实战主要流程具体细节python代码实例python具体细节java代码实现java总结点击此处,获取海量Python学习资料!前言现在生活中离不开各类的比赛,然而,各个比赛离不开投票&a…
下拉菜单被挡住了,DIV置于最底层的方法
网站常会用到一些 下拉菜单,,幻灯片,,,飘浮广告等。但经常会发现。幻灯片会挡住下拉菜单或者飘浮广告等。解决办法有下第一,可将幻灯片所在DIV 置于最底层。添加CSS如下style"z-index:-100;position: …

github的删除
github项目删除 首先找到你要删除的项目,点击开 复制项目名称然后找到Settings 将滚动条滑至底部,找到 Danger Zone 下的 Delete this repository 这里会弹出一个警告对话框 将该项目名称重新输一遍即可 这里会弹出账号重新确认,将密码在输入…

区块链的去中心化VS传统互联网的去中心化:技术与治理的双重困境
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链的去中心化VS传统互联网的去中心化:技术与治理的双重困境11 主要观点: 1、传统互联网经典的去中心化项目BitTorrent…

第三章| 3.1文件处理
1、三元运算 简单条件语句: if 条件成立:val 1 else: val 2 改成三元运算: val 1 if 条件成立 else 2 2、文件处理 (用python对硬盘上的文件操作) 读 读取文件的三个方法:read()、readline()、readlines() 三个方法…

LR常见的报错处理方法
1.LR录制时不弹出IE浏览器 当一台主机上装有多个浏览器,LR录制脚本时,经常遇到打不开浏览器的情况,可以用下面的方法来解决 启动浏览器,打开Internet 选项对话框,切换到高级标签,去掉“启用第三方浏览器扩展…