X-Git-Url: https://git.novaco.in/?p=novacoin.git;a=blobdiff_plain;f=src%2Fqt%2Fmultisigdialog.cpp;h=c804c99f30e1077f3ceeec9c50b531e601f8d27a;hp=b19d4d521a2e5dd6eb708f2beaea346051db904d;hb=27ce22da0815f4c1fa0e949cc4740e3f4dd1ea9c;hpb=77a43545b4491b9703d803765da9059d2bdd5aaa diff --git a/src/qt/multisigdialog.cpp b/src/qt/multisigdialog.cpp index b19d4d5..c804c99 100644 --- a/src/qt/multisigdialog.cpp +++ b/src/qt/multisigdialog.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include "addresstablemodel.h" @@ -24,7 +25,7 @@ #include "txdb-bdb.h" #endif -MultisigDialog::MultisigDialog(QWidget *parent) : QDialog(parent), ui(new Ui::MultisigDialog), model(0) +MultisigDialog::MultisigDialog(QWidget *parent) : QWidget(parent), ui(new Ui::MultisigDialog), model(0) { ui->setupUi(this); @@ -148,7 +149,7 @@ void MultisigDialog::on_createAddressButton_clicked() if(!model) return; - std::vector pubkeys; + std::vector pubkeys; pubkeys.resize(ui->pubkeyEntries->count()); unsigned int required = ui->requiredSignatures->text().toUInt(); @@ -161,14 +162,34 @@ void MultisigDialog::on_createAddressButton_clicked() CPubKey vchPubKey(ParseHex(str.toStdString().c_str())); if(!vchPubKey.IsValid()) return; - pubkeys[i].SetPubKey(vchPubKey); + pubkeys[i] = vchPubKey; } - if((required == 0) || (required > pubkeys.size())) + if(pubkeys.size() > 16) + { + QMessageBox::warning(this, tr("Error"), tr("Number of addresses involved in the address creation > %1\nReduce the number").arg(16), QMessageBox::Ok); + return; + } + + if(required == 0) + { + QMessageBox::warning(this, tr("Error"), tr("Number of required signatures is 0\nNumber of required signatures must be between 1 and number of keys involved in the creation of address."), QMessageBox::Ok); return; + } + if(required > pubkeys.size()) + { + QMessageBox::warning(this, tr("Error"), tr("Number of required signatures > Number of keys involved in the creation of address."), QMessageBox::Ok); + return; + } + CScript script; script.SetMultisig(required, pubkeys); + if (script.size() > MAX_SCRIPT_ELEMENT_SIZE) + { + QMessageBox::warning(this, tr("Error"), tr("Redeem script exceeds size limit: %1 > %2\nReduce the number of addresses involved in the address creation.").arg(script.size()).arg(MAX_SCRIPT_ELEMENT_SIZE), QMessageBox::Ok); + return; + } CScriptID scriptID = script.GetID(); CBitcoinAddress address(scriptID); @@ -222,8 +243,8 @@ void MultisigDialog::on_saveMultisigAddressButton_clicked() LOCK(wallet->cs_wallet); if(!wallet->HaveCScript(scriptID)) wallet->AddCScript(script); - if(!wallet->mapAddressBook.count(CBitcoinAddress(address).Get())) - wallet->SetAddressBookName(CBitcoinAddress(address).Get(), label); + if(!wallet->mapAddressBook.count(CBitcoinAddress(address))) + wallet->SetAddressBookName(CBitcoinAddress(address), label); } void MultisigDialog::clear() @@ -291,7 +312,7 @@ void MultisigDialog::on_createTransactionButton_clicked() SendCoinsRecipient recipient = entry->getValue(); CBitcoinAddress address(recipient.address.toStdString()); CScript scriptPubKey; - scriptPubKey.SetDestination(address.Get()); + scriptPubKey.SetAddress(address); int64_t amount = recipient.amount; CTxOut output(amount, scriptPubKey); transaction.vout.push_back(output); @@ -326,7 +347,7 @@ void MultisigDialog::on_transaction_textChanged() { ss >> tx; } - catch(std::exception &e) + catch(const std::exception&) { return; } @@ -396,7 +417,7 @@ void MultisigDialog::on_signTransactionButton_clicked() { ss >> tx; } - catch(std::exception &e) + catch(const std::exception&) { return; } @@ -404,7 +425,7 @@ void MultisigDialog::on_signTransactionButton_clicked() // Fetch previous transactions (inputs) std::map mapPrevOut; - for(int i = 0; i < mergedTx.vin.size(); i++) + for(unsigned int i = 0; i < mergedTx.vin.size(); i++) { CTransaction tempTx; MapPrevTx mapPrevTx; @@ -445,7 +466,7 @@ void MultisigDialog::on_signTransactionButton_clicked() // Sign what we can bool fComplete = true; - for(int i = 0; i < mergedTx.vin.size(); i++) + for(unsigned int i = 0; i < mergedTx.vin.size(); i++) { CTxIn& txin = mergedTx.vin[i]; if(mapPrevOut.count(txin.prevout) == 0) @@ -515,7 +536,7 @@ void MultisigDialog::on_sendTransactionButton_clicked() { ssData >> tx; } - catch(std::exception &e) + catch(const std::exception&) { return; } @@ -618,4 +639,19 @@ void MultisigDialog::updateAmounts() QString feeStr; feeStr.sprintf("%.6f", (double) fee / COIN); ui->fee->setText(feeStr); -} \ No newline at end of file +} + +void MultisigDialog::keyPressEvent(QKeyEvent *event) +{ +#ifdef ANDROID + if(windowType() != Qt::Widget && event->key() == Qt::Key_Back) + { + close(); + } +#else + if(windowType() != Qt::Widget && event->key() == Qt::Key_Escape) + { + close(); + } +#endif +}