X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fqt%2Fmultisigdialog.cpp;h=6013c7961636efa6881d0ca435fc38584d8b5b60;hb=713fd8a57b0f2b5f8f8158542e51f1c51919eb32;hp=1833aa4a7011e090b851fbad04c25799e7e1a65e;hpb=3d933e84b0f8f29d0c6ce4459e78027dcac3fa86;p=novacoin.git diff --git a/src/qt/multisigdialog.cpp b/src/qt/multisigdialog.cpp index 1833aa4..6013c79 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); @@ -164,11 +165,31 @@ void MultisigDialog::on_createAddressButton_clicked() pubkeys[i].SetPubKey(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); @@ -292,7 +313,7 @@ void MultisigDialog::on_createTransactionButton_clicked() CBitcoinAddress address(recipient.address.toStdString()); CScript scriptPubKey; scriptPubKey.SetDestination(address.Get()); - int64 amount = recipient.amount; + int64_t amount = recipient.amount; CTxOut output(amount, scriptPubKey); transaction.vout.push_back(output); } @@ -328,6 +349,7 @@ void MultisigDialog::on_transaction_textChanged() } catch(std::exception &e) { + (void)e; return; } @@ -398,13 +420,14 @@ void MultisigDialog::on_signTransactionButton_clicked() } catch(std::exception &e) { + (void)e; return; } CTransaction mergedTx(tx); // 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 +468,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 +510,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); @@ -517,6 +540,7 @@ void MultisigDialog::on_sendTransactionButton_clicked() } catch(std::exception &e) { + (void)e; return; } uint256 txHash = tx.GetHash(); @@ -590,7 +614,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 +626,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 +638,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); +} + +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 } \ No newline at end of file