|
|
@ -19,9 +19,8 @@ importing nodes pick up the new transactions regardless of whether rescans |
|
|
|
happened previously. |
|
|
|
happened previously. |
|
|
|
""" |
|
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
from test_framework.authproxy import JSONRPCException |
|
|
|
|
|
|
|
from test_framework.test_framework import BitcoinTestFramework |
|
|
|
from test_framework.test_framework import BitcoinTestFramework |
|
|
|
from test_framework.util import (connect_nodes, sync_blocks, assert_equal, set_node_times) |
|
|
|
from test_framework.util import (assert_raises_jsonrpc, connect_nodes, sync_blocks, assert_equal, set_node_times) |
|
|
|
|
|
|
|
|
|
|
|
import collections |
|
|
|
import collections |
|
|
|
import enum |
|
|
|
import enum |
|
|
@ -35,21 +34,26 @@ Rescan = enum.Enum("Rescan", "no yes late_timestamp") |
|
|
|
class Variant(collections.namedtuple("Variant", "call data rescan prune")): |
|
|
|
class Variant(collections.namedtuple("Variant", "call data rescan prune")): |
|
|
|
"""Helper for importing one key and verifying scanned transactions.""" |
|
|
|
"""Helper for importing one key and verifying scanned transactions.""" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def try_rpc(self, func, *args, **kwargs): |
|
|
|
|
|
|
|
if self.expect_disabled: |
|
|
|
|
|
|
|
assert_raises_jsonrpc(-4, "Rescan is disabled in pruned mode", func, *args, **kwargs) |
|
|
|
|
|
|
|
else: |
|
|
|
|
|
|
|
return func(*args, **kwargs) |
|
|
|
|
|
|
|
|
|
|
|
def do_import(self, timestamp): |
|
|
|
def do_import(self, timestamp): |
|
|
|
"""Call one key import RPC.""" |
|
|
|
"""Call one key import RPC.""" |
|
|
|
|
|
|
|
|
|
|
|
if self.call == Call.single: |
|
|
|
if self.call == Call.single: |
|
|
|
if self.data == Data.address: |
|
|
|
if self.data == Data.address: |
|
|
|
response, error = try_rpc(self.node.importaddress, self.address["address"], self.label, |
|
|
|
response = self.try_rpc(self.node.importaddress, self.address["address"], self.label, |
|
|
|
self.rescan == Rescan.yes) |
|
|
|
self.rescan == Rescan.yes) |
|
|
|
elif self.data == Data.pub: |
|
|
|
elif self.data == Data.pub: |
|
|
|
response, error = try_rpc(self.node.importpubkey, self.address["pubkey"], self.label, |
|
|
|
response = self.try_rpc(self.node.importpubkey, self.address["pubkey"], self.label, |
|
|
|
self.rescan == Rescan.yes) |
|
|
|
self.rescan == Rescan.yes) |
|
|
|
elif self.data == Data.priv: |
|
|
|
elif self.data == Data.priv: |
|
|
|
response, error = try_rpc(self.node.importprivkey, self.key, self.label, self.rescan == Rescan.yes) |
|
|
|
response = self.try_rpc(self.node.importprivkey, self.key, self.label, self.rescan == Rescan.yes) |
|
|
|
assert_equal(response, None) |
|
|
|
assert_equal(response, None) |
|
|
|
assert_equal(error, {'message': 'Rescan is disabled in pruned mode', |
|
|
|
|
|
|
|
'code': -4} if self.expect_disabled else None) |
|
|
|
|
|
|
|
elif self.call == Call.multi: |
|
|
|
elif self.call == Call.multi: |
|
|
|
response = self.node.importmulti([{ |
|
|
|
response = self.node.importmulti([{ |
|
|
|
"scriptPubKey": { |
|
|
|
"scriptPubKey": { |
|
|
@ -179,13 +183,5 @@ class ImportRescanTest(BitcoinTestFramework): |
|
|
|
else: |
|
|
|
else: |
|
|
|
variant.check() |
|
|
|
variant.check() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def try_rpc(func, *args, **kwargs): |
|
|
|
|
|
|
|
try: |
|
|
|
|
|
|
|
return func(*args, **kwargs), None |
|
|
|
|
|
|
|
except JSONRPCException as e: |
|
|
|
|
|
|
|
return None, e.error |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
if __name__ == "__main__": |
|
|
|
ImportRescanTest().main() |
|
|
|
ImportRescanTest().main() |
|
|
|