【区块链学习笔记】基础知识篇

一、数字货币

区块链确实脱胎于数字货币,它生来就是为数字货币服务的。另一方面,区块链的分布式记账机制,又依赖于数字货币的激励。可以说区块链和数字货币是一对孪生兄弟,在某中程度上互相依存。
为什么要研究货币数字化?
便捷;
去除对中心节点的依赖;
在这里插入图片描述

数字货币化需解决的问题(解决这些问题的钥匙是区块链)
账户数字化;
签名数字化;
记账去中心化;
(中心化的意思是中心决定节点,节点必须依赖中心,节点离开了中心就无法生存。)

本质问题(解决这些问题的强有力工具是密码学)
在这里插入图片描述

二、接触区块链的小故事

有个封闭的山村叫玉石村,村民的主要工作就是挖玉石,村里的财富也是用玉石来计算,大家挖了的玉石堆放到一起,村长来清点记账。张三、李四、王五各自的财富都记录在村长的账本上,他们可以依此来换取其他的生活用品,可是村长这个人有点不厚道,记账时看到貌美的农妇多记两笔,遇到刺头就少记一笔,然后账本保管也经常出问题,有的地方受潮模糊,还有的地方被老鼠啃掉,更过分地是村长的儿子赵六还常常偷偷涂改账本,于是村民决定将不干活包吃饭还老出错的村长废除掉,那么谁来记账呢?村民们想了一个办法,每个人都带着一本账本,谁挖到玉石时自己记录的同时用村口的大喇叭通知所有人,大家都在各自的本子几下同样的内容,每个村民都保管各自的账本,以后村民直接的物品换取、交换玉石也通过这个方式记账,这样既节省了一个记账的劳力,还避免了账本受潮等问题。即使小寡妇涂改了张三的账本,但大家拿李四、王五、孙六的账本出来对比就能马上发现问题并更正。只要村民的数量足够多,即使小寡妇性能再强大也无法篡改过半人的账本。这就是去中心化的分布式记账

李四提出了一个新的问题“我把已经记录的玉石拿来再记一次,财富岂不是很快翻倍再翻倍了”。村民为了解决李四的弄虚作假想了一个办法,给每块玉石都做标记,记录挖掘到的时间、地点、人物以及上一块被挖到的玉石的信息。因此每个村民的账本都记录了每块玉石的完整信息,每块玉都与上一块玉信息关联,形成一个链条。李四既无法凭空捏造,也无法更改之前的记录,这就是区块链—P2P分布式记账

区块链去中心化思想
经过改革以后,玉石村的每一个村民手里都拥有一个账本,每个账本里头都记录着村民挖出玉石的信息,摒弃了以往只有村长手里唯一账本的“中心化”的记账方式,采取了人手一个账本的“去中心化”的分布式记账方式。
区块链防篡改思想
在每个村民的账本里头给每块玉石都做标记,记录了玉石挖掘到的时间、地点和人物,以及上一块被挖到的玉石的信息。每块玉都与上一块玉有信息关联,形成一个链条,这样谁都无法凭空捏造,也无法更改之前的记录,做到了防篡改。
交易信息公开透明的思想
在村民挖到玉石之后,在自己的账本记录的同时,用村口的大喇叭通知所有人,大家都在各自的本子上写下同样的内容。所有村民都拥有一份完整的玉石信息,他们可以随时翻阅自己的账本,对记录的玉石信息进行查询。
共识的思想
当某个村民发现有一笔玉石信息记录错误了,需要更正。这个时候需要至少51%的村民同意,才可以修改这笔记录。换句话来说,只有至少51%的村民认同这笔玉石信息,才可以把它记录在每个人的记100%账本中。这就体现出一个很简单的共识的思想。

三、区块链的起源

  1. 密码朋克的成立
    1992年,英特尔高级科学家蒂姆·梅在自己的家中和朋友聚会。聚会上他和朋友讨论着互联网应该如何更好的保护人们的隐私。怎样保护全世界民众的隐私在互联网上不被别有用心的人利用呢?他们成立了一个小组:密码朋克。埃里克·休斯就写了个程序,可以接收加密邮件,擦除所有身份标记,并将它们发送回用户列表,当你签名后,你会得到休斯的回信。1993年,埃里克·休斯等人升级迭代了加密电子邮件系统,直接把系统改名叫“密码朋克”。
  2. Ecash
    大卫·乔姆发明了密码学匿名现金支付系统,Ecash。乔姆认为分布式的、真正的数字现金系统应该为人们的隐私加密。因此他的系统里的加密使用了数学编码。还有一个小特点就是支付时付款方是匿名的,但是收款方是非匿名的。
  3. 哈希现金
    1997年,亚当贝克发明了哈希现金,用到了工作量证明系统(proof of work)。其实亚当贝克最初发明这个系统是想解决垃圾邮件的问题,也就是为了避免其他人发送包含有相同信息的邮件。它的工作量证明系统,解决了数字货币的一大难题:如何保证数字货币不被交易过很多次?这就要求计算机在获得信息之前,做一定的工作量计算来避免重复交易。
  4. 时间戳概念
    时间戳保证了数字货币安全问题,可以保证文件的先后顺序。要求在文件创建后,不能改动。当一个虚拟货币被交易时,被盖上时间戳,它就无法篡改,在区块链系统中,每一个新区快生成时,都会被打上时间戳,最终依照区块生成时间的先后顺序相连成区块链。
    在这里插入图片描述
  5. 比特币诞生
    中本聪对Ecash进行了优化,综合了时间戳、工作量证明机制、非对称加密技术、UTXO的结构,最终发明了比特币。人们就把比特币的底层技术称为区块链。

区块链技术从诞生到现在经历了三个阶段
区块链1.0-----数字货币,以比特币为代表的去中心化的数字支付。
区块链2.0-----智能合约,以以太坊为代表的支持用户自己编写智能合约,构建去中心化的应用DAPP。
区块链3.0-----延伸到各个领域,也就是将区块链运用到各行业具体的场景中去。

四、比特币

1. 比特币与区块链的关系

“对于比特币而言,区块链对于它的意义,就如同互联网对邮件的意义一样。”
在这里插入图片描述
在这里插入图片描述

2. 比特币的作用机制

(1). 比特币的不依靠指定的货币发行机构,而依据特定算法,通过大量的计算产生,也就是“挖矿”。
(2). 总数量有限,具有极强的稀缺性,比特币的总数量在最初设定时,就被系统永久限制在2100万个。

五、信任的建立和区块链的形象解释

1. 区块链建立信任的方式

区块链本质就是一个去中心化的分布式账本,原来需要通过银行或第三方支付才能完成的交易,现在可以通过分布式节点组成的网络来完成。
在这里插入图片描述
交易的规则制定、系统治理,由各常委共同执行,同时每一个常委都拥有一个账本。每个交易信息在各个常委验证通过之后,由各个常委记入自己的账本之中,因此每个账本记录的信息都是一样的。

2. 区块链的定义

(1). 狭义来讲,区块链是一种按照时间顺序,将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。
(2). 广义来讲,区块链是利用块链式数据结构来验证与存储数据、利用共识算法来生成和更新数据、利用密码学的方式保证数据安全、利用智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。

区块链本质上是一个去中心化的分布式账本,如果说区块链就是账本,那么构成区块链的每一个区块就是账本的每一页,每增加一个区块,帐本后面就会增加一页,区块链有多长,帐本就有多厚。这个帐本存在网络中各自节点的手里,而不是统一存储在一个中心节点,并且是任何人都可以看得到的公开账本。

3. 区块链的分类

根据节点的加入或退出是否需要批准,将区块链分为公有链、私有链、联盟链。(节点就是网络的骨干,用来验证和记录交易。通常指区块链网络中的计算机,手机、矿机、台式机和服务器等。)
(1). 公开链就是公开的区块链,所有人都可以作为网络中的一个节点自由加入或退出,节点之间基于共识机制开展工作。是真正意义上完全的去中心化。
(2). 私有链一般用在企业内部,系统的运作规则、节点的读取和修改权限根据企业的要求进行设定。
(3). 联盟链是一种多中心化或者部分去中心化的区块链,共识机制受某些指定节点控制,一般是由若干机构联合发起,比如行业内部,它介于公有链和有链之间,兼具部分去中心化的特性。

六、哈希算法

哈希加密算法,SHA256,是由美国国家安全局研发,由美国国家标准与技术研究院在2001年发布。将任何一串数据输入到SHA256将得到一个256位的Hash值。其特点是相同的数据输入将得到相同的结果。输入数据只要稍有变化(比如数据中一个1变成了0)则将得到一个千差万别的结果,且结果无法事先预知。具体来说就是哈希算法将数据打乱、混合、压缩成一个摘要,使得数据量变小,重新创建—个叫做哈希值的指纹。

1. 哈希算法的特征

一是单向性,哈希算法必须具备单向性;

  • 只能由输入的数据或者消息计算出一个定长的哈希值,而不能通过这个哈希值反向推算出输入的数据或者消息。

二是可以根据任意长度的消息计算出固定长度的散列;

  • 哈希算法生成的哈希值的长度必须是固定的,而且是针对任意长度的输入数据。
  • 这一性质保证了哈希算法的易用性。
  • 因为哈希算法的一个使用目的就是用最后的哈希值来代表输入数据,那么最后的哈希值很长、不固定或跟原始数据一样长,那么通过哈希值的对比来确定原始数据就跟直接校验原始数据一样费力没有区别了。
  • 最后的长度要控制在一个固定的、合适的值,才能体现出哈希值作为原数据指纹或者说摘要的特征。

三是不同的输入就有不同的输出;

  • 哈希算法被发明的目的之一就是根据此需求来的,也成为了哈希算法的一大特性。
  • 可以实现对数据完整性和一致性的判定,只有一模一样的数据经过同一个哈希运算得到的哈希值才是一样的。
  • 无论输入数据的长度大小,都会产生定长的哈希值,这样比对结果就比较快速方便。
  • 对于数据的防篡改、防缺失都是很好的校验方式。

四是算法效率高,计算哈希值的时间短。

  • 保证不管数据有多长,都能在可接受的范围内得到哈希结果。

2. 典型的哈希算法

著名的是MD系列和SHA系列。SHA代表安全散列算法。是根据MD4和MD5开发的算法,由美国国家安全局发布,作为美国政府标准。
哈希算法运用的哈希函数是一类比较成熟的散列函数。
哈希算法的特征:

  • 可以用于“任意”长度的消息。
  • 产生的Hash值是固定长度的。
  • 对于任意给定的消息,容易计算消息对应的哈希值。
  • 不能通过给定的哈希值反向推算出输入的数据或者消息。

3. 哈希算法在区块链中发挥着怎样的作用

(1)必须知道区块链中哈希指针的概念
普通的指针只是保存结构体在内存中的位置。而哈希指针是不仅要保存结构体在内存中的位置,还要保存结构体的哈希值。
好处是不仅能够找到结构体的位置,还能够知道结构体是否被篡改。

区块链和普通链表的区别
/*比特币背后的技术主要是区块链,而区块链是由一个个区块连接而成,区块链和普通链表的主要区别就在于用哈希指针代替
了普通的指针。普通链表如果内容发生了改变,指针不会发生改变,而区块链一旦内容发生了变化,后面区块的哈希指针都会
发生变化,类似于多米诺骨牌效应。*/

哈希运算能够帮助识别区块数据是否被篡改,区块链的哈希值能够唯一而精准地标识一个区块,区块链中任意节点通过简单的哈希计算都可以获得这个区块的哈希值,计算出的哈希值没有变化也就意味着区块链中的信息没有被篡改。另外,哈希运算还能够帮助把各个区块串连成区块链。每个区块都包含上一个区块的哈希值和下一个区块的值,就相当于通过上一个区块的哈希值挂钩到这一个区块,通过这一个区块的哈希值挂钩到下一个区块,就自然而然形成一个链式结构的区块链。

4. Merkle树在区块链中发挥着怎样的作用

哈希运算还能够加密交易地址。

什么是Merkle树呢?
/*它使用的是单向哈希。哈希树的顶部为顶部哈希,亦称根哈希或主哈希。它是通过并联两个子哈希来往树上爬直到找到。*/

Merkle树的作用

  • 第一,可以快速定位每笔交易,由于交易在存储上是线性存储,定位到某笔交易会需要遍历,效率低时间慢,通过这样的二叉树可以快速定位到想要找的交易。
  • 第二,在不需要存储整个数据的情况下,就可以简明地核实交易是否被篡改,从交易到每个二叉树的哈希值,有任何一个数字的变化都会导致根哈希的变化。同时,如果有错误,可以快速定位到错误的地方。

Merkle树的特点
在这里插入图片描述

  • merkle tree是一种树状结构,它具有树结构的所有特点;
  • merkle tree的叶子节点的值是数据集合的单元数据或者是单元数据的哈希值;
  • 非叶子节点的值是根据它下面所有叶子节点的值,按照hash算法计算而得出的。

七、 共识算法

什么叫“共识”?
所谓共识,从语文的角度进行理解,可以简单解释为,许多不同的人对同一件事情达成一样的或者至少说方向一致的看法。这个解释同样适用于比特币网络当中。

1. 共识机制

  • 达成共识的主体
    它是当前这个区块链中的一些节点,到底哪些节点需要达成一致,也是一个需要考虑的问题。
  • 这些节点需要对什么东西达成一致?
    共识机制涉及了区块该如何生成以及生成之后如何选择的问题。

在比特币网络中每个矿工都有权力生成新的区块,那么我们到底该选择谁的区块作为整个网络的新区块呢?这个新区块生成之后,在这条链上进行的交易能不能通过呢?

在日常生活中,我们可以有一个老大或者一个领导来拍板决定这些问题。但是在区块链当中,每个节点都是平等的,没有一个中心机构的存在,这时候就需要通过共识机制来达成节点间的一致。

2. 共识算法

共识算法是为了达成共识所依据的一种规则,是筛选出具有代表性的节点的方法。为此,区块链设计了一定的底层算法,通过这个特定的算法来选出那个可以生成新区块的节点,同时对于每一笔在这条区块链上进行的交易是否准许完成进行了约束和规定,也就是共识算法。

共识算法规定了下一个新区块由哪个矿工生成。同时在这条区块链上一笔交易要达成,需要被共识算法选出的部分节点达成一致的观点:“哦,我们觉得这笔交易可以进行!” 对一笔交易,如果利益不相干的若干个节点能够达成共识,就可以认为全网对此也能够达成共识。

共识算法有很多种,主要有工作量证明、权益证明、委托工作量证明、委托权益证明、实用拜占庭容错算法等,他们最终的目的是一致的,但在具体的实现过程中各具特色。

3. 比特币的共识机制——工作量证明机制

工作量证明,英文全称叫proof of work,通常我们叫它POW。
工作量证明就是一份证明,用来确认你做过一定量的工作。怎么证明呢?通过工作结果——当用户做一定难度的工作得出一个结果时,通过展现出这个结果证明你完成了一定的工作量——也就是说POW作为一种共识机制,它是结果导向而非过程导向的。

  • 原因
    实际应用中,如果我们通过监测工作的整个过程来证明工作量,这是极为低效的,为了保证一定的效率,就设计了通过验证结果的方式证明工作量的方法。
  • 关键特征:不对称性
    进行实际工作的用户需要付出很多的工作量才能得到一个符合已定条件的结果,但是作为验证方却可以根据用户提供的材料很容易重算这个结果,同时验证这个结果是否满足提前规定好的条件。

在工作量证明中,你工作的时间越长,工作时采用的设备越先进,你的工作量就越高,你收获的也会越多。

工作量证明机制POW
首先,生成要加入到区块链中的一笔新的交易信息,也就是新区块时必须满足的要求。然后在基于工作量证明机制构建的区块链网络中,所有节点开始不断尝试和计算,直到第一个节点找到了那个随机哈希散列的数值解,于是它就得到了生成新区块的权力。(挖矿)

工作量证明机制具有完全去中心化的优点。
工作量证明机制的缺点:造成了大量的资源浪费,达成共识所需要的周期较长。
在这里插入图片描述
优点:
1、完全去中心化,算法简单,容易实现;
2、节点间无需交换额外的信息即可达成共识;
3、破坏系统需要投入极大的成本。
缺点:
1、挖矿造成大量的资源消耗;
2、共识达成的周期较长。

4. 比特币的共识机制——权益证明机制

权益证明机制(Proof of stake) ,简称PoS,也称股权证明机制,它要求各节点证明自己拥有一定数量的代币(也就是所谓的权益)来竞争下一区块的记账权。

用户可以利用现实货币购买代币,并在PoS机制当中来使用代币。这样以来,用户就拥有了参与记账的机会,用户拥有的代币数量越多,获得记账权的概率就越大。

典型应用——点点币
采用权益证明机制,并利用币龄表示各节点的权益,但是它仍然采用PoW机制进行挖矿。币龄是持币数量和时间的乘积。各节点必须持有代币30天以上才有资格竞争下一区块的记账权。当节点签名了区块,它的币龄将清为零,必须等待至少30天才能签署下一区块。币龄在90天后自动清零。

基本原理

  • 这是点点币(PPC)的创新。没有挖矿过程,在创世区块内写明了股权分配比例,之后通过转让、交易的方式(通常就是IPO),逐渐分散到用户手里,并通过“利息”的方式新增货币,实现对节点的奖励。以太坊是POW跟pos结合。

  • 简单来说,就是一个根据用户持有货币的多少和时间(币龄),发放利息的一个制度。现实中最典型的例子就是股票,或者是银行存款。如果用户想获得更多的货币,那么就打开客户端,让它保持在线,就能通过获得“利息”获益,同时保证网络的安全。

PoS奖励
对于采用PoS机制的点点币,系统根据币龄分配相应的奖励。当签名了一个POS区块后,币龄就会被清空为0。每被清空365币龄,将获得0.01个币的奖励。
如:某用户将3000币龄用于签名区块,得到的利息为:
3000* 1%/365 = 0.082个币。

PoS相对于PoW的优势
1、一定程度上缩短了全网达成共识所需的时间。
2、各节点不需要比拼算力挖矿,不会造成过多的算力浪费。
3、攻击者对货币系统的攻击难度变大。

优点:

  • 节能。不用挖矿,不需要大量耗费电力和能源。
  • 更去中心化。首先说,去中心化是相对的。相对于比特币等PoW类型的加密货币,PoS机制的加密货币对计算机硬件基本上没有过高要求,人人可挖矿(获得利息),不用担心算力集中导致中心化的出现(单用户通过购买获得51%的货币量,成本更高),网络更加安全有保障。
  • 避免紧缩。PoW机制的加密货币,因为用户丢失等各种原因,可能导致通货紧缩,但是PoS机制的加密货币按一定的年利率新增货币,可以有效避免紧缩出现,保持基本稳定。比特币之后,很多新币采用PoS机制,很多采用工作量证明机制的老币,也纷纷修改协议,“硬分叉”升级为PoS机制。

缺点:

  • 纯PoS机制的加密货币,只能通过IPO的方式发行,这就导致“少数人”(通常是开发者)获得大量成本极低的加密货币,在利益面前,很难保证他们不会大量抛售。
  • PoS机制的加密货币,信用基础不够牢固。
  • 为解决这个问题,很多采用PoW+PoS的双重机制,通过PoW挖矿发行加密货币,使用PoS维护网络稳定。或者采用DPoS机制,通过社区选举的方式,增强信任。

八、挖矿

比特币与支付宝、微信支付类似,比特币属于互联网支付。但微信和支付宝处理的是人民币,是政府发行的法定货币,代表民众对权力机构的信任。而比特币是去中心化的虚拟“货币”,背后完全没有机构或法律背书,完全是参与者的集体管理。

由于搭载在区块链平台上,运用分布式记账机制,系统中所有节点都参与记账过程,那么一笔交易产生后由哪个节点记账?如果有恶意节点想随意篡改数据获取利益该如何发现?这就引入了“工作量证明”。
在这里插入图片描述
在这里插入图片描述

1. 工作量证明

工作量证明(Proof-of-Work,PoW)是一种对应服务与资源滥用、或是阻断服务攻击的经济对策。一般是要求用户进行一些耗时适当的复杂运算,并且答案能被服务方快速验算,以此耗用的时间、设备与能源做为担保成本,以确保服务与资源是被真正的需求所使用。

简单理解就是一份证明,用来确认你做过一定量的工作。监测工作的整个过程通常是极为低效的,而通过对工作的结果进行认证来证明完成了相应的工作量,则是一种非常高效的方式。比如现实生活中的毕业证、驾驶证等,就是通过检验结果的方式所取得的证明。

区块链任何一个节点,如果想生成一个新的区块并写入区块链,必须解出比特币网络出的工作量证明的迷题,这个过程我们称之为“挖矿”。这道题关键的三个要素是工作量证明函数、区块、难度值。工作量证明函数是这道题的计算方法,区块决定了这道题的输入数据,难度值决定了这道题的所需要的计算量。

(1)工作量证明函数
和我们上节例子中用到的哈希函数一样,比特币系统中使用的工作量证明函数正是SHA256。

(2)区块
区块头的大小为80字节,由版本号、上一个区块的哈希值、Merkle Root Hash、区块生成时间、难度值、随机数组成,区块包含的交易列表则附加在区块头后面。

区块头就是用于比特币工作量证明的输入字符串。为了使区块头能体现区块所包含的所有交易,在区块的构造过程中,需要将该区块要包含的交易列表,通过Merkle Tree算法生成Merkle Root Hash,并以此作为交易列表的摘要存到区块头中。见下图:
在这里插入图片描述

挖矿∶区块头中有个参数叫随机数Nonce,寻找这个随机数的过程就叫做“挖矿;
网络上任何一台机器只要找到合适的数字填到自己的Nonce位置,使得区块头这6个字段(80个字节)的数据的哈希值符合目标哈希值。

(3)难度值
难度值(difficulty)是矿工们在挖矿时候的重要参考指标,它决定了矿工大约需要经过多少次哈希运算才能产生一个合法的区块。比特币的区块大约每10分钟生成一个,如果要在不同的全网算力条件下,新区块的产生保持都基本这个速率,难度值必须根据全网算力的变化进行调整。

比特币工作量证明的达成就是矿工计算出来的区块哈希值必须小于目标值。

我们也可以简单理解成,比特币工作量证明的过程,就是通过不停的变换区块头(即尝试不同的nouce值)作为输入进行SHA256哈希运算,找出一个特定格式哈希值的过程(即要求有一定数量的前导0)。而要求的前导0的个数越多,代表难度越大。

2. 工作量证明的过程

我们可以把比特币矿工解这道工作量证明迷题的步骤大致归纳如下:

  • 生成Coinbase交易(这是一笔为了让矿工获得奖励及手续费的特殊交易),并与其他所有准备打包进区块的交易组成交易列表,通过Merkle Tree算法生成Merkle Root Hash。
  • 把Merkle Root Hash及其他相关字段组装成区块头,将区块头的80字节数据(Block Header)作为工作量证明的输入。
  • 不停的变更区块头中的随机数即nonce的数值,并对每次变更后的的区块头做双重SHA256运算(即SHA256(SHA256(Block_Header))),将结果值与当前网络的目标值做对比,如果小于目标值,则解题成功,工作量证明完成。

可以发现尽管挖矿设备是用来帮区块链记账的,但是它们实际所做的大部分工作是寻找正确的随机数,而与记账无关。

到现在,大家可能理解了区块链是如何做到去中心化的。没有中心机构的权威背书,区块链系统一方面提供报酬鼓励记账人参与记账,另一方面通过记账人之间的资源消耗竞赛来提高作假成本、确保账本真实性。记账人之间为获得比特币报酬而争夺“记账权”。
在这里插入图片描述
在这里插入图片描述

九、 钱包、私钥、签名与交易

比特币的所有权是通过私钥地址来确立的。地址类似于一个银行账户的账号,要想给一个人转比特币,只要知道他的比特币地址就可以了。私钥的作用主要是给交易来签名,用来证明这笔交易是由你发起的,别人收到这笔交易,通过验证签名就可以确认交易中涉及的资金是合法的。

在比特币中,公钥用于接收比特币,私钥用于生成其对应地址上支付比特币所必需的签名,以唯一确定这些比特币的所有权。具体到比特币地址的生成,其实是先产生私钥,私钥通过椭圆曲线算法这种不可逆的函数来产生公钥,公钥经过一系列不可逆的运算再来产生地址。

私钥持有者才是比特币的拥有者,那么私钥放在哪呢?
钱包是私钥的容器,是密钥的管理工具,它只包含密钥而不是确切的某一个代币。一个比特币钱包中包含一系列的密钥对,每个密钥对包括一个私钥和一个公钥。(钱包的地址类似于银行账户,私钥类似于银行卡密码)

1. 钱包

  • 比特币钱包有很多种,有PC端的、手机端的,也有专门的硬件钱包,甚至还有用纸写上私钥的纸钱包。我们一般使用的都是软件钱包,私钥存在一个叫wallet.dat的文件中。
  • wallet.dat文件其实是用我们自己设置的密码加密过的,登录钱包软件时,需要用户输入密码来对文件进行解密得到真正的私钥,这时私钥存在钱包程序的内存中,当我们需要发起一笔交易时,钱包软件去内存中获取这一私钥来对交易进行签名操作。

在这里插入图片描述

2. 比特币交易

从一个比特币钱包向另一个中转账,每笔交易都有数字签名来保证安全。一个交易一旦发生那么就是对所有人都公开的,每个交易的历史可以最终追溯到相应的比特币最初被挖出来的那个点。用户用钱包中的私钥来签名交易,从而证明他们拥有交易的输出,也就是其中的比特币。

比特币是以交易输出的形式储存在区块链中的。
比特币并不存在于任何地方,即使是硬盘上。持有比特币其实是拥有特定比特币的地址,但是其实所谓的币并不是直接就存在于这个地址中的,地址就相当于你的银行账户。世界上没有一个可以摸得着的实物,或者是一个数据文件,可以被叫做“比特币”的。
有的只是各个地址之间的转账记录,余额时增时减。所有的交易都存放在一个非常大的账本文件中,这个文件叫做“区块链”。如果想知道一个比特币地址中的余额,那么这个不是直接存放在比特币地址中的,我们需要到区块链中去计算出来。
在这里插入图片描述
第一笔矿工挖矿的收入交易通常被称为Coinbase,它没有输入,所以交易输入的哈希总是被标记为00000000…0000;其他的交易,任何一个交易输入都会唯一追溯到区块链上在本区块之前的某个交易哈希,以及索引。

通过交易哈希和索引,即可唯一确定一个未花费的交易输出——UTXO。这样,每一个交易输入都和之前的某个交易输出关联了起来。
地址是公钥的哈希。
当使用一个UTXO时,用户要提供这个UTXO中描述的地址对应的公钥、同时用这个公钥对应的私钥对这个交易进行签名,这样比特币的接收者才能去验证这笔交易是否有效。

十、 冲突、双花攻击和UTXO

1. 冲突

冲突问题的产生
多人记账的账本不—致怎么办?
奖励该给谁呢?
冲突问题的解决方案
选择信任最长区块链

我们来看看在选择信任最长区块链这条原则下,普通用户和矿工的具体行为和产生的效果是怎么样的。

首先,对于普通用户A来说,他并没有记账所以在他那里并没有正本的记录,那么当A需要查账时,它就需要像P2P网络的其他用户发起获取账本的请求。
在这里插入图片描述
此时可能会有多个用户BCD来响应他的请求,告知A自己所拥有的区块链的长度。A收到响应之后,只会选择那个拥有最长区块链用户的回应,从他那里获得区块链账本。
在这里插入图片描述
我们再来看看矿工的行为。由手有了奖励机制,可能会有很多个矿工同时挖矿记账以求获得奖励。如果你是一个矿工,你从P2P网络中得知当前最长的区块链长度是一千,那么你会从第一个区块开始创建区块链吗?当然不会。因为即便你以最快速度挖出了第零个区块并在其中加入一条奖励自己的交易记录,然后向全网公开,那么你所创建的区块链由于长度太短并不会得到其他用户的信任,也就相当于是作废了。所以聪明的做法是你从收到的那些还没有被记录到前一千个区块的交易记录中,选择若干交易打包形成区块,计算它的Nonce值,当然你肯定要把那笔奖励给自己的交易记录也记录进去,而且为了获得更多的奖励,你肯定会选择那些提供手续费的交易,一旦你计算出了Nonce值,你就应当立即向全网公布你挖到了第1001个区块。这样才能得到全网认可这个长度为1001的区块链,从而认可你记录在第1001个区块中那个给自己的奖励。

不仅你会这么做,所有其他的矿工都会这么做,他们为了获得奖励都会争着抢着想最快速度挖出第1001个区块并以最快速度向全网公布。如果你正在挖第1001个区块B,突然收到了别的矿工公布过来的信息其他矿工已经护到了第1001个区块B‘。你会怎么做呢?是继续挖第1001个区块B吗?如果你继续坚持,即便你最终挖出了这个区块B,别人可能已经在挖第1002个区块了,你的第1001个区块B就形同作废了。所以,一旦听说别人挖出了下一个区块就应该立即停止手头的工作,转而投入下一个区块的争夺之中。

挖矿就是一群矿工之间的竞争,他们为了获得奖励,必须让自己挖出的区块成为当前区块链的最顶端。

多个矿工同时记账,账本不一致?

  • 矿工自发从已知最长区块链开始计算下一区块。
  • 网络中流转的区块链绝大部分是一致的。虽然金页端存在很小部分不一致,也就是分岔。但随着时间的推移,只有最长的链也就是主链才能存活下来。

多个矿工同时记账,如何分配奖励?

  • 赢得挖矿竞赛的矿工才能创建最长区块链的顶端区块,才会被大部分用户所认可。
  • 只有一个矿工获得奖励。奖励自然而然地也就给了每一场挖矿竞赛中胜出的唯一的矿工。

2. 数字货币中的双花问题

什么叫双花问题?—笔钱被花费了两次甚至更多次。

在数字货币系统中,数字资产本质上是以互联网为基础的虚拟数字,简单来说所谓的数字资产其实就是一串字符,因此它很容易被复制或者多次发送使用,在这种情况下,如果没有中心机构的存在,人们并不能确定一笔资产是否已经被花掉,这就导致系统可能存在同一笔数字资产因不当操作被重复使用的情况。

双花攻击的实现基础

  • 工作量证明需要花费较长时间
  • 交易信息从创建到入账存在较长时延
  • 商家可能在交易入账前交付商品

为了解决双花问题,我们日常的数字资产使用依赖于第三方信任机构进行。这类机构对数据进行中心化管理,由它保管交易总帐,并通过实时修改账户余额的方法来防止双重支付的出现。第三方机构的最大弊端是验证费用极高。

在比特币系统中是如何避免双花问题的呢?
矿工在生成区块的时候,会从网络上收集交易信息,交易信息中包含了付款人的私钥签名。矿工首先会验证签名是不是正确的,只有正确的签名才会被认为是付款人认可的支付。然后矿工会从以前的区块链中追溯,看看付款人这次消费的比特币是不是以前没有被消费过。然后记录下付款人可用的比特币余额。这个过程也被称为UTXO机制

3. UTXO

UTXO是Unspent Transaction Outputs的缩写,全称叫做“尚未使用的交易输出”。

  • U代表Unspent,表示未支付的或尚未使用的,“尚未支付”指的是这个交易输出还没有出现在其它交易的输入端。
  • TX是transaction的缩写,交易是从一个比特币钱包向另一个钱包转账,是唯一可以改变比特币所有权的方式,包含了输入、数目和输出这些基本内容。
  • O是Output,是输出的意思,TXO连起来就是指交易输出。

比特币是以交易输出,也就是TXO的形式存在的。我们说自己有多少比特币实际上是指的我们拥有所有权的那些UTXO中所指明的比特币的数量。所以可以说并没有比特币,只有UTXO。Alice有10个比特币,本质上是当前区块链账本中,有若干笔交易的UTXO项收款人写的是Alice的地址,而这些UTXO项的数额总和是10。

比特币的分布式区块链账本
比特币的分布式区块链账本,由一笔一笔的交易形成的,每一笔交易都要花费一笔输入,产生一笔输出,而其所产生的输出,就是“未花费过的交易输出”,也就是UTXO。这些交易构成了一组链式结构,所有合法的比特币交易都可以追溯到前一个或多个交易的输出,链条的源头就是挖矿奖励,末尾则是当前未花费的交易输出。

比特币交易规则

  • 除了coinbase交易之外,所有的资金来源都必须来自前面某一个或者几个交易的 UTXO。
  • 任何一笔交易的交易输入总量必须等于交易输出总量,等式两边必须配平。
    在这里插入图片描述

当然,UTXO技术也并非100%保证基于区块链的交易中杜绝双花问题。51%攻击,又被称为Majority attack,这种攻击是通过控制网络算力实现双花。

十一、 区块高度,51%攻击,矿池与算力

1.区块高度

区块
区块是一种被包含在公开账簿里的聚合了交易信息的容器数据结构,这个公开账簿就是区块链。它是构成区块链的基本单元,由包含元数据的区块头和包含交易数据的区块主体构成。

那么这个区块生成之后要怎么跟原先的区块链接起来呢?
区块头主要由三组数据组成,第一组是父区块的哈希值,父哈希值用来将该区块与它的前一区块相连接;第二组数据和矿工竞争挖矿有关,即难度、时间戳和Nonce(随机数);第三组是由刚才我们讲到的区块体中计算出来的根哈希值,即默克尔树根。
在这里插入图片描述

这时区块头发挥作用,区块头中包含了三组元数据,其中第一组就是上一个区块的哈希值。也就是说,第二个区块的父哈希为第一个区块的哈希,第三个区块的父哈希为第二个区块的哈希,通过这种方式,就把一个个区块链接起来了,形成了一个前向的链表。

区块高度是用来标识一个区块在区块链中位置的一个概念。

2. 矿池与算力

算力也叫哈希率,是用来衡量进行哈希运算的能力的指标,或者说进行一次哈希计算所需要使用的时间。如果说网络达到了10T哈希每秒的哈希率时,就意味着它可以每秒进行10万亿次哈希运算。

区块链网络中每个矿工都有资格生成区块,因此为了决定下一个区块由谁生成,需要通过—定的方法来决定。

PoW机制中,所有节点通过随机的尝试和计算,直到有一个节点找到那个随机哈希散列的数值解,成为有资格生成新区块的主体。

哈希碰撞:解出随机哈希值不断尝试的过程。
一个挖矿机每秒钟能做这种碰撞的次数,代表其算力。矿工进行挖矿所使用的机器越先进,算力就会越高。

区块链转账的基本原理
整个区块链网络之所以能运行,靠的就是整个网络的“矿工”,因为他们通过算力解答加密难题,从而挖出新的区块。挖出区块后,他们就有权力将转账信息放入到区块中,然后完成这笔转账,这就是区块链转账的基本原理。

中本聪一开始就定义了比特币总量为2100万个,并且加密数学题的难度也越来越大。正所谓众人拾柴火焰高,越来越多的人把自己的矿机拿出来,组成了“挖矿小分队”,这类组织就被称为“矿池”。

3. 51%攻击

51%攻击出现的根本原因:在整个网络中,有人的算力超过了全网的50%,那么在他的控制算力的这段时间,可以将区块逆转,进行反向交易,实现双花。

尽管51%的攻击不会产生新币或直接导致区块链崩溃,但对参与者对加密货币的信心会产生严重影响。

什么时候会出现51%攻击的问题呢?由于某个矿池的算力过大。
例子:Alice一个矿工掌握了全网50%以上算力的可能性微乎其微,但由于现在生产新区块越来越困难,出现了矿工间合作组成矿池,汇聚数以千计参与者们的算力,一起参与挖矿并分享奖励的行为。在这种情况下,一旦某个矿池汇集了过多的矿工,其算力超过了全网的50%,这时就出现了51%攻击的风险,也对矿工的道德提出了要求。

一个典型51%攻击案例

Alice 和 Bob之间使用比特币完成了一杯咖啡的交易,因为是小额交易,Bob在收到Alice的转账通知(不是交易确认的通知,只是表面发起了交易)就给Alice提供了咖啡。

正常情况下,这笔交易会马上被放入交易池等待挖矿节点把自己加入一个新的区块并开始努力”挖矿”。

假设Alice就是那个大boss,拥有网络51%的算力,他真的不愿意为这笔咖啡付钱(有钱人也可能很小气),于是他开始攻击了。

网络上很多节点都收到了这笔交易并加入区块准备运算了,Alice也同样开始贡献算力,但是在开始之前他把区块里的这笔交易改了,本来这是一笔Alice付款给Bob的交易,被改成Alice转给自己的一笔交易了(更改很容易,只要把接收地址和签名改掉即可)。

Alice开始尝试用这个伪区块进行计算(计算正确后这个区块会被加入主链中),因为拥有51%的算力,Alice比别的节点更容易优先计算成功,导致一个伪造的区块加入了主链。现在网络中有两个区块链:
在这里插入图片描述
其中一个是原来的主链,另一个是比主链高出一个区块的伪造链。

按照最长区块链原则,更高的这个链就代替了原有的链成为后面的主链。这笔伪造的交易就被所有节点认可成为了”真实的交易”。

这是Bob就会一直收不到钱,但是咖啡已经给出去了。

攻击结果: 由于撤销了所有对外付款交易,等于收回来已花掉的比特币。

51%攻击悖论

虽然看起来51%攻击非常恐怖,不过这通常仅存在于理论情况下。因为如果你想做到,首先需要足够的钱去掌控全网51%的算力,这将是非常大的一笔投资。其次在攻击后,币种价格会受到影响,你要卖出非常多的币才能达到收支平衡。这就是51%攻击悖论。

十二、 总结(基本概念)

比特币系统
比特币系统相当于一个去中心化大账本,每个区块就是账本中的一页。系统自动生成比特币作为奖励激励矿工参与记账,每十分钟全体矿工一起计算一道问题,最先算出答案的矿工获得记一页帐的权利。记账完成后,他将自动获得一定量的比特币。这就是比特币的发行过程。

矿工
矿工就是指参与比特币挖矿的个体,也就是说,每一个致力于生产新区块的比特币节点的主人,就是一个矿工,是一切行为的操作者,也就是比特币网络参与的主体。

矿池
矿池的概念是在矿工的基础上延伸出来的。随着参与挖矿的矿工越来越多,一个个体矿工要想挖到矿,得到生成新区块的权力的可能性越来越低,所以一些矿工集合起来,集合各自的算力,提高挖到矿的可能性。这种矿工的集合体就是矿池。

公钥、私钥
公钥和私钥是一组配合使用的概念,他们之间有着紧密的联系。简单来说,私钥是系统随机生成的,公钥是由私钥计算得出的;公钥负责加密,私钥负责解密;私钥负责签名,公钥负责验证。在两者的配合使用之下,矿工才能完成比特币的交易。

钱包
比特币钱包,就是用来装密钥的容器,它只包含密钥而不包括具体的多少个比特币。具体来说,钱包里面存放了一系列的密钥,每一密钥对应着一个私钥和由这个私钥生成的公钥,用于完成这个钱包主人可能要进行的比特币交易。钱包还有一个地址,这个地址就相当于你支付宝的账号一样,你要提供自己的账号,才能向外转账或者给自己充值。

交易
这里提到的交易,就是利用矿工掌握的私钥,把比特币从—个地址转到另一个地址的行为。我们所说的比特币,其实就是一系列交易输出的集合,我们说自己有多少比特币实际上是指的我们拥有所有权的那些UTXO中所指明的比特币的数量。

区块
区块是构成区块链的基本单元,在区块链中,每隔一段时间就会形成一个新的区块,矿工们就是在通过挖矿争夺生成新区块的权力。每一个区块由区块头和区块主体构成。在区块头中包含了前一个区块的哈希信息,可以帮助新区块和之前的区块联系起来;而区块主体则包含了这一段时间内所有的交易信息。
在这里插入图片描述
算力
算力,是用来衡量进行哈希运算的能力的指标,它可以用每秒完成哈希碰撞次数来衡量。算力越强,挖到下一个新区块的可能性也相应的越大。

技术概念

  1. 哈希算法
  2. 共识算法
  3. UTXO

参考链接:
https://www.icourse163.org/learn/NJU-1449346161
https://www.jianshu.com/p/c616155eae91
http://www.chidaolian.com/article-1574-4
https://www.jianshu.com/p/9ce0dc83efb4
https://www.icourse163.org/course/FZU-1002765004
https://www.icourse163.org/course/PAEU-1003640007

猜你喜欢

转载自blog.csdn.net/weixin_44029550/article/details/108825771