mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 04:22:55 +01:00
4fcd7850b0
8925df86c4df16b1070343fef8e4d238f3cc3bd1 doc: update release notes (Jon Atack) 8bb405bbadf11391ccba7b334b4cfe66dc85b390 test: getaddressinfo labels purpose deprecation test (Jon Atack) 60aba1f2f11529add115d963d05599130288ae28 rpc: simplify getaddressinfo labels, deprecate previous behavior (Jon Atack) 7851f14ccf2bcd1e9b2ad48e5e08881be06d9d21 rpc: incorporate review feedback from PR 17283 (Jon Atack) Pull request description: This PR builds on #17283 (now merged) and is followed by #17585. It modifies the value returned by rpc getaddressinfo `labels` to an array of label name strings and deprecates the previous behavior of returning an array of JSON hash structures containing label `name` and address `purpose` key/value pairs. before ``` "labels": [ { "name": "DOUBLE SPEND", "purpose": "receive" } ``` after ``` "labels": [ "DOUBLE SPEND" ] ``` The deprecated behavior can be re-enabled by starting bitcoind with `-deprecatedrpc=labelspurpose`. For context, see: - https://github.com/bitcoin/bitcoin/pull/17283#issuecomment-554458001 - http://www.erisian.com.au/bitcoin-core-dev/log-2019-12-13.html#l-425 (lines 425-427) - http://www.erisian.com.au/bitcoin-core-dev/log-2019-11-22.html#l-622 Reviewers: This PR may be tested manually by building, then running bitcoind with and without the `-deprecatedrpc=labelspurpose` flag while verifying the rpc getaddressinfo help text and `labels` output. Next steps: deprecate the rpc getaddressinfo `label` field (EDIT: done in #17585) and add support for multiple labels per address. This PR will unblock those. ACKs for top commit: jnewbery: reACK 8925df8 promag: Code review ACK 8925df86c4df16b1070343fef8e4d238f3cc3bd1. meshcollider: Code review ACK 8925df86c4df16b1070343fef8e4d238f3cc3bd1 Tree-SHA512: c2b717209996da32b6484de7bb8800e7048410f9ce6afdb3e02a6866bd4a8f2c730f905fca27b10b877b91cf407f546e69e8c4feb9cd934325a6c71c166bd438
126 lines
4.6 KiB
Python
Executable File
126 lines
4.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# Copyright (c) 2018 The Bitcoin Core developers
|
|
# Distributed under the MIT software license, see the accompanying
|
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
"""Test the behavior of RPC importprivkey on set and unset labels of
|
|
addresses.
|
|
|
|
It tests different cases in which an address is imported with importaddress
|
|
with or without a label and then its private key is imported with importprivkey
|
|
with and without a label.
|
|
"""
|
|
|
|
from test_framework.test_framework import BitcoinTestFramework
|
|
from test_framework.wallet_util import test_address
|
|
|
|
|
|
class ImportWithLabel(BitcoinTestFramework):
|
|
def set_test_params(self):
|
|
self.num_nodes = 2
|
|
self.setup_clean_chain = True
|
|
|
|
def skip_test_if_missing_module(self):
|
|
self.skip_if_no_wallet()
|
|
|
|
def run_test(self):
|
|
"""Main test logic"""
|
|
|
|
self.log.info(
|
|
"Test importaddress with label and importprivkey without label."
|
|
)
|
|
self.log.info("Import a watch-only address with a label.")
|
|
address = self.nodes[0].getnewaddress()
|
|
label = "Test Label"
|
|
self.nodes[1].importaddress(address, label)
|
|
test_address(self.nodes[1],
|
|
address,
|
|
iswatchonly=True,
|
|
ismine=False,
|
|
label=label,
|
|
labels=[label])
|
|
|
|
self.log.info(
|
|
"Import the watch-only address's private key without a "
|
|
"label and the address should keep its label."
|
|
)
|
|
priv_key = self.nodes[0].dumpprivkey(address)
|
|
self.nodes[1].importprivkey(priv_key)
|
|
test_address(self.nodes[1], address, label=label, labels=[label])
|
|
|
|
self.log.info(
|
|
"Test importaddress without label and importprivkey with label."
|
|
)
|
|
self.log.info("Import a watch-only address without a label.")
|
|
address2 = self.nodes[0].getnewaddress()
|
|
self.nodes[1].importaddress(address2)
|
|
test_address(self.nodes[1],
|
|
address2,
|
|
iswatchonly=True,
|
|
ismine=False,
|
|
label="",
|
|
labels=[""])
|
|
|
|
self.log.info(
|
|
"Import the watch-only address's private key with a "
|
|
"label and the address should have its label updated."
|
|
)
|
|
priv_key2 = self.nodes[0].dumpprivkey(address2)
|
|
label2 = "Test Label 2"
|
|
self.nodes[1].importprivkey(priv_key2, label2)
|
|
|
|
test_address(self.nodes[1], address2, label=label2, labels=[label2])
|
|
|
|
self.log.info("Test importaddress with label and importprivkey with label.")
|
|
self.log.info("Import a watch-only address with a label.")
|
|
address3 = self.nodes[0].getnewaddress()
|
|
label3_addr = "Test Label 3 for importaddress"
|
|
self.nodes[1].importaddress(address3, label3_addr)
|
|
test_address(self.nodes[1],
|
|
address3,
|
|
iswatchonly=True,
|
|
ismine=False,
|
|
label=label3_addr,
|
|
labels=[label3_addr])
|
|
|
|
self.log.info(
|
|
"Import the watch-only address's private key with a "
|
|
"label and the address should have its label updated."
|
|
)
|
|
priv_key3 = self.nodes[0].dumpprivkey(address3)
|
|
label3_priv = "Test Label 3 for importprivkey"
|
|
self.nodes[1].importprivkey(priv_key3, label3_priv)
|
|
|
|
test_address(self.nodes[1], address3, label=label3_priv, labels=[label3_priv])
|
|
|
|
self.log.info(
|
|
"Test importprivkey won't label new dests with the same "
|
|
"label as others labeled dests for the same key."
|
|
)
|
|
self.log.info("Import a watch-only legacy address with a label.")
|
|
address4 = self.nodes[0].getnewaddress()
|
|
label4_addr = "Test Label 4 for importaddress"
|
|
self.nodes[1].importaddress(address4, label4_addr)
|
|
test_address(self.nodes[1],
|
|
address4,
|
|
iswatchonly=True,
|
|
ismine=False,
|
|
label=label4_addr,
|
|
labels=[label4_addr])
|
|
|
|
self.log.info(
|
|
"Import the watch-only address's private key without a "
|
|
"label and new destinations for the key should have an "
|
|
"empty label while the 'old' destination should keep "
|
|
"its label."
|
|
)
|
|
priv_key4 = self.nodes[0].dumpprivkey(address4)
|
|
self.nodes[1].importprivkey(priv_key4)
|
|
|
|
test_address(self.nodes[1], address4, label=label4_addr, labels=[label4_addr])
|
|
|
|
self.stop_nodes()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
ImportWithLabel().main()
|