主页 > 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.拒绝服务攻击