央行数字货币DECP钱包内测截图

随着加密货币的兴起,区块链技术逐渐进入大众的视野。这项技术之所以吸引如此多的关注,主要是因为它具有分布式、可追溯性、共识机制、安全性、高可用性和不变性等特性。区块链本质上是一个公共数据库,它记录和认证数字资产的持有和传输,并且不可逆,像比特币和以太坊这样的数字货币就是基于这个概念。

很多政府、组织和个人都在使用区块链技术来创建自己的加密货币,世界社交媒体巨头Facebook主导的Libra数字货币项目发布了新版Libra白皮书,最近关于中国人民银行数字货币DCEP进入市场测试也见诸众多媒体报道。

那么我们能否效仿并建立自己的加密货币呢?在本教程中,我们会用 Python 来逐步说明构建数字货币的过程,我们把将要创建的加密货币命名为PyCoin,下面是创建PyCoin的区块链算法基本蓝图:

class Block:def __init__():#第一个区块类passdef calculate_hash():   #计算每一个区块的哈希值class BlockChain:def __init__(self):# 构造方法passdef construct_genesis(self):# 构建初始区块passdef construct_block(self, proof_no, prev_hash):# 构建新的区块并添加到区块链pass@staticmethoddef check_validity():# 检验区块链是否有效passdef new_data(self, sender, recipient, quantity):# 添加一个新的交易数据pass@staticmethoddef construct_proof_of_work(prev_proof):# 避免区块链被攻击pass@propertydef last_block(self):# 返回链上最后一个区块return self.chain[-1]

一、创建第一个区块的类

区块链由多个相互连接的区块组成,如果一个区块被篡改,那么链上的其它部分将变得无效。对应以上概念,我们创建以下的初始区块类函数:

import hashlib
import timeclass Block:def __init__(self, index, proof_no, prev_hash, data, timestamp=None):self.index = indexself.proof_no = proof_noself.prev_hash = prev_hashself.data = dataself.timestamp = timestamp or time.time()@propertydef calculate_hash(self):block_of_string = "{}{}{}{}{}".format(self.index, self.proof_no,self.prev_hash, self.data,self.timestamp)return hashlib.sha256(block_of_string.encode()).hexdigest()def __repr__(self):return "{} - {} - {} - {} - {}".format(self.index, self.proof_no,self.prev_hash, self.data,self.timestamp)

从上面的代码中可以看到,我们定义了 __init__() 函数,该函数将在启动Block类时执行,就像 Python 中其他任何类中一样。

我们为初始函数定义以下参数:

  • self:引用Block类的实例,从而可以访问与该类关联的方法和属性;

  • index:记录某个区块在区块链中的位置;

  • proof_no:在创建新区块(即挖矿)期间产生的数量;

  • prev_hash:指上一个区块的哈希值;

  • data:记录所有已完成的交易,例如购买数量;

  • timestamp:标记交易的时间戳

类中的第二个方法calculate_hash将由上一个区块的哈希值来生成当前区块的哈希值,SHA-256算法模块将被导入用来获得区块的哈希值。

当值输入加密哈希算法中后,该函数将返回一个256位的字符串,表示该区块所包含的内容。

这就是为什么区块链具有安全性这一特征,因为每个区块都有一个哈希值,而该哈希值将依赖于前一个区块的哈希值。因此,如果有人试图篡改链中的任何区块,其他区块将具有无效的哈希值,从而破坏整个区块链网络。

最终一个区块将会是像下面这样:

{"index": 2,"proof": 21,"prev_hash": "6e27587e8a27d6fe376d4fd9b4edc96c8890346579e5cbf558252b24a8257823","transactions": [{'sender': '0', 'recipient': 'Quincy Larson', 'quantity': 1}],"timestamp": 1521646442.4096143
}

二、创建区块链的类

顾名思义,区块链的主要思想是将多个区块相互“链接”。因此我们将构建一个blockchain类,该类将对管理整个链的运行至关重要。blockchain类具有各种辅助方法来完成区块链中的任务。

下面我们解释一下每个方法在类中的作用:

a、构造函数方法

这个方法确保区块链能被实例化。

class BlockChain:def __init__(self):self.chain = []self.current_data = []self.nodes = set()self.construct_genesis()

下面是其属性的作用:

  • self.chain:该变量保存所有区块;

  • self.current_data:该变量保存所有完成交易的区块;

  • self.construct_genesis():该方法负责构建初始区块

b、构建创世区块

区块链中需要用construct_genesis方法来构建链上的初始区块。惯例上,此区块比较特殊,因为它象征着区块链的开始。因此我们只需将一些默认值传递给Construct_block方法来构造它。例如我们可以给proof_noprev_hash赋一个零值。

def construct_genesis(self):self.construct_block(proof_no=0, prev_hash=0)def construct_block(self, proof_no, prev_hash):block = Block(index=len(self.chain),proof_no=proof_no,prev_hash=prev_hash,data=self.current_data)self.current_data = []self.chain.append(block)return block

c、构建新的区块

用 Python 创建你自己的加密货币(附源码)相关推荐

  1. 100个必会的python脚本-100行Python代码实现自动抢火车票(附源码)

    前言 又要过年了,今年你不妨自己写一段代码来抢回家的火车票,是不是很Cool.下面话不多说了,来一起看看详细的介绍吧. 先准备好: 12306网站用户名和密码 chrome浏览器及下载chromedr ...

  2. srs可以用java开发吗,为SRS流媒体服务器添加HLS加密功能(附源码)

    #为SRS流媒体服务器添加HLS加密功能(附源码)# 之前测试使用过nginx的HLS加密功能,会使用到一个叫做nginx-rtmp-module的插件,但此插件很久不更新了,网上搜索到一个中国制造的 ...

  3. 20220517 Python 制作一个儿童学习软件 (附源码和软件下载) 包含语音合成 视频播放 pyqt pptsx3 Qmovie request pygame 音频播放

    20220517 Python 制作一个儿童学习软件 (附源码和软件下载) 包含语音合成 视频播放 pyqt pptsx3 Qmovie request pygame 音频播放 文章目录 202205 ...

  4. Python毕设-【人脸签到系统】附源码/Python练手项目/Python毕业设计

    本人承诺只做技术分享,永不收费. V----------------->:专栏详情 文章目录 本人承诺只做技术分享,永不收费. V----------------->:专栏详情 一.背景 ...

  5. PHP加密技术 附源码

    点击上方" 码农编程进阶笔记 ",选择"置顶或者星标" 文末有干货,每天定时与您相约! PHP 加密后的代码能运行在 PHP 5+ 以上版本. 跨平台,Wind ...

  6. 用Python自动刷新抢12306火车票(附源码)

    專 欄 ❈ 作者:marvin,互联网从业者,现居上海张江 ❈ 一年一度的春运又来了,今年我自己写了个抢票脚本.使用Python+Splinter自动刷新抢票,可以成功抢到.(依赖自己的网络环境太厉害 ...

  7. 用 Python 写一个天天酷跑 | 内附源码

    写出来的效果图就是这样了: 相关文件 小伙伴们可以关注小编的Python源码.问题解答&学习交流群:733089476 有很多的资源可以白嫖的哈,需要源码的小伙伴可以在+君羊领取 下面就更新一 ...

  8. 【Python游戏】基于化学方程式的基础上,用Python实现一个消灭泡泡小游戏 | 附源码

    前言 halo,包子们下午好 今天实现的这个小游戏呀,说实话化学不太好的小伙伴可能看起来会有点懵逼 不过不用担心,咱们今天不是来学化学的,我们是来学习Python的 所以呀,不要太担心啦,大家先好好看 ...

  9. 一口气用Python写了13个小游戏 (附源码)

    大家好,今天给大家分享13个游戏源码,可以自己复现玩玩,研究下里面的编程逻辑,对学习编程(特别是初学者)应该会有很大帮助. 由于文章较长,大家记得滑到文末点个赞哈- 1.吃金币 源码分享: impor ...

  10. Python + Django开发在线考试管理系统(附源码)

    本文最终实现一个Web在线考试管理系统,可作为Python Web,Django的练手项目,也可以作为计算机毕业设计参考项目. 文章目录 系统功能需求分析 系统设计及实现思路 源码分享&系统实 ...

最新文章

  1. 谷歌、苹果等大佬亲自戳穿自动驾驶完美童话,技术、场景、安全牢笼实难突围!...
  2. Shell练习-统计出每个IP的访问量有多少?
  3. 成功解决schedule.ScheduleValueError: Invalid time format
  4. java算法提高求最大值_藍橋杯 算法提高 求最大值
  5. phpcms上线步骤,无法生成缓存,页面空白原因
  6. 右键菜单,用VSCode打开文件和文件夹
  7. 两种曲线下面积AUC(Area Under the ROC Curve):ROC-AUC、PR-AUC(性能度量)
  8. auto.ja 部落冲突01 找图并点击
  9. 无刷电机控制基础(1)——结构和驱动电路
  10. linux 进程hang,GoldenGate Extract进程hang问题解决一例
  11. 将多个文件夹下内容合并到一个文件夹下
  12. 苹果笔记本怎么查看计算机基本信息,如何查询苹果电脑型号_查询苹果电脑型号的方法...
  13. App Inventor 2能编译出苹果iOS版App吗?
  14. 机器学习入门:入手sklearn框架+线性回归+案例(基金数据的预测)
  15. H264/H265码流类型
  16. 手机维修基础 常见故障分析㈢
  17. 【计算机网络】定义、作用、特点计算机网络
  18. [置顶] 常用小片段指令集锦
  19. Python气象绘图教程——Cartopy
  20. 直观理解-梯度下降及MIT自适应控制律

热门文章

  1. java sql小区物业管理系统_小区物业管理系统javasql.doc
  2. linux维文字体如何下载,uyghurfont
  3. opencv android 车牌,OpenCV + Android +车牌号识别
  4. 蚂蚁链ACCA认证试题
  5. 【layui】省市区的三级联动
  6. 第70天-内网安全-域横向内网漫游 Socks 代理隧道技
  7. LwIP协议栈——网络接口管理
  8. linux c 进程池 简单实现
  9. 机器学习与深度学习资料整理
  10. 操作系统基本概念汇总