比特币以及区块链原理学习

  2018年春节过后区块链技术一下子火爆起来了,本人也对该技术十分感兴趣,因此想研究下区块链技术的原理,看看区块链背后那些技术值得去研究。由于自己缺乏实际的开发经验和使用经验,文中难免会有些理解不到位,本文主要的目的还是想将最近的学习梳理总结一下。

一、概述

  比特币是存储在计算机里一枚货币,计算机存储的本质就是一串数字,那么存储比特币的这串数字为什么就可以等同于真正的货币呢?而且比特币让人感觉很像黄金,不管这黄金从什么渠道获取(从沙子里掏的,还是自己购买的),人类都会认同它的财富价值。

说到比特币很多文章总结它的特点,例如:去中心化啊,记账系统,安全性好,不过它有什么特点,大家现在几乎都公认比特币可以等同于货币,但是比特币这种货币是有别于现实社会中的各国央行发行发行的法定货币,法定货币的一大重要特点就是需要一个权威的机构(一般是指代表国家的央行)来发行货币,法定货币的价值是由老百姓认同国家的权威性来体现的,不管怎么说法定货币是一种中心化的发行货币机制,法定货币都会受到国家这个中心所控制和约束。比特币的设计理念不同,它想通过一种没有任何权威中心所左右的方式发行货币,让货币只包含经济价值的本质属性。

  比特币的价值体现方式是通过交易的记账流程来体现的,具体过程如下图所示:

  支付交易从产生一直到最后支付交易被成功写入了区块链,这样支付交易才会被真正确认,比特币的货币价值在这个过程中被体现,公司货币的发行也在这个过程中进行。

  这张流程图可能会让很多人费解,为什么本人会说它体现了比特币的货币价值?本人之所以这么概括,主要包含下面的理解:

  1. 该流程包含了比特币的发行,流通,交易的全过程;
  2. 该流程是在没有中心机构参入的情况下进行的,但是该流程和现实货币的价值使用一样的权威有效。
  3. 完整理解了该流程就可以理解比特币可以等同于实际的法定货币的道理了。

  下面本人将一个一个环节的解释该流程。

二、支付交易

  比特币里如何完成支付交易了,下图是中本聪论文里的交易流程图,如下所示:

  说到支付交易就牵涉比特币原理之一的非对称加密以及数字签名技术。在比特币的知识范畴里有一个钱包的概念,钱包的本质就是一对非对称加密的公钥和私钥,如果我们把比特币的使用映射到现实的使用者即人,那么公钥就是这个人对外的唯一身份标识,私钥则是使用者开启钱包使用比特币的钥匙。公钥是对外公开的,在比特币的规则里公钥即代表了网络里钱包使用者的地址。

  按照比特币的规则定义,公钥的长度是512个字节,为了方便公钥在网络上的传播,公钥要被转化为160位的数字指纹,数字指纹是二进制编码,转化为字符串就是26到35位的字符。

  那么假如A向B支付比特币,那么A就得要知道B的地址,这样A才能把比特币发送给B。下面我将描述下这个支付的流程,具体如下:

  A向B支付比特币的交易即A的地址向B的地址转移比特币的过程,下面我们举例说明:

  首先是A向B发送数据,这些数据包含如下内容:

  • 上一笔交易的 Hash(你从哪里得到这些比特币)
  • 本次交易双方的地址
  • 支付方的公钥
  • 支付方的私钥生成的数字签名

  B收到信息后进行相关验证,验证过程如下:

  第一步,找到上一笔交易,确认支付方的比特币来源。

  第二步,算出支付方公钥的指纹,确认与支付方的地址一致,从而保证公钥属实。

  第三步,使用公钥去解开数字签名,保证私钥属实。

  验证无误,B认为该交易是可以执行,注意:这里只是认为该交易可以执行,并没有确认该交易有效成功。

  从支付交易的传输数据和验证流程我们可以看到,比特币的支付过程中主要是使用到了支付方即A的交易数据信息以及A的公钥和私钥,被支付方即B只是做验证操作的有效性而已,被支付方B自己的公钥、私钥以及交易信息都没参入支付过程,因此我们可以认为私钥和公钥主要是用于把比特币用花出去的场景。

  如果想要交易最终被确认成功,接下来被支付方B就要将该笔交易广播到全网去了,如是流程进入到了交易广播的阶段。

三、交易广播

  本人认为从交易广播开始,就进入了时下很火爆的区块链技术范畴了,因为广播出来的交易最终都会被网络里的矿工(矿工即是区块链分布式系统下的各个子节点)接收,作为矿工创建区域链区块的输入。这个过程比较简单,只是数据的传输,但是对于技术实现而言就是技术的难点之一,因为此块技术包含了编程领域里比较复杂的网络通讯技术和高并发技术。不过如果把交易广播作为区块链的输入来理解,那么这里还牵涉跟输入相关的一个重要技术那就是时间戳服务器,时间戳服务器的作用是给同一时间下的交易加上一个时间维度的标识,有了时间戳,我们就可以确定在某个时间点该交易一定发生过。

  时间戳服务器在中本聪的论文里是这么定义:

    时间戳服务器通过对以区块(block)形式存在的一组数据实施随机散列而加上时间戳,并将该随机散列进行广播,就像在新闻或世界性新闻组网络(Usenet)的发帖一样。

    由此定义我们可以知道时间戳是对新产生的交易记录按时间维度分组,这样就保证每条实际发生的交易都能正确的被保存下来。

  时间戳服务器的作用对于比特币的货币价值至关重要,这里我举一个例子:在传统的交易里往往是没有时间维度的概念,没有时间维度的交易往往会影响到交易的信用评价,例如:甲方和乙方账户里各有100块钱,一天甲方向乙方账户打入了10块钱,第二天乙方账户又向甲方账户打入10块,最终甲乙双方的账户任然是100块,如果交易过程没有被记录,那么我们就很难追溯其中的交易行为,假如甲乙双方进行了违法的交易,最终在检查前让账户平衡,那么危险的行为就会被藏匿。因此时间戳服务器给比特币的交易提供了一种正向的不可逆的交易流程,这就让比特币的区域链技术达到了行为可追溯的功能,能解决沟通中信息不对称的问题,这就是区块链技术能被应用到其他领域一个重要原因。

  交易广播后就是交易写入区块的过程了。

四、交易写入区块

  交易最终被确认就是要将交易写入到区块链里,而区块链是由一个个区块串联起来的,区块才是记录交易的实体,因此要写入区块链,首先要将信息写到区块里。那么区块是如何产生的呢?

区块的产生是有网络中一个个矿机来完成。但是矿机要产生一个新区块并没有那么容易。这里我们首先讲下区块的数据结构,区块分为区块头和区块体,区块体里存储的就是一条条的交易记录,这些交易记录都是被支付方例如B广播到网络中去的交易记录。

在比特币系统里一个块的大小本指定为1个mb,一笔交易大概500个字节,因此一个区块大概可以存储2000笔左右的交易。区块的里最关键因素在区块头里,区块头里有该区块的很多特征值,比较关键的有

  • 区块生成时间
  • 区块体的Hash值
  • 上一个区块的Hash值

  以上值都是外部获取的,除此之外区块头还包含一个难度系数difficulty和Nonce的随机数,矿机系统里还有一个固定的常量值。这里有个公式:

      target = 固定的常量值/difficulty

  由此可见难度系数越大,target的值就会越小。矿机会对区块头的数据进行hash计算,hash的结果是一串二进制数字,如果最终的hash结果要小于target那么该区块才会被认为有效区块,这个有效区块才能被同步到区块链里,但是计算出一个有效的区块可没有那么容易,需要反复的计算才能得到最终结果。可是由于一个区块特征属性一般都是固定的,为了让每次区块头的每次计算出来的hash值都不同,每次无效的hash结果计算后,矿机程序就会动态调整Nonce的值,让最终hash的值发生变化。Nonce是一个32位的二进制数字,因此它的取值范围就是0到21.47亿。那么命中target就是一个穷举的数学过程了,一个矿机可能幸运很快算出来,也有可能算满了21.47亿次都不能命中,这时候框架就得重新同步区块链数据,重新计算。这就是区块链技术里的工作量证明,可见一个区块产生是相当的麻烦和困难的。

回到区块产生的讲述,由上面流程,我们发现一个区块的产生是非常耗费资源即耗费计算机的算力和电力资源,那么为什么矿机都乐此不疲的想产生区块呢?这是因为每产生一个区块的经济奖励是非常诱人的。

  中本聪是这么来设立生成区块的奖励的,比特币系统是2008年运行的,当时产生一个有效新区块的奖励是50个比特币,这个数值每4年减半,也就是说到了2012年后就是25个,2016年后就是12.5个,现在是2018年就是一个新区块的奖励就是12.5个,而时下的比特币价格都超过了1万美金,这个收入是极其可观的。从这个规则我们也可以发现比特币的总有一天是不会在增加的,到了新区块不给新比特币奖励,那么这时就没有矿可以挖了,为了激励框架继续挖矿,中本聪还建立了另外一种奖励措施那就是手续费,区块是记录交易,每个交易被记录都是要付费的,而且每个区块都会根据手续费的高低排列交易,那么没给手续费的或者手续费很低的交易往往很难写入到区块,也就是最终很难写入到区块链,交易就会很难成立,这就可以让矿机有无限动力挖矿。

  新区块诞生会奖励比特币,这就是比特币发行的流程,这也就是人们为什么会乐此不疲的做矿工的原因,有巨大的利益驱使的。

  新区块产生了就要将新区块加入到区块链里了。

五、区块写入区块链

  新区块并不是简单的加入到区块链的,因为区块链是一个没有中心管理员的分布式数据库,那么不可能有个权威机构来做加入链条操作的,新区块加入到区块链的过程是一个集体协商的过程,具体的过程如下:

  矿机成功产生了一个区块,矿机就会把该区块在全网进行广播,有完整区域链数据备份的服务器就会接收到该信息,并将新的区块加入到区块链的末尾。及时新的区块加入到了区块链的末尾也还没有说明新区块加入区块链是成功的,这里我们把成功加入区块链的区块给个名字叫做节点,只有新区块被加入到了最长的链条即最正宗的链条才能叫做节点,这个规则产生的原因是因为在相同时间下可能会有多个新区块加入到区块链,到底那个才是有效的,需要一个判定机制,这个机制一般是那个新区块最先获得了连续的6个新区块,那么该链条就是正宗链条,即可确定该区块为区块链的一个新的节点了。

  不过一个新区块加入区块链的时间间隔是被严格控制的,比特币系统里是每10分钟才有一次机会把新区块加入到区块链里,在加上后续需要6个新区块加入气候才能最终确认区块链的新区块加入成功,这就说明一个交易被确认成功最快也需要1个小时左右,我们还可以这么算下,一个区块存储最多2000比交易,10分钟也就是600秒,平摊下来1秒钟比特币系统也就只能处理3到5比交易,这也就是比特币交易时间长的一个重要原因。当然时间间隔之所以设立还有一个重要原因,限制区块的产生的数量,控制新区块的数量也就是控制比特币的总量,也就是说比特币的总数量其实是固定的,总有一天会发完的。

  交易被成功写入区块链后,被支付方B同步区块链的数据,B如果在区块链里找到了自己的交易记录,那么交易就被认为有效。

  以上就是比特币的完整交易流程了。

六、总结与疑问

  由以上对于比特币原理和流程分析,我们就可以理解比特币为什么能等同于法定货币了,本人认为理由如下:

  1. 比特币的唯一性,比特币在网络里是唯一,而且这种唯一性很难被篡改;
  2. 比特币的总量恒定,比特币不会发生通货膨胀的问题,因此比特币有保质的作用,这个跟黄金很类似;
  3. 比特币的安全性很高,比特币是基于记账原理来产生价值,比特币的交易情况是全网透明的,每笔交易都可以追溯,而且交易记录机制安全可靠,很难有外部的非理性原因影响到比特币的价值。

  这里还有一些疑问需要重点说明下:

  问题一:比特币为什么很难被篡改?

  这主要是比特币产生的载体区块是非常难以产生的,需要大量的工作流证明,而且区块的有效性又是和区块链里该区块的下游区块相关,如果要篡改一个比特币,那么跟该比特币交易相关的下游区块都要更改,这就倍增篡改比特币的难度。当然理论上如果有实体掌握了区块链全网51%的算力是可以篡改比特币的,但是在公网下这种情况基本很难实现,不过要是区块链做成私有的这就很难说了,私有的区块链引入了中心机构,但是这样的区块链就不是真正意义的区块链了。

  问题二:为什么现在挖矿是越来越难了?

  挖矿其实就是在做hash运算,我们知道产生一个新区块需要大量的hash运算,只有拥有强大算力的实体才能获得先机,工作量证明的hash运算从CPU发展到GPU到现在的基于硬件的专业化的矿机,因此普通人很难有那么大的财力在算力竞争下获胜,所以个人挖矿目前是一件几乎无法完成的事情了。

  问题三:区块链为啥现在会特别火?

  这个问题我没法回答,其实区块链目前很火还是一种炒作,毕竟区块链技术除了比特币还没有什么重量级的应用出现,但是区块链技术里面的很难更改的记账系统机制是非常有前景的,目前国家,大型企业都涉猎其中,相信区块链的前景是非常不错的,这也是本人为什么花精力研究区块链的原因所在。

七、区块链的相关技术

  研究区块链的原理还是想为自己做技术研究做准备,这里大概总结下自己学习中发现的区块链的一些底层技术,具体如下:

  1. 非对称加密技术,这个使用开源技术即可;
  2. Hash计算的技术,主要是SHA技术;
  3. 数字签名或者叫做数字指纹技术,这个其实也是HASH技术,不过HASH出来的值一般是二进制,很难传播,因此需要一些签名技术将二进制转化成可以阅读的字符技术,例如把公钥变成地址(字符串),这里应该牵涉到一些字符置换的技术例如Base58
  4. P2P相关的网络通讯技术,分布式系统里的一个节点如何广播信息,节点如何轮询接收广播出来信息的技术,还有就是同步区域链数据的技术;
  5. 跟区域链相关的各种算法了,例如工作量证明的算法,Merkle树的算法等等。

原文地址:https://www.cnblogs.com/sharpxiajun/p/8530782.html

时间: 2024-11-08 03:38:48

比特币以及区块链原理学习的相关文章

比特币与区块链

早上看到一则新闻,说比特币可能要分裂比特币现金,很多持有者可能会凭空多出很多财富,又联想到前端时间微信群中讨论的很火热的区块链的话题,记得当时有人曾说这可能是影响未来几年最重要的技术之一,觉得为看懂未来趋势,有必要再深入的了解一下区块链. 印象中区块链就是一个去中心化的分布式数据库,没有中心权威代理,就要解决信息点对点传递的真实有效性问题.下面转载一下刚看到的一篇不错的解释. 作者:maxdeath 代尔夫特理工大学 (TU Delft) 博士后区块链博士后,共识算法专家 链接:https://

区块链入门学习资源

众所周知去年比特币大涨,很多人都投入到挖矿或者投资比特币上,而比特币的底层技术是区块链.所以导致最近区块链技术火热,区块链声称能够改变未来的互联网,让其能够成为一个能够传递价值的互联网.很多小伙伴也纷纷想投入到区块链的学习,虽然这是一项08年就提出的技术,可是到近年来才开始被广泛受到关注.所以网络上的学习资源也参差不齐,我这里就介绍一些我看到过的,而且还不错的入门学习资源.后续如果看到一些好的学习资源也会在这里更新. 如果英文好的话还可以不局限于国内的资源,国外的学习资源更丰富,还有教学视频啥的

SHA-256算法和区块链原理初探

组内技术分享的内容,目前网上相关资料很多,但读起来都不太合自己的习惯,于是自己整理并编写一篇简洁并便于(自己)理解和分享的文章. 因为之前对密码学没有专门研究,自己的体会或理解会特别标注为"个人理解",请注意甄别,如有必要可以自行查证. 阅读前需要树立一种观点:大部分场景都是基于概率的大小而言的,比如SHA256安全性.区块链不可更改性等. SHA-256算法 简介 区块链的基础算法之一,在其中用于区块hash计算方法. 是SHA-2下的一个算法标准,而SHA-2全称安全散列算法2,即

比特币下车, 区块链不死: 资本下一站, 请关注这些公司

ICO被封杀,比特币也就随之被普遍认为是"死了".问题是下一步会怎样?不管市场如何变化,资本是永远不会"死"的.在这个流动性早就严重过剩的时代,人们实际上关心的并不是哪个项目的死与活,而是资本将会往哪个方向流动?这才是最具本质性的问题. 这些年来随着比特币的炒作,多数人似懂非懂地都知道了另一个词:区块链.甚至有不少人以为比特币就是区块链,而区块链也就是比特币本身.比特币死了,区块链是不是也跟着死了?笔者的意见是区块链不会死. A. 区块链不是比特币,而是一种新兴的技

Go语言与区块链——阶段性学习建议

2019年Go语言与区块链 链接: https://pan.baidu.com/s/1rtstZKws3t9L8bcFZmUd3Q 提取码: gx1r 阶段一:区块链主流语言:Go语言开发实战 本阶段需要掌握Linux和Windows双系统开发环境,建立面向对象思维,能对问题进行抽象归类.掌握基础的并发理论. 主要内容包括有:Go语言介绍及开发环境搭.基础类型.运算符.流程控制.函数.工程管理.复合类型.面向对象编程.异常处理.文本文件处理.案例:开发实战. 阶段二:区块链后端技术体系:Go语言

小蚁区块链非主流学习笔记(一)

走进区块链,小蚁区块链学习笔记 ? 因为对虚拟机技术有一些了解,我受邀成为了小蚁的核心开发者. https://www.antshares.org ? 帮助开发了小蚁虚拟机的c#编译模块,以此为契机,让我走近了本来和一个游戏人没啥关系的金融开发领域. ? 立此存照,开始学习区块链技术.

比特币及区块链有关的网址汇总(不断更新中)

以太坊: https://etherchain.org/ 区块情况.算力.还有各种API https://etherchain.org/documentation/api/

(转)关于区块链与比特币 来源于嘶吼: http://www.4hou.com/info/news/6152.html

走近比特币:一个故事看懂"区块链" 2017年7月7日发布 首页/新闻/正文 55,338 4 32 导语:本文是对区块链原理极为通俗的解释,适合刚接触比特币的小白们阅读. 区块链是比特币的底层技术和基础架构,本质上是一个去中心化的数据库.区块链是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一次比特币网络交易的信息,用于验证其信息的有效性(防伪)并生成下一个区块. 狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一 种链式数据结构, 并以密码学方式保证

区块链学习路线

2018年春节最火热的概念应该就是区块链了,从百度的莱茨狗和网易星球刷屏朋友圈,到3点钟区块链无眠群的大火, 大佬们纷纷进军区块链,不了解区块链好像错过了什么,这里把自己学习区块链过程中的一些资料进行索引,可以循序渐进的了解区块链技术及其应用. 一.目标 比特币发展历史,挖矿以及相关应用 区块链底层技术,如共识算法, 侧链技术, 密码学知识等,理解PKI基本知识和原理 研究以太坊技术,了解ERC20,能够自行开发DAPP 熟悉Hyperledger Fabric 1.0架构,了解其业务流程和设计