怎么用Python创建加密货币

发布时间:2021-06-24 10:42:10 作者:chen
来源:亿速云 阅读:199

这篇文章主要介绍“怎么用Python创建加密货币”,在日常操作中,相信很多人在怎么用Python创建加密货币问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python创建加密货币”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

本文将向大家介绍如何使用Python  3.9.4建立属于自己的区块链和加密货币。在构建自己的加密货币或区块链之前,您需要了解Python和区块链的基础知识。区块链或许看起来很复杂,但可以肯定的是其核心概念确实非常简单。

要求

确保您已安装最新版本的Python。

入门

创建一个新的Python文件,文件名app.py。首先,我们应该创建一个Block类。

我将参考dzone.com的代码:

class Block(object):     def __init__(self):         pass      def compute_hash(self):         pass

我们还需要创建Blockchain类蓝图:

class Blockchain(object):     def __init__(self):         pass      def build_genesis(self):         pass      def build_block(self):         pass      @staticmethod     def confirm_validity(block, previous_block):         pass      def get_data(self, sender, receiver, amount):         pass      @staticmethod     def proof_of_work(last_proof):         pass      @property     def latest_block(self):         pass

积木类

现在,让我们看一下我们刚刚创建的这些类。块类将如下所示:

import hashlib import time  class Block(object):     def __init__(self, index, proof_number, previous_hash, data, timestamp=None):         self.index = index         self.proof_number = proof_number         self.previous_hash = previous_hash         self.data = data         self.timestamp = timestamp or time.time()      @property         def compute_hash(self):         string_block = "{}{}{}{}{}".format(self.index, self.proof_number, self.previous_hash, self.data, self.timestamp)         return hashlib.sha256(string_block.encode()).hexdigest()

Block类采用几个参数:index,proof_number,previous_hash,data和timestamp。

在def compute_hash()方法中,我们的哈希将使用hash方法创建。

链条类

单独的块没有任何价值,并且使用链来加密数据,因此很重要。让我们为Chain类创建构造函数:

class Blockchain(object):     def __init__(self):         self.chain = []         self.current_data = []         self.nodes = set()         self.build_genesiss()

让我们看一下这些参数的作用。

建立创世方法

此方法将用于创建初始块。因此,我们需要调用该build_block()方法。

def build_genesis(self):         self.build_block(proof_number=0, previous_hash=0)      def build_block(self, proof_number, previous_hash):         block = Block(             index=len(self.chain),             proof_number=proof_number,             previous_hash=previous_hash,             data=self.current_data         )          self.current_data = []         self.chain.append(block)          return block

在此方法中,创建一个新Block对象并输入所需的参数:索引,证明,previous_hash和数据。然后,我们设置当前数据并将该块附加到链中。

确认有效性方法

创建加密货币/区块链的重要部分是检查区块是否有效。我们用一种新方法来做到这一点。

@staticmethod     def confirm_validity(block, previous_block):         if previous_block.index + 1 != block.index:             return False          elif previous_block.compute_hash() != block.previous_hash:             return False          elif block.timestamp & lt; = previous_block.timestamp:             return False          return True

让我们解释一下:此方法使用几个if语句来检查Block是否是它应该的块。它compute_hash()再次使用该方法。

获取数据方法

当然,您希望能够读取您的块和区块链的数据,这是通过以下get_data()方法完成的:

def get_data(self, sender, receiver, amount):             self.current_data.append({                 'sender': sender,                 'receiver': receiver,                 'amount': amount             })              return True

该方法非常简单,它采用三个参数并将它们添加到对象中。

工作证明

在这个项目中,我们将添加一个工作量证明算法以使挖掘成为可能。

让我们创建def block_mining方法:

def block_mining(self, details_miner):         self.get_data(             sender="0",             receiver=details_miner,             quantity=1,         )          last_block = self.latest_block         last_proof_number = last_block.proof_number         proof_number = self.proof_of_work(last_proof_number)         last_hash = last_block.compute_hash          block = self.build_block(proof_number, last_hash)          return vars(block)

定稿

为了结束我们的项目,我们将以下代码行添加到def latest_block方法中,

return self.chain[-1]

现在,我们将测试我们的项目:

bc = Blockchain() print("READY") print(bc.chain) #output: READY [<__main__.Block object at 0x00000241A23C5EE0>]

当您看到类似的结果时,您的区块链蓝图已成功构建。如果您想添加额外的功能,则可以这样做,请告诉我您所构建的内容!

完整代码示例:

import hashlib import time   class Block(object):     def __init__(self, index, proof_number, previous_hash, data, timestamp=None):         self.index = index         self.proof_number = proof_number         self.previous_hash = previous_hash         self.data = data         self.timestamp = timestamp or time.time()      @property     def compute_hash(self):         string_block = "{}{}{}{}{}".format(             self.index, self.proof_number, self.previous_hash, self.data, self.timestamp)         return hashlib.sha256(string_block.encode()).hexdigest()   class Blockchain(object):     def __init__(self):         self.chain = []         self.current_data = []         self.nodes = set()         self.build_genesis()      def build_genesis(self):         self.build_block(proof_number=0, previous_hash=0)      def build_block(self, proof_number, previous_hash):         block = Block(             index=len(self.chain),             proof_number=proof_number,             previous_hash=previous_hash,             data=self.current_data         )          self.current_data = []         self.chain.append(block)          return block      @staticmethod     def confirm_validity(block, previous_block):         if previous_block.index + 1 != block.index:             return False          elif previous_block.compute_hash() != block.previous_hash:             return False          elif block.timestamp >= previous_block.timestamp:             return False          return True      def get_data(self, sender, receiver, amount):         self.current_data.append({             'sender': sender,             'receiver': receiver,             'amount': amount         })          return True      @staticmethod     def proof_of_work(last_proof):         pass      @property     def latest_block(self):         return self.chain[-1]      def block_mining(self, details_miner):         self.get_data(             sender="0",             receiver=details_miner,             quantity=1,         )          last_block = self.latest_block         last_proof_number = last_block.proof_number         proof_number = self.proof_of_work(last_proof_number)         last_hash = last_block.compute_hash          block = self.build_block(proof_number, last_hash)          return vars(block)   bc = Blockchain() print("READY") print(bc.chain)

终于我们使用Python创建了自己的区块链。

到此,关于“怎么用Python创建加密货币”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. Python如何实现类似比特币的加密货币区块链的创建与交易实例
  2. 用python创建词云图片的方法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:python如何自动生成model文件

下一篇:flink mysql数据接入的方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》