Added support to abandon claim using txid and nout
This commit is contained in:
parent
5430a0f289
commit
5cc0d365c2
4 changed files with 28 additions and 14 deletions
|
@ -2342,8 +2342,8 @@ class Daemon(AuthJSONRPCServer):
|
||||||
Returns:
|
Returns:
|
||||||
(dict) Dictionary containing result of the claim
|
(dict) Dictionary containing result of the claim
|
||||||
{
|
{
|
||||||
|
success: (bool) True if txn is successful
|
||||||
txid : (str) txid of resulting transaction
|
txid : (str) txid of resulting transaction
|
||||||
fee : (float) fee paid for the transaction
|
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
if claim_id is None and txid is None and nout is None:
|
if claim_id is None and txid is None and nout is None:
|
||||||
|
@ -2358,7 +2358,6 @@ class Daemon(AuthJSONRPCServer):
|
||||||
defer.returnValue({
|
defer.returnValue({
|
||||||
"success": True,
|
"success": True,
|
||||||
"tx": tx,
|
"tx": tx,
|
||||||
"claim_id": claim_id
|
|
||||||
})
|
})
|
||||||
|
|
||||||
@requires(WALLET_COMPONENT, conditions=[WALLET_IS_UNLOCKED])
|
@requires(WALLET_COMPONENT, conditions=[WALLET_IS_UNLOCKED])
|
||||||
|
|
|
@ -166,5 +166,5 @@ class Account(BaseAccount):
|
||||||
details['certificates'] = len(self.certificates)
|
details['certificates'] = len(self.certificates)
|
||||||
return details
|
return details
|
||||||
|
|
||||||
def get_claim(self, claim_id):
|
def get_claim(self, claim_id=None, txid=None, nout=None):
|
||||||
return self.ledger.db.get_claim(self, claim_id)
|
return self.ledger.db.get_claim(self, claim_id, txid, nout)
|
||||||
|
|
|
@ -84,15 +84,25 @@ class WalletDatabase(BaseDatabase):
|
||||||
return certificates
|
return certificates
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def get_claim(self, account, claim_id):
|
def get_claim(self, account, claim_id=None, txid=None, nout=None):
|
||||||
utxos = yield self.db.runQuery(
|
if claim_id is not None:
|
||||||
"""
|
utxos = yield self.db.runQuery(
|
||||||
SELECT amount, script, txo.txid, position
|
"""
|
||||||
FROM txo JOIN tx ON tx.txid=txo.txid
|
SELECT amount, script, txo.txid, position
|
||||||
WHERE claim_id=? AND (is_claim OR is_update) AND txoid NOT IN (SELECT txoid FROM txi)
|
FROM txo JOIN tx ON tx.txid=txo.txid
|
||||||
ORDER BY tx.height DESC LIMIT 1;
|
WHERE claim_id=? AND (is_claim OR is_update) AND txoid NOT IN (SELECT txoid FROM txi)
|
||||||
""", (claim_id,)
|
ORDER BY tx.height DESC LIMIT 1;
|
||||||
)
|
""", (claim_id,)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
utxos = yield self.db.runQuery(
|
||||||
|
"""
|
||||||
|
SELECT amount, script, txo.txid, position
|
||||||
|
FROM txo JOIN tx ON tx.txid=txo.txid
|
||||||
|
WHERE txo.txid=? AND position=? AND (is_claim OR is_update) AND txoid NOT IN (SELECT txoid FROM txi)
|
||||||
|
ORDER BY tx.height DESC LIMIT 1;
|
||||||
|
""", (txid, nout)
|
||||||
|
)
|
||||||
output_class = account.ledger.transaction_class.output_class
|
output_class = account.ledger.transaction_class.output_class
|
||||||
defer.returnValue([
|
defer.returnValue([
|
||||||
output_class(
|
output_class(
|
||||||
|
|
|
@ -264,7 +264,12 @@ class LbryWalletManager(BaseWalletManager):
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def abandon_claim(self, claim_id, txid, nout):
|
def abandon_claim(self, claim_id, txid, nout):
|
||||||
account = self.default_account
|
account = self.default_account
|
||||||
claim = yield account.get_claim(claim_id)
|
if claim_id is not None:
|
||||||
|
claim = yield account.get_claim(claim_id=claim_id)
|
||||||
|
elif txid is not None and nout is not None:
|
||||||
|
claim = yield account.get_claim(txid=txid, nout=nout)
|
||||||
|
else:
|
||||||
|
raise Exception('Must specify claim_id, or txid and nout')
|
||||||
tx = yield Transaction.abandon(claim, [account], account)
|
tx = yield Transaction.abandon(claim, [account], account)
|
||||||
yield account.ledger.broadcast(tx)
|
yield account.ledger.broadcast(tx)
|
||||||
# TODO: release reserved tx outputs in case anything fails by this point
|
# TODO: release reserved tx outputs in case anything fails by this point
|
||||||
|
|
Loading…
Reference in a new issue