|
|
|
#!/usr/bin/env python
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
# Copyright (c) 2020-2022 tecnovert
|
|
|
|
# Distributed under the MIT software license, see the accompanying
|
|
|
|
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
|
|
|
|
from .btc import BTCInterface
|
|
|
|
from basicswap.chainparams import Coins
|
|
|
|
from basicswap.util import (
|
|
|
|
make_int,
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
class NMCInterface(BTCInterface):
|
|
|
|
@staticmethod
|
|
|
|
def coin_type():
|
|
|
|
return Coins.NMC
|
|
|
|
|
|
|
|
def getLockTxHeight(self, txid, dest_address, bid_amount, rescan_from, find_index=False):
|
|
|
|
self._log.debug('[rm] scantxoutset start') # scantxoutset is slow
|
|
|
|
ro = self.rpc('scantxoutset', ['start', ['addr({})'.format(dest_address)]]) # TODO: Use combo(address) where possible
|
|
|
|
self._log.debug('[rm] scantxoutset end')
|
|
|
|
return_txid = True if txid is None else False
|
|
|
|
for o in ro['unspents']:
|
|
|
|
if txid and o['txid'] != txid.hex():
|
|
|
|
continue
|
|
|
|
# Verify amount
|
|
|
|
if make_int(o['amount']) != int(bid_amount):
|
|
|
|
self._log.warning('Found output to lock tx address of incorrect value: %s, %s', str(o['amount']), o['txid'])
|
|
|
|
continue
|
|
|
|
|
|
|
|
rv = {
|
|
|
|
'depth': 0,
|
|
|
|
'height': o['height']}
|
|
|
|
if o['height'] > 0:
|
|
|
|
rv['depth'] = ro['height'] - o['height']
|
|
|
|
if find_index:
|
|
|
|
rv['index'] = o['vout']
|
|
|
|
if return_txid:
|
|
|
|
rv['txid'] = o['txid']
|
|
|
|
return rv
|