区块链技术

从零开发学习区块链技术教程

作者:admin 2019-05-11 我要评论

本教程将向具有任何编程技能水平的 Python 开发人员介绍区块链技术教程。通过从零开始实现一个公有区块链并构建一...

本教程将向具有任何编程技能水平的 Python 开发人员介绍区块链技术教程。通过从零开始实现一个公有区块链并构建一个简单应用程序来利用它,你将了解区块链到底是什么。你将能够使用 Flask 微框架为区块链的不同功能创建端点,比如添加事务,然后在多个机器上运行脚本来创建一个去中心化网络。你还将了解如何构建一个简单的用户界面,以便与区块链进行交互,并存储任何用例的信息,比如对等支付、聊天或电子商务。
 
区块链技术教程
 
Python 是一种容易理解的编程语言,这是我在本教程中选择它的原因。通过学习本教程,你将实现一个公有区块链并了解它的实际应用。GitHub 上提供了一个完整的样本应用程序代码,该应用程序完全是用 Python 编写的。
 
2008 年,一个名叫 Satoshi Nakamoto 的人(或者可能是一个小组)发表了一篇名为《比特币:一种对等电子现金系统》的白皮书。该文章结合了密码学技术和对等网络,不需要依靠中心化权威机构(比如银行)就能在人们之间实现付款。比特币应运而生。除了比特币之外,这篇文章还介绍了一种存储数据的分布式系统(即现在广为人知的“区块链”),该系统的适用范围远不只是付款或加密货币。
 
从那时起,几乎每个行业都对区块链产生了浓厚的兴趣。无论是像比特币这样的完全数字化的货币、像以太坊这样的分布式计算技术,还是像 IBM Blockchain Platform 所基于的 Hyperledger Fabric 这样的开源框架,现在都以区块链作为其背后的基础技术。
 
“区块链”是什么?
区块链是一种存储数字数据的方式。数据可以是任何内容。对于比特币,它是事务(在帐户之间转移比特币),它甚至可以是文件;这都无关紧要。数据是以区块形式进行存储的,区块使用哈希值链接在一起。因此得名“区块链”。区块链的神奇之处是在其中添加和存储此类数据的方式,该方式造就了一些非常理想的特征:
 
首先定义一下我们将要构建的应用程序的用途。我们的目的是构建一个允许用户共享信息的简单网站。因为内容将存储在区块链中,所以它无法更改且会永远存在。我们将采用自下而上的实现方式。首先定义我们将存储在区块链中的数据的结构。 一篇帖子(任何用户在我们的应用程序上发布的一条消息)将由3个基本要素来标识
1、将事务存储到区块中
 
我们将采用一种广泛使用的格式来将数据存储在区块链中:JSON。以下是一篇存储在区块链中的帖子的格式:
术语“数据”通常在互联网上被“事务”一词所取代。所以,为了避免混淆并保持一致,我们将使用术语“事务”来表示在我们的示例应用程序中发布的数据。
 
事务被打包到区块中。一个区块可以包含一个或许多个事务。包含事务的区块频繁地生成并添加到区块链中。因为可能有多个区块,所以每个区块都应有一个唯一 ID:
 
class Block: 
 
    def __init__(self, index, transactions, timestamp): 
 
        self.index = [] 
 
        self.transactions = transactions 
 
        self.timestamp = timestamp
 
我们希望检测出对区块内存储的数据的任何篡改。在区块链技术教程中,这是使用一个哈希函数来实现的。哈希函数接受任何大小的数据并生成固定大小的数据,该结果通常用于识别输入。下面是 Python 中的一个使用 sha256 哈希函数的示例:
 
>>> from hashlib import sha256
 
>>> data = "Some variable length data"
 
>>> sha256(data).hexdigest()
 
'b919fbbcae38e2bdaebb6c04ed4098e5c70563d2dc51e085f784c058ff208516'
 
>>> sha256(data).hexdigest() # no matter how many times you run it, the
 
 result is going to be the same 256 character string
 
'b919fbbcae38e2bdaebb6c04ed4098e5c70563d2dc51e085f784c058ff208516'
 
我们已设置了区块。区块链应该是一个区块集合。我们可以将所有区块都存储在 Python 列表中(等效于数组)。但这还不够,因为如果有人故意替换了集合中的一个区块该怎么办?用修改过的事务创建一个新的区块,计算哈希值,然后替换任何旧区块,这在我们的当前实现中并不是什么难事,因为我们会保持区块的不可更改性和顺序。
 
我们需要采用某种途径来确保对过去的区块的任何更改都会造成整个链的失效。一种方法是通过哈希值将区块链接起来。谈到链接,我们指的是将前一个区块的哈希值包含在当前区块中。所以,如果任何以前的区块的内容发生更改,该区块的哈希值也会发生更改,导致与下一个区块中的 previous_hash 字段不匹配。

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 孟加拉大学毕业生到国外学习

    孟加拉大学毕业生到国外学习

  • 哪种区块链编程语言最好用?

    哪种区块链编程语言最好用?

  • 银行业如何与区块链技术相结

    银行业如何与区块链技术相结

  • 量子计算与区块链对密码学的

    量子计算与区块链对密码学的