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.