新手学习Python,实现无根区块链
Python作为当下最流行的语言,其实能做的事情还很多。今天,我们使用Python进行简单的区块链实现。光是想想就觉得很神奇!
01.
什么是区块
首先,区块链是一种去中心化的分布式数据账本。简单来说,就是一串区块组合。那么里面的每个单元就是一个块:
一个块有几个重要的属性:data、pre_hash和它自己的hash:
1)。我们使用 hashlib库函数来处理哈希计算操作
2)。创建一个新类Block,它表示具有两个属性(一个 pre_hash,一个数据)
3)的块。这是为了简单起见@property装饰器类属性是用来去掉hash值的,也就是当我使用block.hash=xxx时系统会自动调用这个hash函数。
4)。这个哈希函数非常重要。我认为你的区块链中的所有内容都是用sha256加密的,这也是一种更安全的加密方式。最后,我们将得到数据串的十六进制值。 区块中,有一个非常特别的区块,那就是创世区块!它是所有区块的头部,是父区块,所以不是pre_hash 02。 定义区块链 上面我们已经定义了区块,下面我们来定义区块链。将方块一一连接起来! 我们需要再写一个类,将区块逐个存储到一个列表中,形成列表链! 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。 链区块无法更改 看完前面的文章,你对区块链基本有了一个感性的认识。那么区块链最神奇的一点就是它的不可篡改。为什么这么说? 比如我们改变了中间区块的内容。 ,当它的hash改变时,下一个块的pre_hash将与前一个块的hash不匹配! 我们看一下代码: 在第二块,我会改变数据,任意改变内容。接下来我们看看这个区块的哈希值变化: 之前的哈希值: 数据:创世区块 哈希值:89eb0ac031a63d2421cd05a2fbe41f3ea35f5c3712ca839cbf6b8 5c4ee07 b7a3 有效块 ----- --- - ---------------------------------------------------------- --- - - ------------------- PrevHash:89eb0ac031a63d2421cd05a2fbe41f3ea35f5c3712ca839cbf6b85c4ee07b7a3 数据:Jack发送1.3 BTC给Alice 哈希:ec7 b87 7b3a47a74ababf298e04735 2e8805fed3fa99ad15ab788ec47a70776d0 有效区块 ---------------------------------------------------------- --- - -- ---------------------------------- PrevHash:ad3ebab374b25e6f3d4f0f14465ff3f86020ce036b5b538c2a506de800dac524 数据:Sam 在 lily 中发送 2 BTC 哈希值:f9ba725838192731e73b8f28b33c88be9798c314ea7a538fc77e80039413b872 无效区块 ---------------------------- --- - ------------------------ --------------------------------------- 由于第二个区块的内容发生了变化,其中的哈希值也发生了变化。这样,下一个块就无法匹配上一个块的哈希值。这就是区块链不变性!由于它使用sha256加密方法,即使是很小的改变也不起作用!
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。