but this library finds that hex invalid.
If I comment out the deserialisation error (new Error("Incomplete tx deserialization")
)
then btcnodejs produces a transaction similar with the the witness hex of
I'm guessing this is because when Electrum deserialize the transaction it knows that the witness is not that long (yet). Have you any interest (or idea how) to deserialize partially signed electrum transactions?
And here then I can deserialize using btcnodejs and I get the correct witness hex:
Transaction {
version: 1,
inputs:
[ Input {
txid:
'1dcb722c3aafbb69d5c6a49060bf8e08c3b1af9e2033be402c30b32f4640e66c',
out: 0,
scriptSig:
ScriptSig {
body:
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true } },
sequence: Sequence { n: 4294967293 },
witness:
Witness {
data:
[ ByteBuffer {
buffer:
<Buffer ff ff ff b0 ad 01 00 00 00 00 00 02 01 ff 53 ff 04 5f 1c f6 01 22 ac 17 c8 80 00 00 00 f7 0e dd 47 5d 43 56 7f 91 ae 69 7d e2 30 e8 2d 45 ad b4 b6 1c ... >,
offset: 0,
markedOffset: -1,
limit: 102,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
ByteBuffer {
buffer: <Buffer >,
offset: 0,
markedOffset: -1,
limit: 0,
littleEndian: false,
noAssert: true },
... 154 more items ] } } ],
outputs:
[ Output {
amount: 19856,
scriptPubKey:
P2wpkhV0Script {
body:
ByteBuffer {
buffer:
<Buffer 00 14 59 a5 ef e7 f6 e8 0e 33 8d d5 6c 5f 4f 84 9f 84 64 88 8e b2>,
offset: 22,
markedOffset: -1,
limit: 22,
littleEndian: false,
noAssert: false },
type: 'p2wpkh',
pubkeyhash:
ByteBuffer {
buffer:
<Buffer 59 a5 ef e7 f6 e8 0e 33 8d d5 6c 5f 4f 84 9f 84 64 88 8e b2>,
offset: 0,
markedOffset: -1,
limit: 20,
littleEndian: false,
noAssert: true } } },
Output {
amount: 90000,
scriptPubKey:
P2pkhScript {
body:
ByteBuffer {
buffer:
<Buffer 76 a9 14 53 c1 d0 58 22 e2 65 8f d2 e1 ce 0c 88 18 4f d3 23 4b 08 16 88 ac>,
offset: 25,
markedOffset: -1,
limit: 25,
littleEndian: false,
noAssert: false },
type: 'p2pkh',
pubkeyhash:
ByteBuffer {
buffer:
<Buffer 53 c1 d0 58 22 e2 65 8f d2 e1 ce 0c 88 18 4f d3 23 4b 08 16>,
offset: 20,
markedOffset: -1,
limit: 20,
littleEndian: false,
noAssert: true } } } ],
locktime: Locktime { n: 0 },
segwit: true,
txid:
'0193744b17b8555ff32b4047912a4c4733b2cecd8547c411fe9e307927cf9b10' }