use lbryum updateclaim

This commit is contained in:
Jack 2016-08-04 02:22:10 -04:00
parent f3ab38ba8f
commit 4705acba55
3 changed files with 43 additions and 8 deletions

View file

@ -90,10 +90,10 @@ class LBRYFeeValidator(dict):
class Metadata(dict): class Metadata(dict):
def __init__(self, metadata): def __init__(self, metadata, is_hex=False):
dict.__init__(self) dict.__init__(self)
self.meta_version = None self.meta_version = None
metadata_to_load = deepcopy(metadata) metadata_to_load = deepcopy(metadata if not is_hex else json.loads(metadata.decode("hex")))
self._verify_sources(metadata_to_load) self._verify_sources(metadata_to_load)
self._verify_metadata(metadata_to_load) self._verify_metadata(metadata_to_load)
@ -126,3 +126,6 @@ class Metadata(dict):
assert self.meta_version == self['ver'], "version mismatch" assert self.meta_version == self['ver'], "version mismatch"
break break
assert metadata == {}, "Unknown metadata keys: %s" % json.dumps(metadata.keys()) assert metadata == {}, "Unknown metadata keys: %s" % json.dumps(metadata.keys())
def serialize(self):
return json.dumps(self).encode("hex")

View file

@ -425,12 +425,12 @@ class LBRYWallet(object):
return d return d
def update_name(self, name, bid, value, old_txid): def update_name(self, name, bid, value, old_txid):
d = self._get_value_for_name(name) # d = self._get_value_for_name(name)
d.addCallback(lambda r: self.abandon_name(r['txid'] if not old_txid else old_txid)) # d.addCallback(lambda r: self.abandon_name(r['txid'] if not old_txid else old_txid))
d.addCallback(lambda r: log.info("Abandon claim tx %s" % str(r))) # d.addCallback(lambda r: log.info("Abandon claim tx %s" % str(r)))
d.addCallback(lambda _: self.claim_name(name, bid, value)) # d.addCallback(lambda _: self.claim_name(name, bid, value))
# return d
return d return defer.fail(NotImplementedError())
def get_name_and_validity_for_sd_hash(self, sd_hash): def get_name_and_validity_for_sd_hash(self, sd_hash):
d = self._get_claim_metadata_for_sd_hash(sd_hash) d = self._get_claim_metadata_for_sd_hash(sd_hash)
@ -1063,6 +1063,13 @@ class LBRYumWallet(LBRYWallet):
d.addCallback(Decimal) d.addCallback(Decimal)
return d return d
def update_name(self, name, bid, value, txid):
serialized = Metadata(value).serialize()
d = self.get_claims_from_tx(txid)
d.addCallback(lambda claims: next(claim['claimId'] for claim in claims if claim['name'] == name))
d.addCallback(lambda claim_id: self._send_claim_update(txid, bid, name, claim_id, serialized))
return d
def get_new_address(self): def get_new_address(self):
d = threads.deferToThread(self.wallet.create_new_address) d = threads.deferToThread(self.wallet.create_new_address)
d.addCallback(self._save_wallet) d.addCallback(self._save_wallet)
@ -1106,6 +1113,16 @@ class LBRYumWallet(LBRYWallet):
d.addCallback(self._broadcast_transaction) d.addCallback(self._broadcast_transaction)
return d return d
def _send_claim_update(self, txid, amount, name, claim_id, val):
def send_claim(address):
cmd = known_commands['updateclaim']
func = getattr(self.cmd_runner, cmd.name)
return threads.deferToThread(func, txid, address, amount, name, claim_id, val)
log.info("Update lbry://%s %s %f %s %s" % (name, txid, amount, claim_id, val))
d = self.get_new_address()
d.addCallback(send_claim)
d.addCallback(self._broadcast_transaction)
def _get_decoded_tx(self, raw_tx): def _get_decoded_tx(self, raw_tx):
tx = Transaction(raw_tx) tx = Transaction(raw_tx)
decoded_tx = {} decoded_tx = {}

View file

@ -2430,6 +2430,21 @@ class LBRYDaemon(jsonrpc.JSONRPC):
return d return d
def jsonrpc_update_claim(self, p):
def _x(r):
log.info(str(r))
return r
metadata = p['metadata']
bid = p['bid']
name = p['name']
tx = p['txid']
d = self.session.wallet.update_name(name, bid, metadata, tx)
d.addCallback(_x)
d.addCallback(lambda r: self._render_response(r, OK_CODE))
return d
def get_lbrynet_version_from_github(): def get_lbrynet_version_from_github():
"""Return the latest released version from github.""" """Return the latest released version from github."""
response = requests.get('https://api.github.com/repos/lbryio/lbry/releases/latest') response = requests.get('https://api.github.com/repos/lbryio/lbry/releases/latest')