forked from LBRYCommunity/lbry-sdk
claim search with --public_key_id
This commit is contained in:
parent
76df239d1a
commit
9f1f2b1781
5 changed files with 36 additions and 10 deletions
|
@ -1697,7 +1697,7 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
claim_search [<name> | --name=<name>] [--claim_id=<claim_id>] [--txid=<txid>] [--nout=<nout>]
|
claim_search [<name> | --name=<name>] [--claim_id=<claim_id>] [--txid=<txid>] [--nout=<nout>]
|
||||||
[--channel=<channel> | --channel_ids=<channel_ids>...]
|
[--channel=<channel> | --channel_ids=<channel_ids>...]
|
||||||
[--valid_channel_signatures] [--invalid_channel_signatures]
|
[--valid_channel_signatures] [--invalid_channel_signatures]
|
||||||
[--is_controlling] [--release_time=<release_time>]
|
[--is_controlling] [--release_time=<release_time>] [--public_key_id=<public_key_id>]
|
||||||
[--timestamp=<timestamp>] [--creation_timestamp=<creation_timestamp>]
|
[--timestamp=<timestamp>] [--creation_timestamp=<creation_timestamp>]
|
||||||
[--height=<height>] [--creation_height=<creation_height>]
|
[--height=<height>] [--creation_height=<creation_height>]
|
||||||
[--activation_height=<activation_height>] [--expiration_height=<expiration_height>]
|
[--activation_height=<activation_height>] [--expiration_height=<expiration_height>]
|
||||||
|
@ -1730,6 +1730,9 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
--valid_channel_signatures : (bool) only return claims with valid channel signatures
|
--valid_channel_signatures : (bool) only return claims with valid channel signatures
|
||||||
--invalid_channel_signatures : (bool) only return claims with invalid channel signatures
|
--invalid_channel_signatures : (bool) only return claims with invalid channel signatures
|
||||||
--is_controlling : (bool) only return winning claims of their respective name
|
--is_controlling : (bool) only return winning claims of their respective name
|
||||||
|
--public_key_id : (str) only return channels having this public key id, this is
|
||||||
|
the same key as used in the wallet file to map
|
||||||
|
channel certificate private keys: {'public_key_id': 'private key'}
|
||||||
--height=<height> : (int) last updated block height (supports equality constraints)
|
--height=<height> : (int) last updated block height (supports equality constraints)
|
||||||
--timestamp=<timestamp> : (int) last updated timestamp (supports equality constraints)
|
--timestamp=<timestamp> : (int) last updated timestamp (supports equality constraints)
|
||||||
--creation_height=<creation_height> : (int) created at block height (supports equality constraints)
|
--creation_height=<creation_height> : (int) created at block height (supports equality constraints)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import logging
|
import logging
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from binascii import hexlify
|
from binascii import hexlify, unhexlify
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from json import JSONEncoder
|
from json import JSONEncoder
|
||||||
|
|
||||||
|
@ -227,6 +227,10 @@ class JSONResponseEncoder(JSONEncoder):
|
||||||
})
|
})
|
||||||
return file
|
return file
|
||||||
|
|
||||||
@staticmethod
|
def encode_claim(self, claim):
|
||||||
def encode_claim(claim):
|
encoded = getattr(claim, claim.claim_type).to_dict()
|
||||||
return getattr(claim, claim.claim_type).to_dict()
|
if 'public_key' in encoded:
|
||||||
|
encoded['public_key_id'] = self.ledger.public_key_to_address(
|
||||||
|
unhexlify(encoded['public_key'])
|
||||||
|
)
|
||||||
|
return encoded
|
||||||
|
|
|
@ -90,6 +90,7 @@ class SQLDB:
|
||||||
-- claims which are channels
|
-- claims which are channels
|
||||||
is_channel bool not null,
|
is_channel bool not null,
|
||||||
public_key_bytes bytes,
|
public_key_bytes bytes,
|
||||||
|
public_key_hash bytes,
|
||||||
claims_in_channel integer,
|
claims_in_channel integer,
|
||||||
|
|
||||||
-- claims which are inside channels
|
-- claims which are inside channels
|
||||||
|
@ -116,6 +117,7 @@ class SQLDB:
|
||||||
create index if not exists claim_timestamp_idx on claim (timestamp);
|
create index if not exists claim_timestamp_idx on claim (timestamp);
|
||||||
create index if not exists claim_height_idx on claim (height);
|
create index if not exists claim_height_idx on claim (height);
|
||||||
create index if not exists claim_activation_height_idx on claim (activation_height);
|
create index if not exists claim_activation_height_idx on claim (activation_height);
|
||||||
|
create index if not exists claim_public_key_hash_idx on claim (public_key_hash);
|
||||||
|
|
||||||
create index if not exists claim_effective_amount_idx on claim (effective_amount);
|
create index if not exists claim_effective_amount_idx on claim (effective_amount);
|
||||||
create index if not exists claim_trending_group_idx on claim (trending_group);
|
create index if not exists claim_trending_group_idx on claim (trending_group);
|
||||||
|
@ -467,9 +469,16 @@ class SQLDB:
|
||||||
|
|
||||||
if channels:
|
if channels:
|
||||||
self.db.executemany(
|
self.db.executemany(
|
||||||
"UPDATE claim SET public_key_bytes=:public_key_bytes WHERE claim_hash=:claim_hash", [{
|
"""
|
||||||
|
UPDATE claim SET
|
||||||
|
public_key_bytes=:public_key_bytes,
|
||||||
|
public_key_hash=:public_key_hash
|
||||||
|
WHERE claim_hash=:claim_hash""", [{
|
||||||
'claim_hash': sqlite3.Binary(claim_hash),
|
'claim_hash': sqlite3.Binary(claim_hash),
|
||||||
'public_key_bytes': sqlite3.Binary(txo.claim.channel.public_key_bytes)
|
'public_key_bytes': sqlite3.Binary(txo.claim.channel.public_key_bytes),
|
||||||
|
'public_key_hash': sqlite3.Binary(
|
||||||
|
self.ledger.address_to_hash160(
|
||||||
|
self.ledger.public_key_to_address(txo.claim.channel.public_key_bytes)))
|
||||||
} for claim_hash, txo in channels.items()]
|
} for claim_hash, txo in channels.items()]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -684,6 +693,10 @@ class SQLDB:
|
||||||
if 'name' in constraints:
|
if 'name' in constraints:
|
||||||
constraints['claim.normalized'] = normalize_name(constraints.pop('name'))
|
constraints['claim.normalized'] = normalize_name(constraints.pop('name'))
|
||||||
|
|
||||||
|
if 'public_key_id' in constraints:
|
||||||
|
constraints['claim.public_key_hash'] = sqlite3.Binary(
|
||||||
|
self.ledger.address_to_hash160(constraints.pop('public_key_id')))
|
||||||
|
|
||||||
if 'channel' in constraints:
|
if 'channel' in constraints:
|
||||||
channel_url = constraints.pop('channel')
|
channel_url = constraints.pop('channel')
|
||||||
match = self._resolve_one(channel_url)
|
match = self._resolve_one(channel_url)
|
||||||
|
@ -759,7 +772,7 @@ class SQLDB:
|
||||||
}
|
}
|
||||||
|
|
||||||
SEARCH_PARAMS = {
|
SEARCH_PARAMS = {
|
||||||
'name', 'claim_id', 'txid', 'nout', 'channel', 'channel_ids',
|
'name', 'claim_id', 'txid', 'nout', 'channel', 'channel_ids', 'public_key_id',
|
||||||
'any_tags', 'all_tags', 'not_tags',
|
'any_tags', 'all_tags', 'not_tags',
|
||||||
'any_locations', 'all_locations', 'not_locations',
|
'any_locations', 'all_locations', 'not_locations',
|
||||||
'any_languages', 'all_languages', 'not_languages',
|
'any_languages', 'all_languages', 'not_languages',
|
||||||
|
|
2
setup.py
2
setup.py
|
@ -23,7 +23,7 @@ setup(
|
||||||
'console_scripts': 'lbrynet=lbrynet.extras.cli:main'
|
'console_scripts': 'lbrynet=lbrynet.extras.cli:main'
|
||||||
},
|
},
|
||||||
install_requires=[
|
install_requires=[
|
||||||
'torba==0.5.4',
|
'torba==0.5.5',
|
||||||
'aiohttp==3.5.4',
|
'aiohttp==3.5.4',
|
||||||
'aioupnp',
|
'aioupnp',
|
||||||
'appdirs==1.4.3',
|
'appdirs==1.4.3',
|
||||||
|
|
|
@ -50,8 +50,10 @@ class ClaimSearchCommand(CommandTestCase):
|
||||||
|
|
||||||
async def test_basic_claim_search(self):
|
async def test_basic_claim_search(self):
|
||||||
await self.create_channel()
|
await self.create_channel()
|
||||||
|
channel_txo = self.channel['outputs'][0]
|
||||||
channel2 = await self.channel_create('@abc', '0.1', allow_duplicate_name=True)
|
channel2 = await self.channel_create('@abc', '0.1', allow_duplicate_name=True)
|
||||||
channel_id2 = channel2['outputs'][0]['claim_id']
|
channel_txo2 = channel2['outputs'][0]
|
||||||
|
channel_id2 = channel_txo2['claim_id']
|
||||||
|
|
||||||
# finding a channel
|
# finding a channel
|
||||||
await self.assertFindsClaims([channel2, self.channel], name='@abc')
|
await self.assertFindsClaims([channel2, self.channel], name='@abc')
|
||||||
|
@ -60,6 +62,10 @@ class ClaimSearchCommand(CommandTestCase):
|
||||||
await self.assertFindsClaim(self.channel, txid=self.channel['txid'], nout=0)
|
await self.assertFindsClaim(self.channel, txid=self.channel['txid'], nout=0)
|
||||||
await self.assertFindsClaim(channel2, claim_id=channel_id2)
|
await self.assertFindsClaim(channel2, claim_id=channel_id2)
|
||||||
await self.assertFindsClaim(channel2, txid=channel2['txid'], nout=0)
|
await self.assertFindsClaim(channel2, txid=channel2['txid'], nout=0)
|
||||||
|
await self.assertFindsClaim(
|
||||||
|
channel2, public_key_id=channel_txo2['value']['public_key_id'])
|
||||||
|
await self.assertFindsClaim(
|
||||||
|
self.channel, public_key_id=channel_txo['value']['public_key_id'])
|
||||||
|
|
||||||
signed = await self.stream_create('on-channel-claim', '0.001', channel_id=self.channel_id)
|
signed = await self.stream_create('on-channel-claim', '0.001', channel_id=self.channel_id)
|
||||||
signed2 = await self.stream_create('on-channel-claim', '0.0001', channel_id=channel_id2,
|
signed2 = await self.stream_create('on-channel-claim', '0.0001', channel_id=channel_id2,
|
||||||
|
|
Loading…
Reference in a new issue