Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >用不到 50 行的 Python 代码构建最小的区块链

用不到 50 行的 Python 代码构建最小的区块链

作者头像
企鹅号小编
发布于 2017-12-25 09:14:39
发布于 2017-12-25 09:14:39
6760
举报
文章被收录于专栏:企鹅号快讯企鹅号快讯

译文:CSDN - 黑色巧克力

geek.csdn.net/news/detail/228355

尽管一些人认为区块链是一个等待问题的解决方案,但毫无疑问,这种新技术是计算机的奇迹。但是,区块链到底是什么呢?

区块链

它是比特币或其他加密货币进行交易的数字账本,账本按时间顺序记录并对外公开。

在更一般的术语中,它是一个公共数据库,新数据存储在一个名为块的容器中,并被添加到一个不可变链(后来的区块链)中添加了过去的数据。在比特币和其他加密货币的情况下,这些数据是一组交易记录。当然,数据可以是任何类型的。

区块链技术已经催生了新的、完全数字化的货币,如比特币和莱特币,这些货币并不是由中央政府发行或管理的。因此为那些认为今天的银行系统是骗局或终将失败的人带来了新的自由。区块链所包含的以太坊技术对分布式计算进行了变革创新,它引入了一些有趣的概念,比如智能合约

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

首先将定义块将是什么样子。在区块链中,每个块都存储一个时间戳和一个索引。在SnakeCoin中,需要把两者都存储起来。为了确保整个区块链的完整性,每个块都有一个自动识别散列。与比特币一样,每个块的散列将是块索引、时间戳、数据和前块哈希的加密哈希。数据可以是你想要的任何东西。

importhashlibashasher

classBlock:

def__init__(self,index,timestamp,data,previous_hash):

self.index=index

self.timestamp=timestamp

self.data=data

self.previous_hash=previous_hash

self.hash=self.hash_block()

defhash_block(self):

sha=hasher.sha256()

sha.update(str(self.index)+

str(self.timestamp)+

str(self.data)+

str(self.previous_hash))

returnsha.hexdigest()

这一步后有块结构,但现在是创建区块链,所以需要向实际的链中添加块。如前所述,每个块都需要上一个块的信息。但是按照这个说法就有一个问题,区块链的第一个区块是如何到达那里的呢?不得不说,第一个块,或者说是起源块,它是一个特殊的块。在很多情况下,它是手动添加的,或者有独特的逻辑允许添加。

下面将创建一个函数简单地返回一个起源块以便产生第一个区块。这个块是索引0,它具有任意的数据值和“前一个哈希”参数中的任意值。

importdatetimeasdate

defcreate_genesis_block():

# Manually construct a block with

# index zero and arbitrary previous hash

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

defnext_block(last_block):

this_index=last_block.index+1

this_data="Hey! I'm block "+str(this_index)

this_hash=last_block.hash

returnBlock(this_index,this_timestamp,this_data,this_hash)

大部分的工作已经完成,现在可以创建区块链了。在这次的示例中,区块链本身是一个简单的Python列表。列表的第一个元素是起源块。当然,还需要添加后续的块,因为SnakeCoin是最小的区块链,这里只添加20个新的块。可以用for循环来生成新块。

# Create the blockchain and add the genesis block

blockchain=[create_genesis_block()]

previous_block=blockchain[]

# How many blocks should we add to the chain

# after the genesis block

num_of_blocks_to_add=20

# Add blocks to the chain

foriinrange(,num_of_blocks_to_add):

block_to_add=next_block(previous_block)

blockchain.append(block_to_add)

previous_block=block_to_add

# Tell everyone about it!

print"Block #{} has been added to the blockchain!".format(block_to_add.index)

print"Hash: {}\n".format(block_to_add.hash)

下面来测试一下目前产生的区块链。

本文来自企鹅号 - 程序员的那些事媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 程序员的那些事媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
用不到50行的Python代码构建最小的区块链
本文用不到50行的 Python 代码构建最小的数据区块链,简单介绍了区块链去中心化的结构与其实现原理。
CSDN技术头条
2018/02/13
1.5K2
用不到50行的Python代码构建最小的区块链
原 区块链是什么?彻底理解只需40行pyt
尽管有人认为区块链目前还是个不成熟的解决方案,但它无疑称得上是计算机发展历史上 的一个奇迹。但是,到底区块链是什么呢? 我们将通过动手实现一个迷你的区块链来帮你 真正理解区块链技术的核心原理。pyth
用户1408045
2018/05/07
6640
原                                                                                区块链是什么?彻底理解只需40行pyt
50 行 Python 代码构建一个区块链
尽管有人认为区块链 (blockchain) 是一个答案先于问题的技术,但毫无疑问, 这项新的技术已然是一个计算的奇迹。不过,到底区块链是什么呢
用户1558438
2018/08/23
7190
20分钟,我用简单的Python代码创建了一个完整的区块链!想学吗?
这是篇技术文,我们会用Python一步步搭建一个完整的区块链。不过,在此之前,咱们还是先说说你什么你该学习如何从零搭建一个区块链。
区块链大本营
2018/07/25
5800
20分钟,我用简单的Python代码创建了一个完整的区块链!想学吗?
如何用Python构建区块链应用:从基础到实践的全面指南
随着区块链技术的不断发展,越来越多的人开始关注如何利用Python构建区块链应用。本文将介绍区块链的基础概念,并通过Python代码示例演示如何实现一个简单的区块链应用。
一键难忘
2024/06/25
5410
在.Net Core中构建一个基本的区块链
介绍 区块链技术是比特币的基础,比特币是世界上最流行的加密货币。随着比特币的普及,区块链的曝光率也很高。人们现在也开始在非加密货币类型的应用程序中使用区块链。看看中本聪(Satoshi Nakamot
程序你好
2018/07/20
1.3K0
50行python代码构建一个最小的区块链
虽然有些人认为区块链(blockchain)技术的应用场景还有待研究,但毫无疑问,这一新颖技术的出现是计算界的奇迹。那么,什么是区块链?
诸葛青云
2019/10/31
7940
50行python代码构建一个最小的区块链
前沿Python技术:用不到50行的Python代码构建最小的区块链
该文介绍了如何使用不到50行的Python代码构建一个最小的区块链,该区块链可以存储时间戳和索引,以及一个自动识别散列函数。虽然区块链技术已经催生了新的、完全数字化的货币,如比特币和莱特币,但SnakeCoin可以更加灵活地使用区块链技术,为不同的场景提供不同的解决方案。
企鹅号小编
2017/12/27
7570
前沿Python技术:用不到50行的Python代码构建最小的区块链
专家精品|密码朋克的社会实验(三):比特币发明了什么
格林威治时间,2009-01-03 18:15:05。 比特币创始人中本聪挖出了比特币的首个区块——创世区块(Genesis Block)。 从此,拉开了十年来轰轰烈烈的数字货币、区块链浪潮的序幕。 密码朋克也开始了他们最深刻的一次社会实验。 虽然大家每天使用 HTTPS 协议浏览网页,用 HASH 算法保证下载资源的完整,插着 U 盾使用网上银行,但背后的密码学一直都是小透明的存在,大众对密码学的认知基本还停留在上世纪的谍战电台中。 直到比特币横空出世,携带「重新发明货币」之威势,第一次让密码学知识
云鼎实验室
2020/08/03
5470
用Python从零开始创建区块链
作者认为最快的学习区块链的方式是自己创建一个,本文就跟随作者用Python来创建一个区块链。 对数字货币的崛起感到新奇的我们,并且想知道其背后的技术——区块链是怎样实现的。 但是完全搞懂区块链并非易事,我喜欢在实践中学习,通过写代码来学习技术会掌握得更牢固。通过构建一个区块链可以加深对区块链的理解。 准备工作 本文要求读者对Python有基本的理解,能读写基本的Python,并且需要对HTTP请求有基本的了解。 我们知道区块链是由区块的记录构成的不可变、有序的链结构,记录可以是交易、文件或任何你想要的数
Python中文社区
2018/02/01
2K0
用Python从零开始创建区块链
用Python实现一个基于RSA算法的区块链客户端(区块链系列4)
编译 | 晚君、Molly、蒋宝尚 来源 | BlockChange 区块链作为比特币和其他加密货币的核心技术,在最近几年引起了全世界的注意,但是各国这一颠覆性的技术态度不一,因为其去中心化的分布式结构,可以使用户之间直接进行交流,无需中心节点参与的这种技术模式对银行、证券等机构带来了极大影响。 在本篇文章,抛开介绍区块链的技术特点和应用场景,手把手的教大家如何用python实现一个基础的区块链,和一个区块链的客户端。 我们实现的区块链有如下几个特性: 可以向区块链中添加多个节点。 工作量证明(PoW)
量化投资与机器学习微信公众号
2018/05/28
1.5K0
用 Go 构建一个区块链 ---- Part 1: 基本原型
翻译的系列文章我已经放到了 GitHub 上:blockchain-tutorial,后续如有更新都会在 GitHub 上,可能就不在这里同步了。如果想直接运行代码,也可以 clone GitHub 上的教程仓库,进入 src 目录执行 make 即可。
用户1558438
2018/08/23
3290
基于Java语言构建区块链(一)—— 基本原型
区块链技术是一项比人工智能更具革命性的技术,人工智能只是提高了人类的生产力,而区块链则将改变人类社会的生产关系,它将会颠覆我们人类社会现有的协作方式。了解和掌握区块链相关知识和技术,是我们每位开发人员必须要去做的事情,这样我们才能把握住这波时代趋势的红利。
王维
2018/04/12
2.1K7
基于Java语言构建区块链(一)—— 基本原型
JavaScript实现简单区块链
用JavaScript来实现一个简单的区块链。通过实现过程,你将理解区块链是什么:区块链就是一个分布式数据库,存储结构是一个不断增长的链表,链表中包含着许多有序的记录。
笔阁
2018/09/04
1.2K0
JavaScript实现简单区块链
原 区块链是什么?彻底理解只要50行rub
区块链是什么?作为一个Ruby开发者,理解区块链的最好办法,就是 亲自动手实现一个。只需要50行Ruby代码你就能彻底理解区块链技术的核心原理! 如果你希望马上开始学习以太坊区块链应用开发,可以访问汇智网提供的出色的在线互动教程: 以太坊智能合约和应用开发入门 以太坊去中心化电商DApp实战开发 区块链 = 区块组成的链表? blockchain.ruby: class Block attr_reader :timestamp attr_reader :data attr_reader
用户1408045
2018/05/07
6470
用go撸一个简易版的区块链
这个最初的版本时多年以前学习go的时候,自己撸的一个简易版本的区块链。不过麻雀虽小,五脏俱全。通过这个代码你了解区块链内部的大概运行机制时没有问题的。
用户7634691
2023/02/24
4220
用go撸一个简易版的区块链
用Django实现一个可运行的区块链应用
对数字货币的崛起感到新奇的我们,并且想知道其背后的技术——区块链是怎样实现的。 但是完全搞懂区块链并非易事,我喜欢在实践中学习,通过写代码来学习技术会掌握得更牢固。通过构建一个区块链可以加深对区块链的理解。 准备工作 本文要求读者对Python有基本的理解,能读写基本的Python,并且需要对HTTP请求有基本的了解。 我们知道区块链是由区块的记录构成的不可变、有序的链结构,记录可以是交易、文件或任何你想要的数据,重要的是它们是通过哈希值(hashes)链接起来的。 环境准备 环境准备,确保已经安装Pyt
Python中文社区
2018/03/26
1.3K0
我独到的技术见解:2023年的技术变革:三重驱动力的影响和启示
2023年,技术领域正在经历着巨大的变革,这一切受到了三个主要驱动力的影响:人工智能(AI)、区块链技术和边缘计算。本文将深入探讨这三个驱动力对技术和行业的影响,并为读者提供在这个时代中持续创新的启示。
Echo_Wish
2024/02/01
1740
我仅用50 行 JavaScript 代码从头构建区块链,向你介绍区块链的工作原理
区块链,区块链,区块链!在过去的十年里,我们一次又一次地听到这个技术流行语。它被认为是 21 世纪最重要的发明之一。
winty
2021/12/10
1.2K0
我仅用50 行 JavaScript 代码从头构建区块链,向你介绍区块链的工作原理
推荐阅读
相关推荐
用不到50行的Python代码构建最小的区块链
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文