python简单区块链模拟详解

最近学习了一点python,那就试着做一做简单的编程练习。

首先是这个编程的指导图,如下:

对的,类似一个简单区块链的模拟。

代码如下:

class DaDaBlockCoin:

  #index 索引,timestamp 时间戳,data 交易记录,self_hash交易hash,last_hash,上个hash
  def __init__(self,idex,timestamp,data,last_hash):
    self.idex = idex
    self.timestamp = timestamp
    self.data = data
    self.last_hash = last_hash
    self.self_hash=self.hash_DaDaBlockCoin()

  def hash_DaDaBlockCoin(self):
    sha = hashlib.md5()#加密算法,这里可以选择sha256,sha512,为了打印方便,所以选了md5
    #对数据整体加密
    datastr = str(self.idex)+str(self.timestamp)+str(self.data)+str(self.last_hash)
    sha.update(datastr.encode("utf-8"))
    return sha.hexdigest()

def create_first_DaDaBlock(): # 创世区块

  return DaDaBlockCoin(0, datetime.datetime.now(), "love dadacoin", "0")

# last_block,上一个区块
def create_money_DadaBlock(last_block): # 其它块
  this_idex = last_block.idex + 1 # 索引加1
  this_timestamp = datetime.datetime.now()
  this_data = "love dada" + str(this_idex) # 模拟交易数据
  this_hash = last_block.self_hash # 取得上一块的hash
  return DaDaBlockCoin(this_idex, this_timestamp, this_data, this_hash)

DaDaBlockCoins = [create_first_DaDaBlock()] # 区块链列表,只有一个创世区块
nums = 10
head_block = DaDaBlockCoins[0]
print(head_block.idex, head_block.timestamp, head_block.self_hash, head_block.last_hash)
for i in range(nums):
  dadaBlock_add = create_money_DadaBlock(head_block) # 创建一个区块链的节点
  DaDaBlockCoins.append(dadaBlock_add)
  head_block = dadaBlock_add
  print(dadaBlock_add.idex, dadaBlock_add.timestamp, dadaBlock_add.self_hash, dadaBlock_add.last_hash)

打印结果如下:

与开头的指导思路完美契合,虽然只是很简单的模拟。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

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

    译者注:随着比特币的不断发展,它的底层技术区块链也逐步走进公众视野,引起大众注意.本文用不到50行的Python代码构建最小的数据区块链,简单介绍了区块链去中心化的结构与其实现原理. 尽管一些人认为区块链是一个等待问题的解决方案,但毫无疑问,这种新技术是计算机的奇迹.但是,区块链到底是什么呢? 区块链 它是比特币或其他加密货币进行交易的数字账本,账本按时间顺序记录并对外公开. 在更一般的术语中,它是一个公共数据库,新数据存储在一个名为块的容器中,并被添加到一个不可变链(后来的区块链)中添加了过去

  • Python实现类似比特币的加密货币区块链的创建与交易实例

    虽然有些人认为区块链是一个早晚会出现问题的解决方案,但是毫无疑问,这个创新技术是一个计算机技术上的奇迹.那么,究竟什么是区块链呢? 区块链 以比特币(Bitcoin)或其它加密货币按时间顺序公开地记录交易的数字账本. 更通俗的说,它是一个公开的数据库,新的数据存储在被称之为区块(block)的容器中,并被添加到一个不可变的链(chain)中(因此被称为区块链(blockchain)),之前添加的数据也在该链中.对于比特币或其它加密货币来说,这些数据就是一组组交易,不过,也可以是其它任何类型的数据

  • 使用Python从零开始撸一个区块链

    作者认为最快的学习区块链的方式是自己创建一个,本文就跟随作者用Python来创建一个区块链. 对数字货币的崛起感到新奇的我们,并且想知道其背后的技术--区块链是怎样实现的. 但是完全搞懂区块链并非易事,我喜欢在实践中学习,通过写代码来学习技术会掌握得更牢固.通过构建一个区块链可以加深对区块链的理解. 准备工作 本文要求读者对Python有基本的理解,能读写基本的Python,并且需要对HTTP请求有基本的了解. 我们知道区块链是由区块的记录构成的不可变.有序的链结构,记录可以是交易.文件或任何你

  • Python学习入门之区块链详解

    前言 本文将给大家简单介绍关于区块链(BlockChain)的相关知识,并用Python做一简单实现.下面话不多说,来一起看看详细的介绍: 什么是区块链 简单来说,区块链就是把加密数据(区块)按照时间顺序进行叠加(链)生成的永久.不可逆向修改的记录.具体来说,它区块链是由一串使用密码学方法产生的数据块组成的,每一个区块都包含了上一个区块的哈希值(hash),从创始区块(genesis block)开始连接到当前区块,形成块链.每一个区块都确保按照时间顺序在上一个区块之后产生,否则前一个区块的哈希

  • Python实现基于POS算法的区块链

    区块链中的共识算法 在比特币公链架构解析中,就曾提到过为了实现去中介化的设计,比特币设计了一套共识协议,并通过此协议来保证系统的稳定性和防攻击性. 并且我们知道,截止目前使用最广泛,也是最被大家接受的共识算法,是我们先前介绍过的POW(proof of work)工作量证明算法.目前市值排名前二的比特币和以太坊也是采用的此算法. 虽然POW共识算法取得了巨大的成功,但对它的质疑也从来未曾停止过. 其中最主要的一个原因就是电力消耗.据不完全统计,基于POW的挖矿机制所消耗的电量是非常巨大的,甚至比

  • Python从零开始创建区块链

    作者认为最快的学习区块链的方式是自己创建一个,本文就跟随作者用Python来创建一个区块链. 对数字货币的崛起感到新奇的我们,并且想知道其背后的技术--区块链是怎样实现的. 但是完全搞懂区块链并非易事,我喜欢在实践中学习,通过写代码来学习技术会掌握得更牢固.通过构建一个区块链可以加深对区块链的理解. 准备工作 本文要求读者对Python有基本的理解,能读写基本的Python,并且需要对HTTP请求有基本的了解. 我们知道区块链是由区块的记录构成的不可变.有序的链结构,记录可以是交易.文件或任何你

  • python简单区块链模拟详解

    最近学习了一点python,那就试着做一做简单的编程练习. 首先是这个编程的指导图,如下: 对的,类似一个简单区块链的模拟. 代码如下: class DaDaBlockCoin: #index 索引,timestamp 时间戳,data 交易记录,self_hash交易hash,last_hash,上个hash def __init__(self,idex,timestamp,data,last_hash): self.idex = idex self.timestamp = timestamp

  • 200行代码实现blockchain 区块链实例详解

    了解blockchain的概念很简单(区块链,交易链块):它是分布式的(即不是放置在同一台机器上,不同的网络设备上的)数据库支持主办记录日益增长的名单.但是,这也是容易混淆blockchain与我们试图帮他解决了目标 - 在人们心中的那一刻,这个词是相当强烈的交易,合同或智能cryptocurrency的概念有关. 只有在这里blockchain - 是不是一回事比特币,并理解链块的基本知识比它似乎更容易,尤其是在,它是基于源代码的情况下.在本文中,我们提出了建立与在JavaScript中200

  • web3.js调用链上的方法操作NFT区块链MetaMask详解

    目录 实例化链上方法 MetaMask 首先要初始化web3 实例化链 调用链上方法授权 调用游戏链上方法质押NFT 实例化链上方法 公司的项目全是区块链项目,最近这个项目是要构建一个链上的游戏社区,目前这个功能是用户可以质押NFT到游戏的链上,然后游戏那边就可以有人去参加竞赛,然后质押人可以赎回NFT. MetaMask web3.js MetaMask 浏览器插件用的是小狐狸MetaMask 网络用的是测试网络Rinkeby,记得切换网络,把设置 > 高级 > 显示测试网络 打开 let

  • python简单爬虫--get方式详解

    目录 环境准备 进行爬虫 参考 总结 简单爬虫可以划分为get.post格式.其中,get是单方面的获取资源,而post存在交互,如翻译中需要文字输入.本文主要描述简单的get爬虫. 环境准备 安装第三方库 pip install requests pip install bs4 pip install lxml 进行爬虫 1.获取网页数据. import requests from bs4 import BeautifulSoup url = "https://cn.bing.com/sear

  • 详解python实现简单区块链结构

    区块链 比特币从诞生到现在已经10年了,最近接触到了区块链相关的技术,为了揭开其背后的神秘面纱,我就从头开始构建一个简单的区块链. 从技术上来看:区块是一种记录交易的数据结构,反映了一笔交易的资金流向.系统中已经达成的交易的区块连接在一起形成了一条主链,所有参与计算的节点都记录了主链或主链的一部分. 一.比特币内部结构 比特币内部结构有四部分: previous hash: 上一个区块的hash data:交易数据 time stamp:区块生成的时间戳 nonce:挖矿计算次数 二.实现的比特

  • Python人工智能构建简单聊天机器人示例详解

    目录 引言 什么是聊天机器人? 准备工作 创建聊天机器人 导入必要的库 定义响应集合 创建聊天机器人 运行聊天机器人 完整代码 结论 展望 引言 人工智能是计算机科学中一个非常热门的领域,近年来得到了越来越多的关注.它通过模拟人类思考过程和智能行为来实现对复杂任务的自主处理和学习,已经被广泛应用于许多领域,包括语音识别.自然语言处理.机器人技术.图像识别和推荐系统等. 本文将介绍如何使用Python构建一个简单的聊天机器人,以展示人工智能的基本原理和应用.我们将使用Python语言和自然语言处理

  • Python做简单的字符串匹配详解

    Python做简单的字符串匹配详解 由于需要在半结构化的文本数据中提取一些特定格式的字段.数据辅助挖掘分析工作,以往都是使用Matlab工具进行结构化数据处理的建模,matlab擅长矩阵处理.结构化数据的计算,Python具有与matlab共同的特点:语法简洁.库丰富,对算法仿真来说都是一门简洁易用的语言. Python做字符串匹配相对来说上手比较容易,且具有成熟的字符串处理库re供我们使用: 在re库的帮助下,只需简单的两步就可完成匹配工作,对做数据分析/算法的工作者来说,轻松了许多: ste

  • python中yield的用法详解——最简单,最清晰的解释

    首先我要吐槽一下,看程序的过程中遇见了yield这个关键字,然后百度的时候,发现没有一个能简单的让我懂的,讲起来真TM的都是头头是道,什么参数,什么传递的,还口口声声说自己的教程是最简单的,最浅显易懂的,我就想问没有有考虑过读者的感受. 接下来是正题: 首先,如果你还没有对yield有个初步分认识,那么你先把yield看做"return",这个是直观的,它首先是个return,普通的return是什么意思,就是在程序中返回某个值,返回之后程序就不再往下运行了.看做return之后再把它

  • python实现简单区块链结构

    区块链 比特币从诞生到现在已经10年了,最近接触到了区块链相关的技术,为了揭开其背后的神秘面纱,我就从头开始构建一个简单的区块链. 从技术上来看:区块是一种记录交易的数据结构,反映了一笔交易的资金流向.系统中已经达成的交易的区块连接在一起形成了一条主链,所有参与计算的节点都记录了主链或主链的一部分. 一.比特币内部结构 比特币内部结构有四部分: previous hash: 上一个区块的hash data:交易数据 time stamp:区块生成的时间戳 nonce:挖矿计算次数 二.实现的比特

  • Python实现ATM简单功能的示例详解

    目录 一.局部变量.全局变量 二.global关键字 三.编写ATM程序 要求 详细步骤 存在问题 改进 完整代码 一.局部变量.全局变量 1.什么是局部变量 作用范围在函数内部,在函数外部无法使用 2.什么是全局变量 在函数内部和外部均可使用 3.如何将函数内定义的变量声明为全局变量 使用global关键字,global变量 二.global关键字 思考: num=100 def testsA() print(num) def testB() num=200 print(num) testA(

随机推荐