Block Chain Tutorial

本文最后更新于:2 年前

TODO 待完善

区块链概念

女巫攻击(Sybil Attack)
拜占庭将军问题
扩容
分叉
51%算力攻击
Merkle Tree/MerkleRoot
双重支付: 通过共识算法来解决双重支付问题, 当一笔交易成功后(大家对这笔交易的结果达成了共识, 想重复交易就会被拒绝)
挖矿
UTXO(Unspent Transaction output): 未被使用的交易输出

数字签名: 用来保证交易出自本人, 防止中间人篡改

区块

  • 区块头 = 80字节 = 4字节版本 + 32字节上一个区块的散列值 + 32字节的Merkle Root Hash + 4字节时间戳(当前时间) + 4字节当前难度值 + 4字节的随机数组成

  • 交易列表

确认

“确认”是指, 当一个区块产生之后, 它不是立即可信的, 网络上总是相信最长的区块链, 当一条交易记录被打包进一个区块之后, 就有了一个确认, 而这个区块所在的链后面被再加入一个区块, 就是第二个确认, 如此下去, 一个交易有了6个确认, 我们就认为这个交易已经确定了, 会被永远记录在区块链中. 为什么是6个确认呢?因为每一个确认就是一个挖矿过程, 都需要提供非常严格的计算, 因此, 这6个区块被同一个旷工创建的可能性微乎其微(可以说是不可能, 动用了全网算力计算每10分钟算出来的一个区块仅凭一个矿工), 因此矿工伪造交易也基本不可能

问题

Q: 交易数未满区块可容纳最大交易数时, merkleroot 咋计算? 区块的hash咋计算?
Q2: 创世区块, 前面几个区块, 交易量没有达到4000比的时候, 每10分钟产生一个区块, 那交易量是?

A: 挖矿之前, 新区块会包含哪些交易就已经确定好了的.
交易数量 大于 4000 则根据手续费排序前4000比交易
交易数量 小于 4000 则直接打包 (根据btc.com前期的区块内容推测)

Q: 新的交易广播之后如何存放在各个节点下等待打包? 这个过程是怎样的

Q: 比特币钱包支付界面

一些数字

比特币恒定额度为2100万, 它的的发行机制为:
210000 * 50(10500000) + 210000 * 25(5250000) + 210000 * 12.5 (2625000) = 18375000

BTC最高点总市值
2100万 * 2万美元 = 420亿美元

每日最多交易数为=7 * 60 * 60 * 24 = 604, 800

两周生产区块 = 24 * 60 / 10 * 14 = 2016

技术实现

区块结构

区块头

交易

Block weight: SegWit激活后(2017.8.24?), 新出来的概念

交易被确认 = 打包/广播次数吗?

搭建自己的私有链

bitcoinj


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!