Skip to content

Commit

Permalink
Merge pull request ElementsProject#1131 from sanket1729/udpate_dump_b…
Browse files Browse the repository at this point in the history
…lind_key

Allow dumpblinding key to accept non-CT address
  • Loading branch information
psgreco committed Aug 9, 2022
2 parents 426679e + a142232 commit 1efefc3
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 6 deletions.
11 changes: 5 additions & 6 deletions src/wallet/rpcdump.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2112,7 +2112,8 @@ RPCHelpMan importissuanceblindingkey()
RPCHelpMan dumpblindingkey()
{
return RPCHelpMan{"dumpblindingkey",
"\nDumps the private blinding key for a CT address in hex.",
"\nDumps the private blinding key for a CT address in hex."
"\nNote: If the address is not a CT address, looks for blinding key corresponding to this non-CT address.",
{
{"address", RPCArg::Type::STR, RPCArg::Optional::NO, "The CT address"},
},
Expand All @@ -2134,17 +2135,15 @@ RPCHelpMan dumpblindingkey()
if (!IsValidDestination(dest)) {
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Bitcoin address");
}
if (!IsBlindDestination(dest)) {
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Not a CT address");
}
CScript script = GetScriptForDestination(dest);
CKey key;
key = pwallet->GetBlindingKey(&script);
if (key.IsValid()) {
CPubKey pubkey(key.GetPubKey());
if (pubkey == GetDestinationBlindingKey(dest)) {
return HexStr(Span<const unsigned char>(key.begin(), key.size()));
if (IsBlindDestination(dest) && pubkey != GetDestinationBlindingKey(dest)) {
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "CT address blinding key does not match the blinding key in wallet");
}
return HexStr(Span<const unsigned char>(key.begin(), key.size()));
}

throw JSONRPCError(RPC_WALLET_ERROR, "Blinding key for address is unknown");
Expand Down
5 changes: 5 additions & 0 deletions test/functional/feature_confidential_transactions.py
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,11 @@ def run_test(self):

# Import the blinding key
blindingkey = self.nodes[2].dumpblindingkey(address2)

# Check that importing keys from non-CT address works as intended
blindingkey2 = self.nodes[2].dumpblindingkey(unconfidential_address2)
assert_equal(blindingkey, blindingkey2)

self.nodes[1].importblindingkey(address2, blindingkey)
# Check the auditor's gettransaction and listreceivedbyaddress
# Needs rescan to update wallet txns
Expand Down

0 comments on commit 1efefc3

Please sign in to comment.