Ğ1-test bloquée : bloc généré mais refusé de part sa taille

Du coup, j’ai mis un point d’arrêt sur cette ligne pour observer le comportement du bloc de code qui ajoute les transactions :

/*****
 * Priority 4: transactions
 */
block.transactions = [];
blockLen = BlockDTO.getLen(block);
if (blockLen < maxLenOfBlock) {
  transactions.forEach((tx:any) => {
    const txDTO = TransactionDTO.fromJSONObject(tx)
    const txLen = txDTO.getLen()
    if (txLen <= CommonConstants.MAXIMUM_LEN_OF_COMPACT_TX && blockLen + txLen <= maxLenOfBlock && tx.version == CommonConstants.TRANSACTION_VERSION) {
      block.transactions.push(txDTO);
    }
    blockLen += txLen;
  });
}

Ce que je note :

blockLen + txLen <= maxLenOfBlock

Or dans le protocole c’est plutôt :

HEAD.size < MAX(500 ; CEIL(1.10 * HEAD.avgBlockSize))

Je traduis : dans le code on vérifie que si l’on ajoute la transaction, la nouvelle taille du bloc sera inférieure ou égale à maxLenOfBlock, la taille maximale du bloc que l’on a calculé (500 en l’occurrence quand je débogue).

Par contre dans le protocole, on vérifie que la taille du bloc est strictement inférieure à la taille maximale du bloc.

Je vous le donne en mille : la taille du bloc généré dans ğtest faisait exactement 500 en tenant compte des transactions.

Voici donc :

Je publie de ce pas une version corrective 1.7.11 et 1.6.30. @jytou, peux-tu gérer les versions ARM + Win stp ?

Merci à @Moul pour sa vigilance ainsi qu’à @matograine pour son générateur qui a révélé ce bug. Sans vous, celui-ci aurait éclaté plus tard et possiblement en prod, sur la Ğ1.

7 Likes