前沿Python技术:用不到50行的Python代码构建最小的区块链

尽管一些人认为区块链是一个等待问题的解决方案,但毫无疑问,这种新技术是计算机的奇迹。但是,区块链到底是什么呢?

区块链

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

在更一般的术语中,它是一个公共数据库,新数据存储在一个名为块的容器中,并被添加到一个不可变链(后来的区块链)中添加了过去的数据。在比特币和其他加密货币的情况下,这些数据是一组交易记录。当然,数据可以是任何类型的。

区块链技术已经催生了新的、完全数字化的货币,如比特币和莱特币,这些货币并不是由中央政府发行或管理的。因此为那些认为今天的银行系统是骗局或终将失败的人带来了新的自由。区块链所包含的以太坊技术对分布式计算进行了变革创新,它引入了一些有趣的概念,比如智能合约。

在本文中,我将用不到50行的Python2代码来做一个简单的区块链。我称它为SnakeCoin。

首先将定义块将是什么样子。在区块链中,每个块都存储一个时间戳和一个索引。在SnakeCoin中,需要把两者都存储起来。为了确保整个区块链的完整性,每个块都有一个自动识别散列。与比特币一样,每个块的散列将是块索引、时间戳、数据和前块哈希的加密哈希。数据可以是你想要的任何东西。

这一步后有块结构,但现在是创建区块链,所以需要向实际的链中添加块。如前所述,每个块都需要上一个块的信息。但是按照这个说法就有一个问题,区块链的第一个区块是如何到达那里的呢?不得不说,第一个块,或者说是起源块,它是一个特殊的块。在很多情况下,它是手动添加的,或者有独特的逻辑允许添加。

下面将创建一个函数简单地返回一个起源块以便产生第一个区块。这个块是索引0,它具有任意的数据值和“前一个哈希”参数中的任意值。

现在已经创建好了起源块,接下来需要一个函数,以便在区块链中生成后续的块。这个函数将把链中的前一个块作为参数,创建要生成的块的数据,并使用适当的数据返回新块。当新的块哈希信息来自前面的块时,区块链的完整性会随着每个新块而增加。如果不这样做,外部组织就更容易“改变过去”,用全新的方式取代已有的链条。这一系列的散列可以作为加密的证据,有助于确保一旦将块添加到区块链,它就不能被替换或删除。

大部分的工作已经完成,现在可以创建区块链了。在这次的示例中,区块链本身是一个简单的Python列表。列表的第一个元素是起源块。当然,还需要添加后续的块,因为SnakeCoin是最小的区块链,这里只添加20个新的块。可以用for循环来生成新块。

下面来测试一下目前产生的区块链。

本文来自企鹅号 - Python运维圈媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Seebug漏洞平台

以太坊合约审计 CheckList 之“以太坊智能合约规范问题”影响分析报告

作者:LoRexxar'@知道创宇404区块链安全研究团队 发布时间:2018/08/13

912
来自专栏汇智网教程

web3.eth.getTransaction

2615
来自专栏Seebug漏洞平台

从以太坊"MorphToken事件"看智能合约构造函数大小写编码错误漏洞

以太坊智能合约的含义就是一组代码(函数)和数据(合约的状态),它们位于以太坊区块链的一个特定地址上。智能合约一般使用solidity语言编写。

863
来自专栏Seebug漏洞平台

以太坊蜜罐智能合约分析

在学习区块链相关知识的过程中,拜读过一篇很好的文章《The phenomenon of smart contract honeypots》,作者详细分析了他遇到...

1553
来自专栏企鹅号快讯

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

译文:CSDN - 黑色巧克力 geek.csdn.net/news/detail/228355 ? 尽管一些人认为区块链是一个等待问题的解决方案,但毫无疑...

1710
来自专栏码洞

以太坊合约分析之拍卖算法

拍卖的基本流程很简单,一般就是拍卖人亮出一件商品,拼命的宣传吹嘘商品的价值,然后进入一轮又一轮的竞价过程,待拍卖时间结束,价高者和拍卖人一手交货一手交钱。

744
来自专栏区块链大本营

重磅 | EOS智能合约被爆整型溢出等漏洞,可致交易归零!

最近,我们在审计客户合约时发现:EOS代币合约存在整型溢出等问题,部分合约实现不够严谨。

1012
来自专栏区块链大本营

快讯 | 新型constructor函数使用漏洞,可致合约权限丢失、代币增发

据悉,Solidity 0.4.22版本在更新后,引入一种新的构造函数声明形式:constructor()public {},通过这种写法,可以避免在合约开发过...

612
来自专栏汇智网教程

如何估算太坊交易的gas消耗量

3039
来自专栏一块探索区块链

基于Java语言构建区块链(一)—— 基本原型

区块链技术是一项比人工智能更具革命性的技术,人工智能只是提高了人类的生产力,而区块链则将改变人类社会的生产关系,它将会颠覆我们人类社会现有的协作方式。了解和掌握...

5135

扫码关注云+社区