Browse Source

Merge #793: Update tests to use 1/0 not True/False addr type

47b2a9c Update tests to use 1/0 not True/False addr type (Adam Gibson)
master
Adam Gibson 5 years ago
parent
commit
2406118876
No known key found for this signature in database
GPG Key ID: 141001A1AF77F20B
  1. 18
      jmclient/jmclient/wallet.py
  2. 8
      jmclient/jmclient/wallet_service.py
  3. 7
      jmclient/jmclient/wallet_utils.py
  4. 8
      jmclient/test/commontest.py
  5. 62
      jmclient/test/test_blockchaininterface.py
  6. 11
      jmclient/test/test_core_nohistory_sync.py
  7. 6
      jmclient/test/test_snicker.py
  8. 45
      jmclient/test/test_wallet.py
  9. 8
      scripts/convert_old_wallet.py
  10. 9
      test/common.py
  11. 8
      test/test_segwit.py

18
jmclient/jmclient/wallet.py

@ -1824,7 +1824,7 @@ class BIP32Wallet(BaseWallet):
def _get_key_ident(self):
return sha256(sha256(
self.get_bip32_priv_export(0, 0).encode('ascii')).digest())\
self.get_bip32_priv_export(0, self.BIP32_EXT_ID).encode('ascii')).digest())\
.digest()[:3]
def _populate_script_map(self):
@ -1976,10 +1976,18 @@ class BIP32Wallet(BaseWallet):
index = self.get_index_cache_and_increment(mixdepth, address_type)
return self.get_script_and_update_map(mixdepth, address_type, index)
def _set_index_cache(self, mixdepth, address_type, index):
""" Ensures that any update to index_cache dict only applies
to valid address types.
"""
assert address_type in self._get_supported_address_types()
self._index_cache[mixdepth][address_type] = index
def get_index_cache_and_increment(self, mixdepth, address_type):
index = self._index_cache[mixdepth][address_type]
self._index_cache[mixdepth][address_type] += 1
return index
cur_index = self._index_cache[mixdepth][address_type]
self._set_index_cache(mixdepth, address_type, cur_index + 1)
return cur_index
def get_script_and_update_map(self, *args):
path = self.get_path(*args)
@ -2052,7 +2060,7 @@ class BIP32Wallet(BaseWallet):
def set_next_index(self, mixdepth, address_type, index, force=False):
if not (force or index <= self._index_cache[mixdepth][address_type]):
raise Exception("cannot advance index without force=True")
self._index_cache[mixdepth][address_type] = index
self._set_index_cache(mixdepth, address_type, index)
def get_details(self, path):
if not self._is_my_bip32_path(path):
@ -2176,7 +2184,7 @@ class FidelityBondMixin(object):
return len(path) > 4 and path[4] == cls.BIP32_TIMELOCK_ID
def _get_key_ident(self):
first_path = self.get_path(0, 0)
first_path = self.get_path(0, BIP32Wallet.BIP32_EXT_ID)
priv, engine = self._get_key_from_path(first_path)
pub = engine.privkey_to_pubkey(priv)
return sha256(sha256(pub).digest()).digest()[:3]

8
jmclient/jmclient/wallet_service.py

@ -14,7 +14,7 @@ from jmclient.configure import jm_single, get_log
from jmclient.output import fmt_tx_data
from jmclient.blockchaininterface import (INF_HEIGHT, BitcoinCoreInterface,
BitcoinCoreNoHistoryInterface)
from jmclient.wallet import FidelityBondMixin
from jmclient.wallet import FidelityBondMixin, BaseWallet
from jmbase import stop_reactor
from jmbase.support import jmprint, EXIT_SUCCESS, utxo_to_utxostr, hextobin
@ -867,7 +867,8 @@ class WalletService(Service):
for md in range(self.max_mixdepth + 1):
saved_indices[md] = [0, 0]
for address_type in (0, 1):
for address_type in (BaseWallet.ADDRESS_TYPE_EXTERNAL,
BaseWallet.ADDRESS_TYPE_INTERNAL):
next_unused = self.get_next_unused_index(md, address_type)
for index in range(next_unused):
addresses.add(self.get_addr(md, address_type, index))
@ -904,7 +905,8 @@ class WalletService(Service):
addresses = set()
for md in range(self.max_mixdepth + 1):
for address_type in (1, 0):
for address_type in (BaseWallet.ADDRESS_TYPE_INTERNAL,
BaseWallet.ADDRESS_TYPE_EXTERNAL):
old_next = self.get_next_unused_index(md, address_type)
for index in range(gap_limit):
addresses.add(self.get_new_addr(md, address_type))

7
jmclient/jmclient/wallet_utils.py

@ -11,7 +11,7 @@ from numbers import Integral
from collections import Counter
from itertools import islice
from jmclient import (get_network, WALLET_IMPLEMENTATIONS, Storage, podle,
jm_single, BitcoinCoreInterface, WalletError,
jm_single, BitcoinCoreInterface, WalletError, BaseWallet,
VolatileStorage, StoragePasswordError, is_segwit_mode, SegwitLegacyWallet,
LegacyWallet, SegwitWallet, FidelityBondMixin, FidelityBondWatchonlyWallet,
is_native_segwit_mode, load_program_config, add_base_options, check_regtest)
@ -452,9 +452,10 @@ def wallet_display(wallet_service, showprivkey, displayall=False,
utxos = wallet_service.get_utxos_by_mixdepth(include_disabled=True)
for m in range(wallet_service.mixdepth + 1):
branchlist = []
for address_type in [0, 1]:
for address_type in [BaseWallet.ADDRESS_TYPE_EXTERNAL,
BaseWallet.ADDRESS_TYPE_INTERNAL]:
entrylist = []
if address_type == 0:
if address_type == BaseWallet.ADDRESS_TYPE_EXTERNAL:
# users would only want to hand out the xpub for externals
xpub_key = wallet_service.get_bip32_pub_export(m, address_type)
else:

8
jmclient/test/commontest.py

@ -10,7 +10,7 @@ from jmbase import (get_log, hextobin, bintohex, dictchanger)
from jmclient import (
jm_single, open_test_wallet_maybe, estimate_tx_fee,
BlockchainInterface, BIP32Wallet,
BlockchainInterface, BIP32Wallet, BaseWallet,
SegwitWallet, WalletService, BTC_P2SH_P2WPKH)
from jmbase.support import chunks
import jmbitcoin as btc
@ -146,8 +146,8 @@ def make_sign_and_push(ins_full,
total = sum(x['value'] for x in ins_full.values())
ins = list(ins_full.keys())
#random output address and change addr
output_addr = wallet_service.get_new_addr(1, 1) if not output_addr else output_addr
change_addr = wallet_service.get_new_addr(0, 1) if not change_addr else change_addr
output_addr = wallet_service.get_new_addr(1, BaseWallet.ADDRESS_TYPE_INTERNAL) if not output_addr else output_addr
change_addr = wallet_service.get_new_addr(0, BaseWallet.ADDRESS_TYPE_INTERNAL) if not change_addr else change_addr
fee_est = estimate_tx_fee(len(ins), 2) if estimate_fee else 10000
outs = [{'value': amount,
'address': output_addr}, {'value': total - amount - fee_est,
@ -179,7 +179,7 @@ def make_wallets(n,
fixed_seeds=None,
wallet_cls=SegwitWallet,
mixdepths=5,
populate_internal=False):
populate_internal=BaseWallet.ADDRESS_TYPE_EXTERNAL):
'''n: number of wallets to be created
wallet_structure: array of n arrays , each subarray
specifying the number of addresses to be populated with coins

62
jmclient/test/test_blockchaininterface.py

@ -6,7 +6,7 @@ from commontest import create_wallet_for_sync
import pytest
from jmbase import get_log
from jmclient import load_test_config, jm_single
from jmclient import load_test_config, jm_single, BaseWallet
log = get_log()
@ -30,15 +30,18 @@ def test_empty_wallet_sync(setup_wallets, fast):
broken = True
for md in range(wallet_service.max_mixdepth + 1):
for internal in (True, False):
for internal in (BaseWallet.ADDRESS_TYPE_INTERNAL,
BaseWallet.ADDRESS_TYPE_EXTERNAL):
broken = False
assert 0 == wallet_service.get_next_unused_index(md, internal)
assert not broken
@pytest.mark.parametrize('fast,internal', (
(False, False), (False, True),
(True, False), (True, True)))
(False, BaseWallet.ADDRESS_TYPE_EXTERNAL),
(False, BaseWallet.ADDRESS_TYPE_INTERNAL),
(True, BaseWallet.ADDRESS_TYPE_EXTERNAL),
(True, BaseWallet.ADDRESS_TYPE_INTERNAL)))
def test_sequentially_used_wallet_sync(setup_wallets, fast, internal):
used_count = [1, 3, 6, 2, 23]
wallet_service = create_wallet_for_sync(
@ -72,23 +75,27 @@ def test_gap_used_wallet_sync(setup_wallets, fast):
for x in range(md):
assert x <= wallet_service.gap_limit, "test broken"
# create some unused addresses
wallet_service.get_new_script(md, True)
wallet_service.get_new_script(md, False)
wallet_service.get_new_script(md, BaseWallet.ADDRESS_TYPE_INTERNAL)
wallet_service.get_new_script(md, BaseWallet.ADDRESS_TYPE_EXTERNAL)
used_count[md] += x + 2
jm_single().bc_interface.grab_coins(wallet_service.get_new_addr(md, True), 1)
jm_single().bc_interface.grab_coins(wallet_service.get_new_addr(md, False), 1)
jm_single().bc_interface.grab_coins(wallet_service.get_new_addr(md,
BaseWallet.ADDRESS_TYPE_INTERNAL), 1)
jm_single().bc_interface.grab_coins(wallet_service.get_new_addr(md,
BaseWallet.ADDRESS_TYPE_EXTERNAL), 1)
# reset indices to simulate completely unsynced wallet
for md in range(wallet_service.max_mixdepth + 1):
wallet_service.set_next_index(md, True, 0)
wallet_service.set_next_index(md, False, 0)
wallet_service.set_next_index(md, BaseWallet.ADDRESS_TYPE_INTERNAL, 0)
wallet_service.set_next_index(md, BaseWallet.ADDRESS_TYPE_EXTERNAL, 0)
sync_test_wallet(fast, wallet_service)
broken = True
for md in range(len(used_count)):
broken = False
assert md + 1 == wallet_service.get_next_unused_index(md, True)
assert used_count[md] == wallet_service.get_next_unused_index(md, False)
assert md + 1 == wallet_service.get_next_unused_index(md,
BaseWallet.ADDRESS_TYPE_INTERNAL)
assert used_count[md] == wallet_service.get_next_unused_index(md,
BaseWallet.ADDRESS_TYPE_EXTERNAL)
assert not broken
@ -107,34 +114,43 @@ def test_multigap_used_wallet_sync(setup_wallets, fast):
for x in range(int(wallet_service.gap_limit * 0.6)):
assert x <= wallet_service.gap_limit, "test broken"
# create some unused addresses
wallet_service.get_new_script(mixdepth, True)
wallet_service.get_new_script(mixdepth, False)
wallet_service.get_new_script(mixdepth,
BaseWallet.ADDRESS_TYPE_INTERNAL)
wallet_service.get_new_script(mixdepth,
BaseWallet.ADDRESS_TYPE_EXTERNAL)
used_count[mixdepth] += x + 2
jm_single().bc_interface.grab_coins(wallet_service.get_new_addr(mixdepth, True), 1)
jm_single().bc_interface.grab_coins(wallet_service.get_new_addr(mixdepth, False), 1)
jm_single().bc_interface.grab_coins(wallet_service.get_new_addr(
mixdepth, BaseWallet.ADDRESS_TYPE_INTERNAL), 1)
jm_single().bc_interface.grab_coins(wallet_service.get_new_addr(
mixdepth, BaseWallet.ADDRESS_TYPE_EXTERNAL), 1)
# reset indices to simulate completely unsynced wallet
for md in range(wallet_service.max_mixdepth + 1):
wallet_service.set_next_index(md, True, 0)
wallet_service.set_next_index(md, False, 0)
wallet_service.set_next_index(md, BaseWallet.ADDRESS_TYPE_INTERNAL, 0)
wallet_service.set_next_index(md, BaseWallet.ADDRESS_TYPE_EXTERNAL, 0)
sync_test_wallet(fast, wallet_service)
assert used_count[mixdepth] - start_index == wallet_service.get_next_unused_index(mixdepth, True)
assert used_count[mixdepth] == wallet_service.get_next_unused_index(mixdepth, False)
assert used_count[mixdepth] - start_index == \
wallet_service.get_next_unused_index(mixdepth,
BaseWallet.ADDRESS_TYPE_INTERNAL)
assert used_count[mixdepth] == wallet_service.get_next_unused_index(
mixdepth, BaseWallet.ADDRESS_TYPE_EXTERNAL)
@pytest.mark.parametrize('fast', (False, True))
def test_retain_unused_indices_wallet_sync(setup_wallets, fast):
used_count = [0, 0, 0, 0, 0]
wallet_service = create_wallet_for_sync(used_count, ['test_retain_unused_indices_wallet_sync'])
wallet_service = create_wallet_for_sync(used_count,
['test_retain_unused_indices_wallet_sync'])
for x in range(9):
wallet_service.get_new_script(0, 1)
wallet_service.get_new_script(0, BaseWallet.ADDRESS_TYPE_INTERNAL)
sync_test_wallet(fast, wallet_service)
assert wallet_service.get_next_unused_index(0, 1) == 9
assert wallet_service.get_next_unused_index(0,
BaseWallet.ADDRESS_TYPE_INTERNAL) == 9
@pytest.mark.parametrize('fast', (False, True))

11
jmclient/test/test_core_nohistory_sync.py

@ -8,7 +8,7 @@ from commontest import create_wallet_for_sync
import pytest
from jmbase import get_log
from jmclient import (load_test_config, SegwitLegacyWallet,
SegwitWallet, jm_single)
SegwitWallet, jm_single, BaseWallet)
from jmbitcoin import select_chain_params
log = get_log()
@ -19,10 +19,11 @@ def test_fast_sync_unavailable(setup_sync):
with pytest.raises(RuntimeError) as e_info:
wallet_service.sync_wallet(fast=True)
@pytest.mark.parametrize('internal, wallet_cls', [(False, SegwitLegacyWallet),
(True, SegwitLegacyWallet),
(False, SegwitWallet),
(True, SegwitWallet)])
@pytest.mark.parametrize('internal, wallet_cls',
[(BaseWallet.ADDRESS_TYPE_EXTERNAL, SegwitLegacyWallet),
(BaseWallet.ADDRESS_TYPE_INTERNAL, SegwitLegacyWallet),
(BaseWallet.ADDRESS_TYPE_EXTERNAL, SegwitWallet),
(BaseWallet.ADDRESS_TYPE_INTERNAL, SegwitWallet)])
def test_sync(setup_sync, internal, wallet_cls):
used_count = [1, 3, 6, 2, 23]
wallet_service = create_wallet_for_sync(used_count, ['test_sync'],

6
jmclient/test/test_snicker.py

@ -9,7 +9,7 @@ from commontest import make_wallets, dummy_accept_callback, dummy_info_callback
import jmbitcoin as btc
from jmbase import get_log, bintohex
from jmclient import (load_test_config, estimate_tx_fee, SNICKERReceiver,
direct_send, SegwitLegacyWallet)
direct_send, SegwitLegacyWallet, BaseWallet)
TEST_PROPOSALS_FILE = "test_proposals.txt"
log = get_log()
@ -41,7 +41,7 @@ def test_snicker_e2e(setup_snicker, nw, wallet_structures,
wallet_r = wallets[0]['wallet']
wallet_p = wallets[1]['wallet']
# next, create a tx from the receiver wallet
our_destn_script = wallet_r.get_new_script(1, 1)
our_destn_script = wallet_r.get_new_script(1, BaseWallet.ADDRESS_TYPE_INTERNAL)
tx = direct_send(wallet_r, btc.coins_to_satoshi(0.3), 0,
wallet_r.script_to_addr(our_destn_script),
accept_callback=dummy_accept_callback,
@ -83,7 +83,7 @@ def test_snicker_e2e(setup_snicker, nw, wallet_structures,
our_input_utxo = btc.CMutableTxOut(prop_utxo['value'],
prop_utxo['script'])
fee_est = estimate_tx_fee(len(tx.vin), 2)
change_spk = wallet_p.get_new_script(0, 1)
change_spk = wallet_p.get_new_script(0, BaseWallet.ADDRESS_TYPE_INTERNAL)
encrypted_proposals = []

45
jmclient/test/test_wallet.py

@ -8,7 +8,7 @@ import pytest
import jmbitcoin as btc
from commontest import ensure_bip65_activated
from jmbase import get_log, hextobin
from jmclient import load_test_config, jm_single, \
from jmclient import load_test_config, jm_single, BaseWallet, \
SegwitLegacyWallet,BIP32Wallet, BIP49Wallet, LegacyWallet,\
VolatileStorage, get_network, cryptoengine, WalletError,\
SegwitWallet, WalletService, SegwitLegacyWalletFidelityBonds,\
@ -186,10 +186,10 @@ def test_bip32_test_vector_3(monkeypatch, setup_wallet):
@pytest.mark.parametrize('mixdepth,internal,index,address,wif', [
[0, 0, 0, 'mpCX9EbdXpcrKMtjEe1fqFhvzctkfzMYTX', 'cVqtSSoVxFyPqTRGfeESi31uCYfgTF4tGWRtGeVs84fzybiX5TPk'],
[0, 0, 5, 'mtj85a3pFppRhrxNcFig1k7ECshrZjJ9XC', 'cMsFXc4TRw9PTcCTv7x9mr88rDeGXBTLEV67mKaw2cxCkjkhL32G'],
[0, 1, 3, 'n1EaQuqvTRm719hsSJ7yRsj49JfoG1C86q', 'cUgSTqnAtvYoQRXCYy4wCFfaks2Zrz1d55m6mVhFyVhQbkDi7JGJ'],
[2, 1, 2, 'mfxkBk7uDhmF5PJGS9d1NonGiAxPwJqQP4', 'cPcZXSiXPuS5eiT4oDrDKi1mFumw5D1RcWzK2gkGdEHjEz99eyXn']
[0, BaseWallet.ADDRESS_TYPE_EXTERNAL, 0, 'mpCX9EbdXpcrKMtjEe1fqFhvzctkfzMYTX', 'cVqtSSoVxFyPqTRGfeESi31uCYfgTF4tGWRtGeVs84fzybiX5TPk'],
[0, BaseWallet.ADDRESS_TYPE_EXTERNAL, 5, 'mtj85a3pFppRhrxNcFig1k7ECshrZjJ9XC', 'cMsFXc4TRw9PTcCTv7x9mr88rDeGXBTLEV67mKaw2cxCkjkhL32G'],
[0, BaseWallet.ADDRESS_TYPE_INTERNAL, 3, 'n1EaQuqvTRm719hsSJ7yRsj49JfoG1C86q', 'cUgSTqnAtvYoQRXCYy4wCFfaks2Zrz1d55m6mVhFyVhQbkDi7JGJ'],
[2, BaseWallet.ADDRESS_TYPE_INTERNAL, 2, 'mfxkBk7uDhmF5PJGS9d1NonGiAxPwJqQP4', 'cPcZXSiXPuS5eiT4oDrDKi1mFumw5D1RcWzK2gkGdEHjEz99eyXn']
])
def test_bip32_addresses_p2pkh(monkeypatch, setup_wallet, mixdepth, internal, index, address, wif):
"""
@ -391,7 +391,7 @@ def test_signing_simple(setup_wallet, wallet_cls, type_check):
[{"address": str(btc.CCoinAddress.from_scriptPubKey(
btc.CScript(b"\x00").to_p2sh_scriptPubKey())),
"value": 10**8 - 9000}])
script = wallet.get_script(0, 1, 0)
script = wallet.get_script(0, BaseWallet.ADDRESS_TYPE_INTERNAL, 0)
success, msg = wallet.sign_tx(tx, {0: (script, 10**8)})
assert success, msg
type_check(tx)
@ -486,7 +486,8 @@ def test_add_new_utxos(setup_wallet):
jm_single().config.set('BLOCKCHAIN', 'network', 'testnet')
wallet = get_populated_wallet(num=1)
scripts = [wallet.get_new_script(x, True) for x in range(3)]
scripts = [wallet.get_new_script(x,
BaseWallet.ADDRESS_TYPE_INTERNAL) for x in range(3)]
tx_scripts = list(scripts)
tx = btc.mktx(
[(b"\x00"*32, 2)],
@ -514,7 +515,8 @@ def test_remove_old_utxos(setup_wallet):
for i in range(3):
txin = jm_single().bc_interface.grab_coins(
wallet.get_internal_addr(1), 1)
wallet.add_utxo(btc.x(txin), 0, wallet.get_script(1, 1, i), 10**8, 1)
wallet.add_utxo(btc.x(txin), 0, wallet.get_script(1,
BaseWallet.ADDRESS_TYPE_INTERNAL, i), 10**8, 1)
inputs = wallet.select_utxos(0, 10**8)
inputs.update(wallet.select_utxos(1, 2 * 10**8))
@ -549,7 +551,7 @@ def test_initialize_twice(setup_wallet):
def test_is_known(setup_wallet):
wallet = get_populated_wallet(num=0)
script = wallet.get_new_script(1, True)
script = wallet.get_new_script(1, BaseWallet.ADDRESS_TYPE_INTERNAL)
addr = wallet.get_external_addr(2)
assert wallet.is_known_script(script)
@ -576,29 +578,30 @@ def test_wallet_save(setup_wallet):
storage = VolatileStorage(data=data)
wallet = SegwitLegacyWallet(storage)
assert wallet.get_next_unused_index(0, True) == 3
assert wallet.get_next_unused_index(0, False) == 0
assert wallet.get_next_unused_index(1, True) == 0
assert wallet.get_next_unused_index(1, False) == 1
assert wallet.get_next_unused_index(0, BaseWallet.ADDRESS_TYPE_INTERNAL) == 3
assert wallet.get_next_unused_index(0, BaseWallet.ADDRESS_TYPE_EXTERNAL) == 0
assert wallet.get_next_unused_index(1, BaseWallet.ADDRESS_TYPE_INTERNAL) == 0
assert wallet.get_next_unused_index(1, BaseWallet.ADDRESS_TYPE_EXTERNAL) == 1
assert wallet.is_known_script(script)
def test_set_next_index(setup_wallet):
wallet = get_populated_wallet()
assert wallet.get_next_unused_index(0, True) == 3
assert wallet.get_next_unused_index(0,
BaseWallet.ADDRESS_TYPE_INTERNAL) == 3
with pytest.raises(Exception):
# cannot advance index without force=True
wallet.set_next_index(0, True, 5)
wallet.set_next_index(0, BaseWallet.ADDRESS_TYPE_INTERNAL, 5)
wallet.set_next_index(0, True, 1)
assert wallet.get_next_unused_index(0, True) == 1
wallet.set_next_index(0, BaseWallet.ADDRESS_TYPE_INTERNAL, 1)
assert wallet.get_next_unused_index(0, BaseWallet.ADDRESS_TYPE_INTERNAL) == 1
wallet.set_next_index(0, True, 20, force=True)
assert wallet.get_next_unused_index(0, True) == 20
wallet.set_next_index(0, BaseWallet.ADDRESS_TYPE_INTERNAL, 20, force=True)
assert wallet.get_next_unused_index(0, BaseWallet.ADDRESS_TYPE_INTERNAL) == 20
script = wallet.get_new_script(0, True)
script = wallet.get_new_script(0, BaseWallet.ADDRESS_TYPE_INTERNAL)
path = wallet.script_to_path(script)
index = wallet.get_details(path)[2]
assert index == 20
@ -693,7 +696,7 @@ def test_wallet_id(setup_wallet):
def test_addr_script_conversion(setup_wallet):
wallet = get_populated_wallet(num=1)
path = wallet.get_path(0, True, 0)
path = wallet.get_path(0, BaseWallet.ADDRESS_TYPE_INTERNAL, 0)
script = wallet.get_script_from_path(path)
addr = wallet.script_to_addr(script)

8
scripts/convert_old_wallet.py

@ -7,7 +7,7 @@ from binascii import hexlify, unhexlify
from collections import defaultdict
from pyaes import AESModeOfOperationCBC, Decrypter
from jmbase import JM_APP_NAME
from jmclient import Storage, load_program_config, BTCEngine
from jmclient import Storage, load_program_config, BTCEngine, BaseWallet
from jmclient.wallet_utils import get_password, get_wallet_cls,\
cli_get_wallet_passphrase_check, get_wallet_path, \
get_configured_wallet_type
@ -92,8 +92,10 @@ def new_wallet_from_data(data, file_name):
if 'index_cache' in data:
for md, indices in enumerate(data['index_cache']):
wallet.set_next_index(md, 0, indices[0], force=True)
wallet.set_next_index(md, 1, indices[1], force=True)
wallet.set_next_index(md, BaseWallet.ADDRESS_TYPE_EXTERNAL,
indices[0], force=True)
wallet.set_next_index(md, BaseWallet.ADDRESS_TYPE_INTERNAL,
indices[1], force=True)
if 'imported' in data:
for md in data['imported']:

9
test/common.py

@ -12,7 +12,7 @@ sys.path.insert(0, os.path.join(data_dir))
from jmbase import get_log
from jmclient import open_test_wallet_maybe, BIP32Wallet, SegwitWallet, \
estimate_tx_fee, jm_single, WalletService
estimate_tx_fee, jm_single, WalletService, BaseWallet
import jmbitcoin as btc
from jmbase import chunks
@ -32,8 +32,8 @@ def make_sign_and_push(ins_full,
total = sum(x['value'] for x in ins_full.values())
ins = ins_full.keys()
#random output address and change addr
output_addr = wallet_service.get_new_addr(1, 1) if not output_addr else output_addr
change_addr = wallet_service.get_new_addr(0, 1) if not change_addr else change_addr
output_addr = wallet_service.get_new_addr(1, BaseWallet.ADDRESS_TYPE_INTERNAL) if not output_addr else output_addr
change_addr = wallet_service.get_new_addr(0, BaseWallet.ADDRESS_TYPE_INTERNAL) if not change_addr else change_addr
fee_est = estimate_tx_fee(len(ins), 2) if estimate_fee else 10000
outs = [{'value': amount,
'address': output_addr}, {'value': total - amount - fee_est,
@ -106,7 +106,8 @@ def make_wallets(n,
amt = mean_amt - sdev_amt / 2.0 + deviation
if amt < 0: amt = 0.001
amt = float(Decimal(amt).quantize(Decimal(10)**-8))
jm_single().bc_interface.grab_coins(wallet_service.get_new_addr(j, 1), amt)
jm_single().bc_interface.grab_coins(wallet_service.get_new_addr(
j, BaseWallet.ADDRESS_TYPE_INTERNAL), amt)
return wallets

8
test/test_segwit.py

@ -7,7 +7,7 @@ from pprint import pformat
import jmbitcoin as btc
import pytest
from jmbase import get_log, hextobin
from jmclient import load_test_config, jm_single, LegacyWallet
from jmclient import load_test_config, jm_single, LegacyWallet, BaseWallet
log = get_log()
@ -90,8 +90,10 @@ def test_spend_p2sh_p2wpkh_multi(setup_segwit, wallet_structure, in_amt, amount,
FEE = 50000
assert FEE < total_amt_in_sat - amount, "test broken, not enough funds"
cj_script = nsw_wallet_service.get_new_script(MIXDEPTH + 1, True)
change_script = nsw_wallet_service.get_new_script(MIXDEPTH, True)
cj_script = nsw_wallet_service.get_new_script(MIXDEPTH + 1,
BaseWallet.ADDRESS_TYPE_INTERNAL)
change_script = nsw_wallet_service.get_new_script(MIXDEPTH,
BaseWallet.ADDRESS_TYPE_INTERNAL)
change_amt = total_amt_in_sat - amount - FEE
tx_outs = [

Loading…
Cancel
Save