def serialize(self): return b''.join( (pack_le_int32(self.version), pack_varint(len(self.inputs)), b''.join(tx_in.serialize() for tx_in in self.inputs), pack_varint(len(self.outputs)), b''.join(tx_out.serialize() for tx_out in self.outputs), pack_le_uint32(self.locktime)))
def serialize(self): nLocktime = pack_le_uint32(self.locktime) txins = (pack_varint(len(self.inputs)) + b''.join(tx_in.serialize() for tx_in in self.inputs)) txouts = (pack_varint(len(self.outputs)) + b''.join(tx_out.serialize() for tx_out in self.outputs)) if self.tx_type: uVersion = pack_le_uint16(self.version) uTxType = pack_le_uint16(self.tx_type) vExtra = self._serialize_extra_payload() return uVersion + uTxType + txins + txouts + nLocktime + vExtra else: nVersion = pack_le_int32(self.version) return nVersion + txins + txouts + nLocktime
async def make_raw_block(self, b): '''Construct a raw block''' header = await self.make_raw_header(b) transactions = [] if b.get('height') > 0: transactions = await self.getrawtransactions(b.get('tx'), False) raw_block = header num_txs = len(transactions) if num_txs > 0: raw_block += pack_varint(num_txs) raw_block += b''.join(transactions) else: raw_block += b'\x00' return raw_block
def test_pack_varint(): tests = list(range(0, 258)) tests.extend([1024, 65535, 65536, 4294967295, 4294967296, 8294967296]) for n in tests: data = util.pack_varint(n) deser = tx.Deserializer(data) assert deser._read_varint() == n import struct with pytest.raises(struct.error): util.pack_varint(-1) assert util.pack_varint(0) == b'\0' assert util.pack_varint(5) == b'\5' assert util.pack_varint(252) == b'\xfc' assert util.pack_varint(253) == b'\xfd\xfd\0' assert util.pack_varint(65535) == b'\xfd\xff\xff' assert util.pack_varint(65536) == b'\xfe\0\0\1\0' assert util.pack_varint(2**32-1) == b'\xfe\xff\xff\xff\xff' assert util.pack_varint(2**32) == b'\xff\0\0\0\0\1\0\0\0' assert util.pack_varint(2**64-1) \ == b'\xff\xff\xff\xff\xff\xff\xff\xff\xff'