1、1概述n比特币是典型的去中心的电子现金n2008年11月1日,中本聪比特币:一种点对点的电子现金系统 提出了比特币的概念n2009年1月3日,比特币创世区块诞生n2017年12月17日,比特币达到历史最高价19850美元2比特币特点n去中心化n匿名化n可追溯n集体维护n总量固定n安全可信3区块链的基础架构模型n数据层n网络层n共识层n激励层n合约层n应用层4交易n交易(transaction)描述了比特币的收款双方及交易金额等支付细节,是证明比特币所有权的凭证,区块链记录的就是比特币的交易。n账户地址是由密码算法生成的:调用ECDSA的密钥生成算法为用户生成公私钥对(pk,sk),计算比特币账
2、户地址X=RIPEMD160(SHA256(pk),私钥sk的拥有者可以使用X中的比特币。5交易构成n元数据n输入字符串n输出字符串6交易例子n每一笔交易可以有多个输出,比如Alice用10BTC作为输入,要转给Bob的金额是6BTC,就需要产生两个输出:一个是Bob的钱包里多出一个6BTC,另一个是自己的钱包里多出一个4BTC(不考虑交易费用)。之后,Alice再去用这个4BTC,那么通过上个交易的哈希值就会找到这个10BTC=6BTC+4BTC的交易,所在输出数组的下标对应第2个输出。来自Joe之前已接受的交易交易ID1Joe:0.1205BTC输入#0Alice地址:0.1200BTC交
3、易费:0.0005BTC输出交易ID1:0交易ID2Alice:0.1200BTC输入#0Bob地址:0.1000BTC交易费:0.0005BTC输出交易ID2:0交易ID3Bob:0.1000BTC输入#0Carol地址:0.0995BTC交易费:0.0005BTC输出#1Alice地址:0.0195BTC8交易有四个公理n(1)发送的任何比特币金额总是发送到一个地址。n(2)收到的任何比特币金额都被锁定在接收地址,接收地址与钱包相关联。n(3)花费比特币时,花费的金额将来自之前收到的并且目前存在于钱包中的资金。n(4)地址接收比特币,但不发送比特币,比特币是从钱包发送的。9共识协议n交易上
4、的签名可以保证交易的合法性,但是不能保证比特币不被二次花费n二次花费是指如果用户直接用交易作为支付凭证,该凭证可能会被重复使用。n比特币系统利用区块链来避免重复花费,交易只有被发布到区块链上才是有效的。n交易被发布到区块链的过程需要全网节点达成共识,这个过程就是共识协议执行的过程10区块和区块链n区块是区块链的基本组成结构,存储着所有的比特币交易信息,用户生成交易后需要矿工打包到区块内才可能链接到区块链上n交易以Merkle-tree的形式聚集在一起被存储在区块上n区块由区块头和区块体组成11区块头结构表字节字节字段字段说明说明4版本(version)区块版本号,表示该区块符合的验证规则32前
5、一区块头哈希值(pre_hash)前一区块头哈希值32Merkle根(merkle_root)该区块中交易的Merkle树根的哈希值,取决于本区块中所包含的交易,交易的任何变动都会影响此值的结果4时间戳(ntime)区块产生的近似时间,即从1970年1月1日1970年01月00时00分00秒(格林威治时间)开始所经过的秒数4难度值(nbits)工作量证明算法的难度值用于调节区块生成时间,是一个可调节的变量4随机数(nonce)工作量证明遍历的随机数,当全网算力增加,本字段位数不够时,可以更改coinbase交易和时间戳来扩展此位数12区块体结构表字节字节字段字段说明说明4魔法数不变常量,是比特
6、币客户端解析区块数据时的识别码4区块大小用字节表示的该字段之后的区块大小1-9交易数量本区块包含的交易笔数大小大小不定不定交易本区块中包含的所有交易,采用Merkle树结构13区块链的结构难度时间戳前一区块头哈希值版本Merkle根随机数区块体区块头难度时间戳前一区块头哈希值版本Merkle根随机数区块体区块头难度时间戳前一区块头哈希值版本Merkle根随机数区块体区块头14共识机制n共识机制是分布式系统中众多节点达成某个一致目标或者状态所参照的规则n例如Alice把同一个比特币发送给不同的接收者Bob和Charlie,Bob和Charlie分别独立验证并接受交易,区块链就会产生两种不一致的状
7、态,Alice实现了双花(二次花费)。区块链副本哪一个能够被大多数节点所认可并达成一致,如何解决分布式下的一致性问题,此时就需要共识机制。15共识机制n比特币通过整个网络的所有节点验证交易的合法性来解决这一问题,双花交易将会被别的参与者识别。当且仅当大多数参与者接受这个交易,Bob才应当接受。n但是,可能产生假身份的问题,敌手可能发动Sybil攻击。Alice可能构造许多实体来确认某个交易来替代之前的交易来实现双花。Bob将会相信他们并接受这个交易。比特币利用工作量证明(Proof of Work,PoW)来预防Sybil攻击。16工作量证明机制n在分布式网络环境中,全网所有节点利用自己的计算
8、能力竞争解决一个计算困难但验证容易的密码学难题,只有付出一定的计算量的节点才能在竞争中获胜并取得记账权,并将新的区块连接到链上,其它节点验证新区块并添加到自己的区块链副本上,开始新一轮的竞争记账权。保证了全网的区块链账本一致性。17分叉n在共识过程中,由于通信网络的延迟等因素,有可能会几乎同时生成两个合法的区块,这个时候会出现一个暂时的分叉:网络中有两个等长的链。n为了防止重复花费,需要等待确认区块的生成。当前区块之后的新生区块被称为确认区块,随着确认区块个数k的增加,出现深度分叉的概率将以k的指数级减少,一般k 6时就可以认为交易是有效的。18挖矿机制n工作量证明就是寻找某个数学难题的解。数
9、学难题不容易被解出来但是却很容易验证,计算的过程被称为挖矿,每个挖矿的网络节点被称为矿工。n矿工会得到一定量的比特币作为奖励n每个交易的交易费也是给矿工的报酬,激励矿工生成合法的区块19工作量证明的过程n构建候选区块。当新区块广播后,新一轮的挖矿竞争开始。矿工从网络中接收新区块的区块头哈希值pre_hash;矿工生成一个Coinbase交易(用于获得比特币区块奖励),连同自己内存池中的交易一起组成Merkle树记入候选区块体,计算交易集合的merkle_root。将pre_hash、merkle_root记入候选区块的区块头,同时为区块头添加版本号version、时间戳(ntime)、难度值(
10、nbits)、随机数(nonce)等字段。这里nonce初始值为0。20工作量证明的过程n寻找有效区块。矿工穷举nonce,,寻找满足nSHA256(SHA256(version|pre_hash|merkle_root|ntime|nbits|nonce)Tn的nonce值(计算区块头的双SHA256哈希值),这里T是某个目标值,即矿工竞相寻找能够使目标值满足前多少位为0的随机数。率先找到满足条件nonce值的矿工立刻广播自己的区块,相邻矿工节点接收并验证这个区块中交易的合法性和工作量证明的正确性,继续传播此区块。所有接收到新区块的节点都会验证并传播新区块,将它链接到自己的区块链副本最后,并在此区块后面开始新一轮的挖矿竞争。21矿池挖矿过程n每个矿池有一个管理者,负责收集交易、分配挖矿任务和分配收益n矿工根据分配到的任务利用自己的算力进行挖矿,当找到满足矿池目标值的nonce时提交给管理者,这叫做部分工作量证明(PPoW)。当部分工作量证明满足全网难度目标时(即完整工作量证明FPoW),管理者向全网广播,矿池获得相应的挖矿收益。矿池基于奖励分配机制给矿工分配收益。22比特币的安全性n去匿名性攻击去匿名性攻击n日蚀攻击和路由攻击日蚀攻击和路由攻击n51攻击攻击n区块截留攻击区块截留攻击n自私挖矿自私挖矿n截留分叉攻击截留分叉攻击