blockchain:py实现区块链简单场景应用:程序猿记录在区块里的收入记录图——jasonniu

一个处女座的IT 一个处女座的IT     2022-10-24     424

关键词:


# -*- coding: utf-8 -*- \'\'\' 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()

 

 

 

区块链技术与应用回顾

      区块链(BlockChain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法。这次是再次回顾... 查看详情

使用javascript实现简单的区块链(签名+工作量证明机制)(代码片段)

//区块链blockchain//data之前区块的哈希值当前区块的哈希值:是由存储在区块里的信息算出来的(data+之前区块的哈希值)constsha256=require('./crypto-js/sha256')//区块classBlockconstructor(data)this.data=datathi 查看详情

区块链技术发展及应用场景

...技术处于快速发展的初级阶段,现有区块链系统在设计和实现中利用了分布式系统、密码 查看详情

blockchain技术之区块链的概念和起源以及区块链的运行方式发展前景和应用领域分析

一、什么是“区块链”?区块链起源于中本聪的比特币,作为比特币的底层技术,本质上是一个去中心化的数据库,是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术方案。区块链技术是一种不依... 查看详情

互融云十大全新区块链技术应用场景落地

区块链技术诞生于数字货币,但它的应用绝不止于数字货币这么简单。作为一项新兴技术,具有数据公开透明、信息安全程度高、可追溯性强等特征优势。互融云为推动区块链基础核心技术研究和行业应用落地,利用区块链其特... 查看详情

快速理解区块链

  区块链(英语:blockchain或blockchain)是借由密码学串接并保护内容的串连交易记录(又称区块)。每一个区块包含了前一个区块的加密散列、相应时间戳记以及交易数据(通常用默克尔树算法计算的散列值表示),这样... 查看详情

区块链软件应用系统定制开发

这个寒冷的冬天,区块链并没有冷下去,反而越发火热。各地争相创办区块链技术研究院。热火朝天的研发区块链应用。区块链应用的落地也是目前大家关注的重点之一。区块链应用实际已经慢慢的应用在我们的生活当中。比如... 查看详情

java实现区块链demo(代码片段)

区块链与比特币概念区块链(BlockChain)起源于比特币,2008年11月1日,一位自称中本聪(SatoshiNakamoto)的人发表了《比特币:一种点对点的电子现金系统》一文,阐述了基于P2P网络技术、加密技术、时间戳技术、区... 查看详情

区块链(blockchain)(代码片段)

目录区块链是什么?区块链的底层架构一、数据层二、网络层三、共识层四、激励层五、合约层六、应用层区块链的特性区块链用到哪些共识算法区块链是什么?区块链就是分布式数据存储、点对点传输、共识机制、加密算法等技... 查看详情

区块链知识入门

...己无意义但走的比较简单幸福的路。https://yeasy.gitbooks.io/blockchain_guide/intro/tech.html?q=http://lib.csdn.net/article/blockchain/45811https://www.zhihu.com/question/46729645 查看详情

区块链简单实现之p2p网络多节点同步(代码片段)

...c;实现多节点之间的同步。将区块保存为json文件之前的类BlockChain的creatBlock方法:creatBlock(data)varlastBlock=this.getLastBlock();varnewIndex=lastBlock.index+1;varnewTime=newDate().getTime()/1000;varnewPreHash=lastBlock.hash;varnewhash=Block.caH... 查看详情

300行abap代码实现一个最简单的区块链原型

...的这篇文章没有任何高大上的术语,就是300行ABAP代码,实现一个最简单的区块链原型。我个人觉得,同区块链本身的实现技术相比,更难的事情是如何找到一个合适的业务场景,把区块链集成到SAP产品中去,让它发挥出作用。... 查看详情

300行abap代码实现一个最简单的区块链原型

...的这篇文章没有任何高大上的术语,就是300行ABAP代码,实现一个最简单的区块链原型。我个人觉得,同区块链本身的实现技术相比,更难的事情是如何找到一个合适的业务场景,把区块链集成到SAP产品中去,让它发挥出作用。... 查看详情

智能合约从入门到精通:智能合约的应用场景(代码片段)

...约定义已经说的很清楚,智能合约不是一定要用区块链来实现,很久之前就已经出现了:比如 查看详情

[喷嚏]区块链已落地30个场景商用时代正在加速来临

...用途都有迹可查。据了解,目前支付宝爱心捐赠平台已经实现捐赠数据入链,善款来源可追溯。  查看详情

区块链入门教程(转)(代码片段)

原作者:阮一峰原文链接:http://www.ruanyifeng.com/blog/2017/12/blockchain-tutorial.html 区块链(blockchain)是眼下的大热门,新闻媒体大量报道,宣称它将创造未来。可是,简单易懂的入门文章却很少。区块链到底是什么,有何特别之... 查看详情

blockchain初识(代码片段)

区块链介绍区块链最早是在比特币项目中,为比特币的运行提供一个分布式的记账平台。而区块链技术发展到现在,对于区块链的定义为,一个区块链是一个分布式的数据库,该数据库维持一个持续增长的数据记... 查看详情

如何保存我的 Nodejs 区块链

】如何保存我的Nodejs区块链【英文标题】:HowtosavemyNodejsBLockchain【发布时间】:2018-09-0504:43:24【问题描述】:在过去的几周里,我尝试编写自己的区块链,只是为了更好地理解整个概念。你可以在这里找到我的代码:https://github.... 查看详情