On Sun, May 26, 2019 at 5:07 PM Aymeric Vitte via bitcoin-dev < bitcoin-dev@lists.linuxfoundation.org> wrote: > I realized recently that my segwit implementation was not correct, > basically some time ago, wrongly reading the specs (and misleaded by > what follows), I thought that scriptsig would go into witness data as it > was, but that's not the case, op_pushdata is replaced by varlen > > Now reading correctly the specs, they seem to be not totally correct, > then the first question is: why OP_0 is 00 in witness data and not 0100? > Does this apply to other op_codes? This does not look logical at all > > op_pushdata allows for unsigned integers and thus it uses the extra byte to specify that. A varint (varlen) is unsigned. 0 and anything <= 252 is one byte length, so 00. > The second question is: why for non segwit inputs there is a 00 length > in segwit data, what is the rational for that? It should just be nothing > since you don't need this to reconciliate things > > Because you don't have the number of witnesses as you have for inputs/outputs. The witness data length is assumed to be the same as the inputs length. And then for non-segwit inputs you need the 00 to specify that it is empty. Hope that helps.