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


相关文章
|
7天前
|
供应链 安全 分布式数据库
探索区块链技术在供应链管理中的应用
【10月更文挑战第21天】 本文深入探讨了区块链技术如何在供应链管理中发挥关键作用,通过具体案例分析,揭示了区块链提高透明度、降低成本和增强安全性的潜力。文章首先概述了区块链技术的基本原理及其对传统供应链模式的挑战,接着详细讨论了区块链如何在不同供应链环节中实施,并分析了其带来的变革。最后,文章提出了企业在采纳区块链技术时可能面临的挑战和应对策略,为供应链管理者提供了宝贵的参考。
|
1月前
|
传感器 物联网 区块链
新技术趋势与应用:探讨新兴技术如区块链、物联网、虚拟现实等的发展趋势和应用场景
在当今科技飞速发展的时代,新兴技术的涌现正在改变我们的生活和工作方式。本文将深入探讨区块链技术、物联网以及虚拟现实等新兴技术的发展趋势和应用场景。我们将从这些技术的本质出发,分析它们的发展现状,并展望未来可能带来的变革。同时,我们也将通过一些简单的代码示例,展示这些技术如何在实际中发挥作用。让我们一起探索这个充满无限可能的科技世界吧!
|
17天前
|
存储 安全 物联网
未来已来:区块链技术在物联网与虚拟现实中的应用
随着科技的不断进步,新兴技术如区块链、物联网(IoT)和虚拟现实(VR)正在逐渐改变我们的生活和工作方式。本文将探讨这些技术的发展趋势和应用场景,以及它们如何相互融合,为我们带来更便捷、安全和沉浸式的体验。
|
18天前
|
存储 供应链 算法
深入探索区块链技术:原理、应用与未来展望
本文将带你深入了解区块链技术的基本原理,探讨其在金融、供应链、医疗等多个领域的应用案例,并展望其未来的发展趋势。通过本文,你将对区块链技术有一个全面的认识,理解其背后的技术逻辑和应用场景。
|
25天前
|
供应链 安全 区块链
探索区块链技术在数据安全中的应用
本文深入探讨了区块链技术如何革新数据安全领域,特别是在保护个人隐私、增强数据完整性和透明度方面的作用。通过分析区块链的去中心化特性、加密技术以及智能合约的功能,文章阐述了这一技术如何有效防止数据篡改、确保交易记录的不可逆性,并促进跨组织间的信任建立。此外,还讨论了当前区块链技术面临的挑战及未来发展趋势,为理解其在数据安全领域的潜力提供了全面视角。
|
20天前
|
供应链 物联网 区块链
新技术趋势与应用:探讨新兴技术如区块链、物联网、虚拟现实等的发展趋势和应用场景
本文将探讨新兴技术的发展趋势和应用场景,包括区块链技术、物联网和虚拟现实等。我们将深入了解这些技术的发展现状,以及它们在未来可能带来的变革。同时,我们还将提供一些代码示例,以帮助读者更好地理解这些技术的应用。
|
20天前
|
存储 供应链 监控
深入探索区块链技术在供应链管理中的应用####
本文旨在探讨区块链技术如何革新供应链管理,通过分析其核心特性与实际案例,揭示该技术如何增强透明度、提升效率并降低成本。我们将从区块链的基本原理入手,逐步剖析其在供应链各环节中的具体应用,最终展望其未来发展趋势。 ####
52 3
|
23天前
|
存储 供应链 分布式数据库
深入理解区块链技术:原理、应用与挑战
本文旨在探讨区块链技术的基本原理、主要应用及其面临的挑战。通过分析区块链的分布式账本技术、加密算法和共识机制,我们揭示了其如何在无需中心化权威的情况下确保数据的不可篡改性和透明性。此外,文章还讨论了区块链在金融、供应链管理、智能合约等领域的应用案例,并指出了当前区块链技术面临的可扩展性、隐私保护和法律监管等挑战。通过对这些内容的深入分析,我们希望为读者提供一个全面而深入的区块链技术概览。
49 6
|
26天前
|
供应链 安全 数据挖掘
深度剖析区块链技术在金融科技领域的创新应用与挑战####
本文旨在探讨区块链技术于金融科技(FinTech)领域的革新性应用,分析其如何重塑传统金融服务模式,并深入剖析面临的技术与监管挑战。通过案例研究与数据分析,揭示区块链在提升金融效率、增强安全性及促进金融包容性方面的潜力,同时强调构建健全的法律法规框架与技术创新之间的平衡对于推动行业健康发展的重要性。本文不涉及具体代码实现或技术细节,而是聚焦于区块链应用的战略意义与实践挑战。 ####
|
1月前
|
存储 供应链 安全
探索区块链技术在供应链管理中的应用
本文深入探讨了区块链技术在供应链管理中的应用,分析了其如何提高透明度、安全性和效率。通过具体案例研究,展示了区块链如何解决传统供应链中的信任问题,降低成本,并促进更高效的物流管理。文章还讨论了实施区块链技术面临的挑战和未来发展趋势。