一文看懂区块链和比特币

一文看懂区块链和比特币

在理解区块链与比特币之前,需要知道以下的几个概念

公钥与私钥与比特币地址

私钥

私钥就是一个随机数,就像是掷骰子得到的数,只不过这个随机数比较大,是一个256位的二进制数。在交易中,私钥用于生成支付比特币所必需的签名以证明资金的所有权。

在比特币中生成私钥一般是通过随机取出一长串随机字节,对其使用SHA256哈希算法进行运算,可以简单理解为产生一个256位的数字。如果运算结果小于n-1(n为常数,略小于2^256),就有了一个合适的私钥。否则,就用另一个随机数再重复一次。

公钥

可以由私钥通过椭圆曲线算法得到

地址

比特币的地址通常以收款方出现。比特币的地址可由公钥经过单向的加密哈希算法得到

它们的关系如下图所示,私钥通过计算生成公钥, 公钥又通过了另一种计算生成了地址

一文看懂区块链和比特币_第1张图片

作用

一、公钥加密

假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥。

我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用
数字2,就是我的私钥,来解密。这样我就可以保护数据了。

我的好朋友x用我的公钥1加密了字符a,加密后成了b,放在网上。别人偷到了这个文件,但是别人解不开,因为别人不知道2就是我的私钥,
只有我才能解密,解密后就得到a。这样,我们就可以传送加密的数据了。

二、私钥签名

如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2是我的私钥),结果所有的人都看到我的内容了,因为他们都知
道我的公钥是1,那么这种加密有什么用处呢?

但是我的好朋友x说有人冒充我给他发信。怎么办呢?我把我要发的信,内容是c,用我的私钥2,加密,加密后的内容是d,发给x,再告诉他
解密看是不是c。他用我的公钥1解密,发现果然是c。
这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。
这样我们就能确认发送方身份了。这个过程叫做数字签名。当然具体的过程要稍微复杂一些。用私钥来加密数据,用途就是数字签名。

总结:公钥和私钥是成对的,它们互相解密。

公钥加密,私钥解密;私钥数字签名,公钥验证。

看到这里你应该理解了公钥私钥的概念了。那我们继续往下看。

分布式账本技术

分布式分类账是分布在多个节点或计算设备上的数据库,每个节点都可以复制并保存一个分类帐,且每个节点都可以进行独立更新。

分布式账本技术的突破性特征是分类账不由任何中央机构维护,分类账的更新是由每个节点独立构建和记录的。节点可以对这些更新进行投票,以确保其符合大多数人的意见。这种投票又被称为共识,共识会通过算法自动达成。共识一旦达成,分布式分类账就会自行更新,分类账的最新的商定版本将分别保存在每个节点上。

区块链技术

区块链是分布式账本技术的一种形式,并非所有的分布式分类账都使用一连串的区块来提供安全有效的分布式共识。

所有的区块都分布在点对点网络中,由于它是一个分布式账本,所以它可以在没有服务器管理的情况下存在,其数据质量可以通过数据库复制和计算确认来维护。

然而,区块链的append-only结构使其与其他类型的分布式分类账截然不同。区块链上的数据被分组在不同的块中,这些块会彼此链接并用加密技术来进行保护。

区块链本质上是一个不断增长的记录列表,它的结构只允许将数据添加到数据库中,所以更改或删除先前输入的数据是不可能的。因此区块链技术非常适合记录事件、管理记录、处理交易、追踪资产和投票。

区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。
区块链(Blockchain),是比特币的一个重要概念,它本质上是一个去中心化的数据库,同时作为比特币的底层技术,
是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。

看到这里,也许你会好奇什么是区块、节点,矿工是啥,别急,下文都会一一提到。

区块

一个区块主要由区块头和区块体两部分组成。区块头的大小,仅占80个字节,一个满载的区块为1M大小,是区块头的12500倍。

那为啥要生产区块呢?

因为区块链系统是分布式的,为了保证所有存储节点的数据一致,除了验证交易外,还有一个达成共识的过程,显然以单条交易为单元达成共识是低效的,将如果交易打包成区块能提高系统的效率。

区块的结构

一文看懂区块链和比特币_第2张图片

修改区块数据不太可能

由于区块一产生就盖上时间戳,按时间排序,就能确定下一个区块。假设当前区块头摘要篡改前是A,篡改后是B,下一个区块头包含着A,当前区块篡改后的A和下一个区块保存的B不匹配,就会出现错误, 所以一旦有恶意篡改的行为很快就会被系统检测到。

如果想篡改成功,那就得改动下一个区块,以此类推,必须同时改动该区块后面的所有区块。因为将一个区块放入区块链中需要消耗非常多的资源(资源种类依共识算法的不同而不同,可以是计算力,流逝的时间,拥有的权益等),随着后面添加的区块越来越多,所以要想改动某个区块几乎是不可能的。

节点

节点是区块链分布式系统中的网络节点,是通过网络连接的服务器、计算机、电话等,针对不同性质的区块链,成为节点的方式也会有所不同。

不同共识机制的区块链,成为其节点的方式也不同,如比特币节点是参与交易和挖矿,EOS是参与代理竞选成为节点。操作一个节点的人可以是普通的钱包用户、矿工和多个人协作。

一般的节点并不会储存账本数据,只提供一般的算力支持,不进入共识机制。所以区块链去中心化特征中起最重要作用的就是全节点。

参考实现节点(又叫全节点)、完整区块链节点、独立矿工节点等等节点类型,这些节点的首要任务是校验和维护一个不断增长、内含交易记录的区块链体。

节点的分类

一文看懂区块链和比特币_第3张图片

通常在网络中构造组成是这样的

全节点/ 完整节点/ 参考实现节点/Full Node

全节点是是拥有完整区块链账本的节点,全节点需要占用内存同步所有的区块链数据,能够独立校验区块链上的所有交易并实时更新数据,主要负责区块链的交易的广播和验证。

全节点作用

一、保存完整账本和验证交易,全节点能够验证比特币网络中的交易。

每当新的交易或区块出现在网络中时,接收到这些信息的全节点,就会独立对每笔交易是否有足够余额可供支出、是否存在双花问题、脚本是否符合规定等条件进行验证,然后再将其发送给网络中其他的节点,并将这些交易信息保存在本地内存中。

当所有节点完成对交易的验证之后,这笔交易就被保存在了所有全节点的内存中,从而也就确保了交易的安全性和区块链信息的不可篡改性。

二、成为比特币网络的第二层防御,保障比特币网络安全。

比特币其实有两道防御机制,一是算力,二是组成比特币网络的全节点。全节点的除了保存完整账本和验证交易外,另一个主要作用就是作为比特币网络的第二层防御。

这一点中本聪在创世白皮书中就有提到,一旦有算力叛变试图改变比特币区块共识,全节点组成的比特币网络可以拒绝掉这些交易。这就是为什么一直有人洗脑普及spv轻节点,(简单支付验证节点,又称轻量级节点,更易于操作。它有两个限制:它们需要通过全节点来访问区块链,并且它们只接受但不验证区块的交易。)如果用户只剩下用spv的能力,那么比特币网络将无法抵御算力的攻击。因此,在通常情况下,全节点数量越多,网络安全性越高。

节点的组成

节点由路由、区块链存储(保存公共账本(即交易池)在终端的内存中的缓冲池中)、挖矿和钱包这四个模块组成

1、路由(network routing):

路由模块承担了发现和维持对等节点的连接、以及广播和接纳新区块的功能实现。理论上,路由模块应该是所有节点都应该具备的模块,否则单一的节点无法参与完整区块链网络的共识和协同。当然也有例外,比如矿池模型中就没有路由模块,但它却十分依赖路由的一些核心协议。

2、区块链存储(full blockchain database):

区块链存储模块负责保存完整的、最新的区块链副本,本质上就是数据。

3、挖矿(miner):

在比特币的区块链网络上,挖矿模块的任务是通过在某种特殊的硬件设备上执行POW共识算法,以相互竞争的方式创建新的区块。其他平台链上也存在类似的概念,可能基于的硬 件或者执行的共识算法不一样等等。

4、钱包(wallet):

钱包模块主要功能是用于管理节点的私钥、资产以及进行交易行为等。

参考实现节点、完整区块链节点、独立矿工节点、轻量级钱包节点彼此两两相连,其中轻量级钱包节点需要至少连接到一个完整区块链节点/全节点上。

池协议服务节点一对多伺候着无数的挖矿节点和有限的轻量级Stratum钱包节点,同时池协议服务节点本身必须连接到至少一个完整区块链节点/全节点上。

也即是说,矿工是节点。但节点不一定是矿工,有挖矿功能(矿工模块)的节点才叫矿工

那啥是挖矿呢?

挖矿

挖矿指的是一种计算,挖矿的单位一般是区块,我们一般说的矿工挖出一个区块,
就是指一个运行在客户端上的链上的节点从现有的交易池里选择出一些交易,
记录在一个区块中,并且计算出一个指定的值。

完成了上述的过程会有一些奖励,就是比特币,这就算是挖到矿了。
总结一下,挖矿就是在区块链中创建,验证,发布和传播区块来保护网络的一种方式。

交易在一个内存池(队列)里,矿工尝试打包,取出交易,计算难题,计算出来了,于是加上自己的签名,完成确认过程。

区块提交后,其他节点会同步该区块,并对区块中的每个交易进行验证,如果发现有交易是本地队列已经有的,就将该交易从自己的队列里剔除。

记账是hash打包的过程,就是hash打包交易信息,由于处理这些内容会消耗资源,所以算法会给予奖励

挖矿过程就是计算区块hash的过程,几乎所有的机器都可以挖矿成功。关键在于谁先挖到矿,因为当一台机器挖矿成功就向网络广播,其他挖矿在对这个hash进行 校验 之后,就停止自己的挖矿,开始基于这个区块挖新的矿。而每一个 被挖到区块 中记录的第一笔交易是给挖到这个区块的矿工自己的奖励金,所以抢到第一个挖矿成功名额对于矿工来说至关重要。

重点

理解了上面那些知识后我们就可以来做一个大的总结啦

首先,假设生产一个区块的时间是固定的10分钟,然后现在比特币公链上正好完成了一个区块的生产,接下来就进入下一个区块的生产过程,相当于进入一个新的周期,接下来:

从新周期开始的这个时间开始,比特币网络上会产生很多很多的交易,而交易的流程如下

从图中第一步开始,创建交易,交易的格式如下

交易的生成——所有者A利用他的私钥对前一次交易和下一位所有者B签署一个数字签名,并将这个签名附加在这枚货币的末尾,制作成交易单。(B以公钥作为接收方地址)

一个交易在系统里被输入和输出表示。

一文看懂区块链和比特币_第4张图片

第二步,交易通过p2p网络传播,也就是说其他节点会接收到这个交易,节点接收到交易后的流程是这样的

A将交易单广播至全网,每个节点都将收到的交易信息纳入一个区块中。

一文看懂区块链和比特币_第5张图片

第三步,交易验证

一文看懂区块链和比特币_第6张图片

验证成功,则将其放入“未确认交易池”(Unconfirm Transaction),等待被打包;如果验证失败,则该交易会被标记为“无效交易”(Invalid Transaction),不会被打包。

也就是说,挖矿节点在比拼算力的同时还需要及时验证每笔交易,更新自己的“未确认交易池”。

第四步,向其他节点传播验证结果,不通过时则不传播

以上就是交易创建到传播的过程,节点会不断进行这个过程持续大概十分钟,这时候有一个节点算出了这个数学题(或随机数),那么这个节点就抢到了记账权

第五步,交易写入账本,也就是打包交易

节点抢到记账权后,将从“未确认交易池”中抽取约近千笔“未确认交易”进行打包,抽取时会按交易手续费从多到少排序选择。有时候我们的交易不能被及时打包,是因为“未确认交易池”中的交易笔数太多,而每个区块能记录的交易笔数有限。打包好后,矿工通过P2P网络全网公布它盖上时间戳并打包的交易区块,然后全网的其他节点对收到的区块进行验证,区块验证通过之后连接到区块链,交易经过六个区块确认之后,交易才算真正完成。

十分钟产生一个区块,六个区块完成交易,所以比特币交易通常要一个小时左右或以上。
以上就是交易的全套具体流程啦。

理清下记账,打包交易 ,生产区块,挖矿之间的关系

  1. 比特币挖矿本质上是对记账权的争夺
  2. 挖矿的结果就是区块的生产以及矿工获得比特币奖励,生产区块的过程就是打包交易,打包交易的过程是记账,这个账就是一条条的交易记录
  3. 挖矿过程是计算,工作量证明可以获得记账权,而记账权是打包交易的前提

以上信息部分来自网络整合。
下一篇文章将会继续介绍区块链与比特币的相关内容

你可能感兴趣的:(区块链,比特币)