主页 > imtoken钱包官网下载2.0 > 如何创建自己的区块链第 1 部分

如何创建自己的区块链第 1 部分

imtoken钱包官网下载2.0 2023-09-06 05:10:58

拥有几万比特币_如何查看自己是否拥有比特币_现在拥有比特币最多的人

Python部落(python.freelycode.com)整理翻译,禁止转载,欢迎转载。

我仍然可以登录我的 Coinbase 账户,查看我的比特币钱包的历史记录,找到这笔 2012 年的交易。当时,一个比特币可以兑换 6.5 美元。 如果我仍然拥有那 0.1 个比特币如何查看自己是否拥有比特币如何查看自己是否拥有比特币,那么在撰写本文时,它的价值将超过 500 美元。 对于那些想知道的人,当比特币价值 2,000 美元时,我最终卖掉了它,所以我只得到了 200 美元——远低于现在的 500 美元。 哎,真应该继续持有。

拥有几万比特币_如何查看自己是否拥有比特币_现在拥有比特币最多的人

“谢谢你,大脑”

虽然我知道比特币的存在,但一直没有深入的了解。 我见过 USD/BTC 汇率起起落落,听过人们谈论它有多大的未来,也看过杂志上批评它的文章。 我从来没有对此发表任何评论,只是跟随这些。

同样,我对区块链技术本身知之甚少。 最近爸爸在看早间新闻的时候多次提到区块链这个词多次出现,但是他完全不知道这三个词代表什么。

那一刻,我觉得我应该更多地了解区块链,而不仅仅是上面提到的信息。 我开始做大量的“研究”,在网上寻找尽可能多的解释区块链的文章。 这些文章有好有坏,有的过于明显,有的难以理解。

看了一些文章,我明白了一个道理,就是光读不练,是学不会真知的。 所以我想,我应该通过尝试编写一个本地基础区块链来增加我对它的理解。

这里非常需要提一下,我在文章中提到的基础区块链和专业区块链是不一样的。 该链不会创建加密货币。 事实上,区块链并不需要产生可交易的货币及其与实物货币的兑换。 区块链用于存储和验证信息。 虚拟货币只是用来激励更多的人参与节点验证,并不一定要存在。

我写这篇文章有两个原因:

1、阅读本文的读者可以进一步了解区块链技术。

如何查看自己是否拥有比特币_现在拥有比特币最多的人_拥有几万比特币

2. 通过解释代码比仅仅编写代码我能学到更多。

在本文中,我将展示 1)存储区块链数据的方式,2)如何生成初始区块,3)节点如何与本地区块链数据同步,4)如何显示区块链(未来它将在与其他节点同步时使用),5)通过挖矿创建一个有效的新块。 在本系列的第一篇文章中,不会出现其他节点。 这里也没有钱包、详细信息和重要数据。 这些会在后面的文章中提到。

长话短说

如果你不想深入细节阅读代码,或者你只是在搜索区块链文章时偶然看到这篇文章,我会尝试写一个总结来描述区块链是如何工作的。

从高层次的角度来看,区块链是一个人人都可以参与并存储、查看、确认的数据库,数据永远不会被删除。

在低层次上,这些区块中的数据可以是任何特定区块链允许的数据。 例如,存储在比特币区块链中的是账户之间的比特币交易。 同样的以太币交易存储在以太坊区块链中,但它还包括运行代码的记录。

在较低的层次上,在一个区块被创建并链接到区块链之前,它需要被区块链上的大多数人(通常称为节点)验证。 “真正的”区块链是包含最多块的区块链,因为它被大多数节点验证为正确。 这意味着,如果一个节点试图更改前一个块的数据,则新块将不会被识别,并且该节点将不会信任来自错误块的数据。

如果您仍然感到困惑,请不要担心,我花了很长时间才弄明白。 当然,写这篇文章会花更多的时间,让对区块链一窍不通的人也能看懂。

第一步 - 类和文件

对我来说,第一步是编写一个在节点运行时处理块的类。 我将这个类命名为 Block。 坦率地说,我们对这门课无能为力。 在这个 _init_ 函数中,我们相信所有需要的信息都由字典提供。 自己写一个生成的区块链是不明智的,但是为了让文中的例子更容易理解,我还是写了完整的代码。 我也想写一个工具,把重要的区块信息放到一个字典里,这样当我在终端打印区块信息的时候,可以更好的展示信息。

如何查看自己是否拥有比特币_拥有几万比特币_现在拥有比特币最多的人

我们可以使用非常简单的代码来创建第一个块。

如何查看自己是否拥有比特币_现在拥有比特币最多的人_拥有几万比特币

拥有几万比特币_如何查看自己是否拥有比特币_现在拥有比特币最多的人

好了,本节的最后一个问题是将数据存储到文件系统中。 存储后,我们关闭节点时不会丢失本地块的数据。

使用类似于以太坊文件夹的方案,我将存储数据的文件夹命名为“chaindata”。 每个块现在都存储在一个以其索引命名的文件中。 我们要确保文件名有足够的前导零,以便文件按数字排序。

使用上面的代码,可以创建第一个块。

现在拥有比特币最多的人_如何查看自己是否拥有比特币_拥有几万比特币

第 2 步 - 在本地同步区块链

当一个节点启动时,需要先同步它,然后才能为链挖掘、解释数据或发送/创建新数据。 由于我们没有创建其他节点,所以我在这里只讨论从本地文件读取块。 将来,从文件中读取也将成为同步的一部分,但也会与其他节点通信以获取在自己节点不运行时产生的其他块。

如何查看自己是否拥有比特币_拥有几万比特币_现在拥有比特币最多的人

现在功能还是很简单易懂的。 从文件夹中读取字符串并将其加载到数据结构中不需要超级复杂的代码,因此上面的代码可以完成这项工作。 但是在后面的文章中,当我要实现不同节点之间的通信时,sync模块会变得更加复杂。

第 3 步 - 展示区块链

现在我们已经将区块链存储在内存中,下一步是在浏览器中显示它。 显示有两个用途,一是验证浏览器中的变化,二是以后用浏览器查看和操作区块链,比如转账、管理钱包等。

这里我使用flask实现,因为它非常好用。

拥有几万比特币_如何查看自己是否拥有比特币_现在拥有比特币最多的人

下面是展示区块链json的代码,我省略了导入包的过程以减少篇幅。

如何查看自己是否拥有比特币_现在拥有比特币最多的人_拥有几万比特币

运行这段代码,访问 localhost:3000/blockchain.json,你会看到当前的区块。

第 4 步 - “挖矿”,生成区块

我们只有一个创世块,如果我们想存储和分发更多的数据,我们需要把它放在一个新的块中。 这里要解决的问题是如何创建一个新块并将其与旧块链接起来。

在比特币白皮书中,中本聪描述了一种方法。 注意,“时间戳服务器”就是我们前面提到的“节点”:

我们提出的解决方案从时间戳服务器开始。 时间戳服务器的工作原理是使用区块中Item的哈希值作为时间戳,然后广泛发布这个哈希值……时间戳用来证明那一刻数据是存在的。 显然,为了能够得到哈希值。 每个时间戳的hash值包含了之前的时间戳,每增加一个时间戳又包含了之前的时间戳,这样就形成了一条链。

下图描述了这个过程:

现在拥有比特币最多的人_拥有几万比特币_如何查看自己是否拥有比特币

一般来说,这一步是将块链接在一起。 我们用一个哈希值来存储新区块的信息,包括区块的创建时间,前一个区块的哈希值,信息。 我将把这组信息称为块的“标题”。 通过这种方法,我们可以通过遍历块的所有先前哈希值并验证序列来验证块的真实性。

在这个例子中,我创建了头文件来将字符串的所有值添加到一个巨大的字符串中。

包括的数据包括:

现在拥有比特币最多的人_如何查看自己是否拥有比特币_拥有几万比特币

1. Index,代表区块序号

2. 前一个区块的哈希值

3.数据,在这个例子中只是随机字符串。 对于比特币,这称为 Merkle 可信树的根,代表有关交易的信息。

4. 挖出区块的时间戳

如何查看自己是否拥有比特币_拥有几万比特币_现在拥有比特币最多的人

将各种信息的字符串组合在一起不需要在混淆之前创建标题。 这里的要求是每个人都知道如何创建区块头并将前一个区块的哈希值包含在区块头中。 只有这样,大家才能确认新区块的哈希是正确的,确认两个区块之间的联系。

比特币标头比组合字符串复杂得多。 它使用数据、时间的哈希值,并解决了如何在计算机中存储字节的问题。 但在这个例子中,使用字符串就足够了。

有了标头后,我们需要通过计算哈希来查看并验证哈希是否正确。 我将在哈希计算中使用不同于比特币方法的东西,当然我仍然使用 sha256 模块来运行标头。

拥有几万比特币_现在拥有比特币最多的人_如何查看自己是否拥有比特币

最后,使用上述函数为新区块计算一个哈希值,将值存储到新区块中,并将该区块添加到chaindata字典中。

拥有几万比特币_现在拥有比特币最多的人_如何查看自己是否拥有比特币

通过这种方式创建块,谁拥有最快的 CPU,谁就可以创建其他节点识别的最长链。 我们需要放慢创建新区块的速度,并在移动到下一个区块之前相互确认。

如何查看自己是否拥有比特币_现在拥有比特币最多的人_拥有几万比特币

第五步 - 工作量证明

为了减慢速度,我将进行工作量证明,就像比特币所做的那样。 权益证明是区块链达成共识的另一种方式,我将在后面实现。

实现的方法是调整每个块的哈希值必须有一定的属性要求。 就像比特币一样,在你移动到下一个区块之前,我会确保当前的哈希值以一定数量的 0 开头。 因此,我将在标头中再添加一条信息——Nonce(一个任意或不重复的随机值,只使用一次)。

如何查看自己是否拥有比特币_现在拥有比特币最多的人_拥有几万比特币

现在调整挖矿模块创建hash,但是如果block的hash没有以足够的0开头,我们需要增加nonce,然后创建一个新的header,计算一个新的hash,提前检查是否有足够的0 .

如何查看自己是否拥有比特币_拥有几万比特币_现在拥有比特币最多的人

完美~现在这个新块包含一个有效的随机数值,所以其他节点可以验证它的哈希值。 现在我们可以生成、存储和分发新块。

总结

这就是本文的全部内容! 关于区块链还有很多问题和特点没有提到。 例如,其他节点如何参与? 节点如何传输包含在块中的数据? 我们如何将信息存储在一个块中而不是一个大字符串中? 是否有不包含大数据字符串的格式更好的标头?

本系列中将有更多部分解决上述问题。 那么你想知道哪一部分,欢迎你的建议。 最后,感谢我的姐姐Sara,她看了我的文章,问了很多关于区块链的问题,让我能把文章写得通俗易懂。

英文原文:

译者:XTH