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

相关推荐

  • 怎样挽回失去的友谊

    如果您觉得自己正在与朋友渐行渐远,或者只是想让现有的友谊更加牢固,那么有一些方法可以加强您的联系。如果您经常沟通并采取适当的步骤成为知心的朋友,您可以克服任何冲突并长期保持友谊。 …

    2023年 1月 14日
  • 微信附近推广需要多少费用,如何加入微信帮忙推广的服务

    相信很多商家看到微信附近推广告都想知道是怎么操作的,怎么开户需要哪些资质,流程是怎么样的,都会有相关的疑问。那么今天我们就一起来看看微信“附近推”广告操作相关流程介绍 1:通过微信…

    2023年 5月 13日
  • 如何注册电子邮箱免费申请

    大家工作中经常用到的电子邮件,如何快速申请免费注册呢?今天小编就以TOMvip邮箱为例教大家一下如何快速申请免费注册邮箱! 注册电子邮件的方法 在一个浏览器首页搜索“TOMvip邮…

    2023年 6月 23日
  • python新浪微博数据爬取(tornado python3)

    新浪微博:山寨版的twitter,各种粉丝的集散地,天朝人民的最爱,基本上网民都人手一个微博账号,所以使用新浪微博账号进行三方登录来提高用户登录体验就显得尤为重要,本次使用Pyth…

    2023年 7月 19日
  • 微信有哪三项开始收费,微信常用8个功能将全部收费

    微信作为国内最大的社交平台,拥有超过10亿的活跃用户,几乎人人都在使用。微信不仅提供了聊天、朋友圈、小程序等基本功能,还涵盖了支付、理财、出行、娱乐等各个领域,可以说是用户生活中不…

    2023年 8月 22日
  • 王者荣耀怎么才可以开启家长模式

    大家好,我是戒戒,专注于分享游戏心得和趣事的戒戒 《王者荣耀》作为当下最火的MOBA手游,它的游戏受众是相当广的,不管是小学生还是到大学生,还有很多上班族都有在玩。随着现在的游戏做…

    2023年 4月 10日
  • 淘宝京东拼多多针对什么消费者,淘宝京东拼多多哪个单量真实点

    总有一些事会朝着意外的方向发展.. 当初网购的原因是因为想要省钱.. 然而,网购了这么多年。 你真的知道你的钱花在了哪里吗?[耶] 这份关于三大平台的查询攻略 你一定要收好! 01…

    2023年 7月 4日
  • 如何打网约车(如何打网约车发票)

    随着城市交通的不断发展,网约车已经成为越来越多人出行的选择。在大多数城市中,打网约车已经成为一种非常方便、快捷、省钱的出行方式。下面我们来看一下如何打网约车。 网约车是一种方便快捷…

    2023年 7月 3日
  • ps表情包制作学会斗图再也没输过

    在生活中,各式各样的表情包成为了人们的最爱,尤其是拥有动图效果的GIF图片,用轻松愉快的方式传达人们的喜怒哀乐…今天,在本篇文章中主要讲解如何在PS软件中制作GIF动图…

    2023年 10月 25日
  • air m1 魔兽世界(alienware15r4玩吃鸡)

    作为戴尔旗下顶级高端游戏本品牌,Alienware 外星人无疑是很多消费者心中最向往的。极具个性大气的外观设计再配以标志性的 RGB 灯效,外星人样式的 Logo 标识让人能一眼认…

    2023年 9月 26日