区块链技术以其去中心化特性成为又一具有颠覆性特征的技术。Python作为一种面向对象的解释型计算机程序设计语言,因其具有丰富和强大的库,常被称为“胶水语言”,简单、易上手,是区块链技术爱好者快速学习区块链的首选之一。
本文作者Adil Moujahid 是世界IT服务企业排名前十、日本IT服务企业排名榜首的NTT DATA集团的数据科学家,对Python在区块链方向的应用有着十分深入的研究。
在这篇文章中,Adil Moujahid 由双重支付问题引出去中心化支付方案,介绍公钥密码学、Hash函数、挖矿等区块链核心概念,并详细阐述如何产生一个新区快、如何将新区快添加到区块链等问题,最后,利用Python实现基本的区块链和区块链客户端。
在了解区块链的核心概念之后,让Adil Moujahid 手把手,教你用Python实现区块链和区块链客户端的实操吧!干货满满!
作者 | Adil Moujahid
编译 | kou、Eli
可以说,区块链是自互联网诞生以来最重要和最具颠覆性的技术之一。作为比特币和其他加密货币背后的核心技术,区块链在过去几年获得了广泛关注。
区块链是一个分布式数据库,允许双方之间直接进行交易,而无需第三方权限,对银行、政府和市场等机构具有很大影响。
任何依赖中心化数据库作为核心竞争优势的企业或组织都可能被区块链技术所颠覆。
本文分三部分,前两部分介绍区块链的核心概念;第三部分介绍如何利用Python实现区块链以及2个区块链Web应用程序,以便终端用户轻松与区块链进行链上交互,效果图如下。
极简的区块链速成教程
2008年中本聪发布标题为“比特币:点对点电子现金系统” 的比特币白皮书,奠定了区块链的基础。
在最初的比特币白皮书中,中本聪描述了如何建立一个点对点电子现金系统,允许不通过中心化机构实现在线支付,直接从一方发送到另一方。该系统解决了数字货币中一个称为双重支付的重要问题。
什么是双重支付?
假设Alice想要支付Bob 1美元。如果Alice和Bob使用实物现金,那么Alice在执行交易后将不再拥有1美元;如果Alice和Bob使用数字货币,那么问题会变得更加复杂。
数字货币以数字形式存在,可以轻松进行复制。例如,如果Alice通过电子邮件向Bob发送价值1美元的数字文件,则Bob无法确定Alice是否删除了她的文件副本,如果Alice仍然拥有1美元数字文件,那么她可以选择将相同的文件发送给Carol。这个问题就叫做双重支付。
解决双重支付问题的一种方法是在Alice、Bob和网络中其他参与者之间建立可信任的第三方(例如银行),该第三方负责管理中心化分类账,而分类账跟踪并验证网络中的所有交易。该解决方案的缺点是,为了使系统运行,它需要信任中心化的第三方。
比特币:双重支付问题的去中心化方案
为了解决双重支付问题,中本聪提出了一个公共分类账,即通过比特币的区块链来跟踪网络中的所有交易。比特币的区块链具有以下特征:
分布式:分类帐在多台计算机上复制,而不是存储在中央服务器上。任何具有互联网连接的计算机都可以下载区块链的完整副本。
加密:用于确认发送人持有她想要发送的比特币,并决定如何将交易添加到区块链中。
不可变:交易只能添加到区块链中,但不能删除或修改。
工作量证明(PoW):网络中一种特殊类型的参与者称为矿工,他们竞争搜索加密难题的解决方案,该解决方案允许他们向比特币的区块链添加一个交易区块,此过程称为工作量证明,它能确保系统安全。
发送比特币资金流程如下:
创建一个比特币钱包。用于发送或接收比特币,比特币钱包存储2条信息:私钥和公钥。私钥是一个秘密号码,允许所有者将比特币发送给另一个用户,或者消费比特币。公钥是接收比特币所需的数字。钱包本身不存储比特币,有关比特币余额的信息存储在比特币的区块链中。
创建比特币交易。如果Alice想要向Bob发送1个比特币,Alice需要使用她的私钥连接到她的比特币钱包,并创建一个包含她想要发送的比特币数量和地址的交易。
将交易广播到比特币网络。一旦Alice创建比特币交易,她需要将此交易广播到整个比特币网络。
确认交易。收听到比特币网络的矿工使用Alice的公钥验证交易,确认Alice的钱包中有足够的比特币,并向比特币区块链添加一条包含交易详细信息的新纪录。
将区块链的变更广播给所有矿工。 一旦交易得到确认,该矿工应向所有矿工广播区块链变更,以确保他们的区块链副本全部同步。