主页 > imtoken官方地址 > 通过源码学习比特币原理——挖掘构建区块链
通过源码学习比特币原理——挖掘构建区块链
imtoken官方地址 2023-01-17 14:27:10
挖矿的过程就是出块的过程,也是比特币“发行”的过程。
1.矿工节点通过蛮力碰撞的方法找到满足条件的hash值(详见下文),即挖矿成功,从而获得比特币奖励
2.矿工奖励分为两部分:币基交易奖励+新创建区块的交易手续费总和
以下是计算矿工奖励的比特币源码:
int64_t GetBlockValue(int nHeight, int64_t nFees) { *// nFees = Sum(vin[i]) - Sum (vout[i]) 区块包含的交易费用总和*
int64_t nSubsidy = 50 * COIN; * //COIN = 100000000 (一亿聪),初始奖励50比特币*
int nHalving = nHeight / 210000; * //nHeight:区块高度*
if (nHalving >= 64)
return nFees;
nSubsidy >>= nHalving; *//每210000个区块奖励减半(右移位操作 提高运算效率)*
return nSubsidy + nFees;
}
3. 交易发起者创建交易后,将其广播给相邻节点。每个节点独立验证收到的交易
以下是比特币源码相关函数
CheckInputs();
CheckTransaction();
AcceptToMemoryPool();
符合规则的事务被添加到内存事务池中并广播到其他节点
4. 挖矿节点按优先级对内存交易池中的交易进行排序。由于区块大小有限比特币生成原理,低优先级的交易无法打包成区块
交易优先级计算:
优先级 = sum (vin[i].value * vin[i] 年龄)/sizeof(Tx)
- vin[i].value: 交易输入金额 以聪为单位;
- vin[i] age : 交易输入所指向的utxo所在的区块的深度 (距离最新区块高度的距离 每天增大144)
5.创币交易:上面提到的给矿工的币基交易奖励,作为每个新生成区块的第一笔交易
6. 挖矿算法:通过不断改变nNonce值,SHA256的哈希值(SHA256(区块头))小于等于目标哈希值nhashTarget
详情请参考另一篇博客:
7.区块链分叉
8. 51% 攻击:
1Eh == 1000Ph;
1Ph == 1000Th;
1Th == 1000Gh;
1Gh == 1000Mh;
1Mh==1000Kh
(h:hash/sha256)
9.双花攻击
当一笔交易A加入区块并被确认后,买家通过自己控制的超高算力矿池生成一笔交易B,并将交易A的utxo发送到自己的钱包比特币生成原理,同时删除time 交易 A,利用其强大的计算能力生成分叉块,并使其分叉成为主链。之前交易A所在的区块变成了分叉……
10.拒绝服务攻击