From 1025440184ef100a22d07c7bb543ee45cf169d64 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Mon, 14 May 2012 23:44:52 +0200 Subject: Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress This introduces internal types: * CKeyID: reference (hash160) of a key * CScriptID: reference (hash160) of a script * CTxDestination: a boost::variant of the former two CBitcoinAddress is retrofitted to be a Base58 encoding of a CTxDestination. This allows all internal code to only use the internal types, and only have RPC and GUI depend on the base58 code. Furthermore, the header dependencies are a lot saner now. base58.h is at the top (right below rpc and gui) instead of at the bottom. For the rest: wallet -> script -> keystore -> key. Only keystore still requires a forward declaration of CScript. Solving that would require splitting script into two layers. --- src/qt/messagepage.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/qt/messagepage.cpp') diff --git a/src/qt/messagepage.cpp b/src/qt/messagepage.cpp index 1f895e28f..ab3ea5a0c 100644 --- a/src/qt/messagepage.cpp +++ b/src/qt/messagepage.cpp @@ -10,6 +10,7 @@ #include "main.h" #include "wallet.h" #include "init.h" +#include "base58.h" #include "messagepage.h" #include "ui_messagepage.h" @@ -83,6 +84,13 @@ void MessagePage::on_signMessage_clicked() QMessageBox::Abort, QMessageBox::Abort); return; } + CKeyID keyID; + if (!addr.GetKeyID(keyID)) + { + QMessageBox::critical(this, tr("Error signing"), tr("%1 does not refer to a key.").arg(address), + QMessageBox::Abort, QMessageBox::Abort); + return; + } WalletModel::UnlockContext ctx(model->requestUnlock()); if(!ctx.isValid()) @@ -92,7 +100,7 @@ void MessagePage::on_signMessage_clicked() } CKey key; - if (!pwalletMain->GetKey(addr, key)) + if (!pwalletMain->GetKey(keyID, key)) { QMessageBox::critical(this, tr("Error signing"), tr("Private key for %1 is not available.").arg(address), QMessageBox::Abort, QMessageBox::Abort); -- cgit v1.2.3