4.比特币的区块 Coinbase交易中没有签名去保证输出不被更改,有问题吗? 节点A发布一个“合法”的区块,其中的 coinbase交易的输出是A的一个地址,节点 B是否能够修改 coinbase交易的地址为B的地址,从而获得相应的比特币? :[ prev out ": f "hash":"eoe..8089", n":4294967295 coinbase " value":"25.03371419”, scriptPubKey ":OPDUP OPHASH160 》
◼ Coinbase交易中没有签名去保证输出不被更改,有问题吗? ⚫ 节点A发布一个“合法”的区块,其中的coinbase交易的输出是A的一个地址,节点 B是否能够修改coinbase交易的地址为B的地址,从而获得相应的比特币? 13 4. 比特币的区块
5.比特币挖矿( mining) 交易是由用户发起的,区块是由谁产生的? ■在比特币系统中,没有中心机构负责产生区块及“造币”,而是有所有的参与节点进行 竞争,竞争的胜利者获得“产生区块”(或称为记账)的权利,把一批交易记入区块链 (即账本),每个新建区块中的 coinbase交易相当于“造币”,凭空生成出比特币。由 于 coinbase中的输出(区块奖励)由产生该区块的节点指定,这就鼓励了节点积极参与 竞争、争取记账权利。 ■这个竞争通过“挖矿”实现 有一个系统级的参数:挖矿难度系数。该参数指明的是Hash值的开头有多少个零, 或者把Hash值看作数字的话,该参数指明一个目标值 target,挖矿的目标是找到 Hash值小于该目标值的区块 如何找?:对区块头中的 nonce值进行修改并计算相应的区块头的Hash值,如果 Hash值小于 target,则说明挖到了一个有效(可以成为区块链上)的区块,可以用 这个区块区参与竞争记账 字段 描述 preMousblockhash 32字节前一区块Hash值 merkleroot 32字节交易 Merkle Tree根节点的Hash值 difficulty 4字节挖矿的难度系数 nce 4字节 挖矿挖到的临时随机数
◼ 交易是由用户发起的,区块是由谁产生的? ◼ 在比特币系统中,没有中心机构负责产生区块及“造币”,而是有所有的参与节点进行 竞争,竞争的胜利者获得“产生区块”(或称为记账)的权利,把一批交易记入区块链 (即账本),每个新建区块中的coinbase交易相当于“造币”,凭空生成出比特币。由 于coinbase中的输出(区块奖励)由产生该区块的节点指定,这就鼓励了节点积极参与 竞争、争取记账权利。 ◼ 这个竞争通过“挖矿”实现: ⚫ 有一个系统级的参数:挖矿难度系数。该参数指明的是Hash值的开头有多少个零, 或者把Hash值看作数字的话,该参数指明一个目标值target,挖矿的目标是找到 Hash值小于该目标值的区块。 ⚫ 如何找?:对区块头中的nonce值进行修改并计算相应的区块头的Hash值,如果 Hash值小于target,则说明挖到了一个有效(可以成为区块链上)的区块,可以用 这个区块区参与竞争记账 14 字段 大小 描述 previousblockhash 32字节 前一区块Hash值 merkleroot 32字节 交易Merkle Tree根节点的Hash值 difficulty 4字节 挖矿的难度系数 nonce 4字节 挖矿挖到的临时随机数 5. 比特币挖矿(mining)
5.比特币挖矿( mining) 挖矿: 有一个系统级的参数:挖矿难度系数。该参数指明的是Hash值的开头有多少个零 或者把Hash值看作数字的话,该参数指明一个目标值 target,挖矿的目标是找到 Hash值小于该目标值的区块 如何找?:对区块头中的 nonce值进行修改并计算相应的区块头的Hash值,如果 Hash值小于 target,,则说明挖到了一个有效(可以成为区块链上)的区块,可以用 这个区块区参与竞争记账。 Nonce的232个值都试过来,也没有找到合格的区块怎么办?:修改 coinbase交易中 的随机数,影响 merkle tree根节点的Hash值,然后重新对 nonce的值搜索 prev, pre mrkl root: H mrkl root: (H nonce: 0x7a83 nce:0x0000 hash: 0x0000 bash All changed H()H(1) H)H1) H() H( J nonbase
◼ 挖矿: ⚫ 有一个系统级的参数:挖矿难度系数。该参数指明的是Hash值的开头有多少个零, 或者把Hash值看作数字的话,该参数指明一个目标值target,挖矿的目标是找到 Hash值小于该目标值的区块。 ⚫ 如何找?:对区块头中的nonce值进行修改并计算相应的区块头的Hash值,如果 Hash值小于target,则说明挖到了一个有效(可以成为区块链上)的区块,可以用 这个区块区参与竞争记账。 ⚫ Nonce的2 32个值都试过来,也没有找到合格的区块怎么办?:修改coinbase交易中 的随机数,影响merkle tree 根节点的Hash值,然后重新对nonce的值搜索 15 5. 比特币挖矿(mining)
5.比特币挖矿( mining) 挖矿就是进行Hash运算、寻找合适的 nonce值使区块的Hash值小于目 标值。 TARGET =(65535 < 208)/ DIFFICULTY; coinbase nonce =0 while(1)t header makeBlockHeader (transactions, coinbase_nonce for(header_nonce =0; header_nonce<(1 < 32); header nonce++] if(SHA256SHA256(makeBlock(header header_nonce)))< TARGET break; //block found coinbase nonce++; CPU挖矿的伪代码
◼ 挖矿就是进行Hash运算、寻找合适的nonce值使区块的Hash值小于目 标值。 16 CPU挖矿的伪代码 5. 比特币挖矿(mining)
5.比特币挖矿( mining) 挖矿就是进行Hash运算、寻找合适的 nonce值使区块 的Hash值小于目标值。 挖矿:消耗电和硬件资源,生产比特币(区块奖励) ■挖矿“胜利者”的产生:投入计算资源多、运气好的 节点 投入资源越多,越可能称为胜利者(可以进行更快更多次的Hash 运算尝试) “运气”(随机性)保证了不全依赖于资源的投入多少来决定,保 证了去中心化的特征 口投入200计算能力的节点一定比投入100计算能力的节点先找到 合格的区块吗?
◼ 挖矿就是进行Hash运算、寻找合适的nonce值使区块 的Hash值小于目标值。 ⚫ 挖矿:消耗电和硬件资源,生产比特币(区块奖励) ◼ 挖矿“胜利者”的产生:投入计算资源多、运气好的 节点 ⚫ 投入资源越多,越可能称为胜利者(可以进行更快更多次的Hash 运算尝试) ⚫ “运气”(随机性)保证了不全依赖于资源的投入多少来决定,保 证了去中心化的特征 ❑ 投入200计算能力的节点一定比投入100计算能力的节点先找到 合格的区块吗? 17 5. 比特币挖矿(mining)