1.基础知识
1.1街区
Block是一种容器数据结构,包含在公共账簿中,聚合交易信息。而这本公开的账本是区块链的;砌块是区块链的基本单位,由砌块头和砌块体组成。
1.2砌块高度
高度是一个概念,用来确定区块在区块链中的位置。
为什么块高不能唯一标识一个块?
因为在同一时间,可能有两个或两个以上的街区,并且它们相对于整个区块链处于相等的位置,所以它们具有相同的街区高度。
2.货币的发展阶段
2.1易货
以物易物的形式来满足双重偶然性是必要的。比如我这边一袋苹果,那边一袋面粉。同时需要对方的东西,然后才能交换。
2.2实物货币
这时候我们就用贝壳或者一些金银作为等价物作为中介来进行交换。这个时候,我们不需要像以前一样遇到双重的偶然性。但由于实物易磨损、不易携带、数量有限等缺点,纸币被开发出来。
2.3纸币
现在我们生活中一个红色毛爷爷的制作成本其实很低,但是可以用来购买价值100元的商品。这是因为国家的信用在背书,让人相信不值钱的钱有100元的购买力。
“信用背书”是指信用担保。比如用公司的信誉作为你的“信用背书”,就是我们公司保证你是一个值得信赖的人,可以和他建立业务。
2.4集中记账货币
电子支付的本质是记账本位币,由银行、第三方支付机构和央行记账。央行拥有整个国家总账的记账权,本质上是一种集中记账的方式。不管是用微信还是支付宝,我们都得完全信任第三方,因为我们存到他们那里的钱只显示为数字。如果第三方的数据被篡改,我们的财产会遭受损失。
2.5比特币诞生了
要解决这个问题,必须要有独立的电子货币体系:于是比特币诞生了!
中本聪在《一种点对点的电子现金支付系统》中提到:
为了满足比特币的要求,区块链技术应运而生,或者说比特币是区块链崛起的源头,也是区块链最早最成功的应用。
3.比特币的钱包、私钥和签名
3.1比特币所有权确立
比特币的所有权是通过私钥和地址建立的。
地址类似于银行账户。如果你想把比特币转给一个人,你只需要知道他的比特币地址。
私钥的作用主要是给交易签名,用来证明交易是你发起的,别人接收交易。通过验证签名,可以确认交易涉及的资金是合法的。
3.2公钥和私钥
比特币使用非对称加密系统。
公钥加密发明于20世纪70年代。自公钥加密发明以来,提出了一些不可逆的数学函数,也就是说,只能在一个方向上计算,而不能在相反方向上向后推。
在比特币中,公钥用于接收比特币,私钥用于生成在相应地址支付比特币所需的签名,以唯一确定这些比特币的所有权。至于比特币地址的生成,其实是先生成私钥,私钥通过椭圆曲线算法的不可逆函数生成公钥,公钥经过一系列不可逆运算生成地址。
3.3钱包
从上面我们可以知道私钥持有者是比特币的拥有者,那么私钥在哪里呢?
它是钱包私钥的容器,也是密钥管理工具。它只包含密钥,而不是确切的令牌。比特币钱包包含一系列密钥对,每个密钥对包括一个私钥和一个公钥。
钱包定义
Wallet.dat文件其实是用我们自己设置的密码加密的。用户在登录钱包软件时,需要输入密码对文件进行解密,获得真正的私钥。此时,私钥存储在钱包程序的存储器中。当我们需要启动交易时,钱包软件会进入内存获取这个私钥来签署交易。
冷钱包
热门钱包
3.4交易
比特币交易是:把钱从一个比特币钱包转到另一个,每笔交易都有数字签名保证安全。交易一旦发生,对所有人都是开放的,每一笔交易的历史最终都可以追溯到对应的比特币最早被挖掘出来的那一点。用用户钱包里的私钥签署交易,从而证明他们有交易的输出,也就是里面的比特币。
比特币以交易输出的形式存储在区块链中。
比特币不存在于任何地方,甚至不存在于硬盘上。持有比特币实际上是拥有一个特定比特币的地址,但实际上所谓的硬币并不直接存在于这个地址中,地址相当于你的银行账户。世界上没有一个有形的物体,或者一个可以称为“比特币”的数据文件。地址之间只有转账记录,余额有增有减。所有交易都存储在一个非常大的分类账文件中,这个文件被称为“区块链”。如果你想知道一个比特币地址中的余额,那么这个不是直接存储在比特币地址中的,我们需要去区块链计算。
UTXO
第一个矿工的采矿收入交易通常被称为比特币基地,它没有输入,所以交易输入的散列总是被标记为0000.0000;任何其他事务输入只能追溯到该块之前区块链上的事务哈希和索引。通过事务散列和索引,可以唯一地确定未使用的事务输出——UTXO。这样,每个事务输入都与前一个事务输出相关联。
对于Bob,他有来自Alice的30个BTC输入,但是有0个输出,则可以计算出Bob的UTXO=20 10=30。
示例1
Q1:请写出爱丽丝和鲍勃交易时产生的“输入”中的信息,以及鲍勃的UTXO值。
Q2:请写出鲍勃与汤姆和吉米交易时产生的“输入”信息,以及鲍勃的UTXO值。
A1:它记录了爱丽丝最初拥有这些硬币并把它们转给她的地址;这时,鲍勃的UTXO=10 20=30
A2:根据上述交易过程中的信息,在Bob与Tom和Jimmy的交易过程中,共出口了25BTC。由于Bob和Alice之间的单笔交易:10BTC和20BTC不能单独满足,所以与Tom和Jimmy的交易信息的输入应该包括Alice与Bob的两笔交易中包含的所有信息。这时,鲍勃的UTXO=30-20-5=5
公钥脚本
从上面的例子不难发现,输入是对之前输出的引用。那么别人是不是也可以引用爱丽丝的交易数据作为自己的投入,也就是把钱打入自己的账户?
当然不是!因为爱丽丝在给鲍勃转账的时候加了一个条件。这个条件在比特币交易中被称为公钥脚本。在上面的例子中,公钥脚本的内容是使用交易输出的账户地址必须是Bob,那么其他人可以冒充Bob来花费输出吗?因为其他人可能知道Bob的地址和公钥,其他人也可能知道。这导致签名和验证:
多重签名
比特币还支持多方签名。如果Bob要使用Alice转给Bob的两笔交易,他不仅需要Bob的签名,还需要Alice的签名,这样如果其中一笔私钥被盗,他就不会损失比特币!
4.不对称加密算法
4.1为什么使用非对称加密?
为此,我们可以对快递包裹的内容进行加密,但如何将加密信息的密码安全地发送给Bob呢?
4.2什么是非对称加密?
可以概括为16字方针:公钥加密、私钥解密、私钥签名、公钥验证。
4.3非对称加密的工作原理
4.4不对称加密的应用
比特币的所有权
当我们说某人拥有一枚比特币时,事实是他拥有比特币地址对应的私钥。
交易验证
当使用UTXO时,用户应该提供与UTXO中描述的地址相对应的公钥,并用与公钥相对应的私钥对交易进行签名,以便比特币接收者可以验证交易是否有效。
其中,比特币中公钥和私钥的生成以及签名算法ECDSA都是基于椭圆曲线算法。
4.5椭圆曲线算法
5.如何避免做假账?
在比特币交易中,有三种保证可以避免假账:
1.用私钥对交易信息进行签名,签名必须用配对的公钥进行验证,私钥的使用者必须是付款人(使用非对称加密算法)。
2.签名后的交易信息在网络上广播,所有参与比特币网络的人都可以接收到这个交易信息,并且可以对交易信息进行检查和签名,确保交易合法(使用非对称加密算法)。
3.大家收到交易信息后,会按照约定的规则生成一个块,这个块就是数据块。该数据块包含所有交易明细,按照merkle树组装(所有交易数据按照merkle树组装,merkle树的数据结构可以保证数据安全)
6.哈希运算,难以篡改
6.1哈希算法
同样的数据输入会得到同样的结果。只要输入数据稍有变化(比如数据中的一个1变0),就会得到一个很差的结果,这个结果是无法提前预测的。具体来说,哈希算法将数据加扰、混合并压缩到一个摘要中,使数据量更小,并重新创建一个称为哈希值的指纹。
6.2哈希算法的特征
1.单向的
哈希算法必须是单向的:只能从输入数据或消息中计算出一个固定长度的哈希值,而不能从这个哈希值反算出输入数据或消息。
2.可以根据任何长度的消息来计算固定长度的散列。
哈希算法生成的哈希值长度必须是固定的,它针对的是任意长度的输入数据。该属性确保哈希算法的可用性。
因为哈希算法的一个目的是用最终的哈希值来表示输入数据,那么最终的哈希值是长的,不是固定的或者和原始数据一样长,所以通过比较哈希值来确定原始数据和直接检查原始数据一样费力。最终的长度应该控制在一个固定的合适的值,这样哈希值就可以作为原始数据的指纹或摘要。
3.不同的输入有不同的输出。
哈希算法发明的目的之一就是为了满足这个要求:它可以判断数据的完整性和一致性,只有完全相同的数据才能通过相同的哈希运算得到相同的哈希值。
无论输入数据的长度如何,都会生成一个定长的哈希值,这样比较结果更快更方便,是一种很好的检查数据防篡改防遗漏的方法。
4.第四,算法高效。
哈希值的计算时间短,保证了无论数据多长,都能在可接受的范围内得到哈希结果。
6.3典型哈希算法
著名的哈希算法有MD系列和SHA系列。
MD系列算法是由麻省理工学院计算机科学实验室和RSA数据安全公司的Rivest在上世纪初设计的。MD代表MessageDigest。MD2(1989)、MD4(1990)和MD5(1991)都生成128位的消息摘要。
SHA系列算法是NIST根据Rivest设计的MD4和MD5开发的。国安局发布了SHA作为美国政府的标准,SHA(安全哈希算法)代表安全哈希算法。
6.4哈希函数的特征
1.可用于“任意”长度的消息
2.生成的哈希值长度固定。
3.对于任何给定的消息M,很容易计算H(M)的值
4.单向的(抗原象似性):对于一个给定的散列值h,计算上不可能找到m使得h (m)=h。
6.5哈希指针
普通指针只保存结构在内存中的位置,而哈希指针不仅保存结构在内存中的位置,还保存结构的哈希值。这样做的好处是哈希指针不仅可以找到结构的位置,还可以知道结构是否被篡改过。
区块链与普通链表的区别
比特币背后的技术主要是区块链,区块链是区块连接。区块链和普通链表的主要区别在于使用哈希指针代替普通指针。如果普通链表的内容发生变化,指针不会发生变化,而一旦区块链的内容发生变化,后面块的哈希指针就会发生变化,类似多米诺骨牌效应。
哈希指针和区块链的关系
可以看出,哈希运算可以帮助识别区块链是否被篡改,区块链的哈希指针可以唯一准确地识别一个块。区块链中的任何一个节点都可以通过简单的哈希运算获得这个块的哈希指针,计算出的哈希值没有发生变化,这意味着区块链中的信息没有被篡改。此外,哈希运算还有助于将块连接成区块链。每个块都包含了前一个块的哈希值和下一个块的值,相当于通过前一个块的哈希值链接到这个块,再通过这个块的哈希值链接到下一个块,然后自然形成了链式结构区块链。
6.6 Merkle树
什么是Merkle树?
它使用的是单向哈希:哈希树的顶端是顶哈希(根哈希/主哈希),通过并行连接两个子哈希在树中上下攀爬,直到找到根哈希。
Merkle树的功能
1.您可以快速找到每笔交易。由于事务是线性存储的,定位某个事务将需要遍历,这是低效和缓慢的。通过这样的二叉树,可以快速定位到想要的交易。
2.无需存储全部数据,就可以简明地验证事务是否被篡改。从事务到每个二叉树的哈希值,任何数字的变化都会导致根哈希的变化。同时,如果出现错误,可以快速定位错误的地方。
Merkle树的特征
Merkle树是一种树形结构,具有树形结构的所有特征。
Merkle树的叶节点的值是数据集的单元数据或单元数据的哈希值。
非叶节点的值是根据其下所有叶节点的值根据哈希算法计算的。
7.双花问题和UTXO
7.1双花问题
7.2如何避免双花问题?
传统电子支付
依靠第三方信托机构
集中数据管理,通过实时修改账户余额防止“双花”。
缺点:人类在交易中需要支付巨额的第三方验证费用。
7.3 UTXO机制
UTXO的概念
UTXO是Unspent Transaction Outputs的缩写,全称是“未使用的事务输出”。
u代表未用,表示未支付或未使用。“未支付”是指该交易的输出尚未出现在其他交易的输入上。
TX transaction是缩写。交易是将钱从一个比特币钱包转移到另一个钱包,这是改变比特币所有权的唯一方式。它包含了输入、数字和输出的基本内容。
o是Output,表示输出。TXO连接在一起意味着交易输出。
比特币和UTXO的关系
比特币中没有用户账户的概念。当我们说我们有多少比特币时,我们实际上是指我们拥有的那些UTXO中指示的比特币数量。爱丽丝有10个比特币,本质上实际上是在当前的区块链账本里。几个事务的UTXO项的接收方写Alice的地址,这些UTXO项之和是10。
比特币交易规则
1.除了coinbase交易之外,所有资金来源必须来自以前一笔或几笔交易的UTXO。
2.任何交易的总交易输入必须等于总交易输出,等式两边必须平衡;也就是每笔交易的投入价值必须全部花掉,而不是只花掉一部分。
比如你的钱包地址里只有我想转出的8个比特币,那就很简单了。我发起交易,把这8个比特币转到你的钱包地址,我签字确认交易。但如果我的钱包地址里有25个比特币,那么我发起的交易就不会给你转账8个比特币,那么我的钱包地址里就剩下17个比特币了。此时我发起的交易是:从我的钱包地址转账8个比特币给你,同时转账17个比特币给我的同一个地址。
这里我们通过一个比特币交易的例子来加深对UTXO的理解:
1.假设爱丽丝之前通过挖矿获得了12个比特币,在她的地址里,这些比特币是一个基于货币的交易的UTXO。
2.爱丽丝发起两次交易,第一次交易的输入是她最后一次交易,输出是鲍勃的地址,数量是2个比特币;第二次交易的输出是爱丽丝自己的地址,数量是10个比特币。Alice用她的私钥签署交易。
8.共识机制
8.1什么是共识?
共识是从语言的角度来理解的,即许多不同的人对同一件事达成相同或至少相同的看法。这个解释也适用于比特币网络。
共识的主题
目前,这个区块链中的一些节点,最终需要哪些节点达成协议,是一个需要考虑的问题。
同意什么?
共识机制涉及到如何生成区块,以及生成后如何选择。3354块和交易
在区块链中,由于每个节点都是平等的,没有中心组织,此时需要通过共识机制在节点之间达成一致。
8.2什么是共识算法?
共识算法是达成共识的规则,是筛选出代表节点的方法。为此,区块链设计了某种底层算法。通过这种特定的算法,选择出能够生成新块的节点,同时对这个区块链中的每个事务是否允许完成进行约束和规定,即共识算法。共识算法指定哪个矿工将生成下一个新块。同时,为了在这个区块链中达成交易,共识算法选择的一些节点需要达成共识视图。也就是说,对于一个交易,如果几个利益不相关的节点能够达成共识,就可以认为全网能够达成共识。
8.3比特币——PoW的共识算法
比特币工作证明(PoW)算法用于确认你做了一定量的工作。
区块链的每个矿工都有资格生成一个区块,因此为了决定谁将生成下一个区块,需要通过某种方法来决定。在Pow机制中,所有节点尝试并随机计算,直到一个节点找到随机散列的数值解并成为有资格生成新块的主体。
优势:完全分散化
缺点:1。采矿造成大量的资源浪费;2.达成共识需要很长时间。
PoW如何证明你的工作量?
通过工作结果3354当一个用户通过做一个困难的工作得到一个结果,通过展示这个结果证明你完成了一定的工作量。——也就是说,权力作为一种共识机制,是结果导向的,而不是过程导向的。
为什么不采用一种以过程为导向的共识机制?
因为在实际应用中,如果通过监控工作全过程来证明工作量,效率极低。为了保证一定的效率,我们设计了一种通过验证结果来证明工作量的方法。
PoW的特征:不对称
实际用户需要付出大量的工作才能得到一个符合设定条件的结果,但作为验证者,很容易根据用户提供的材料重新计算结果,同时提前验证结果是否符合规定条件。
所以在工作量证书中,工作时间越长,工作中使用的设备越先进,工作量越高,收获也越多。虽然短期可能有侥幸心理,但长期来看是公平的。谁努力谁就会得到更多。
9.(51%的攻击)
9.1计算能力
Force也称为hash rate,是一个用于衡量执行哈希操作的能力或执行哈希操作所需时间的指标。如果网络达到10T hash/s(每秒10T hash)的哈希速率,就意味着每秒可以进行10万亿次计算。
哈希:尝试求解随机哈希值的过程。
一个矿工每秒钟能进行这种碰撞的次数代表了它的计算能力。
矿工在采矿中使用的机器越先进,其计算能力就越高。
9.2区块链转移的基本原则
整个区块链网络之所以能够运行,取决于整个网络的“矿工”,因为他们通过计算能力解决加密问题来挖掘新的区块。区块挖出来后,他们有权把转让信息放入区块,然后完成转让。这是区块链转移的基本原理。
9.3 51%的攻击
50%攻击(多数攻击),也就是说某人在全网的计算能力超过了全网的50%。然后他可以尝试修改区块链的状态,进行反向交易,实现双花。
典型案件
让我们想象一下,爱丽丝现在控制了比特币网络上超过51%的计算能力。在控制计算能力期间,她在交易所里给了自己钱包一定数量的比特币。我们把这个分支机构命名为Branch A,同时,她把这些比特币发到她控制的另一个钱包里。我们将这个分支机构命名为b分支机构,在A分支机构上的交易被确认后,她立即将这些比特币卖出,并成功套现。此时,分支A成为主链。然后,爱丽丝对b分支进行挖掘,由于她控制了全网50%以上的计算能力,所以她有很大的机会把记账做对。于是很快,B分支的长度超过了A分支,然后B分支就会成为主链,A分支上的事务就会回滚。所谓回滚,是指由于程序或数据的处理错误,将程序或数据恢复到上一次正确状态的行为。
此时,随着交易回滚,分支A回到了爱丽丝发起第一笔交易前的状态,于是她之前兑换成现金的比特币回到了自己手中。于是这些比特币就成了交易所的损失。最后,爱丽丝把这些比特币发到她的另一个钱包里。就这样,她实现了51%以上计算控制权的同令牌“双花”。
9.4 51%攻击什么时候发生?
一个矿池的计算能力太大了。
Ps:挖矿池,为联合少量计算能力联合运营而建立的网站。
现在生产新区块越来越难,于是矿工们合作组成矿池,集合成千上万参与者的计算能力,参与开采,分享奖励。在这种情况下,一旦一个矿池中矿工过多,其计算能力超过全网的50%,就有51%被攻击的风险。
拥有无限的资本
拥有无限的资本和无限的装备,可以发动51%的攻击。
9.5 51%攻击悖论
虽然看起来51%的攻击很恐怖,但通常只存在于理论案例中。因为如果要做的话,首先需要足够的资金来控制全网51%的计算能力,这将是一笔非常大的投资。其次,受到攻击后,货币价格会受到影响,你不得不出售大量的硬币来实现收支平衡。这就是51%攻击悖论。