Calo difficulty del 27,94% circa, apparentemente in violazione protocollo?

Howto, documentazione e informazioni su nodi bitcoin. Esperienze, errori, fotografie, shots, problemi. Fanno parte di questa sezione sia hardware che software usati

Moderator: alex2sats

Post Reply
User avatar
massmux
Posts: 103
Joined: 27 Feb 2021, 12:40
Location: Neuchâtel
Contact:

Calo difficulty del 27,94% circa, apparentemente in violazione protocollo?

Post by massmux »

Grazie a chi ha collaborato con questa riflessione sul gruppo telegram https://t.me/BitcoinSecPriv : @rivale27 @dave160488 @Lucayepa

Nel cambio difficulty avvenuto 03.07.21 blocco 689472, cè stato un forte drop della difficulty di attorno al 28% che è visibile sia calcolando il nuovo target sia calcolando direttamente la difficulty

ecco i dati:

Code: Select all

dopo retarget
target decimale: 1877009475827353279654828838027187714710153476809162752
Block target
Data Value
target 0000000000000000001398ce0000000000000000000000000000000000000000
bits 171398ce
diff: 14363025673659.96

prima retarget
target decimale: 1352521844740049480301990665795127943729248621043908608
Block target
Data Value
target 0000000000000000000e1ef90000000000000000000000000000000000000000
bits 170e1ef9
diff: 19932791027262.74
variazione 27,94%

apparentemente questa variazione supera i limiti del protocollo che appaiono essere il 25%, ma in realtà non è cosi. Infatti in realtà essi vanno dal -75% al +300%

si tratta infatti di un fattore 4:

1/4x -> 100*1/4=25% che implica un discostamento in basso del 75% (ovvero -75%)

il codice di riferimento è:

Code: Select all

    // Limit adjustment step
    int64 nActualTimespan = pindexLast->GetBlockTime() - pindexFirst->GetBlockTime();
    printf("  nActualTimespan = %"PRI64d"  before bounds\n", nActualTimespan);
    if (nActualTimespan < nTargetTimespan/4)
        nActualTimespan = nTargetTimespan/4;
    if (nActualTimespan > nTargetTimespan*4)
        nActualTimespan = nTargetTimespan*4;

    // Retarget
    CBigNum bnNew;
    bnNew.SetCompact(pindexLast->nBits);
    bnNew *= nActualTimespan;
    bnNew /= nTargetTimespan;

verifica che nel caso specifico siamo dentro gli estremi previsti dal protocollo per un singolo ciclo di retarget

Code: Select all

>>> before=19932791027262
>>> after=14363025673659
>>> maxdown=before-(before*75/100)
>>> maxdown
4983197756815.5
>>> before/4
4983197756815.5
>>> maxup=before+(before*300/100)
>>> maxup
79731164109048.0
>>> before*4
79731164109048
>>> maxdown<after<maxup
True



Per cui, da una riflessione attenta, la variazione di difficulty è del tutto conforme alle regole di protocollo come ci aspettiamo che sia.
Post Reply