programmingbitcoin icon indicating copy to clipboard operation
programmingbitcoin copied to clipboard

ch06: Script raw_serialize method missing '=' in the condition

Open inauman opened this issue 4 years ago • 2 comments

 1    def raw_serialize(self):
 2        result = b''
 3        for cmd in self.cmds:
 4            if type(cmd) == int:  # <1>
 5                result += int_to_little_endian(cmd, 1)
 6            else:
 7                length = len(cmd)
 8                if length < 75:  # <2>
 9                    result += int_to_little_endian(length, 1)
10                elif length > 75 and length < 0x100:  # <3>
11                   result += int_to_little_endian(76, 1)
12                    result += int_to_little_endian(length, 1)
13                elif length >= 0x100 and length <= 520:  # <4>
14                    result += int_to_little_endian(77, 1)
15                    result += int_to_little_endian(length, 2)
16                else:  # <5>
17                    raise ValueError('too long an cmd')
18                result += cmd
19        return result

According to ch06 in the book, "For a number between 1 and 75 inclusive, we know the next n bytes are an element". So, the condition in line 8 in the above code of raw_serialize(self) function should have an equality test as well. I think it should be:

 if length <= 75:

I am still learning bitcoin programming so please let me know if I am not thinking correctly. I would be happy to do a PR to fix this minor issue.

inauman avatar Aug 10 '21 18:08 inauman

Hi, I agree, it's a typo. Btw the parse operation correctly has equality sign.

MrRifRaf avatar Aug 27 '23 19:08 MrRifRaf