Thanks for the clarification. Yes, I referred to CompactSize using the lingo of https://en.bitcoin.it/wiki/Protocol_documentation I am not sure if it is current concern. Apparently an exception is thrown if non-canonical CompactSize in a transaction s parsed. Is it ensured that transactions are always parsed before computing their hash? Tamas Blummer On Feb 1, 2015, at 11:44 AM, Wladimir wrote: > > On Sun, 1 Feb 2015, Tamas Blummer wrote: > >> I wonder of consequences if var_int is used in its longer than necessary forms (e.g encoding 1 as 0xfd0100 instead of 0x01) > > In serialize.h lingo you are talking about CompactSize, not VarInt. > > CompactSizes indeed have redundancy in their representation, i.e. the same number can be represented as up to four different byte sequences. > > VARINTs have a different format that (AFAIK) isn't used anywhere in the block chain. See WriteVarInt / ReadVarInt. These were designed to not have any redundancy in their representation. > >> This is already of interest if applying size limit to a block, since transaction count is var_int but is not part of the hashed header or the >> merkle tree. > > Are you sure that this is a current concern? Non-canonical CompactSizes are forbidden - in serialize.h this is flagged in ReadCompactSize. > > Wladimir > >