区块链:比特币背后的技术-V1.2_第1页
区块链:比特币背后的技术-V1.2_第2页
区块链:比特币背后的技术-V1.2_第3页
区块链:比特币背后的技术-V1.2_第4页
区块链:比特币背后的技术-V1.2_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

区块链:比特币背后的技术

2021/5/91区块链的定义狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。

-百度百科2021/5/92用麻将来比喻区块链?所有的比喻都是错误的,部分比喻有一些用。就好比用水解释金融。完全抓住一个概念需要自底而上的了解。2021/5/93本次讲座讲解比特币背后的技术细节(比特级)把听众当零基础看只是领进门大约40~50分钟2021/5/942013年12月5日,人民银行、工信部、三会等五部委发布《关于防范比特币风险的通知》,“从性质上看,比特币是一种特定的虚拟商品,不具有与货币等同的法律地位。但是,作为一种互联网上的商品买卖行为,普通民众在自担风险的前提下拥有参与的自由。”比特币的定性2021/5/95比特币长什么样子2021/5/96比特币长什么样子2021/5/97怎么把比特币发给别人2021/5/98别人怎么发比特币给我2021/5/99涉及的概念比特币地址:形如12usb4VU1UqHSn2QLRyfyNxT3VGgVGaCNo的一串数。比特币地址是用公钥做哈希生成的。比特币公钥使用私钥生成的。比特币私钥是用户通过钱包生成的。比特币钱包是一个客户端。2021/5/910比特币归根到底是比特60e31600000000001976a914ab68025513c3dbd2f7b92a94e0581f5d50f654e788ac01100000111000110001011000000000000000000000000000000000000000000001100101110110101010010001010010101011011010000000001001010101000100111100001111011011110100101111011110111001001010101001010011100000010110000001111101011101010100001111011001010100111001111000100010101100内含0.015比特币的UTXO:用16进制表示这个UTXO:只有提供了正确的公钥和签名才能把这笔钱花了2021/5/91116进制和2进制(零基础)一个16进制(hex)字符可用4位(2进制)表示。 01234567

00000001001000110100010101100111 89abcdef1000

1001101010111100110111101111所以:16进制的60e3就是2进制的011000001110001116进制:2进制:16进制:2进制:2021/5/912区块链长什么样子2021/5/913仔细看一个区块头部80字节交易存放区010000008a730974ac39042e95f82d719550e224c1a680a8dc9e8df9d007000000000000f50b20e8720a552dd36eb2ebdb7dceec9569e0395c990c1eb8a4292eeda05a931e1fce4e9a110e1a7a58aeb01601000000010000000000000000000000000000000000000000000000000000000000000000ffffffff5370736a049a110e1a04b099a417522cfabe6d6d4e6988c831bb48c551eea50f87b3c6461ade476fe15c98bed7c6a574aca4ff3501000000000000004d696e656420627920425443204775696c6420ac1eeeed88ffffffff0140ff082a010000001976a914ca975b00a8c203b8692f5a18d92dc5c2d2ebc57b88ac000000000100000001d81a8ff9114a09536c43b16003011a91bce5a2941d117e050c01ba1920181c72010000008c493046022100c7784a417a5780b922dd6385bd1cc07b530794c63d6b0584378fc6dfb79d35d50221008812fd23e25549fca2ea6273e0f609f8aa93e2e822ec9a4537d57cd4fb664165014104cfe9363f2c7213bde611e57a4e16b2fb90cf3db160276e5f9f12081c718ebb3821a485866585b3fe416d1b28d4fd993db339dd38bef48da7ec4db5b618a1ce09ffffffff02404b4c00000000001976a91499e8943edcd38645f4a99a7173c9c42ab3e2160c88ac440730ec010000001976a9142e61d7641959b2afcaae323186c239d65df1e58488ac00000000010000000171b250f62a6a5a17ab0a0d60592c39871ba2141a166a852c94cf4f00f0fcb88d010000008b48304502202e1f5fc8065c38a5d7471aa7d3f495048ea773049e6f30d939173dd553fa114f0221008fad13d287ead5c297589211ec0b687fe129f7ff61a344825b295a5c0eda06450141047ef7874043d8355b39ca58c4894ff937c9bce598ac01b325407694d8ddd2132......版本号、哈希、merkle根、时间戳、难度值、Nonce交易数量交易1数据(即输入、输出)交易2数据(即输入、输出)交易3数据(即输入、输出)......Block#1545952021/5/914区块是怎么连接起来的版本号、上一区块头哈希、

时间戳、难度值、Nonce本区块交易的merkle根、交易数量交易1数据交易2数据交易3数据......版本号、上一区块头哈希、

时间戳、难度值、Nonce本区块交易的merkle根、交易数量交易1数据交易2数据交易3数据......2021/5/915哈希算法一种算法,把任意长度的输入做复杂的变换后,输出固定长度的输出。MD5输出的是128位,16字节。SHA256输出的是256位,32字节。(BTC使用)RIPEMD160输出的是160位,20字节。(BTC使用)计算Hash很容易,逆向很难。倒推只能靠暴力尝试。不同的输入,算法产生完全不同的输出。尽可能等概率、均匀分布到整个地址空间,降低冲突(碰撞)发生几率。2021/5/916

>md5–s“weijianfan”MD5("weijianfan")=c49262b1117b9fd1d6ebd74aaa016f3e>md5–s“weijianfam”MD5("weijianfam")=83cc9391aaf8c955b67ecdbf249c5fbf>md5APT攻击9.10.mp4MD5(APT攻击9.10.mp4)=e9c2a884af7b7c6db7919f8cc8abc51b注:该视频362M。MD5生成2021/5/917思考给定输入data,然后不断变换Nonce,让你找出前面若干位是0的hash值。MD5(fixeddata+Nonce)

=0100110....011011如果让你找出第1位是0的hash值,一般大概需要两次。如果让你找出前2位是0的,大概需要4次。如果找出前3位是0的,几次?2021/5/918MD5("Thisisatest17")=b0fc7f1d91e9053995f707a90970001d1011....MD5("Thisisatest18")=2da096e2d33078719be1f71f19f3f10b0010....MD5("Thisisatest19")=32333b0fcb54a8c89e3de7d6c9ad4b5c0011....MD5("Thisisatest20")=bbe19f5c8edc2de5e19e7e374ba5e7ff1011....MD5("Thisisatest21")=95090ec4bc9582eeed1ffa5190ed6e7d1001....MD5("Thisisatest22")=2192d2e7b31a0ef78f2292631d5dd95d0010....MD5("Thisisatest23")=de2e3710ec0fa7fb59d5e28dffce88c91101....MD5("Thisisatest24")=6cb7aaf335f7db96aff76568c7c528c90110....MD5("Thisisatest25")=c7ca696058808f0185b68398bc59ab321100....MD5("Thisisatest26")=162f09dd9c4d8f612f710fe54e5e585b0001....MD5("Thisisatest27")=0daa804de33f7f8559bdb33b3e2d6f5c0000....MD5("Thisisatest28")=b484f277e80c304751f00d670db98fb31011....MD5("Thisisatest29")=aa1cd22cc75b4b0eed9d48c639d3832d1010....MD5("Thisisatest30")=c11afafbbffecd4d558c5069f27ad1031100....MD5("Thisisatest31")=4f09394865cc6094e7a618a0a152e30c0100....MD5("Thisisatest32")=6907ecb0a7d7887e338315331559383b0110....16进制2进制2021/5/919想找出前面30bit都为0的哈希值,平均需要2^30次尝试。

00000003fc7f1d91e9053995f707a9092021/5/920简要理解公钥算法公钥与私钥是通过一种算法得到的一个密钥对。公钥可以公开,私钥要保密。从私钥可以导出公钥,从公钥无法导出私钥。公钥算法:用公钥加密,用私钥解开。用私钥加密,用公钥解开。2021/5/921如何理解你把信件用私钥加密,所有人都可以用你的公钥解开它看。(密码学保证是你写的)别人用你的公钥加密一封信,只有你才能用私钥解开来看。(密码学保证只有你才能看)2021/5/922数字签名现实生活中的签名:表达了签名人对所签署文件的认可。隐含要求:文件不应该再被改动。2021/5/923数字签名一种做法:明文,签名者用私钥对明文加密验证方法:用签名者公钥解开密文,对比明文明文签名2021/5/924数字签名常见做法:明文,签名者用私钥对明文的哈希加密验证方法:用哈希算法计算明文的哈希。

用签名者公钥解开密文,对比哈希。明文签名2021/5/925公私钥的模样(ECDSA算法)私钥是随机生成的,比如一个256位私钥(64个hex,32个字节):1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD公钥为520位(130个hex,65个字节)04F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB压缩格式的公钥为264位(66个hex,33个字节)03F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A签名为576位(144个hex,72个字节)3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e38132021/5/926比特币地址比特币地址是由公钥经hash变换而得:Hash160=RIPEMD160(SHA256(PubK))Address=Base58Check(Hash160)生成这样地址:1HTrkKfaYLGJYZhMCdmS5JNdgctGj7qG5oBase58check是在Bsae58编码的基础上,增加了错误校验功能,校验码占据4个字节。Base58使用在Bsae64的基础上,舍弃了容易搞错的字符:0(零),O(大写字母o),l(小写字母L),I(大写字母i),+,/2021/5/927比特币的基本原理(重要!)1、网络中若干个节点运行比特币软件(开源软件)。2、每个节点可以收发比特币(这称为交易),然后在网络内广播该交易数据包,很快会传遍全网每个节点,每个节点都会把错误的交易抛弃掉。3、每隔一段时间(平均10分钟),网内某个节点就会率先打包出一个符合要求的数据块(区块),里面含有这段时间的所有交易,这个区块会广播到全网。*这里说的节点都是全节点。2021/5/928比特币的基本原理(重要!)4、所有节点都在抢着打包,因为谁能正确打包谁就能得到比特币奖励(所谓挖矿)。只有通过海量尝试,计算出满足要求的哈希值的节点才能打出大家认可的包(也即出块)。5、每个节点收到区块后,如果验证无误,就接受该区块,将其附到到已有的区块链上。6、挖矿难度每两周调整一次,保证全网每10分钟才能挖出一个区块。

*

对哈希值的要求是比某个特定难度值小,其实也就是前面若干位为0。2021/5/929比特币的基本原理(重要!)7、每成功出一个区块,打包者将会被奖励12.5个比特币。最早一开始是奖励50个,每210000个区块奖励减半(也即每4年),到2140年就会无币可挖。8、所有输入的BTC减去输出的BTC,就认为是给矿工的手续费。手续费越高的交易,越优先被打包。9、每次出块后,所有挖矿节点会在内存中把上一个区块已经打包的交易剔除掉,把已经收到但尚未打包的交易打包,并开始不停的计算,试图做下个区块。2021/5/930网络上的细节节点启动后,先找到其他节点(一般有一个稳定节点列表,或者启动时给指定一个节点),使用TCP协议,8333端口通信。每个节点通常和另外8个节点保持联系。2021/5/931关于比特币节点全节点:存储全部区块,验证交易,网络路由、挖矿(可选)、钱包。矿机节点:仅仅挖矿,计算特定的哈希值。矿池节点:全节点,并且给矿机下发任务。轻钱包节点:仅钱包功能,不存区块。2021/5/932全球现在有多少全节点2021/5/933交易Transaction,也就是收发币(转账)。就是将BTC从一个地址转移到另一个地址。每个交易里面的主要信息是:花哪个地址的钱(称为输入,1或n个),付给哪个地址(称为输出,1或n个)付多少签名2021/5/934BTC和地址有的BTC地址上,存放着上万的BTC,有的则比0.00001还少。(如果已经花了,就没了)一个交易里,发送部分为输入,接收部分为输出。所有的输入,都是曾经的输出。2021/5/935一个交易数据0100000001186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd734d2804fe65fa35779000000008b483045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e381301410484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adfffffffff0260e31600000000001976a914ab68025513c3dbd2f7b92a94e0581f5d50f654e788acd0ef8000000000001976a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac00000000Alice向Bob支付的一杯咖啡的钱2021/5/936解读这个交易Alice向Bob支付的一杯咖啡的钱2021/5/937Alice那0.1BTC的来源2021/5/938UTXO一旦使用一个输出,就必须花完,花不完可以把零钱打给自己。每个尚未使用的输出,就是一个UTXO(UnspentTransactionOutput)。下面这个例子中,把零钱打给自己(也可以是自己的另一个地址),产生两个新的UTXOA,10B,3

A,72021/5/939另一个交易:多输入多输出2021/5/940挖矿奖励:coinbase交易2021/5/941交易输出交易输出的内容:金额,锁定脚本

想花这份钱,你需要提供地址所对应私钥的签名!

锁定脚本里面主要是公钥Hash、Hash比对、签名验证

也就是验证花钱人是否提供了正确的公钥和签名金额以10^-8个比特币(成为satoshi,聪)为单位。

(也即最小单位为0.00000001BTC)2021/5/942输出的数据结构

金额:16e360,即1500000聪,也即0.015比特币

(即)

脚本长度:19(即25字节)

锁定脚本:"OP_DUPOP_HASH160ab68025513c3dbd2f7b92a94e0581f5d50f654e7OP_EQUALVERIFYOP_CHECKSIG"60e31600000000001976a914ab68025513c3dbd2f7b92a94e0581f5d50f654e788ac一个输出:2021/5/943输入交易输入的内容:钱从哪来,解锁脚本(证明钱是你的)钱从哪来,从发送者BTC地址所拥有的UTXO来要提供这个UTXO所在的交易ID该UTXO在那个交易中的输出的顺序号解锁脚本里面有什么?主要是签名和公钥提供签名用来证明自己是私钥的主人提供公钥是因为验证签名时需要(UTXO中不含公钥)2021/5/944输入的数据结构ID186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd734d2804fe65fa35779000000008B483045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e381301410484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adfffffffff一个输入:2021/5/945用16进制表示交易ID:186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd734d2804fe65fa35779顺序号:00000000脚本长度:8B(139字节)脚本:

签名长度:48(72字节)

签名:3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24

cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e381301

公钥长度:41(65字节)

公钥:0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc541233637

6789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf序列号:ffffffff*注意比特币采用小端字节排放,是倒序的。2021/5/946交易的格式主要是多少个输入多少个输出,以及相应的输入输出2021/5/947交易的HEX字节流0100000001186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd734d2804fe65fa35779000000008B483045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e381301410484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adfffffffff0260e31600000000001976a914ab68025513c3dbd2f7b92a94e0581f5d50f654e788acd0ef80000000000001976a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac00000000蓝色表示输入,其中下划线表示交易ID。红色表示输出,其中下划线表示金额。(1500000,8450000)2021/5/948每个节点做的事每个收到交易的比特币节点将会首先验证该交易,只有有效的交易才会在网络中传播,无效的交易将会被废弃。每个节点都会校验每一笔收到的交易:语法、数据结构、字节大小、输入输出值的大小。每个输入引用的UTXO是必须存在的。每个输入所引用的UTXO,如果已经被池中其他交易的输入引用,该交易将被拒绝。每个输入所引用的UTXO,在主分支和交易池中寻找产生该UTXO的交易。如果找不到,将此交易加入孤儿交易池中。每个输入的解锁脚本必须能通过解锁验证。2021/5/949PaytoPublicKeyhash脚本解锁验证PubKHash其实就是未经base58check的公钥地址2021/5/9502021/5/9512021/5/9522021/5/953区块靠Hash链接起来!

所有块之间都有一个链接的关系。上区块头部的hash值,存放在本区块头部。本区块头部的hash值存在下个区块中。本区块hash值=Hash(本区块头部)=Hash(上区块hash值+本区块merkle根+本区块随机数+...)

*merkle根来自本区块内的交易2021/5/954关于块结构每个块=头部+交易数据头部(80个字节):版本号上一个区块的hash值(通过这个链接到上一个区块)merkle根(可简单理解为对所有交易数据的hash)时间戳难度(bits,调节挖矿的难度)随机数Nonce(挖矿时用来穷举的变量)2021/5/955Hash=SHA256(SHA256(version+prev_Hash+merkle_root+time+diffculty+random))2021/5/956区块头结构2021/5/957难度区块挖矿的难度称为"难度位"或简称"bits"。比如在区块277,316中,它的值为0x1903a30c。这个标记法,0x19为幂,⽽0x03a30c为系数。计算难度⽬标的公式为:target=coefficient*2^(8*(exponent–3))=0x03a30c*2^(0x08*(0x19-0x03))=0x03a30c*2^(0x08*0x16)=0x03a30c*2^0xB0=0x0000000000000003A30C00000000000000000000000000000000000000000000难度位(bits)越小,难度越大。2021/5/958难度调整在一个完全去中心化的网络中,难度调整是如何做到的呢?每2,016个区块中的所有节点都会调整难度。难度的调整公式是由最新2,016个区块的花费时长与20,160分钟(两周,即这些区块以每10分钟一个速率所期望花费的时长)比较得出的。NewDifficulty= OldDifficulty*(ActualTimeofLast2016Blocks/20160minutes)解释:如果过去两周来平均产生速率比10分钟快,系数会小于1,新的难度变大。2021/5/959挖矿通过改变本区块头中的随机数(nonce)以及其他可以改动的地方,要让本区块头中记录的hash值<bits(难度值)。注:还可以通过改变coinbase交易中的extraNonce区域(8字节)来改变区块头中的merkle_root,还可以改变ntime。目的是做出满足要求的hash。2021/5/960挖矿在Andreas编写MasteringBitcoin这本书的时候,比特币网络某个区块头的哈希值:000000000000004c296e6376db3a241271f43fd3f5de7ba18986e517a243baa7(15/64hex,前60bit)全网具备100PH每秒(petahashespersecond,peta-为10^15)的处理能⼒。1E=1000P1P=1000T1T=1000G1G=1000M1M=1000K2021/5/9612021/5/962目前2018年5月7日,第521582块的Hash:00000000000000000024ee89088f2953322c84117702a145740dc88d8e3821ed

(18个0,前72bit为0)全网算力达到了29EH/s2021/5/963个人挖矿的难

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论