chaintope / tapyrus-core

Tapyrus Core
MIT License
46 stars 17 forks source link

Fix hash serialized calculation #293

Closed Naviabheeman closed 7 months ago

Naviabheeman commented 8 months ago

Fix issue #289.

This bug is fixed by using a parenthesis around 'second.fCoinBase' expression like in TxInUndoSerializer. It does not matter whether we use * 2 or << 1.

expression output
VARINT(outputs.begin()->second.nHeight * 2 + outputs.begin()->second.fCoinBase ? 1u : 0u); 01
VARINT(outputs.begin()->second.nHeight * 2 + (outputs.begin()->second.fCoinBase ? 1u : 0u)); 856b
VARINT((outputs.begin()->second.nHeight << 1) + (outputs.begin()->second.fCoinBase ? 1u : 0u)); 856b
VARINT((outputs.begin()->second.nHeight << 1) + outputs.begin()->second.fCoinBase ? 1u : 0u); 01
uint32_t(outputs.begin()->second.nHeight * 2 + outputs.begin()->second.fCoinBase ? 1u : 0u); 31
uint32_t(outputs.begin()->second.nHeight * 2 + (outputs.begin()->second.fCoinBase ? 1u : 0u)); 383735