wallet_import_with_label.py raw

   1  #!/usr/bin/env python3
   2  # Copyright (c) 2018-2022 The Limenka developers
   3  # Distributed under the MIT software license, see the accompanying
   4  # file COPYING or http://www.opensource.org/licenses/mit-license.php.
   5  """Test the behavior of RPC importprivkey on set and unset labels of
   6  addresses.
   7  
   8  It tests different cases in which an address is imported with importaddress
   9  with or without a label and then its private key is imported with importprivkey
  10  with and without a label.
  11  """
  12  
  13  from test_framework.test_framework import LimenkaTestFramework
  14  from test_framework.wallet_util import test_address
  15  
  16  
  17  class ImportWithLabel(LimenkaTestFramework):
  18      def add_options(self, parser):
  19          self.add_wallet_options(parser, descriptors=False)
  20  
  21      def set_test_params(self):
  22          self.num_nodes = 2
  23          self.setup_clean_chain = True
  24  
  25      def skip_test_if_missing_module(self):
  26          self.skip_if_no_wallet()
  27  
  28      def run_test(self):
  29          """Main test logic"""
  30  
  31          self.log.info(
  32              "Test importaddress with label and importprivkey without label."
  33          )
  34          self.log.info("Import a watch-only address with a label.")
  35          address = self.nodes[0].getnewaddress()
  36          label = "Test Label"
  37          self.nodes[1].importaddress(address, label)
  38          test_address(self.nodes[1],
  39                       address,
  40                       iswatchonly=True,
  41                       ismine=False,
  42                       labels=[label])
  43  
  44          self.log.info(
  45              "Import the watch-only address's private key without a "
  46              "label and the address should keep its label."
  47          )
  48          priv_key = self.nodes[0].dumpprivkey(address)
  49          self.nodes[1].importprivkey(priv_key)
  50          test_address(self.nodes[1], address, labels=[label])
  51  
  52          self.log.info(
  53              "Test importaddress without label and importprivkey with label."
  54          )
  55          self.log.info("Import a watch-only address without a label.")
  56          address2 = self.nodes[0].getnewaddress()
  57          self.nodes[1].importaddress(address2)
  58          test_address(self.nodes[1],
  59                       address2,
  60                       iswatchonly=True,
  61                       ismine=False,
  62                       labels=[""])
  63  
  64          self.log.info(
  65              "Import the watch-only address's private key with a "
  66              "label and the address should have its label updated."
  67          )
  68          priv_key2 = self.nodes[0].dumpprivkey(address2)
  69          label2 = "Test Label 2"
  70          self.nodes[1].importprivkey(priv_key2, label2)
  71  
  72          test_address(self.nodes[1], address2, labels=[label2])
  73  
  74          self.log.info("Test importaddress with label and importprivkey with label.")
  75          self.log.info("Import a watch-only address with a label.")
  76          address3 = self.nodes[0].getnewaddress()
  77          label3_addr = "Test Label 3 for importaddress"
  78          self.nodes[1].importaddress(address3, label3_addr)
  79          test_address(self.nodes[1],
  80                       address3,
  81                       iswatchonly=True,
  82                       ismine=False,
  83                       labels=[label3_addr])
  84  
  85          self.log.info(
  86              "Import the watch-only address's private key with a "
  87              "label and the address should have its label updated."
  88          )
  89          priv_key3 = self.nodes[0].dumpprivkey(address3)
  90          label3_priv = "Test Label 3 for importprivkey"
  91          self.nodes[1].importprivkey(priv_key3, label3_priv)
  92  
  93          test_address(self.nodes[1], address3, labels=[label3_priv])
  94  
  95          self.log.info(
  96              "Test importprivkey won't label new dests with the same "
  97              "label as others labeled dests for the same key."
  98          )
  99          self.log.info("Import a watch-only p2sh-segwit address with a label.")
 100          address4 = self.nodes[0].getnewaddress("", "p2sh-segwit")
 101          label4_addr = "Test Label 4 for importaddress"
 102          self.nodes[1].importaddress(address4, label4_addr)
 103          test_address(self.nodes[1],
 104                       address4,
 105                       iswatchonly=True,
 106                       ismine=False,
 107                       labels=[label4_addr],
 108                       embedded=None)
 109  
 110          self.log.info(
 111              "Import the watch-only address's private key without a "
 112              "label and new destinations for the key should have an "
 113              "empty label while the 'old' destination should keep "
 114              "its label."
 115          )
 116          priv_key4 = self.nodes[0].dumpprivkey(address4)
 117          self.nodes[1].importprivkey(priv_key4)
 118          embedded_addr = self.nodes[1].getaddressinfo(address4)['embedded']['address']
 119  
 120          test_address(self.nodes[1], embedded_addr, labels=[""])
 121  
 122          test_address(self.nodes[1], address4, labels=[label4_addr])
 123  
 124          self.stop_nodes()
 125  
 126  
 127  if __name__ == "__main__":
 128      ImportWithLabel(__file__).main()
 129