从零开始帮助您用 Python 打造自己的区块链

曾经周游列国,现在宇宙中心从事前端开发、Azure云端部署、机器学习和自动化测试等方向的工作。热爱跑步、健身。

文章正文

前言

2018 年 4 月以来,随着加密货币价格的回升,各种关于区块链的话题甚嚣尘上,各大媒体对其商业性质、技术原理、发展前景各个方面,都有各种非常深入的探讨。同时,新的项目、概念也层出不穷,让人眼花缭乱。笔者认为,“区块链” 本质上还是一种软件算计 / 架构上的创新。只有自己搭建环境,编写代码,实现从建立账本到完成交易的全过程,才能真正体会区块链的精髓。

比特币近十年来的价格逐波上升 比特币近十年来的价格逐波上升

本场 Chat 的目的是,就是帮助广大的区块链爱好者或者开发人员,从零开始打造属于您自己的区块链应用。力求用最简单的语言,介绍这个最热门的技术,没有任何基础的读者也能按图索骥,一窥究竟,消除各种专家为其增添的很多迷思。

本文首先将介绍一些区块链的背景知识,而后将循序渐进地介绍在本地开发区块链应用所需要的模块和算法,做出一个简单的区块链交易程序。在此过程中,会穿插很多关于相关名字、术语、算法的解释。相关源代码都保存在笔者的 GitHub 项目中,欢迎读者直接使用或者提交修改申请(pull request)。

GitHub 是一个面向开源及个人软件项目的托管平台,因为只支持 git 作为唯一的版本管理格式,故名 GitHub。因为这里聚集了超过 350 万开发者,其中又以男性程序员为主,所以被戏称为 “全球最大同性交友网站”。它不光支持代码的发布、管理,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱、代码片段分享等功能。任何用户都可以在其上保存和发布自己的个人项目,很多知名的开源项目如 Ruby on Rails、jQuery、python 等都托管在该平台上。

1. 区块链简介

一位名为 “中本聪” (Satoshi Nakamoto) 的人于 2008 年 11 月 1 日,在 metzdowd.com网站的密码学邮件列表中,发表了一篇名为《比特币:一种点对点式的电子现金系统》(Bitcoin: A Peer to Peer Electronic Cash System) 的论文,首次提出了 “区块链”(Blockchain)的概念。白皮书发布之后不久,中本聪于 2009 年 1 月 3 日,开发出首个实现了比特币算法的客户端程序,并进行了首次 “采矿”,获得了第一批 50 个比特币。这标志着比特币的正式诞生。中本聪出于知识分享和推广的理念,把比特币程序的代码全部开源,与世界各地的软件开发人员共同分享。

中本聪的论文 中本聪的原始论文

经过这十年的发展,区块链已经发展成为全球最具影响力的创新技术之一。从金融行业、制造产品到教育机构的各行各业,都可能会被这项技术全面改造。它的三大最主要的特点是:

  • 去中心化交易

区块链的本质是一种分散在所有用户电脑上(即所谓的 “分布式”)的计算机账本,每个分散的账本会记录区块链上进行的所有交易活动的信息。所以,它不需要一个集中的机构、网站、公司来管理这些信息。

法国大作家大仲马在 1884 这年出版的小说《三个火枪手》中有这么一句著名的话,“人人为我,我为人人”(All for one, one for all)。用这句话来形容区块链的去中心化特征非常贴切。

  • 信息不可篡改,一旦写入无法改变

作为一个记录交易的账本,人们最不希望的是它被坏人恶意篡改。任何一个用户,都可以通过交易编号,访问区块链上发生的所有交易记录和注释。由于中本聪巧妙的算法设计,配合密码限制和共识机制,如果要修改区块链中的某一个数据,就必须更改其后发生的所有数据记录,计算量无可想象,非常庞大,几乎不可能实现。实际上,比特币诞生到现在已经接近 10 年,每天都有无数的黑客绞尽脑汁攻击这个系统,但是从来没有发生过一起交易记录被篡改的事件,这足以证明了它的安全性。

  • 完全匿名

在互联网诞生初期,有句话说:“在互联网上,没人知道你是一只狗。” 这强调的是在互联网上的匿名访问性。在区块链世界里,所有的账户(或者说 “钱包”)都是通过一个密码来访问。如果你失去了密码,也就失去了账户里面的所有货币。在现实生活中,如果你忘记了密码或者丢失了银行卡,你可以去银行柜台申请补办,手续很简单。但是在 “去中心化” 的区块链世界里,没有这样的 “银行柜台”,谁也不知道你是谁,你也无法向别人证明你是某个钱包的主人。

当然,与大部分技术一样,区块链也是一个 “双刃剑”,有它的不足之处:

  • 过度消耗能源

想要生成一个新的区块,必须要大量服务器资源进行大量无谓的尝试性计算进行 “挖矿”,严重耗费电能(后文将详细介绍 “挖矿” 的过程)。

  • 信息的网络延迟

以比特币为例,任何一笔交易数据都需要同步到其他所有节点,同步过程中难免会受到网络传输延迟的影响,带来较长的耗时。

区块链应用的实际开发,可以分为以下几步。下面我们将针对每个步骤详细介绍。除了主要介绍环境配置的第二节和介绍交易步骤的第七节以外,其他步骤都分为概念介绍、代码实现、深入讲解这三个部分。所有代码均已放在我的 GitHub 项目之中,您可以直接下载使用。如果对具体的代码实现不感兴趣,您也可以直接只关注每节中的概念介绍和深入讲解这两个部分。如果您对具体的算法也不感兴趣,没关系,您可以直接跳过这些部分,进入第七节,逐步尝试自己完成 “虚拟交易”。

enter image description here

2. 环境配置:建立 “交易所”

为了便于初学者学习,笔者会尽可能详细地记录开发环境配置的每一个步骤,如果您已经熟悉 Python 环境和相关模块的使用,您可以选择跳过这一部分。

  1. 首先,您需要一台安装了 Win7 或者 Win10 系统的电脑,可以是台式机或者是笔记本电脑。当然,不一定非要用 Windows 系统来开发区块链应用,Linux 或者 Mac 系统也是很好的选择,这里我们为了照顾大部分读者,只介绍 Windows 系统下的操作。

  2. 访问 www.python.org,下载并安装 Python 3.6.5 或者将来的更高版本。

    作者正在撰写中...
隐藏内容 支付可见
内容互动
写评论
加载更多
评论文章
¥9.99 购买
× 订阅 Java 精选频道
¥ 元/月
订阅即可免费阅读所有精选内容