python区块链简单模拟【04】

区块链网络是去中心化的,区块链不是基于一个中心节点产生的,而是由很多去中心化的节点一起参与维护的 我们要实现一个简单地去中心化网络,该模拟实验,多个节点可以运行在同一个计算机上,只是每个节点使用了不同的本地端口号,每个节点都是使用一个独立的线程运行,相当于一个独立的节点。
正确,区块链网络是一种去中心化的网络。它由多个节点组成,而不是由一个中心化的机构或实体控制。每个节点都有一个完整的副本区块链的拷贝,并且通过共识机制来达成对区块链上交易的一致认同。由于去中心化的特性,区块链网络具有更高的安全性和抗攻击能力,同时没有单点故障的风险。

# 导入椭圆曲线算法
from ecdsa import SigningKey, SECP256k1, VerifyingKey, BadSignatureError
import binascii
import base64
from hashlib import sha256class Wallet:"""钱包"""def __init__(self):"""钱包初始化时基于椭圆曲线生成一个唯一的秘钥对,代表区块链上一个唯一的账户"""self._private_key = SigningKey.generate(curve=SECP256k1)self._public_key = self._private_key.get_verifying_key()@propertydef address(self):"""这里通过公钥生成地址"""h = sha256(self._public_key.to_pem())return base64.b64encode(h.digest())@propertydef pubkey(self):"""返回公钥字符串"""return self._public_key.to_pem()def sign(self, message):"""生成数字签名"""h = sha256(message.encode('utf8'))return binascii.hexlify(self._private_key.sign(h.digest()))def verify_sign(pubkey, message, signature):"""验证签名"""verifier = VerifyingKey.from_pem(pubkey)h = sha256(message.encode('utf8'))return verifier.verify(binascii.unhexlify(signature), h.digest())
import jsonclass Transaction:"""交易的结构"""def __init__(self, sender, recipient, amount):"""初始化交易,设置交易的发送方、接收方和交易数量"""if isinstance(sender, bytes):sender = sender.decode('utf-8')self.sender = sender            # 发送方if isinstance(recipient, bytes):recipient = recipient.decode('utf-8')self.recipient = recipient      # 接收方self.amount = amount            # 交易数量def set_sign(self, signature, pubkey):"""为了便于验证这个交易的可靠性,需要发送方输入他的公钥和签名"""self.signature = signature      # 签名self.pubkey = pubkey            # 发送方公钥def __repr__(self):"""交易大致可分为两种,一是挖矿所得,而是转账交易挖矿所得无发送方,以此进行区分显示不同内容"""if self.sender:s = "从 %s 转至 %s %d个加密货币" % (self.sender, self.recipient, self.amount)else:s = "%s 挖矿获取%d个加密货币" % (self.recipient, self.amount)return sclass TransactionEncoder(json.JSONEncoder):"""定义Json的编码类,用来序列化Transaction"""def default(self, obj):if isinstance(obj, Transaction):return obj.__dict__else:return json.JSONEncoder.default(self, obj)
import hashlib
from datetime import datetimeclass Block:"""区块结构prev_hash:      父区块哈希值transactions:           交易对timestamp:      区块创建时间hash:           区块哈希值Nonce:        随机数"""def __init__(self, transactions, prev_hash):# 将传入的父哈希值和数据保存到类变量中self.prev_hash = prev_hash    self.transactions = transactions# 获取当前时间self.timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")# 设置Nonce和哈希的初始值为Noneself.nonce = Noneself.hash = Nonedef __repr__(self):return "区块内容:%s\n哈希值: %s" % (json.dumps(self.transactions), self.hash)
DIFFICULTY = 5class ProofOfWork:"""工作量证明"""def __init__(self, block, miner, difficult=5):self.block = block# 定义工作量难度,默认为5,表示有效的哈希值以5个“0”开头self.difficulty = DIFFICULTYself.miner = miner# 添加挖矿奖励self.reward_amount = 1def mine(self):"""挖矿函数"""i = 0prefix = '0' * self.difficulty# 添加奖励t = Transaction(sender="",recipient=self.miner.address,amount=self.reward_amount,)sig = self.miner.sign(json.dumps(t, cls=TransactionEncoder))t.set_sign(sig, self.miner.pubkey)self.block.transactions.append(t)while True:message = hashlib.sha256()message.update(str(self.block.prev_hash).encode('utf-8'))# 更新区块中的交易数据# message.update(str(self.block.data).encode('utf-8'))message.update(str(self.block.transactions).encode('utf-8'))message.update(str(self.block.timestamp).encode('utf-8'))message.update(str(i).encode("utf-8"))digest = message.hexdigest()if digest.startswith(prefix):self.block.nonce = iself.block.hash = digestreturn self.blocki += 1
class BlockChain:"""区块链结构体blocks:        包含的区块列表"""def __init__(self):self.blocks = []def add_block(self, block):"""添加区块"""self.blocks.append(block)

区块链网络是一种分布式网络结构,通过区块链技术实现数据的存储、交换和共享。区块链网络由多个节点组成,每个节点都有一个副本的区块链账本。这些节点通过共识算法一致地更新和维护账本,确保账本的一致性和安全性。

区块链网络具有去中心化的特点,没有中心化的控制机构,所有节点平等地参与网络的维护和运行。这样的设计使得区块链网络具有高度的抗攻击性和鲁棒性,同时也降低了网络的单点故障的风险。

区块链网络可以用于各种场景,如数字货币、供应链管理、投票系统等。通过区块链技术,可以实现透明、安全、高效的数据交换和管理。同时,区块链网络也提供了智能合约功能,使得交易可以在不需要信任第三方的情况下进行。

总的来说,区块链网络是一种新兴的网络结构,具有去中心化、安全性高等优点,可以应用于各种领域,正在改变传统的中心化网络模式。

区块链网络是由多个节点组成的分布式计算网络,用于支持区块链技术的实施和应用。在区块链网络中,每个节点都拥有一个完整的副本,可以对交易进行验证和记录,并且通过共识算法来保证数据的一致性和安全性。区块链网络的特点包括去中心化、透明和不可篡改等。通过区块链网络,可以实现去中心化的数字货币交易、智能合约执行、资产管理等应用。

在区块链的去中心化网络中,参与者享有一些权利和承担一些义务。以下是一些常见的权利和义务:

权利:

  1. 决策权:参与者有权参与网络的决策过程,包括投票、提案和讨论等。
  2. 透明度:参与者有权获得网络中的所有交易和数据的透明和可验证性。
  3. 数据保护:参与者有权保护自己的个人数据免受未经授权的访问和滥用。
  4. 数据所有权:参与者有权拥有和控制他们自己的数据,并可以自由地分享或转移。

义务:

  1. 守规矩:参与者需要遵守网络的规则和协议,确保网络的正常运行和安全性。
  2. 贡献资源:参与者需要为网络提供计算能力、存储空间或其他资源,以支持网络的运行和安全性。
  3. 信息验证:参与者需要对网络中的交易和数据进行验证,以确保其准确性和安全性。
  4. 支持共识:参与者需要参与共识算法,并按照共识协议行动,以保持网络的一致性和完整性。

这些权利和义务有助于确保参与者之间的平等和公正,同时也保证了区块链网络的安全性和可靠性。在区块链的去中心化网络中,参与者享有一些权利和承担一些义务。以下是一些常见的权利和义务:

权利:

  1. 决策权:参与者有权参与网络的决策过程,包括投票、提案和讨论等。
  2. 透明度:参与者有权获得网络中的所有交易和数据的透明和可验证性。
  3. 数据保护:参与者有权保护自己的个人数据免受未经授权的访问和滥用。
  4. 数据所有权:参与者有权拥有和控制他们自己的数据,并可以自由地分享或转移。

义务:

  1. 守规矩:参与者需要遵守网络的规则和协议,确保网络的正常运行和安全性。
  2. 贡献资源:参与者需要为网络提供计算能力、存储空间或其他资源,以支持网络的运行和安全性。
  3. 信息验证:参与者需要对网络中的交易和数据进行验证,以确保其准确性和安全性。
  4. 支持共识:参与者需要参与共识算法,并按照共识协议行动,以保持网络的一致性和完整性。

这些权利和义务有助于确保参与者之间的平等和公正,同时也保证了区块链网络的安全性和可靠性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/579694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汽车项目管理

项目节点: MR (Management Review)——管理层评审 KO (Kick Off)——项目正式启动 SI (Strategy Intent)——战略意图 SC (Strategy Confirmation)——战略确认 PA (Program Approval)——项目批准 PR (Product Readiness)——产品就绪 VP (Verification Prototype)…

城市自贸区/经开区/产业园基于EasyCVR视频技术的可视化、移动化、智能化视频监管方案

一、背景需求 移动互联网的发展激发了用户对轻应用的使用习惯。4G、5G使得无线带宽快速提升,令大流量视频数据流逐渐从PC往手持终端转移。借助智能手持终端也可以实时查看、远程控制、存储录像、抓拍图像,能方便快捷地掌握所关注区域的视频动态。 随着…

Advanced IP Scanner - 网络扫描器

Advanced IP Scanner - 网络扫描器 1. Advanced IP ScannerReferences https://www.advanced-ip-scanner.com/cn/ ​ 可靠且免费的网络扫描器可以分析 LAN。该程序可扫描所有网络设备,使您能够访问共享文件夹和 FTP 服务器,(通过 RDP 和 Radmin) 远程控制…

redis,memcached,nginx网络组件,网络编程——reactor的应用

目录 目标网络编程关注的问题连接的建立连接的断开消息的到达消息发送完毕 网络 IO 职责检测 IO检测 io剖析 操作 IO 阻塞IO 和 非阻塞IOIO 多路复用epoll结构以及接口 reactor编程连接建立连接断开数据到达数据发送完毕 reactor 应用:后续补充源码解析单 reacrtor多…

Y9000P + ubuntu22.04 配置Anaconda+pycharm +pytorch

Anaconda3 的安装及使用方法安装 Anaconda3 Anaconda3 是 Anaconda 的具体版本 Anaconda3 中的 Python 解释器默认使用的是 Python3.x 版本,而不是 Python2.x 版本 Python2.x 版本中,字符串是以 ASCII 编码处理的,而在 Python3.x 版本中&am…

HBase基础知识(六):HBase 对接 Hive

1. HBase 与 Hive 的对比 1.Hive (1) 数据仓库 Hive 的本质其实就相当于将 HDFS 中已经存储的文件在 Mysql 中做了一个双射关系,以 方便使用 HQL 去管理查询。 (2) 用于数据分析、清洗 Hive 适用于离线的数据分析和清洗,延迟较高。 (3) 基于…

Oraclelinux部署Oracle服务

采用图形化界面 user用户 oracle用户 #清屏 clear #设置主机名 hostnamectl set-hostname ceshidb sed -i 1,2 s/^/#/ /etc/hosts echo "127.0.0.1 ceshidb" >> /etc/hosts echo "::1 ceshidb" >> /etc/hosts ping -c 5…

接口测试及常用接口测试工具(postman/jmeter)附教程

首先,什么是接口呢? 接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。 系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给…

git PR的时候,Jenkins日志报错error wrong new line character: expected \n

背景: windows上面进行java开发,然后GitHub ->PR到Jenkins,Jenkins部署在linux上面。 由于我PR的config文件最后一行有一个空的换行符(尝试删除了空行PR仍旧error,我猜是因为只要换行就会有问题,空行或者…

sheng的学习笔记-【中】【吴恩达课后测验】Course 4 -卷积神经网络 - 第三周测验

课程4_第3周_测验题 目录 第一题 1.现在你要构建一个能够识别三个对象并定位位置的算法,这些对象分别是:行人(c1),汽车(c2),摩托车(c3)。下图中的标签哪个…

在Centos7中利用Shell脚本:实现MySQL的数据备份

目录 自动化备份MySQL 一.备份数据库脚本 1.创建备份目录 2.创建脚本文件 3.新建配置文件(连接数据库的配置文件) 4.给文件权限(mysql_backup.sh) ​编辑 5.执行命令 (mysql_backup.sh) ​编辑 二.数据库通过备份恢复 1.创建脚…

【QML-输入类】

Qt编程指南-VX:hao541022348 ■ 输入类■ Slider■ TextArea■ Dial■ ComboBox■ RangeSlider■ TextField■ Tumbler ■ 输入类 提供了基于 数字 和 文本 输入的各种输入控件 ■ Slider 示例一: ColumnLayout{anchors.fill: parent;RowLayout{Labe…

K8S异常处理

一、概述 1、k8s有时候会报错The connection to the server ip:6443 was refused - did you specify the right host or port ,本文档提供几种可能产生该报错的原因和排障思路。 二、发现问题 使用任意Kubectl 命令会报错:The connection to the serv…

鸿蒙操作系统:从手机到物联网,打造全场景智能体验

随着科技的不断发展,人们对于操作系统的需求也在不断升级。鸿蒙操作系统,作为华为推出的新一代智能终端操作系统,凭借其强大的分布式能力、流畅的用户体验以及丰富的应用生态,正逐渐成为人们关注的焦点。 一、鸿蒙操作系统概述 …

剑指 Offer(第2版)面试题 54:二叉搜索树的第 k 大节点

剑指 Offer(第2版)面试题 54:二叉搜索树的第 k 大节点 剑指 Offer(第2版)面试题 54:二叉搜索树的第 k 大节点解法1:中序遍历 - 辅助数组解法2:中序遍历 剑指 Offer(第2版…

C++基础-文件读写操作详解

目录 一、概述 二、写文件 三、读文件 四、二进制文件 4.1 二进制方式写文件

Spring Boot学习:Flyway详解

Flyway Flyway 是一款开源的数据库版本管理工具,用于管理和自动化数据库结构的变更。它可以跟踪和管理数据库的版本控制,并在应用程序启动时自动执行升级或回滚操作。 使用Flyway,你可以将数据库的变更以可重复且可控的方式应用到不同环境中…

【zookeeper经典应用实战】

文章目录 Zookeeper主要方法 Zookeeper Java客户端实战 ZooKeeper应用的开发主要通过Java客户端API去连接和操作ZooKeeper集群。可供选择的Java客户 端API有: ZooKeeper官方的Java客户端API。 第三方的Java客户端API,比如Curator。 ZooKeeper官方的客户端…

Nacos2.1.2改造适配达梦数据库7.0

出于业务需求,现将Nacos改造适配达梦数据库7.0,记录本次改造过程。 文章目录 一、前期准备二、适配流程1、项目初始化2、引入驱动3、源码修改 三、启动测试四、打包测试 一、前期准备 Nacos源码,版本:2.1.2:源码下载…

python3遇到Can‘t connect to HTTPS URL because the SSL module is not available.

远程服务器centos7系统上有minicoda3,觉得太占空间,就把整个文件夹删了,原先的Python3也没了,都要重装。 我自己的步骤:进入管理员模式 1.下载Python3的源码: wget https://www.python.org/ftp/python/3.1…