虽然有些人认为区块链是解决等待问题的方法,但毫无疑问,这项新技术是计算的奇迹。但区块链到底是什么?区块链是比特币或其他加密货币交易的数字分类帐,按时间顺序记录并公开。更一般地说,它是一个公共数据库,新数据存储在一个称为块的容器中,并添加到添加过去数据的不可变链(后来的区块链)中。对于比特币和其他加密货币,此数据是一组交易记录。当然,数据可以是任何类型。区块链技术催生了新的全数字货币,例如比特币和莱特币,它们不是由中央政府发行或管理的。从而为那些认为当今银行系统是骗局或失败的人带来了新的自由。区块链中包含的以太坊技术对分布式计算进行了革命和创新,它引入了一些有趣的概念,比如智能合约。在本文中,我将用不到50行Python2代码制作一个简单的区块链。我称之为蛇币。首先,您将定义块的外观。在区块链中,每个块都存储一个时间戳和一个索引。在SnakeCoin中,两者都需要存储。为了保证整个区块链的完整性,每个区块都有一个自动识别的哈希值。与比特币一样,每个块的哈希值将是块索引、时间戳、数据和先前块哈希值的加密哈希值。数据可以是任何你想要的。importhashlibasherclassBlock:def__init__(self,index,timestamp,data,previous_hash):self.index=indexself.timestamp=timestampself.data=dataself.previous_hash=previous_hashself.hash=self.hash_block()defhash_block(self):sha=hasher.sha256()sha.update(str(self.index)+str(self.timestamp)+str(self.data)+str(self.previous_hash))returnsha.hexdigest()经过这一步,有一个block结构,但是现在创建的是区块链,所以需要在实际的链中添加块。如前所述,每个块都需要来自前一个块的信息。但是按照这个说法,有一个问题,区块链的第一个区块是怎么到那里的呢?不得不说,第一个区块,或者说起源区块,是一个特殊的区块。在许多情况下,它是手动添加的,或者存在允许添加它的独特逻辑。下面将创建一个函数,它只返回一个创世块以生成第一个块。这个块是索引0,它有一个任意的数据值和“previoushash”参数中的一个任意值。importdatetimeasdatedefcreate_genesis_block():#Manuallyconstructablockwith#indexzeroandarbitraryprevioushashreturnBlock(0,date.datetime.now(),"GenesisBlock","0")现在已经创建了创世块,需要一个函数来生成区块链块中的后续哈希值。该函数将链中的前一个块作为参数,为要生成的块创建数据,并返回具有适当数据的新块。区块链的完整性随着每个新块的增加而增加,因为新的块哈希信息来自以前的块。如果不这样做,外部组织就更容易“改变过去”并用全新的链替换现有链。这一系列的哈希作为密码学证明,有助于确保一旦一个块被添加到区块链,它就不能被替换或删除。defnext_block(last_block):this_index=last_block.index+1this_timestamp=date.datetime.now()this_data="嘿!我是block"+str(this_index)this_hash=last_block.hashreturnBlock(this_index,this_timestamp,this_data,this_hash)most工作已完成,现在可以创建区块链。在这个例子中,区块链本身就是一个简单的Python列表。列表的第一个元素是原始块。当然后续的区块还需要添加,由于蛇币是最小的区块链,这里只添加了20个新区块。for循环可用于生成新块。#Createtheblockchainandaddthegenesisblockblockchain=[create_genesis_block()]previous_block=blockchain[0]#Howmanyblocksshouldweaddtothechain#afterthegenesisblocknum_of_blocks_to_add=20#Addblockstothechainforiinrange(0,num_of_blocks_to_add):block_to_add=next_block(previous_block)blockchain.append(everblock_to_add)previous_#addit=Tblock之前_#addit=Tblock{}已添加到区块链!".format(block_to_add.index)print"Hash:{}\n".format(block_to_add.hash)让我们测试一下当前生成的区块链。你看,这就是区块链。如果您想在控制台中看到更多信息,您可以编辑完整的源文件并打印每个块的时间戳或数据。这就是SnakeCoin所提供的全部。为了让SnakeCoin扩展到当今生产区块链的规模,必须添加更多功能,例如用于跟踪跨多台机器的链更改的服务器层,以及限制在给定时间段内添加的块数的工作算法.
