BlockChain:Py实现区块链简单场景应用:程序猿记录在区块里的收入记录图

简介: BlockChain:Py实现区块链简单场景应用:程序猿记录在区块里的收入记录图

输出结果

image.png

image.png

image.png 



代码设计


Created on 2018年3月11日

@author: Jason niu

'''

import hashlib  #该模块实现了诸多安全哈希和消息摘要算法的通用接口,包括 FIPS 安全哈希算法: SHA1、SHA224、 SHA256、SHA384、RSA的 MD5 等等算法

import uuid  #通用唯一标识符 ( Universally Unique Identifier ), 对于所有的UUID它可以保证在空间和时间上的唯一性. 它是通过MAC地址, 时间戳, 命名空间, 随机数, 伪随机数来保证生成ID的唯一性, 有着固定的大小( 128 bit ).  它的唯一性和一致性特点使得可以无需注册过程就能够产生一个新的UUID. UUID可以被用作多种用途, 既可以用来短时间内标记一个对象, 也可以可靠的辨别网络中的持久性对象.

#该类实现简化版的区块包:一个唯一标识符、父节点的哈希值、nonce值、该区块的内容字段。

class Block(object):

   def __init__(self, data=None, previous_hash=None):

       self.identifier = uuid.uuid4().hex   # uuid产生唯一标示

       self.nonce = None                  

       self.data = data                    

       self.previous_hash = previous_hash  

   def hash(self, nonce=None):  #利用sha256算法计算区块的哈希值

       message = hashlib.sha256()

       message.update(self.identifier.encode('utf-8')) #以utf-8格式对identifier进行编码,二进制从低位往高位取出二进制数字

       message.update(str(nonce).encode('utf-8'))

       message.update(str(self.data).encode('utf-8'))

       message.update(str(self.previous_hash).encode('utf-8'))

       return message.hexdigest()  #hexdigest函数计算整个文件的hash code,返回摘要作为十六进制数据字符串值

   def hash_is_valid(self, the_hash):

       return the_hash.startswith('0000')

   def __repr__(self):

       return 'Block<Hash: {}, Nonce: {}>'.format(self.hash(self.nonce), self.nonce)

   def mine(self):  

       cur_nonce = self.nonce or 0

       while True:                

           the_hash = self.hash(nonce=cur_nonce)

           if self.hash_is_valid(the_hash):  

               self.nonce = cur_nonce        

               break                        

           else:

               cur_nonce += 1  

# 创建创世区块

block = Block('Hello World')

block.mine()

print(block)

class BlockChain(object):

   def __init__(self):

       self.head = None  

       self.blocks = {}  

     

   def add_block(self, new_block):

       previous_hash = self.head.hash(self.head.nonce) if self.head else None

       new_block.previous_hash = previous_hash

       self.blocks[new_block.identifier] = {

           'block': new_block,'previous_hash': previous_hash,'previous': self.head,

       }

       self.head = new_block

   def __repr__(self):

       num_existing_blocks = len(self.blocks)

       return 'Blockchain<{} Blocks, Head: {}>'.format(

           num_existing_blocks,

           self.head.identifier if self.head else None

       )

     

#定义好区块链结构后,下面就开始初始化一条区块链。

chain = BlockChain()

print(chain)

chain.add_block(block)

print(chain)

#for循环,添加更多的区块

for i in range(6):

   new_block = Block(i)

   new_block.mine()

   chain.add_block(new_block)

print(chain)

from datetime import datetime  #导入时间日期模块

#该类实现基于Block实现一个支持收支记录格式

class AccountBill(Block):  

   def __init__(self, content, amount):

       t = datetime.now().strftime('%Y-%m-%d %H:%M:%S')

       data = "{}|{}|{}".format(t, content, amount)

       return super(AccountBill, self).__init__(data)

   def get_amount(self):

       amount = 0

       if self.data:

           amount = int(self.data.split('|')[2])

       return amount

   def get_content(self):

       content = ''

       if self.data:

           content = self.data.split('|')[1]

       return content

   def __repr__(self):

       return 'Bill: {}>'.format(

           self.data

       )

AccountBill('测试', 100)

from collections import OrderedDict

class AccountBook(BlockChain):

   def __init__(self):

       self.head = None  

       self.blocks = OrderedDict()  

   def add_block(self, new_bill):

       new_bill.mine()

       super(AccountBook, self).add_block(new_bill)

   def balance(self):  

       balance = 0

       if self.blocks:

           for k, v in self.blocks.items():

               balance += v['block'].get_amount()

       return balance

   def __repr__(self):

       num_existing_blocks = len(self.blocks)

       return 'AccountBook<{} Bills, Head: {}>'.format(

           num_existing_blocks,

           self.head.identifier if self.head else None

       )

book = AccountBook()

b1 = AccountBill('月薪', 23000)

book.add_block(b1)

b2 = AccountBill('房租消费', -3000)

book.add_block(b2)

b3 = AccountBill('饮食消费', -1200)

book.add_block(b3)

b4 = AccountBill('娱乐消费', -1200)

book.add_block(b4)

b5 = AccountBill('token收入', 1000)

book.add_block(b5)

b6 = AccountBill('搬砖收入', 400)

book.add_block(b6)

b7 = AccountBill('扛水泥收入', 500)

book.add_block(b7)

b8 = AccountBill('学习AI', -1000)

book.add_block(b8)

b9 = AccountBill('学习BlockChain', -800)

book.add_block(b9)

b10 = AccountBill('学习ICO', -10)

book.add_block(b10)

print(book.balance())          

for k,v in book.blocks.items():

   print(v['block'].data)

 

import matplotlib

import numpy as np

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei']

x_data = []  

y_data = []  

colors = []

for k,v in book.blocks.items():

   bill = v['block']

   y_data.append(bill.get_content())

   amount = bill.get_amount()

   if amount > 0:

       x_data.append(amount)

       colors.append('blue')

   else:

       x_data.append(-amount)

       colors.append('red')

     

y_pos = np.arange(len(y_data))

plt.bar(y_pos, x_data, align='center', alpha=0.5, color=colors)

plt.xticks(y_pos, y_data)

plt.ylabel('金额')

plt.title('BlockChain:程序猿记录在区块里的收支记录图——Jason niu')

plt.show()


相关文章
|
23天前
|
存储 传感器 监控
未来智能城市中的区块链技术应用
随着城市化进程不断加速,智能城市成为了未来城市发展的主要趋势之一。区块链技术作为一种去中心化、安全可靠的数据传输和存储方式,将在智能城市建设中发挥关键作用。本文将探讨区块链技术在智能城市中的应用场景,并分析其对城市管理、信息共享和安全保障等方面的积极影响。
14 2
|
30天前
|
存储 供应链 区块链
区块链技术在供应链管理中的应用与展望
随着区块链技术的不断发展,其在供应链管理领域的应用愈发广泛。本文将深入探讨区块链技术在供应链管理中的具体应用及未来发展趋势,分析其对供应链透明度、可追溯性和安全性的影响,并展望区块链技术在未来供应链管理中的潜在作用和挑战。
20 0
|
1月前
|
供应链 安全 区块链
区块链技术在供应链管理中的应用与挑战
传统的供应链管理面临着信息不对称、数据共享困难等问题,而区块链技术的出现为供应链管理带来了新的解决方案。本文将介绍区块链技术在供应链管理中的应用情况,探讨其优势和挑战,并提出未来发展的方向。
48 2
|
1月前
|
存储 人工智能 供应链
区块链技术在供应链管理中的应用
传统的供应链管理系统存在着诸多问题,如信息不对称、数据可信度低等。区块链技术作为一种分布式账本技术,在供应链管理中具有独特优势。本文将探讨区块链技术在供应链管理中的应用,介绍其原理和优势,并分析实际案例以及未来发展趋势。
|
1月前
|
存储 传感器 物联网
新技术驱动未来:区块链、物联网、虚拟现实的蓬勃发展与创新应用
随着科技的迅猛发展,新兴技术如区块链、物联网、虚拟现实等正成为当今社会关注的焦点。本文将探讨这些新技术的发展趋势和广泛应用场景,展示它们在不同领域中的潜力与创新价值。
|
5天前
|
存储 供应链 安全
《区块链简易速速上手小册》第7章:区块链在其他行业的应用(2024 最新版)
《区块链简易速速上手小册》第7章:区块链在其他行业的应用(2024 最新版)
21 1
|
11天前
|
供应链 安全 物联网
未来交织:区块链、物联网和虚拟现实的技术革新与融合应用
【4月更文挑战第13天】 在数字化时代的浪潮中,新兴技术正以前所未有的速度重塑着世界。本文将深入分析区块链技术的去中心化信任机制、物联网(IoT)的智能连接网络,以及虚拟现实(VR)的沉浸式体验如何独立发展并开始交汇融合,共同构建一个更加智能、安全和互动的未来。我们将探讨这些技术的发展趋势,揭示它们在各行各业的潜在应用场景,并讨论它们如何联合起来推动第四次工业革命。
|
12天前
|
供应链 算法 安全
区块链技术的应用与前景展望
区块链技术的应用与前景展望
|
13天前
|
供应链 安全 区块链
区块链技术在供应链管理中的应用及挑战
【4月更文挑战第11天】 随着数字化时代的到来,企业之间的供应链管理日益复杂化,对透明度、安全性和效率的要求也不断提高。区块链技术作为一种分布式账本技术,因其不可篡改性、去中心化以及可追溯性的特点,在供应链管理中展现出了独特的应用价值。本文将探讨区块链技术在供应链领域的具体应用案例,分析其在提高供应链透明度、降低运营成本、增强产品安全等方面的潜在优势,并讨论在实际应用过程中面临的技术挑战和业务实施难题。
|
22天前
|
供应链 监控 物联网
新技术趋势与应用:区块链、物联网和虚拟现实的未来
【4月更文挑战第2天】随着科技的飞速发展,新兴技术如区块链、物联网和虚拟现实等正在逐渐改变我们的生活。本文将探讨这些技术的发展趋势和应用场景,以及它们如何影响我们的日常生活和工作。

热门文章

最新文章