def T(value: int, expected: bytes) -> None: expected = unhexlify(expected) expected_int = VarIntSerializer.deserialize(expected) self.assertEqual(value, expected_int) actual = VarIntSerializer.serialize(value) self.assertEqual(actual, expected) roundtrip = VarIntSerializer.deserialize(actual) self.assertEqual(value, roundtrip)
def to_buffer_writer(self) -> StringIO: buffer = StringIO() buffer.write(b2lx((self.version).to_bytes(4, 'big', signed=False))) buffer.write(b2lx(VarIntSerializer.serialize(len(self.inputs)))) for _input in self.inputs: _input.write_buffer(buffer) buffer.write(b2lx(VarIntSerializer.serialize(len(self.outputs)))) for _output in self.outputs: _output.write_buffer(buffer) buffer.write(b2lx((self.gas_limit).to_bytes(4, 'big', signed=False))) buffer.write(b2lx((self.lock_time).to_bytes(4, 'big', signed=True))) return buffer
def write_buffer(self, buf): buf.write(b2lx(struct.pack(">q", self.amount))) buf.write( VarIntSerializer.serialize(len( Web3.toBytes(hexstr=self.pk_script))).hex()) buf.write(self.pk_script) if self.assets: buf.write( VarIntSerializer.serialize( len(Web3.toBytes(hexstr=self.assets))).hex()) buf.write(self.assets) else: buf.write(b'\x00'.hex()) if self.data: buf.write( VarIntSerializer.serialize(len( Web3.toBytes(hexstr=self.data))).hex()) buf.write(self.data) else: buf.write(b'\x00'.hex()) return buf
def write_buffer(self, buf): buf.write(self.prev_tx_id) buf.write(b2lx((self.vout).to_bytes(4, 'big', signed=False))) if self.sig_script: buf.write( VarIntSerializer.serialize( len(Web3.toBytes(hexstr=self.sig_script))).hex()) buf.write(self.sig_script) else: buf.write(b'\x00'.hex()) buf.write(b2lx((self.sequence).to_bytes(4, 'big', signed=False))) return buf
def T(serialized): serialized = unhexlify(serialized) with self.assertRaises(SerializationTruncationError): VarIntSerializer.deserialize(serialized)
def T(serialized, expected_value): serialized = unhexlify(serialized) actual_value = VarIntSerializer.deserialize(serialized) self.assertEqual(actual_value, expected_value)
def T(value, expected): expected = unhexlify(expected) actual = VarIntSerializer.serialize(value) self.assertEqual(actual, expected) roundtrip = VarIntSerializer.deserialize(actual) self.assertEqual(value, roundtrip)
def decode_varint(data): n, tail = VarIntSerializer.deserialize_partial(data) head = data[0: len(data) - len(tail)] return n, len(head)