区块链和比特币

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1-9
1-9 4
可变integer
array 可变integer array uint32_t
输入单数量
输入单列表 输出单数量 输出单列表 锁定时间
• Input结构
名称 Previous tx hash Previous Output Index Input Script Length Input Script/scriptSig Sequence Number 字节 32 数据类型 char[32] 描述 引用前一交易 的hash 被引用交易的 Output的索引 输入单列表 输入脚本
• Output结构
名称 Amount/Value Input Script Length 字节 8 1-9 数据类型 uint32_t uint32_t 描述 比特币数量 输出脚本长 度
4 1-9 4
uint32_t 可变integer uint32_t
Output Script/scriptPubKey
此时的难度值为
区块链和比特币(15)-最长链规则
• 累计了最多难度的区块链,也是包含最多区块的那个链称为主链,每一个节点总是选择试图延长主链 • 当有两名矿工在几乎在相同的时间内,各自都算得了POW解,便立即传播自己的“获胜” 区块到网络中,一些节点首先收到#3458A, 一些节点首先收到#3458B,这两个候选区块(通 常这两个候选区块会包含几乎相同的交易)都是主链的延伸,分叉就会产生,这时分叉出有竞 争关系的两条链,如图:
• 区块头(Blockheader)结构
名称 Version PreBlockHeaderHash MerkleRootHash 字节 4 32 32 数据类型 int32_t char[32] char[32] 描述 版本号表示所遵循的规则 SHA256(SHA256())前一块头 部的哈希 这块中所有交易的哈希
-
-
输出脚本
区块链和比特币(8)-脚本
Hash: 9c50cee8d50e273100987bb12ec46208cb04a1d5b68c9bea8 4fd4a04854b5eb1 输入交易: 前导输入的Hash: 437b95ae15f87c7a8ab4f51db5d3c877b972ef92f26fbc6d3c4 663d1bc750149 输入脚本 scriptSig: 3045022100efe12e2584bbd346bccfe67fd50a54191e4f45f94 5e3853658284358d9c062ad02200121e00b6297c0874650d0 0b786971f5b4601e32b3f81afa9f9f8108e93c752201 038b29d4fbbd12619d45c84c83cb4330337ab1b1a3737250f2 9cec679d7551148a 输出交易: 转账值: 0.05010000 btc 输出脚本 scriptPubKey: OP_DUP OP_HASH160 be10f0a78f5ac63e8746f7f2e62a5663eed05788 OP_EQUALVERIFY OP_CHECKSIG
• 记账被证实后,其余节点复制记账结果 • 每产生2016个区块之后,会根据实际产生的区块和目标区块数做对比,进行难度调整
区块链和比特币(13)-工作量证明
区块链和比特币(14)-工作量证明
• 难度计算公式:difficulty = difficulty_1_target / current_target,目标(target)是一个256位长的数值。 有许多不同测量难度的方法,得到的difficulty_1_target可能不同。传统地,它表示一个HASH值,前32位为 0,后续部分为1(称之为:矿池难度或pdiff),比特币协议把目标HASH表示成一个固定精度的自定义浮点类型, 因而,比特币客户端用该值来估计难度(称之为:bdiff)。 难度经常被存贮在区块中,每个块存贮一个十六制的目标HASH的压缩表达式(称之为:Bits),目标HASH可以 以预先定义的公式计算出来。例如:如果区块中压缩的目标HASH为0x1b0404cb,那十六进制的目标HASH如 下所示
• 收到#3458A和#3458B的节点,各自开始进行计算POW解,总会有一方抢先发现,比如收到#3458B 的节点,成功打包形成了#3459区块,并向全网广播后,网络中的节点会把#3458B#3459B的链作为 最长链。BTC规定,交易被成功打包之后,还需要6个以上的区块延伸,才算成功(确认为主链)
区块链和比特币(5)-UTXO
• 和传统account based支付系统不同, 比特币系统中使用区块来记录交易往来, 本质为一种UXTO(Unspent Transaction Output)方案、 • 区块账本记录的是交易(日志),而不是 货币;每一笔交易都要消耗(spend)N笔 输入,产生N笔输出;但输入总量和输出 总量需要保持相等
• 挖矿
• 分叉 • 扩展性 • 安全性 • 发展方向
区块链和比特币(1)-概述
• 去中心化的账本,一种使用密码学的方法相关联产生的数据块 • 匿名性+专属所有权
• 难以篡改
• 具有自治的能力
区块链和比特币(2)-起源
• 1976年,Bailey W. Diffie和Martin E. Hellman《密码学的新方向》发表(公钥加密理论), 次年RSA算法诞生 • 1980年,Merkle Ralf提出Merkle-Tree数据结构和算法(区块中交易校验的手段) • 1982年,Leslie Lamport等人提出拜占庭将军问题(共识的基础)
Time
Bits Nonce
4
4 4
uint32_t
uint32_t uint32_t
Unix时间戳
难度系数 随机数
区块链和比特币(7)-区块
• Transactions 结构
名称 Version 字节 4 数据类型 int32_t 描述 交易版本
Inputs Counter
Inputs Detail Outputs Counter Outputs Detail Lock Time
区块链和比特币(10)-地址生成
• BTC地址生成过程 ECDSA Public Key
RIPE160 MD(SHA256(Public Key)) RIPE160 MD(SHA256(version +Public Key hash))
+
Version Public Key Hash Check Sum
区块链和比特币(6)-区块
• 完整的区块结构
名称 Magic NO Blocksize Blockheader Transaction counter Transactions 字节 4 4 80 1-9 不定 字段 魔数 区块大小 区块头 交易计数器 交易 说明 表征网络协议,0xD9B4BEF9表示主网,0xDAB5BFFA表示testnet 用字节表示的该字段之后的区块大小 组成区块头的几个字段 该区块包含的交易数量,包含coinbase交易 记录在区块里的交易信息,使用原生的交易信息格式,并且交易在数据流中的位置必须 与Merkle树的叶子节点顺序一致
区块链和比特币(16)-挖矿
• SETGENERATE协议:CPU时代挖矿时代的协议。构造区块,初始化区块头各个字段,计算Hash并验 证区块,不合格则nNonce 自增,再计算并验证,如此往复。在CPU挖矿时代,nNonce提供的4字节 搜索空间完全够用(4字节即4G种可能,单核CPU运算SHA256D算力一般是2M左右),一般情况nNonce 只遍历完2个字节就返回去重构块。
区块链和比特币(18)-挖矿
• Getblocktemplate协议让矿工自行构造区块。如此 一来,节点和挖矿完全分离。对于getwork来说,区 块链是黑暗的,getwork对区块链一无所知,其只知 道修改data字段的4个字节。对于getblocktemplate 来说,整个区块链是透明的,getblocktemplate掌 握区块链上与挖矿有关的所有信息,包括待确认交易 池。 • 矿池通过getblocktemplate协议与网络节点交互, 以获得区块链的最新信息,通过stratum协议与矿工 交互。此外,为了让之前用getwork协议挖矿的软件 也可以连接到矿池挖矿,矿池一般也支持getwork协 议,通过阶层挖矿代理机制实现(Stratum mining proxy)。stratum与矿池采用TCP方式通信,数据使 用JSON封装格式。
区块链和比特币(17)-挖矿
• Getwork协议代表了GPU挖矿时代,需求主要源于 挖矿程序与节点客户端分离,区块链数据与挖矿部件 分离。使用客户端节点直接挖矿,需要同步完整区块 链,数据和程序紧密结合,也就是说,如果有多台 电脑进行挖矿,需要每台电脑都单独同步一份区块链 数据。这其实没有必要,对于矿工来说,最少只需 要一个完整节点就可以。
Base58 Encode BitCoin Address
区块链和比特币(11)-Merkel Tree
区块链和比特币(12)-工作量证明
• 区块的Hash=SHA256(SHA256(区块头内容)) • 一段时间内(平均10分钟左右,具体时间会与记账难度相互影响),只有1个节点可以记账成功
• 通过不断计算寻找合适的区块HASH使之小于给定的目标HASH(目标HASH值的压缩格式是一个特殊 的浮点编码类型,首字节是指数(仅使用了5个最低位)表示右移的位数,后3个字节是有效值,该目标 HASH能表示256位的数值), 通过竞争获得唯一记账权
区块链技术知识分享
2018年6月9日
Agenda
• 区块链和比特币 • 以太坊(Ethereum)及智能合约介绍
• 超级账本(Hyperledger)项目和fabric
区块链和比特币
• 概述 • 起源 • 工作量证明 • 最长链规则
• BTC诞生
• BTC交易原理 • UXTO • 区块 • 脚本 • 地址生成 • Merkel Tree
• 1985年,椭圆曲线加密(ECC)算法诞生(加密的基础)
• 1990年,David Chaum创立Digital Cash,第一种中心化不可追踪的加密数字现金系统 • 1992年,Scott Vanstone等人提出椭圆曲线加密数字签名算法(ECDSA) • 1997年,Adam Back发明Hashcash技术,为一种工作量证明算法(Proof of Work,POW), 此算法依赖哈希函数的不可逆特性,达到容易被验证,但很难被破解的特性 • 1998年,戴伟发布匿名分布式电子现金系统B-money,Nick Szabo提出去 中心化货币Bit Gold的理论 • 2005年,Hal Finney提出可重复使用的工作量证明机制(RPOW),结合B-money 与Adam Back提出的Hashcash算法进行数字货币试验
区块链和比特币(9)-脚本
• P2PKH例子
Βιβλιοθήκη Baidu
交易b中有一个『输入交易』引用了交易a的『输出交易』,它们的脚本是一对题与解: 题:交易a的『输出脚本』,若干个脚本指令和转账接收方的『公钥哈希』 OP_DUP OP_HASH160 be10f0a78f5ac63e8746f7f2e62a5663eed05788 OP_EQUALVERIFY OP_CHECKSIG 解:交易b的『输入脚本』,包含两个元素,交易发起方的『签名』和『公钥』(sig & pubkey) 3046022100ba1427639c9f67f2ca1088d0140318a98cb1e84f604dc90ae00ed7a5f9c61cab02210094233d018f2f014a5864c9e0795f13735780cafd51b950f503534a 03a63ab88e75116b313c6de384496328df2656156b8ac48c75505cd20a4890f5ab
区块链和比特币(3)-BTC诞生
• 2008年11月1日,一个署名中本聪(Satoshi Nakamoto)的人在一个小型 密码学讨论组中发表了论文《比特币:一种点对点的电子现金系统》 • 2009年1月3日,中本聪在位于芬兰赫尔辛基的一个小型服务器上挖出了第 一笔50个比特币(创世区块)
区块链和比特币(4)-BTC交易原理
相关文档
最新文档