X-Git-Url: https://git.novaco.in/?p=novacoin.git;a=blobdiff_plain;f=src%2Fqt%2Fmultisigdialog.cpp;h=c804c99f30e1077f3ceeec9c50b531e601f8d27a;hp=1833aa4a7011e090b851fbad04c25799e7e1a65e;hb=27ce22da0815f4c1fa0e949cc4740e3f4dd1ea9c;hpb=3d933e84b0f8f29d0c6ce4459e78027dcac3fa86 diff --git a/src/qt/multisigdialog.cpp b/src/qt/multisigdialog.cpp index 1833aa4..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,8 +312,8 @@ void MultisigDialog::on_createTransactionButton_clicked() SendCoinsRecipient recipient = entry->getValue(); CBitcoinAddress address(recipient.address.toStdString()); CScript scriptPubKey; - scriptPubKey.SetDestination(address.Get()); - int64 amount = recipient.amount; + 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) @@ -487,13 +508,13 @@ void MultisigDialog::on_copySignedTransactionButton_clicked() void MultisigDialog::on_sendTransactionButton_clicked() { - int64 transactionSize = ui->signedTransaction->text().size() / 2; + int64_t transactionSize = ui->signedTransaction->text().size() / 2; if(transactionSize == 0) return; // Check the fee - int64 fee = (int64 ) (ui->fee->text().toDouble() * COIN); - int64 minFee = MIN_TX_FEE * (1 + (int64) transactionSize / 1000); + int64_t fee = (int64_t ) (ui->fee->text().toDouble() * COIN); + int64_t minFee = MIN_TX_FEE * (1 + (int64_t) transactionSize / 1000); if(fee < minFee) { QMessageBox::StandardButton ret = QMessageBox::question(this, tr("Confirm send transaction"), tr("The fee of the transaction (%1 NVC) is smaller than the expected fee (%2 NVC). Do you want to send the transaction anyway?").arg((double) fee / COIN).arg((double) minFee / COIN), QMessageBox::Yes | QMessageBox::Cancel, QMessageBox::Cancel); @@ -515,7 +536,7 @@ void MultisigDialog::on_sendTransactionButton_clicked() { ssData >> tx; } - catch(std::exception &e) + catch(const std::exception&) { return; } @@ -590,7 +611,7 @@ void MultisigDialog::removeEntry(SendCoinsEntry *entry) void MultisigDialog::updateAmounts() { // Update inputs amount - int64 inputsAmount = 0; + int64_t inputsAmount = 0; for(int i = 0; i < ui->inputs->count(); i++) { MultisigInputEntry *entry = qobject_cast(ui->inputs->itemAt(i)->widget()); @@ -602,7 +623,7 @@ void MultisigDialog::updateAmounts() ui->inputsAmount->setText(inputsAmountStr); // Update outputs amount - int64 outputsAmount = 0; + int64_t outputsAmount = 0; for(int i = 0; i < ui->outputs->count(); i++) { SendCoinsEntry *entry = qobject_cast(ui->outputs->itemAt(i)->widget()); @@ -614,8 +635,23 @@ void MultisigDialog::updateAmounts() ui->outputsAmount->setText(outputsAmountStr); // Update Fee amount - int64 fee = inputsAmount - outputsAmount; + int64_t fee = inputsAmount - outputsAmount; 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 +}