主页 > imtoken官网唯一地址 > 用不到 50 行 Python 代码构建最小的区块链

用不到 50 行 Python 代码构建最小的区块链

imtoken官网唯一地址 2023-06-01 05:37:13

本文长度1134字,建议阅读3分钟

本文为您介绍区块链去中心化的架构及其实现原理。

查看比特币行情的app对比_比特币行情的软件_比特币源代码有多少行

虽然有些人将区块链视为解决待解决问题的方法,但毫无疑问,这项新技术是计算的奇迹。 但区块链到底是什么?

区块链

它是比特币或其他加密货币交易的数字分类账,按时间顺序记录并公开。

更一般地说,它是一个公共数据库,新数据存储在一个称为块的容器中,并添加到添加过去数据的不可变链(后来的区块链)中。 对于比特币和其他加密货币,此数据是一组交易记录。 当然,数据可以是任何类型。

区块链技术催生了新的全数字货币,例如比特币和莱特币,它们不是由中央政府发行或管理的。 从而为那些认为当今银行系统是骗局或失败的人带来了新的自由。 区块链中包含的以太坊技术对分布式计算进行了革命和创新,它引入了一些有趣的概念,比如智能合约。

在本文中,我将用不到 50 行 Python2 代码制作一个简单的区块链。 我称之为蛇币。

首先,您将定义块的外观。 在区块链中,每个块都存储一个时间戳和一个索引。 在 SnakeCoin 中,两者都需要存储。 为了保证整个区块链的完整性,每个区块都有一个自动识别的哈希值。 与比特币一样,每个块的哈希值将是块索引、时间戳、数据和先前块哈希值的加密哈希值。 数据可以是任何你想要的。

将 hashlib 导入为哈希器

比特币源代码有多少行_查看比特币行情的app对比_比特币行情的软件

类块:

def __init__(self, index, timestamp, data, previous_hash):

自己。 索引 = 索引

自己。 时间戳 = 时间戳

self.data = 数据

自己。 previous_hash = previous_hash

self.hash = self.hash_block()

def hash_block(自我):

sha = 散列器。 sha256()

比特币行情的软件_查看比特币行情的app对比_比特币源代码有多少行

sha.update(str(self.index) +

str(self.timestamp) +

海峡(自我。数据)+

str(self.previous_hash))

返回 sha.hexdigest()

这一步之后就是区块结构,但是现在正在创建区块链,因此需要将区块添加到实际的链中。 如前所述,每个块都需要来自前一个块的信息。 但是按照这个说法,有一个问题比特币源代码有多少行,区块链的第一个区块是怎么到那里的呢? 不得不说,第一个区块,或者说起源区块,是一个特殊的区块。 在许多情况下,它是手动添加的,或者存在允许添加它的独特逻辑。

下面将创建一个函数,它只返回一个创世块以生成第一个块。 这个块是索引0,它有一个任意的数据值和“previous hash”参数中的一个任意值。

将日期时间导入为日期

def create_genesis_block():

查看比特币行情的app对比_比特币源代码有多少行_比特币行情的软件

# 手动构造一个块

# 索引零和任意前一个散列

return Block(0, date.datetime.now(), "Genesis Block", "0")

现在已经创建了创世块,需要一个函数来生成区块链中的后续块。 该函数将链中的前一个块作为参数,为要生成的块创建数据,并返回具有适当数据的新块。 区块链的完整性随着每个新块的增加而增加比特币源代码有多少行,因为新的块哈希信息来自以前的块。 如果不这样做,外部组织就更容易“改变过去”并用全新的链替换现有链。 这一系列的哈希作为密码学证明,有助于确保一旦一个块被添加到区块链,它就不能被替换或删除。

定义下一个块(最后一个块):

this_index = last_block.index + 1

this_timestamp = date.datetime.now()

this_data = "嘿!我是块" + str(this_index)

this_hash = last_block.hash

查看比特币行情的app对比_比特币行情的软件_比特币源代码有多少行

返回块(this_index,this_timestamp,this_data,this_hash)

大部分工作已经完成,现在可以创建区块链了。 在这个例子中,区块链本身就是一个简单的 Python 列表。 列表的第一个元素是原始块。 当然后续的区块还需要添加,由于蛇币是最小的区块链,这里只添加了20个新区块。 for 循环可用于生成新块。

# 创建区块链并添加创世块

区块链 = [create_genesis_block()]

previous_block =区块链[0]

# 我们应该向链中添加多少块

# 在创世块之后

添加的块数 = 20

# 将块添加到链中

查看比特币行情的app对比_比特币行情的软件_比特币源代码有多少行

对于范围内的我(0,num_of_blocks_to_add):

block_to_add = next_block(previous_block)

blockchain.append(block_to_add)

previous_block = block_to_add

#告诉大家吧!

打印“块 #{} 已添加到区块链!”.format(block_to_add.index)

打印“哈希:{}\n”。 格式(block_to_add.hash)

让我们测试一下当前生成的区块链。

查看比特币行情的app对比_比特币行情的软件_比特币源代码有多少行

你看,这就是区块链。 如果您想在控制台中看到更多信息,您可以编辑完整的源文件并打印每个块的时间戳或数据。

这就是 SnakeCoin 所提供的全部。 为了让 SnakeCoin 扩展到当今生产区块链的规模,必须添加更多功能,例如用于跟踪跨多台机器的链更改的服务器层,以及限制在给定时间段内添加的块数的工作算法.