python区块链简单模拟【04】

这篇具有很好参考价值的文章主要介绍了python区块链简单模拟【04】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

# 导入椭圆曲线算法
from ecdsa import SigningKey, SECP256k1, VerifyingKey, BadSignatureError
import binascii
import base64
from hashlib import sha256


class Wallet:
    """
        钱包
    """
    def __init__(self):
        """
            钱包初始化时基于椭圆曲线生成一个唯一的秘钥对,代表区块链上一个唯一的账户
        """
        self._private_key = SigningKey.generate(curve=SECP256k1)
        self._public_key = self._private_key.get_verifying_key()

    @property
    def address(self):
        """
            这里通过公钥生成地址
        """
        h = sha256(self._public_key.to_pem())
        return base64.b64encode(h.digest())

    @property
    def 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 json

class 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 s


class 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 datetime


class 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和哈希的初始值为None
        self.nonce = None
        self.hash = None
        
    def __repr__(self):
        return "区块内容:%s\n哈希值: %s" % (json.dumps(self.transactions), self.hash)
DIFFICULTY = 5

class ProofOfWork:
    """
        工作量证明
    """
    def __init__(self, block, miner, difficult=5):
        self.block = block
        
        # 定义工作量难度,默认为5,表示有效的哈希值以5个“0”开头
        self.difficulty = DIFFICULTY

        self.miner = miner
        # 添加挖矿奖励
        self.reward_amount = 1

    def mine(self):
        """
            挖矿函数
        """
        i = 0
        prefix = '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 = i
                self.block.hash = digest
                return self.block
            i += 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. 支持共识:参与者需要参与共识算法,并按照共识协议行动,以保持网络的一致性和完整性。

这些权利和义务有助于确保参与者之间的平等和公正,同时也保证了区块链网络的安全性和可靠性。文章来源地址https://www.toymoban.com/news/detail-761618.html

到了这里,关于python区块链简单模拟【04】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • go语言简单实现区块链

            在本文中,我们将使用Go语言来实现一个简单的区块链系统,包括区块生成、交易处理和区块打印、保存区块链等功能。 在开始之前,先确保计算机上安装了以下内容: Go编程语言:您可以从Go官方网站下载并安装Go。 Go开发环境:设置Go开发环境,包括文本编辑器

    2024年04月16日
    浏览(36)
  • 【使用go开发区块链】之获取链上数据(04)

    上一篇文章,我们完成了go连接区块链的操作,本章我们将要完成获取链上数据,并持久化到数据库的功能开发 本系列文章 1、【使用go开发区块链】之获取链上数据(01) 2、【使用go开发区块链】之获取链上数据(02) 3、【使用go开发区块链】之获取链上数据(03) 4、【使

    2024年02月12日
    浏览(49)
  • python实现简单的区块链

    运用datetime和hashlib模拟实现区块链 区块函数 包含区块高度标识:blockNo 交易数据:data nonce值 preious_hash:上一个区块哈希 timestamp:当前时间 链函数 分别包括三个方法,添加块的方法、挖矿功能、以及打包交易 添加块的方法: 挖矿功能(采用的是工作量证明共识机制) 打包交

    2024年02月06日
    浏览(36)
  • 用python搭建简单的区块链

    以下是使用Python编写简单的区块链的步骤: 安装需要的库 创建区块链的类 创建创世块和区块的添加方法 创建Flask Web应用程序 运行应用程序并测试 运行应用程序: 使用POST请求创建新的交易: 使用GET请求获取完整的区块链: 使用GET请求挖掘新的区块: 以上就是使用Python编

    2024年04月26日
    浏览(28)
  • 【Python】实现一个简单的区块链系统

    本文章利用 Python 实现一个简单的功能较为完善的区块链系统(包括区块链结构、账户、钱包、转账),采用的共识机制是 POW。 Block.py  BlockChain.py  测试结果  将工作量证明加入到 Block.py 中 测试结果 更新 BlockChain.py  测试结果  实现钱包、账户、交易功能要先安装非对称加

    2024年02月11日
    浏览(41)
  • 区块链实战:用python编写最简单的比特币区块链本地测试框架

    比特币本身并不是特别复杂,中本聪的白皮书只有十页左右。 可从该链接下载(有各种语言版本):Bitcoin: A Peer-to-Peer Electronic Cash System 但是,真正投入使用的比特币系统实际上非常复杂,包含诸多因素,涉及诸多细节,甚至对一个手续费机制研究几天还云里雾里。 如何有效地

    2024年02月05日
    浏览(46)
  • 以太坊区块链之使用truffle框架完成简单投票Dapp开发

    编写环境 remix 话不多说,直接上代码 1、启动ganache 2、在 /contracts 目录下加入新建一个.sol文件,将之前编写的智能合约代码加入该文件中,博主新建的是一个 Voting.sol 的文件 !!!该文件目录一定要与智能合约代码名字相对应 3、修改truffle-config.js 将development内的host、port改

    2024年02月09日
    浏览(52)
  • 用Python简单模拟《原神》抽卡系统

    欢迎 这是我第一次发布文章,就爱闲的没事整点活玩,写的不好还请见谅 使用的语言是Python,因为实在是太方便了o(TヘTo) 对了,要是懒得看代码思想直接跳到完整代码就彳亍 想必大家都听说过原神吧,是米哈游开发的大世界探索游戏。大学一放假就太闲了,于是就用pytho

    2024年02月06日
    浏览(41)
  • 使用python搭建简单的区块链,并实现数据上链

    目录 一、引入库文件 二、编写消息类 三、编写区块类 四、编写区块链 五、编写主函数 六、运行 引入所需的库文件,其中hashlib为核心文件。 通过编写消息类,将消息读入并进行哈希运算,与前面的消息进行连接等操作。 通过编写区块类,使用前一区块的哈希值与时间戳等

    2024年02月12日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包