版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
区块链:比特币背后的技术-V1.2区块链的定义狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。
-2用麻将来比喻区块链?所有的比喻都是错误的,部分比喻有一些用。就好比用水解释金融。完全抓住一个概念需要自底而上的了解。3本次讲座讲解比特币背后的技术细节(比特级)把听众当零基础看只是领进门大约40~50分钟42013年12月5日,人民银行、工信部、三会等五部委发布《关于防范比特币风险的通知》,“从性质上看,比特币是一种特定的虚拟商品,不具有与货币等同的法律地位。但是,作为一种互联网上的商品买卖行为,普通民众在自担风险的前提下拥有参与的自由。”比特币的定性5比特币长什么样子67比特币长什么样子8怎么把比特币发给别人别人怎么发比特币给我9涉及的概念比特币地址:形如12usb4VU1UqHSn2QLRyfyNxT3VGgVGaCNo的一串数。比特币地址是用公钥做哈希生成的。比特币公钥使用私钥生成的。比特币私钥是用户通过钱包生成的。比特币钱包是一个客户端。10比特币归根到底是比特11内含0.015比特币的UTXO:用16进制表示这个UTXO:只有提供了正确的公钥和签名才能把这笔钱花了16进制和2进制(零基础)一个16进制(hex)字符可用4位(2进制)表示。 01234567
00000001001000110100010101100111 89abcdef
1000100110101011110011011110111112所以:16进制的60e3就是2进制的011000001110001116进制:2进制:16进制:2进制:区块链长什么样子13仔细看一个区块14头部80字节交易存放区010000008a730974ac39042e95f82d719550e224c1a680a8dc9e8df9d007000000000000f50b20e8720a552dd36eb2ebdb7dceec9569e0395c990c1eb8a4292eeda05a931e1fce4e9a110e1a7a58aeb0版本号、哈希、merkle根、时间戳、难度值、Nonce交易数量交易1数据(即输入、输出)交易2数据(即输入、输出)交易3数据(即输入、输出)......Block#15459515区块是怎么连接起来的版本号、上一区块头哈希、
时间戳、难度值、Nonce本区块交易的merkle根、交易数量交易1数据交易2数据交易3数据......版本号、上一区块头哈希、
时间戳、难度值、Nonce本区块交易的merkle根、交易数量交易1数据交易2数据交易3数据......哈希算法一种算法,把任意长度的输入做复杂的变换后,输出固定长度的输出。MD5输出的是128位,16字节。SHA256输出的是256位,32字节。(BTC使用)RIPEMD160输出的是160位,20字节。(BTC使用)计算Hash很容易,逆向很难。倒推只能靠暴力尝试。不同的输入,算法产生完全不同的输出。尽可能等概率、均匀分布到整个地址空间,降低冲突(碰撞)发生几率。16
>md5–s“weijianfan”MD5("weijianfan")=c49262b1117b9fd1d6ebd74aaa016f3e>md5–s“weijianfam”MD5("weijianfam")=83cc9391aaf8c955b67ecdbf249c5fbf>md5APT攻击MD5(APT攻击9.10.mp4)=e9c2a884af7b7c6db7919f8cc8abc51b注:该视频362M。17MD5生成思考给定输入data,然后不断变换Nonce,让你找出前面若干位是0的hash值。MD5(fixeddata+Nonce)
=0100110....011011如果让你找出第1位是0的hash值,一般大概需要两次。如果让你找出前2位是0的,大概需要4次。如果找出前3位是0的,几次?18MD5("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....16进制2进制19想找出前面30bit都为0的哈希值,平均需要2^30次尝试。
2000000003fc7f1d91e9053995f707a909简要理解公钥算法公钥与私钥是通过一种算法得到的一个密钥对。公钥可以公开,私钥要保密。从私钥可以导出公钥,从公钥无法导出私钥。公钥算法:用公钥加密,用私钥解开。用私钥加密,用公钥解开。21如何理解你把信件用私钥加密,所有人都可以用你的公钥解开它看。(密码学保证是你写的)别人用你的公钥加密一封信,只有你才能用私钥解开来看。(密码学保证只有你才能看)22数字签名现实生活中的签名:表达了签名人对所签署文件的认可。隐含要求:文件不应该再被改动。23数字签名一种做法:明文,签名者用私钥对明文加密验证方法:用签名者公钥解开密文,对比明文明文签名24数字签名常见做法:明文,签名者用私钥对明文的哈希加密验证方法:用哈希算法计算明文的哈希。
用签名者公钥解开密文,对比哈希。明文签名25公私钥的模样(ECDSA算法)私钥是随机生成的,比如一个256位私钥(64个hex,32个字节):1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD公钥为520位(130个hex,65个字节)04F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB压缩格式的公钥为264位(66个hex,33个字节)03F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A签名为576位(144个hex,72个字节)3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e381326比特币地址比特币地址是由公钥经hash变换而得:Hash160
=RIPEMD160(SHA256(PubK))Address=Base58Check(Hash160)生成这样地址:1HTrkKfaYLGJYZhMCdmS5JNdgctGj7qG5oBase58check是在Bsae58编码的基础上,增加了错误校验功能,校验码占据4个字节。Base58使用在Bsae64的基础上,舍弃了容易搞错的字符:0(零),O(大写字母o),l(小写字母L),I(大写字母i),+,/27比特币的基本原理(重要!)1、网络中若干个节点运行比特币软件(开源软件)。2、每个节点可以收发比特币(这称为交易),然后在网络内广播该交易数据包,很快会传遍全网每个节点,每个节点都会把错误的交易抛弃掉。3、每隔一段时间(平均10分钟),网内某个节点就会率先打包出一个符合要求的数据块(区块),里面含有这段时间的所有交易,这个区块会广播到全网。28*这里说的节点都是全节点。比特币的基本原理(重要!)4、所有节点都在抢着打包,因为谁能正确打包谁就能得到比特币奖励(所谓挖矿)。只有通过海量尝试,计算出满足要求的哈希值的节点才能打出大家认可的包(也即出块)。5、每个节点收到区块后,如果验证无误,就接受该区块,将其附到到已有的区块链上。6、挖矿难度每两周调整一次,保证全网每10分钟才能挖出一个区块。
*
对哈希值的要求是比某个特定难度值小,其实也就是前面若干位为0。29比特币的基本原理(重要!)7、每成功出一个区块,打包者将会被奖励12.5个比特币。最早一开始是奖励50个,每210000个区块奖励减半(也即每4年),到2140年就会无币可挖。8、所有输入的BTC减去输出的BTC,就认为是给矿工的手续费。手续费越高的交易,越优先被打包。9、每次出块后,所有挖矿节点会在内存中把上一个区块已经打包的交易剔除掉,把已经收到但尚未打包的交易打包,并开始不停的计算,试图做下个区块。30网络上的细节节点启动后,先找到其他节点(一般有一个稳定节点列表,或者启动时给指定一个节点),使用TCP协议,8333端口通信。每个节点通常和另外8个节点保持联系。31关于比特币节点全节点:存储全部区块,验证交易,网络路由、挖矿(可选)、钱包。矿机节点:仅仅挖矿,计算特定的哈希值。矿池节点:全节点,并且给矿机下发任务。轻钱包节点:仅钱包功能,不存区块。32全球现在有多少全节点33交易Transaction,也就是收发币(转账)。就是将BTC从一个地址转移到另一个地址。每个交易里面的主要信息是:花哪个地址的钱(称为输入,1或n个),付给哪个地址(称为输出,1或n个)付多少签名34BTC和地址有的BTC地址上,存放着上万的BTC,有的则比0.00001还少。(如果已经花了,就没了)一个交易里,发送部分为输入,接收部分为输出。35所有的输入,都是曾经的输出。一个交易数据360100000001186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd734d2804fe65fa357790000000002Alice向Bob支付的一杯咖啡的钱解读这个交易37Alice向Bob支付的一杯咖啡的钱Alice那0.1BTC的来源38UTXO一旦使用一个输出,就必须花完,花不完可以把零钱打给自己。每个尚未使用的输出,就是一个UTXO(UnspentTransactionOutput)。下面这个例子中,把零钱打给自己(也可以是自己的另一个地址),产生两个新的UTXOA,10
B,3
A,739另一个交易:多输入多输出40挖矿奖励:coinbase交易41交易输出交易输出的内容:金额,锁定脚本
想花这份钱,你需要提供地址所对应私钥的签名!
锁定脚本里面主要是公钥Hash、Hash比对、签名验证
也就是验证花钱人是否提供了正确的公钥和签名金额以10^-8个比特币(成为satoshi,聪)为单位。
(也即最小单位为0.00000001BTC)42输出的数据结构43
金额:16e360,即1500000聪,也即0.015比特币
(即)
脚本长度:19(即25字节)
锁定脚本:"OP_DUPOP_HASH160ab68025513c3dbd2f7b92a94e0581f5d50f654e7OP_EQUALVERIFYOP_CHECKSIG"1976a914ab68025513c3dbd2f7b92a94e0581f5d50f654e788ac一个输出:输入交易输入的内容:钱从哪来,解锁脚本(证明钱是你的)钱从哪来,从发送者BTC地址所拥有的UTXO来要提供这个UTXO所在的交易ID该UTXO在那个交易中的输出的顺序号解锁脚本里面有什么?主要是签名和公钥提供签名用来证明自己是私钥的主人提供公钥是因为验证签名时需要(UTXO中不含公钥)44输入的数据结构45ID186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd734d2804fe65fa35779000000008B48ffffffff一个输入:用16进制表示交易ID:186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd734d2804fe65fa35779顺序号:00000000脚本长度:8B(139字节)脚本:
签名长度:48(72字节)
签名:3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24
cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e381301
公钥长度:41(65字节)
公钥:0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc541233637
6789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf序列号:ffffffff46*注意比特币采用小端字节排放,是倒序的。交易的格式47主要是多少个输入多少个输出,以及相应的输入输出交易的HEX字节流0100000001186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd734d2804fe65fa35779000000008B483045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813017b4a10fa336a8d752adfffffffff0201976a914ab68025513c3dbd2f7b92a94e0581f5d50f654e788acd0ef80000000000001976a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac0000000048蓝色表示输入,其中下划线表示交易ID。红色表示输出,其中下划线表示金额。(1500000,8450000)每个节点做的事每个收到交易的比特币节点将会首先验证该交易,只有有效的交易才会在网络中传播,无效的交易将会被废弃。每个节点都会校验每一笔收到的交易:语法、数据结构、字节大小、输入输出值的大小。每个输入引用的UTXO是必须存在的。每个输入所引用的UTXO,如果已经被池中其他交易的输入引用,该交易将被拒绝。每个输入所引用的UTXO,在主分支和交易池中寻找产生该UTXO的交易。如果找不到,将此交易加入孤儿交易池中。每个输入的解锁脚本必须能通过解锁验证。49PaytoPublicKeyhash脚本解锁验证PubKHash其实就是未经base58check的公钥地址50515253区块靠Hash链接起来!
所有块之间都有一个链接的关系。上区块头部的hash值,存放在本区块头部。本区块头部的hash值存在下个区块中。本区块hash值=Hash(本区块头部)
=Hash(上区块hash值+本区块merkle根+本区块随机数+...)
*merkle根来自本区块内的交易54关于块结构每个块=头部+交易数据头部(80个字节):版本号上一个区块的hash值(通过这个链接到上一个区块)merkle根(可简单理解为对所有交易数据的hash)时间戳难度(bits,调节挖矿的难度)随机数Nonce(挖矿时用来穷举的变量)5556Hash=SHA256(SHA256(version+prev_Hash+merkle_root+time+diffculty+random))57区块头结构难度区块挖矿的难度称为"难度位"或简称"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)越小,难度越大。58难度调整在一个完全去中心化的网络中,难度调整是如何做到的呢?每2,016个区块中的所有节点都会调整难度。难度的调整公式是由最新2,016个区块的花费时长与20,160分钟(两周,即这些区块以每10分钟一个速率所期望花费的时长)比较得出的。NewDifficulty=
OldDifficulty*(ActualTimeofLast2016Blocks/20160minutes)解释:如果过去两周来平均产生速率比10分钟快,系数会小于1,新的难度变大。59挖矿通过改变本区块头中的随机数(nonce)以及其他可以改动的地方,要让本区块头中记录的hash值<bits(难度值)。注:还可以通过改变coinbase交易中的extraNonce区域(8字节)来改变区块头中的merkle_root,还可以改变ntime。目的是做出满足要求的hash。60挖矿在Andreas编写MasteringBitcoin这本书的时候,比特币网络某个区块头的哈希值:000000000000004c296e6376db3a241271f43fd3f5de7ba18986e517a243baa7(15/64hex,前60bit)全网具备100PH每秒(petahashespersecond,peta-为10^15)的处理能⼒。1E=1000P1P=1000T1T=1000G1G=1000M1M=1000K6162目前2018年5月7日,第521582块的Hash:00000000000000000024ee89088f2953322c84117702a145740dc88d8e3821ed
(18个0,前72bit为0)全网算力达到了29EH/s63个人挖矿的难度2018年5月,有1PH/S算力的矿工,占全网算力的1/29000,平均每天可以挖到的比特币是1/29000*6(每小时6次)*24(每天24小时)*12.5(每次12.5个)=0.062个比特币。而ATI芯片的显卡7970这样的高端显卡算力也就是600MH/S。即便是个人的算力为1GH/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 聚酰胺生产项目竣工验收报告
- 2025北京兴宾通人力资源管理有限公司面向社会招聘劳务派遣人员拟录用人员笔试历年备考题库附带答案详解
- 2025内蒙古农村信用社校园招聘465人笔试历年典型考题及考点剖析附带答案详解
- 2025兴业银行福建厦门分行秋季校园招聘笔试历年典型考题及考点剖析附带答案详解
- 2025兴业银行宜宾分行招聘(自贡)笔试历年典型考题及考点剖析附带答案详解2套
- 2025佛山农商银行校园招聘笔试历年典型考题及考点剖析附带答案详解2套
- 新能源汽车公共充电桩网络布局项目交通影响评价
- 生物多样性保护工程使用林地可行性报告
- 企业职责边界梳理方案
- 模板安装安全预案
- 2026江苏苏州工业园区管理委员会招聘44人备考题库带答案详解
- 江苏省南京市2025~2026学年八年级英语下册期末考试模拟题(含答案解析)
- 2026年杭州余杭区中泰街道2026年面向社会公开招聘村务工作者8人考试备考试题及答案解析
- 2026年山西建投校园招聘笔试题库
- 2026年安全生产月主题宣贯课件
- GB/T 47543-2026无障碍旅游服务规范旅游饭店
- 工业网络安全防护体系建设方案
- 老年人常见疾病用药注意事项
- 拉萨市2026事业单位联考-综合应用能力B类社会科学专技模拟卷(含答案)
- 非煤矿山企业安全生产管理制度汇编
- 雨课堂学堂在线学堂云《跨文化交际英语(北京理工)》单元测试考核答案
评论
0/150
提交评论