区块链开发笔记之原型

浏览: 2161

在之前的文章(区块链基础一文)中,已经实现了一个简单的区块链。但凭借一个100行实现的区块链肯定是找不到一个好的工作机会的。 因此接下来打算实现一个功能较为全面的区块链项目,支持账户、交易、网络等功能。相关文档和代码会放到Github(https://github.com/flingjie/blockchain)上,欢迎交流和学习。

在本文中,将会基于之前开发的区块链实现一个简单的原型,过程如下:

  1. 定义区块结构;
  2. 定义区块链结构;
  3. 初始化一个区块链。

定义区块结构

In [10]:

# block.py

import hashlib
from datetime import datetime


class Block:
"""
区块结构体
prev_hash: 父区块哈希值
data: 区块内容
timestamp: 区块创建时间
hash: 区块哈希值
"""
def __init__(self, data, prev_hash):
self.previous_hash = prev_hash
self.data = data
self.timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

# 计算区块的哈希值
message = hashlib.sha256()
message.update(str(self.previous_hash).encode('utf-8'))
message.update(str(self.data).encode('utf-8'))
message.update(str(self.timestamp).encode('utf-8'))
self.hash = message.hexdigest()

其中需要注意的是第一个区块,也叫创世区块,它是一个特殊的区块,没有父区块,在区块链创建的时候会生成,定义如下:

In [11]:

# block.py


def create_genesis_block():
"""
生成创世区块,创世区块是第一个区块,故无父区块哈希
:return:
"""
return Block(data="Genesis Block", prev_hash="")

定义区块链结构

In [14]:

# blockchain.py


class BlockChain:
"""
区块链结构体
blocks: 包含的区块列表
"""
def __init__(self):
self.blocks = [create_genesis_block()]

def add_block(self, block):
"""
添加区块
:param block:
:return:
"""
self.blocks.append(block)

创建区块链

In [15]:

def create_bc():
"""
创建一个区块链
:return:
"""
bc = BlockChain()

bc.add_block("Jack send 0.3 btc to Alice")
bc.add_block("Alice send 0.1 btc to Tom")

上面的函数创建了一个区块链,并生成两个区块,加上创世区块一共三个区块。最后用Flask将生成的区块链展示一下。

blockchain_v1.png

推荐 1
本文由 101python 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

1 个评论

图片看不到的

要回复文章请先登录注册