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 协议 ,转载请注明出处!