了解 区块链

尽管有人认为区块链 (blockchain) 是一个答案先于问题的技术,但毫无疑问, 这项新的技术已然是一个计算的奇迹。不过,到底区块链是什么呢

区块链

  一个随时间增长,记录比特币或其他加密货币的交易的公开数字账本。

    简单来说,区块链是一个公开的数据库,新的数据会被存储到一个叫做区块 (block) 的数据结构中,而区块会被添加到一个不可更改的链 (chain) 上 (也就是区块链),该链上存储着过去所添加的所有数据。在比特币和其他一些加密货币中,这些数据就是交易。不过,实际上,这些数据可以是任何类型。

    区块链技术催生了像比特币,莱特币这样全新的完全数字资产,它们不由任何一个中心权威机构发行或管理。这给那些不信任现有银行系统的个人带来了新的选项。区块链也重新定义了分布式计算,出现了像以太坊这样的技术,它引入了像智能合约这样新的概念

    在本文,我将会通过不到 50 行的 Python 代码构建一个简单的区块链原型(原文代码为 Python 2,分为多个部分托管于 gist。译者已将其改为 Python 3,并将源码放到了 GitHub 上,点击 这里 查看。),就叫 SnakeCoin 吧。

    首先,来定义我们的区块大概是什么样。在区块链中,每个区块都需要一个时间戳 (timestamp) 和一个可选的索引 (index)。在 SnakeCoin 中,我们会同时存储这两项。为了确保区块链的完整性,每个区块都需要有一个能够识别自身身份的哈希 (hash)。在比特币中,每个区块的哈希对区块索引、时间戳、数据和前一区块哈希所有内容的一个加密哈希。此外,数据可以是任何你想要存储的任何内容。

 1 import hashlib as hasher
 2
 3 class Block:
 4     def __init__(self, index, timestamp, data, previous_hash):
 5         self.index = index
 6         self.timestamp = timestamp
 7         self.data = data
 8         self.previous_hash = previous_hash
 9         self.hash = self.hash_block()
10
11     def hash_block(self):
12         sha = hasher.sha256()
13         sha.update(
14             bytes(
15                 str(self.index) + str(self.timestamp) + str(self.data) + str(
16                     self.previous_hash), ‘utf-8‘))
17         return sha.hexdigest()

很好,已经有了区块结构,但是我们构建的是一个区块链。所以,我们需要将区块添加到真正的链上。正如前文所说,每个区块都需要前一个区块的信息。如此一来,就出现了一个问题:区块链中的第一个区块是如何而来? 第一个区块,或者一般叫做创始块(genesis block), 这是一个十分特殊的块。在很多情况下,它是通过手动或是一些特殊的逻辑添加到区块链中。

为简便起见,我们创建一个简单返回创世块的函数。创始块的索引为 0,有一个任意的数据值,一个属于 “前一个哈希” 参数的任意值。

1 import datetime as date
2 def create_genesis_block():
3     #  Manually construct a block with index 0 and arbitrary previous hash
4     return Block(0, date.datetime.now(), "Genesis Block", "0")

现在我们已经创建一个创世块,接下来我们需要一个能够在区块链中生成后续区块的函数。这个函数接受区块链中的前一个区块作为参数,创建所要生成区块的数据,然后返回带有数据的新区块。当新区块对前面的区块信息进行哈希时,区块链的完整性将会得到进一步增强。如果我们不对以前的区块信息进行哈希,那么第三者就能够轻易地“篡改历史”,用一个他们自己的链替换我们的链。区块链的哈希就像是一个加密证明,它能够保证一旦一个区块被加入到区块链中,那么这个区块就永远无法被替换或者移除。

1 def next_block(last_block):
2     this_index = last_block.index + 1
3     this_timestamp = date.datetime.now()
4     this_data = "Hey! I‘m block " + str(this_index)
5     this_hash = last_block.hash
6     return Block(this_index, this_timestamp, this_data, this_hash)

这就是整个部分最困难的地方了。现在,可以来创建我们的区块链了!在我们的案例中,区块链其实仅仅是一个 Python 的列表。列表的第一个元素是创世块。当然了,我们需要增加后续区块。因为这只是一个极简的区块链模型,我们仅添加 20 个新的区块。可以通过一个循环来添加。

 1 #  Create the blockchain and add the genesis block
 2     blockchain = [create_genesis_block()]
 3     previous_block = blockchain[0]
 4
 5     #  How many blocks should we add to the chain after the genesis block
 6     num_of_blocks_to_add = 20
 7
 8     for i in range(0, num_of_blocks_to_add):
 9         block_to_add = next_block(previous_block)
10         blockchain.append(block_to_add)
11         previous_block = block_to_add
12         #  Tell everyone about it!
13         print("Block #{} has been added to the"
14               "blockchain!".format(block_to_add.index))
15         print("Hash: {}\n".format(block_to_add.hash))

来看一下效果:

可以看出我们的链已经如期工作了。如果想要在控制台中看到更多信息,可以编辑源文件打印每个块的时间戳和数据。

这是 SnakeCoin 能够完成的事情了。如果想要将 SnakeCoin 达到今天可真实使用的区块链标准,我们还必须要加入更多特性,比如跟踪在多台机器上链的变化的服务层,限制在给定时间内能够加入的区块数量的工作量证明算法。

如果想要了解更多技术细节,可以查看原版的比特币白皮书

原文地址:https://www.cnblogs.com/jiangchunsheng/p/9392270.html

时间: 2024-07-31 04:16:43

了解 区块链的相关文章

01-区块链入门之 区块链介绍一-大叔思维

1.区块链技术是什么? 总的来说,区块链是一套协议,一组规范,而不是具体代码.项目. 理解了这套协议,你可以基于现有的技术,以不同的语言去实现它.我们也无法用一句简单的话去概况什么是区块链,站的角度不同,得到的结论也不一样. 金融业: 区块链是一个分布式的账本,是一个分布式的银行记账系统. 密码学者:区块链是使用密码学构建的去信任网络. 码农:区块链就是一个确保最终一致性的分布式数据库. 维基百科:区块链(Blockchain)是一种分布式数据库,起源自比特币.区块链是一串使用密码学方法相关联产

2017共识大会快讯:普华永道联合阿里巴巴测试食品供应区块链

普华永道(PwC)澳大利亚正在与阿里巴巴(Alibaba)合作,共同测试新的供应链项目. 消息来自本次2017共识会议.这个专业的服务公司和中国的电子商务巨头此次合作的对象有:新西兰的乳制品独资企业Fonterra.维他命和保健品供应商Blackmores.澳大利亚邮政和新西兰邮政:6家公司共同合作以减少食品供应链中的欺诈现象. 普华永道曾于去年十一月发布了一个Vulcan项目.Vulcan是一个支持连接身份.资金和资产,允许用户便宜快捷地消费.共享.交易或跟踪任何实体或数字资产的平台.http

丰田研发部门建立区块链联盟,致力于自动驾驶技术

丰田研究所(TRI)提出了一个大胆的莱特币区块链战略. 昨日在2017共识大会上,丰田研究所公布了一系列合作伙伴关系,并发表了一份愿景,广泛概述了区块链技术可以如何推动这家汽车行业巨头的未来发展.而丰田研究所已经与麻省理工媒体实验室共同合作研究了区块链可以给汽车数据交换带来怎样的影响,甚至是如何为下一代自动驾驶车辆提供支持. 丰田研究所的合作伙伴包括巨链数据库(BigchainDB).Oaken Innovations.Commuterz以及Gem,每一个都正在与丰田汽车北美子公司合作研究探索这

AntShares区块链的节点部署与搭建私有链

最近陆续体验常见的区块链开源项目,例如小蚁OnChain出的AntShares.AntShares跟其他开源区块链项目不一样,他们家是使用C#开发,基于.NET Core运行在Linux,期待未来出Go语言版.... 接下来会详细讲解如何部署AntShares和搭建私有链,本文使用virtualbox + ubuntu + AntSharesCore v1.4.,参考了官方文档. 第一步,安装.net core,如果提示安装失败,则多刷"sudo apt-get update"几次:

主流区块链技术特点及Fabric V0.6&V1.0版本特点

声明:文章内容来源于网络. 一.主流区块链技术特点 二.Hyperledger的fabric V0.6总体架构: 对应的0.6版本的运行时架构: 0.6版本的架构特点是: 结构简单: 应用-成员管理-Peer的三角形关系,主要业务功能全部集中于Peer节点:    架构问题:由于peer节点承担了太多的功能,所以带来扩展性.可维护性.安全性.业务隔离等方面的诸多问题,所以0.6版本在推出后,并没有大规模被行业使用,只是在一些零星的案例中进行业务验证: 三.Hyperledger的fabric V

区块链是伟大的,比特币则不然。《FinTech,金融科技时代的来临》。3星。

本书讲技术给金融业带来的变革和可能的趋势.作者认为区块链是伟大的发明,因为他可以让金融交易免费且实时地进行.比特币则可能会被其他区块链技术取代.书中有至少一半的内容涉及到了区块链和比特币.总体评价3星. 以下是书中我认为重要的一些信息的摘抄: 1:区块链是比特币协议创建的分类账系统.在这个系统里,所有人都可以在公共论坛里总览一切业务往来,因为每笔比特币的兑换情况都被记录在一个公用域的区块链上.能够显示的并非交易细节,而是整笔交易的发生经过.你绝不可能撤销或根除已然发生的交易,包括它的时间和地点.

腾讯入局区块链,这会是腾讯的下一个连接器吗?

两年前的腾讯全球合作伙伴大会上,腾讯董事会主席兼 CEO 马化腾曾发表致合作伙伴公开信,强调互联网将更多连接用户的需求,微信.QQ都是在做连接器.到了2015年,一个极有可能成为下一个连接器的新技术出现,即区块链. 作为比特币的底层技术,区块链已经突破了金融行业,特别是随着联盟链技术的出现,让区块链有可能成为"互联网+"的核心连接技术.而在2015年5月的贵阳大数据博览会上,马化腾曾强调"互联网+"也是一种连接的能力.那么,腾讯自然不会缺席区块链,也就是"

区块链组织-超级账本(Hyperledger)的简介

区块链上有国外比较著名的组织比如R3联盟.超级账本(Hyperledger),国内的中国区块链研究联盟(China Blockchain Research Alliance).中国分布式总账基础协议联盟(China Ledger联盟).金融区块链合作联盟等. 超级账本(Hyperledger)是Linux基金会于2015年发起的推进区块链数字技术和交易验证的开源项目,目标是让成员共同合作,共建开放平台,满足来自多个不同行业各种用户案例,并简化业务流程.创始人有IBM.Intel.思科等大公司.2

《区块链研究》目录

区块链研究 引言——拜占庭将军问题 第一部分 区块链扫盲 第1章 比特币和区块链的前世今生 历史 现状 Bitcoin工具及使用 挖矿原理 第2章 比特币原理 l   搭建比特币开发环境 l   JSON-RPC l   账户.公钥.私钥.地址.伪随机.多重签名.椭圆算法.WIF等 l   交易 l   挖矿与共识 l   钱包 l   P2P l   通知 l   一致性检查Consenous l   Consenous l   使用LevelDB l   智能脚本 第3章 区块链原理 l  

区块链项目众筹(ICO)浅析

区块链项目众筹(ICO)浅析 2017-07-25 原创 Fintech科普大使 ICO是区块链初创公司项目融资的重要方式类似于Kickstarter众筹,但有不同之处(具体在下一节详述),可以避开传统的融资渠道,免去与天使投资或者风险投资人的谈判以及漫长的尽调,可以迅速筹集资金,此外ICO并不等同于股权,公开发行的代币(Token)可作为软件或服务使用及交换媒介. 第一个ICO项目是 2013年7月的Mastercoin(现更名为Omni),项目募集了5000 BTC.而近两年最成功的ICO也