ssc币(SSC币挖矿微信群)
如今比特币的数量越来越少且挖掘难度不断上升
最近很多朋友问我如何理解比特币的“全网难”。大家都在纠结这个东西是什么,有什么意义,怎么调整。本文将试图澄清这些问题。
0.先决条件
从区块链、比特币和比特币挖矿的一些知识开始。
1.块状头结构与采矿
比特币头部共80字节。
struct header _ structure {//BYTES NAME
uint 32 _ t n version;// 4版本
uint 8 _ t hashPrevBlock出块时间(单位:秒)≈难度_当前* 2 32/全网计算能力
;// 32前一个块头hash
uint 8 _ t hashMerkleRoot[32];//32 merkle root hash
uint 32 _ t nTime;//4 time
uint 32 _ t nBits;//4 target
uint 32 _ t nNonce;//4 nonce
};
比特币区块头结构
简短地说
2.目标值(目标)
块报头中的比特字段标识散列应该小于或等于当前块报头的目标值。注意,块头的SHA256结果有256位,而位只有32位(4字节)。Bits通过以下操作获取目标。以277316区块为例
位值(十进制),以系数/指数格式存储,十六进制的前2位为幂,后6位为系数。在该块中,0x19是幂()和系数(),计算公式为
目标=系数* 256^(exponent–3)
所以这个块的目标值是
target = 0x 03 a30c * 256^(0x19-3)
= 238348 * 256^22
= 22829202948393929850749706076701368331072452018388575715328
十六进制的
也就是说,高度为277316的有效块头信息的哈希值必须小于或等于该目标值。块高度277136的哈希值实际上是
3.难度()
从中本聪创世区块可以看出比特币挖矿被淘汰。比特为十进制时,难度()为1(注意块头没有存储字段)。
根据Bits计算的目标是* 256 26,也就是00。也就是说,为了构造下一个合法的块,需要对块头连续进行SHA256运算比特币挖掘和消除,直到得到一个哈希结果找到块头,前32位的值为0(小于目标)。
SHA256运算的结果被认为是一致的随机序列。可以说SHA256结果中某个值为0或1的概率是一样的。所以做一个计算满足上面的条件(前32位的值都是< @0)就是1/(2 ^ 32),也就是说平均需要2 ^ 32次运算才能找到这个值。
为了便于理解,我们定义了为了使块头的SHA256结果小于某个目标所要尝试的平均计算次数,这就是难度(),1≈2 ^ 32次=次≈4.2 * 10 ^ 9次≈ 4G运算。
例如,在最近几天的块501509中,位值为(十进制),目标为* 256 21。创造块的目标是* 256 26,难度是1,那么获得块501509的难度是
(0x 00ffff * 256 ^ 26)/(0x 009645 * 256 ^ 21)
= 65535/38469 *(256^5)
= 1.703579505575918 * 2^40
= 1873105475221.611
≈1.87 * 10^12
也就是1.87T (1T = 10^12)
501509号方块的高度
综上所述,可以得出公式。
难度_当前=目标_创造区块/目标_当前
其中块是固定值00,根据当前块头中的比特字段计算。
同时,可以得出另一个结论
[32]
目前比特币的全网难度为1.93T,全网计算能力为15.32EH/s(1秒计算15.32E hash),计算出的输出块时间约为。
1.93t * 2 32/15.32 eh/s
= 1.93 * 10 12 * 4.295 * 10 9/15.32 * 10 18
= 8289.35 * 10 18/15.35
摘要
4.难度调整()
如前所述,块头目标的哈希值决定了难度(),进而影响比特币块释放的时间。按照设计,比特币要保证每10分钟的平均块释放速度,这是新比特币发行和交易完成的基础,需要长期保持相对稳定。
机器不断更新淘汰,矿工不断加入流失,导致全网计算能力实时变化,但全网却在不断进步。为了保证比特币的平均阻断时间稳定在十分钟左右,需要定期调整难度。
难度调整逻辑写在代码中,在每个完整节点中独立自动发生。每2016块,网络中的所有节点都会调整难度。调整公式是通过将生成最新的2016个块所需的时间与20160分钟(两个星期,即这些块以10分钟的速度生成所需的时间)进行比较来计算的。难度会根据实际时长与预期时长的比例进行调整(更难或更容易)。简单来说,如果网络发现阻断速度快于10分钟,就会增加难度。如果发现慢于10分钟,请降低难度。
这个逻辑可以简单地表达为ssc币
难度_新=难度_原始* (20,160分钟/生成2,016块实际花费的时间)
从代码中可以看出,为了防止难度变化太快,如果每个周期调整幅度超过4次,就只调整4次(难度调整为4次)或1 /4。
unsigned int CalculateNextWorkRequired(const CBlockIndex* pindexLast, int64_t nFirstBlockTime, const Consensus::Paramsamp; params)
{
if (params.fPowNoRetargeting)
return pindexLast-gt;nBits;
// Limit adjustment step
int64_t nActualTimespan = pindexLast-gt;GetBlockTime() - nFirstBlockTime;
if (nActualTimespan lt; params.nPowTargetTimespan/4) // params.nPowTargetTimespan*4) // lt;==== 看这里
nActualTimespan = params.nPowTargetTimespan*4;
// Retarget
unsigned int calculatenetwork required(const CBlockIndex * pindexLast,int64_t nFirstBlockTime,const Consensus::Params amp;params)
{
if(params . fpownoretaming)
return pindex last- gt;nBits
//限制调整步长
int 64 _ t nactual timespan = pindexLast- gt;get block time()-nFirstBlockTime;
if(nActualTimespan lt;params.nPowTargetTimespan/4)//params . npowtargettimespan * 4)// lt;= = = =看这里
nactual timespan = params . npowtargettimespan * 4;
//重定目标
const arith_uint256 bnPowLimit = UintToArith256(params.powLimit);
arith_uint256 bnNew;
bnNew.SetCompact(pindexLast-gt;nBits);
bnNew *= nActualTimespan;
bnNew /= params.nPowTargetTimespan;
if (bnNew gt; bnPowLimit)
bnNew = bnPowLimit;
return bnNew.GetCompact();
}
再次请注意,难度调整是通过调整块头中的Bits字段来实现的。块头不直接存储全网难度()字段。
5.摘要
至此,相信你已经知道了文章开头问题的答案。简单来说就是比特币网络的难度()
6.参考
Ethos是一个简单易用的矿业系统,为矿业提供教程软件和矿机评估及交易信息,以数字货币比较计算各种矿业利润,介绍矿业工具,矿业网站最新消息。http://www.ethospool.com/
本文来自网络,不代表币圈之家立场,如有侵权请联系我们删除,转载请注明出处:https://www.110btc.com/baike/14712.html