Code前端首页关于Code前端联系我们

新手学习Python,实现无根区块链

terry 2年前 (2023-09-25) 阅读数 46 #后端开发

Python作为当下最流行的语言,其实能做的事情还很多。今天,我们使用Python进行简单的区块链实现。光是想想就觉得很神奇! 菜鸟学Python 零基础实现一个区块链

01.

什么是区块

首先,区块链是一种去中心化的分布式数据账本。简单来说,就是一串区块组合。那么里面的每个单元就是一个块:菜鸟学Python 零基础实现一个区块链

一个块有几个重要的属性:data、pre_hash和它自己的hash:菜鸟学Python 零基础实现一个区块链

1)。我们使用 hashlib库函数来处理哈希计算操作

2)。创建一个新类Block,它表示具有两个属性(一个 pre_hash,一个数据)

3)的块。这是为了简单起见@property装饰器类属性是用来去掉hash值的,也就是当我使用block.hash=xxx时系统会自动调用这个hash函数。

4)。这个哈希函数非常重要。我认为你的区块链中的所有内容都是用sha256加密的,这也是一种更安全的加密方式。最后,我们将得到数据串的十六进制值。

区块中,有一个非常特别的区块,那就是创世区块!它是所有区块的头部,是父区块,所以不是pre_hash菜鸟学Python 零基础实现一个区块链

02。

定义区块链

上面我们已经定义了区块,下面我们来定义区块链。将方块一一连接起来! 菜鸟学Python 零基础实现一个区块链

我们需要再写一个类,将区块逐个存储到一个列表中,形成列表链! 菜鸟学Python 零基础实现一个区块链

1)。我们声明BlockChain类,然后设置块列表数据结果来存储块。首先插入父区块链

2)。添加add_block函数添加区块:

  • 首先创建一个新的区块内存
  • 然后添加数据及其哈希值
  • 最后将区块添加到区块链中

03.

执行区块链

我们的区块和区块链已准备就绪。你是不是有点兴奋?只需几十行Python代码就可以模拟著名的区块链。 Python 的快速开发能力确实令人惊叹。我们来看看效果: >> 之前的集中值:数据:区块创世 CE VALUE: 89EB0AC031A6 3D2421CD05A2FBE41F3E35F5C3712CA839 CBF6B85C4E07B7A ------- ----------------- ------------------------- --- --------- ------

PrevHash:89eb0ac031a63d2421cd05a2fbe41f3ea35f5c3712ca839cbf6b85c4ee07b7a3

数据:Jack 发送 1 BTC 给 Sam

哈希:ad3ebab374b 25e6f3d4f0f14465 ff3f86020ce036b5b538c2a506de800dac524

------ -- ---------- ----------- ---------------------------------------------------- -- ---------- --- ------------

PrevHash:ad3ebab374b25e6f3d4f0f14465ff3f86020ce036b5b538c2a506de800dac524

Data:Sam 向 lili

Hash:f9 ba 725 838192731e73b8f28b33 c88be9798c314ea7a538fc77e80039413b872

- ----- ------ ------------------------------------ - ------- ---- ------------------

看,我们一起创建了 3 个块:

第一个区块:是父区块,没有 pre_hash,只有数据和一组哈希码

第二个区块:是“Jack 向 Sam 发送 1 个比特币”,他的区块的 pre_hash 指的是父区块的前一个哈希码区块

第三个区块:是“Sam向lili发送了2个比特币” 他区块的pre_hash指的是前一个区块Jack

04。

链区块无法更改

看完前面的文章,你对区块链基本有了一个感性的认识。那么区块链最神奇的一点就是它的不可篡改。为什么这么说? 菜鸟学Python 零基础实现一个区块链

比如我们改变了中间区块的内容。 ,当它的hash改变时,下一个块的pre_hash将与前一个块的hash不匹配!

我们看一下代码: 菜鸟学Python 零基础实现一个区块链

在第二块,我会改变数据,任意改变内容。接下来我们看看这个区块的哈希值变化:

之前的哈希值:

数据:创世区块

哈希值:89eb0ac031a63d2421cd05a2fbe41f3ea35f5c3712ca839cbf6b8 5c4ee07 b7a3

有效块

----- --- - ---------------------------------------------------------- --- - - -------------------

PrevHash:89eb0ac031a63d2421cd05a2fbe41f3ea35f5c3712ca839cbf6b85c4ee07b7a3

数据:Jack发送1.3 BTC给Alice

哈希:ec7 b87 7b3a47a74ababf298e04735 2e8805fed3fa99ad15ab788ec47a70776d0

有效区块

---------------------------------------------------------- --- - -- ----------------------------------

PrevHash:ad3ebab374b25e6f3d4f0f14465ff3f86020ce036b5b538c2a506de800dac524

数据:Sam 在 lily 中发送 2 BTC

哈希值:f9ba725838192731e73b8f28b33c88be9798c314ea7a538fc77e80039413b872

无效区块

---------------------------- --- - ------------------------ ---------------------------------------

由于第二个区块的内容发生了变化,其中的哈希值也发生了变化。这样,下一个块就无法匹配上一个块的哈希值。这就是区块链不变性!由于它使用sha256加密方法,即使是很小的改变也不起作用!

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门