Browse Source

Check that gettimelockaddress argument is in future

master
Kristaps Kaupe 4 years ago
parent
commit
79a330ecd2
No known key found for this signature in database
GPG Key ID: 33E472FE870C7E5D
  1. 5
      jmclient/jmclient/wallet_utils.py
  2. 19
      jmclient/test/test_wallet.py
  3. 1
      requirements/testing.txt

5
jmclient/jmclient/wallet_utils.py

@ -1224,7 +1224,12 @@ def wallet_gettimelockaddress(wallet, locktime_string):
m = FidelityBondMixin.FIDELITY_BOND_MIXDEPTH
address_type = FidelityBondMixin.BIP32_TIMELOCK_ID
lock_datetime = datetime.strptime(locktime_string, "%Y-%m")
if jm_single().config.get("BLOCKCHAIN", "network") == "mainnet" and lock_datetime <= datetime.now():
jmprint("Error: locktime must be a future date", "error")
return ""
timenumber = FidelityBondMixin.datetime_to_time_number(lock_datetime)
path = wallet.get_path(m, address_type, timenumber)

19
jmclient/test/test_wallet.py

@ -15,6 +15,7 @@ from jmclient import load_test_config, jm_single, BaseWallet, \
create_wallet, open_test_wallet_maybe, \
FidelityBondMixin, FidelityBondWatchonlyWallet, wallet_gettimelockaddress
from test_blockchaininterface import sync_test_wallet
from freezegun import freeze_time
testdir = os.path.dirname(os.path.realpath(__file__))
@ -242,6 +243,7 @@ def test_bip32_addresses_p2sh_p2wpkh(setup_wallet, mixdepth, internal, index, ad
assert wif == wallet.get_wif(mixdepth, internal, index)
assert address == wallet.get_addr(mixdepth, internal, index)
@pytest.mark.parametrize('timenumber,address,wif', [
[0, 'bcrt1qgysu2eynn6klarz200ctgev7gqhhp7hwsdaaec3c7h0ltmc3r68q87c2d3', 'cVASAS6bpC5yctGmnsKaDz7D8CxEwccUtpjSNBQzeV2fw8ox8RR9'],
[50, 'bcrt1q0cnscj0hlf6xqzlqwk7swngd3kmvd6unn49j9h4zgg68kg8fd7gq0r87lf', 'cMtnaLzC2EW3URnmAapRnPQECGwGruxqXJpAnuRjKup3pkWfrxRE'],
@ -264,6 +266,7 @@ def test_bip32_timelocked_addresses(setup_wallet, timenumber, address, wif):
assert address == wallet.get_addr(mixdepth, address_type, timenumber)
assert wif == wallet.get_wif_path(wallet.get_path(mixdepth, address_type, timenumber))
@pytest.mark.parametrize('timenumber,locktime_string', [
[0, "2020-01"],
[20, "2021-09"],
@ -271,7 +274,9 @@ def test_bip32_timelocked_addresses(setup_wallet, timenumber, address, wif):
[150, "2032-07"],
[350, "2049-03"]
])
@freeze_time("2019-12")
def test_gettimelockaddress_method(setup_wallet, timenumber, locktime_string):
jm_single().config.set("BLOCKCHAIN", "network", "mainnet")
storage = VolatileStorage()
SegwitWalletFidelityBonds.initialize(storage, get_network())
wallet = SegwitWalletFidelityBonds(storage)
@ -285,6 +290,19 @@ def test_gettimelockaddress_method(setup_wallet, timenumber, locktime_string):
assert addr == addr_from_method
@freeze_time("2021-01")
def test_gettimelockaddress_in_past(setup_wallet):
jm_single().config.set("BLOCKCHAIN", "network", "mainnet")
storage = VolatileStorage()
SegwitWalletFidelityBonds.initialize(storage, get_network())
wallet = SegwitWalletFidelityBonds(storage)
assert wallet_gettimelockaddress(wallet, "2020-01") == ""
assert wallet_gettimelockaddress(wallet, "2021-01") == ""
assert wallet_gettimelockaddress(wallet, "2021-02") != ""
@pytest.mark.parametrize('index,wif', [
[0, 'cVQbz7DB5JQ1TGsg9Dbm32VtJbXBHaj39Yc9QLkaGpRgXcibHTDH'],
[9, 'cULqe2sYZ4z8jZTGybr2Bzf4EyiT5Ts6wAE3mvCUofRuTVsofR8N'],
@ -306,6 +324,7 @@ def test_bip32_burn_keys(setup_wallet, index, wif):
assert wif == wallet.get_wif_path(wallet.get_path(mixdepth, address_type, index))
def test_import_key(setup_wallet):
jm_single().config.set('BLOCKCHAIN', 'network', 'testnet')
storage = VolatileStorage()

1
requirements/testing.txt

@ -8,3 +8,4 @@ pytest-cov>=2.4.0,<2.6
python-coveralls
mock
flake8
freezegun

Loading…
Cancel
Save