什么是自私挖矿?
简单一句话来说,矿工或矿池挖到一个块后不发布,继续挖,挖到接下来的一个块后在发布。
假设有一个矿池A, 它是自私的(Selfish),和剩余的其他矿池B, 这些是诚实的(Honest),
当A矿池挖到一个区块block,它私藏并不向B矿池广播,并开始挖下一个,此时:
1 若B矿池先挖到,则A矿池也立即广播,拼人品看哪个最终成为孤立区块
2 若A靠先机先挖到,则广播所挖的两个block。
对于矿池A来说,在达到一定的算力,他这样做,可以挖更多的矿。
NC-MAX协议是怎样解决自私挖矿的?
在NC-MAX协议中,将交易分解为两个步骤: propose(提案)和 commit(提交)。
在NC-MAX的协议中,一个区块包含以下几部分:
名称 | 描述 |
---|---|
header | 区块头,包含区块元数据 |
commitment zone | 提交区 |
proposal zone |
txpid 提案区 |
uncle headers | 叔块头 |
uncles’ proposal zones |
txpid 叔块提案区 |
一笔交易发生了,txid
发布到区块或叔块中,先打包到提案区。如果交易在提案后的几个的周期中出现在 提交区 中,则打包该交易。这样节点可以在接收这些交易之前已经开始将区块传送到其他节点。协议规定每个矿工只允许打包前面h-m到h-n之间提案区以及叔块提案区的交易。
为了确保足够的已经同步完的交易可以打包,消除区块广播带来的延时,以及降低孤块率,NC-MAX协议在计算上一个时期的调整后的哈希率估计时包含所有块而不是仅主链, ,其确定每个奖励单元的下一个时期所需的计算工作量。