当前位置: 首页 > 科技观察

如何使用Python创建自己的加密货币_0

时间:2023-03-18 13:22:59 科技观察

随着当前加密货币的兴起,区块链正在科技界掀起波澜。该技术之所以引起如此多的关注,主要是因为它能够保证安全、实施去中心化以及加快跨多个行业(尤其是金融行业)的流程。从本质上讲,区块链是一个公共数据库,不可逆地记录和验证数字资产的拥有和转移。像比特币和以太坊这样的数字货币就是基于这个概念。区块链是一项令人兴奋的技术,可用于改变应用程序的功能。最近,我们看到政府、组织和个人使用区块链技术创建自己的加密货币。值得注意的是,当Facebook推出自己的加密货币Libra时,这一消息在全球引起了广泛关注。如果您也可以效仿并创建自己的加密货币版本,您会怎么做?我考虑了这一点并决定开发一种可以创建加密货币的算法。我决定将加密货币称为fccCoin。在本教程中,我将逐步解释构建数字货币的过程(我使用Python编程语言的面向对象概念)。这是用于创建fccCoin的区块链算法的基本蓝图:():#checkswhethertheblockchainisvalidpassdefnew_data(self,sender,recipient,quantity):#addsanewtransactiontothedataofthetransactionspass@staticmethoddefconstruct_proof_of_work(prev_proof):#protectstheblockchainfromattackpass@propertydeflast_block(self):#returnsthelastblockinthechainreturnsself.chain[-1]现在,让我了解下一步做什么...1.建立第一个区块类区块链由几个相互连接的区块组成,因此如果一个区块被篡改,链条就失效了。在应用上述概念时,我创建了以下初始块类:.timestamp=timestamportime.time()@propertydefcalculate_hash(self):block_of_string="{}{}{}{}{}".format(self.index,self.proof_no,self.prev_hash,self.data,self.timestamp)返回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类实例的引用,允许访问与该类关联的方法和属性;索引——跟踪区块在区块链中的位置;proof_no-这是在创建一个块期间产生的新数量(称为挖矿)时;prev_hash—这是指链中前一个块的哈希值;数据——提供所有已完成交易的记录,例如购买的金额;timestamp——为交易设置时间戳。类中的第二个方法calculate_hash将使用上述值生成块的哈希值。SHA-256模块被导入到项目中以帮助获取块的哈希值。在将值输入加密哈希算法后,该函数返回一个代表块内容的256位字符串。这就是在区块链中实现安全性的方式——每个块都有一个哈希值,并且该哈希值将依赖于前一个块的哈希值。因此,如果有人试图破坏链中的任何一个块,其他块将具有无效的哈希值,从而导致整个区块链网络的破坏。最终,一个块将如下所示:{"index":2,"proof":21,"prev_hash":"6e27587e8a27d6fe376d4fd9b4edc96c8890346579e5cbf558252b24a8257823","transactions":[{'sender':'0','recipient'arson:'QuincyLarson:'','quantity':1}],"timestamp":1521646442.4096143}2.建立区块链类顾名思义,区块链的主要思想是将多个区块相互“链接”起来。因此,我将构建一个对管理整个链的工作有用的区块链类。这是大部分动作发生的地方。Blockchain类将有各种辅助方法来完成区块??链中的各种任务。让我解释一下每个方法在类中的作用。A.构造方法该方法确保区块链被实例化。classBlockChain:def__init__(self):self.chain=[]self.current_data=[]self.nodes=set()self.construct_genesis()以下是它的属性的作用:self.chain-这个变量保存所有块;自己。current_data——这个变量将所有已完成的交易保存在区块中;self.construct_genesis()-此方法将负责构建初始块。B.构建创世块区块链需要一个construct_genesis方法来构建链中的初始块。在区块链惯例中,这个区块是特殊的,因为它象征着区块链的开始。在这种情况下,让我们通过简单地将一些默认值传递给Construct_block方法来构造它。我给proof_no和prev_hash都赋予了零值,尽管你可以提供任何你想要的值。defconstruct_genesis(self):self.construct_block(proof_no=0,prev_hash=0)defconstruct_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)returnblockC.构造一个新块construct_block方法用于在区块链中创建一个新块。这是此方法的各种属性所发生的情况:index-代表区块链的长度;proof_nor&prev_hash-调用者方法传递它们;数据-包含节点上任何区块中未包含的所有交易的记录;self.current_data-用于重置节点上的事务列表。如果已经构建了一个块并为其分配了交易,则会重置列表以确保将未来的交易添加到列表中。而且,这个过程将持续进行;self.chain.append()-此方法将新构造的块附加到链上;return-最后,返回一个构造好的块对象。D.检查有效性check_validity方法对于评估区块链的完整性绝对重要,确保异常。如上所述,散列对于区块链的安全至关重要,因为即使对对象进行微小的更改也会导致生成全新的散列。因此,此check_validity方法使用if语句检查每个块的哈希值是否正确。它还通过比较其哈希来验证每个块是否指向正确的前一个块。如果一切正确则返回真;否则,返回真。否则,它返回false。@staticmethoddefcheck_validity(block,prev_block):ifprev_block.index+1!=block.index:returnFalseeliifprev_block.calculate_hash!=block.prev_hash:returnFalseeliifnotBlockChain.verifying_proofamp(block.proof_no,prev_block.proof.blockb