python开发区块链

50行Python代码构建小型区块链DogCoin(狗币)

本文介绍了如何使用python构建一个小型的区块链技术,使用Python2实现,代码不到50行。

这个简单的区块链。这将被称为DogCoin(狗币)。

(一)定义区块链的块结构。

像比特币一样,我们的DogCoin每个区块将包括作为区块的索引的哈希值,时间戳,数据以及前一个块的哈希值和新的哈希值。如下图:

index

timestamp

data

previous_hash

hash

Python代码:

import hashlib as hasher

class Block:

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()

def hash_block(self):

sha = hasher.sha256()

sha.update(str(self.index) +

str(self.timestamp) +

str(self.data) +

str(self.previous_hash))

return sha.hexdigest()

(二)创建创世区块。

如前所述,每个块都需要上一个块的信息。但是这就出现了一个问题:区块链中的第一个区块,也就是“创世区块”,如何创建?

按照模块化原则,我们将创建一个函数,只需返回一个创世区块,该区块的索引为0,它在“previous hash”参数中具有任意数据值和任意值。

如下图:

Index:0

timestamp

Data:Genesis Block

previous_hash

hash

Python代码:

import datetime as date

def create_genesis_block():

# Manually construct a block with

# index zero and arbitrary previous hash

return Block(0, date.datetime.now(), “Genesis Block”, “0”)

(三) 创建后续区块。

我们需要一个新的函数来生成区块链中的后续区块。该函数将链中的前一个区块作为参数,创建要生成的区块的数据,并返回具有其相应数据的新块。新产生的区块会存储先前区块中的哈希值,区块链的完整性随着每个新的区块而增加。这个哈希链作为加密证明,有助于确保一旦新区块被添加到区块链中,它不能被替换或删除。

如下图:

Index:2

timestamp

Data:Hey! I’m block 2

previous_hash

hash

Python代码:

def next_block(last_block):

this_index = last_block.index + 1

this_timestamp = date.datetime.now()

this_data = “Hey! I’m block ” + str(this_index)

this_hash = last_block.hash

return Block(this_index, this_timestamp, this_data, this_hash)

(四)创建(组装)我们的区块链DogCoin。

区块链其实就是一个将普通指针换成哈希指针的链表,所以每个区块不仅包含了上一个区块的地址,还包括了上一个区块的哈希值 。

列表的第一个元素是创世区块,然后需要添加后续区块。本例中,我们只添加了10个新的块,用for循环搞定。

如下图:

后续区块(4)
后续区块(3)
后续区块(2)
创世区块(1)

Python代码:

# Create the blockchain and add the genesis block

blockchain = [create_genesis_block()]

previous_block = blockchain[0]

# How many blocks should we add to the chain

# after the genesis block

num_of_blocks_to_add = 20

# Add blocks to the chain

for i in range(0, 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 blockchain!”.format(block_to_add.index)

print “Hash: {}n”.format(block_to_add.hash)

(五)打印区块链DogCoin的每个块!

我们的区块链生效了!

完整Python.代码如下:(python 2.7)

import hashlib as hasher

class Block:

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()

def hash_block(self):

sha = hasher.sha256()

sha.update(str(self.index) +

str(self.timestamp) +

str(self.data) +

str(self.previous_hash))

return sha.hexdigest()

import datetime as date

def create_genesis_block():

# Manually construct a block with

# index zero and arbitrary previous hash

return Block(0, date.datetime.now(), “Genesis Block”, “0”)

def next_block(last_block):

this_index = last_block.index + 1

this_timestamp = date.datetime.now()

this_data = “Hey! I’m block ” + str(this_index)

this_hash = last_block.hash

return Block(this_index, this_timestamp, this_data, this_hash)

# Create the blockchain and add the genesis block

blockchain = [create_genesis_block()]

previous_block = blockchain[0]

#Print genesis block

print “DogCoin”

print “—————“

print “block index: {}”.format(blockchain[0].index)

print “timestamp: {}”.format(blockchain[0]. timestamp)

print “data: {}”.format(blockchain[0]. data)

print “previous_hash: {}”.format(blockchain[0]. previous_hash)

print “hash: {}n”.format(blockchain[0].hash)

print “—————“

# How many blocks should we add to the chain

# after the genesis block

num_of_blocks_to_add = 10

# Add blocks to the chain

for i in range(0, 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 blockchain!”.format(block_to_add.index)

#print “Hash: {}n”.format(block_to_add.hash)

print “DogCoin”

print “—————“

print “block index: {}”.format(block_to_add.index)

print “timestamp: {}”.format(block_to_add. timestamp)

print “data: {}”.format(block_to_add. data)

print “previous_hash: {}”.format(block_to_add. previous_hash)

print “hash: {}n”.format(block_to_add.hash)

print “—————“

演示输出:

DogCoin

—————

block index: 0

timestamp: 2018-03-15 13:59:12.750000

data: Genesis Block

previous_hash: 0

hash: 978123c9edd1b41d5e35ce5126169cbd9f6f63efbc538b4d9ca63bb26da1a9b1

—————

DogCoin

—————

block index: 1

timestamp: 2018-03-15 13:59:12.828000

data: Hey! I’m block 1

previous_hash: 978123c9edd1b41d5e35ce5126169cbd9f6f63efbc538b4d9ca63bb26da1a9b1

hash: 0de84484d23722cde7987a9dbe4ed0af9e415679888328fc3b9c069827727cfa

—————

DogCoin

—————

block index: 2

timestamp: 2018-03-15 13:59:12.906000

data: Hey! I’m block 2

previous_hash: 0de84484d23722cde7987a9dbe4ed0af9e415679888328fc3b9c069827727cfa

hash: 7c0ce5d65626e4af2907ef6c8acfe05e9b8c39dcd5229583c0d4bc4f3d66a775

—————

DogCoin

—————

block index: 3

timestamp: 2018-03-15 13:59:12.984000

data: Hey! I’m block 3

previous_hash: 7c0ce5d65626e4af2907ef6c8acfe05e9b8c39dcd5229583c0d4bc4f3d66a775

hash: c1b7d949eea10af88659713b6145bd5069221d8fd49b337be8a8780684e0a16f

—————

DogCoin

—————

block index: 4

timestamp: 2018-03-15 13:59:13.078000

data: Hey! I’m block 4

previous_hash: c1b7d949eea10af88659713b6145bd5069221d8fd49b337be8a8780684e0a16f

hash: 4915c65e6dc42d18cdd5489f458181f746aefafd7bc8b43e8c47c68dd0c90998

—————

DogCoin

—————

block index: 5

timestamp: 2018-03-15 13:59:13.156000

data: Hey! I’m block 5

previous_hash: 4915c65e6dc42d18cdd5489f458181f746aefafd7bc8b43e8c47c68dd0c90998

hash: 95f61d76cabcf80e0ee3549ae88aa96f7b40e76f487ab1baa4ce0dee79fefbe8

—————

DogCoin

—————

block index: 6

timestamp: 2018-03-15 13:59:13.250000

data: Hey! I’m block 6

previous_hash: 95f61d76cabcf80e0ee3549ae88aa96f7b40e76f487ab1baa4ce0dee79fefbe8

hash: 3206120a85d02a7b2b3ab85188913db304e6929141b0e4956a5ab65e21e508fe

—————

DogCoin

—————

block index: 7

timestamp: 2018-03-15 13:59:13.343000

data: Hey! I’m block 7

previous_hash: 3206120a85d02a7b2b3ab85188913db304e6929141b0e4956a5ab65e21e508fe

hash: 54c4229a20dbe5e014b930eb31438c84bc6732240d023c8016dc17ad7b1b0287

—————

DogCoin

—————

block index: 8

timestamp: 2018-03-15 13:59:13.421000

data: Hey! I’m block 8

previous_hash: 54c4229a20dbe5e014b930eb31438c84bc6732240d023c8016dc17ad7b1b0287

hash: 27d4561bd21fd36a794926139de39a3ea32ced70ac19e644544884ea923d418f

—————

DogCoin

—————

block index: 9

timestamp: 2018-03-15 13:59:13.500000

data: Hey! I’m block 9

previous_hash: 27d4561bd21fd36a794926139de39a3ea32ced70ac19e644544884ea923d418f

hash: 143821446e2ccc4d7695242a591e0cd69f689a4b5f3c4c861c736deb8e5bee52

—————

DogCoin

—————

block index: 10

timestamp: 2018-03-15 13:59:13.578000

data: Hey! I’m block 10

previous_hash: 143821446e2ccc4d7695242a591e0cd69f689a4b5f3c4c861c736deb8e5bee52

hash: 1a66358fb32db223a2f998061e3bc90354b0ddb8d2c3a013cc86c63060c5c547

—————

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:dandanxi6@qq.com

(0)
上一篇 2023年 3月 23日 上午8:59
下一篇 2023年 3月 23日 上午9:05

相关推荐

  • 论文是排好版才查重么

    查重时,不同格式的论文有区别吗?-paperccb查查呗论文查重 写论文的时候,我们基本上都是用 word写的,然后以 doc或 docx文件的形式保存。但是,有些学校要求学生把 …

    互联网 2023年 2月 10日
  • 怎么批量把手机号添加为微信好友

    6秒钟就能添加微信好友,不用记住对方的微信号或者手机号。方法也挺简单而且快捷的,老年朋友也能一看就会。 添加微信好友还要什么方法吗?不就是在微信里面扫对方的二维码名片,或者是搜索框…

    2023年 4月 8日
  • 5分钟教你制作ppt快闪动画(ppt爆闪文字开场制作)

    PPT快闪动画虽然看上去很简洁,但搭配上气场强大的BGM,在黑白色调中不断切换,简直就是逼格满满! 那么这个网红PPT快闪动画要怎么做呢?会不会很难?想知道答案的话,就继续往下看吧…

    2022年 12月 26日
  • 计算机系统的基本组成教案,计算机由哪两大系统组成

    计算机系统是由硬件和软件组成,通过运行程序来协调工作。 计算机硬件是物理装置,计算机软件是程序、数据和相关文档的集合。 计算机基本组成 计算机硬件 计算机硬件由五大部件组成,分别是…

    2023年 6月 27日
  • 搜狗输入法截屏快捷键默认是什么

    在搜狗输入法推出之前,大部分人都在使用智能ABC和五笔输入法,这两种输入法现在很多朋友基本上没见过。自从2006年搜狗拼音输入法推出之后,基本上终结了五笔输入法和智能ABC的使用。…

    2023年 1月 10日
  • 软文文案怎么写吸引人,文案软文怎么写吸引人

    在网络比较发达的现在,商业软文成为目前很多企业都在使用的一种推广手段,好的商业软文不仅可以提高客源,增大人流量,也能更好地助力企业快速发展,那么高质量的软文究竟应该如何写呢? 1、…

    2023年 6月 14日
  • q币可以换成q币吗,怎么立即获得大量q币

    Q币对于玩游戏来说那是相当的重要,钱对于我们现实生活中的吃喝拉撒也是相当的重要。当有一天Q币想要换成钱的时候,你发现腾讯不支持这样操作,是不是有些欲哭无泪呢?当然腾讯不准退货,总有…

    2023年 1月 10日
  • 10大功能强大又免费 的英语学习App

    01.扇贝英语 目前口碑最好的单词学习APP。根据记忆曲线重复让你背诵,效果很好,而且里面有很多单词书,适合各种目的的人群。 02.百词斩 特别适合擅长形象记忆的同学。 03.外文…

    互联网 2023年 2月 11日
  • 十大免费软文推广平台,有哪些自媒体平台可以做

    随着互联网的快速发展,自媒体平台已经成为了许多企业和个人宣传品牌、推广产品的重要渠道。然而,对于企业而言,推广软文是必不可少的,因此,寻找一些免费的软文推广平台也变得越来越重要。今…

    2023年 8月 7日
  • 微信零钱里面的零钱通安全吗,把几万块钱放在微信零钱通安全吗

    钱存在微信零钱通里面是绝对的安全,零钱通是保本保息的,可以放心大胆的存。 什么是零钱通? 其实零钱通就是一个理财平台,而这个平台主要是由腾讯理财通和微众银行共同提供的。 而零钱通里…

    2023年 2月 1日