Python区块链的简易实现

发布时间:2022-03-30 09:39:40 人气:36 作者:多测师

  区块链技术因为比特币的火爆而广受关注,我们这里用 python 代码来聊一下区块链技术:

  区块链实现原理的简易描述

  区块链技术做为一种数字记账技术,其核心是将保存了交易数据的区块,以加密的方式,按时间的顺序链式记录。区块链本身就是一个公共的数据库,系统将新诞生的业务数据存储在被称为区块的容器之中,并将该区块添加到已有区块组成的链条之中。有点像贪吃蛇,吃的区块越多,蛇的身体越长;在比特币的应用场景下,这些数据是一组转账交易记录。在共享单车的应用场景下,这些数据就可以是借车还车的交易记录。

  区块链的简易实现代码

  # -*- coding:utf-8 -*-

  import hashlib

  from datetime import datetime

  # 定义区块类

  class Block(object):

  def __init__(self, index, time, data, pre_hash):

  self.index = index

  self.time = time

  self.data = data

  self.pre_hash = pre_hash

  self.hash = self.hash_block()

  def hash_block(self):

  sha = hashlib.sha256()

  sha.update("{}{}{}{}".format(self.index,self.time,self.data,self.pre_hash))

  return sha.hexdigest()

Python区块链的简易实现

  # 创建初始区块

  def head_block_create():

  return Block(0,datetime.now(),"Head Block","0")

  # 创建新的区块

  def new_block(last_block):

  _index = last_block.index + 1

  _time = datetime.now()

  _data = "block {}".format(_index)

  _hash = last_block.hash

  return Block(_index,_time,_data,_hash)

  blockchain = [ head_block_create()]

  pre_block = blockchain[0]

  print "Block id:0 Hash value:{}".format(blockchain[0].hash)

  # 待测新增区块的数量

  num_block = 10

  for i in range(num_block):

  one_block = new_block(pre_block)

  blockchain.append(one_block)

  pre_block = one_block

  print "Block id:{} Hash value:{}".format(one_block.index, one_block.hash)

  在上述的代码中,区块链核心存储的数据结构是列表,通过 new_block()产生的新区块,被不断的增添到区块链的尾部,每个区块的 Hash 值中包含该区块所有的数据信息,在计算该 Hash 值的过程中需引用前一区块的 Hash 值,故而实现了防篡改。而区块链数据库的最大价值就是这种高度防篡改的可信计算。在我们的简易区块链实现中成功体现了这一点。在商用级的区块链应用中,新建区块的过程被称为智能合约,区块链就是通过智能合约不断的壮大。

  以下是代码的运行结果,在不同的时间下,运行结果不同。

  运行结果

  Block id:0 Hash value:b04fc0d7ae7d5021da4e49cdbebaf3bc1e27d926a905cc365a160aaf5136692b

  Block id:1 Hash value:3f6b49529a0333b359d49ddf6f91d7943f1a551d1d3374daa5510ad6b1eed517

  Block id:2 Hash value:7089817515c5c9ef0ec0a4c50912b7c268345b9441aa870373949c3b2f804204

  Block id:3 Hash value:28f20d2ea8ae5fef85acd89ad10370022930438a5329fa54eaf8bb8994c1cddc

  Block id:4 Hash value:e033054800d81e60571611cf7fe845faefb5d0779b0604b931c17004aaea7ca1

  Block id:5 Hash value:7428e1ab5a1bda7cd6fc62a210e9c1d4c807a9390b2b3726a304bfd120f3ea74

  Block id:6 Hash value:0770614e40da99f52910946fcc8703565f6a13b40b88b272b66847fbf8efb38c

  Block id:7 Hash value:2c2940adb46c77daefe6e5415d1cb1db991e9337e8fca763855d889baa5133aa

  Block id:8 Hash value:e09d2e1183c3d7bb123f207c25ef9bdd387b2baad183730d62fb49811e0493e5

  Block id:9 Hash value:b35deb22f71b0f845cf0ccdf4f999437bd78303e4ba5a09e633e2c1d14fd652c

  Block id:10 Hash value:c63c5fbee68db81e40fdae2973c35b7e9556e9bbf2fd0737df3f145634f7e557

  以上内容为大家介绍了Python区块链的简易实现,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注多测师。https://www.e70w.com/xwzx/

返回列表
在线客服
联系方式

热线电话

17727591462

上班时间

周一到周五

二维码
线