properly format scripthash address on output

This commit is contained in:
Lex Berezhny 2021-06-02 10:14:17 -04:00
parent fe469ae57f
commit 464cfd475e
4 changed files with 17 additions and 6 deletions

View file

@ -723,8 +723,10 @@ class Ledger(metaclass=LedgerRegistry):
self.hash160_to_address(txi.txo_ref.txo.pubkey_hash) self.hash160_to_address(txi.txo_ref.txo.pubkey_hash)
) )
for txo in tx.outputs: for txo in tx.outputs:
if txo.has_address: if txo.is_pubkey_hash:
addresses.add(self.hash160_to_address(txo.pubkey_hash)) addresses.add(self.hash160_to_address(txo.pubkey_hash))
elif txo.is_script_hash:
addresses.add(self.hash160_to_script_address(txo.script_hash))
start = int(time.perf_counter()) start = int(time.perf_counter())
while timeout and (int(time.perf_counter()) - start) <= timeout: while timeout and (int(time.perf_counter()) - start) <= timeout:
if await self._wait_round(tx, height, addresses): if await self._wait_round(tx, height, addresses):

View file

@ -272,22 +272,30 @@ class Output(InputOutput):
def id(self): def id(self):
return self.ref.id return self.ref.id
@property
def is_pubkey_hash(self):
return 'pubkey_hash' in self.script.values
@property @property
def pubkey_hash(self): def pubkey_hash(self):
return self.script.values['pubkey_hash'] return self.script.values['pubkey_hash']
@property
def is_script_hash(self):
return 'script_hash' in self.script.values
@property @property
def script_hash(self): def script_hash(self):
return self.script.values['script_hash'] return self.script.values['script_hash']
@property @property
def has_address(self): def has_address(self):
return 'pubkey_hash' in self.script.values return self.is_pubkey_hash or self.is_script_hash
def get_address(self, ledger): def get_address(self, ledger):
if self.script.is_pay_pubkey_hash: if self.is_pubkey_hash:
return ledger.hash160_to_address(self.pubkey_hash) return ledger.hash160_to_address(self.pubkey_hash)
elif self.script.is_pay_script_hash: elif self.is_script_hash:
return ledger.hash160_to_script_address(self.script_hash) return ledger.hash160_to_script_address(self.script_hash)
def get_estimator(self, ledger): def get_estimator(self, ledger):

View file

@ -61,7 +61,8 @@ class WalletCommands(CommandTestCase):
self.assertEqual(await self.blockchain.get_balance(), '95.99973580') self.assertEqual(await self.blockchain.get_balance(), '95.99973580')
await self.assertBalance(self.account, '10.0') await self.assertBalance(self.account, '10.0')
p2sh_address1 = await self.blockchain.get_new_address(self.blockchain.P2SH_SEGWIT_ADDRESS) p2sh_address1 = await self.blockchain.get_new_address(self.blockchain.P2SH_SEGWIT_ADDRESS)
await self.account_send('2.0', p2sh_address1) tx = await self.account_send('2.0', p2sh_address1)
self.assertEqual(tx['outputs'][0]['address'], p2sh_address1)
self.assertEqual(await self.blockchain.get_balance(), '98.99973580') # +1 lbc for confirm block self.assertEqual(await self.blockchain.get_balance(), '98.99973580') # +1 lbc for confirm block
await self.assertBalance(self.account, '7.999877') await self.assertBalance(self.account, '7.999877')
await self.wallet_send('3.0', p2sh_address1) await self.wallet_send('3.0', p2sh_address1)

View file

@ -24,7 +24,7 @@ class TestExchangeRateManager(AsyncioTestCase):
self.assertLessEqual(len(failures), 1, f"feed failures: {failures}. Please check exchange rate feeds!") self.assertLessEqual(len(failures), 1, f"feed failures: {failures}. Please check exchange rate feeds!")
lbc = manager.convert_currency('USD', 'LBC', Decimal('1.0')) lbc = manager.convert_currency('USD', 'LBC', Decimal('1.0'))
self.assertGreaterEqual(lbc, 2.0) self.assertGreaterEqual(lbc, 2.0)
self.assertLessEqual(lbc, 10.0) self.assertLessEqual(lbc, 15.0)
lbc = manager.convert_currency('BTC', 'LBC', Decimal('0.01')) lbc = manager.convert_currency('BTC', 'LBC', Decimal('0.01'))
self.assertGreaterEqual(lbc, 1_000) self.assertGreaterEqual(lbc, 1_000)
self.assertLessEqual(lbc, 4_000) self.assertLessEqual(lbc, 4_000)