From be6448b74faf1e8b930ddabb5693280d7c89c5de Mon Sep 17 00:00:00 2001 From: Victor Shyba Date: Thu, 17 Jan 2019 23:37:37 -0300 Subject: [PATCH] fix str/bytes confusion from resolve/claimdict on certificate_id --- lbrynet/extras/wallet/resolve.py | 19 ++++++------------- lbrynet/schema/claim.py | 6 +++--- tests/unit/schema/test_lbryschema.py | 2 +- 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/lbrynet/extras/wallet/resolve.py b/lbrynet/extras/wallet/resolve.py index 9dcf9425f..e868c877c 100644 --- a/lbrynet/extras/wallet/resolve.py +++ b/lbrynet/extras/wallet/resolve.py @@ -155,8 +155,8 @@ class Resolver: certificate = None certificate_id = smart_decode(claim_result['value']).certificate_id if certificate_id: - certificate = await self.network.get_claims_by_ids(certificate_id.decode()) - certificate = certificate.pop(certificate_id.decode()) if certificate else None + certificate = await self.network.get_claims_by_ids(certificate_id) + certificate = certificate.pop(certificate_id) if certificate else None return await self.parse_and_validate_claim_result(claim_result, certificate=certificate) async def parse_and_validate_claim_result(self, claim_result, certificate=None, raw=False): @@ -180,7 +180,7 @@ class Resolver: if decoded.has_signature: if certificate is None: log.info("fetching certificate to check claim signature") - certificate = await self.network.get_claims_by_ids(decoded.certificate_id.decode()) + certificate = await self.network.get_claims_by_ids(decoded.certificate_id) if not certificate: log.warning('Certificate %s not found', decoded.certificate_id) claim_result['has_signature'] = True @@ -308,17 +308,10 @@ def format_amount_value(obj): def _get_permanent_url(claim_result, certificate_id): - if claim_result.get('has_signature') and claim_result.get('channel_name'): - return "{}#{}/{}".format( - claim_result['channel_name'], - certificate_id, - claim_result['name'] - ) + if certificate_id: + return f"{claim_result['channel_name']}#{certificate_id}/{claim_result['name']}" else: - return "{}#{}".format( - claim_result['name'], - claim_result['claim_id'] - ) + return f"{claim_result['name']}#{claim_result['claim_id']}" def _verify_proof(name, claim_trie_root, result, height, depth, transaction_class, hash160_to_address): diff --git a/lbrynet/schema/claim.py b/lbrynet/schema/claim.py index faf4dbc79..5576aea53 100644 --- a/lbrynet/schema/claim.py +++ b/lbrynet/schema/claim.py @@ -92,11 +92,11 @@ class ClaimDict(OrderedDict): return None @property - def certificate_id(self): + def certificate_id(self) -> str: if self.protobuf.HasField("publisherSignature"): - return binascii.hexlify(self.protobuf.publisherSignature.certificateId) + return binascii.hexlify(self.protobuf.publisherSignature.certificateId).decode() if self.detached_signature and self.detached_signature.certificate_id: - return binascii.hexlify(self.detached_signature.certificate_id) + return binascii.hexlify(self.detached_signature.certificate_id).decode() @property def signature(self): diff --git a/tests/unit/schema/test_lbryschema.py b/tests/unit/schema/test_lbryschema.py index b61f85f99..ebf154876 100644 --- a/tests/unit/schema/test_lbryschema.py +++ b/tests/unit/schema/test_lbryschema.py @@ -346,7 +346,7 @@ class TestDetachedNamedSECP256k1Signatures(UnitTest): curve=SECP256k1, name='example', force_detached=True) self.assertEqual( signed.claim_dict['publisherSignature']['detached_signature'], - binascii.hexlify(signed.serialized) + binascii.hexlify(signed.serialized).decode() ) signed_copy = ClaimDict.load_dict(signed.claim_dict) self.assertEqual(signed_copy.validate_signature(claim_address_2, cert, name='example'), True)