diff --git a/README.md b/README.md index 2b3febd..28b2b4a 100644 --- a/README.md +++ b/README.md @@ -10,14 +10,14 @@ Head over to the releases page and grab the latest installers or binary. https:/ If you are on Debian/Ubuntu, please download the `.deb` package and install it. ``` -sudo dpkg -i linux-deb-zec-qt-wallet-v0.5.7.deb +sudo dpkg -i linux-deb-zec-qt-wallet-v0.5.10.deb sudo apt install -f ``` Or you can download and run the binaries directly. ``` -tar -xvf zec-qt-wallet-v0.5.7.tar.gz -./zec-qt-wallet-v0.5.7/zec-qt-wallet +tar -xvf zec-qt-wallet-v0.5.10.tar.gz +./zec-qt-wallet-v0.5.10/zec-qt-wallet ``` ### Windows diff --git a/public_key.asc b/public_key.asc new file mode 100644 index 0000000..cda4e1b --- /dev/null +++ b/public_key.asc @@ -0,0 +1,52 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +8/k3fH5u794KFQQ3WbeHVoJ4mXI4RsQ= +=lY99 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/res/SIGNATURES_README b/res/SIGNATURES_README new file mode 100644 index 0000000..4891f05 --- /dev/null +++ b/res/SIGNATURES_README @@ -0,0 +1,13 @@ +This directory contains the hashes and signatures for zec-qt-wallet + +Verify the hashes by running: +sha256sum -c sha256sum-vX.Y.Z.txt + +Verify signatures: +1. First, import the public key (Available on github + at https://github.com/ZcashFoundation/zec-qt-wallet/blob/master/public_key.asc) +gpg --import public_key.asc + +2. Verify signature +gpg --verify + diff --git a/src/addressbook.cpp b/src/addressbook.cpp index c839b18..762bea6 100644 --- a/src/addressbook.cpp +++ b/src/addressbook.cpp @@ -3,6 +3,7 @@ #include "ui_mainwindow.h" #include "settings.h" #include "mainwindow.h" +#include "rpc.h" AddressBookModel::AddressBookModel(QTableView *parent) @@ -221,6 +222,9 @@ void AddressBook::open(MainWindow* parent, QLineEdit* target) { fnSetTargetLabelAddr(target, item.first, item.second); } }; + + // Refresh after the dialog is closed to update the labels everywhere. + parent->getRPC()->refresh(true); } //============= diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 2ee92f5..e12d53d 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -700,10 +700,6 @@ void MainWindow::doImport(QList* keys) { if (keys->isEmpty()) { delete keys; - - QMessageBox::information(this, - "Imported", tr("The keys were imported. It may take several minutes to rescan the blockchain. Until then, functionality may be limited"), - QMessageBox::Ok); ui->statusBar->showMessage(tr("Private key import rescan finished")); return; } @@ -836,7 +832,12 @@ void MainWindow::importPrivKey() { }); // Start the import. The function takes ownership of keys - doImport(keys); + QTimer::singleShot(1, [=]() {doImport(keys);}); + + // Show the dialog that keys will be imported. + QMessageBox::information(this, + "Imported", tr("The keys were imported. It may take several minutes to rescan the blockchain. Until then, functionality may be limited"), + QMessageBox::Ok); } } diff --git a/src/scripts/desktopentry b/src/scripts/desktopentry index a15092f..9925369 100644 --- a/src/scripts/desktopentry +++ b/src/scripts/desktopentry @@ -6,7 +6,7 @@ Exec=/usr/local/bin/zec-qt-wallet Icon=zec-qt-wallet.xpm Type=Application StartupNotify=true -StartupWMClass=Code +StartupWMClass=zecqtwallet Categories=Utility; MimeType=text/plain;inode/directory; Keywords=zec-qt-wallet; diff --git a/src/scripts/dounifiedbuild.ps1 b/src/scripts/dounifiedbuild.ps1 index 9dc4db0..e35066f 100644 --- a/src/scripts/dounifiedbuild.ps1 +++ b/src/scripts/dounifiedbuild.ps1 @@ -61,7 +61,9 @@ ssh $winserver "New-Item zqwbuild -itemtype directory" | Out-Null # Same while copying the built msi. A straight scp pull from windows to here doesn't work, # so we ssh to windows, and then scp push the file to here. $myhostname = (hostname) | Out-String -NoNewline -Remove-Item -Path /tmp/zqwbuild -Recurse -ErrorAction Ignore | Out-Null +# Powershell seems not to be able to remove this directory for some reason! +# Remove-Item -Path /tmp/zqwbuild -Recurse -ErrorAction Ignore | Out-Null +bash "rm -rf /tmp/zqwbuild" 2>&1 | Out-Null New-Item -Path /tmp/zqwbuild -itemtype directory | Out-Null Copy-Item src /tmp/zqwbuild/ -Recurse Copy-Item res /tmp/zqwbuild/ -Recurse @@ -87,3 +89,7 @@ if (! (Test-Path ./artifacts/linux-binaries-zec-qt-wallet-v$version.tar.gz) -or exit 1; } Write-Host "[OK]" + +Write-Host -NoNewline "Signing Binaries......" +bash src/scripts/signbinaries.sh --version $version +Write-Host "[OK]" diff --git a/src/scripts/signbinaries.sh b/src/scripts/signbinaries.sh new file mode 100755 index 0000000..337b33d --- /dev/null +++ b/src/scripts/signbinaries.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +# Accept the variables as command line arguments as well +POSITIONAL=() +while [[ $# -gt 0 ]] +do +key="$1" + +case $key in + -v|--version) + APP_VERSION="$2" + shift # past argument + shift # past value + ;; + *) # unknown option + POSITIONAL+=("$1") # save it in an array for later + shift # past argument + ;; +esac +done +set -- "${POSITIONAL[@]}" # restore positional parameters + +if [ -z $APP_VERSION ]; then echo "APP_VERSION is not set"; exit 1; fi + +# Store the hash and signatures here +rm -rf release/signatures +mkdir -p release/signatures + +cd artifacts +echo "[Signing Binaries]" + +# Remove previous signatures/hashes +rm -f sha256sum-v$APP_VERSION.txt +rm -f signatures-v$APP_VERSION.tar.gz + +# sha256sum the binaries +gsha256sum *$APP_VERSION* > sha256sum-v$APP_VERSION.txt + +for i in $( ls *zec-qt-wallet-v$APP_VERSION* sha256sum-v$APP_VERSION* ); do + echo "Signing" $i + gpg --batch --output ../release/signatures/$i.sig --detach-sig $i +done + +mv sha256sum-v$APP_VERSION.txt ../release/signatures/ +cp ../res/SIGNATURES_README ../release/signatures/README + +cd ../release/signatures +tar -czf signatures-v$APP_VERSION.tar.gz * +mv signatures-v$APP_VERSION.tar.gz ../../artifacts + diff --git a/src/sendtab.cpp b/src/sendtab.cpp index 878e0dd..a91e800 100644 --- a/src/sendtab.cpp +++ b/src/sendtab.cpp @@ -12,8 +12,7 @@ using json = nlohmann::json; void MainWindow::setupSendTab() { // Create the validator for send to/amount fields - auto amtValidator = new QDoubleValidator(0, 21000000, 8, ui->Amount1); - amtValidator->setNotation(QDoubleValidator::StandardNotation); + auto amtValidator = new QRegExpValidator(QRegExp("[0-9]{0,8}\\.?[0-9]{0,8}")); ui->Amount1->setValidator(amtValidator); // Send button @@ -74,8 +73,7 @@ void MainWindow::setupSendTab() { } }); //Fees validator - auto feesValidator = new QDoubleValidator(0, 1, 8, ui->Amount1); - feesValidator->setNotation(QDoubleValidator::StandardNotation); + auto feesValidator = new QRegExpValidator(QRegExp("[0-9]{0,8}\\.?[0-9]{0,8}")); ui->minerFeeAmt->setValidator(feesValidator); // Font for the first Memo label @@ -219,8 +217,9 @@ void MainWindow::addAddressSection() { Amount1->setPlaceholderText(tr("Amount")); Amount1->setObjectName(QString("Amount") % QString::number(itemNumber)); Amount1->setBaseSize(QSize(200, 0)); + Amount1->setAlignment(Qt::AlignRight); // Create the validator for send to/amount fields - auto amtValidator = new QDoubleValidator(0, 21000000, 8, Amount1); + auto amtValidator = new QRegExpValidator(QRegExp("[0-9]{0,8}\\.?[0-9]{0,8}")); Amount1->setValidator(amtValidator); QObject::connect(Amount1, &QLineEdit::textChanged, [=] (auto text) { this->amountChanged(itemNumber, text);