|
@@ -99,38 +99,8 @@ class BitcoinTrackingWallet(TrackingWallet):
|
|
@write_mode
|
|
@write_mode
|
|
async def rescan_addresses(self,coin_addrs):
|
|
async def rescan_addresses(self,coin_addrs):
|
|
|
|
|
|
- import asyncio
|
|
|
|
-
|
|
|
|
- async def do_scan():
|
|
|
|
- return await self.rpc.call(
|
|
|
|
- 'scantxoutset',
|
|
|
|
- 'start',
|
|
|
|
- [f'addr({a})' for a in coin_addrs],
|
|
|
|
- timeout = 720 ) # call may take several minutes to complete
|
|
|
|
-
|
|
|
|
- async def do_status():
|
|
|
|
- m = f'{CR}Scanning UTXO set: '
|
|
|
|
- msg_r(m)
|
|
|
|
- while True:
|
|
|
|
- await asyncio.sleep(2)
|
|
|
|
- res = await self.rpc.call('scantxoutset','status')
|
|
|
|
- if res:
|
|
|
|
- msg_r(m + f'{res["progress"]}% completed ')
|
|
|
|
- if task1.done():
|
|
|
|
- msg('')
|
|
|
|
- return
|
|
|
|
-
|
|
|
|
- CR = '\r'
|
|
|
|
-
|
|
|
|
- if self.rpc.backend.name == 'aiohttp':
|
|
|
|
- task1 = asyncio.create_task( do_scan() )
|
|
|
|
- task2 = asyncio.create_task( do_status() )
|
|
|
|
- res = await task1
|
|
|
|
- await task2
|
|
|
|
- else:
|
|
|
|
- msg_r(f'Scanning UTXO set, this could take several minutes...')
|
|
|
|
- res = await do_scan()
|
|
|
|
- msg('done')
|
|
|
|
|
|
+ from ..misc import scantxoutset
|
|
|
|
+ res = await scantxoutset( self.rpc, [f'addr({addr})' for addr in coin_addrs] )
|
|
|
|
|
|
if not res['success']:
|
|
if not res['success']:
|
|
msg('UTXO scanning failed or was interrupted')
|
|
msg('UTXO scanning failed or was interrupted')
|
|
@@ -143,6 +113,7 @@ class BitcoinTrackingWallet(TrackingWallet):
|
|
len(blocks),
|
|
len(blocks),
|
|
suf(blocks) ))
|
|
suf(blocks) ))
|
|
vmsg(f'Blocks to rescan: {fmt_list(blocks,fmt="bare")}')
|
|
vmsg(f'Blocks to rescan: {fmt_list(blocks,fmt="bare")}')
|
|
|
|
+ CR = '\n' if g.test_suite else '\r'
|
|
for n,block in enumerate(blocks):
|
|
for n,block in enumerate(blocks):
|
|
msg_r(f'{CR}Rescanning block: {block} ({n+1}/{len(blocks)})')
|
|
msg_r(f'{CR}Rescanning block: {block} ({n+1}/{len(blocks)})')
|
|
# httplib seems to require fresh connection here, so specify timeout
|
|
# httplib seems to require fresh connection here, so specify timeout
|