From bc69f34b3537a7d34fb7f89b4acd619749bc6cc2 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Fri, 17 Feb 2017 17:23:37 +0100 Subject: [PATCH 001/136] build: bump version to 0.14.0 --- configure.ac | 6 +++--- doc/Doxyfile | 2 +- doc/README.md | 2 +- doc/README_windows.txt | 2 +- src/clientversion.h | 6 +++--- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/configure.ac b/configure.ac index 346695043d9..2b2a001d5d3 100644 --- a/configure.ac +++ b/configure.ac @@ -1,10 +1,10 @@ dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N) AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 0) -define(_CLIENT_VERSION_MINOR, 13) -define(_CLIENT_VERSION_REVISION, 99) +define(_CLIENT_VERSION_MINOR, 14) +define(_CLIENT_VERSION_REVISION, 0) define(_CLIENT_VERSION_BUILD, 0) -define(_CLIENT_VERSION_IS_RELEASE, false) +define(_CLIENT_VERSION_IS_RELEASE, true) define(_COPYRIGHT_YEAR, 2017) define(_COPYRIGHT_HOLDERS,[The %s developers]) define(_COPYRIGHT_HOLDERS_SUBSTITUTION,[[Bitcoin Core]]) diff --git a/doc/Doxyfile b/doc/Doxyfile index ef55acdbc33..a10e4a552cd 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = "Bitcoin Core" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 0.13.99 +PROJECT_NUMBER = 0.14.0 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/doc/README.md b/doc/README.md index 36684e54012..fb2e0ee7d00 100644 --- a/doc/README.md +++ b/doc/README.md @@ -1,4 +1,4 @@ -Bitcoin Core 0.13.99 +Bitcoin Core 0.14.0 ===================== Setup diff --git a/doc/README_windows.txt b/doc/README_windows.txt index 74a05138a42..67eb7873a17 100644 --- a/doc/README_windows.txt +++ b/doc/README_windows.txt @@ -1,4 +1,4 @@ -Bitcoin Core 0.13.99 +Bitcoin Core 0.14.0 ===================== Intro diff --git a/src/clientversion.h b/src/clientversion.h index 0b27bb1bdfc..2b259fb9f02 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -15,12 +15,12 @@ //! These need to be macros, as clientversion.cpp's and bitcoin*-res.rc's voodoo requires it #define CLIENT_VERSION_MAJOR 0 -#define CLIENT_VERSION_MINOR 13 -#define CLIENT_VERSION_REVISION 99 +#define CLIENT_VERSION_MINOR 14 +#define CLIENT_VERSION_REVISION 0 #define CLIENT_VERSION_BUILD 0 //! Set to true for release, false for prerelease or test build -#define CLIENT_VERSION_IS_RELEASE false +#define CLIENT_VERSION_IS_RELEASE true /** * Copyright year (2009-this) From f68e4414d77aeb60d8dee1b2e53a195ff15b2c48 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Fri, 17 Feb 2017 16:42:12 +0000 Subject: [PATCH 002/136] qt: pre-rc1 translations update --- src/qt/locale/bitcoin_af_ZA.ts | 64 ++++ src/qt/locale/bitcoin_en.ts | 6 +- src/qt/locale/bitcoin_es.ts | 4 + src/qt/locale/bitcoin_it.ts | 652 ++++++++++++++++++++++++++++++++++++++++- src/qt/locale/bitcoin_pl.ts | 12 +- src/qt/locale/bitcoin_ru.ts | 20 ++ src/qt/locale/bitcoin_zh_HK.ts | 374 ++++++++++++++++++++++- 7 files changed, 1103 insertions(+), 29 deletions(-) diff --git a/src/qt/locale/bitcoin_af_ZA.ts b/src/qt/locale/bitcoin_af_ZA.ts index 1679482c771..432e8c3faf8 100644 --- a/src/qt/locale/bitcoin_af_ZA.ts +++ b/src/qt/locale/bitcoin_af_ZA.ts @@ -6,6 +6,10 @@ Skep 'n nuwe adres + &New + &Nuwe + + Copy the currently selected address to the system clipboard Maak 'n kopie van die huidige adres na die stelsel klipbord @@ -18,6 +22,14 @@ Verwyder die huidiglik gekieste address van die lys + Export the data in the current tab to a file + Voer inligting uit van die huidige blad na n lêer + + + &Export + &Uitvoer + + &Delete &Verwyder @@ -25,6 +37,42 @@ Choose the address to send coins to Kies die address na wie die muntstukke gestuur moet word + + C&hoose + K&ies + + + Sending addresses + Stuur adresse + + + Receiving addresses + Ontvang adresse + + + &Copy Address + &Kopie adres + + + Copy &Label + Kopie &Etiket + + + &Edit + &Wysig + + + Export Address List + Voer adres lys uit + + + Comma separated file (*.csv) + Koma geskeide lêers (*.csv) + + + Exporting Failed + Uitvoering Misluk + AddressTableModel @@ -661,6 +709,10 @@ Kopieer bedrag + Comma separated file (*.csv) + Koma geskeide lêers (*.csv) + + Date Datum @@ -681,6 +733,10 @@ ID + Exporting Failed + Uitvoering Misluk + + Range: Reeks: @@ -704,6 +760,14 @@ WalletView + + &Export + &Uitvoer + + + Export the data in the current tab to a file + Voer inligting uit van die huidige blad na n lêer + bitcoin-core diff --git a/src/qt/locale/bitcoin_en.ts b/src/qt/locale/bitcoin_en.ts index f62f1e4a734..a66fa55cfed 100644 --- a/src/qt/locale/bitcoin_en.ts +++ b/src/qt/locale/bitcoin_en.ts @@ -849,7 +849,7 @@ - + yes @@ -1499,7 +1499,7 @@ - + The supplied proxy address is invalid. The supplied proxy address is invalid. @@ -1760,7 +1760,7 @@ - + %1 d diff --git a/src/qt/locale/bitcoin_es.ts b/src/qt/locale/bitcoin_es.ts index fc71bf841be..e23064b0fef 100644 --- a/src/qt/locale/bitcoin_es.ts +++ b/src/qt/locale/bitcoin_es.ts @@ -3748,6 +3748,10 @@ Establecer la serialización de las transacciones sin procesar o el bloque hex d Iniciando funciones de red... + This is the minimum transaction fee you pay on every transaction. + Esta es la tarifa mínima de transacción que usted paga en cada transacción. + + Threshold for disconnecting misbehaving peers (default: %u) Umbral para la desconexión de pares con mal comportamiento (predeterminado: %u) diff --git a/src/qt/locale/bitcoin_it.ts b/src/qt/locale/bitcoin_it.ts index 9f2c7626de0..b8c89c51af0 100644 --- a/src/qt/locale/bitcoin_it.ts +++ b/src/qt/locale/bitcoin_it.ts @@ -563,10 +563,74 @@ Confermato + Copy address + Copia indirizzo + + + Copy label + Copia etichetta + + + Copy amount + Copia l'importo + + + Copy transaction ID + Copia l'ID transazione + + + Lock unspent + Bloccare non spesi + + + Unlock unspent + Sbloccare non spesi + + + Copy quantity + Copia quantità + + + Copy fee + Copia commissione + + + Copy after fee + Copia dopo commissione + + + Copy bytes + Copia byte + + + Copy dust + Copia trascurabile + + + Copy change + Copia resto + + + (%1 locked) + (%1 bloccato) + + + yes + + + + no + no + + (no label) (nessuna etichetta) - + + (change) + (resto) + + EditAddressDialog @@ -703,6 +767,10 @@ Errore + %n GB of free space available + GB di spazio libero disponibile%n GB di spazio disponibile + + (of %n GB needed) (di %nGB richiesti)(%n GB richiesti) @@ -714,6 +782,10 @@ Modulo + Unknown... + Sconosciuto... + + Last block time Ora del blocco più recente @@ -1054,6 +1126,14 @@ Per specificare più URL separarli con una barra verticale "|". PaymentServer + + Payment request expired. + Richiesta di pagamento scaduta. + + + Invalid payment request. + Richiesta di pagamento invalida + PeerTableModel @@ -1065,7 +1145,11 @@ Per specificare più URL separarli con una barra verticale "|". Node/Service Nodo/Servizio - + + Ping + Ping + + QObject @@ -1104,17 +1188,49 @@ Per specificare più URL separarli con una barra verticale "|". %1 ms %1 ms + + %n second(s) + %n secondo%n secondi + + + %n minute(s) + %n minuto%n minuti + + + %n hour(s) + %n ora%n ore + + + %n day(s) + %n giorno%n giorni + + + %n week(s) + %n settimana%n settimane + %1 and %2 %1 e %2 + + %n year(s) + %n anno%n anni + QObject::QObject - + + Error: %1 + Errore: %1 + + QRImageWidget - + + PNG Image (*.png) + Immagine PNG (*.png) + + RPCConsole @@ -1464,7 +1580,23 @@ Per specificare più URL separarli con una barra verticale "|". Remove Rimuovi - + + Copy URI + Copia URI + + + Copy label + Copia etichetta + + + Copy message + Copia il messaggio + + + Copy amount + Copia l'importo + + ReceiveRequestDialog @@ -1484,25 +1616,57 @@ Per specificare più URL separarli con una barra verticale "|". &Salva Immagine... + URI + URI + + Address Indirizzo + Amount + Importo + + Label Etichetta + + Message + Messaggio + RecentRequestsTableModel + Date + Data + + Label Etichetta + Message + Messaggio + + (no label) (nessuna etichetta) - + + (no message) + (nessun messaggio) + + + (no amount requested) + (nessun importo richiesto) + + + Requested + Richiesto + + SendCoinsDialog @@ -1646,6 +1810,54 @@ Per specificare più URL separarli con una barra verticale "|". &Invia + Copy quantity + Copia quantità + + + Copy amount + Copia l'importo + + + Copy fee + Copia commissione + + + Copy after fee + Copia dopo commissione + + + Copy bytes + Copia byte + + + Copy dust + Copia trascurabile + + + Copy change + Copia resto + + + %1 to %2 + %1 a %2 + + + Payment request expired. + Richiesta di pagamento scaduta. + + + %n block(s) + %n blocco%n blocchi + + + Warning: Invalid Bitcoin address + Attenzione: Indirizzo Bitcoin non valido + + + Warning: Unknown change address + Attenzione: Indirizzo per il resto sconosciuto + + (no label) (nessuna etichetta) @@ -1731,7 +1943,11 @@ Per specificare più URL separarli con una barra verticale "|". SendConfirmationDialog - + + Yes + Si + + ShutdownWindow @@ -1829,7 +2045,55 @@ Per specificare più URL separarli con una barra verticale "|". Reset all verify message fields Reimposta tutti i campi della verifica messaggio - + + The entered address is invalid. + L'indirizzo inserito non è valido. + + + Please check the address and try again. + Per favore controlla l'indirizzo e prova di nuovo. + + + The entered address does not refer to a key. + L'indirizzo bitcoin inserito non è associato a nessuna chiave. + + + Wallet unlock was cancelled. + Sblocco del portamonete annullato. + + + Private key for the entered address is not available. + La chiave privata per l'indirizzo inserito non è disponibile. + + + Message signing failed. + Firma messaggio fallita. + + + Message signed. + Messaggio firmato. + + + The signature could not be decoded. + Non è stato possibile decodificare la firma. + + + Please check the signature and try again. + Per favore controlla la firma e prova di nuovo. + + + The signature did not match the message digest. + La firma non corrisponde al digest del messaggio. + + + Message verification failed. + Verifica messaggio fallita. + + + Message verified. + Messaggio verificato. + + SplashScreen @@ -1846,7 +2110,123 @@ Per specificare più URL separarli con una barra verticale "|". TransactionDesc - + + %1/offline + %1/offline + + + Status + Stato + + + , has not been successfully broadcast yet + , non è ancora stata trasmessa con successo + + + Date + Data + + + Source + Sorgente + + + Generated + Generato + + + From + Da + + + unknown + sconosciuto + + + To + A + + + own address + proprio indirizzo + + + watch-only + sola lettura + + + label + etichetta + + + Credit + Credito + + + not accepted + non accettate + + + Debit + Debito + + + Total debit + Debito totale + + + Total credit + Credito totale + + + Transaction fee + Commissione transazione + + + Net amount + Importo netto + + + Message + Messaggio + + + Comment + Commento + + + Transaction ID + ID della transazione + + + Merchant + Commerciante + + + Debug information + Informazione di debug + + + Transaction + Transazione + + + Inputs + Input + + + Amount + Importo + + + true + vero + + + false + falso + + TransactionDescDialog @@ -1857,21 +2237,201 @@ Per specificare più URL separarli con una barra verticale "|". TransactionTableModel + Date + Data + + + Type + Tipo + + Label Etichetta + Offline + Offline + + + Unconfirmed + Non confermata + + + Confirmed (%1 confirmations) + Confermata (%1 conferme) + + + This block was not received by any other nodes and will probably not be accepted! + Questo blocco non è stato ricevuto da alcun altro nodo e probabilmente non sarà accettato! + + + Generated but not accepted + Generati, ma non accettati + + + Received with + Ricevuto tramite + + + Sent to + Inviato a + + + Payment to yourself + Pagamento a te stesso + + + Mined + Ottenuto dal mining + + + watch-only + sola lettura + + + (n/a) + (n/d) + + (no label) (nessuna etichetta) - + + Transaction status. Hover over this field to show number of confirmations. + Stato della transazione. Passare con il mouse su questo campo per visualizzare il numero di conferme. + + + Date and time that the transaction was received. + Data e ora in cui la transazione è stata ricevuta. + + + Type of transaction. + Tipo di transazione. + + + Whether or not a watch-only address is involved in this transaction. + Indica se un indirizzo di sola lettura sia o meno coinvolto in questa transazione. + + + User-defined intent/purpose of the transaction. + Intento/scopo della transazione definito dall'utente. + + + Amount removed from or added to balance. + Importo rimosso o aggiunto al saldo. + + TransactionView + All + Tutti + + + Today + Oggi + + + This week + Questa settimana + + + This month + Questo mese + + + Last month + Il mese scorso + + + This year + Quest'anno + + + Range... + Intervallo... + + + Received with + Ricevuto tramite + + + Sent to + Inviato a + + + To yourself + A te stesso + + + Mined + Ottenuto dal mining + + + Other + Altro + + + Enter address or label to search + Inserisci un indirizzo o un'etichetta da cercare + + + Min amount + Importo minimo + + + Copy address + Copia indirizzo + + + Copy label + Copia etichetta + + + Copy amount + Copia l'importo + + + Copy transaction ID + Copia l'ID transazione + + + Copy raw transaction + Copia la transazione raw + + + Edit label + Modifica l'etichetta + + + Show transaction details + Mostra i dettagli della transazione + + + Export Transaction History + Esporta lo storico delle transazioni + + Comma separated file (*.csv) Testo CSV (*.csv) + Confirmed + Confermato + + + Watch-only + Sola lettura + + + Date + Data + + + Type + Tipo + + Label Etichetta @@ -1880,10 +2440,34 @@ Per specificare più URL separarli con una barra verticale "|". Indirizzo + ID + ID + + Exporting Failed Esportazione Fallita - + + There was an error trying to save the transaction history to %1. + Si è verificato un errore durante il salvataggio dello storico delle transazioni in %1. + + + Exporting Successful + Esportazione Riuscita + + + The transaction history was successfully saved to %1. + Lo storico delle transazioni e' stato salvato con successo in %1. + + + Range: + Intervallo: + + + to + a + + UnitDisplayStatusBarControl @@ -1893,13 +2477,53 @@ Per specificare più URL separarli con una barra verticale "|". WalletFrame - + + No wallet has been loaded. + Non è stato caricato alcun portamonete. + + WalletModel - + + Send Coins + Invia Bitcoin + + WalletView - + + &Export + &Esporta + + + Export the data in the current tab to a file + Esporta su file i dati contenuti nella tabella corrente + + + Backup Wallet + Backup Portamonete + + + Wallet Data (*.dat) + Dati Portamonete (*.dat) + + + Backup Failed + Backup Fallito + + + There was an error trying to save the wallet data to %1. + Si è verificato un errore durante il salvataggio dei dati del portamonete in %1. + + + Backup Successful + Backup eseguito con successo + + + The wallet data was successfully saved to %1. + Il portamonete è stato correttamente salvato in %1. + + bitcoin-core diff --git a/src/qt/locale/bitcoin_pl.ts b/src/qt/locale/bitcoin_pl.ts index 46348140700..6d6d6718fa7 100644 --- a/src/qt/locale/bitcoin_pl.ts +++ b/src/qt/locale/bitcoin_pl.ts @@ -419,7 +419,7 @@ %n active connection(s) to Bitcoin network - %n aktywnych połączeń do sieci Bitcoin%n aktywnych połączeń do sieci Bitcoin%n aktywnych połączeń do sieci Bitcoin + %n aktywnych połączeń do sieci Bitcoin%n aktywnych połączeń do sieci Bitcoin%n aktywnych połączeń do sieci Bitcoin%n aktywnych połączeń do sieci Bitcoin Indexing blocks on disk... @@ -431,7 +431,7 @@ Processed %n block(s) of transaction history. - Przetworzono %n bloków historii transakcji.Przetworzono %n bloków historii transakcji.Przetworzono %n bloków historii transakcji. + Przetworzono %n bloków historii transakcji.Przetworzono %n bloków historii transakcji.Przetworzono %n bloków historii transakcji.Przetworzono %n bloków historii transakcji. %1 behind @@ -832,11 +832,11 @@ %n GB of free space available - %n GB dostępnego wolnego miejsca%n GB dostępnego wolnego miejsca%n GB dostępnego wolnego miejsca + %n GB dostępnego wolnego miejsca%n GB dostępnego wolnego miejsca%n GB dostępnego wolnego miejsca%n GB dostępnego wolnego miejsca (of %n GB needed) - (z %n GB potrzebnych)(z %n GB potrzebnych)(z %n GB potrzebnych) + (z %n GB potrzebnych)(z %n GB potrzebnych)(z %n GB potrzebnych)(z %n GB potrzebnych) @@ -1325,11 +1325,11 @@ %n second(s) - %n sekunda%n sekund%n sekund + %n sekunda%n sekund%n sekund%n sekund %n minute(s) - %n minuta%n minut%n minut + %n minuta%n minut%n minut%n minut %1 and %2 diff --git a/src/qt/locale/bitcoin_ru.ts b/src/qt/locale/bitcoin_ru.ts index b5f40fc0589..7d013416ff7 100644 --- a/src/qt/locale/bitcoin_ru.ts +++ b/src/qt/locale/bitcoin_ru.ts @@ -330,6 +330,10 @@ Кликните, чтобы снова разрешить сетевую активность. + Syncing Headers (%1%)... + Синхронизация заголовков (%1%)... + + Reindexing blocks on disk... Идёт переиндексация блоков на диске... @@ -3090,6 +3094,14 @@ Выполнить команду, когда меняется транзакция в бумажнике (%s в команде заменяется на TxID) + Extra transactions to keep in memory for compact block reconstructions (default: %u) + Хранить в памяти дополнительные транзакции для реконструкции компактных блоков (по умолчанию: %u) + + + If this block is in the chain assume that it and its ancestors are valid and potentially skip their script verification (0 to verify all, default: %s, testnet: %s) + Если этот блок в цепи, считать его и последующие блоки верными и потенциально пропускать проверку их скриптов (0 для проверки всех, по умолчанию: %s, тестовая сеть: %s) + + Maximum allowed median peer time offset adjustment. Local perspective of time may be influenced by peers forward or backward by this amount. (default: %u seconds) Максимально допустимое среднее отклонение времени участников. Локальное представление времени может меняться вперед или назад на это количество. (по умолчанию: %u секунд) @@ -3106,6 +3118,14 @@ Пожалуйста, внести свой вклад, если вы найдете %s полезными. Посетите %s для получения дополнительной информации о программном обеспечении. + Reduce storage requirements by enabling pruning (deleting) of old blocks. This allows the pruneblockchain RPC to be called to delete specific blocks, and enables automatic pruning of old blocks if a target size in MiB is provided. This mode is incompatible with -txindex and -rescan. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, >%u = automatically prune block files to stay under the specified target size in MiB) + Уменьшить размер хранилища за счёт обрезания (удаления) старых блоков. Будет разрешён вызов RPC метода pruneblockchain для удаления определённых блоков и разрешено автоматическое обрезание старых блоков, если указан целевой размер в Мб. Этот режим несовместим с -txindex и -rescan. Внимание: переключение этой опции обратно потребует полной загрузки цепи блоков. (по умолчанию: 0 = отключить обрезание блоков, 1 = разрешить ручное обрезание через RPC, >%u = автоматически обрезать файлы блоков, чтобы они были меньше указанного размера в Мб) + + + Set lowest fee rate (in %s/kB) for transactions to be included in block creation. (default: %s) + Задать минимальный курс комиссии (в %s/Кб) для транзакцийб включаемых в создаваемый блок. (по умолчанию: %s) + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) Задать число потоков проверки скрипта (от %u до %d, 0=авто, <0 = оставить столько ядер свободными, по умолчанию: %d) diff --git a/src/qt/locale/bitcoin_zh_HK.ts b/src/qt/locale/bitcoin_zh_HK.ts index 2f3a8d1f161..2049715b856 100644 --- a/src/qt/locale/bitcoin_zh_HK.ts +++ b/src/qt/locale/bitcoin_zh_HK.ts @@ -41,10 +41,70 @@ &Delete 刪除 &D - + + Choose the address to send coins to + 選擇要付錢過去的地址 + + + Choose the address to receive coins with + 選擇要收錢的地址 + + + C&hoose + 選擇 &h + + + Sending addresses + 付款地址 + + + Receiving addresses + 收款地址 + + + &Copy Address + 複製地址 &C + + + Copy &Label + 複製標記 &L + + + &Edit + 編輯 &E + + + Export Address List + 匯出地址清單 + + + Comma separated file (*.csv) + 逗號分隔檔 (*.csv) + + + Exporting Failed + 匯出失敗 + + + There was an error trying to save the address list to %1. Please try again. + 儲存地址列表到 %1 時發生錯誤。請再試一次。 + + AddressTableModel - + + Label + 標記 + + + Address + 地址 + + + (no label) + (無標記) + + AskPassphraseDialog @@ -63,7 +123,91 @@ Repeat new passphrase 重複新密碼 - + + Encrypt wallet + 加密錢包 + + + This operation needs your wallet passphrase to unlock the wallet. + 這個動作需要你的錢包密碼來將錢包解鎖。 + + + Unlock wallet + 解鎖錢包 + + + This operation needs your wallet passphrase to decrypt the wallet. + 這個動作需要你的錢包密碼來將錢包解密。 + + + Decrypt wallet + 解密錢包 + + + Change passphrase + 更改密碼 + + + Enter the old passphrase and new passphrase to the wallet. + 輸入舊密碼和新密碼至錢包。 + + + Confirm wallet encryption + 確認錢包加密 + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>! + 警告: 如果你將錢包加密後又忘記密碼,你就會<b>失去所有 Bitcoin 了</b>! + + + Are you sure you wish to encrypt your wallet? + 你確定要把錢包加密嗎? + + + Wallet encrypted + 錢包已加密 + + + %1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. + %1 現在要關閉來完成加密程序。請記得將錢包加密不能完全防止你的 Bitcoins 經被入侵電腦的惡意程式偷取。 + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + 重要: 請改用新產生的加密錢包檔,來取代所以舊錢包檔的備份。為安全計,當你開始使用新的加密錢包檔後,舊錢包檔的備份就不能再使用了。 + + + Wallet encryption failed + 錢包加密失敗 + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + 因內部錯誤導致錢包加密失敗,你的錢包尚未加密。 + + + The supplied passphrases do not match. + 提供的密碼不一致。 + + + Wallet unlock failed + 錢包解鎖失敗 + + + The passphrase entered for the wallet decryption was incorrect. + 用來解密錢包的密碼不對。 + + + Wallet decryption failed + 錢包解密失敗 + + + Wallet passphrase was successfully changed. + 錢包密碼已成功更改。 + + + Warning: The Caps Lock key is on! + 警告: Caps Lock 已啟用! + + BanTableModel @@ -114,6 +258,14 @@ 結束應用程式 + &About %1 + 關於 %1 &A + + + Show information about %1 + 顯示 %1 的相關資訊 + + About &Qt 關於 Qt &Q @@ -126,6 +278,10 @@ 選項... &O + Modify configuration options for %1 + 修正 %1 的設定選項 + + &Encrypt Wallet... 加密錢包... &E @@ -201,9 +357,51 @@ Show or hide the main Window 顯示或隱藏主視窗 + + &File + 檔案 &F + + + &Settings + 設定 &S + + + &Help + 說明 &H + + + Request payments (generates QR codes and bitcoin: URIs) + 要求付款 (產生QR碼 bitcoin: URIs) + + + Indexing blocks on disk... + 正在為磁碟區塊建立索引... + + + Error + 錯誤 + + + Warning + 警告 + + + Information + 資訊 + + + Date: %1 + + 日期: %1 + + CoinControlDialog + + (no label) + (無標記) + EditAddressDialog @@ -216,6 +414,10 @@ Intro + + Error + 錯誤 + ModalOverlay @@ -237,28 +439,144 @@ QObject + + Enter a Bitcoin address (e.g. %1) + 輸入一個 Bitcoin 位址 (例如 %1) + + + %1 d + %1 日 + + + %1 h + %1 小時 + + + %1 m + %1 分 + + + %1 s + %1 秒 + + + None + 沒有 + + + N/A + N/A + + + %1 ms + %1 亳秒 + + + %n second(s) + %n 秒 + + + %n minute(s) + %n 分鐘 + + + %n hour(s) + %n 小時 + + + %n day(s) + %n 日 + + + %n week(s) + %n 星期 + + + %1 and %2 + %1 和 %2 + + + %n year(s) + %n 年 + QObject::QObject QRImageWidget - + + Save QR Code + 儲存 QR 碼 + + + PNG Image (*.png) + PNG 影像(*.png) + + RPCConsole + + N/A + N/A + + + &Information + 資訊 &I + + + Debug window + 除錯視窗 + + + General + 一般 + + + Received + 已接收 + + + Sent + 已送出 + + + Version + 版本 + ReceiveCoinsDialog ReceiveRequestDialog + + Address + 地址 + + + Label + 標記 + RecentRequestsTableModel + + Label + 標記 + + + (no label) + (無標記) + SendCoinsDialog - + + (no label) + (無標記) + + SendCoinsEntry @@ -279,15 +597,47 @@ TransactionDesc + + Open until %1 + 開放至 %1 + TransactionDescDialog TransactionTableModel + + Label + 標記 + + + Open until %1 + 開放至 %1 + + + (no label) + (無標記) + TransactionView + + Comma separated file (*.csv) + 逗號分隔檔 (*.csv) + + + Label + 標記 + + + Address + 地址 + + + Exporting Failed + 匯出失敗 + UnitDisplayStatusBarControl @@ -303,5 +653,17 @@ bitcoin-core - + + Information + 資訊 + + + Warning + 警告 + + + Error + 錯誤 + + \ No newline at end of file From 1a02ecc73af4b4ac36da1bd04f9e7eddf640e48f Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Fri, 17 Feb 2017 17:47:06 +0100 Subject: [PATCH 003/136] doc: Update release notes from wiki --- doc/release-notes.md | 278 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 221 insertions(+), 57 deletions(-) diff --git a/doc/release-notes.md b/doc/release-notes.md index 0ea9e1949e3..f83b0ce8fc9 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -1,9 +1,9 @@ (note: this is a temporary file, to be added-to by anybody, and moved to release-notes at release time) -Bitcoin Core version *version* is now available from: +Bitcoin Core version 0.14.0 is now available from: - + This is a new major version release, including new features, various bugfixes and performance improvements, as well as updated translations. @@ -22,9 +22,9 @@ Compatibility Bitcoin Core is extensively tested on multiple operating systems using the Linux kernel, macOS 10.8+, and Windows Vista and later. -Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support). +Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support), No attempt is made to prevent installing or running the software on Windows XP, you -can still do so at your own risk but be aware that there are known instabilities. +can still do so at your own risk but be aware that there are known instabilities and issues. Please do not report issues about Windows XP to the issue tracker. Bitcoin Core should also work on most other Unix-like systems but is not @@ -33,18 +33,222 @@ frequently tested on them. Notable changes =============== +Manual Pruning +-------------- + +Bitcoin Core has supported automatically pruning the blockchain since 0.11. Pruning +the blockchain allows for significant storage space savings as the vast majority of +the downloaded data can be discarded after processing so very little of it remains +on the disk. + +Manual block pruning can now be enabled by setting `-prune=1`. Once that is set, +the RPC command `pruneblockchain` can be used to prune the blockchain up to the +specified height or timestamp. + +`getinfo` Deprecated +-------------------- + +The `getinfo` RPC command has been deprecated. Each field in the RPC call +has been moved to another command's output with that command also giving +additional information that `getinfo` did not provide. The following table +shows where each field has been moved to: + +|`getinfo` field | Moved to | +|------------------|-------------------------------------------| +`"version"` | `getnetworkinfo()["version"]` +`"protocolversion"`| `getnetworkinfo()["protocolversion"]` +`"walletversion"` | `getwalletinfo()["walletversion"]` +`"balance"` | `getwalletinfo()["balance"]` +`"blocks"` | `getblockchaininfo()["blocks"]` +`"timeoffset"` | `getnetworkinfo()["timeoffset"]` +`"connections"` | `getnetworkinfo()["connections"]` +`"proxy"` | `getnetworkinfo()["networks"][0]["proxy"]` +`"difficulty"` | `getblockchaininfo()["difficulty"]` +`"testnet"` | `getblockchaininfo()["chain"] == "test"` +`"keypoololdest"` | `getwalletinfo()["keypoololdest"]` +`"keypoolsize"` | `getwalletinfo()["keypoolsize"]` +`"unlocked_until"` | `getwalletinfo()["unlocked_until"]` +`"paytxfee"` | `getwalletinfo()["paytxfee"]` +`"relayfee"` | `getnetworkinfo()["relayfee"]` +`"errors"` | `getnetworkinfo()["warnings"]` + +ZMQ On Windows +-------------- + +Previously the ZeroMQ notification system was unavailable on Windows +due to various issues with ZMQ. These have been fixed upstream and +now ZMQ can be used on Windows. Please see [this document](https://github.com/bitcoin/bitcoin/blob/master/doc/zmq.md) for +help with using ZMQ in general. + +Nested RPC Commands in Debug Console +------------------------------------ + +The ability to nest RPC commands has been added to the debug console. This +allows users to have the output of a command become the input to another +command without running the commands separately. + +The nested RPC commands use bracket syntax (i.e. `getwalletinfo()`) and can +be nested (i.e. `getblock(getblockhash(1))`). Simple queries can be +done with square brackets where object values are accessed with either an +array index or a non-quoted string (i.e. `listunspent()[0][txid]`). Both +commas and spaces can be used to separate parameters in both the bracket syntax +and normal RPC command syntax. + +Network Activity Toggle +----------------------- + +A RPC command and GUI toggle have been added to enable or disable all p2p +network activity. The network status icon in the bottom right hand corner +is now the GUI toggle. Clicking the icon will either enable or disable all +p2p network activity. If network activity is disabled, the icon will +be grayed out with an X on top of it. + +Additionally the `setnetworkactive` RPC command has been added which does +the same thing as the GUI icon. The command takes one boolean parameter, +`true` enables networking and `false` disables it. + +Out-of-sync Modal Info Layer +---------------------------- + +When Bitcoin Core is out-of-sync on startup, a semi-transparent information +layer will be shown over top of the normal display. This layer contains +details about the current sync progress and estimates the amount of time +remaining to finish syncing. This layer can also be hidden and subsequently +unhidden by clicking on the progress bar at the bottom of the window. + +Support for JSON-RPC Named Arguments +------------------------------------ + +Commands sent over the JSON-RPC interface and through the `bitcoin-cli` binary +can now use named arguments. This follows the [JSON-RPC specification](http://www.jsonrpc.org/specification) +for passing parameters by-name with an object. + +`bitcoin-cli` has been updated to support this by parsing `name=value` arguments +when the `-named` option is given. + +Some examples: + + src/bitcoin-cli -named help command="help" + src/bitcoin-cli -named getblockhash height=0 + src/bitcoin-cli -named getblock blockhash=000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f + src/bitcoin-cli -named sendtoaddress address="(snip)" amount="1.0" subtractfeefromamount=true + +The order of arguments doesn't matter in this case. Named arguments are also +useful to leave out arguments that should stay at their default value. The +rarely-used arguments `comment` and `comment_to` to `sendtoaddress`, for example, can +be left out. However, this is not yet implemented for many RPC calls, this is +expected to land in a later release. + +The RPC server remains fully backwards compatible with positional arguments. + +Opt into RBF When Sending +------------------------- + +A new startup option, `-walletrbf`, has been added to allow users to have all +transactions sent opt into RBF support. The default value for this option is +currently `false`, so transactions will not opt into RBF by default. + +Sensitive Data Is No Longer Stored In Debug Console History +----------------------------------------------------------- + +The debug console maintains a history of previously entered commands that can be +accessed by pressing the Up-arrow key so that users can easily reuse previously +entered commands. Commands which have sensitive information such as passphrases and +private keys will now have a `(...)` in place of the parameters when accessed through +the history. + +Retaining the Mempool Across Restarts +------------------------------------- + +The mempool will be saved to the data directory prior to shutdown +to a `mempool.dat` file. This file preserves the mempool so that when the node +restarts the mempool can be filled with transactions without waiting for new transactions +to be created. This will also preserve any changes made to a transaction through +commands such as `prioritisetransaction` so that those changes will not be lost. + +Final Alert +----------- + +The Alert System was [disabled and deprecated](https://bitcoin.org/en/alert/2016-11-01-alert-retirement) in Bitcoin Core 0.12.1 and removed in 0.13.0. +To Alert System was retired with a maximum sequence final alert which causes any nodes +supporting the Alert System to display a static hard-coded "Alert Key Compromised" message which also +prevents any other alerts from overriding it. This final alert is hard-coded into this release +so that all old nodes receive the final alert. + +GUI Changes +----------- + + - After resetting the options by clicking the `Reset Options` button + in the options dialog or with the `-resetguioptions` startup option, + the user will be prompted to choose the data directory again. This + is to ensure that custom data directories will be kept after the + option reset which clears the custom data directory set via the choose + datadir dialog. + + - Multiple peers can now be selected in the list of peers in the debug + window. This allows for users to ban or disconnect multiple peers + simultaneously instead of banning them one at a time. + + - An indicator has been added to the bottom right hand corner of the main + window to indicate whether the wallet being used is a HD wallet. This + icon will be grayed out with an X on top of it if the wallet is not a + HD wallet. + Low-level RPC changes ---------------------- -- `importprunedfunds` only accepts two required arguments. Some versions accept - an optional third arg, which was always ignored. Make sure to never pass more - than two arguments. + - `importprunedfunds` only accepts two required arguments. Some versions accept + an optional third arg, which was always ignored. Make sure to never pass more + than two arguments. + + - The first boolean argument to `getaddednodeinfo` has been removed. This is + an incompatible change. + + - RPC command "getmininginfo" loses the "testnet" field in favor of the more + generic "chain" (which has been present for years). + + - A new RPC command `preciousblock` has been added which marks a block as + precious. A precious block will be treated as if it were received earlier + than a competing block. + + - A new RPC command `importmulti` has been added which receives an array of + JSON objects representing the intention of importing a public key, a + private key, an address and script/p2sh + + - Use of `getrawtransaction` for retrieving confirmed transactions with unspent + outputs has been deprecated. For now this will still work, but in the future + it may change to only be able to retrieve information about transactions in + the mempool or if `txindex` is enabled. + + - A new RPC command `getmemoryinfo` has been added which will return information + about the memory usage of Bitcoin Core. This was added in conjunction with + optimizations to memory management. See [Pull #8753](https://github.com/bitcoin/bitcoin/pull/8753) + for more information. + +HTTP REST Changes +----------------- + + - UTXO set query (`GET /rest/getutxos//-/- + /.../-.`) responses were changed to return status + code `HTTP_BAD_REQUEST` (400) instead of `HTTP_INTERNAL_SERVER_ERROR` (500) + when requests contain invalid parameters. + +Minimum Fee Rate Policies +------------------------- + +Since the changes in 0.12 to automatically limit the size of the mempool and improve the performance of block creation in mining code it has not been important for relay nodes or miners to set `-minrelaytxfee`. With this release the following concepts that were tied to this option have been separated out: +- incremental relay fee used for calculating BIP 125 replacement and mempool limiting. (1000 satoshis/kB) +- calculation of threshold for a dust output. (effectively 3 * 1000 satoshis/kB) +- minimum fee rate of a package of transactions to be included in a block created by the mining code. If miners wish to set this minimum they can use the new `-blockmintxfee` option. (defaults to 1000 satoshis/kB) + +The `-minrelaytxfee` option continues to exist but is recommended to be left unset. Fee Estimation Changes ---------------------- - Since 0.13.2 fee estimation for a confirmation target of 1 block has been - disabled. This is only a minor behavior change as there was often insufficient + disabled. The fee slider will no longer be able to choose a target of 1 block. + This is only a minor behavior change as there was often insufficient data for this target anyway. `estimatefee 1` will now always return -1 and `estimatesmartfee 1` will start searching at a target of 2. @@ -52,7 +256,7 @@ Fee Estimation Changes (previously 25) and for RPC calls (previously 2). Removal of Priority Estimation -------------------------------- +------------------------------ - Estimation of "priority" needed for a transaction to be included within a target number of blocks has been removed. The rpc calls are deprecated and will either @@ -61,42 +265,20 @@ Removal of Priority Estimation converted to the new format which is not readable by prior versions of the software. -- The concept of "priority" (coin age) transactions is planned to be removed in - the next major version. To prepare for this, the default for the rate limit of - priority transactions (`-limitfreerelay`) has been set to `0` kB/minute. This - is not to be confused with the `prioritisetransaction` RPC which will remain - supported for adding fee deltas to transactions. +- Support for "priority" (coin age) transaction sorting for mining is + considered deprecated in Core and will be removed in the next major version. + This is not to be confused with the `prioritisetransaction` RPC which will remain + supported by Core for adding fee deltas to transactions. P2P connection management -------------------------- -- Peers manually added through the addnode option or addnode RPC now have their own +- Peers manually added through the `-addnode` option or `addnode` RPC now have their own limit of eight connections which does not compete with other inbound or outbound - connection usage and is not subject to the maxconnections limitation. - -- New connections to manually added peers are much faster. - -Introduction of assumed-valid blocks -------------------------------------- + connection usage and is not subject to the limitation imposed by the `-maxconnections` + option. -- A significant portion of the initial block download time is spent verifying - scripts/signatures. Although the verification must pass to ensure the security - of the system, no other result from this verification is needed: If the node - knew the history of a given block were valid it could skip checking scripts - for its ancestors. - -- A new configuration option 'assumevalid' is provided to express this knowledge - to the software. Unlike the 'checkpoints' in the past this setting does not - force the use of a particular chain: chains that are consistent with it are - processed quicker, but other chains are still accepted if they'd otherwise - be chosen as best. Also unlike 'checkpoints' the user can configure which - block history is assumed true, this means that even outdated software can - sync more quickly if the setting is updated by the user. - -- Because the validity of a chain history is a simple objective fact it is much - easier to review this setting. As a result the software ships with a default - value adjusted to match the current chain shortly before release. The use - of this default value can be disabled by setting -assumevalid=0 +- New connections to manually added peers are performed more quickly. 0.14.0 Change log ================= @@ -108,14 +290,6 @@ git merge commit are mentioned. ### RPC and REST -UTXO set query (`GET /rest/getutxos//-/-/.../-.`) responses -were changed to return status code HTTP_BAD_REQUEST (400) instead of HTTP_INTERNAL_SERVER_ERROR (500) when requests -contain invalid parameters. - -The first boolean argument to `getaddednodeinfo` has been removed. This is an incompatible change. - -Call "getmininginfo" loses the "testnet" field in favor of the more generic "chain" (which has been present for years). - ### Configuration and command-line options ### Block and transaction handling @@ -128,16 +302,6 @@ Call "getmininginfo" loses the "testnet" field in favor of the more generic "cha ### Wallet -0.14.0 Fundrawtransaction change address reuse -============================================== - -Before 0.14, `fundrawtransaction` was by default wallet stateless. In almost all cases `fundrawtransaction` does add a change-output to the outputs of the funded transaction. Before 0.14, the used keypool key was never marked as change-address key and directly returned to the keypool (leading to address reuse). -Before 0.14, calling `getnewaddress` directly after `fundrawtransaction` did generate the same address as the change-output address. - -Since 0.14, fundrawtransaction does reserve the change-output-key from the keypool by default (optional by setting `reserveChangeKey`, default = `true`) - -Users should also consider using `getrawchangeaddress()` in conjunction with `fundrawtransaction`'s `changeAddress` option. - ### GUI ### Tests From 268c390d02d99a4a93a0a01221e273d2b9695ff7 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Fri, 17 Feb 2017 18:21:18 +0100 Subject: [PATCH 004/136] doc: Update manpages for 0.14.0 --- doc/man/bitcoin-cli.1 | 30 +++++++------- doc/man/bitcoin-qt.1 | 107 ++++++++++++++++++++++++++++++++------------------ doc/man/bitcoin-tx.1 | 35 ++++++++++++----- doc/man/bitcoind.1 | 107 ++++++++++++++++++++++++++++++++------------------ 4 files changed, 179 insertions(+), 100 deletions(-) diff --git a/doc/man/bitcoin-cli.1 b/doc/man/bitcoin-cli.1 index 11b690cf856..844ec40a485 100644 --- a/doc/man/bitcoin-cli.1 +++ b/doc/man/bitcoin-cli.1 @@ -1,19 +1,17 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.5. -.TH BITCOIN-CLI "1" "September 2016" "bitcoin-cli v0.13.0.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. +.TH BITCOIN-CLI "1" "February 2017" "bitcoin-cli v0.14.0.0" "User Commands" .SH NAME -bitcoin-cli \- manual page for bitcoin-cli v0.13.0.0 +bitcoin-cli \- manual page for bitcoin-cli v0.14.0.0 .SH DESCRIPTION -Bitcoin Core RPC client version v0.13.0.0 +Bitcoin Core RPC client version v0.14.0.0\-dirty .SS "Usage:" .TP bitcoin\-cli [options] [params] Send command to Bitcoin Core -.TP -bitcoin\-cli [options] help -List commands -.TP -bitcoin\-cli [options] help -Get help for a command +.IP +bitcoin\-cli [options] \fB\-named\fR [name=value] ... Send command to Bitcoin Core (with named arguments) +bitcoin\-cli [options] help List commands +bitcoin\-cli [options] help Get help for a command .SH OPTIONS .HP \-? @@ -40,6 +38,10 @@ Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. .HP +\fB\-named\fR +.IP +Pass named instead of positional arguments (default: false) +.HP \fB\-rpcconnect=\fR .IP Send commands to node running on (default: 127.0.0.1) @@ -69,7 +71,7 @@ Timeout during HTTP requests (default: 900) Read extra arguments from standard input, one per line until EOF/Ctrl\-D (recommended for sensitive information such as passphrases) .SH COPYRIGHT -Copyright (C) 2009-2016 The Bitcoin Core developers +Copyright (C) 2009-2017 The Bitcoin Core developers Please contribute if you find Bitcoin Core useful. Visit for further information about the software. @@ -77,8 +79,8 @@ The source code is available from . This is experimental software. Distributed under the MIT software license, see the accompanying file COPYING -or . +or This product includes software developed by the OpenSSL Project for use in the -OpenSSL Toolkit and cryptographic software written -by Eric Young and UPnP software written by Thomas Bernard. +OpenSSL Toolkit and cryptographic software written by +Eric Young and UPnP software written by Thomas Bernard. diff --git a/doc/man/bitcoin-qt.1 b/doc/man/bitcoin-qt.1 index 2129a151e2d..c1edae22b36 100644 --- a/doc/man/bitcoin-qt.1 +++ b/doc/man/bitcoin-qt.1 @@ -1,9 +1,9 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.5. -.TH BITCOIN-QT "1" "September 2016" "bitcoin-qt v0.13.0.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. +.TH BITCOIN-QT "1" "February 2017" "bitcoin-qt v0.14.0.0" "User Commands" .SH NAME -bitcoin-qt \- manual page for bitcoin-qt v0.13.0.0 +bitcoin-qt \- manual page for bitcoin-qt v0.14.0.0 .SH DESCRIPTION -Bitcoin Core version v0.13.0.0 (64\-bit) +Bitcoin Core version v0.14.0.0\-dirty (64\-bit) Usage: .IP bitcoin\-qt [command\-line options] @@ -27,13 +27,14 @@ long fork (%s in cmd is replaced by message) Execute command when the best block changes (%s in cmd is replaced by block hash) .HP -\fB\-checkblocks=\fR +\fB\-assumevalid=\fR .IP -How many blocks to check at startup (default: 288, 0 = all) -.HP -\fB\-checklevel=\fR -.IP -How thorough the block verification of \fB\-checkblocks\fR is (0\-4, default: 3) +If this block is in the chain assume that it and its ancestors are valid +and potentially skip their script verification (0 to verify all, +default: +00000000000000000013176bf8d7dfeab4e1db31dc93bc311b436e82ab226b90, +testnet: +00000000000128796ee387cf110ccb9d2f36cffaf7f73079c995377c65ac0dcc) .HP \fB\-conf=\fR .IP @@ -62,11 +63,16 @@ Keep the transaction memory pool below megabytes (default: 300) \fB\-mempoolexpiry=\fR .IP Do not keep transactions in the mempool longer than hours (default: -72) +336) +.HP +\fB\-blockreconstructionextratxn=\fR +.IP +Extra transactions to keep in memory for compact block reconstructions +(default: 100) .HP \fB\-par=\fR .IP -Set the number of script verification threads (\fB\-4\fR to 16, 0 = auto, <0 = +Set the number of script verification threads (\fB\-6\fR to 16, 0 = auto, <0 = leave that many cores free, default: 0) .HP \fB\-pid=\fR @@ -75,13 +81,15 @@ Specify pid file (default: bitcoind.pid) .HP \fB\-prune=\fR .IP -Reduce storage requirements by enabling pruning (deleting) of old blocks. -This allows the pruneblockchain RPC to be called to delete specific blocks, -and enables automatic pruning of old blocks if a target size in MiB is -provided. This mode is incompatible with \fB\-txindex\fR and \fB\-rescan\fR. -Warning: Reverting this setting requires re\-downloading the entire blockchain. -(default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, >550 = -automatically prune block files to stay under the specified target size in MiB) +Reduce storage requirements by enabling pruning (deleting) of old +blocks. This allows the pruneblockchain RPC to be called to +delete specific blocks, and enables automatic pruning of old +blocks if a target size in MiB is provided. This mode is +incompatible with \fB\-txindex\fR and \fB\-rescan\fR. Warning: Reverting this +setting requires re\-downloading the entire blockchain. (default: +0 = disable pruning blocks, 1 = allow manual pruning via RPC, +>550 = automatically prune block files to stay under the +specified target size in MiB) .HP \fB\-reindex\-chainstate\fR .IP @@ -123,7 +131,8 @@ for IPv6 .HP \fB\-connect=\fR .IP -Connect only to the specified node(s) +Connect only to the specified node(s); \fB\-noconnect\fR or \fB\-connect\fR=\fI\,0\/\fR alone to +disable automatic connections .HP \fB\-discover\fR .IP @@ -137,7 +146,7 @@ Allow DNS lookups for \fB\-addnode\fR, \fB\-seednode\fR and \fB\-connect\fR (def \fB\-dnsseed\fR .IP Query for peer addresses via DNS lookup, if low on addresses (default: 1 -unless \fB\-connect\fR) +unless \fB\-connect\fR/\-noconnect) .HP \fB\-externalip=\fR .IP @@ -149,7 +158,8 @@ Always query for peer addresses via DNS lookup (default: 0) .HP \fB\-listen\fR .IP -Accept connections from outside (default: 1 if no \fB\-proxy\fR or \fB\-connect\fR) +Accept connections from outside (default: 1 if no \fB\-proxy\fR or +\fB\-connect\fR/\-noconnect) .HP \fB\-listenonion\fR .IP @@ -204,6 +214,11 @@ Connect through SOCKS5 proxy Randomize credentials for every proxy connection. This enables Tor stream isolation (default: 1) .HP +\fB\-rpcserialversion\fR +.IP +Sets the serialization of raw transaction or block hex returned in +non\-verbose mode, non\-segwit(0) or segwit(1) (default: 1) +.HP \fB\-seednode=\fR .IP Connect to a node to retrieve peer addresses, and disconnect @@ -221,17 +236,22 @@ Tor control port to use if onion listening enabled (default: .IP Tor control port password (default: empty) .HP +\fB\-upnp\fR +.IP +Use UPnP to map the listening port (default: 0) +.HP \fB\-whitebind=\fR .IP Bind to given address and whitelist peers connecting to it. Use [host]:port notation for IPv6 .HP -\fB\-whitelist=\fR +\fB\-whitelist=\fR .IP -Whitelist peers connecting from the given netmask or IP address. Can be -specified multiple times. Whitelisted peers cannot be DoS banned -and their transactions are always relayed, even if they are -already in the mempool, useful e.g. for a gateway +Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or +CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple +times. Whitelisted peers cannot be DoS banned and their +transactions are always relayed, even if they are already in the +mempool, useful e.g. for a gateway .HP \fB\-whitelistrelay\fR .IP @@ -240,7 +260,7 @@ not relaying transactions (default: 1) .HP \fB\-whitelistforcerelay\fR .IP -Force relay of transactions from whitelisted peers even they violate +Force relay of transactions from whitelisted peers even if they violate local relay policy (default: 1) .HP \fB\-maxuploadtarget=\fR @@ -287,13 +307,17 @@ Spend unconfirmed change when sending transactions (default: 1) \fB\-txconfirmtarget=\fR .IP If paytxfee is not set, include enough fee so transactions begin -confirmation on average within n blocks (default: 2) +confirmation on average within n blocks (default: 6) .HP \fB\-usehd\fR .IP Use hierarchical deterministic key generation (HD) after BIP32. Only has effect during wallet creation/first start (default: 1) .HP +\fB\-walletrbf\fR +.IP +Send transactions with full\-RBF opt\-in enabled (default: 0) +.HP \fB\-upgradewallet\fR .IP Upgrade wallet to latest format on startup @@ -347,9 +371,9 @@ Append comment to the user agent string Output debugging information (default: 0, supplying is optional). If is not supplied or if = 1, output all debugging information. can be: addrman, -alert, bench, coindb, db, http, libevent, lock, mempool, -mempoolrej, net, proxy, prune, rand, reindex, rpc, selectcoins, -tor, zmq, qt. +alert, bench, cmpctblock, coindb, db, http, libevent, lock, +mempool, mempoolrej, net, proxy, prune, rand, reindex, rpc, +selectcoins, tor, zmq, qt. .HP \fB\-help\-debug\fR .IP @@ -422,6 +446,11 @@ Set maximum block size in bytes (default: 750000) .IP Set maximum size of high\-priority/low\-fee transactions in bytes (default: 0) +.HP +\fB\-blockmintxfee=\fR +.IP +Set lowest fee rate (in BTC/kB) for transactions to be included in block +creation. (default: 0.00001) .PP RPC server options: .HP @@ -455,8 +484,10 @@ Password for JSON\-RPC connections .IP Username and hashed password for JSON\-RPC connections. The field comes in the format: :$. A -canonical python script is included in share/rpcuser. This option -can be specified multiple times +canonical python script is included in share/rpcuser. The client +then connects normally using the +rpcuser=/rpcpassword= pair of arguments. This +option can be specified multiple times .HP \fB\-rpcport=\fR .IP @@ -500,7 +531,7 @@ Show splash screen on startup (default: 1) .IP Reset all settings changed in the GUI .SH COPYRIGHT -Copyright (C) 2009-2016 The Bitcoin Core developers +Copyright (C) 2009-2017 The Bitcoin Core developers Please contribute if you find Bitcoin Core useful. Visit for further information about the software. @@ -508,8 +539,8 @@ The source code is available from . This is experimental software. Distributed under the MIT software license, see the accompanying file COPYING -or . +or This product includes software developed by the OpenSSL Project for use in the -OpenSSL Toolkit and cryptographic software written -by Eric Young and UPnP software written by Thomas Bernard. +OpenSSL Toolkit and cryptographic software written by +Eric Young and UPnP software written by Thomas Bernard. diff --git a/doc/man/bitcoin-tx.1 b/doc/man/bitcoin-tx.1 index 5c4e31e7f79..73d4e4b7942 100644 --- a/doc/man/bitcoin-tx.1 +++ b/doc/man/bitcoin-tx.1 @@ -1,9 +1,9 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.5. -.TH BITCOIN-TX "1" "September 2016" "bitcoin-tx v0.13.0.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. +.TH BITCOIN-TX "1" "February 2017" "bitcoin-tx v0.14.0.0" "User Commands" .SH NAME -bitcoin-tx \- manual page for bitcoin-tx v0.13.0.0 +bitcoin-tx \- manual page for bitcoin-tx v0.14.0.0 .SH DESCRIPTION -Bitcoin Core bitcoin\-tx utility version v0.13.0.0 +Bitcoin Core bitcoin\-tx utility version v0.14.0.0\-dirty .SS "Usage:" .TP bitcoin\-tx [options] [commands] @@ -67,13 +67,28 @@ outaddr=VALUE:ADDRESS .IP Add address\-based output to TX .IP +outpubkey=VALUE:PUBKEY[:FLAGS] +.IP +Add pay\-to\-pubkey output to TX. Optionally add the "W" flag to produce a +pay\-to\-witness\-pubkey\-hash output. Optionally add the "S" flag to +wrap the output in a pay\-to\-script\-hash. +.IP outdata=[VALUE:]DATA .IP Add data\-based output to TX .IP -outscript=VALUE:SCRIPT +outscript=VALUE:SCRIPT[:FLAGS] +.IP +Add raw script output to TX. Optionally add the "W" flag to produce a +pay\-to\-witness\-script\-hash output. Optionally add the "S" flag to +wrap the output in a pay\-to\-script\-hash. +.IP +outmultisig=VALUE:REQUIRED:PUBKEYS:PUBKEY1:PUBKEY2:....[:FLAGS] .IP -Add raw script output to TX +Add Pay To n\-of\-m Multi\-sig output to TX. n = REQUIRED, m = PUBKEYS. +Optionally add the "W" flag to produce a +pay\-to\-witness\-script\-hash output. Optionally add the "S" flag to +wrap the output in a pay\-to\-script\-hash. .IP sign=SIGHASH\-FLAGS .IP @@ -92,7 +107,7 @@ set=NAME:JSON\-STRING .IP Set register NAME to given JSON\-STRING .SH COPYRIGHT -Copyright (C) 2009-2016 The Bitcoin Core developers +Copyright (C) 2009-2017 The Bitcoin Core developers Please contribute if you find Bitcoin Core useful. Visit for further information about the software. @@ -100,8 +115,8 @@ The source code is available from . This is experimental software. Distributed under the MIT software license, see the accompanying file COPYING -or . +or This product includes software developed by the OpenSSL Project for use in the -OpenSSL Toolkit and cryptographic software written -by Eric Young and UPnP software written by Thomas Bernard. +OpenSSL Toolkit and cryptographic software written by +Eric Young and UPnP software written by Thomas Bernard. diff --git a/doc/man/bitcoind.1 b/doc/man/bitcoind.1 index 47539d81319..e8c68c18edd 100644 --- a/doc/man/bitcoind.1 +++ b/doc/man/bitcoind.1 @@ -1,9 +1,9 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.5. -.TH BITCOIND "1" "September 2016" "bitcoind v0.13.0.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. +.TH BITCOIND "1" "February 2017" "bitcoind v0.14.0.0" "User Commands" .SH NAME -bitcoind \- manual page for bitcoind v0.13.0.0 +bitcoind \- manual page for bitcoind v0.14.0.0 .SH DESCRIPTION -Bitcoin Core Daemon version v0.13.0.0 +Bitcoin Core Daemon version v0.14.0.0\-dirty .SS "Usage:" .TP bitcoind [options] @@ -28,13 +28,14 @@ long fork (%s in cmd is replaced by message) Execute command when the best block changes (%s in cmd is replaced by block hash) .HP -\fB\-checkblocks=\fR +\fB\-assumevalid=\fR .IP -How many blocks to check at startup (default: 288, 0 = all) -.HP -\fB\-checklevel=\fR -.IP -How thorough the block verification of \fB\-checkblocks\fR is (0\-4, default: 3) +If this block is in the chain assume that it and its ancestors are valid +and potentially skip their script verification (0 to verify all, +default: +00000000000000000013176bf8d7dfeab4e1db31dc93bc311b436e82ab226b90, +testnet: +00000000000128796ee387cf110ccb9d2f36cffaf7f73079c995377c65ac0dcc) .HP \fB\-conf=\fR .IP @@ -67,11 +68,16 @@ Keep the transaction memory pool below megabytes (default: 300) \fB\-mempoolexpiry=\fR .IP Do not keep transactions in the mempool longer than hours (default: -72) +336) +.HP +\fB\-blockreconstructionextratxn=\fR +.IP +Extra transactions to keep in memory for compact block reconstructions +(default: 100) .HP \fB\-par=\fR .IP -Set the number of script verification threads (\fB\-4\fR to 16, 0 = auto, <0 = +Set the number of script verification threads (\fB\-6\fR to 16, 0 = auto, <0 = leave that many cores free, default: 0) .HP \fB\-pid=\fR @@ -80,13 +86,15 @@ Specify pid file (default: bitcoind.pid) .HP \fB\-prune=\fR .IP -Reduce storage requirements by enabling pruning (deleting) of old blocks. -This allows the pruneblockchain RPC to be called to delete specific blocks, -and enables automatic pruning of old blocks if a target size in MiB is -provided. This mode is incompatible with \fB\-txindex\fR and \fB\-rescan\fR. -Warning: Reverting this setting requires re\-downloading the entire blockchain. -(default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, >550 = -automatically prune block files to stay under the specified target size in MiB) +Reduce storage requirements by enabling pruning (deleting) of old +blocks. This allows the pruneblockchain RPC to be called to +delete specific blocks, and enables automatic pruning of old +blocks if a target size in MiB is provided. This mode is +incompatible with \fB\-txindex\fR and \fB\-rescan\fR. Warning: Reverting this +setting requires re\-downloading the entire blockchain. (default: +0 = disable pruning blocks, 1 = allow manual pruning via RPC, +>550 = automatically prune block files to stay under the +specified target size in MiB) .HP \fB\-reindex\-chainstate\fR .IP @@ -128,7 +136,8 @@ for IPv6 .HP \fB\-connect=\fR .IP -Connect only to the specified node(s) +Connect only to the specified node(s); \fB\-noconnect\fR or \fB\-connect\fR=\fI\,0\/\fR alone to +disable automatic connections .HP \fB\-discover\fR .IP @@ -142,7 +151,7 @@ Allow DNS lookups for \fB\-addnode\fR, \fB\-seednode\fR and \fB\-connect\fR (def \fB\-dnsseed\fR .IP Query for peer addresses via DNS lookup, if low on addresses (default: 1 -unless \fB\-connect\fR) +unless \fB\-connect\fR/\-noconnect) .HP \fB\-externalip=\fR .IP @@ -154,7 +163,8 @@ Always query for peer addresses via DNS lookup (default: 0) .HP \fB\-listen\fR .IP -Accept connections from outside (default: 1 if no \fB\-proxy\fR or \fB\-connect\fR) +Accept connections from outside (default: 1 if no \fB\-proxy\fR or +\fB\-connect\fR/\-noconnect) .HP \fB\-listenonion\fR .IP @@ -209,6 +219,11 @@ Connect through SOCKS5 proxy Randomize credentials for every proxy connection. This enables Tor stream isolation (default: 1) .HP +\fB\-rpcserialversion\fR +.IP +Sets the serialization of raw transaction or block hex returned in +non\-verbose mode, non\-segwit(0) or segwit(1) (default: 1) +.HP \fB\-seednode=\fR .IP Connect to a node to retrieve peer addresses, and disconnect @@ -226,17 +241,22 @@ Tor control port to use if onion listening enabled (default: .IP Tor control port password (default: empty) .HP +\fB\-upnp\fR +.IP +Use UPnP to map the listening port (default: 0) +.HP \fB\-whitebind=\fR .IP Bind to given address and whitelist peers connecting to it. Use [host]:port notation for IPv6 .HP -\fB\-whitelist=\fR +\fB\-whitelist=\fR .IP -Whitelist peers connecting from the given netmask or IP address. Can be -specified multiple times. Whitelisted peers cannot be DoS banned -and their transactions are always relayed, even if they are -already in the mempool, useful e.g. for a gateway +Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or +CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple +times. Whitelisted peers cannot be DoS banned and their +transactions are always relayed, even if they are already in the +mempool, useful e.g. for a gateway .HP \fB\-whitelistrelay\fR .IP @@ -245,7 +265,7 @@ not relaying transactions (default: 1) .HP \fB\-whitelistforcerelay\fR .IP -Force relay of transactions from whitelisted peers even they violate +Force relay of transactions from whitelisted peers even if they violate local relay policy (default: 1) .HP \fB\-maxuploadtarget=\fR @@ -292,13 +312,17 @@ Spend unconfirmed change when sending transactions (default: 1) \fB\-txconfirmtarget=\fR .IP If paytxfee is not set, include enough fee so transactions begin -confirmation on average within n blocks (default: 2) +confirmation on average within n blocks (default: 6) .HP \fB\-usehd\fR .IP Use hierarchical deterministic key generation (HD) after BIP32. Only has effect during wallet creation/first start (default: 1) .HP +\fB\-walletrbf\fR +.IP +Send transactions with full\-RBF opt\-in enabled (default: 0) +.HP \fB\-upgradewallet\fR .IP Upgrade wallet to latest format on startup @@ -352,9 +376,9 @@ Append comment to the user agent string Output debugging information (default: 0, supplying is optional). If is not supplied or if = 1, output all debugging information. can be: addrman, -alert, bench, coindb, db, http, libevent, lock, mempool, -mempoolrej, net, proxy, prune, rand, reindex, rpc, selectcoins, -tor, zmq. +alert, bench, cmpctblock, coindb, db, http, libevent, lock, +mempool, mempoolrej, net, proxy, prune, rand, reindex, rpc, +selectcoins, tor, zmq. .HP \fB\-help\-debug\fR .IP @@ -427,6 +451,11 @@ Set maximum block size in bytes (default: 750000) .IP Set maximum size of high\-priority/low\-fee transactions in bytes (default: 0) +.HP +\fB\-blockmintxfee=\fR +.IP +Set lowest fee rate (in BTC/kB) for transactions to be included in block +creation. (default: 0.00001) .PP RPC server options: .HP @@ -460,8 +489,10 @@ Password for JSON\-RPC connections .IP Username and hashed password for JSON\-RPC connections. The field comes in the format: :$. A -canonical python script is included in share/rpcuser. This option -can be specified multiple times +canonical python script is included in share/rpcuser. The client +then connects normally using the +rpcuser=/rpcpassword= pair of arguments. This +option can be specified multiple times .HP \fB\-rpcport=\fR .IP @@ -479,7 +510,7 @@ option can be specified multiple times .IP Set the number of threads to service RPC calls (default: 4) .SH COPYRIGHT -Copyright (C) 2009-2016 The Bitcoin Core developers +Copyright (C) 2009-2017 The Bitcoin Core developers Please contribute if you find Bitcoin Core useful. Visit for further information about the software. @@ -487,8 +518,8 @@ The source code is available from . This is experimental software. Distributed under the MIT software license, see the accompanying file COPYING -or . +or This product includes software developed by the OpenSSL Project for use in the -OpenSSL Toolkit and cryptographic software written -by Eric Young and UPnP software written by Thomas Bernard. +OpenSSL Toolkit and cryptographic software written by +Eric Young and UPnP software written by Thomas Bernard. From 42f5f212873acaf2e8af40e81cd5dc26bd18ff34 Mon Sep 17 00:00:00 2001 From: Cory Fields Date: Fri, 17 Feb 2017 12:48:04 -0500 Subject: [PATCH 005/136] release: bump gitian descriptors for a new 0.14 package cache --- contrib/gitian-descriptors/gitian-linux.yml | 2 +- contrib/gitian-descriptors/gitian-osx.yml | 2 +- contrib/gitian-descriptors/gitian-win.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/contrib/gitian-descriptors/gitian-linux.yml b/contrib/gitian-descriptors/gitian-linux.yml index 6f43119ba24..b126f83fee7 100644 --- a/contrib/gitian-descriptors/gitian-linux.yml +++ b/contrib/gitian-descriptors/gitian-linux.yml @@ -1,5 +1,5 @@ --- -name: "bitcoin-linux-0.13" +name: "bitcoin-linux-0.14" enable_cache: true suites: - "trusty" diff --git a/contrib/gitian-descriptors/gitian-osx.yml b/contrib/gitian-descriptors/gitian-osx.yml index 991976d59ea..77381b86198 100644 --- a/contrib/gitian-descriptors/gitian-osx.yml +++ b/contrib/gitian-descriptors/gitian-osx.yml @@ -1,5 +1,5 @@ --- -name: "bitcoin-osx-0.13" +name: "bitcoin-osx-0.14" enable_cache: true suites: - "trusty" diff --git a/contrib/gitian-descriptors/gitian-win.yml b/contrib/gitian-descriptors/gitian-win.yml index fe01b5b9572..0bb4f23bfe3 100644 --- a/contrib/gitian-descriptors/gitian-win.yml +++ b/contrib/gitian-descriptors/gitian-win.yml @@ -1,5 +1,5 @@ --- -name: "bitcoin-win-0.13" +name: "bitcoin-win-0.14" enable_cache: true suites: - "trusty" From 871e19ac84ae71b3d22928d5cb3bbf4f0f013b07 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Fri, 17 Feb 2017 19:27:35 +0100 Subject: [PATCH 006/136] doc: Add list of authors to release notes Generated from git, so there may be duplicate authors if someone used multiple mail addresses. --- doc/release-notes.md | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/doc/release-notes.md b/doc/release-notes.md index f83b0ce8fc9..5d14c99dece 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -313,5 +313,105 @@ Credits Thanks to everyone who directly contributed to this release: +- accraze +- adlawren +- Alex Morcos +- Alexey Vesnin +- Amir Abrams +- Anders Øyvind Urke-Sætre +- Anditto Heristyo +- Andrew Chow +- anduck +- Anthony Towns +- Brian Deery +- BtcDrak +- Chris Moore +- Chris Stewart +- Christian Barcenas +- Christian Decker +- Cory Fields +- crowning- +- CryptAxe +- CryptoVote +- Dagur Valberg Johannsson +- Daniel Cousens +- Daniel Kraft +- Derek Miller +- djpnewton +- Don Patterson +- Doug +- Douglas Roark +- Ethan Heilman +- fsb4000 +- Gaurav Rana +- Geoffrey Tsui +- Greg Walker +- Gregory Maxwell +- Gregory Sanders +- Hampus Sjöberg +- instagibbs +- isle2983 +- Ivo van der Sangen +- James White +- Jameson Lopp +- Jeremy Rubin +- Jiaxing Wang +- jnewbery +- John Newbery +- Johnson Lau +- Jon Lund Steffensen +- Jonas Schnelli +- jonnynewbs +- Jorge Timón +- Justin Camarena +- Karl-Johan Alm +- Kaz Wesley +- Koki Takahashi +- Lauda +- leijurv +- lizhi +- Luke Dashjr +- maiiz +- MarcoFalke +- Marty Jones +- Masahiko Hyuga +- Matt Corallo +- Matthew King +- matthias +- Micha +- Michael Ford +- Michael Rotarius +- Mitchell Cash +- mrbandrews +- mruddy +- Nicolas DORIER +- NicolasDorier +- nomnombtc +- Patrick Strateman +- Pavel Janík +- Pedro Branco +- Peter Todd +- Pieter Wuille +- poole\_party +- practicalswift +- R E Broadley +- randy-waterhouse +- Richard Kiss +- Robert McLaughlin +- rodasmith +- Russell Yanofsky +- S. Matthew English +- Sev +- Spencer Lievens +- Stanislas Marion +- Steven +- Suhas Daftuar +- Thomas Snider +- UdjinM6 +- unsystemizer +- whythat +- Will Binns +- Wladimir J. van der Laan +- wodry As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). From 1577f0731a7bf0b9486ccf757cae4e0d4f478279 Mon Sep 17 00:00:00 2001 From: Gregory Maxwell Date: Fri, 17 Feb 2017 18:50:01 +0000 Subject: [PATCH 007/136] Restore removed release notes. --- doc/release-notes.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/doc/release-notes.md b/doc/release-notes.md index 5d14c99dece..c23f7ff0c14 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -280,6 +280,46 @@ P2P connection management - New connections to manually added peers are performed more quickly. +Introduction of assumed-valid blocks +------------------------------------- + +- A significant portion of the initial block download time is spent verifying + scripts/signatures. Although the verification must pass to ensure the security + of the system, no other result from this verification is needed: If the node + knew the history of a given block were valid it could skip checking scripts + for its ancestors. + +- A new configuration option 'assumevalid' is provided to express this knowledge + to the software. Unlike the 'checkpoints' in the past this setting does not + force the use of a particular chain: chains that are consistent with it are + processed quicker, but other chains are still accepted if they'd otherwise + be chosen as best. Also unlike 'checkpoints' the user can configure which + block history is assumed true, this means that even outdated software can + sync more quickly if the setting is updated by the user. + +- Because the validity of a chain history is a simple objective fact it is much + easier to review this setting. As a result the software ships with a default + value adjusted to match the current chain shortly before release. The use + of this default value can be disabled by setting -assumevalid=0 + +Fundrawtransaction change address reuse +---------------------------------------- + +- Before 0.14, `fundrawtransaction` was by default wallet stateless. In + almost all cases `fundrawtransaction` does add a change-output to the + outputs of the funded transaction. Before 0.14, the used keypool key was + never marked as change-address key and directly returned to the keypool + (leading to address reuse). Before 0.14, calling `getnewaddress` + directly after `fundrawtransaction` did generate the same address as + the change-output address. + +- Since 0.14, fundrawtransaction does reserve the change-output-key from + the keypool by default (optional by setting `reserveChangeKey`, default = + `true`) + +- Users should also consider using `getrawchangeaddress()` in conjunction + with `fundrawtransaction`'s `changeAddress` option. + 0.14.0 Change log ================= From 618709141147f74771da0795cf0dccb47c606d24 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Fri, 17 Feb 2017 21:44:05 +0100 Subject: [PATCH 008/136] doc: Add changelog for 0.14.0 to release notes --- doc/release-notes.md | 386 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 376 insertions(+), 10 deletions(-) diff --git a/doc/release-notes.md b/doc/release-notes.md index 5d14c99dece..bae09c77148 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -284,29 +284,395 @@ P2P connection management ================= Detailed release notes follow. This overview includes changes that affect -behavior, not code moves, refactors and string updates. For convenience in locating -the code changes and accompanying discussion, both the pull request and -git merge commit are mentioned. - -### RPC and REST - -### Configuration and command-line options +behavior, not code moves, minor refactors and string updates. For convenience +in locating the code changes and accompanying discussion, both the pull request +and git merge commit are mentioned. + +### RPC and other APIs +- #8421 `b77bb95` httpserver: drop boost dependency (theuni) +- #8638 `f061415` rest.cpp: change `HTTP_INTERNAL_SERVER_ERROR` to `HTTP_BAD_REQUEST` (djpnewton) +- #8272 `91990ee` Make the dummy argument to getaddednodeinfo optional (sipa) +- #8722 `bb843ad` bitcoin-cli: More detailed error reporting (laanwj) +- #6996 `7f71a3c` Add preciousblock RPC (sipa) +- #8788 `97c7f73` Give RPC commands more information about the RPC request (jonasschnelli) +- #7948 `5d2c8e5` Augment getblockchaininfo bip9\_softforks data (mruddy) +- #8980 `0e22855` importmulti: Avoid using boost::variant::operator!=, which is only in newer boost versions (luke-jr) +- #9087 `924de0b` Give more details when "generate" fails (jtimon) +- #9025 `4d8558a` Getrawtransaction should take a bool for verbose (jnewbery) +- #8811 `5754e03` Add support for JSON-RPC named arguments (laanwj) +- #9520 `2456a83` Deprecate non-txindex getrawtransaction and better warning (sipa) +- #9518 `a65ced1` Return height of last block pruned by pruneblockchain RPC (ryanofsky) +- #9222 `7cb024e` Add 'subtractFeeFromAmount' option to 'fundrawtransaction' (dooglus) +- #8456 `2ef52d3` Simplified `bumpfee` command (mrbandrews) +- #9516 `727a798` Bug-fix: listsinceblock: use fork point as reference for blocks in reorg'd chains (kallewoof) +- #9640 `7bfb770` Bumpfee: bugfixes for error handling and feerate calculation (sdaftuar) +- #9673 `8d6447e` Set correct metadata on bumpfee wallet transactions (ryanofsky) +- #9650 `40f7e27` Better handle invalid parameters to signrawtransaction (TheBlueMatt) +- #9682 `edc9e63` Require timestamps for importmulti keys (ryanofsky) +- #9108 `d8e8b06` Use importmulti timestamp when importing watch only keys (on top of #9682) (ryanofsky) +- #9756 `7a93af8` Return error when importmulti called with invalid address (ryanofsky) +- #9778 `ad168ef` Add two hour buffer to manual pruning (morcos) +- #9761 `9828f9a` Use 2 hour grace period for key timestamps in importmulti rescans (ryanofsky) +- #9474 `48d7e0d` Mark the minconf parameter to move as ignored (sipa) ### Block and transaction handling +- #8391 `37d83bb` Consensus: Remove ISM (NicolasDorier) +- #8365 `618c9dd` Treat high-sigop transactions as larger rather than rejecting them (sipa) +- #8814 `14b7b3f` wallet, policy: ParameterInteraction: Don't allow 0 fee (MarcoFalke) +- #8515 `9bdf526` A few mempool removal optimizations (sipa) +- #8448 `101c642` Store mempool and prioritization data to disk (sipa) +- #7730 `3c03dc2` Remove priority estimation (morcos) +- #9111 `fb15610` Remove unused variable `UNLIKELY_PCT` from fees.h (fanquake) +- #9133 `434e683` Unset fImporting for loading mempool (morcos) +- #9179 `b9a87b4` Set `DEFAULT_LIMITFREERELAY` = 0 kB/minute (MarcoFalke) +- #9239 `3fbf079` Disable fee estimates for 1-block target (morcos) +- #7562 `1eef038` Bump transaction version default to 2 (btcdrak) +- #9313,#9367 If we don't allow free txs, always send a fee filter (morcos) +- #9346 `b99a093` Batch construct batches (sipa) +- #9262 `5a70572` Prefer coins that have fewer ancestors, sanity check txn before ATMP (instagibbs) +- #9288 `1ce7ede` Fix a bug if the min fee is 0 for FeeFilterRounder (morcos) +- #9395 `0fc1c31` Add test for `-walletrejectlongchains` (morcos) +- #9107 `7dac1e5` Safer modify new coins (morcos) +- #9312 `a72f76c` Increase mempool expiry time to 2 weeks (morcos) +- #8610 `c252685` Share unused mempool memory with coincache (sipa) +- #9138 `f646275` Improve fee estimation (morcos) +- #9408 `46b249e` Allow shutdown during LoadMempool, dump only when necessary (jonasschnelli) +- #9310 `8c87f17` Assert FRESH validity in CCoinsViewCache::BatchWrite (ryanofsky) +- #7871 `e2e624d` Manual block file pruning (mrbandrews) +- #9507 `0595042` Fix use-after-free in CTxMemPool::removeConflicts() (sdaftuar) +- #9380 `dd98f04` Separate different uses of minimum fees (morcos) +- #9596 `71148b8` bugfix save feeDelta instead of priorityDelta in DumpMempool (morcos) +- #9371 `4a1dc35` Notify on removal (morcos) +- #9519 `9b4d267` Exclude RBF replacement txs from fee estimation (morcos) +- #8606 `e2a1a1e` Fix some locks (sipa) +- #8681 `6898213` Performance Regression Fix: Pre-Allocate txChanged vector (JeremyRubin) +- #8223 `744d265` c++11: Use std::unique\_ptr for block creation (domob1812) +- #9125 `7490ae8` Make CBlock a vector of shared\_ptr of CTransactions (sipa) +- #8930 `93566e0` Move orphan processing to ActivateBestChain (TheBlueMatt) +- #8580 `46904ee` Make CTransaction actually immutable (sipa) +- #9240 `a1dcf2e` Remove txConflicted (morcos) +- #8589 `e8cfe1e` Inline CTxInWitness inside CTxIn (sipa) +- #9349 `2db4cbc` Make CScript (and prevector) c++11 movable (sipa) +- #9252 `ce5c1f4` Release cs\_main before calling ProcessNewBlock, or processing headers (cmpctblock handling) (sdaftuar) +- #9283 `869781c` A few more CTransactionRef optimizations (sipa) +- #9499 `9c9af5a` Use recent-rejects, orphans, and recently-replaced txn for compact-block-reconstruction ### P2P protocol and network code +- #8128 `1030fa7` Turn net structures into dumb storage classes (theuni) +- #8282 `026c6ed` Feeler connections to increase online addrs in the tried table (EthanHeilman) +- #8462 `53f8f22` Move AdvertiseLocal debug output to net category (Mirobit) +- #8612 `84decb5` Check for compatibility with download in FindNextBlocksToDownload (sipa) +- #8594 `5b2ea29` Do not add random inbound peers to addrman (gmaxwell) +- #8085 `6423116` Begin encapsulation (theuni) +- #8715 `881d7ea` only delete CConnman if it's been created (theuni) +- #8707 `f07424a` Fix maxuploadtarget setting (theuni) +- #8661 `d2e4655` Do not set an addr time penalty when a peer advertises itself (gmaxwell) +- #8822 `9bc6a6b` Consistent checksum handling (laanwj) +- #8936 `1230890` Report NodeId in misbehaving debug (rebroad) +- #8968 `3cf496d` Don't hold cs\_main when calling ProcessNewBlock from a cmpctblock (TheBlueMatt) +- #9002 `e1d1f57` Make connect=0 disable automatic outbound connections (gmaxwell) +- #9050 `fcf61b8` Make a few values immutable, and use deterministic randomness for the localnonce (theuni) +- #8969 `3665483` Decouple peer-processing-logic from block-connection-logic (#2) (TheBlueMatt) +- #8708 `c8c572f` have CConnman handle message sending (theuni) +- #8709 `1e50d22` Allow filterclear messages for enabling TX relay only (rebroad) +- #9045 `9f554e0` Hash P2P messages as they are received instead of at process-time (TheBlueMatt) +- #9026 `dc6b940` Fix handling of invalid compact blocks (sdaftuar) +- #8996 `ab914a6` Network activity toggle (luke-jr) +- #9131 `62af164` fNetworkActive is not protected by a lock, use an atomic (jonasschnelli) +- #8872 `0c577f2` Remove block-request logic from INV message processing (TheBlueMatt) +- #8690 `791b58d` Do not fully sort all nodes for addr relay (sipa) +- #9128 `76fec09` Decouple CConnman and message serialization (theuni) +- #9226 `3bf06e9` Remove fNetworkNode and pnodeLocalHost (gmaxwell) +- #9352 `a7f7651` Attempt reconstruction from all compact block announcements (sdaftuar) +- #9319 `a55716a` Break addnode out from the outbound connection limits (gmaxwell) +- #9261 `2742568` Add unstored orphans with rejected parents to recentRejects (morcos) +- #9441 `8b66bf7` Massive speedup. Net locks overhaul (theuni) +- #9375 `3908fc4` Relay compact block messages prior to full block connection (TheBlueMatt) +- #9400 `8a445c5` Set peers as HB peers upon full block validation (instagibbs) +- #9561 `6696b46` Wake message handling thread when we receive a new block (TheBlueMatt) +- #9535 `82274c0` Split CNode::cs\_vSend: message processing and message sending (TheBlueMatt) +- #9606 `3f9f962` Consistently use GetTimeMicros() for inactivity checks (sdaftuar) +- #9594 `fd70211` Send final alert message to older peers after connecting (gmaxwell) +- #9626 `36966a1` Clean up a few CConnman cs\_vNodes/CNode things (TheBlueMatt) +- #9609 `4966917` Fix remaining net assertions (theuni) +- #9671 `7821db3` Fix super-unlikely race introduced in 236618061a445d2cb11e72 (TheBlueMatt) +- #9730 `33f3b21` Remove bitseed.xf2.org form the dns seed list (jonasschnelli) +- #9698 `2447c10` Fix socket close race (theuni) +- #9708 `a06ede9` Clean up all known races/platform-specific UB at the time PR was opened (TheBlueMatt) +- #9715 `b08656e` Disconnect peers which we do not receive VERACKs from within 60 sec (TheBlueMatt) +- #9720 `e87ce95` Fix banning and disallow sending messages before receiving verack (theuni) +- #9268 `09c4fd1` Fix rounding privacy leak introduced in #9260 (TheBlueMatt) +- #9075 `9346f84` Decouple peer-processing-logic from block-connection-logic (#3) (TheBlueMatt) +- #8688 `047ded0` Move static global randomizer seeds into CConnman (sipa) +- #9289 `d9ae1ce` net: drop boost::thread\_group (theuni) ### Validation +- #9014 `d04aeba` Fix block-connection performance regression (TheBlueMatt) +- #9299 `d52ce89` Remove no longer needed check for premature v2 txs (morcos) +- #9273 `b68685a` Remove unused `CDiskBlockPos*` argument from ProcessNewBlock (TheBlueMatt) +- #8895 `b83264d` Better SigCache Implementation (JeremyRubin) +- #9490 `e126d0c` Replace FindLatestBefore used by importmulti with FindEarliestAtLeast (gmaxwell) +- #9484 `812714f` Introduce assumevalid setting to skip validation presumed valid scripts (gmaxwell) +- #9511 `7884956` Don't overwrite validation state with corruption check (morcos) +- #9765 `1e92e04` Harden against mistakes handling invalid blocks (sdaftuar) +- #9779 `3c02b95` Update nMinimumChainWork and defaultAssumeValid (gmaxwell) +- #8524 `19b0f33` Precompute sighashes (sipa) ### Build system - -### Wallet +- #8238 `6caf3ee` ZeroMQ 4.1.5 && ZMQ on Windows (fanquake) +- #8520 `b40e19c` Remove check for `openssl/ec.h` (laanwj) +- #8617 `de07fdc` Include instructions to extract Mac OS X SDK on Linux using 7zip and SleuthKit (luke-jr) +- #8566 `7b98895` Easy to use gitian building script (achow101) +- #8604 `f256843` build,doc: Update for 0.13.0+ and OpenBSD 5.9 (laanwj) +- #8640 `2663e51` depends: Remove Qt46 package (fanquake) +- #8645 `8ea4440` Remove unused Qt 4.6 patch (droark) +- #8608 `7e9ab95` Install manpages via make install, also add some autogenerated manpages (nomnombtc) +- #8781 `ca69ef4` contrib: delete `qt_translations.py` (MarcoFalke) +- #8783 `64dc645` share: remove qt/protobuf.pri (MarcoFalke) +- #8423 `3166dff` depends: expat 2.2.0, ccache 3.3.1, fontconfig 2.12.1 (fanquake) +- #8791 `b694b0d` travis: cross-mac: explicitly enable gui (MarcoFalke) +- #8820 `dc64141` depends: Fix Qt compilation with Xcode 8 (fanquake) +- #8730 `489a6ab` depends: Add libevent compatibility patch for windows (laanwj) +- #8819 `c841816` depends: Boost 1.61.0 (fanquake) +- #8826 `f560d95` Do not include `env_win.cc` on non-Windows systems (paveljanik) +- #8948 `e077e00` Reorder Windows gitian build order to match Linux (Michagogo) +- #8568 `078900d` new var `DIST_CONTRIB` adds useful things for packagers from contrib (nomnombtc) +- #9114 `21e6c6b` depends: Set `OSX_MIN_VERSION` to 10.8 (fanquake) +- #9140 `018a4eb` Bugfix: Correctly replace generated headers and fail cleanly (luke-jr) +- #9156 `a8b2a82` Add compile and link options echo to configure (jonasschnelli) +- #9393 `03d85f6` Include cuckoocache header in Makefile (MarcoFalke) +- #9420 `bebe369` Fix linker error when configured with --enable-lcov (droark) +- #9412 `53442af` Fix 'make deploy' for OSX (jonasschnelli) +- #9475 `7014506` Let autoconf detect presence of `EVP_MD_CTX_new` (luke-jr) +- #9513 `bbf193f` Fix qt distdir builds (theuni) +- #9471 `ca615e6` depends: libevent 2.1.7rc (fanquake) +- #9468 `f9117f2` depends: Dependency updates for 0.14.0 (fanquake) +- #9469 `01c4576` depends: Qt 5.7.1 (fanquake) +- #9574 `5ac6687` depends: Fix QT build on OSX (fanquake) +- #9646 `720b579` depends: Fix cross build for qt5.7 (theuni) +- #9705 `6a55515` Add options to override BDB cflags/libs (laanwj) +- #8249 `4e1567a` Enable (and check for) 64-bit ASLR on Windows (laanwj) +- #9758 `476cc47` Selectively suppress deprecation warnings (jonasschnelli) +- #9783 `6d61a2b` release: bump gitian descriptors for a new 0.14 package cache (theuni) ### GUI +- #8192 `c503863` Remove URLs from About dialog translations (fanquake) +- #8540 `36404ae` Fix random segfault when closing "Choose data directory" dialog (laanwj) +- #8517 `2468292` Show wallet HD state in statusbar (jonasschnelli) +- #8463 `62a5a8a` Remove Priority from coincontrol dialog (MarcoFalke) +- #7579 `0606f95` Show network/chain errors in the GUI (jonasschnelli) +- #8583 `c19f8a4` Show XTHIN in GUI (rebroad) +- #7783 `4335d5a` RPC-Console: support nested commands and simple value queries (jonasschnelli) +- #8672 `6052d50` Show transaction size in transaction details window (Cocosoft) +- #8777 `fec6af7` WalletModel: Expose disablewallet (MarcoFalke) +- #8371 `24f72e9` Add out-of-sync modal info layer (jonasschnelli) +- #8885 `b2fec4e` Fix ban from qt console (theuni) +- #8821 `bf8e68a` sync-overlay: Don't block during reindex (MarcoFalke) +- #8906 `088d1f4` sync-overlay: Don't show progress twice (MarcoFalke) +- #8918 `47ace42` Add "Copy URI" to payment request context menu (luke-jr) +- #8925 `f628d9a` Display minimum ping in debug window (rebroad) +- #8774 `3e942a7` Qt refactors to better abstract wallet access (luke-jr) +- #8985 `7b1bfa3` Use pindexBestHeader instead of setBlockIndexCandidates for NotifyHeaderTip() (jonasschnelli) +- #8989 `d2143dc` Overhaul smart-fee slider, adjust default confirmation target (jonasschnelli) +- #9043 `273bde3` Return useful error message on ATMP failure (MarcoFalke) +- #9088 `4e57824` Reduce ambiguity of warning message (rebroad) +- #8874 `e984730` Multiple Selection for peer and ban tables (achow101) +- #9145 `924745d` Make network disabled icon 50% opaque (MarcoFalke) +- #9130 `ac489b2` Mention the new network toggle functionality in the tooltip (paveljanik) +- #9218 `4d955fc` Show progress overlay when clicking spinner icon (laanwj) +- #9280 `e15660c` Show ModalOverlay by pressing the progress bar, allow hiding (jonasschnelli) +- #9296 `fde7d99` Fix missed change to WalletTx structure (morcos) +- #9266 `2044e37` Bugfix: Qt/RPCConsole: Put column enum in the right places (luke-jr) +- #9255 `9851a84` layoutAboutToChange signal is called layoutAboutToBeChanged (laanwj) +- #9330 `47e6a19` Console: add security warning (jonasschnelli) +- #9329 `db45ad8` Console: allow empty arguments (jonasschnelli) +- #8877 `6dc4c43` Qt RPC console: history sensitive-data filter, and saving input line when browsing history (luke-jr) +- #9462 `649cf5f` Do not translate tilde character (MarcoFalke) +- #9457 `123ea73` Select more files for translation (MarcoFalke) +- #9413 `fd7d8c7` CoinControl: Allow non-wallet owned change addresses (jonasschnelli) +- #9461 `b250686` Improve progress display during headers-sync and peer-finding (jonasschnelli) +- #9588 `5086452` Use nPowTargetSpacing constant (MarcoFalke) +- #9637 `d9e4d1d` Fix transaction details output-index to reflect vout index (jonasschnelli) +- #9718 `36f9d3a` Qt/Intro: Various fixes (luke-jr) +- #9735 `ec66d06` devtools: Handle Qt formatting characters edge-case in update-translations.py (laanwj) +- #9755 `a441db0` Bugfix: Qt/Options: Restore persistent "restart required" notice (luke-jr) -### Tests +### Wallet +- #8367 `045106b` Ensure <0.13 clients can't open HD wallets (jonasschnelli) +- #8152 `b9c1cd8` Remove `CWalletDB*` parameter from CWallet::AddToWallet (pstratem) +- #8432 `c7e05b3` Make CWallet::fFileBacked private (pstratem) +- #8445 `f916700` Move CWallet::setKeyPool to private section of CWallet (pstratem) +- #8564 `0168019` Remove unused code/conditions in ReadAtCursor (jonasschnelli) +- #8601 `37ac678` Add option to opt into full-RBF when sending funds (rebase, original by petertodd) (laanwj) +- #8494 `a5b20ed` init, wallet: ParameterInteraction() iff wallet enabled (MarcoFalke) +- #8760 `02ac669` init: Get rid of some `ENABLE_WALLET` (MarcoFalke) +- #8696 `a1f8d3e` Wallet: Remove last external reference to CWalletDB (pstratem) +- #8768 `886e8c9` init: Get rid of fDisableWallet (MarcoFalke) +- #8486 `ab0b411` Add high transaction fee warnings (MarcoFalke) +- #8851 `940748b` Move key derivation logic from GenerateNewKey to DeriveNewChildKey (pstratem) (MarcoFalke) +- #8287 `e10af96` Set fLimitFree = true (MarcoFalke) +- #8928 `c587577` Fix init segfault where InitLoadWallet() calls ATMP before genesis (TheBlueMatt) +- #7551 `f2d7056` Add importmulti RPC call (pedrobranco) +- #9016 `0dcb888` Return useful error message on ATMP failure (instagibbs) +- #8753 `f8723d2` Locked memory manager (laanwj) +- #8828 `a4fd8df` Move CWalletDB::ReorderTransactions to CWallet (pstratem) +- #8977 `6a1343f` Refactor wallet/init interaction (Reaccept wtx, flush thread) (jonasschnelli) +- #9036 `ed0cc50` Change default confirm target from 2 to 6 (laanwj) +- #9071 `d1871da` Declare wallet.h functions inline (sipa) +- #9132 `f54e460` Make strWalletFile const (jonasschnelli) +- #9141 `5ea5e04` Remove unnecessary calls to CheckFinalTx (jonasschnelli) +- #9165 `c01f16a` SendMoney: use already-calculated balance (instagibbs) +- #9311 `a336d13` Flush wallet after abandontransaction (morcos) +- #8717 `38e4887` Addition of ImmatureCreditCached to MarkDirty() (spencerlievens) +- #9446 `510c0d9` SetMerkleBranch: remove unused code, remove cs\_main lock requirement (jonasschnelli) +- #8776 `2a524b8` Wallet refactoring leading up to multiwallet (luke-jr) +- #9465 `a7d55c9` Do not perform ECDSA signing in the fee calculation inner loop (gmaxwell) +- #9404 `12e3112` Smarter coordination of change and fee in CreateTransaction (morcos) +- #9377 `fb75cd0` fundrawtransaction: Keep change-output keys by default, make it optional (jonasschnelli) +- #9578 `923dc44` Add missing mempool lock for CalculateMemPoolAncestors (TheBlueMatt) +- #9227 `02464da` Make nWalletDBUpdated atomic to avoid a potential race (pstratem) +- #9764 `f8af89a` Prevent "overrides a member function but is not marked 'override'" warnings (laanwj) +- #9771 `e43a585` Add missing cs\_wallet lock that triggers new lock held assertion (ryanofsky) +- #9316 `3097ea4` Disable free transactions when relay is disabled (MarcoFalke) +- #9615 `d2c9e4d` Wallet incremental fee (morcos) + +### Tests and QA +- #8270 `6e5e5ab` Tests: Use portable #! in python scripts (/usr/bin/env) (ChoHag) +- #8534,#8504 Remove java comparison tool (laanwj,MarcoFalke) +- #8482 `740cff5` Use single cache dir for chains (MarcoFalke) +- #8450 `21857d2` Replace `rpc_wallet_tests.cpp` with python RPC unit tests (pstratem) +- #8671 `ddc3080` Minimal fix to slow prevector tests as stopgap measure (JeremyRubin) +- #8680 `666eaf0` Address Travis spurious failures (theuni) +- #8789 `e31a43c` pull-tester: Only print output when failed (MarcoFalke) +- #8810 `14e8f99` tests: Add exception error message for JSONRPCException (laanwj) +- #8830 `ef0801b` test: Add option to run bitcoin-util-test.py manually (jnewbery) +- #8881 `e66cc1d` Add some verbose logging to bitcoin-util-test.py (jnewbery) +- #8922 `0329511` Send segwit-encoded blocktxn messages in p2p-compactblocks (TheBlueMatt) +- #8873 `74dc388` Add microbenchmarks to profile more code paths (ryanofsky) +- #9032 `6a8be7b` test: Add format-dependent comparison to bctest (laanwj) +- #9023 `774db92` Add logging to bitcoin-util-test.py (jnewbery) +- #9065 `c9bdf9a` Merge `doc/unit-tests.md` into `src/test/README.md` (laanwj) +- #9069 `ed64bce` Clean up bctest.py and bitcoin-util-test.py (jnewbery) +- #9095 `b8f43e3` test: Fix test\_random includes (MarcoFalke) +- #8894 `faec09b` Testing: Include fRelay in mininode version messages (jnewbery) +- #9097 `e536499` Rework `sync_*` and preciousblock.py (MarcoFalke) +- #9049 `71bc39e` Remove duplicatable duplicate-input check from CheckTransaction (TheBlueMatt) +- #9136 `b422913` sync\_blocks cleanup (ryanofsky) +- #9151 `4333b1c` proxy\_test: Calculate hardcoded port numbers (MarcoFalke) +- #9206 `e662d28` Make test constant consistent with consensus.h (btcdrak) +- #9139 `0de7fd3` Change sync\_blocks to pick smarter maxheight (on top of #9196) (ryanofsky) +- #9100 `97ec6e5` tx\_valid: re-order inputs to how they are encoded (dcousens) +- #9202 `e56cf67` bench: Add support for measuring CPU cycles (laanwj) +- #9223 `5412c08` unification of Bloom filter representation (s-matthew-english) +- #9257 `d7ba4a2` Dump debug logs on travis failures (sdaftuar) +- #9221 `9e4bb31` Get rid of duplicate code (MarcoFalke) +- #9274 `919db03` Use cached utxo set to fix performance regression (MarcoFalke) +- #9276 `ea33f19` Some minor testing cleanups (morcos) +- #9291 `8601784` Remove mapOrphanTransactionsByPrev from DoS\_tests (sipa) +- #9309 `76fcd9d` Wallet needs to stay unlocked for whole test (morcos) +- #9172 `5bc209c` Resurrect pstratem's "Simple fuzzing framework" (laanwj) +- #9331 `c6fd923` Add test for rescan feature of wallet key import RPCs (ryanofsky) +- #9354 `b416095` Make fuzzer actually test CTxOutCompressor (sipa) +- #9390,#9416 travis: make distdir (MarcoFalke) +- #9308 `0698639` test: Add CCoinsViewCache Access/Modify/Write tests (ryanofsky) +- #9406 `0f921e6` Re-enable a blank v1 Tx JSON test (droark) +- #9435 `dbc8a8c` Removed unused variable in test, fixing warning (ryanofsky) +- #9436 `dce853e` test: Include tx data in `EXTRA_DIST` (MarcoFalke) +- #9525 `02e5308` test: Include tx data in `EXTRA_DIST` (MarcoFalke) +- #9498 `054d664` Basic CCheckQueue Benchmarks (JeremyRubin) +- #9554 `0b96abc` test: Avoid potential NULL pointer dereference in `addrman_tests.cpp` (practicalswift) +- #9628 `f895023` Increase a sync\_blocks timeout in pruning.py (sdaftuar) +- #9638 `a7ea2f8` Actually test assertions in pruning.py (MarcoFalke) +- #9647 `e99f0d7` Skip RAII event tests if libevent is built without `event_set_mem_functions` (luke-jr) +- #9691 `fc67cd2` Init ECC context for `test_bitcoin_fuzzy` (gmaxwell) +- #9712 `d304fef` bench: Fix initialization order in registration (laanwj) +- #9707 `b860915` Fix RPC failure testing (jnewbery) +- #8621 `e8ed6eb` contrib: python: Don't use shell=True (MarcoFalke) +- #9269 `43e8150` Align struct COrphan definition (sipa) + +### Documentation +- #8332 `806b9e7` Clarify witness branches in transaction.h serialization (dcousens) +- #8935 `0306978` Documentation: Building on Windows with WSL (pooleja) +- #9144 `c98f6b3` Correct waitforblockheight example help text (fanquake) +- #9407 `041331e` Added missing colons in when running help command (anditto) +- #9378 `870cd2b` Add documentation for CWalletTx::fFromMe member (ryanofsky) +- #9297 `0b73807` Various RPC help outputs updated (Mirobit) +- #9613 `07421cf` Clarify getbalance help string to explain interaction with bumpfee (ryanofsky) +- #9663 `e30d928` Clarify listunspent amount description (instagibbs) +- #9396 `d65a13b` Updated listsinceblock rpc documentation (accraze) +- #8747 `ce43630` rpc: Fix transaction size comments and RPC help text (jnewbery) +- #8058 `bbd9740` Doc: Add issue template (AmirAbrams) +- #8567 `85d4e21` Add default port numbers to REST doc (djpnewton) +- #8624 `89de153` build: Mention curl (MarcoFalke) +- #8786 `9da7366` Mandatory copyright agreement (achow101) +- #8823 `7b05af6` Add privacy recommendation when running hidden service (laanwj) +- #9433 `caa2f10` Update the Windows build notes (droark) +- #8879 `f928050` Rework docs (MarcoFalke) +- #8887 `61d191f` Improve GitHub issue template (fanquake) +- #8787 `279bbad` Add missing autogen to example builds (AmirAbrams) +- #8892 `d270c30` Add build instructions for FreeBSD (laanwj) +- #8890 `c71a654` Update Doxygen configuration file (fanquake) +- #9207 `fa1f944` Move comments above bash command in build-unix (AmirAbrams) +- #9219 `c4522e7` Improve windows build instructions using Linux subsystem (laanwj) +- #8954 `932d02a` contrib: Add README for pgp keys (MarcoFalke) +- #9093 `2fae5b9` release-process: Mention GitHub release and archived release notes (MarcoFalke) +- #8743 `bae178f` Remove old manpages from contrib/debian in favour of doc/man (fanquake) +- #9550 `4105cb6` Trim down the XP notice and say more about what we support (gmaxwell) +- #9246 `9851498` Developer docs about existing subtrees (gmaxwell) +- #9401 `c2ea1e6` Make rpcauth help message clearer, add example in example .conf (instagibbs) +- #9022,#9033 Document dropping OS X 10.7 support (fanquake, MarcoFalke) +- #8771 `bc9e3ab` contributing: Mention not to open several pulls (luke-jr) +- #8852 `7b784cc` Mention Gitian building script in doc (Laudaa) (laanwj) +- #8915 `03dd707` Add copyright/patent issues to possible NACK reasons (petertodd) +- #8965 `23e03f8` Mention that PPA doesn't support Debian (anduck) +- #9115 `bfc7aad` Mention reporting security issues responsibly (paveljanik) ### Miscellaneous +- #8274 `7a2d402` util: Update tinyformat (laanwj) +- #8291 `5cac8b1` util: CopyrightHolders: Check for untranslated substitution (MarcoFalke) +- #8557 `44691f3` contrib: Rework verifybinaries (MarcoFalke) +- #8813 `fb24d7e` bitcoind: Daemonize using daemon(3) (laanwj) +- #9004 `67728a3` Clarify `listenonion` (unsystemizer) +- #8674 `bae81b8` tools for analyzing, updating and adding copyright headers in source files (isle2983) +- #8976 `8c6218a` libconsensus: Add input validation of flags (laanwj) +- #9112 `46027e8` Avoid ugly exception in log on unknown inv type (laanwj) +- #8837 `2108911` Allow bitcoin-tx to parse partial transactions (jnewbery) +- #9204 `74ced54` Clarify CreateTransaction error messages (instagibbs) +- #9265 `31bcc66` bitcoin-cli: Make error message less confusing (laanwj) +- #9303 `72bf1b3` Update comments in ctaes (sipa) +- #9417 `c4b7d4f` Do not evaluate hidden LogPrint arguments (sipa) +- #9506 `593a00c` RFC: Improve style for if indentation (sipa) +- #8883 `d5d4ad8` Add all standard TXO types to bitcoin-tx (jnewbery) +- #9531 `23281a4` Release notes for estimation changes (morcos) +- #9486 `f62bc10` Make peer=%d log prints consistent (TheBlueMatt) +- #9552 `41cb05c` Add IPv6 support to qos.sh (jamesmacwhite) +- #9542 `e9e7993` Docs: Update CONTRIBUTING.md (jnewbery) +- #9649 `53ab12d` Remove unused clang format dev script (MarcoFalke) +- #9625 `77bd8c4` Increase minimum debug.log size to 10MB after shrink (morcos) +- #9070 `7b22e50` Lockedpool fixes (kazcw) +- #8779 `7008e28` contrib: Delete spendfrom (MarcoFalke) +- #9587,#8793,#9496,#8191,#8109,#8655,#8472,#8677,#8981,#9124 Avoid shadowing of variables (paveljanik) +- #9063 `f2a6e82` Use deprecated `MAP_ANON` if `MAP_ANONYMOUS` is not defined (paveljanik) +- #9060 `1107653` Fix bloom filter init to isEmpty = true (robmcl4) +- #8613 `613bda4` LevelDB 1.19 (sipa) +- #9225 `5488514` Fix some benign races (TheBlueMatt) +- #8736 `5fa7b07` base58: Improve DecodeBase58 performance (wjx) +- #9039 `e81df49` Various serialization simplifcations and optimizations (sipa) +- #9010 `a143b88` Split up AppInit2 into multiple phases, daemonize after datadir lock errors (laanwj) +- #9230 `c79e52a` Fix some benign races in timestamp logging (TheBlueMatt) +- #9183,#9260 Mrs Peacock in The Library with The Candlestick (killed main.{h,cpp}) (TheBlueMatt) +- #9236 `7f72568` Fix races for strMiscWarning and `fLargeWork*Found`, make QT runawayException use GetWarnings (gmaxwell) +- #9243 `7aa7004` Clean up mapArgs and mapMultiArgs Usage (TheBlueMatt) +- #9387 `cfe41d7` RAII of libevent stuff using unique ptrs with deleters (kallewoof) +- #9472 `fac0f30` Disentangle progress estimation from checkpoints and update it (sipa) +- #9512 `6012967` Fix various things -fsanitize complains about (sipa) +- #9373,#9580 Various linearization script issues (droark) +- #9674 `dd163f5` Lock debugging: Always enforce strict lock ordering (try or not) (TheBlueMatt) +- #8453,#9334 Update to latest libsecp256k1 (laanwj,sipa) +- #9656 `7c93952` Check verify-commits on pushes to master (TheBlueMatt) +- #9679 `a351162` Access WorkQueue::running only within the cs lock (TheBlueMatt) +- #9777 `8dee822` Handle unusual maxsigcachesize gracefully (jnewbery) +- #8863,#8807 univalue: Pull subtree (MarcoFalke) Credits ======= From f873564231d694b47e6e7e5430f4e0785a036664 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Fri, 17 Feb 2017 11:41:45 -0800 Subject: [PATCH 009/136] Make KEY_SIZE a compile-time constant Github-Pull: #9785 Rebased-From: 914fad155d9fc76b42b3a0414dd14b5ebc36062f --- src/httprpc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/httprpc.cpp b/src/httprpc.cpp index daac7a0f1a7..8ac6925acda 100644 --- a/src/httprpc.cpp +++ b/src/httprpc.cpp @@ -112,7 +112,7 @@ static bool multiUserAuthorized(std::string strUserPass) std::string strSalt = vFields[1]; std::string strHash = vFields[2]; - unsigned int KEY_SIZE = 32; + static const unsigned int KEY_SIZE = 32; unsigned char out[KEY_SIZE]; CHMAC_SHA256(reinterpret_cast(strSalt.c_str()), strSalt.size()).Write(reinterpret_cast(strPass.c_str()), strPass.size()).Finalize(out); From 973e345f7f71c7909e701afb35a8fd944dcc9970 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Fri, 17 Feb 2017 11:54:32 -0800 Subject: [PATCH 010/136] Move BIP70_MAX_PAYMENTREQUEST_SIZE to header Github-Pull: #9785 Rebased-From: c801c82e253dc4956069b6110f65b43f538dd5a1 --- src/qt/paymentserver.cpp | 2 -- src/qt/paymentserver.h | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/qt/paymentserver.cpp b/src/qt/paymentserver.cpp index 688e8123af8..dd75f12076d 100644 --- a/src/qt/paymentserver.cpp +++ b/src/qt/paymentserver.cpp @@ -55,8 +55,6 @@ const char* BIP70_MESSAGE_PAYMENTREQUEST = "PaymentRequest"; const char* BIP71_MIMETYPE_PAYMENT = "application/bitcoin-payment"; const char* BIP71_MIMETYPE_PAYMENTACK = "application/bitcoin-paymentack"; const char* BIP71_MIMETYPE_PAYMENTREQUEST = "application/bitcoin-paymentrequest"; -// BIP70 max payment request size in bytes (DoS protection) -const qint64 BIP70_MAX_PAYMENTREQUEST_SIZE = 50000; struct X509StoreDeleter { void operator()(X509_STORE* b) { diff --git a/src/qt/paymentserver.h b/src/qt/paymentserver.h index 9d46280a37b..7c6d4507fe6 100644 --- a/src/qt/paymentserver.h +++ b/src/qt/paymentserver.h @@ -53,7 +53,7 @@ class QUrl; QT_END_NAMESPACE // BIP70 max payment request size in bytes (DoS protection) -extern const qint64 BIP70_MAX_PAYMENTREQUEST_SIZE; +static const qint64 BIP70_MAX_PAYMENTREQUEST_SIZE = 50000; class PaymentServer : public QObject { From 2afefeade6e668cab0643a5c22ff203ce1e509b0 Mon Sep 17 00:00:00 2001 From: Cory Fields Date: Fri, 17 Feb 2017 15:04:30 -0500 Subject: [PATCH 011/136] boost: remove iostreams includes They're unused and produce nasty deprecation warnings Github-Pull: #9786 Rebased-From: 3301587dc5c7937141282f3799592d1e398495fb --- src/rpc/server.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/rpc/server.cpp b/src/rpc/server.cpp index 283d458c8df..0b763acd451 100644 --- a/src/rpc/server.cpp +++ b/src/rpc/server.cpp @@ -18,8 +18,6 @@ #include #include #include -#include -#include #include #include #include From 40c754cb38cdc8bc27cfcfe3af8be869d4eab969 Mon Sep 17 00:00:00 2001 From: Russell Yanofsky Date: Tue, 14 Feb 2017 09:38:29 -0500 Subject: [PATCH 012/136] [wallet] Remove importmulti always-true check Remove "nLowestTimestamp <= chainActive.Tip()->GetBlockTimeMax()" check from importmulti, which is always true because nLowestTimestamp is set to the minimum of the most recent block time and all the imported key timestamps, which is necessarily lower than the maximum block time. Github-Pull: #9760 Rebased-From: ec1267f13b7d0b9b5058c6821cf8dbf74e02d17c --- src/wallet/rpcdump.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wallet/rpcdump.cpp b/src/wallet/rpcdump.cpp index 30f2414675a..e95c71ac8a1 100644 --- a/src/wallet/rpcdump.cpp +++ b/src/wallet/rpcdump.cpp @@ -1072,7 +1072,7 @@ UniValue importmulti(const JSONRPCRequest& mainRequest) } } - if (fRescan && fRunScan && requests.size() && nLowestTimestamp <= chainActive.Tip()->GetBlockTimeMax()) { + if (fRescan && fRunScan && requests.size()) { CBlockIndex* pindex = nLowestTimestamp > minimumTimestamp ? chainActive.FindEarliestAtLeast(std::max(nLowestTimestamp - 7200, 0)) : chainActive.Genesis(); if (pindex) { From 6552729f38eadefa1531aeee13d7a07427c0c076 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 23 Jan 2017 23:39:07 +0000 Subject: [PATCH 013/136] Bugfix: RPC/Mining: GBT should return 1 MB sizelimit before segwit activates Github-Pull: #9619 Rebased-From: 9fc7f0bce94f1cea0239b1543227f22a3f3b9274 --- src/rpc/mining.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index c594daca0d0..77cd282a3da 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -676,8 +676,12 @@ UniValue getblocktemplate(const JSONRPCRequest& request) nSigOpLimit /= WITNESS_SCALE_FACTOR; } result.push_back(Pair("sigoplimit", nSigOpLimit)); - result.push_back(Pair("sizelimit", (int64_t)MAX_BLOCK_SERIALIZED_SIZE)); - result.push_back(Pair("weightlimit", (int64_t)MAX_BLOCK_WEIGHT)); + if (fPreSegWit) { + result.push_back(Pair("sizelimit", (int64_t)MAX_BLOCK_BASE_SIZE)); + } else { + result.push_back(Pair("sizelimit", (int64_t)MAX_BLOCK_SERIALIZED_SIZE)); + result.push_back(Pair("weightlimit", (int64_t)MAX_BLOCK_WEIGHT)); + } result.push_back(Pair("curtime", pblock->GetBlockTime())); result.push_back(Pair("bits", strprintf("%08x", pblock->nBits))); result.push_back(Pair("height", (int64_t)(pindexPrev->nHeight+1))); From 861cb0c83db0571c2863f6b6276314e115c266ee Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Thu, 2 Feb 2017 20:08:54 +0000 Subject: [PATCH 014/136] QA: Test GBT size/weight limit values Github-Pull: #9619 Rebased-From: 279f944e8d3b437d31210f3ba3e798e98a9334fc --- qa/rpc-tests/segwit.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/qa/rpc-tests/segwit.py b/qa/rpc-tests/segwit.py index 299f5387e7c..d6831e00e36 100755 --- a/qa/rpc-tests/segwit.py +++ b/qa/rpc-tests/segwit.py @@ -130,10 +130,14 @@ def run_test(self): print("Verify sigops are counted in GBT with pre-BIP141 rules before the fork") txid = self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 1) tmpl = self.nodes[0].getblocktemplate({}) + assert(tmpl['sizelimit'] == 1000000) + assert('weightlimit' not in tmpl) assert(tmpl['sigoplimit'] == 20000) assert(tmpl['transactions'][0]['hash'] == txid) assert(tmpl['transactions'][0]['sigops'] == 2) tmpl = self.nodes[0].getblocktemplate({'rules':['segwit']}) + assert(tmpl['sizelimit'] == 1000000) + assert('weightlimit' not in tmpl) assert(tmpl['sigoplimit'] == 20000) assert(tmpl['transactions'][0]['hash'] == txid) assert(tmpl['transactions'][0]['sigops'] == 2) @@ -241,6 +245,8 @@ def run_test(self): print("Verify sigops are counted in GBT with BIP141 rules after the fork") txid = self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 1) tmpl = self.nodes[0].getblocktemplate({'rules':['segwit']}) + assert(tmpl['sizelimit'] >= 3999577) # actual maximum size is lower due to minimum mandatory non-witness data + assert(tmpl['weightlimit'] == 4000000) assert(tmpl['sigoplimit'] == 80000) assert(tmpl['transactions'][0]['txid'] == txid) assert(tmpl['transactions'][0]['sigops'] == 8) @@ -250,6 +256,8 @@ def run_test(self): try: tmpl = self.nodes[0].getblocktemplate({}) assert(len(tmpl['transactions']) == 1) # Doesn't include witness tx + assert(tmpl['sizelimit'] == 1000000) + assert('weightlimit' not in tmpl) assert(tmpl['sigoplimit'] == 20000) assert(tmpl['transactions'][0]['hash'] == txid) assert(tmpl['transactions'][0]['sigops'] == 2) From 3972a8efb2f8fd727ca045dcf89104c9f8a2f846 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Jan=C3=ADk?= Date: Mon, 20 Feb 2017 18:14:06 +0100 Subject: [PATCH 015/136] Read/write mempool.dat as a binary. mempool.dat is a binary file and thus it should be read/written as such. Fixes #9810. Github-Pull: #9813 Rebased-From: 171fc91f061d4a980eedfa522e302b8598408cc5 --- src/validation.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/validation.cpp b/src/validation.cpp index 4ce0723b21c..3e749c2df18 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -4180,7 +4180,7 @@ static const uint64_t MEMPOOL_DUMP_VERSION = 1; bool LoadMempool(void) { int64_t nExpiryTimeout = GetArg("-mempoolexpiry", DEFAULT_MEMPOOL_EXPIRY) * 60 * 60; - FILE* filestr = fopen((GetDataDir() / "mempool.dat").string().c_str(), "r"); + FILE* filestr = fopen((GetDataDir() / "mempool.dat").string().c_str(), "rb"); CAutoFile file(filestr, SER_DISK, CLIENT_VERSION); if (file.IsNull()) { LogPrintf("Failed to open mempool file from disk. Continuing anyway.\n"); @@ -4261,7 +4261,7 @@ void DumpMempool(void) int64_t mid = GetTimeMicros(); try { - FILE* filestr = fopen((GetDataDir() / "mempool.dat.new").string().c_str(), "w"); + FILE* filestr = fopen((GetDataDir() / "mempool.dat.new").string().c_str(), "wb"); if (!filestr) { return; } From ae1c4e24a6510b2ace819eccbb928a3cb0074daf Mon Sep 17 00:00:00 2001 From: Chris Moore Date: Sun, 19 Feb 2017 10:03:27 -0800 Subject: [PATCH 016/136] Fix typo in release notes. --- doc/release-notes.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/doc/release-notes.md b/doc/release-notes.md index 93cb9c3c70c..032f7147a3a 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -170,7 +170,7 @@ Final Alert ----------- The Alert System was [disabled and deprecated](https://bitcoin.org/en/alert/2016-11-01-alert-retirement) in Bitcoin Core 0.12.1 and removed in 0.13.0. -To Alert System was retired with a maximum sequence final alert which causes any nodes +The Alert System was retired with a maximum sequence final alert which causes any nodes supporting the Alert System to display a static hard-coded "Alert Key Compromised" message which also prevents any other alerts from overriding it. This final alert is hard-coded into this release so that all old nodes receive the final alert. @@ -204,7 +204,7 @@ Low-level RPC changes - The first boolean argument to `getaddednodeinfo` has been removed. This is an incompatible change. - - RPC command "getmininginfo" loses the "testnet" field in favor of the more + - RPC command `getmininginfo` loses the "testnet" field in favor of the more generic "chain" (which has been present for years). - A new RPC command `preciousblock` has been added which marks a block as @@ -259,7 +259,7 @@ Removal of Priority Estimation ------------------------------ - Estimation of "priority" needed for a transaction to be included within a target - number of blocks has been removed. The rpc calls are deprecated and will either + number of blocks has been removed. The RPC calls are deprecated and will either return -1 or 1e24 appropriately. The format for `fee_estimates.dat` has also changed to no longer save these priority estimates. It will automatically be converted to the new format which is not readable by prior versions of the @@ -755,7 +755,6 @@ Thanks to everyone who directly contributed to this release: - Gregory Maxwell - Gregory Sanders - Hampus Sjöberg -- instagibbs - isle2983 - Ivo van der Sangen - James White @@ -791,7 +790,6 @@ Thanks to everyone who directly contributed to this release: - mrbandrews - mruddy - Nicolas DORIER -- NicolasDorier - nomnombtc - Patrick Strateman - Pavel Janík @@ -819,5 +817,6 @@ Thanks to everyone who directly contributed to this release: - Will Binns - Wladimir J. van der Laan - wodry +- Zak Wilcox As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). From e22c0671c74bc4db70b3ba04d093cd110f9f22a7 Mon Sep 17 00:00:00 2001 From: kirit93 Date: Sun, 19 Feb 2017 12:05:02 +0530 Subject: [PATCH 017/136] Fix for issue #9775. Added check for open() returning a NULL pointer. Github-Pull: #9798 Rebased-From: 40f11f8872c3e9f380f8278f984dfdabffe77539 --- src/util.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/util.cpp b/src/util.cpp index ba157625d80..78c353dfe52 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -214,12 +214,13 @@ void OpenDebugLog() assert(vMsgsBeforeOpenLog); boost::filesystem::path pathDebug = GetDataDir() / "debug.log"; fileout = fopen(pathDebug.string().c_str(), "a"); - if (fileout) setbuf(fileout, NULL); // unbuffered - - // dump buffered messages from before we opened the log - while (!vMsgsBeforeOpenLog->empty()) { - FileWriteStr(vMsgsBeforeOpenLog->front(), fileout); - vMsgsBeforeOpenLog->pop_front(); + if (fileout) { + setbuf(fileout, NULL); // unbuffered + // dump buffered messages from before we opened the log + while (!vMsgsBeforeOpenLog->empty()) { + FileWriteStr(vMsgsBeforeOpenLog->front(), fileout); + vMsgsBeforeOpenLog->pop_front(); + } } delete vMsgsBeforeOpenLog; @@ -838,4 +839,4 @@ std::string CopyrightHolders(const std::string& strPrefix) strCopyrightHolders += "\n" + strPrefix + "The Bitcoin Core developers"; } return strCopyrightHolders; -} +} \ No newline at end of file From 7d75a5a93c161aa4de22ac862702ba0241e8faa2 Mon Sep 17 00:00:00 2001 From: Jonas Schnelli Date: Tue, 21 Feb 2017 14:36:36 +0100 Subject: [PATCH 018/136] Fix segfault crash when shutdown the GUI in disablewallet mode Github-Pull: #9817 Rebased-From: 312c4f10574ccf6dfe0d4ecb3ce928733d3a1e52 --- src/qt/bitcoingui.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 1c1acb6b103..be79a67990e 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -518,7 +518,10 @@ void BitcoinGUI::setClientModel(ClientModel *_clientModel) // Propagate cleared model to child objects rpcConsole->setClientModel(nullptr); #ifdef ENABLE_WALLET - walletFrame->setClientModel(nullptr); + if (walletFrame) + { + walletFrame->setClientModel(nullptr); + } #endif // ENABLE_WALLET unitDisplayControl->setOptionsModel(nullptr); } From 9072395e5fddb1f2590138a179ab0868646a38a0 Mon Sep 17 00:00:00 2001 From: Russell Yanofsky Date: Thu, 16 Feb 2017 10:49:03 -0500 Subject: [PATCH 019/136] Return errors from importmulti if complete rescans are not successful Github-Pull: #9773 Rebased-From: e2e2f4c856363bbb0e3b5ba4df225f3754c3db39 --- src/validation.cpp | 7 ++++- src/validation.h | 10 ++++++- src/wallet/rpcdump.cpp | 25 +++++++++++++++-- src/wallet/test/wallet_tests.cpp | 60 ++++++++++++++++++++++++++++++++++++++++ src/wallet/wallet.cpp | 23 +++++++++------ src/wallet/wallet.h | 2 +- 6 files changed, 114 insertions(+), 13 deletions(-) diff --git a/src/validation.cpp b/src/validation.cpp index 3e749c2df18..e8a3736e5dd 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -3331,7 +3331,7 @@ void PruneOneBlockFile(const int fileNumber) } -void UnlinkPrunedFiles(std::set& setFilesToPrune) +void UnlinkPrunedFiles(const std::set& setFilesToPrune) { for (std::set::iterator it = setFilesToPrune.begin(); it != setFilesToPrune.end(); ++it) { CDiskBlockPos pos(*it, 0); @@ -4163,6 +4163,11 @@ std::string CBlockFileInfo::ToString() const return strprintf("CBlockFileInfo(blocks=%u, size=%u, heights=%u...%u, time=%s...%s)", nBlocks, nSize, nHeightFirst, nHeightLast, DateTimeStrFormat("%Y-%m-%d", nTimeFirst), DateTimeStrFormat("%Y-%m-%d", nTimeLast)); } +CBlockFileInfo* GetBlockFileInfo(size_t n) +{ + return &vinfoBlockFile.at(n); +} + ThresholdState VersionBitsTipState(const Consensus::Params& params, Consensus::DeploymentPos pos) { LOCK(cs_main); diff --git a/src/validation.h b/src/validation.h index 6fcbb1c1084..9c606f24194 100644 --- a/src/validation.h +++ b/src/validation.h @@ -300,9 +300,14 @@ double GuessVerificationProgress(const ChainTxData& data, CBlockIndex* pindex); void FindFilesToPrune(std::set& setFilesToPrune, uint64_t nPruneAfterHeight); /** + * Mark one block file as pruned. + */ +void PruneOneBlockFile(const int fileNumber); + +/** * Actually unlink the specified files */ -void UnlinkPrunedFiles(std::set& setFilesToPrune); +void UnlinkPrunedFiles(const std::set& setFilesToPrune); /** Create a new block index entry for a given block hash */ CBlockIndex * InsertBlockIndex(uint256 hash); @@ -562,6 +567,9 @@ static const unsigned int REJECT_ALREADY_KNOWN = 0x101; /** Transaction conflicts with a transaction already known */ static const unsigned int REJECT_CONFLICT = 0x102; +/** Get block file info entry for one block file */ +CBlockFileInfo* GetBlockFileInfo(size_t n); + /** Dump the mempool to disk. */ void DumpMempool(); diff --git a/src/wallet/rpcdump.cpp b/src/wallet/rpcdump.cpp index e95c71ac8a1..8a9e7d1444a 100644 --- a/src/wallet/rpcdump.cpp +++ b/src/wallet/rpcdump.cpp @@ -1074,11 +1074,32 @@ UniValue importmulti(const JSONRPCRequest& mainRequest) if (fRescan && fRunScan && requests.size()) { CBlockIndex* pindex = nLowestTimestamp > minimumTimestamp ? chainActive.FindEarliestAtLeast(std::max(nLowestTimestamp - 7200, 0)) : chainActive.Genesis(); - + CBlockIndex* scannedRange = nullptr; if (pindex) { - pwalletMain->ScanForWalletTransactions(pindex, true); + scannedRange = pwalletMain->ScanForWalletTransactions(pindex, true); pwalletMain->ReacceptWalletTransactions(); } + + if (!scannedRange || scannedRange->nHeight > pindex->nHeight) { + std::vector results = response.getValues(); + response.clear(); + response.setArray(); + size_t i = 0; + for (const UniValue& request : requests.getValues()) { + // If key creation date is within the successfully scanned + // range, or if the import result already has an error set, let + // the result stand unmodified. Otherwise replace the result + // with an error message. + if (GetImportTimestamp(request, now) - 7200 >= scannedRange->GetBlockTimeMax() || results.at(i).exists("error")) { + response.push_back(results.at(i)); + } else { + UniValue result = UniValue(UniValue::VOBJ); + result.pushKV("success", UniValue(false)); + result.pushKV("error", JSONRPCError(RPC_MISC_ERROR, strprintf("Failed to rescan before time %d, transactions may be missing.", scannedRange->GetBlockTimeMax()))); + response.push_back(std::move(result)); + } + } + } } return response; diff --git a/src/wallet/test/wallet_tests.cpp b/src/wallet/test/wallet_tests.cpp index ca086c86a80..d32e8ba06ad 100644 --- a/src/wallet/test/wallet_tests.cpp +++ b/src/wallet/test/wallet_tests.cpp @@ -9,10 +9,16 @@ #include #include +#include "rpc/server.h" +#include "test/test_bitcoin.h" +#include "validation.h" #include "wallet/test/wallet_test_fixture.h" #include #include +#include + +extern UniValue importmulti(const JSONRPCRequest& request); // how many times to run all the tests to have a chance to catch errors that only show up with particular random shuffles #define RUN_TESTS 100 @@ -355,4 +361,58 @@ BOOST_AUTO_TEST_CASE(ApproximateBestSubset) empty_wallet(); } +BOOST_FIXTURE_TEST_CASE(rescan, TestChain100Setup) +{ + LOCK(cs_main); + + // Cap last block file size, and mine new block in a new block file. + CBlockIndex* oldTip = chainActive.Tip(); + GetBlockFileInfo(oldTip->GetBlockPos().nFile)->nSize = MAX_BLOCKFILE_SIZE; + CreateAndProcessBlock({}, GetScriptForRawPubKey(coinbaseKey.GetPubKey())); + CBlockIndex* newTip = chainActive.Tip(); + + // Verify ScanForWalletTransactions picks up transactions in both the old + // and new block files. + { + CWallet wallet; + LOCK(wallet.cs_wallet); + wallet.AddKeyPubKey(coinbaseKey, coinbaseKey.GetPubKey()); + BOOST_CHECK_EQUAL(oldTip, wallet.ScanForWalletTransactions(oldTip)); + BOOST_CHECK_EQUAL(wallet.GetImmatureBalance(), 100 * COIN); + } + + // Prune the older block file. + PruneOneBlockFile(oldTip->GetBlockPos().nFile); + UnlinkPrunedFiles({oldTip->GetBlockPos().nFile}); + + // Verify ScanForWalletTransactions only picks transactions in the new block + // file. + { + CWallet wallet; + LOCK(wallet.cs_wallet); + wallet.AddKeyPubKey(coinbaseKey, coinbaseKey.GetPubKey()); + BOOST_CHECK_EQUAL(newTip, wallet.ScanForWalletTransactions(oldTip)); + BOOST_CHECK_EQUAL(wallet.GetImmatureBalance(), 50 * COIN); + } + + { + CWallet wallet; + ::pwalletMain = &wallet; + UniValue key; + key.setObject(); + key.pushKV("scriptPubKey", HexStr(GetScriptForRawPubKey(coinbaseKey.GetPubKey()))); + key.pushKV("timestamp", 0); + key.pushKV("internal", UniValue(true)); + UniValue keys; + keys.setArray(); + keys.push_back(key); + JSONRPCRequest request; + request.params.setArray(); + request.params.push_back(keys); + + UniValue response = importmulti(request); + BOOST_CHECK_EQUAL(response.write(), strprintf("[{\"success\":false,\"error\":{\"code\":-1,\"message\":\"Failed to rescan before time %d, transactions may be missing.\"}}]", newTip->GetBlockTimeMax())); + } +} + BOOST_AUTO_TEST_SUITE_END() diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index f8f5a9306dc..1b59c3cd80c 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -1545,10 +1545,14 @@ void CWalletTx::GetAccountAmounts(const string& strAccount, CAmount& nReceived, * Scan the block chain (starting in pindexStart) for transactions * from or to us. If fUpdate is true, found transactions that already * exist in the wallet will be updated. + * + * Returns pointer to the first block in the last contiguous range that was + * successfully scanned. + * */ -int CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate) +CBlockIndex* CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate) { - int ret = 0; + CBlockIndex* ret = nullptr; int64_t nNow = GetTime(); const CChainParams& chainParams = Params(); @@ -1570,12 +1574,15 @@ int CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate) ShowProgress(_("Rescanning..."), std::max(1, std::min(99, (int)((GuessVerificationProgress(chainParams.TxData(), pindex) - dProgressStart) / (dProgressTip - dProgressStart) * 100)))); CBlock block; - ReadBlockFromDisk(block, pindex, Params().GetConsensus()); - int posInBlock; - for (posInBlock = 0; posInBlock < (int)block.vtx.size(); posInBlock++) - { - if (AddToWalletIfInvolvingMe(*block.vtx[posInBlock], pindex, posInBlock, fUpdate)) - ret++; + if (ReadBlockFromDisk(block, pindex, Params().GetConsensus())) { + for (size_t posInBlock = 0; posInBlock < block.vtx.size(); ++posInBlock) { + AddToWalletIfInvolvingMe(*block.vtx[posInBlock], pindex, posInBlock, fUpdate); + } + if (!ret) { + ret = pindex; + } + } else { + ret = nullptr; } pindex = chainActive.Next(pindex); if (GetTime() >= nNow + 60) { diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index a7b15a8441c..98e4fb87b91 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -788,7 +788,7 @@ class CWallet : public CCryptoKeyStore, public CValidationInterface bool LoadToWallet(const CWalletTx& wtxIn); void SyncTransaction(const CTransaction& tx, const CBlockIndex *pindex, int posInBlock) override; bool AddToWalletIfInvolvingMe(const CTransaction& tx, const CBlockIndex* pIndex, int posInBlock, bool fUpdate); - int ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate = false); + CBlockIndex* ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate = false); void ReacceptWalletTransactions(); void ResendWalletTransactions(int64_t nBestBlockTime, CConnman* connman) override; std::vector ResendWalletTransactionsBefore(int64_t nTime, CConnman* connman); From 9d3f9d2a5991e6e561e323f488cb40a803408b6b Mon Sep 17 00:00:00 2001 From: John Newbery Date: Tue, 7 Feb 2017 11:20:06 -0500 Subject: [PATCH 020/136] [Trivial] Remove incorrect help message from gettxoutproof() Github-Pull: #9711 Rebased-From: 9949ebfa6a548260858df429f4d0e716e0a26065 --- src/rpc/rawtransaction.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp index 21396ebb09b..bf16f27498f 100644 --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -245,7 +245,6 @@ UniValue gettxoutproof(const JSONRPCRequest& request) "unspent output in the utxo for this transaction. To make it always work,\n" "you need to maintain a transaction index, using the -txindex command line option or\n" "specify the block in which the transaction is included manually (by blockhash).\n" - "\nReturn the raw transaction data.\n" "\nArguments:\n" "1. \"txids\" (string) A json array of txids to filter\n" " [\n" From 599c69abe3101512eeee13733c0f58eb3e363eae Mon Sep 17 00:00:00 2001 From: Russell Yanofsky Date: Tue, 21 Feb 2017 12:57:30 -0500 Subject: [PATCH 021/136] Fix pruning test broken by 2 hour manual prune window Regression happened in 91fb506 Add two hour buffer to manual pruning. Github-Pull: #9820 Rebased-From: 874c7363d794c18a3b46d3d2a03f19c88f3a20cf --- qa/rpc-tests/pruning.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/qa/rpc-tests/pruning.py b/qa/rpc-tests/pruning.py index 9d155478e25..1e6d4191869 100755 --- a/qa/rpc-tests/pruning.py +++ b/qa/rpc-tests/pruning.py @@ -18,6 +18,11 @@ MIN_BLOCKS_TO_KEEP = 288 +# Rescans start at the earliest block up to 2 hours before a key timestamp, so +# the manual prune RPC avoids pruning blocks in the same window to be +# compatible with pruning based on key creation time. +RESCAN_WINDOW = 2 * 60 * 60 + def calc_usage(blockdir): return sum(os.path.getsize(blockdir+f) for f in os.listdir(blockdir) if os.path.isfile(blockdir+f)) / (1024. * 1024.) @@ -239,7 +244,7 @@ def manual_test(self, node_number, use_timestamp): def height(index): if use_timestamp: - return node.getblockheader(node.getblockhash(index))["time"] + return node.getblockheader(node.getblockhash(index))["time"] + RESCAN_WINDOW else: return index From 260c71cbb857d12540a2f53372282d11f2b401a8 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Wed, 22 Feb 2017 11:29:43 +0100 Subject: [PATCH 022/136] qa: Check return code when stopping nodes This includes work by jnewbery Github-Pull: #9824 Rebased-From: fa4cd2e998e0ebebe283a6243f7f752123a105ab --- qa/rpc-tests/fundrawtransaction.py | 4 +++- qa/rpc-tests/rpcbind_test.py | 19 +++++++------------ qa/rpc-tests/test_framework/util.py | 19 +++++-------------- 3 files changed, 15 insertions(+), 27 deletions(-) diff --git a/qa/rpc-tests/fundrawtransaction.py b/qa/rpc-tests/fundrawtransaction.py index 7396ba46a4f..8d2bc73c0cc 100755 --- a/qa/rpc-tests/fundrawtransaction.py +++ b/qa/rpc-tests/fundrawtransaction.py @@ -469,7 +469,9 @@ def run_test(self): # locked wallet test self.nodes[1].encryptwallet("test") self.nodes.pop(1) - stop_nodes(self.nodes) + stop_node(self.nodes[0], 0) + stop_node(self.nodes[1], 2) + stop_node(self.nodes[2], 3) self.nodes = start_nodes(self.num_nodes, self.options.tmpdir) # This test is not meant to test fee estimation and we'd like diff --git a/qa/rpc-tests/rpcbind_test.py b/qa/rpc-tests/rpcbind_test.py index d78d0b884e9..1010c54aa5c 100755 --- a/qa/rpc-tests/rpcbind_test.py +++ b/qa/rpc-tests/rpcbind_test.py @@ -35,11 +35,9 @@ def run_bind_test(self, allow_ips, connect_to, addresses, expected): base_args += ['-rpcallowip=' + x for x in allow_ips] binds = ['-rpcbind='+addr for addr in addresses] self.nodes = start_nodes(self.num_nodes, self.options.tmpdir, [base_args + binds], connect_to) - try: - pid = bitcoind_processes[0].pid - assert_equal(set(get_bind_addrs(pid)), set(expected)) - finally: - stop_nodes(self.nodes) + pid = bitcoind_processes[0].pid + assert_equal(set(get_bind_addrs(pid)), set(expected)) + stop_nodes(self.nodes) def run_allowip_test(self, allow_ips, rpchost, rpcport): ''' @@ -48,13 +46,10 @@ def run_allowip_test(self, allow_ips, rpchost, rpcport): ''' base_args = ['-disablewallet', '-nolisten'] + ['-rpcallowip='+x for x in allow_ips] self.nodes = start_nodes(self.num_nodes, self.options.tmpdir, [base_args]) - try: - # connect to node through non-loopback interface - node = get_rpc_proxy(rpc_url(0, "%s:%d" % (rpchost, rpcport)), 0) - node.getnetworkinfo() - finally: - node = None # make sure connection will be garbage collected and closed - stop_nodes(self.nodes) + # connect to node through non-loopback interface + node = get_rpc_proxy(rpc_url(0, "%s:%d" % (rpchost, rpcport)), 0) + node.getnetworkinfo() + stop_nodes(self.nodes) def run_test(self): # due to OS-specific network stats queries, this test works only on Linux diff --git a/qa/rpc-tests/test_framework/util.py b/qa/rpc-tests/test_framework/util.py index dc8555c44c0..ec151c2a65d 100644 --- a/qa/rpc-tests/test_framework/util.py +++ b/qa/rpc-tests/test_framework/util.py @@ -375,28 +375,19 @@ def stop_node(node, i): node.stop() except http.client.CannotSendRequest as e: print("WARN: Unable to stop node: " + repr(e)) - bitcoind_processes[i].wait(timeout=BITCOIND_PROC_WAIT_TIMEOUT) + return_code = bitcoind_processes[i].wait(timeout=BITCOIND_PROC_WAIT_TIMEOUT) + assert_equal(return_code, 0) del bitcoind_processes[i] def stop_nodes(nodes): - for node in nodes: - try: - node.stop() - except http.client.CannotSendRequest as e: - print("WARN: Unable to stop node: " + repr(e)) - del nodes[:] # Emptying array closes connections as a side effect - wait_bitcoinds() + for i, node in enumerate(nodes): + stop_node(node, i) + assert not bitcoind_processes.values() # All connections must be gone now def set_node_times(nodes, t): for node in nodes: node.setmocktime(t) -def wait_bitcoinds(): - # Wait for all bitcoinds to cleanly exit - for bitcoind in bitcoind_processes.values(): - bitcoind.wait(timeout=BITCOIND_PROC_WAIT_TIMEOUT) - bitcoind_processes.clear() - def connect_nodes(from_connection, node_num): ip_port = "127.0.0.1:"+str(p2p_port(node_num)) from_connection.addnode(ip_port, "onetry") From 749fe95fdc979612f41b4b4ee0f58ac1bb425913 Mon Sep 17 00:00:00 2001 From: Cory Fields Date: Tue, 21 Feb 2017 11:56:07 -0500 Subject: [PATCH 023/136] build: warn about variable length arrays Github-Pull: #9789 Rebased-From: b602fe0f7372256bd2bc8c116d23dee3253882f9 --- configure.ac | 1 + 1 file changed, 1 insertion(+) diff --git a/configure.ac b/configure.ac index 2b2a001d5d3..e4f8f6f6eb2 100644 --- a/configure.ac +++ b/configure.ac @@ -210,6 +210,7 @@ if test "x$CXXFLAGS_overridden" = "xno"; then AX_CHECK_COMPILE_FLAG([-Wall],[CXXFLAGS="$CXXFLAGS -Wall"],,[[$CXXFLAG_WERROR]]) AX_CHECK_COMPILE_FLAG([-Wextra],[CXXFLAGS="$CXXFLAGS -Wextra"],,[[$CXXFLAG_WERROR]]) AX_CHECK_COMPILE_FLAG([-Wformat],[CXXFLAGS="$CXXFLAGS -Wformat"],,[[$CXXFLAG_WERROR]]) + AX_CHECK_COMPILE_FLAG([-Wvla],[CXXFLAGS="$CXXFLAGS -Wvla"],,[[$CXXFLAG_WERROR]]) AX_CHECK_COMPILE_FLAG([-Wformat-security],[CXXFLAGS="$CXXFLAGS -Wformat-security"],,[[$CXXFLAG_WERROR]]) ## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all From 05e906dbc68e3a88a358f2f08750c51b6e9d9856 Mon Sep 17 00:00:00 2001 From: Cory Fields Date: Tue, 21 Feb 2017 11:56:26 -0500 Subject: [PATCH 024/136] build: add --enable-werror option This turns some compiler warnings into errors. Useful for c-i. Github-Pull: #9789 Rebased-From: 205830a37b7ffa4f8fa306e5c9eafcee3777fa68 --- configure.ac | 17 +++++++++++++++++ src/Makefile.am | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index e4f8f6f6eb2..95e85e6d054 100644 --- a/configure.ac +++ b/configure.ac @@ -192,6 +192,13 @@ AC_ARG_ENABLE([debug], [enable_debug=$enableval], [enable_debug=no]) +# Turn warnings into errors +AC_ARG_ENABLE([werror], + [AS_HELP_STRING([--enable-werror], + [Treat certain compiler warnings as errors (default is no)])], + [enable_werror=$enableval], + [enable_werror=no]) + AC_LANG_PUSH([C++]) AX_CHECK_COMPILE_FLAG([-Werror],[CXXFLAG_WERROR="-Werror"],[CXXFLAG_WERROR=""]) @@ -206,6 +213,14 @@ if test "x$enable_debug" = xyes; then fi fi +ERROR_CXXFLAGS= +if test "x$enable_werror" = "xyes"; then + if test "x$CXXFLAG_WERROR" = "x"; then + AC_MSG_ERROR("enable-werror set but -Werror is not usable") + fi + AX_CHECK_COMPILE_FLAG([-Werror=vla],[ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror=vla"],,[[$CXXFLAG_WERROR]]) +fi + if test "x$CXXFLAGS_overridden" = "xno"; then AX_CHECK_COMPILE_FLAG([-Wall],[CXXFLAGS="$CXXFLAGS -Wall"],,[[$CXXFLAG_WERROR]]) AX_CHECK_COMPILE_FLAG([-Wextra],[CXXFLAGS="$CXXFLAGS -Wextra"],,[[$CXXFLAG_WERROR]]) @@ -1067,6 +1082,7 @@ AC_SUBST(BITCOIN_CLI_NAME) AC_SUBST(BITCOIN_TX_NAME) AC_SUBST(RELDFLAGS) +AC_SUBST(ERROR_CXXFLAGS) AC_SUBST(HARDENED_CXXFLAGS) AC_SUBST(HARDENED_CPPFLAGS) AC_SUBST(HARDENED_LDFLAGS) @@ -1156,6 +1172,7 @@ echo " with test = $use_tests" echo " with bench = $use_bench" echo " with upnp = $use_upnp" echo " debug enabled = $enable_debug" +echo " werror = $enable_werror" echo echo " target os = $TARGET_OS" echo " build os = $BUILD_OS" diff --git a/src/Makefile.am b/src/Makefile.am index a2072865a34..e8d22313dca 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -5,7 +5,7 @@ DIST_SUBDIRS = secp256k1 univalue AM_LDFLAGS = $(PTHREAD_CFLAGS) $(LIBTOOL_LDFLAGS) $(HARDENED_LDFLAGS) -AM_CXXFLAGS = $(HARDENED_CXXFLAGS) +AM_CXXFLAGS = $(HARDENED_CXXFLAGS) $(ERROR_CXXFLAGS) AM_CPPFLAGS = $(HARDENED_CPPFLAGS) EXTRA_LIBRARIES = From 99fd85cb44fe9983c64cfa376299e67b18568304 Mon Sep 17 00:00:00 2001 From: Cory Fields Date: Wed, 22 Feb 2017 13:33:22 -0500 Subject: [PATCH 025/136] build: force a c++ standard to be specified Newer compilers may switch to newer standards by default. For example, gcc6 uses std=gnu++14 by default. Github-Pull: #9831 Rebased-From: 9829c54de2725037ee0702306cbaa99fc9aa1826 --- build-aux/m4/ax_cxx_compile_stdcxx.m4 | 8 +++++++- configure.ac | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/build-aux/m4/ax_cxx_compile_stdcxx.m4 b/build-aux/m4/ax_cxx_compile_stdcxx.m4 index 2c18e49c56c..f147cee3b11 100644 --- a/build-aux/m4/ax_cxx_compile_stdcxx.m4 +++ b/build-aux/m4/ax_cxx_compile_stdcxx.m4 @@ -57,8 +57,14 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true], [$3], [optional], [ax_cxx_compile_cxx$1_required=false], [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])]) + m4_if([$4], [], [ax_cxx_compile_cxx$1_try_default=true], + [$4], [default], [ax_cxx_compile_cxx$1_try_default=true], + [$4], [nodefault], [ax_cxx_compile_cxx$1_try_default=false], + [m4_fatal([invalid fourth argument `$4' to AX_CXX_COMPILE_STDCXX])]) AC_LANG_PUSH([C++])dnl ac_success=no + + m4_if([$4], [nodefault], [], [dnl AC_CACHE_CHECK(whether $CXX supports C++$1 features by default, ax_cv_cxx_compile_cxx$1, [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], @@ -66,7 +72,7 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl [ax_cv_cxx_compile_cxx$1=no])]) if test x$ax_cv_cxx_compile_cxx$1 = xyes; then ac_success=yes - fi + fi]) m4_if([$2], [noext], [], [dnl if test x$ac_success = xno; then diff --git a/configure.ac b/configure.ac index 95e85e6d054..a2332578a63 100644 --- a/configure.ac +++ b/configure.ac @@ -55,7 +55,7 @@ case $host in ;; esac dnl Require C++11 compiler (no GNU extensions) -AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory]) +AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory], [nodefault]) dnl Check if -latomic is required for CHECK_ATOMIC From 847e3753a6d6a6ab4dd081e2945cb200faf730d4 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Thu, 23 Feb 2017 19:28:30 +0000 Subject: [PATCH 026/136] qt: pre-rc2 translations update --- src/qt/locale/bitcoin_en.ts | 20 +-- src/qt/locale/bitcoin_fr_FR.ts | 312 ++++++++++++++++++++++++++++++++++++++++- src/qt/locale/bitcoin_zh_CN.ts | 4 + 3 files changed, 322 insertions(+), 14 deletions(-) diff --git a/src/qt/locale/bitcoin_en.ts b/src/qt/locale/bitcoin_en.ts index a66fa55cfed..e6a9c9228d3 100644 --- a/src/qt/locale/bitcoin_en.ts +++ b/src/qt/locale/bitcoin_en.ts @@ -304,12 +304,12 @@ Sign &message... - + Synchronizing with network... Synchronizing with network... - + &Overview &Overview @@ -404,7 +404,7 @@ - + Click to disable network activity. @@ -429,7 +429,7 @@ Reindexing blocks on disk... - + Send coins to a Bitcoin address Send coins to a Bitcoin address @@ -459,12 +459,12 @@ &Verify message... - + Bitcoin Bitcoin - + Wallet Wallet @@ -549,7 +549,7 @@ - + %n active connection(s) to Bitcoin network %n active connection to Bitcoin network @@ -610,12 +610,12 @@ Up to date - + Show the %1 help message to get a list with possible Bitcoin command-line options - + %1 client @@ -1601,7 +1601,7 @@ PaymentServer - + diff --git a/src/qt/locale/bitcoin_fr_FR.ts b/src/qt/locale/bitcoin_fr_FR.ts index 4d02aa5114d..12cd54d405e 100644 --- a/src/qt/locale/bitcoin_fr_FR.ts +++ b/src/qt/locale/bitcoin_fr_FR.ts @@ -41,10 +41,46 @@ &Delete &Supprimer + + C&hoose + C&oisir + + + Copy &Label + Copier &Étiquette + + + &Edit + &Éditer + + + Export Address List + Exporter la liste d'adresses + + + Comma separated file (*.csv) + Valeurs séparées par des virgules (*.csv) + + + Exporting Failed + Échec de l'export + AddressTableModel - + + Label + Étiquette + + + Address + Adresse + + + (no label) + (aucune étiquette) + + AskPassphraseDialog @@ -63,6 +99,22 @@ Repeat new passphrase Répétez la phrase de passe + + Encrypt wallet + Chiffrer le porte-monnaie + + + Unlock wallet + Déverrouiller le porte-monnaie + + + Decrypt wallet + Décrypter le porte-monnaie + + + Wallet encrypted + Porte-monnaie chiffré + BanTableModel @@ -414,6 +466,42 @@ Confirmed Confirmée + + Copy address + Copier l'adresse + + + Copy label + Copier l'étiquette + + + Copy amount + Copier le montant + + + Copy fee + Copier les frais + + + Copy after fee + Copier après les frais + + + Copy bytes + Copier les octets + + + yes + oui + + + no + non + + + (no label) + (aucune étiquette) + EditAddressDialog @@ -797,6 +885,14 @@ QRImageWidget + + &Copy Image + &Copier image + + + Save QR Code + Sauvegarder QR code + RPCConsole @@ -1055,7 +1151,15 @@ Remove Retirer - + + Copy label + Copier l'étiquette + + + Copy amount + Copier le montant + + ReceiveRequestDialog @@ -1074,9 +1178,37 @@ &Save Image... &Sauvegarder image + + Address + Adresse + + + Label + Étiquette + + + Message + Message + RecentRequestsTableModel + + Date + Date + + + Label + Étiquette + + + Message + Message + + + (no label) + (aucune étiquette) + SendCoinsDialog @@ -1180,7 +1312,27 @@ S&end E&voyer - + + Copy amount + Copier le montant + + + Copy fee + Copier les frais + + + Copy after fee + Copier après les frais + + + Copy bytes + Copier les octets + + + (no label) + (aucune étiquette) + + SendCoinsEntry @@ -1305,7 +1457,83 @@ TransactionDesc - + + Status + État + + + Date + Date + + + Source + Source + + + Generated + Généré + + + From + De + + + unknown + inconnu + + + To + Á + + + own address + Votre adresse + + + watch-only + Lecture uniquement + + + label + Étiquette + + + Credit + Crédit + + + Debit + Débit + + + Total debit + Débit total + + + Total credit + Crédit total + + + Net amount + Montant net + + + Message + Message + + + Comment + Commentaire + + + true + vrai + + + false + faux + + TransactionDescDialog @@ -1315,9 +1543,85 @@ TransactionTableModel + + Date + Date + + + Label + Étiquette + + + watch-only + Lecture uniquement + + + (no label) + (aucune étiquette) + TransactionView + + All + Toutes + + + Today + Aujourd'hui + + + This week + Cette semaine + + + This month + Ce mois + + + Last month + Mois dernier + + + This year + Cette année + + + Other + Autres + + + Copy address + Copier l'adresse + + + Copy label + Copier l'étiquette + + + Copy amount + Copier le montant + + + Comma separated file (*.csv) + Valeurs séparées par des virgules (*.csv) + + + Date + Date + + + Label + Étiquette + + + Address + Adresse + + + Exporting Failed + Échec de l'export + UnitDisplayStatusBarControl diff --git a/src/qt/locale/bitcoin_zh_CN.ts b/src/qt/locale/bitcoin_zh_CN.ts index 20875c23272..30e59d92604 100644 --- a/src/qt/locale/bitcoin_zh_CN.ts +++ b/src/qt/locale/bitcoin_zh_CN.ts @@ -3241,6 +3241,10 @@ 钱包 %s 在外部的数据目录 %s + Wallet debugging/testing options: + 钱包调试/测试选项: + + Wallet options: 钱包选项: From 3b2f7fdcaea36c8c5c93b21030d4e2327d2b6e8c Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Thu, 23 Feb 2017 21:38:15 +0100 Subject: [PATCH 027/136] doc: Add authors and changes since rc1 to release notes --- doc/release-notes.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/doc/release-notes.md b/doc/release-notes.md index 032f7147a3a..1f85dedb334 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -354,6 +354,8 @@ and git merge commit are mentioned. - #9778 `ad168ef` Add two hour buffer to manual pruning (morcos) - #9761 `9828f9a` Use 2 hour grace period for key timestamps in importmulti rescans (ryanofsky) - #9474 `48d7e0d` Mark the minconf parameter to move as ignored (sipa) +- #9619 `861cb0c` Bugfix: RPC/Mining: GBT should return 1 MB sizelimit before segwit activates (luke-jr) +- #9773 `9072395` Return errors from importmulti if complete rescans are not successful (ryanofsky) ### Block and transaction handling - #8391 `37d83bb` Consensus: Remove ISM (NicolasDorier) @@ -396,6 +398,7 @@ and git merge commit are mentioned. - #9252 `ce5c1f4` Release cs\_main before calling ProcessNewBlock, or processing headers (cmpctblock handling) (sdaftuar) - #9283 `869781c` A few more CTransactionRef optimizations (sipa) - #9499 `9c9af5a` Use recent-rejects, orphans, and recently-replaced txn for compact-block-reconstruction +- #9813 `3972a8e` Read/write mempool.dat as a binary (paveljanik) ### P2P protocol and network code - #8128 `1030fa7` Turn net structures into dumb storage classes (theuni) @@ -494,6 +497,8 @@ and git merge commit are mentioned. - #8249 `4e1567a` Enable (and check for) 64-bit ASLR on Windows (laanwj) - #9758 `476cc47` Selectively suppress deprecation warnings (jonasschnelli) - #9783 `6d61a2b` release: bump gitian descriptors for a new 0.14 package cache (theuni) +- #9789 `749fe95` build: add --enable-werror and warn on vla's (theuni) +- #9831 `99fd85c` build: force a c++ standard to be specified (theuni) ### GUI - #8192 `c503863` Remove URLs from About dialog translations (fanquake) @@ -536,6 +541,7 @@ and git merge commit are mentioned. - #9718 `36f9d3a` Qt/Intro: Various fixes (luke-jr) - #9735 `ec66d06` devtools: Handle Qt formatting characters edge-case in update-translations.py (laanwj) - #9755 `a441db0` Bugfix: Qt/Options: Restore persistent "restart required" notice (luke-jr) +- #9817 `7d75a5a` Fix segfault crash when shutdown the GUI in disablewallet mode (jonasschnelli) ### Wallet - #8367 `045106b` Ensure <0.13 clients can't open HD wallets (jonasschnelli) @@ -575,6 +581,7 @@ and git merge commit are mentioned. - #9771 `e43a585` Add missing cs\_wallet lock that triggers new lock held assertion (ryanofsky) - #9316 `3097ea4` Disable free transactions when relay is disabled (MarcoFalke) - #9615 `d2c9e4d` Wallet incremental fee (morcos) +- #9760 `40c754c` Remove importmulti always-true check (ryanofsky) ### Tests and QA - #8270 `6e5e5ab` Tests: Use portable #! in python scripts (/usr/bin/env) (ChoHag) @@ -629,6 +636,8 @@ and git merge commit are mentioned. - #9707 `b860915` Fix RPC failure testing (jnewbery) - #8621 `e8ed6eb` contrib: python: Don't use shell=True (MarcoFalke) - #9269 `43e8150` Align struct COrphan definition (sipa) +- #9820 `599c69a` Fix pruning test broken by 2 hour manual prune window (ryanofsky) +- #9824 `260c71c` qa: Check return code when stopping nodes (MarcoFalke) ### Documentation - #8332 `806b9e7` Clarify witness branches in transaction.h serialization (dcousens) @@ -713,6 +722,7 @@ and git merge commit are mentioned. - #9679 `a351162` Access WorkQueue::running only within the cs lock (TheBlueMatt) - #9777 `8dee822` Handle unusual maxsigcachesize gracefully (jnewbery) - #8863,#8807 univalue: Pull subtree (MarcoFalke) +- #9798 `e22c067` Fix Issue #9775 (Check returned value of fopen) (kirit93) Credits ======= @@ -771,6 +781,7 @@ Thanks to everyone who directly contributed to this release: - Justin Camarena - Karl-Johan Alm - Kaz Wesley +- kirit93 - Koki Takahashi - Lauda - leijurv From 95e68dfe35bb34e437d56c2c97cdfe6fc0a7b30b Mon Sep 17 00:00:00 2001 From: Cory Fields Date: Fri, 17 Feb 2017 15:37:18 -0500 Subject: [PATCH 028/136] release: add a few performance-related notes --- doc/release-notes.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/doc/release-notes.md b/doc/release-notes.md index 032f7147a3a..700fc1fe663 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -33,6 +33,28 @@ frequently tested on them. Notable changes =============== +Performance Improvements +-------------- + +Validation speed and network propagation performance have been greatly +improved, leading to much shorter sync and initial block download times. + +- The script signature cache has been reimplemented as a "cuckoo cache", + allowing for more signatures to be cached and faster lookups. +- Assumed-valid blocks have been introduced which allows script validation to + be skipped for ancestors of known-good blocks, without changing the security + model. See below for more details. +- In some cases, compact blocks are now relayed before being fully validated as + per BIP152. +- P2P networking has been refactored with a focus on concurrency and + throughput. Network operations are no longer bottlenecked by validation. As a + result, block fetching is several times faster than previous releases in many + cases. +- The UTXO cache now claims unused mempool memory. This speeds up initial block + download as UTXO lookups are a major bottleneck there, and there is no use for + the mempool at that stage. + + Manual Pruning -------------- From fa230fde648937f7d7f704a54d621c2366cfb4c4 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Fri, 24 Feb 2017 01:36:32 +0100 Subject: [PATCH 029/136] doc: Small release notes fixups in the list of pulls --- doc/release-notes.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/doc/release-notes.md b/doc/release-notes.md index 33f5ed1f87e..557f8985d06 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -359,7 +359,6 @@ and git merge commit are mentioned. - #8788 `97c7f73` Give RPC commands more information about the RPC request (jonasschnelli) - #7948 `5d2c8e5` Augment getblockchaininfo bip9\_softforks data (mruddy) - #8980 `0e22855` importmulti: Avoid using boost::variant::operator!=, which is only in newer boost versions (luke-jr) -- #9087 `924de0b` Give more details when "generate" fails (jtimon) - #9025 `4d8558a` Getrawtransaction should take a bool for verbose (jnewbery) - #8811 `5754e03` Add support for JSON-RPC named arguments (laanwj) - #9520 `2456a83` Deprecate non-txindex getrawtransaction and better warning (sipa) @@ -419,7 +418,7 @@ and git merge commit are mentioned. - #9349 `2db4cbc` Make CScript (and prevector) c++11 movable (sipa) - #9252 `ce5c1f4` Release cs\_main before calling ProcessNewBlock, or processing headers (cmpctblock handling) (sdaftuar) - #9283 `869781c` A few more CTransactionRef optimizations (sipa) -- #9499 `9c9af5a` Use recent-rejects, orphans, and recently-replaced txn for compact-block-reconstruction +- #9499 `9c9af5a` Use recent-rejects, orphans, and recently-replaced txn for compact-block-reconstruction (TheBlueMatt) - #9813 `3972a8e` Read/write mempool.dat as a binary (paveljanik) ### P2P protocol and network code @@ -566,7 +565,6 @@ and git merge commit are mentioned. - #9817 `7d75a5a` Fix segfault crash when shutdown the GUI in disablewallet mode (jonasschnelli) ### Wallet -- #8367 `045106b` Ensure <0.13 clients can't open HD wallets (jonasschnelli) - #8152 `b9c1cd8` Remove `CWalletDB*` parameter from CWallet::AddToWallet (pstratem) - #8432 `c7e05b3` Make CWallet::fFileBacked private (pstratem) - #8445 `f916700` Move CWallet::setKeyPool to private section of CWallet (pstratem) @@ -577,7 +575,7 @@ and git merge commit are mentioned. - #8696 `a1f8d3e` Wallet: Remove last external reference to CWalletDB (pstratem) - #8768 `886e8c9` init: Get rid of fDisableWallet (MarcoFalke) - #8486 `ab0b411` Add high transaction fee warnings (MarcoFalke) -- #8851 `940748b` Move key derivation logic from GenerateNewKey to DeriveNewChildKey (pstratem) (MarcoFalke) +- #8851 `940748b` Move key derivation logic from GenerateNewKey to DeriveNewChildKey (pstratem) - #8287 `e10af96` Set fLimitFree = true (MarcoFalke) - #8928 `c587577` Fix init segfault where InitLoadWallet() calls ATMP before genesis (TheBlueMatt) - #7551 `f2d7056` Add importmulti RPC call (pedrobranco) @@ -656,7 +654,6 @@ and git merge commit are mentioned. - #9691 `fc67cd2` Init ECC context for `test_bitcoin_fuzzy` (gmaxwell) - #9712 `d304fef` bench: Fix initialization order in registration (laanwj) - #9707 `b860915` Fix RPC failure testing (jnewbery) -- #8621 `e8ed6eb` contrib: python: Don't use shell=True (MarcoFalke) - #9269 `43e8150` Align struct COrphan definition (sipa) - #9820 `599c69a` Fix pruning test broken by 2 hour manual prune window (ryanofsky) - #9824 `260c71c` qa: Check return code when stopping nodes (MarcoFalke) @@ -702,6 +699,7 @@ and git merge commit are mentioned. - #8274 `7a2d402` util: Update tinyformat (laanwj) - #8291 `5cac8b1` util: CopyrightHolders: Check for untranslated substitution (MarcoFalke) - #8557 `44691f3` contrib: Rework verifybinaries (MarcoFalke) +- #8621 `e8ed6eb` contrib: python: Don't use shell=True (MarcoFalke) - #8813 `fb24d7e` bitcoind: Daemonize using daemon(3) (laanwj) - #9004 `67728a3` Clarify `listenonion` (unsystemizer) - #8674 `bae81b8` tools for analyzing, updating and adding copyright headers in source files (isle2983) From eddaa6b35d41aefead1a57ea54e7e15ce069f79a Mon Sep 17 00:00:00 2001 From: Russell Yanofsky Date: Thu, 23 Feb 2017 13:05:40 -0500 Subject: [PATCH 030/136] [qa] Make import-rescan.py watchonly check reliable Send payments during the test from a different node than the node generating keys to be imported, so the spending node doesn't create transactions that inadvertently involve (spend funds from) the imported keys. Fixes #9826 Github-Pull: #9839 Rebased-From: 864890adf5fefcf969f82f70949199b68b36f165 --- qa/rpc-tests/import-rescan.py | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/qa/rpc-tests/import-rescan.py b/qa/rpc-tests/import-rescan.py index 54cc6d2642a..7f2c321746c 100755 --- a/qa/rpc-tests/import-rescan.py +++ b/qa/rpc-tests/import-rescan.py @@ -5,11 +5,11 @@ """Test rescan behavior of importaddress, importpubkey, importprivkey, and importmulti RPCs with different types of keys and rescan options. -In the first part of the test, node 0 creates an address for each type of -import RPC call and sends BTC to it. Then other nodes import the addresses, -and the test makes listtransactions and getbalance calls to confirm that the -importing node either did or did not execute rescans picking up the send -transactions. +In the first part of the test, node 1 creates an address for each type of +import RPC call and node 0 sends BTC to it. Then other nodes import the +addresses, and the test makes listtransactions and getbalance calls to confirm +that the importing node either did or did not execute rescans picking up the +send transactions. In the second part of the test, node 0 sends more BTC to each address, and the test makes more listtransactions and getbalance calls to confirm that the @@ -81,6 +81,12 @@ def check(self, txid=None, amount=None, confirmations=None): assert_equal(tx["txid"], txid) assert_equal(tx["confirmations"], confirmations) assert_equal("trusted" not in tx, True) + # Verify the transaction is correctly marked watchonly depending on + # whether the transaction pays to an imported public key or + # imported private key. The test setup ensures that transaction + # inputs will not be from watchonly keys (important because + # involvesWatchonly will be true if either the transaction output + # or inputs are watchonly). if self.data != Data.priv: assert_equal(tx["involvesWatchonly"], True) else: @@ -106,11 +112,11 @@ def check(self, txid=None, amount=None, confirmations=None): class ImportRescanTest(BitcoinTestFramework): def __init__(self): super().__init__() - self.num_nodes = 1 + len(IMPORT_NODES) + self.num_nodes = 2 + len(IMPORT_NODES) def setup_network(self): extra_args = [["-debug=1"] for _ in range(self.num_nodes)] - for i, import_node in enumerate(IMPORT_NODES, 1): + for i, import_node in enumerate(IMPORT_NODES, 2): if import_node.prune: extra_args[i] += ["-prune=1"] @@ -123,9 +129,9 @@ def run_test(self): # each possible type of wallet import RPC. for i, variant in enumerate(IMPORT_VARIANTS): variant.label = "label {} {}".format(i, variant) - variant.address = self.nodes[0].validateaddress(self.nodes[0].getnewaddress(variant.label)) - variant.key = self.nodes[0].dumpprivkey(variant.address["address"]) - variant.initial_amount = 25 - (i + 1) / 4.0 + variant.address = self.nodes[1].validateaddress(self.nodes[1].getnewaddress(variant.label)) + variant.key = self.nodes[1].dumpprivkey(variant.address["address"]) + variant.initial_amount = 10 - (i + 1) / 4.0 variant.initial_txid = self.nodes[0].sendtoaddress(variant.address["address"], variant.initial_amount) # Generate a block containing the initial transactions, then another @@ -142,7 +148,7 @@ def run_test(self): for variant in IMPORT_VARIANTS: variant.expect_disabled = variant.rescan == Rescan.yes and variant.prune and variant.call == Call.single expect_rescan = variant.rescan == Rescan.yes and not variant.expect_disabled - variant.node = self.nodes[1 + IMPORT_NODES.index(ImportNode(variant.prune, expect_rescan))] + variant.node = self.nodes[2 + IMPORT_NODES.index(ImportNode(variant.prune, expect_rescan))] variant.do_import(timestamp) if expect_rescan: variant.expected_balance = variant.initial_amount @@ -156,7 +162,7 @@ def run_test(self): # Create new transactions sending to each address. fee = self.nodes[0].getnetworkinfo()["relayfee"] for i, variant in enumerate(IMPORT_VARIANTS): - variant.sent_amount = 25 - (2 * i + 1) / 8.0 + variant.sent_amount = 10 - (2 * i + 1) / 8.0 variant.sent_txid = self.nodes[0].sendtoaddress(variant.address["address"], variant.sent_amount) # Generate a block containing the new transactions. From 50ae5c711a35828e91bbf880c9508776703ec51e Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Sun, 26 Feb 2017 12:15:47 -0500 Subject: [PATCH 031/136] Document increase in memory usage due to mempool/dbcache sharing --- doc/release-notes.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/doc/release-notes.md b/doc/release-notes.md index 557f8985d06..1bf9261c8d6 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -342,6 +342,16 @@ Fundrawtransaction change address reuse - Users should also consider using `getrawchangeaddress()` in conjunction with `fundrawtransaction`'s `changeAddress` option. +Unused mempool memory used by coincache +---------------------------------------- + +- Before 0.14, memory reserved for mempool (using the `-maxmempool` option) + went unused during initial block download, or IBD. In 0.14, the UTXO DB cache + (controlled with the `-dbcache` option) borrows memory from the mempool + when there is extra memory available. This may result in an increase in + memory usage during IBD for those previously relying on only the `-dbcache` + option to limit memory during that time. + 0.14.0 Change log ================= From 29bae0c6c5a03890e3498f1ee194f5bef5426091 Mon Sep 17 00:00:00 2001 From: Russell Yanofsky Date: Mon, 27 Feb 2017 11:35:35 -0500 Subject: [PATCH 032/136] Mention bumpfee in 0.14 release notes. --- doc/release-notes.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/release-notes.md b/doc/release-notes.md index 33f5ed1f87e..9c7064d0dcc 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -168,7 +168,8 @@ Opt into RBF When Sending A new startup option, `-walletrbf`, has been added to allow users to have all transactions sent opt into RBF support. The default value for this option is -currently `false`, so transactions will not opt into RBF by default. +currently `false`, so transactions will not opt into RBF by default. The new +`bumpfee` RPC can be used to replace transactions that opt into RBF. Sensitive Data Is No Longer Stored In Debug Console History ----------------------------------------------------------- @@ -247,6 +248,11 @@ Low-level RPC changes optimizations to memory management. See [Pull #8753](https://github.com/bitcoin/bitcoin/pull/8753) for more information. + - A new RPC command `bumpfee` has been added which allows replacing an + unconfirmed wallet transaction that signaled RBF (see the `-walletrbf` + startup option above) with a new transaction that pays a higher fee, and + should be more likely to get confirmed quickly. + HTTP REST Changes ----------------- From 50953c2aadca85c8664eac612072b0df98fceee7 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Mon, 27 Feb 2017 13:15:39 +0100 Subject: [PATCH 033/136] tests: Fix dangling pwalletMain pointer in wallet tests Github-Pull: #9875 Rebased-From: 75a109338fbbe9a30c54d76010b538c8ac1080ac --- src/wallet/test/wallet_tests.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/wallet/test/wallet_tests.cpp b/src/wallet/test/wallet_tests.cpp index d32e8ba06ad..43d7e3c617d 100644 --- a/src/wallet/test/wallet_tests.cpp +++ b/src/wallet/test/wallet_tests.cpp @@ -397,6 +397,7 @@ BOOST_FIXTURE_TEST_CASE(rescan, TestChain100Setup) { CWallet wallet; + CWallet *backup = ::pwalletMain; ::pwalletMain = &wallet; UniValue key; key.setObject(); @@ -412,6 +413,7 @@ BOOST_FIXTURE_TEST_CASE(rescan, TestChain100Setup) UniValue response = importmulti(request); BOOST_CHECK_EQUAL(response.write(), strprintf("[{\"success\":false,\"error\":{\"code\":-1,\"message\":\"Failed to rescan before time %d, transactions may be missing.\"}}]", newTip->GetBlockTimeMax())); + ::pwalletMain = backup; } } From 69832aaad53c9236062ad89c28ad5f28b359b448 Mon Sep 17 00:00:00 2001 From: Cory Fields Date: Fri, 24 Feb 2017 18:20:03 -0500 Subject: [PATCH 034/136] don't throw std::bad_alloc when out of memory. Instead, terminate immediately Github-Pull: #9856 Rebased-From: c5f008a4166bae4350881a74fc04a87d7a5c4ed5 --- src/init.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/init.cpp b/src/init.cpp index 7c108ac4a63..5820d8f57c3 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -801,6 +801,19 @@ ServiceFlags nLocalServices = NODE_NETWORK; } +[[noreturn]] static void new_handler_terminate() +{ + // Rather than throwing std::bad-alloc if allocation fails, terminate + // immediately to (try to) avoid chain corruption. + // Since LogPrintf may itself allocate memory, set the handler directly + // to terminate first. + std::set_new_handler(std::terminate); + LogPrintf("Error: Out of memory. Terminating.\n"); + + // The log was successful, terminate now. + std::terminate(); +}; + bool AppInitBasicSetup() { // ********************************************************* Step 1: setup @@ -853,6 +866,9 @@ bool AppInitBasicSetup() // Ignore SIGPIPE, otherwise it will bring the daemon down if the client closes unexpectedly signal(SIGPIPE, SIG_IGN); #endif + + std::set_new_handler(new_handler_terminate); + return true; } From 775cf54d0e0ad97e043e46fd88018ed6e0bd2684 Mon Sep 17 00:00:00 2001 From: Cory Fields Date: Sat, 25 Feb 2017 01:06:25 -0500 Subject: [PATCH 035/136] prevector: assert successful allocation Github-Pull: #9856 Rebased-From: d4ee7baef729da5e18b5e5c3d6ddb5b97df8d4e4 --- src/prevector.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/prevector.h b/src/prevector.h index 6b2f578f5c8..cba2e30057a 100644 --- a/src/prevector.h +++ b/src/prevector.h @@ -5,6 +5,7 @@ #ifndef _BITCOIN_PREVECTOR_H_ #define _BITCOIN_PREVECTOR_H_ +#include #include #include #include @@ -170,10 +171,15 @@ class prevector { } } else { if (!is_direct()) { + /* FIXME: Because malloc/realloc here won't call new_handler if allocation fails, assert + success. These should instead use an allocator or new/delete so that handlers + are called as necessary, but performance would be slightly degraded by doing so. */ _union.indirect = static_cast(realloc(_union.indirect, ((size_t)sizeof(T)) * new_capacity)); + assert(_union.indirect); _union.capacity = new_capacity; } else { char* new_indirect = static_cast(malloc(((size_t)sizeof(T)) * new_capacity)); + assert(new_indirect); T* src = direct_ptr(0); T* dst = reinterpret_cast(new_indirect); memcpy(dst, src, size() * sizeof(T)); From 08e0690f3f3b2f33040916200e8d4444298cf226 Mon Sep 17 00:00:00 2001 From: Russell Yanofsky Date: Thu, 23 Feb 2017 13:44:12 -0500 Subject: [PATCH 036/136] Update sendfrom RPC help to correct coin selection misconception Github-Pull: #9840 Rebased-From: f81f0d003079b96b8c33d3dfe76f90e50344bcd8 --- src/wallet/rpcwallet.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 45b572aa2e2..510b2d6ebcd 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -819,6 +819,9 @@ UniValue sendfrom(const JSONRPCRequest& request) + HelpRequiringPassphrase() + "\n" "\nArguments:\n" "1. \"fromaccount\" (string, required) The name of the account to send funds from. May be the default account using \"\".\n" + " Specifying an account does not influence coin selection, but it does associate the newly created\n" + " transaction with the account, so the account's balance computation and transaction history can reflect\n" + " the spend.\n" "2. \"toaddress\" (string, required) The bitcoin address to send funds to.\n" "3. amount (numeric or string, required) The amount in " + CURRENCY_UNIT + " (transaction fee is added on top).\n" "4. minconf (numeric, optional, default=1) Only use funds with at least this many confirmations.\n" From a48b998ff377a827357732b8868b0de10768129d Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Mon, 27 Feb 2017 12:14:14 -0500 Subject: [PATCH 037/136] [doc] Update doc/bips.md for BIP90 implementation Github-Pull: #9879 Rebased-From: fe71661ae16abe09dcf245ee2eb4c55c5655b219 --- doc/bips.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/bips.md b/doc/bips.md index 4f416100891..bc8dcb6fb3c 100644 --- a/doc/bips.md +++ b/doc/bips.md @@ -20,6 +20,7 @@ BIPs that are implemented by Bitcoin Core (up-to-date up to **v0.13.0**): * [`BIP 66`](https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki): The strict DER rules and associated version 3 blocks have been implemented since **v0.10.0** ([PR #5713](https://github.com/bitcoin/bitcoin/pull/5713)). * [`BIP 68`](https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki): Sequence locks have been implemented as of **v0.12.1** ([PR #7184](https://github.com/bitcoin/bitcoin/pull/7184)), and have been activated since *block 419328*. * [`BIP 70`](https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki) [`71`](https://github.com/bitcoin/bips/blob/master/bip-0071.mediawiki) [`72`](https://github.com/bitcoin/bips/blob/master/bip-0072.mediawiki): Payment Protocol support has been available in Bitcoin Core GUI since **v0.9.0** ([PR #5216](https://github.com/bitcoin/bitcoin/pull/5216)). +* [`BIP 90`](https://github.com/bitcoin/bips/blob/master/bip-0090.mediawiki): Trigger mechanism for activation of BIPs 34, 65, and 66 has been simplified to block height checks since **v0.14.0** ([PR #8391](https://github.com/bitcoin/bitcoin/pull/8391)). * [`BIP 111`](https://github.com/bitcoin/bips/blob/master/bip-0111.mediawiki): `NODE_BLOOM` service bit added, and enforced for all peer versions as of **v0.13.0** ([PR #6579](https://github.com/bitcoin/bitcoin/pull/6579) and [PR #6641](https://github.com/bitcoin/bitcoin/pull/6641)). * [`BIP 112`](https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki): The CHECKSEQUENCEVERIFY opcode has been implemented since **v0.12.1** ([PR #7524](https://github.com/bitcoin/bitcoin/pull/7524)) and has been activated since *block 419328*. * [`BIP 113`](https://github.com/bitcoin/bips/blob/master/bip-0113.mediawiki): Median time past lock-time calculations have been implemented since **v0.12.1** ([PR #6566](https://github.com/bitcoin/bitcoin/pull/6566)) and have been activated since *block 419328*. From 289204fbe0c188b3cd145dd7b2e271f97a956ba3 Mon Sep 17 00:00:00 2001 From: Marijn Stollenga Date: Sun, 26 Feb 2017 14:01:05 +0100 Subject: [PATCH 038/136] Change bitcoin address in RPC helpaddress to an invalid address, so people don't accidentally send coins there (like I did). Github-Pull: #9865 Rebased-From: 83ac719d34f98cc1d3efa6ece2b95145bcde8775 --- src/rpc/misc.cpp | 8 ++++---- src/wallet/rpcwallet.cpp | 30 +++++++++++++++--------------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index 6fd50127bd5..0bcc2a97cc3 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -347,11 +347,11 @@ UniValue verifymessage(const JSONRPCRequest& request) "\nUnlock the wallet for 30 seconds\n" + HelpExampleCli("walletpassphrase", "\"mypassphrase\" 30") + "\nCreate the signature\n" - + HelpExampleCli("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"my message\"") + + + HelpExampleCli("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"my message\"") + "\nVerify the signature\n" - + HelpExampleCli("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"signature\" \"my message\"") + + + HelpExampleCli("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"signature\" \"my message\"") + "\nAs json rpc\n" - + HelpExampleRpc("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\", \"signature\", \"my message\"") + + HelpExampleRpc("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\", \"signature\", \"my message\"") ); LOCK(cs_main); @@ -400,7 +400,7 @@ UniValue signmessagewithprivkey(const JSONRPCRequest& request) "\nCreate the signature\n" + HelpExampleCli("signmessagewithprivkey", "\"privkey\" \"my message\"") + "\nVerify the signature\n" - + HelpExampleCli("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"signature\" \"my message\"") + + + HelpExampleCli("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"signature\" \"my message\"") + "\nAs json rpc\n" + HelpExampleRpc("signmessagewithprivkey", "\"privkey\", \"my message\"") ); diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 510b2d6ebcd..5cf1592376f 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -236,8 +236,8 @@ UniValue setaccount(const JSONRPCRequest& request) "1. \"address\" (string, required) The bitcoin address to be associated with an account.\n" "2. \"account\" (string, required) The account to assign the address to.\n" "\nExamples:\n" - + HelpExampleCli("setaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"tabby\"") - + HelpExampleRpc("setaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\", \"tabby\"") + + HelpExampleCli("setaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"tabby\"") + + HelpExampleRpc("setaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\", \"tabby\"") ); LOCK2(cs_main, pwalletMain->cs_wallet); @@ -283,8 +283,8 @@ UniValue getaccount(const JSONRPCRequest& request) "\nResult:\n" "\"accountname\" (string) the account address\n" "\nExamples:\n" - + HelpExampleCli("getaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\"") - + HelpExampleRpc("getaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\"") + + HelpExampleCli("getaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\"") + + HelpExampleRpc("getaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\"") ); LOCK2(cs_main, pwalletMain->cs_wallet); @@ -503,11 +503,11 @@ UniValue signmessage(const JSONRPCRequest& request) "\nUnlock the wallet for 30 seconds\n" + HelpExampleCli("walletpassphrase", "\"mypassphrase\" 30") + "\nCreate the signature\n" - + HelpExampleCli("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"my message\"") + + + HelpExampleCli("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"my message\"") + "\nVerify the signature\n" - + HelpExampleCli("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"signature\" \"my message\"") + + + HelpExampleCli("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"signature\" \"my message\"") + "\nAs json rpc\n" - + HelpExampleRpc("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\", \"my message\"") + + HelpExampleRpc("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\", \"my message\"") ); LOCK2(cs_main, pwalletMain->cs_wallet); @@ -556,13 +556,13 @@ UniValue getreceivedbyaddress(const JSONRPCRequest& request) "amount (numeric) The total amount in " + CURRENCY_UNIT + " received at this address.\n" "\nExamples:\n" "\nThe amount from transactions with at least 1 confirmation\n" - + HelpExampleCli("getreceivedbyaddress", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\"") + + + HelpExampleCli("getreceivedbyaddress", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\"") + "\nThe amount including unconfirmed transactions, zero confirmations\n" - + HelpExampleCli("getreceivedbyaddress", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" 0") + + + HelpExampleCli("getreceivedbyaddress", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" 0") + "\nThe amount with at least 6 confirmation, very safe\n" - + HelpExampleCli("getreceivedbyaddress", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" 6") + + + HelpExampleCli("getreceivedbyaddress", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" 6") + "\nAs a json rpc call\n" - + HelpExampleRpc("getreceivedbyaddress", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\", 6") + + HelpExampleRpc("getreceivedbyaddress", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\", 6") ); LOCK2(cs_main, pwalletMain->cs_wallet); @@ -906,13 +906,13 @@ UniValue sendmany(const JSONRPCRequest& request) " the number of addresses.\n" "\nExamples:\n" "\nSend two amounts to two different addresses:\n" - + HelpExampleCli("sendmany", "\"\" \"{\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\\\":0.01,\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\":0.02}\"") + + + HelpExampleCli("sendmany", "\"\" \"{\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\\\":0.01,\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\":0.02}\"") + "\nSend two amounts to two different addresses setting the confirmation and comment:\n" - + HelpExampleCli("sendmany", "\"\" \"{\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\\\":0.01,\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\":0.02}\" 6 \"testing\"") + + + HelpExampleCli("sendmany", "\"\" \"{\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\\\":0.01,\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\":0.02}\" 6 \"testing\"") + "\nSend two amounts to two different addresses, subtract fee from amount:\n" - + HelpExampleCli("sendmany", "\"\" \"{\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\\\":0.01,\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\":0.02}\" 1 \"\" \"[\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\\\",\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\"]\"") + + + HelpExampleCli("sendmany", "\"\" \"{\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\\\":0.01,\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\":0.02}\" 1 \"\" \"[\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\\\",\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\"]\"") + "\nAs a json rpc call\n" - + HelpExampleRpc("sendmany", "\"\", \"{\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\\\":0.01,\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\":0.02}\", 6, \"testing\"") + + HelpExampleRpc("sendmany", "\"\", \"{\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\\\":0.01,\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\":0.02}\", 6, \"testing\"") ); LOCK2(cs_main, pwalletMain->cs_wallet); From 1825a03f8144572eaf532b6b3b3acc1a09577d1f Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Fri, 17 Feb 2017 15:28:28 -0800 Subject: [PATCH 039/136] Avoid VLA in hash.h Github-Pull: #9791 Rebased-From: 5c8fd508112016c3821b71112270afe83e6949ac --- src/hash.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hash.h b/src/hash.h index 3b86fcc033c..eacb8f04fef 100644 --- a/src/hash.h +++ b/src/hash.h @@ -25,9 +25,9 @@ class CHash256 { static const size_t OUTPUT_SIZE = CSHA256::OUTPUT_SIZE; void Finalize(unsigned char hash[OUTPUT_SIZE]) { - unsigned char buf[sha.OUTPUT_SIZE]; + unsigned char buf[CSHA256::OUTPUT_SIZE]; sha.Finalize(buf); - sha.Reset().Write(buf, sha.OUTPUT_SIZE).Finalize(hash); + sha.Reset().Write(buf, CSHA256::OUTPUT_SIZE).Finalize(hash); } CHash256& Write(const unsigned char *data, size_t len) { @@ -49,9 +49,9 @@ class CHash160 { static const size_t OUTPUT_SIZE = CRIPEMD160::OUTPUT_SIZE; void Finalize(unsigned char hash[OUTPUT_SIZE]) { - unsigned char buf[sha.OUTPUT_SIZE]; + unsigned char buf[CSHA256::OUTPUT_SIZE]; sha.Finalize(buf); - CRIPEMD160().Write(buf, sha.OUTPUT_SIZE).Finalize(hash); + CRIPEMD160().Write(buf, CSHA256::OUTPUT_SIZE).Finalize(hash); } CHash160& Write(const unsigned char *data, size_t len) { From 8d2d08efaa5fb6b29638fef7fb9bdf051db85f2e Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Tue, 28 Feb 2017 11:48:40 +0000 Subject: [PATCH 040/136] qt: pre-rc3 translations update --- src/qt/locale/bitcoin_es.ts | 48 ++++ src/qt/locale/bitcoin_sk.ts | 642 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 679 insertions(+), 11 deletions(-) diff --git a/src/qt/locale/bitcoin_es.ts b/src/qt/locale/bitcoin_es.ts index e23064b0fef..6e220ea9605 100644 --- a/src/qt/locale/bitcoin_es.ts +++ b/src/qt/locale/bitcoin_es.ts @@ -486,6 +486,10 @@ %1 cliente + Connecting to peers... + Conectando a pares... + + Catching up... Actualizando... @@ -2473,6 +2477,10 @@ TransactionDesc + + Open for %n more block(s) + Abrir para %n bloque másAbrir para %n bloques más + Open until %1 Abierto hasta %1 @@ -2517,6 +2525,10 @@ , has not been successfully broadcast yet , no ha sido emitido con éxito aún + + , broadcast through %n node(s) + , transmitir a través de %n nodo, transmitir a través de %n nodos + Date Fecha @@ -2557,6 +2569,10 @@ Credit Credito + + matures in %n more block(s) + disponible en %n bloque másdisponible en %n bloques más + not accepted no aceptada @@ -2594,6 +2610,10 @@ Identificador de transacción (ID) + Transaction total size + Tamaño total de transacción + + Output index Indice de salida @@ -2655,6 +2675,10 @@ Label Etiqueta + + Open for %n more block(s) + Abrir para %n bloque másAbrir para %n bloques más + Open until %1 Abierto hasta %1 @@ -2988,6 +3012,18 @@ + Accept connections from outside (default: 1 if no -proxy or -connect/-noconnect) + Aceptar conexiones desde el exterior (predeterminado: 1 si no -proxy o -connect/-desconectar) + + + Connect only to the specified node(s); -noconnect or -connect=0 alone to disable automatic connections + Conectar sólo al nodo(s) especificado; -no conectar or -conectar=solo 0 para deshabilitar conexiones automáticas + + + Distributed under the MIT software license, see the accompanying file %s or %s + Distribuido bajo la licencia de software MIT, vea el archivo adjunto %s o %s + + If <category> is not supplied or if <category> = 1, output all debugging information. Si <category> no es proporcionado o si <category> =1, muestra toda la información de depuración. @@ -3065,6 +3101,14 @@ Ejecutar comando cuando una transacción del monedero cambia (%s en cmd se remplazará por TxID) + Extra transactions to keep in memory for compact block reconstructions (default: %u) + Transacciones extra a mantener en la memoria para reconstrucciones de bloque compacto (predeterminado: %u) + + + If this block is in the chain assume that it and its ancestors are valid and potentially skip their script verification (0 to verify all, default: %s, testnet: %s) + Si este bloque está en la cadena asuma que sus predecesores y él son válidos y potencialmente se saltan su script de verificación (0 para verificar todo, predeterminado: %s, testnet: %s) + + Maximum allowed median peer time offset adjustment. Local perspective of time may be influenced by peers forward or backward by this amount. (default: %u seconds) Ajuste máximo permitido del tiempo offset medio de pares. La perspectiva local de tiempo se verá influenciada por los pares anteriores y posteriores a esta cantidad. (Por defecto: %u segundos) @@ -3680,6 +3724,10 @@ Establecer la serialización de las transacciones sin procesar o el bloque hex d Dirección -proxy inválida: '%s' + Keypool ran out, please call keypoolrefill first + Keypool se ha agotado, llame a keypoolrefill primero + + Listen for JSON-RPC connections on <port> (default: %u or testnet: %u) Escuchar conexiones JSON-RPC en <puerto> (predeterminado: %u o testnet: %u) diff --git a/src/qt/locale/bitcoin_sk.ts b/src/qt/locale/bitcoin_sk.ts index 87dc620f0e1..1bc26d55d66 100644 --- a/src/qt/locale/bitcoin_sk.ts +++ b/src/qt/locale/bitcoin_sk.ts @@ -41,10 +41,62 @@ &Delete &Zmazať - + + Choose the address to send coins to + Zvoľte adresu kam poslať mince + + + Choose the address to receive coins with + Zvoľte adresu na ktorú chcete prijať mince + + + Sending addresses + Odosielajúce adresy + + + Receiving addresses + Prijímajúce adresy + + + These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Toto sú Vaše Bitcoin adresy pre posielanie platieb. Vždy skontrolujte sumu a prijímaciu adresu pred poslaním mincí. + + + These are your Bitcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Toto sú vaše Bitcoin adresy pre prijímanie platieb. Odporúča sa použiť vždy novú prijímaciu adresu pre každú transakciu. + + + &Copy Address + &Kopírovať adresu + + + Copy &Label + Kopírovať &popis + + + &Edit + &Upraviť + + + Export Address List + Exportovať zoznam adries + + + There was an error trying to save the address list to %1. Please try again. + Nastala chyba pri pokuse uložiť zoznam adries do %1. Skúste znovu. + + AddressTableModel + Label + Popis + + + Address + Adresa + + (no label) (bez popisu) @@ -67,6 +119,38 @@ Repeat new passphrase Zopakujte nové heslo + + Encrypt wallet + Zašifrovať peňaženku + + + Unlock wallet + Odomknúť peňaženku + + + Decrypt wallet + Dešifrovať peňaženku + + + Change passphrase + Zmena hesla + + + Confirm wallet encryption + Potvrďte zašifrovanie peňaženky + + + Are you sure you wish to encrypt your wallet? + Ste si istí, že si želáte zašifrovať peňaženku? + + + Wallet encrypted + Peňaženka zašifrovaná + + + Wallet unlock failed + Odomykanie peňaženky zlyhalo + BanTableModel @@ -439,6 +523,26 @@ Potvrdené + Copy address + Kopírovať adresu + + + Copy label + Kopírovať popis + + + Copy amount + Kopírovať sumu + + + Copy dust + Kopírovať prach + + + This label turns red if any recipient receives an amount smaller than the current dust threshold. + Tento popis sčervenie ak ktorýkoľvek príjemca dostane sumu menšiu ako súčasný limit pre "prach". + + (no label) (bez popisu) @@ -465,6 +569,30 @@ &Address &Adresa + + New receiving address + Nová adresa pre prijímanie + + + New sending address + Nová adresa pre odoslanie + + + Edit receiving address + Upraviť prijímajúcu adresu + + + Edit sending address + Upraviť odosielaciu adresu + + + The entered address "%1" is not a valid Bitcoin address. + Vložená adresa "%1" nieje platnou adresou Bitcoin. + + + The entered address "%1" is already in the address book. + Vložená adresa "%1" sa už nachádza v adresári. + FreespaceChecker @@ -598,6 +726,10 @@ Čas posledného bloku + Estimated time left until synced + Odhadovaný čas do ukončenia synchronizácie + + Hide Skryť @@ -620,7 +752,11 @@ Select payment request file Vyberte súbor s výzvou k platbe - + + Select payment request file to open + Vyberte ktorý súbor s výzvou na platbu otvoriť + + OptionsDialog @@ -933,7 +1069,71 @@ PaymentServer - + + Payment request error + Chyba pri vyžiadaní platby + + + Payment request fetch URL is invalid: %1 + URL pre stiahnutie výzvy na zaplatenie je neplatné: %1 + + + Invalid payment address %1 + Neplatná adresa platby %1 + + + URI cannot be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters. + URI sa nedá analyzovať! To môže byť spôsobené neplatnou Bitcoin adresou alebo zle nastavenými vlastnosťami URI. + + + Payment request file handling + Obsluha súboru s požiadavkou na platbu + + + Payment request file cannot be read! This can be caused by an invalid payment request file. + Súbor s výzvou na zaplatenie sa nedá čítať! To môže byť spôsobené aj neplatným súborom s výzvou. + + + Payment request rejected + Požiadavka na platbu zamietnutá + + + Payment request network doesn't match client network. + Sieť požiadavky na platbu nie je zhodná so sieťou klienta. + + + Payment request expired. + Vypršala platnosť požiadavky na platbu. + + + Payment request is not initialized. + Požiadavka na platbu nie je inicializovaná + + + Unverified payment requests to custom payment scripts are unsupported. + Program nepodporuje neoverené platobné požiadavky na vlastné skripty. + + + Invalid payment request. + Chybná požiadavka na platbu. + + + Requested payment amount of %1 is too small (considered dust). + Požadovaná suma platby %1 je príliš nízka (považovaná za prach). + + + Payment request %1 is too large (%2 bytes, allowed %3 bytes). + Požiadavka na platbu %1 je príliš veľká (%2 bajtov, povolené je %3 bajtov). + + + Payment request cannot be parsed! + Požiadavka na platbu nemôže byť analyzovaná! + + + Payment acknowledged + Platba potvrdená + + PeerTableModel @@ -983,10 +1183,18 @@ %1 ms %1 ms + + %n week(s) + %n týždeň%n týždne%n týždňov + %1 and %2 %1 a %2 + + %n year(s) + %n rok%n roky%n rokov + QObject::QObject @@ -1022,7 +1230,7 @@ Datadir - Zložka s dátami + Priečinok s dátami Startup time @@ -1226,6 +1434,10 @@ Napíš <b>help</b> pre prehľad dostupných príkazov. + WARNING: Scammers have been active, telling users to type commands here, stealing their wallet contents. Do not use this console without fully understanding the ramification of a command. + VAROVANIE: Podvodníci sú aktívni a môžu nabádať používateľov napísať sem príkazy, pomocou ktorých ukradnú ich obsah peňaženky. Nepoužívajte túto konzolu ak nerozumiete presne účinkom príkazov. + + %1 B %1 B @@ -1344,7 +1556,19 @@ Remove Odstrániť - + + Copy label + Kopírovať popis + + + Copy message + Kopírovať správu + + + Copy amount + Kopírovať sumu + + ReceiveRequestDialog @@ -1363,14 +1587,66 @@ &Save Image... Uložiť obrázok... + + Request payment to %1 + Vyžiadať platbu pre %1 + + + Payment information + Informácia o platbe + + + Address + Adresa + + + Amount + Suma + + + Label + Popis + + + Message + Správa + + + Resulting URI too long, try to reduce the text for label / message. + Výsledné URI je príliš dlhé, skúste skrátiť text pre popis alebo správu. + RecentRequestsTableModel + Date + Dátum + + + Label + Popis + + + Message + Správa + + (no label) (bez popisu) - + + (no message) + (žiadna správa) + + + (no amount requested) + (nepožadovaná žiadna suma) + + + Requested + Požadované + + SendCoinsDialog @@ -1498,6 +1774,10 @@ Prach: + Confirmation time target: + Cieľový čas potvrdenia: + + Clear &All &Zmazať všetko @@ -1514,10 +1794,62 @@ &Odoslať + Copy amount + Kopírovať sumu + + + Copy dust + Kopírovať prach + + + Total Amount %1 + Celková suma %1 + + or alebo + Confirm send coins + Potvrďte odoslanie mincí + + + The recipient address is not valid. Please recheck. + Adresa príjemcu je neplatná. Prosím, overte ju. + + + The amount to pay must be larger than 0. + Suma na úhradu musí byť väčšia ako 0. + + + The amount exceeds your balance. + Suma je vyššia ako Váš zostatok. + + + Duplicate address found: addresses should only be used once each. + Našla sa duplicitná adresa: každá adresa by sa mala použiť len raz. + + + Payment request expired. + Vypršala platnosť požiadavky na platbu. + + + Estimated to begin confirmation within %n block(s). + Odhadovaný začiatok potvrdzovania po %n bloku.Odhadovaný začiatok potvrdzovania po %n blokoch.Odhadovaný začiatok potvrdzovania po %n blokoch. + + + Warning: Invalid Bitcoin address + Varovanie: Neplatná Bitcoin adresa + + + Confirm custom change address + Potvrďte zmenu adresy + + + The address you selected for change is not part of this wallet. Any or all funds in your wallet may be sent to this address. Are you sure? + Zadaná adresa nie je súčasťou tejto peňaženky. Časť alebo všetky peniaze z peňaženky môžu byť odoslané na túto adresu. Ste si istý? + + (no label) (bez popisu) @@ -1600,7 +1932,11 @@ Memo: Poznámka: - + + Enter a label for this address to add it to your address book + Zadajte popis pre túto adresu pre pridanie do adresára + + SendConfirmationDialog @@ -1626,6 +1962,10 @@ &Podpísať Správu + You can sign messages/agreements with your addresses to prove you can receive bitcoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + Môžete podpísať správy svojou adresou a dokázať, že viete prijímať mince zaslané na túto adresu. Buďte však opatrní a podpíšte len podrobné prehlásenia, s ktorými plne súhlasíte, nakoľko útoky typu "phishing" Vás môžu lákať k podpísaniu nejasných alebo príliš všeobecných tvrdení čím prevezmú vašu identitu. + + The Bitcoin address to sign the message with Bitcoin adresa pre podpísanie správy s @@ -1678,6 +2018,10 @@ O&veriť správu... + Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction! + Vložte adresu príjemcu, správu (uistite sa, že presne kopírujete ukončenia riadkov, medzery, odrážky, atď.) a podpis pre potvrdenie správy. Buďte opatrní a nedomýšľajte si viac než je uvedené v samotnej podpísanej správe a môžete sa tak vyhnúť podvodu MITM útokom. Toto len potvrdzuje, že podpisujúca strana môže prijímať na tejto adrese, nepotvrdzuje to vlastníctvo žiadnej transakcie! + + The Bitcoin address the message was signed with Adresa Bitcoin, ktorou bola podpísaná správa @@ -1693,7 +2037,55 @@ Reset all verify message fields Obnoviť všetky polia v overiť správu - + + Click "Sign Message" to generate signature + Kliknite "Podpísať správu" pre vytvorenie podpisu + + + The entered address is invalid. + Zadaná adresa je neplatná. + + + Please check the address and try again. + Prosím skontrolujte adresu a skúste znova. + + + The entered address does not refer to a key. + Vložená adresa nezodpovedá žiadnemu kľúču. + + + Private key for the entered address is not available. + Súkromný kľúč pre zadanú adresu nieje k dispozícii. + + + Message signing failed. + Podpísanie správy zlyhalo. + + + Message signed. + Správa podpísaná. + + + The signature could not be decoded. + Podpis nie je možné dekódovať. + + + Please check the signature and try again. + Prosím skontrolujte podpis a skúste znova. + + + The signature did not match the message digest. + Podpis sa nezhoduje so zhrnutím správy. + + + Message verification failed. + Overenie správy zlyhalo. + + + Message verified. + Správa overená. + + SplashScreen @@ -1710,6 +2102,54 @@ TransactionDesc + + conflicted with a transaction with %1 confirmations + koliduje s transakciou s %1 potvrdeniami + + + 0/unconfirmed, %1 + 0/nepotvrdené, %1 + + + %1/unconfirmed + %1/nepotvrdené + + + %1 confirmations + %1 potvrdení + + + Date + Dátum + + + own address + vlastná adresa + + + label + popis + + + Credit + Kredit + + + Total credit + Celkový kredit + + + Net amount + Suma netto + + + Message + Správa + + + Amount + Suma + TransactionDescDialog @@ -1721,12 +2161,180 @@ TransactionTableModel + Date + Dátum + + + Type + Typ + + + Label + Popis + + + Unconfirmed + Nepotvrdené + + + Confirming (%1 of %2 recommended confirmations) + Potvrdzujem (%1 z %2 odporúčaných potvrdení) + + + Confirmed (%1 confirmations) + Potvrdené (%1 potvrdení) + + + Immature (%1 confirmations, will be available after %2) + Nezrelé (%1 potvrdení, bude dostupné po %2) + + + This block was not received by any other nodes and will probably not be accepted! + Ten blok nebol prijatý žiadnym iným uzlom a pravdepodobne nebude akceptovaný! + + + Received with + Prijaté s + + + Received from + Prijaté od + + + Sent to + Odoslané na + + + Payment to yourself + Platba sebe samému + + + Mined + Vyťažené + + (no label) (bez popisu) - + + Transaction status. Hover over this field to show number of confirmations. + Stav transakcie. Prejdite ponad toto pole pre zobrazenie počtu potvrdení. + + + Date and time that the transaction was received. + Dátum a čas prijatia transakcie. + + + Type of transaction. + Typ transakcie. + + + Whether or not a watch-only address is involved in this transaction. + Či je v tejto transakcii adresy iba na sledovanie. + + + Amount removed from or added to balance. + Suma pridaná alebo odobraná k zostatku. + + TransactionView + + All + Všetky + + + Today + Dnes + + + This week + Tento týždeň + + + This month + Tento mesiac + + + Last month + Minulý mesiac + + + This year + Tento rok + + + Range... + Rozsah... + + + Received with + Prijaté s + + + Sent to + Odoslané na + + + To yourself + Ku mne + + + Mined + Vyťažené + + + Other + Iné + + + Enter address or label to search + Zadajte adresu alebo popis pre hľadanie + + + Min amount + Minimálna suma + + + Copy address + Kopírovať adresu + + + Copy label + Kopírovať popis + + + Copy amount + Kopírovať sumu + + + Edit label + Upraviť popis + + + Confirmed + Potvrdené + + + Date + Dátum + + + Type + Typ + + + Label + Popis + + + Address + Adresa + + + Range: + Rozsah: + UnitDisplayStatusBarControl @@ -1796,13 +2404,17 @@ Bitcoin Core - Jadro Bitcoin + Bitcoin Core The %s developers Vývojári %s + Accept relayed transactions received from whitelisted peers even when not relaying transactions (default: %d) + Akceptovať postúpené transakcie od povolených partnerov aj keď normálne nepostupujete transakcie (predvolené: %d) + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 Spojiť s danou adresou a vždy na nej počúvať. Použite zápis [host]:port pre IPv6 @@ -1964,7 +2576,7 @@ Location of the auth cookie (default: data dir) - Poloha overovacieho cookie súboru (predvolená: zložka s dátami) + Umiestnenie overovacieho cookie súboru (predvolená: Priečinok s dátami) Not enough file descriptors available. @@ -2299,6 +2911,10 @@ Varovanie: Peňaženka poškodená, dáta boli zachránené! Originálna %s ako %s v %s; ak váš zostatok alebo transakcie sú nesprávne, mali by ste obnoviť zálohu. + Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. + Povoliť partnerov pripájajúcich sa z danej IP adresy (napr. 1.2.3.4) alebo zo siete vo formáte CIDR (napr. 1.2.3.0/24). Môže byť zadané viackrát. + + (default: %s) (predvolené: %s) @@ -2379,6 +2995,10 @@ Hranica pre odpájanie zle sa správajúcim partnerským uzlom (predvolené: %u) + Transaction amounts must not be negative + Sumy transakcií nesmú byť záporné + + Unknown network specified in -onlynet: '%s' Neznáma sieť upresnená v -onlynet: '%s' From 58800e3556aefbc002b9554b3af5167655fd7943 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Tue, 28 Feb 2017 13:43:04 +0100 Subject: [PATCH 041/136] doc: pre-rc3 changelog update --- doc/release-notes.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/release-notes.md b/doc/release-notes.md index 9d3c3e34fee..37e79958e88 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -497,6 +497,7 @@ and git merge commit are mentioned. - #9765 `1e92e04` Harden against mistakes handling invalid blocks (sdaftuar) - #9779 `3c02b95` Update nMinimumChainWork and defaultAssumeValid (gmaxwell) - #8524 `19b0f33` Precompute sighashes (sipa) +- #9791 `1825a03` Avoid VLA in hash.h (sipa) ### Build system - #8238 `6caf3ee` ZeroMQ 4.1.5 && ZMQ on Windows (fanquake) @@ -673,6 +674,8 @@ and git merge commit are mentioned. - #9269 `43e8150` Align struct COrphan definition (sipa) - #9820 `599c69a` Fix pruning test broken by 2 hour manual prune window (ryanofsky) - #9824 `260c71c` qa: Check return code when stopping nodes (MarcoFalke) +- #9875 `50953c2` tests: Fix dangling pwalletMain pointer in wallet tests (laanwj) +- #9839 `eddaa6b` [qa] Make import-rescan.py watchonly check reliable (ryanofsky) ### Documentation - #8332 `806b9e7` Clarify witness branches in transaction.h serialization (dcousens) @@ -710,6 +713,8 @@ and git merge commit are mentioned. - #8915 `03dd707` Add copyright/patent issues to possible NACK reasons (petertodd) - #8965 `23e03f8` Mention that PPA doesn't support Debian (anduck) - #9115 `bfc7aad` Mention reporting security issues responsibly (paveljanik) +- #9840 `08e0690` Update sendfrom RPC help to correct coin selection misconception (ryanofsky) +- #9865 `289204f` Change bitcoin address in RPC help message (marijnfs) ### Miscellaneous - #8274 `7a2d402` util: Update tinyformat (laanwj) @@ -759,6 +764,7 @@ and git merge commit are mentioned. - #9777 `8dee822` Handle unusual maxsigcachesize gracefully (jnewbery) - #8863,#8807 univalue: Pull subtree (MarcoFalke) - #9798 `e22c067` Fix Issue #9775 (Check returned value of fopen) (kirit93) +- #9856 `69832aa` Terminate immediately when allocation fails (theuni) Credits ======= @@ -825,6 +831,7 @@ Thanks to everyone who directly contributed to this release: - Luke Dashjr - maiiz - MarcoFalke +- Marijn Stollenga - Marty Jones - Masahiko Hyuga - Matt Corallo From ad24256a65aa4281831e14097a29ac1efe8b5c02 Mon Sep 17 00:00:00 2001 From: Russell Yanofsky Date: Wed, 22 Feb 2017 14:11:44 -0500 Subject: [PATCH 042/136] Fix importmulti returning rescan errors for wrong keys Bug was a missing ++i line in a new range for loop added in commit e2e2f4c "Return errors from importmulti if complete rescans are not successful" Github-Pull: #9829 Rebased-From: 306bd72157f089b962b9c537bbacf710a4158647 --- src/wallet/rpcdump.cpp | 1 + src/wallet/test/wallet_tests.cpp | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/wallet/rpcdump.cpp b/src/wallet/rpcdump.cpp index 8a9e7d1444a..20a3cbda1e7 100644 --- a/src/wallet/rpcdump.cpp +++ b/src/wallet/rpcdump.cpp @@ -1098,6 +1098,7 @@ UniValue importmulti(const JSONRPCRequest& mainRequest) result.pushKV("error", JSONRPCError(RPC_MISC_ERROR, strprintf("Failed to rescan before time %d, transactions may be missing.", scannedRange->GetBlockTimeMax()))); response.push_back(std::move(result)); } + ++i; } } } diff --git a/src/wallet/test/wallet_tests.cpp b/src/wallet/test/wallet_tests.cpp index 43d7e3c617d..7ac2112dd29 100644 --- a/src/wallet/test/wallet_tests.cpp +++ b/src/wallet/test/wallet_tests.cpp @@ -395,24 +395,35 @@ BOOST_FIXTURE_TEST_CASE(rescan, TestChain100Setup) BOOST_CHECK_EQUAL(wallet.GetImmatureBalance(), 50 * COIN); } + // Verify importmulti RPC returns failure for a key whose creation time is + // before the missing block, and success for a key whose creation time is + // after. { CWallet wallet; CWallet *backup = ::pwalletMain; ::pwalletMain = &wallet; + UniValue keys; + keys.setArray(); UniValue key; key.setObject(); key.pushKV("scriptPubKey", HexStr(GetScriptForRawPubKey(coinbaseKey.GetPubKey()))); key.pushKV("timestamp", 0); key.pushKV("internal", UniValue(true)); - UniValue keys; - keys.setArray(); + keys.push_back(key); + key.clear(); + key.setObject(); + CKey futureKey; + futureKey.MakeNewKey(true); + key.pushKV("scriptPubKey", HexStr(GetScriptForRawPubKey(futureKey.GetPubKey()))); + key.pushKV("timestamp", newTip->GetBlockTimeMax() + 7200); + key.pushKV("internal", UniValue(true)); keys.push_back(key); JSONRPCRequest request; request.params.setArray(); request.params.push_back(keys); UniValue response = importmulti(request); - BOOST_CHECK_EQUAL(response.write(), strprintf("[{\"success\":false,\"error\":{\"code\":-1,\"message\":\"Failed to rescan before time %d, transactions may be missing.\"}}]", newTip->GetBlockTimeMax())); + BOOST_CHECK_EQUAL(response.write(), strprintf("[{\"success\":false,\"error\":{\"code\":-1,\"message\":\"Failed to rescan before time %d, transactions may be missing.\"}},{\"success\":true}]", newTip->GetBlockTimeMax())); ::pwalletMain = backup; } } From 5e709122343e1a336ee8ee21b003a298a65813f3 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Mon, 27 Feb 2017 20:23:23 -0500 Subject: [PATCH 043/136] Add Pieter's old signed commits to revsig-commits Github-Pull: #9884 Rebased-From: a4b02f4275c3f35492bbdde27e9295497b919a52 --- contrib/verify-commits/allow-revsig-commits | 104 ++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/contrib/verify-commits/allow-revsig-commits b/contrib/verify-commits/allow-revsig-commits index e69de29bb2d..f0088cdca4a 100644 --- a/contrib/verify-commits/allow-revsig-commits +++ b/contrib/verify-commits/allow-revsig-commits @@ -0,0 +1,104 @@ +a06ede9a138d0fb86b0de17c42b936d9fe6e2158 +923dc447eaa8e017985b2afbbb12dd1283fbea0e +71148b8947fe8b4d756822420a7f31c380159425 +6696b4635ceb9b47aaa63244bff9032fa7b08354 +812714fd80e96e28cd288c553c83838cecbfc2d9 +8a445c5651edb9a1f51497055b7ddf4402be9188 +e126d0c12ca66278d9e7b12187c5ff4fc02a7e6c +3908fc4728059719bed0e1c7b1c8b388c2d4a8da +8b66bf74e2a349e71eaa183af81fa63eaee76ad2 +05950427d310654774031764a7141a1a4fd9c6e4 +07fd147b9f12e9205afd66a624edce357977d615 +12e31127948fa4bb01c3bddc1b8c85b432f7465b +8c87f175d335e9d9e93f987d871ae9f05f6a10a7 +46b249e578e8a3dfbe85bc7253a12e82ef4b658b +a55716abe5662ec74c2f8af93023f1e7cca901fc +f646275b90b1de93bc62b4c4d045d75ac0b96eee +c252685aa5867631e9a5ef07ccae7c7c25cae8ff +a7d55c93385359952d85decd5037843ac70ba3d4 +7dac1e5e9e887f5f6ff146e812a05bd3bf281eae +2a524b8e8fe69ef487fd8ea1b4f7a03f473ed201 +ce5c1f4acae43477989cdf9a82ed33703919cda2 +2db4cbcc437f51f5dac82cc4de46f383b92e6f11 +7aa700424cbda387536373d8dfec88aee43f950e +b99a093afed880f23fb279c443cc6ae5e379cc43 +b83264d9c7a8ddb79f64bd9540caddc8632ef31f +57e337d40e94ba33d8cd265c134d6ef857b32b59 +a1dcf2e1087beaf3981739fd2bb74f35ecad630a +d38b0d7a6b6056cba26999b702815775e2437d87 +815640ec6af9a38d6a2da4a4400056e2f4105080 +09c4fd157c5b88df2d97fad4826c79b094db90c9 +2efcfa5acfacb958973d9e8125e1d81f102e2dfd +dc6dee41f7cf2ba93fcd0fea7c157e4b2775d439 +ad826b3df9f763b49f1e3e3d50c4efdd438c7547 +c1a52276848d8caa9a9789dff176408c1aa6b1ed +3bf06e9bac57b5b5a746677b75e297a7b154bdbd +72ae6f8cf0224370e8121d6769b21e612ca15d6f +a143b88dbd4971ecfdd1d39a494489c8f2db0344 +76fec09d878d6dbf214bdb6228d480bd9195db4c +93566e0c37c5ae104095474fea89f00dcb40f551 +407d9232ef5cb1ebf6cff21f3d13e07ea4158eeb +9346f8429957e356d21c665bab59fe45bcf1f74e +6eeac6e30d65f9a972067c1ea8c49978c8e631ac +dc6b9406bdfab2af8c86cb080cb3e6cf8f2385d8 +9f554e03ebe5701c1b75ff03b3d6152095c0cad3 +05009935f9ac070197113954d680bc2c9150b9b3 +508404de98a8a5435f52916cef8f328e82651961 +ed0cc50afed146c27f6d8129c683c225fb940093 +6429cfa8a70308241c576aeb92ffe3db5203b2ef +6898213409811b140843c3d89af43328c3b22fad +5b2ea29cf4fd298346437bb16a54407f8c1f9dca +e2a1a1ee895149c544d4ae295466611f0cec3094 +e82fb872ff5cc8fd22d43327c1ee3e755f61c562 +19b0f33de0efd9da788e8e4f3fdc2a9e159abdb1 +89de1538ce1f8c00f80e8d11f43e1b77e24d7dea +de07fdcf77e97b8613091285e4d0a734f5de7492 +01680195f8aa586c55c44767397380def3a23b54 +05e1c85fb687c82ae477c72d4a7e2d6b0c692167 +c072b8fd95cd4fa84f08189a0cd8b173ea2dbb8e +9a0ed08b40b15ae2b791aa8549b53e69934b4ea7 +53f8f226bd1d627c4a6dec5862a1d4ea5a933e45 +9d0f43b7ca7241d8a018fd35dd3bc01555235ec6 +f12d2b5a8ac397e4bcaefcc19898f8ff5705dea5 +8250de13587ed05ca45df3e12c5dc9bcb1500e2c +d727f77e390426e9e463336bda08d50c451c7086 +484312bda2d43e3ea60047be076332299463adf8 +c7e05b35ab0a791c7a8e2d863e716fdec6f3f671 +b9c1cd81848da9de1baf9c2f29c19c50e549de13 +8ea7d31e384975019733b5778feabbd9955c79d8 +f798b891bcecea9548eedacae70eeb9906c1ddbf +ebefe7a00b46579cdd1e033a8c7fd8ce9aa578e4 +ad087638ee4864d6244ec9381ff764bfa6ee5086 +66db2d62d59817320c9182fc18e75a93b76828ea +7ce9ac5c83b1844a518ef2e12e87aae3cacdfe58 +4286f43025149cf44207c3ad98e4a1f068520ada +cd0c5135ab2291aaa5410ac919bad3fc87249a4a +66ed450d771a8fc01c159a8402648ebd1c35eb4c +a82f03393a32842d49236e8666ee57805ca701f8 +f972b04d63eb8af79ff3cec1dc561ed13dfa6053 +ec45cc5e27668171b55271b0c735194c70e7da41 +715e9fd7454f7a48d7adba7d42f662c20a3e3367 +2e0a99037dcc35bc63ba0d54371bc678af737c8e +7fa8d758598407f3bf0beb0118dc122ea5340736 +6a22373771edbc3c7513cacb9355f880c73c2cbf +b89ef131147f71a96152a7b5c4374266cdf539b2 +01d8359983e2f77b5118fede3ffa947072c666c8 +58f0c929a3d70a4bff79cc200f1c186f71ef1675 +950be19727a581970591d8f8138dfe4725750382 +425278d17bd0edf8a3a7cc81e55016f7fd8e7726 +c028c7b7557da2baff7af8840108e8be4db8e0c6 +47a7cfb0aa2498f6801026d258a59f9de48f60b0 +f6b7df3155ddb4cedfbcf5d3eb3383d4614b3a85 +d72098038f3b55a714ed8adb34fab547b15eb0d5 +c49c825bd9f4764536b45df5a684d97173673fc7 +33799afe83eec4200ff140e9bf5eae83701a4d7f +5c3f8ddcaa1164079105c452429fccf8127b01b6 +1f01443567b03ac75a91c810f1733f5c21b5699d +b3e42b6d02e8d19658a9135e427ebceab5367779 +69b3a6dd9d9a0adf5506c8b9fde42187356bd4a8 +bafd075c5e6a1088ef0f1aa0b0b224e026a3d3e0 +7daa3adb242d9c8728fdb15c6af6596aaad5502f +514993554c370f4cf30a109ac28d5d64893dbf0a +c8d2473e6cb042e7275a10c49d3f6a4a91bf0166 +386f4385ab04b0b2c3d47bddc0dc0f2de7354964 +9f33dba05c01ecc5c56eb1284ab7d64d42f55171 From eff783a0fe7b9eaaba9eef6539bdf0f62ce9f07e Mon Sep 17 00:00:00 2001 From: Cory Fields Date: Tue, 28 Feb 2017 16:20:07 -0500 Subject: [PATCH 044/136] depends: make osx output deterministic ld64 is threaded, and uses a worker for each CPU to parse input files. But there's a bug in the parser causing dependencies to be calculated differently based on which files have already been parsed. As a result, builders with more CPUs are more likely to see non-determinism. This looks to have been fixed in a newer version of ld64, so just disable threading for now. There's no noticible slowdown. Github-Pull: #9891 Rebased-From: 9e4d842afc67c63448cbbe30e5cea906e9c87f7e --- depends/packages/native_cctools.mk | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/depends/packages/native_cctools.mk b/depends/packages/native_cctools.mk index 797480c25eb..44d238cc4c2 100644 --- a/depends/packages/native_cctools.mk +++ b/depends/packages/native_cctools.mk @@ -38,7 +38,8 @@ $(package)_cxx=$($(package)_extract_dir)/toolchain/bin/clang++ endef define $(package)_preprocess_cmds - cd $($(package)_build_subdir); ./autogen.sh + cd $($(package)_build_subdir); ./autogen.sh && \ + sed -i.old "/define HAVE_PTHREADS/d" ld64/src/ld/InputFiles.h endef define $(package)_config_cmds From a80dc94554e7ec9ea810ce341ac7b5ad3fd66a88 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 28 Feb 2017 22:59:57 +0000 Subject: [PATCH 045/136] Bugfix: Only install manpages for built programs Github-Pull: #9892 Rebased-From: 8c156b7f70ecd46af2172e052c89510f032c5090 --- doc/man/Makefile.am | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/doc/man/Makefile.am b/doc/man/Makefile.am index 5252ef4a19a..08ff4d6ac1d 100644 --- a/doc/man/Makefile.am +++ b/doc/man/Makefile.am @@ -1 +1,13 @@ -dist_man1_MANS=bitcoind.1 bitcoin-qt.1 bitcoin-cli.1 bitcoin-tx.1 +dist_man1_MANS= + +if BUILD_BITCOIND + dist_man1_MANS+=bitcoind.1 +endif + +if ENABLE_QT + dist_man1_MANS+=bitcoin-qt.1 +endif + +if BUILD_BITCOIN_UTILS + dist_man1_MANS+=bitcoin-cli.1 bitcoin-tx.1 +endif From 589cd63b303158b565d49d2ce26c9e46b0bba8bd Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Fri, 3 Mar 2017 19:02:23 -0500 Subject: [PATCH 046/136] Allow any subkey in verify-commits --- contrib/verify-commits/gpg.sh | 2 +- contrib/verify-commits/trusted-keys | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/contrib/verify-commits/gpg.sh b/contrib/verify-commits/gpg.sh index 09ff2375447..2944bb269d7 100755 --- a/contrib/verify-commits/gpg.sh +++ b/contrib/verify-commits/gpg.sh @@ -12,7 +12,7 @@ for LINE in $(echo "$INPUT" | gpg --trust-model always "$@" 2>/dev/null); do case "$LINE" in "[GNUPG:] VALIDSIG "*) while read KEY; do - case "$LINE" in "[GNUPG:] VALIDSIG $KEY "*) VALID=true;; esac + [ "${LINE#?GNUPG:? VALIDSIG * * * * * * * * * }" = "$KEY" ] && VALID=true done < ./contrib/verify-commits/trusted-keys ;; "[GNUPG:] REVKEYSIG "*) diff --git a/contrib/verify-commits/trusted-keys b/contrib/verify-commits/trusted-keys index 75242c2a976..5610692616e 100644 --- a/contrib/verify-commits/trusted-keys +++ b/contrib/verify-commits/trusted-keys @@ -1,4 +1,4 @@ 71A3B16735405025D447E8F274810B012346C9A6 -3F1888C6DCA92A6499C4911FDBA1A67379A1A931 +133EAC179436F14A5CF1B794860FEB804E669320 32EE5C4C3FA15CCADB46ABE529D4BCB6416F53EC -FE09B823E6D83A3BC7983EAA2D7F2372E50FE137 +B8B3F1C0E58C15DB6A81D30C3648A882F4316B9B From 43a987c1cbcd04b9c59052606c3c31c56abc826e Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Sun, 5 Mar 2017 11:19:17 -0500 Subject: [PATCH 047/136] Fix regsig checking for subkey sigs in verify-commits Rebased-From: bbd757940bcb0628df6f7a5bd1fb348cf2290502 --- contrib/verify-commits/gpg.sh | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/contrib/verify-commits/gpg.sh b/contrib/verify-commits/gpg.sh index 2944bb269d7..4b2649eaaaa 100755 --- a/contrib/verify-commits/gpg.sh +++ b/contrib/verify-commits/gpg.sh @@ -17,12 +17,8 @@ for LINE in $(echo "$INPUT" | gpg --trust-model always "$@" 2>/dev/null); do ;; "[GNUPG:] REVKEYSIG "*) [ "$BITCOIN_VERIFY_COMMITS_ALLOW_REVSIG" != 1 ] && exit 1 - while read KEY; do - case "$LINE" in "[GNUPG:] REVKEYSIG ${KEY#????????????????????????} "*) - REVSIG=true - GOODREVSIG="[GNUPG:] GOODSIG ${KEY#????????????????????????} " - esac - done < ./contrib/verify-commits/trusted-keys + REVSIG=true + GOODREVSIG="[GNUPG:] GOODSIG ${LINE#* * *}" ;; esac done From 569596cc5148ef868350a9720013d38faf3e34ce Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Wed, 8 Mar 2017 15:56:59 -0500 Subject: [PATCH 048/136] Don't require segwit in getblocktemplate for segwit signalling or mining Segwit's version bit will be signalled for all invocations of CreateNewBlock, and not specifying segwit only will cause CreateNewBlock to skip transactions with witness from being selected. Github-Pull: #9955 Rebased-From: abe7b3d3abe10e3554b770f40824174b3b217490 --- qa/rpc-tests/p2p-segwit.py | 8 +++++--- qa/rpc-tests/segwit.py | 19 +++++-------------- src/miner.cpp | 4 ++-- src/miner.h | 2 +- src/rpc/mining.cpp | 18 ++++++++++++++---- src/versionbits.cpp | 2 +- 6 files changed, 28 insertions(+), 25 deletions(-) diff --git a/qa/rpc-tests/p2p-segwit.py b/qa/rpc-tests/p2p-segwit.py index 2f339bb54f6..479f1c6796b 100755 --- a/qa/rpc-tests/p2p-segwit.py +++ b/qa/rpc-tests/p2p-segwit.py @@ -1701,9 +1701,11 @@ def test_getblocktemplate_before_lockin(self): for node in [self.nodes[0], self.nodes[2]]: gbt_results = node.getblocktemplate() block_version = gbt_results['version'] - # If we're not indicating segwit support, we should not be signalling - # for segwit activation, nor should we get a witness commitment. - assert_equal(block_version & (1 << VB_WITNESS_BIT), 0) + # If we're not indicating segwit support, we will still be + # signalling for segwit activation. + assert_equal((block_version & (1 << VB_WITNESS_BIT) != 0), node == self.nodes[0]) + # If we don't specify the segwit rule, then we won't get a default + # commitment. assert('default_witness_commitment' not in gbt_results) # Workaround: diff --git a/qa/rpc-tests/segwit.py b/qa/rpc-tests/segwit.py index d6831e00e36..5dfc7a2f06f 100755 --- a/qa/rpc-tests/segwit.py +++ b/qa/rpc-tests/segwit.py @@ -251,20 +251,11 @@ def run_test(self): assert(tmpl['transactions'][0]['txid'] == txid) assert(tmpl['transactions'][0]['sigops'] == 8) - print("Verify non-segwit miners get a valid GBT response after the fork") - send_to_witness(1, self.nodes[0], find_unspent(self.nodes[0], 50), self.pubkey[0], False, Decimal("49.998")) - try: - tmpl = self.nodes[0].getblocktemplate({}) - assert(len(tmpl['transactions']) == 1) # Doesn't include witness tx - assert(tmpl['sizelimit'] == 1000000) - assert('weightlimit' not in tmpl) - assert(tmpl['sigoplimit'] == 20000) - assert(tmpl['transactions'][0]['hash'] == txid) - assert(tmpl['transactions'][0]['sigops'] == 2) - assert(('!segwit' in tmpl['rules']) or ('segwit' not in tmpl['rules'])) - except JSONRPCException: - # This is an acceptable outcome - pass + print("Non-segwit miners are able to use GBT response after activation.") + txid = send_to_witness(1, self.nodes[0], find_unspent(self.nodes[0], 50), self.pubkey[0], False, Decimal("49.998")) + tmpl = self.nodes[0].getblocktemplate() + # TODO: add a transaction with witness to mempool, and verify it's not + # selected for mining. print("Verify behaviour of importaddress, addwitnessaddress and listunspent") diff --git a/src/miner.cpp b/src/miner.cpp index d01edd93b52..7b3d94d0e4f 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -127,7 +127,7 @@ void BlockAssembler::resetBlock() blockFinished = false; } -std::unique_ptr BlockAssembler::CreateNewBlock(const CScript& scriptPubKeyIn) +std::unique_ptr BlockAssembler::CreateNewBlock(const CScript& scriptPubKeyIn, bool fMineWitnessTx) { resetBlock(); @@ -165,7 +165,7 @@ std::unique_ptr BlockAssembler::CreateNewBlock(const CScript& sc // -promiscuousmempoolflags is used. // TODO: replace this with a call to main to assess validity of a mempool // transaction (which in most cases can be a no-op). - fIncludeWitness = IsWitnessEnabled(pindexPrev, chainparams.GetConsensus()); + fIncludeWitness = IsWitnessEnabled(pindexPrev, chainparams.GetConsensus()) && fMineWitnessTx; addPriorityTxs(); addPackageTxs(); diff --git a/src/miner.h b/src/miner.h index 3ba92b16b8e..29013c3bcc1 100644 --- a/src/miner.h +++ b/src/miner.h @@ -165,7 +165,7 @@ class BlockAssembler public: BlockAssembler(const CChainParams& chainparams); /** Construct a new block template with coinbase to scriptPubKeyIn */ - std::unique_ptr CreateNewBlock(const CScript& scriptPubKeyIn); + std::unique_ptr CreateNewBlock(const CScript& scriptPubKeyIn, bool fMineWitnessTx=true); private: // utility functions diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index 77cd282a3da..38d7b1eb1e2 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -519,12 +519,22 @@ UniValue getblocktemplate(const JSONRPCRequest& request) // TODO: Maybe recheck connections/IBD and (if something wrong) send an expires-immediately template to stop miners? } + const struct BIP9DeploymentInfo& segwit_info = VersionBitsDeploymentInfo[Consensus::DEPLOYMENT_SEGWIT]; + // If the caller is indicating segwit support, then allow CreateNewBlock() + // to select witness transactions, after segwit activates (otherwise + // don't). + bool fSupportsSegwit = setClientRules.find(segwit_info.name) != setClientRules.end(); + // Update block static CBlockIndex* pindexPrev; static int64_t nStart; static std::unique_ptr pblocktemplate; + // Cache whether the last invocation was with segwit support, to avoid returning + // a segwit-block to a non-segwit caller. + static bool fLastTemplateSupportsSegwit = true; if (pindexPrev != chainActive.Tip() || - (mempool.GetTransactionsUpdated() != nTransactionsUpdatedLast && GetTime() - nStart > 5)) + (mempool.GetTransactionsUpdated() != nTransactionsUpdatedLast && GetTime() - nStart > 5) || + fLastTemplateSupportsSegwit != fSupportsSegwit) { // Clear pindexPrev so future calls make a new block, despite any failures from here on pindexPrev = nullptr; @@ -533,10 +543,11 @@ UniValue getblocktemplate(const JSONRPCRequest& request) nTransactionsUpdatedLast = mempool.GetTransactionsUpdated(); CBlockIndex* pindexPrevNew = chainActive.Tip(); nStart = GetTime(); + fLastTemplateSupportsSegwit = fSupportsSegwit; // Create new block CScript scriptDummy = CScript() << OP_TRUE; - pblocktemplate = BlockAssembler(Params()).CreateNewBlock(scriptDummy); + pblocktemplate = BlockAssembler(Params()).CreateNewBlock(scriptDummy, fSupportsSegwit); if (!pblocktemplate) throw JSONRPCError(RPC_OUT_OF_MEMORY, "Out of memory"); @@ -686,8 +697,7 @@ UniValue getblocktemplate(const JSONRPCRequest& request) result.push_back(Pair("bits", strprintf("%08x", pblock->nBits))); result.push_back(Pair("height", (int64_t)(pindexPrev->nHeight+1))); - const struct BIP9DeploymentInfo& segwit_info = VersionBitsDeploymentInfo[Consensus::DEPLOYMENT_SEGWIT]; - if (!pblocktemplate->vchCoinbaseCommitment.empty() && setClientRules.find(segwit_info.name) != setClientRules.end()) { + if (!pblocktemplate->vchCoinbaseCommitment.empty() && fSupportsSegwit) { result.push_back(Pair("default_witness_commitment", HexStr(pblocktemplate->vchCoinbaseCommitment.begin(), pblocktemplate->vchCoinbaseCommitment.end()))); } diff --git a/src/versionbits.cpp b/src/versionbits.cpp index d73f3405109..8a7cce74856 100644 --- a/src/versionbits.cpp +++ b/src/versionbits.cpp @@ -17,7 +17,7 @@ const struct BIP9DeploymentInfo VersionBitsDeploymentInfo[Consensus::MAX_VERSION }, { /*.name =*/ "segwit", - /*.gbt_force =*/ false, + /*.gbt_force =*/ true, } }; From 2cd2cd51f7ae954160d5422e105089ff1f598aa6 Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Thu, 9 Mar 2017 13:49:50 -0500 Subject: [PATCH 049/136] Test transaction selection when gbt called without segwit support Github-Pull: #9955 Rebased-From: c85ffe6d8d57132c1825c16a572d3847419030a6 --- qa/rpc-tests/segwit.py | 55 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 6 deletions(-) diff --git a/qa/rpc-tests/segwit.py b/qa/rpc-tests/segwit.py index 5dfc7a2f06f..c814399f922 100755 --- a/qa/rpc-tests/segwit.py +++ b/qa/rpc-tests/segwit.py @@ -11,9 +11,9 @@ from test_framework.util import * from test_framework.mininode import sha256, ripemd160, CTransaction, CTxIn, COutPoint, CTxOut from test_framework.address import script_to_p2sh, key_to_p2pkh -from test_framework.script import CScript, OP_HASH160, OP_CHECKSIG, OP_0, hash160, OP_EQUAL, OP_DUP, OP_EQUALVERIFY, OP_1, OP_2, OP_CHECKMULTISIG +from test_framework.script import CScript, OP_HASH160, OP_CHECKSIG, OP_0, hash160, OP_EQUAL, OP_DUP, OP_EQUALVERIFY, OP_1, OP_2, OP_CHECKMULTISIG, OP_TRUE from io import BytesIO -from test_framework.mininode import FromHex +from test_framework.mininode import ToHex, FromHex, COIN NODE_0 = 0 NODE_1 = 1 @@ -251,11 +251,54 @@ def run_test(self): assert(tmpl['transactions'][0]['txid'] == txid) assert(tmpl['transactions'][0]['sigops'] == 8) + self.nodes[0].generate(1) # Mine a block to clear the gbt cache + print("Non-segwit miners are able to use GBT response after activation.") - txid = send_to_witness(1, self.nodes[0], find_unspent(self.nodes[0], 50), self.pubkey[0], False, Decimal("49.998")) - tmpl = self.nodes[0].getblocktemplate() - # TODO: add a transaction with witness to mempool, and verify it's not - # selected for mining. + # Create a 3-tx chain: tx1 (non-segwit input, paying to a segwit output) -> + # tx2 (segwit input, paying to a non-segwit output) -> + # tx3 (non-segwit input, paying to a non-segwit output). + # tx1 is allowed to appear in the block, but no others. + txid1 = send_to_witness(1, self.nodes[0], find_unspent(self.nodes[0], 50), self.pubkey[0], False, Decimal("49.996")) + hex_tx = self.nodes[0].gettransaction(txid)['hex'] + tx = FromHex(CTransaction(), hex_tx) + assert(tx.wit.is_null()) # This should not be a segwit input + assert(txid1 in self.nodes[0].getrawmempool()) + + # Now create tx2, which will spend from txid1. + tx = CTransaction() + tx.vin.append(CTxIn(COutPoint(int(txid1, 16), 0), b'')) + tx.vout.append(CTxOut(int(49.99*COIN), CScript([OP_TRUE]))) + tx2_hex = self.nodes[0].signrawtransaction(ToHex(tx))['hex'] + txid2 = self.nodes[0].sendrawtransaction(tx2_hex) + tx = FromHex(CTransaction(), tx2_hex) + assert(not tx.wit.is_null()) + + # Now create tx3, which will spend from txid2 + tx = CTransaction() + tx.vin.append(CTxIn(COutPoint(int(txid2, 16), 0), b"")) + tx.vout.append(CTxOut(int(49.95*COIN), CScript([OP_TRUE]))) # Huge fee + tx.calc_sha256() + txid3 = self.nodes[0].sendrawtransaction(ToHex(tx)) + assert(tx.wit.is_null()) + assert(txid3 in self.nodes[0].getrawmempool()) + + # Now try calling getblocktemplate() without segwit support. + template = self.nodes[0].getblocktemplate() + + # Check that tx1 is the only transaction of the 3 in the template. + template_txids = [ t['txid'] for t in template['transactions'] ] + assert(txid2 not in template_txids and txid3 not in template_txids) + assert(txid1 in template_txids) + + # Check that running with segwit support results in all 3 being included. + template = self.nodes[0].getblocktemplate({"rules": ["segwit"]}) + template_txids = [ t['txid'] for t in template['transactions'] ] + assert(txid1 in template_txids) + assert(txid2 in template_txids) + assert(txid3 in template_txids) + + # Mine a block to clear the gbt cache again. + self.nodes[0].generate(1) print("Verify behaviour of importaddress, addwitnessaddress and listunspent") From d2548a4f9704b1f475b4068d2d1686cf3780f742 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Wed, 8 Mar 2017 14:41:57 -0500 Subject: [PATCH 050/136] Fix shutdown hang with >= 8 -addnodes set We previously would block waiting for a CSemaphoreGrant in ThreadOpenAddedConnections, when we did not need to. This would block as the posts in CConnman shutdown were both to the wrong semaphore and in the wrong location. Github-Pull: #9953 Rebased-From: e007b243c4840e44857b5ccf686ed35899e44af0 --- src/net.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/net.cpp b/src/net.cpp index de5fc29693e..e35a89e7498 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -2321,6 +2321,10 @@ void CConnman::Interrupt() if (semOutbound) for (int i=0; i<(nMaxOutbound + nMaxFeeler); i++) semOutbound->post(); + + if (semAddnode) + for (int i=0; ipost(); } void CConnman::Stop() @@ -2336,10 +2340,6 @@ void CConnman::Stop() if (threadSocketHandler.joinable()) threadSocketHandler.join(); - if (semAddnode) - for (int i=0; ipost(); - if (fAddressesInitialized) { DumpData(); From 4e2502bb512c00fa76c59ed8c758c2a6781a7425 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Wed, 8 Mar 2017 14:55:28 -0500 Subject: [PATCH 051/136] Add missing braces in semaphore posts in net Github-Pull: #9953 Rebased-From: 819b513a5415d1669b5440e214862cda6c2261f8 --- src/net.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/net.cpp b/src/net.cpp index e35a89e7498..03c8e5ecc49 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -2318,13 +2318,17 @@ void CConnman::Interrupt() interruptNet(); InterruptSocks5(true); - if (semOutbound) - for (int i=0; i<(nMaxOutbound + nMaxFeeler); i++) + if (semOutbound) { + for (int i=0; i<(nMaxOutbound + nMaxFeeler); i++) { semOutbound->post(); + } + } - if (semAddnode) - for (int i=0; ipost(); + } + } } void CConnman::Stop() From eeeeacd600a45bb6bfb3d0098de89c54e3f56eef Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Mon, 27 Mar 2017 11:12:48 +0200 Subject: [PATCH 052/136] 0.14: Clear release notes --- doc/release-notes.md | 845 +-------------------------------------------------- 1 file changed, 13 insertions(+), 832 deletions(-) diff --git a/doc/release-notes.md b/doc/release-notes.md index 37e79958e88..7ade5b74400 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -1,12 +1,12 @@ (note: this is a temporary file, to be added-to by anybody, and moved to release-notes at release time) -Bitcoin Core version 0.14.0 is now available from: +Bitcoin Core version 0.14.x is now available from: - + -This is a new major version release, including new features, various bugfixes -and performance improvements, as well as updated translations. +This is a new minor version release, including various bugfixes and +performance improvements, as well as updated translations. Please report bugs using the issue tracker at github: @@ -33,844 +33,25 @@ frequently tested on them. Notable changes =============== -Performance Improvements --------------- +Example item +----------------------------------------------- -Validation speed and network propagation performance have been greatly -improved, leading to much shorter sync and initial block download times. - -- The script signature cache has been reimplemented as a "cuckoo cache", - allowing for more signatures to be cached and faster lookups. -- Assumed-valid blocks have been introduced which allows script validation to - be skipped for ancestors of known-good blocks, without changing the security - model. See below for more details. -- In some cases, compact blocks are now relayed before being fully validated as - per BIP152. -- P2P networking has been refactored with a focus on concurrency and - throughput. Network operations are no longer bottlenecked by validation. As a - result, block fetching is several times faster than previous releases in many - cases. -- The UTXO cache now claims unused mempool memory. This speeds up initial block - download as UTXO lookups are a major bottleneck there, and there is no use for - the mempool at that stage. - - -Manual Pruning --------------- - -Bitcoin Core has supported automatically pruning the blockchain since 0.11. Pruning -the blockchain allows for significant storage space savings as the vast majority of -the downloaded data can be discarded after processing so very little of it remains -on the disk. - -Manual block pruning can now be enabled by setting `-prune=1`. Once that is set, -the RPC command `pruneblockchain` can be used to prune the blockchain up to the -specified height or timestamp. - -`getinfo` Deprecated --------------------- - -The `getinfo` RPC command has been deprecated. Each field in the RPC call -has been moved to another command's output with that command also giving -additional information that `getinfo` did not provide. The following table -shows where each field has been moved to: - -|`getinfo` field | Moved to | -|------------------|-------------------------------------------| -`"version"` | `getnetworkinfo()["version"]` -`"protocolversion"`| `getnetworkinfo()["protocolversion"]` -`"walletversion"` | `getwalletinfo()["walletversion"]` -`"balance"` | `getwalletinfo()["balance"]` -`"blocks"` | `getblockchaininfo()["blocks"]` -`"timeoffset"` | `getnetworkinfo()["timeoffset"]` -`"connections"` | `getnetworkinfo()["connections"]` -`"proxy"` | `getnetworkinfo()["networks"][0]["proxy"]` -`"difficulty"` | `getblockchaininfo()["difficulty"]` -`"testnet"` | `getblockchaininfo()["chain"] == "test"` -`"keypoololdest"` | `getwalletinfo()["keypoololdest"]` -`"keypoolsize"` | `getwalletinfo()["keypoolsize"]` -`"unlocked_until"` | `getwalletinfo()["unlocked_until"]` -`"paytxfee"` | `getwalletinfo()["paytxfee"]` -`"relayfee"` | `getnetworkinfo()["relayfee"]` -`"errors"` | `getnetworkinfo()["warnings"]` - -ZMQ On Windows --------------- - -Previously the ZeroMQ notification system was unavailable on Windows -due to various issues with ZMQ. These have been fixed upstream and -now ZMQ can be used on Windows. Please see [this document](https://github.com/bitcoin/bitcoin/blob/master/doc/zmq.md) for -help with using ZMQ in general. - -Nested RPC Commands in Debug Console ------------------------------------- - -The ability to nest RPC commands has been added to the debug console. This -allows users to have the output of a command become the input to another -command without running the commands separately. - -The nested RPC commands use bracket syntax (i.e. `getwalletinfo()`) and can -be nested (i.e. `getblock(getblockhash(1))`). Simple queries can be -done with square brackets where object values are accessed with either an -array index or a non-quoted string (i.e. `listunspent()[0][txid]`). Both -commas and spaces can be used to separate parameters in both the bracket syntax -and normal RPC command syntax. - -Network Activity Toggle ------------------------ - -A RPC command and GUI toggle have been added to enable or disable all p2p -network activity. The network status icon in the bottom right hand corner -is now the GUI toggle. Clicking the icon will either enable or disable all -p2p network activity. If network activity is disabled, the icon will -be grayed out with an X on top of it. - -Additionally the `setnetworkactive` RPC command has been added which does -the same thing as the GUI icon. The command takes one boolean parameter, -`true` enables networking and `false` disables it. - -Out-of-sync Modal Info Layer ----------------------------- - -When Bitcoin Core is out-of-sync on startup, a semi-transparent information -layer will be shown over top of the normal display. This layer contains -details about the current sync progress and estimates the amount of time -remaining to finish syncing. This layer can also be hidden and subsequently -unhidden by clicking on the progress bar at the bottom of the window. - -Support for JSON-RPC Named Arguments ------------------------------------- - -Commands sent over the JSON-RPC interface and through the `bitcoin-cli` binary -can now use named arguments. This follows the [JSON-RPC specification](http://www.jsonrpc.org/specification) -for passing parameters by-name with an object. - -`bitcoin-cli` has been updated to support this by parsing `name=value` arguments -when the `-named` option is given. - -Some examples: - - src/bitcoin-cli -named help command="help" - src/bitcoin-cli -named getblockhash height=0 - src/bitcoin-cli -named getblock blockhash=000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f - src/bitcoin-cli -named sendtoaddress address="(snip)" amount="1.0" subtractfeefromamount=true - -The order of arguments doesn't matter in this case. Named arguments are also -useful to leave out arguments that should stay at their default value. The -rarely-used arguments `comment` and `comment_to` to `sendtoaddress`, for example, can -be left out. However, this is not yet implemented for many RPC calls, this is -expected to land in a later release. - -The RPC server remains fully backwards compatible with positional arguments. - -Opt into RBF When Sending -------------------------- - -A new startup option, `-walletrbf`, has been added to allow users to have all -transactions sent opt into RBF support. The default value for this option is -currently `false`, so transactions will not opt into RBF by default. The new -`bumpfee` RPC can be used to replace transactions that opt into RBF. - -Sensitive Data Is No Longer Stored In Debug Console History ------------------------------------------------------------ - -The debug console maintains a history of previously entered commands that can be -accessed by pressing the Up-arrow key so that users can easily reuse previously -entered commands. Commands which have sensitive information such as passphrases and -private keys will now have a `(...)` in place of the parameters when accessed through -the history. - -Retaining the Mempool Across Restarts -------------------------------------- - -The mempool will be saved to the data directory prior to shutdown -to a `mempool.dat` file. This file preserves the mempool so that when the node -restarts the mempool can be filled with transactions without waiting for new transactions -to be created. This will also preserve any changes made to a transaction through -commands such as `prioritisetransaction` so that those changes will not be lost. - -Final Alert ------------ - -The Alert System was [disabled and deprecated](https://bitcoin.org/en/alert/2016-11-01-alert-retirement) in Bitcoin Core 0.12.1 and removed in 0.13.0. -The Alert System was retired with a maximum sequence final alert which causes any nodes -supporting the Alert System to display a static hard-coded "Alert Key Compromised" message which also -prevents any other alerts from overriding it. This final alert is hard-coded into this release -so that all old nodes receive the final alert. - -GUI Changes ------------ - - - After resetting the options by clicking the `Reset Options` button - in the options dialog or with the `-resetguioptions` startup option, - the user will be prompted to choose the data directory again. This - is to ensure that custom data directories will be kept after the - option reset which clears the custom data directory set via the choose - datadir dialog. - - - Multiple peers can now be selected in the list of peers in the debug - window. This allows for users to ban or disconnect multiple peers - simultaneously instead of banning them one at a time. - - - An indicator has been added to the bottom right hand corner of the main - window to indicate whether the wallet being used is a HD wallet. This - icon will be grayed out with an X on top of it if the wallet is not a - HD wallet. - -Low-level RPC changes ----------------------- - - - `importprunedfunds` only accepts two required arguments. Some versions accept - an optional third arg, which was always ignored. Make sure to never pass more - than two arguments. - - - The first boolean argument to `getaddednodeinfo` has been removed. This is - an incompatible change. - - - RPC command `getmininginfo` loses the "testnet" field in favor of the more - generic "chain" (which has been present for years). - - - A new RPC command `preciousblock` has been added which marks a block as - precious. A precious block will be treated as if it were received earlier - than a competing block. - - - A new RPC command `importmulti` has been added which receives an array of - JSON objects representing the intention of importing a public key, a - private key, an address and script/p2sh - - - Use of `getrawtransaction` for retrieving confirmed transactions with unspent - outputs has been deprecated. For now this will still work, but in the future - it may change to only be able to retrieve information about transactions in - the mempool or if `txindex` is enabled. - - - A new RPC command `getmemoryinfo` has been added which will return information - about the memory usage of Bitcoin Core. This was added in conjunction with - optimizations to memory management. See [Pull #8753](https://github.com/bitcoin/bitcoin/pull/8753) - for more information. - - - A new RPC command `bumpfee` has been added which allows replacing an - unconfirmed wallet transaction that signaled RBF (see the `-walletrbf` - startup option above) with a new transaction that pays a higher fee, and - should be more likely to get confirmed quickly. - -HTTP REST Changes ------------------ - - - UTXO set query (`GET /rest/getutxos//-/- - /.../-.`) responses were changed to return status - code `HTTP_BAD_REQUEST` (400) instead of `HTTP_INTERNAL_SERVER_ERROR` (500) - when requests contain invalid parameters. - -Minimum Fee Rate Policies -------------------------- - -Since the changes in 0.12 to automatically limit the size of the mempool and improve the performance of block creation in mining code it has not been important for relay nodes or miners to set `-minrelaytxfee`. With this release the following concepts that were tied to this option have been separated out: -- incremental relay fee used for calculating BIP 125 replacement and mempool limiting. (1000 satoshis/kB) -- calculation of threshold for a dust output. (effectively 3 * 1000 satoshis/kB) -- minimum fee rate of a package of transactions to be included in a block created by the mining code. If miners wish to set this minimum they can use the new `-blockmintxfee` option. (defaults to 1000 satoshis/kB) - -The `-minrelaytxfee` option continues to exist but is recommended to be left unset. - -Fee Estimation Changes ----------------------- - -- Since 0.13.2 fee estimation for a confirmation target of 1 block has been - disabled. The fee slider will no longer be able to choose a target of 1 block. - This is only a minor behavior change as there was often insufficient - data for this target anyway. `estimatefee 1` will now always return -1 and - `estimatesmartfee 1` will start searching at a target of 2. - -- The default target for fee estimation is changed to 6 blocks in both the GUI - (previously 25) and for RPC calls (previously 2). - -Removal of Priority Estimation ------------------------------- - -- Estimation of "priority" needed for a transaction to be included within a target - number of blocks has been removed. The RPC calls are deprecated and will either - return -1 or 1e24 appropriately. The format for `fee_estimates.dat` has also - changed to no longer save these priority estimates. It will automatically be - converted to the new format which is not readable by prior versions of the - software. - -- Support for "priority" (coin age) transaction sorting for mining is - considered deprecated in Core and will be removed in the next major version. - This is not to be confused with the `prioritisetransaction` RPC which will remain - supported by Core for adding fee deltas to transactions. - -P2P connection management --------------------------- - -- Peers manually added through the `-addnode` option or `addnode` RPC now have their own - limit of eight connections which does not compete with other inbound or outbound - connection usage and is not subject to the limitation imposed by the `-maxconnections` - option. - -- New connections to manually added peers are performed more quickly. - -Introduction of assumed-valid blocks -------------------------------------- - -- A significant portion of the initial block download time is spent verifying - scripts/signatures. Although the verification must pass to ensure the security - of the system, no other result from this verification is needed: If the node - knew the history of a given block were valid it could skip checking scripts - for its ancestors. - -- A new configuration option 'assumevalid' is provided to express this knowledge - to the software. Unlike the 'checkpoints' in the past this setting does not - force the use of a particular chain: chains that are consistent with it are - processed quicker, but other chains are still accepted if they'd otherwise - be chosen as best. Also unlike 'checkpoints' the user can configure which - block history is assumed true, this means that even outdated software can - sync more quickly if the setting is updated by the user. - -- Because the validity of a chain history is a simple objective fact it is much - easier to review this setting. As a result the software ships with a default - value adjusted to match the current chain shortly before release. The use - of this default value can be disabled by setting -assumevalid=0 - -Fundrawtransaction change address reuse ----------------------------------------- - -- Before 0.14, `fundrawtransaction` was by default wallet stateless. In - almost all cases `fundrawtransaction` does add a change-output to the - outputs of the funded transaction. Before 0.14, the used keypool key was - never marked as change-address key and directly returned to the keypool - (leading to address reuse). Before 0.14, calling `getnewaddress` - directly after `fundrawtransaction` did generate the same address as - the change-output address. - -- Since 0.14, fundrawtransaction does reserve the change-output-key from - the keypool by default (optional by setting `reserveChangeKey`, default = - `true`) - -- Users should also consider using `getrawchangeaddress()` in conjunction - with `fundrawtransaction`'s `changeAddress` option. - -Unused mempool memory used by coincache ----------------------------------------- - -- Before 0.14, memory reserved for mempool (using the `-maxmempool` option) - went unused during initial block download, or IBD. In 0.14, the UTXO DB cache - (controlled with the `-dbcache` option) borrows memory from the mempool - when there is extra memory available. This may result in an increase in - memory usage during IBD for those previously relying on only the `-dbcache` - option to limit memory during that time. - -0.14.0 Change log +0.13.x Change log ================= Detailed release notes follow. This overview includes changes that affect -behavior, not code moves, minor refactors and string updates. For convenience -in locating the code changes and accompanying discussion, both the pull request -and git merge commit are mentioned. +behavior, not code moves, refactors and string updates. For convenience in locating +the code changes and accompanying discussion, both the pull request and +git merge commit are mentioned. -### RPC and other APIs -- #8421 `b77bb95` httpserver: drop boost dependency (theuni) -- #8638 `f061415` rest.cpp: change `HTTP_INTERNAL_SERVER_ERROR` to `HTTP_BAD_REQUEST` (djpnewton) -- #8272 `91990ee` Make the dummy argument to getaddednodeinfo optional (sipa) -- #8722 `bb843ad` bitcoin-cli: More detailed error reporting (laanwj) -- #6996 `7f71a3c` Add preciousblock RPC (sipa) -- #8788 `97c7f73` Give RPC commands more information about the RPC request (jonasschnelli) -- #7948 `5d2c8e5` Augment getblockchaininfo bip9\_softforks data (mruddy) -- #8980 `0e22855` importmulti: Avoid using boost::variant::operator!=, which is only in newer boost versions (luke-jr) -- #9025 `4d8558a` Getrawtransaction should take a bool for verbose (jnewbery) -- #8811 `5754e03` Add support for JSON-RPC named arguments (laanwj) -- #9520 `2456a83` Deprecate non-txindex getrawtransaction and better warning (sipa) -- #9518 `a65ced1` Return height of last block pruned by pruneblockchain RPC (ryanofsky) -- #9222 `7cb024e` Add 'subtractFeeFromAmount' option to 'fundrawtransaction' (dooglus) -- #8456 `2ef52d3` Simplified `bumpfee` command (mrbandrews) -- #9516 `727a798` Bug-fix: listsinceblock: use fork point as reference for blocks in reorg'd chains (kallewoof) -- #9640 `7bfb770` Bumpfee: bugfixes for error handling and feerate calculation (sdaftuar) -- #9673 `8d6447e` Set correct metadata on bumpfee wallet transactions (ryanofsky) -- #9650 `40f7e27` Better handle invalid parameters to signrawtransaction (TheBlueMatt) -- #9682 `edc9e63` Require timestamps for importmulti keys (ryanofsky) -- #9108 `d8e8b06` Use importmulti timestamp when importing watch only keys (on top of #9682) (ryanofsky) -- #9756 `7a93af8` Return error when importmulti called with invalid address (ryanofsky) -- #9778 `ad168ef` Add two hour buffer to manual pruning (morcos) -- #9761 `9828f9a` Use 2 hour grace period for key timestamps in importmulti rescans (ryanofsky) -- #9474 `48d7e0d` Mark the minconf parameter to move as ignored (sipa) -- #9619 `861cb0c` Bugfix: RPC/Mining: GBT should return 1 MB sizelimit before segwit activates (luke-jr) -- #9773 `9072395` Return errors from importmulti if complete rescans are not successful (ryanofsky) - -### Block and transaction handling -- #8391 `37d83bb` Consensus: Remove ISM (NicolasDorier) -- #8365 `618c9dd` Treat high-sigop transactions as larger rather than rejecting them (sipa) -- #8814 `14b7b3f` wallet, policy: ParameterInteraction: Don't allow 0 fee (MarcoFalke) -- #8515 `9bdf526` A few mempool removal optimizations (sipa) -- #8448 `101c642` Store mempool and prioritization data to disk (sipa) -- #7730 `3c03dc2` Remove priority estimation (morcos) -- #9111 `fb15610` Remove unused variable `UNLIKELY_PCT` from fees.h (fanquake) -- #9133 `434e683` Unset fImporting for loading mempool (morcos) -- #9179 `b9a87b4` Set `DEFAULT_LIMITFREERELAY` = 0 kB/minute (MarcoFalke) -- #9239 `3fbf079` Disable fee estimates for 1-block target (morcos) -- #7562 `1eef038` Bump transaction version default to 2 (btcdrak) -- #9313,#9367 If we don't allow free txs, always send a fee filter (morcos) -- #9346 `b99a093` Batch construct batches (sipa) -- #9262 `5a70572` Prefer coins that have fewer ancestors, sanity check txn before ATMP (instagibbs) -- #9288 `1ce7ede` Fix a bug if the min fee is 0 for FeeFilterRounder (morcos) -- #9395 `0fc1c31` Add test for `-walletrejectlongchains` (morcos) -- #9107 `7dac1e5` Safer modify new coins (morcos) -- #9312 `a72f76c` Increase mempool expiry time to 2 weeks (morcos) -- #8610 `c252685` Share unused mempool memory with coincache (sipa) -- #9138 `f646275` Improve fee estimation (morcos) -- #9408 `46b249e` Allow shutdown during LoadMempool, dump only when necessary (jonasschnelli) -- #9310 `8c87f17` Assert FRESH validity in CCoinsViewCache::BatchWrite (ryanofsky) -- #7871 `e2e624d` Manual block file pruning (mrbandrews) -- #9507 `0595042` Fix use-after-free in CTxMemPool::removeConflicts() (sdaftuar) -- #9380 `dd98f04` Separate different uses of minimum fees (morcos) -- #9596 `71148b8` bugfix save feeDelta instead of priorityDelta in DumpMempool (morcos) -- #9371 `4a1dc35` Notify on removal (morcos) -- #9519 `9b4d267` Exclude RBF replacement txs from fee estimation (morcos) -- #8606 `e2a1a1e` Fix some locks (sipa) -- #8681 `6898213` Performance Regression Fix: Pre-Allocate txChanged vector (JeremyRubin) -- #8223 `744d265` c++11: Use std::unique\_ptr for block creation (domob1812) -- #9125 `7490ae8` Make CBlock a vector of shared\_ptr of CTransactions (sipa) -- #8930 `93566e0` Move orphan processing to ActivateBestChain (TheBlueMatt) -- #8580 `46904ee` Make CTransaction actually immutable (sipa) -- #9240 `a1dcf2e` Remove txConflicted (morcos) -- #8589 `e8cfe1e` Inline CTxInWitness inside CTxIn (sipa) -- #9349 `2db4cbc` Make CScript (and prevector) c++11 movable (sipa) -- #9252 `ce5c1f4` Release cs\_main before calling ProcessNewBlock, or processing headers (cmpctblock handling) (sdaftuar) -- #9283 `869781c` A few more CTransactionRef optimizations (sipa) -- #9499 `9c9af5a` Use recent-rejects, orphans, and recently-replaced txn for compact-block-reconstruction (TheBlueMatt) -- #9813 `3972a8e` Read/write mempool.dat as a binary (paveljanik) - -### P2P protocol and network code -- #8128 `1030fa7` Turn net structures into dumb storage classes (theuni) -- #8282 `026c6ed` Feeler connections to increase online addrs in the tried table (EthanHeilman) -- #8462 `53f8f22` Move AdvertiseLocal debug output to net category (Mirobit) -- #8612 `84decb5` Check for compatibility with download in FindNextBlocksToDownload (sipa) -- #8594 `5b2ea29` Do not add random inbound peers to addrman (gmaxwell) -- #8085 `6423116` Begin encapsulation (theuni) -- #8715 `881d7ea` only delete CConnman if it's been created (theuni) -- #8707 `f07424a` Fix maxuploadtarget setting (theuni) -- #8661 `d2e4655` Do not set an addr time penalty when a peer advertises itself (gmaxwell) -- #8822 `9bc6a6b` Consistent checksum handling (laanwj) -- #8936 `1230890` Report NodeId in misbehaving debug (rebroad) -- #8968 `3cf496d` Don't hold cs\_main when calling ProcessNewBlock from a cmpctblock (TheBlueMatt) -- #9002 `e1d1f57` Make connect=0 disable automatic outbound connections (gmaxwell) -- #9050 `fcf61b8` Make a few values immutable, and use deterministic randomness for the localnonce (theuni) -- #8969 `3665483` Decouple peer-processing-logic from block-connection-logic (#2) (TheBlueMatt) -- #8708 `c8c572f` have CConnman handle message sending (theuni) -- #8709 `1e50d22` Allow filterclear messages for enabling TX relay only (rebroad) -- #9045 `9f554e0` Hash P2P messages as they are received instead of at process-time (TheBlueMatt) -- #9026 `dc6b940` Fix handling of invalid compact blocks (sdaftuar) -- #8996 `ab914a6` Network activity toggle (luke-jr) -- #9131 `62af164` fNetworkActive is not protected by a lock, use an atomic (jonasschnelli) -- #8872 `0c577f2` Remove block-request logic from INV message processing (TheBlueMatt) -- #8690 `791b58d` Do not fully sort all nodes for addr relay (sipa) -- #9128 `76fec09` Decouple CConnman and message serialization (theuni) -- #9226 `3bf06e9` Remove fNetworkNode and pnodeLocalHost (gmaxwell) -- #9352 `a7f7651` Attempt reconstruction from all compact block announcements (sdaftuar) -- #9319 `a55716a` Break addnode out from the outbound connection limits (gmaxwell) -- #9261 `2742568` Add unstored orphans with rejected parents to recentRejects (morcos) -- #9441 `8b66bf7` Massive speedup. Net locks overhaul (theuni) -- #9375 `3908fc4` Relay compact block messages prior to full block connection (TheBlueMatt) -- #9400 `8a445c5` Set peers as HB peers upon full block validation (instagibbs) -- #9561 `6696b46` Wake message handling thread when we receive a new block (TheBlueMatt) -- #9535 `82274c0` Split CNode::cs\_vSend: message processing and message sending (TheBlueMatt) -- #9606 `3f9f962` Consistently use GetTimeMicros() for inactivity checks (sdaftuar) -- #9594 `fd70211` Send final alert message to older peers after connecting (gmaxwell) -- #9626 `36966a1` Clean up a few CConnman cs\_vNodes/CNode things (TheBlueMatt) -- #9609 `4966917` Fix remaining net assertions (theuni) -- #9671 `7821db3` Fix super-unlikely race introduced in 236618061a445d2cb11e72 (TheBlueMatt) -- #9730 `33f3b21` Remove bitseed.xf2.org form the dns seed list (jonasschnelli) -- #9698 `2447c10` Fix socket close race (theuni) -- #9708 `a06ede9` Clean up all known races/platform-specific UB at the time PR was opened (TheBlueMatt) -- #9715 `b08656e` Disconnect peers which we do not receive VERACKs from within 60 sec (TheBlueMatt) -- #9720 `e87ce95` Fix banning and disallow sending messages before receiving verack (theuni) -- #9268 `09c4fd1` Fix rounding privacy leak introduced in #9260 (TheBlueMatt) -- #9075 `9346f84` Decouple peer-processing-logic from block-connection-logic (#3) (TheBlueMatt) -- #8688 `047ded0` Move static global randomizer seeds into CConnman (sipa) -- #9289 `d9ae1ce` net: drop boost::thread\_group (theuni) - -### Validation -- #9014 `d04aeba` Fix block-connection performance regression (TheBlueMatt) -- #9299 `d52ce89` Remove no longer needed check for premature v2 txs (morcos) -- #9273 `b68685a` Remove unused `CDiskBlockPos*` argument from ProcessNewBlock (TheBlueMatt) -- #8895 `b83264d` Better SigCache Implementation (JeremyRubin) -- #9490 `e126d0c` Replace FindLatestBefore used by importmulti with FindEarliestAtLeast (gmaxwell) -- #9484 `812714f` Introduce assumevalid setting to skip validation presumed valid scripts (gmaxwell) -- #9511 `7884956` Don't overwrite validation state with corruption check (morcos) -- #9765 `1e92e04` Harden against mistakes handling invalid blocks (sdaftuar) -- #9779 `3c02b95` Update nMinimumChainWork and defaultAssumeValid (gmaxwell) -- #8524 `19b0f33` Precompute sighashes (sipa) -- #9791 `1825a03` Avoid VLA in hash.h (sipa) - -### Build system -- #8238 `6caf3ee` ZeroMQ 4.1.5 && ZMQ on Windows (fanquake) -- #8520 `b40e19c` Remove check for `openssl/ec.h` (laanwj) -- #8617 `de07fdc` Include instructions to extract Mac OS X SDK on Linux using 7zip and SleuthKit (luke-jr) -- #8566 `7b98895` Easy to use gitian building script (achow101) -- #8604 `f256843` build,doc: Update for 0.13.0+ and OpenBSD 5.9 (laanwj) -- #8640 `2663e51` depends: Remove Qt46 package (fanquake) -- #8645 `8ea4440` Remove unused Qt 4.6 patch (droark) -- #8608 `7e9ab95` Install manpages via make install, also add some autogenerated manpages (nomnombtc) -- #8781 `ca69ef4` contrib: delete `qt_translations.py` (MarcoFalke) -- #8783 `64dc645` share: remove qt/protobuf.pri (MarcoFalke) -- #8423 `3166dff` depends: expat 2.2.0, ccache 3.3.1, fontconfig 2.12.1 (fanquake) -- #8791 `b694b0d` travis: cross-mac: explicitly enable gui (MarcoFalke) -- #8820 `dc64141` depends: Fix Qt compilation with Xcode 8 (fanquake) -- #8730 `489a6ab` depends: Add libevent compatibility patch for windows (laanwj) -- #8819 `c841816` depends: Boost 1.61.0 (fanquake) -- #8826 `f560d95` Do not include `env_win.cc` on non-Windows systems (paveljanik) -- #8948 `e077e00` Reorder Windows gitian build order to match Linux (Michagogo) -- #8568 `078900d` new var `DIST_CONTRIB` adds useful things for packagers from contrib (nomnombtc) -- #9114 `21e6c6b` depends: Set `OSX_MIN_VERSION` to 10.8 (fanquake) -- #9140 `018a4eb` Bugfix: Correctly replace generated headers and fail cleanly (luke-jr) -- #9156 `a8b2a82` Add compile and link options echo to configure (jonasschnelli) -- #9393 `03d85f6` Include cuckoocache header in Makefile (MarcoFalke) -- #9420 `bebe369` Fix linker error when configured with --enable-lcov (droark) -- #9412 `53442af` Fix 'make deploy' for OSX (jonasschnelli) -- #9475 `7014506` Let autoconf detect presence of `EVP_MD_CTX_new` (luke-jr) -- #9513 `bbf193f` Fix qt distdir builds (theuni) -- #9471 `ca615e6` depends: libevent 2.1.7rc (fanquake) -- #9468 `f9117f2` depends: Dependency updates for 0.14.0 (fanquake) -- #9469 `01c4576` depends: Qt 5.7.1 (fanquake) -- #9574 `5ac6687` depends: Fix QT build on OSX (fanquake) -- #9646 `720b579` depends: Fix cross build for qt5.7 (theuni) -- #9705 `6a55515` Add options to override BDB cflags/libs (laanwj) -- #8249 `4e1567a` Enable (and check for) 64-bit ASLR on Windows (laanwj) -- #9758 `476cc47` Selectively suppress deprecation warnings (jonasschnelli) -- #9783 `6d61a2b` release: bump gitian descriptors for a new 0.14 package cache (theuni) -- #9789 `749fe95` build: add --enable-werror and warn on vla's (theuni) -- #9831 `99fd85c` build: force a c++ standard to be specified (theuni) - -### GUI -- #8192 `c503863` Remove URLs from About dialog translations (fanquake) -- #8540 `36404ae` Fix random segfault when closing "Choose data directory" dialog (laanwj) -- #8517 `2468292` Show wallet HD state in statusbar (jonasschnelli) -- #8463 `62a5a8a` Remove Priority from coincontrol dialog (MarcoFalke) -- #7579 `0606f95` Show network/chain errors in the GUI (jonasschnelli) -- #8583 `c19f8a4` Show XTHIN in GUI (rebroad) -- #7783 `4335d5a` RPC-Console: support nested commands and simple value queries (jonasschnelli) -- #8672 `6052d50` Show transaction size in transaction details window (Cocosoft) -- #8777 `fec6af7` WalletModel: Expose disablewallet (MarcoFalke) -- #8371 `24f72e9` Add out-of-sync modal info layer (jonasschnelli) -- #8885 `b2fec4e` Fix ban from qt console (theuni) -- #8821 `bf8e68a` sync-overlay: Don't block during reindex (MarcoFalke) -- #8906 `088d1f4` sync-overlay: Don't show progress twice (MarcoFalke) -- #8918 `47ace42` Add "Copy URI" to payment request context menu (luke-jr) -- #8925 `f628d9a` Display minimum ping in debug window (rebroad) -- #8774 `3e942a7` Qt refactors to better abstract wallet access (luke-jr) -- #8985 `7b1bfa3` Use pindexBestHeader instead of setBlockIndexCandidates for NotifyHeaderTip() (jonasschnelli) -- #8989 `d2143dc` Overhaul smart-fee slider, adjust default confirmation target (jonasschnelli) -- #9043 `273bde3` Return useful error message on ATMP failure (MarcoFalke) -- #9088 `4e57824` Reduce ambiguity of warning message (rebroad) -- #8874 `e984730` Multiple Selection for peer and ban tables (achow101) -- #9145 `924745d` Make network disabled icon 50% opaque (MarcoFalke) -- #9130 `ac489b2` Mention the new network toggle functionality in the tooltip (paveljanik) -- #9218 `4d955fc` Show progress overlay when clicking spinner icon (laanwj) -- #9280 `e15660c` Show ModalOverlay by pressing the progress bar, allow hiding (jonasschnelli) -- #9296 `fde7d99` Fix missed change to WalletTx structure (morcos) -- #9266 `2044e37` Bugfix: Qt/RPCConsole: Put column enum in the right places (luke-jr) -- #9255 `9851a84` layoutAboutToChange signal is called layoutAboutToBeChanged (laanwj) -- #9330 `47e6a19` Console: add security warning (jonasschnelli) -- #9329 `db45ad8` Console: allow empty arguments (jonasschnelli) -- #8877 `6dc4c43` Qt RPC console: history sensitive-data filter, and saving input line when browsing history (luke-jr) -- #9462 `649cf5f` Do not translate tilde character (MarcoFalke) -- #9457 `123ea73` Select more files for translation (MarcoFalke) -- #9413 `fd7d8c7` CoinControl: Allow non-wallet owned change addresses (jonasschnelli) -- #9461 `b250686` Improve progress display during headers-sync and peer-finding (jonasschnelli) -- #9588 `5086452` Use nPowTargetSpacing constant (MarcoFalke) -- #9637 `d9e4d1d` Fix transaction details output-index to reflect vout index (jonasschnelli) -- #9718 `36f9d3a` Qt/Intro: Various fixes (luke-jr) -- #9735 `ec66d06` devtools: Handle Qt formatting characters edge-case in update-translations.py (laanwj) -- #9755 `a441db0` Bugfix: Qt/Options: Restore persistent "restart required" notice (luke-jr) -- #9817 `7d75a5a` Fix segfault crash when shutdown the GUI in disablewallet mode (jonasschnelli) - -### Wallet -- #8152 `b9c1cd8` Remove `CWalletDB*` parameter from CWallet::AddToWallet (pstratem) -- #8432 `c7e05b3` Make CWallet::fFileBacked private (pstratem) -- #8445 `f916700` Move CWallet::setKeyPool to private section of CWallet (pstratem) -- #8564 `0168019` Remove unused code/conditions in ReadAtCursor (jonasschnelli) -- #8601 `37ac678` Add option to opt into full-RBF when sending funds (rebase, original by petertodd) (laanwj) -- #8494 `a5b20ed` init, wallet: ParameterInteraction() iff wallet enabled (MarcoFalke) -- #8760 `02ac669` init: Get rid of some `ENABLE_WALLET` (MarcoFalke) -- #8696 `a1f8d3e` Wallet: Remove last external reference to CWalletDB (pstratem) -- #8768 `886e8c9` init: Get rid of fDisableWallet (MarcoFalke) -- #8486 `ab0b411` Add high transaction fee warnings (MarcoFalke) -- #8851 `940748b` Move key derivation logic from GenerateNewKey to DeriveNewChildKey (pstratem) -- #8287 `e10af96` Set fLimitFree = true (MarcoFalke) -- #8928 `c587577` Fix init segfault where InitLoadWallet() calls ATMP before genesis (TheBlueMatt) -- #7551 `f2d7056` Add importmulti RPC call (pedrobranco) -- #9016 `0dcb888` Return useful error message on ATMP failure (instagibbs) -- #8753 `f8723d2` Locked memory manager (laanwj) -- #8828 `a4fd8df` Move CWalletDB::ReorderTransactions to CWallet (pstratem) -- #8977 `6a1343f` Refactor wallet/init interaction (Reaccept wtx, flush thread) (jonasschnelli) -- #9036 `ed0cc50` Change default confirm target from 2 to 6 (laanwj) -- #9071 `d1871da` Declare wallet.h functions inline (sipa) -- #9132 `f54e460` Make strWalletFile const (jonasschnelli) -- #9141 `5ea5e04` Remove unnecessary calls to CheckFinalTx (jonasschnelli) -- #9165 `c01f16a` SendMoney: use already-calculated balance (instagibbs) -- #9311 `a336d13` Flush wallet after abandontransaction (morcos) -- #8717 `38e4887` Addition of ImmatureCreditCached to MarkDirty() (spencerlievens) -- #9446 `510c0d9` SetMerkleBranch: remove unused code, remove cs\_main lock requirement (jonasschnelli) -- #8776 `2a524b8` Wallet refactoring leading up to multiwallet (luke-jr) -- #9465 `a7d55c9` Do not perform ECDSA signing in the fee calculation inner loop (gmaxwell) -- #9404 `12e3112` Smarter coordination of change and fee in CreateTransaction (morcos) -- #9377 `fb75cd0` fundrawtransaction: Keep change-output keys by default, make it optional (jonasschnelli) -- #9578 `923dc44` Add missing mempool lock for CalculateMemPoolAncestors (TheBlueMatt) -- #9227 `02464da` Make nWalletDBUpdated atomic to avoid a potential race (pstratem) -- #9764 `f8af89a` Prevent "overrides a member function but is not marked 'override'" warnings (laanwj) -- #9771 `e43a585` Add missing cs\_wallet lock that triggers new lock held assertion (ryanofsky) -- #9316 `3097ea4` Disable free transactions when relay is disabled (MarcoFalke) -- #9615 `d2c9e4d` Wallet incremental fee (morcos) -- #9760 `40c754c` Remove importmulti always-true check (ryanofsky) - -### Tests and QA -- #8270 `6e5e5ab` Tests: Use portable #! in python scripts (/usr/bin/env) (ChoHag) -- #8534,#8504 Remove java comparison tool (laanwj,MarcoFalke) -- #8482 `740cff5` Use single cache dir for chains (MarcoFalke) -- #8450 `21857d2` Replace `rpc_wallet_tests.cpp` with python RPC unit tests (pstratem) -- #8671 `ddc3080` Minimal fix to slow prevector tests as stopgap measure (JeremyRubin) -- #8680 `666eaf0` Address Travis spurious failures (theuni) -- #8789 `e31a43c` pull-tester: Only print output when failed (MarcoFalke) -- #8810 `14e8f99` tests: Add exception error message for JSONRPCException (laanwj) -- #8830 `ef0801b` test: Add option to run bitcoin-util-test.py manually (jnewbery) -- #8881 `e66cc1d` Add some verbose logging to bitcoin-util-test.py (jnewbery) -- #8922 `0329511` Send segwit-encoded blocktxn messages in p2p-compactblocks (TheBlueMatt) -- #8873 `74dc388` Add microbenchmarks to profile more code paths (ryanofsky) -- #9032 `6a8be7b` test: Add format-dependent comparison to bctest (laanwj) -- #9023 `774db92` Add logging to bitcoin-util-test.py (jnewbery) -- #9065 `c9bdf9a` Merge `doc/unit-tests.md` into `src/test/README.md` (laanwj) -- #9069 `ed64bce` Clean up bctest.py and bitcoin-util-test.py (jnewbery) -- #9095 `b8f43e3` test: Fix test\_random includes (MarcoFalke) -- #8894 `faec09b` Testing: Include fRelay in mininode version messages (jnewbery) -- #9097 `e536499` Rework `sync_*` and preciousblock.py (MarcoFalke) -- #9049 `71bc39e` Remove duplicatable duplicate-input check from CheckTransaction (TheBlueMatt) -- #9136 `b422913` sync\_blocks cleanup (ryanofsky) -- #9151 `4333b1c` proxy\_test: Calculate hardcoded port numbers (MarcoFalke) -- #9206 `e662d28` Make test constant consistent with consensus.h (btcdrak) -- #9139 `0de7fd3` Change sync\_blocks to pick smarter maxheight (on top of #9196) (ryanofsky) -- #9100 `97ec6e5` tx\_valid: re-order inputs to how they are encoded (dcousens) -- #9202 `e56cf67` bench: Add support for measuring CPU cycles (laanwj) -- #9223 `5412c08` unification of Bloom filter representation (s-matthew-english) -- #9257 `d7ba4a2` Dump debug logs on travis failures (sdaftuar) -- #9221 `9e4bb31` Get rid of duplicate code (MarcoFalke) -- #9274 `919db03` Use cached utxo set to fix performance regression (MarcoFalke) -- #9276 `ea33f19` Some minor testing cleanups (morcos) -- #9291 `8601784` Remove mapOrphanTransactionsByPrev from DoS\_tests (sipa) -- #9309 `76fcd9d` Wallet needs to stay unlocked for whole test (morcos) -- #9172 `5bc209c` Resurrect pstratem's "Simple fuzzing framework" (laanwj) -- #9331 `c6fd923` Add test for rescan feature of wallet key import RPCs (ryanofsky) -- #9354 `b416095` Make fuzzer actually test CTxOutCompressor (sipa) -- #9390,#9416 travis: make distdir (MarcoFalke) -- #9308 `0698639` test: Add CCoinsViewCache Access/Modify/Write tests (ryanofsky) -- #9406 `0f921e6` Re-enable a blank v1 Tx JSON test (droark) -- #9435 `dbc8a8c` Removed unused variable in test, fixing warning (ryanofsky) -- #9436 `dce853e` test: Include tx data in `EXTRA_DIST` (MarcoFalke) -- #9525 `02e5308` test: Include tx data in `EXTRA_DIST` (MarcoFalke) -- #9498 `054d664` Basic CCheckQueue Benchmarks (JeremyRubin) -- #9554 `0b96abc` test: Avoid potential NULL pointer dereference in `addrman_tests.cpp` (practicalswift) -- #9628 `f895023` Increase a sync\_blocks timeout in pruning.py (sdaftuar) -- #9638 `a7ea2f8` Actually test assertions in pruning.py (MarcoFalke) -- #9647 `e99f0d7` Skip RAII event tests if libevent is built without `event_set_mem_functions` (luke-jr) -- #9691 `fc67cd2` Init ECC context for `test_bitcoin_fuzzy` (gmaxwell) -- #9712 `d304fef` bench: Fix initialization order in registration (laanwj) -- #9707 `b860915` Fix RPC failure testing (jnewbery) -- #9269 `43e8150` Align struct COrphan definition (sipa) -- #9820 `599c69a` Fix pruning test broken by 2 hour manual prune window (ryanofsky) -- #9824 `260c71c` qa: Check return code when stopping nodes (MarcoFalke) -- #9875 `50953c2` tests: Fix dangling pwalletMain pointer in wallet tests (laanwj) -- #9839 `eddaa6b` [qa] Make import-rescan.py watchonly check reliable (ryanofsky) - -### Documentation -- #8332 `806b9e7` Clarify witness branches in transaction.h serialization (dcousens) -- #8935 `0306978` Documentation: Building on Windows with WSL (pooleja) -- #9144 `c98f6b3` Correct waitforblockheight example help text (fanquake) -- #9407 `041331e` Added missing colons in when running help command (anditto) -- #9378 `870cd2b` Add documentation for CWalletTx::fFromMe member (ryanofsky) -- #9297 `0b73807` Various RPC help outputs updated (Mirobit) -- #9613 `07421cf` Clarify getbalance help string to explain interaction with bumpfee (ryanofsky) -- #9663 `e30d928` Clarify listunspent amount description (instagibbs) -- #9396 `d65a13b` Updated listsinceblock rpc documentation (accraze) -- #8747 `ce43630` rpc: Fix transaction size comments and RPC help text (jnewbery) -- #8058 `bbd9740` Doc: Add issue template (AmirAbrams) -- #8567 `85d4e21` Add default port numbers to REST doc (djpnewton) -- #8624 `89de153` build: Mention curl (MarcoFalke) -- #8786 `9da7366` Mandatory copyright agreement (achow101) -- #8823 `7b05af6` Add privacy recommendation when running hidden service (laanwj) -- #9433 `caa2f10` Update the Windows build notes (droark) -- #8879 `f928050` Rework docs (MarcoFalke) -- #8887 `61d191f` Improve GitHub issue template (fanquake) -- #8787 `279bbad` Add missing autogen to example builds (AmirAbrams) -- #8892 `d270c30` Add build instructions for FreeBSD (laanwj) -- #8890 `c71a654` Update Doxygen configuration file (fanquake) -- #9207 `fa1f944` Move comments above bash command in build-unix (AmirAbrams) -- #9219 `c4522e7` Improve windows build instructions using Linux subsystem (laanwj) -- #8954 `932d02a` contrib: Add README for pgp keys (MarcoFalke) -- #9093 `2fae5b9` release-process: Mention GitHub release and archived release notes (MarcoFalke) -- #8743 `bae178f` Remove old manpages from contrib/debian in favour of doc/man (fanquake) -- #9550 `4105cb6` Trim down the XP notice and say more about what we support (gmaxwell) -- #9246 `9851498` Developer docs about existing subtrees (gmaxwell) -- #9401 `c2ea1e6` Make rpcauth help message clearer, add example in example .conf (instagibbs) -- #9022,#9033 Document dropping OS X 10.7 support (fanquake, MarcoFalke) -- #8771 `bc9e3ab` contributing: Mention not to open several pulls (luke-jr) -- #8852 `7b784cc` Mention Gitian building script in doc (Laudaa) (laanwj) -- #8915 `03dd707` Add copyright/patent issues to possible NACK reasons (petertodd) -- #8965 `23e03f8` Mention that PPA doesn't support Debian (anduck) -- #9115 `bfc7aad` Mention reporting security issues responsibly (paveljanik) -- #9840 `08e0690` Update sendfrom RPC help to correct coin selection misconception (ryanofsky) -- #9865 `289204f` Change bitcoin address in RPC help message (marijnfs) - -### Miscellaneous -- #8274 `7a2d402` util: Update tinyformat (laanwj) -- #8291 `5cac8b1` util: CopyrightHolders: Check for untranslated substitution (MarcoFalke) -- #8557 `44691f3` contrib: Rework verifybinaries (MarcoFalke) -- #8621 `e8ed6eb` contrib: python: Don't use shell=True (MarcoFalke) -- #8813 `fb24d7e` bitcoind: Daemonize using daemon(3) (laanwj) -- #9004 `67728a3` Clarify `listenonion` (unsystemizer) -- #8674 `bae81b8` tools for analyzing, updating and adding copyright headers in source files (isle2983) -- #8976 `8c6218a` libconsensus: Add input validation of flags (laanwj) -- #9112 `46027e8` Avoid ugly exception in log on unknown inv type (laanwj) -- #8837 `2108911` Allow bitcoin-tx to parse partial transactions (jnewbery) -- #9204 `74ced54` Clarify CreateTransaction error messages (instagibbs) -- #9265 `31bcc66` bitcoin-cli: Make error message less confusing (laanwj) -- #9303 `72bf1b3` Update comments in ctaes (sipa) -- #9417 `c4b7d4f` Do not evaluate hidden LogPrint arguments (sipa) -- #9506 `593a00c` RFC: Improve style for if indentation (sipa) -- #8883 `d5d4ad8` Add all standard TXO types to bitcoin-tx (jnewbery) -- #9531 `23281a4` Release notes for estimation changes (morcos) -- #9486 `f62bc10` Make peer=%d log prints consistent (TheBlueMatt) -- #9552 `41cb05c` Add IPv6 support to qos.sh (jamesmacwhite) -- #9542 `e9e7993` Docs: Update CONTRIBUTING.md (jnewbery) -- #9649 `53ab12d` Remove unused clang format dev script (MarcoFalke) -- #9625 `77bd8c4` Increase minimum debug.log size to 10MB after shrink (morcos) -- #9070 `7b22e50` Lockedpool fixes (kazcw) -- #8779 `7008e28` contrib: Delete spendfrom (MarcoFalke) -- #9587,#8793,#9496,#8191,#8109,#8655,#8472,#8677,#8981,#9124 Avoid shadowing of variables (paveljanik) -- #9063 `f2a6e82` Use deprecated `MAP_ANON` if `MAP_ANONYMOUS` is not defined (paveljanik) -- #9060 `1107653` Fix bloom filter init to isEmpty = true (robmcl4) -- #8613 `613bda4` LevelDB 1.19 (sipa) -- #9225 `5488514` Fix some benign races (TheBlueMatt) -- #8736 `5fa7b07` base58: Improve DecodeBase58 performance (wjx) -- #9039 `e81df49` Various serialization simplifcations and optimizations (sipa) -- #9010 `a143b88` Split up AppInit2 into multiple phases, daemonize after datadir lock errors (laanwj) -- #9230 `c79e52a` Fix some benign races in timestamp logging (TheBlueMatt) -- #9183,#9260 Mrs Peacock in The Library with The Candlestick (killed main.{h,cpp}) (TheBlueMatt) -- #9236 `7f72568` Fix races for strMiscWarning and `fLargeWork*Found`, make QT runawayException use GetWarnings (gmaxwell) -- #9243 `7aa7004` Clean up mapArgs and mapMultiArgs Usage (TheBlueMatt) -- #9387 `cfe41d7` RAII of libevent stuff using unique ptrs with deleters (kallewoof) -- #9472 `fac0f30` Disentangle progress estimation from checkpoints and update it (sipa) -- #9512 `6012967` Fix various things -fsanitize complains about (sipa) -- #9373,#9580 Various linearization script issues (droark) -- #9674 `dd163f5` Lock debugging: Always enforce strict lock ordering (try or not) (TheBlueMatt) -- #8453,#9334 Update to latest libsecp256k1 (laanwj,sipa) -- #9656 `7c93952` Check verify-commits on pushes to master (TheBlueMatt) -- #9679 `a351162` Access WorkQueue::running only within the cs lock (TheBlueMatt) -- #9777 `8dee822` Handle unusual maxsigcachesize gracefully (jnewbery) -- #8863,#8807 univalue: Pull subtree (MarcoFalke) -- #9798 `e22c067` Fix Issue #9775 (Check returned value of fopen) (kirit93) -- #9856 `69832aa` Terminate immediately when allocation fails (theuni) +[to be filled in at release] Credits ======= Thanks to everyone who directly contributed to this release: -- accraze -- adlawren -- Alex Morcos -- Alexey Vesnin -- Amir Abrams -- Anders Øyvind Urke-Sætre -- Anditto Heristyo -- Andrew Chow -- anduck -- Anthony Towns -- Brian Deery -- BtcDrak -- Chris Moore -- Chris Stewart -- Christian Barcenas -- Christian Decker -- Cory Fields -- crowning- -- CryptAxe -- CryptoVote -- Dagur Valberg Johannsson -- Daniel Cousens -- Daniel Kraft -- Derek Miller -- djpnewton -- Don Patterson -- Doug -- Douglas Roark -- Ethan Heilman -- fsb4000 -- Gaurav Rana -- Geoffrey Tsui -- Greg Walker -- Gregory Maxwell -- Gregory Sanders -- Hampus Sjöberg -- isle2983 -- Ivo van der Sangen -- James White -- Jameson Lopp -- Jeremy Rubin -- Jiaxing Wang -- jnewbery -- John Newbery -- Johnson Lau -- Jon Lund Steffensen -- Jonas Schnelli -- jonnynewbs -- Jorge Timón -- Justin Camarena -- Karl-Johan Alm -- Kaz Wesley -- kirit93 -- Koki Takahashi -- Lauda -- leijurv -- lizhi -- Luke Dashjr -- maiiz -- MarcoFalke -- Marijn Stollenga -- Marty Jones -- Masahiko Hyuga -- Matt Corallo -- Matthew King -- matthias -- Micha -- Michael Ford -- Michael Rotarius -- Mitchell Cash -- mrbandrews -- mruddy -- Nicolas DORIER -- nomnombtc -- Patrick Strateman -- Pavel Janík -- Pedro Branco -- Peter Todd -- Pieter Wuille -- poole\_party -- practicalswift -- R E Broadley -- randy-waterhouse -- Richard Kiss -- Robert McLaughlin -- rodasmith -- Russell Yanofsky -- S. Matthew English -- Sev -- Spencer Lievens -- Stanislas Marion -- Steven -- Suhas Daftuar -- Thomas Snider -- UdjinM6 -- unsystemizer -- whythat -- Will Binns -- Wladimir J. van der Laan -- wodry -- Zak Wilcox +[to be filled in at release] As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). + From 4d8e66017f6d6498df53935bc9a754d4317a2293 Mon Sep 17 00:00:00 2001 From: James Evans Date: Mon, 20 Mar 2017 05:19:41 -0300 Subject: [PATCH 053/136] Trivial: Fix typo in help getrawtransaction RPC Github-Pull: #10037 Rebased-From: 05a9f22358be27c08f7e164d05eeeaf0386073cb --- src/rpc/rawtransaction.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp index bf16f27498f..9ddeddd71b5 100644 --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -139,7 +139,7 @@ UniValue getrawtransaction(const JSONRPCRequest& request) "\nArguments:\n" "1. \"txid\" (string, required) The transaction id\n" - "2. verbose (bool, optional, default=false) If true, return a string, other return a json object\n" + "2. verbose (bool, optional, default=false) If false, return a string, otherwise return a json object\n" "\nResult (if verbose is not set or set to false):\n" "\"data\" (string) The serialized, hex-encoded data for 'txid'\n" From ddc2dd16121b10da129d363530a365361435a849 Mon Sep 17 00:00:00 2001 From: Andrew Chow Date: Wed, 22 Mar 2017 20:34:27 -0400 Subject: [PATCH 054/136] Ensure an item exists on the rpcconsole stack before adding Ensures that there is an item on the rpcconsole stack before adding something to the current stack so that a segmentation fault does not occur. Github-Pull: #10060 Rebased-From: 4df76e270caa9d828179cae1c7a8918d6f91ec21 --- src/qt/rpcconsole.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp index 60406c20597..001f1992647 100644 --- a/src/qt/rpcconsole.cpp +++ b/src/qt/rpcconsole.cpp @@ -175,6 +175,10 @@ bool RPCConsole::RPCParseCommandLine(std::string &strResult, const std::string & nDepthInsideSensitive = 1; filter_begin_pos = chpos; } + // Make sure stack is not empty before adding something + if (stack.empty()) { + stack.push_back(std::vector()); + } stack.back().push_back(strArg); }; From e9611d10b67dd99bae83b32dedc9767b4c2e44d2 Mon Sep 17 00:00:00 2001 From: Cory Fields Date: Fri, 10 Mar 2017 16:53:03 -0500 Subject: [PATCH 055/136] depends: fix zlib build on osx zlib is sneaky and expects ar to be libtool on darwin. Github-Pull: #9973 Rebased-From: c62475329e5e4c4c3f9570546e2b843288f48c61 --- depends/packages/zlib.mk | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/depends/packages/zlib.mk b/depends/packages/zlib.mk index 7ff5d00bbdc..589490800f8 100644 --- a/depends/packages/zlib.mk +++ b/depends/packages/zlib.mk @@ -7,8 +7,10 @@ $(package)_sha256_hash=c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca11 define $(package)_set_vars $(package)_build_opts= CC="$($(package)_cc)" $(package)_build_opts+=CFLAGS="$($(package)_cflags) $($(package)_cppflags) -fPIC" -$(package)_build_opts+=AR="$($(package)_ar)" $(package)_build_opts+=RANLIB="$($(package)_ranlib)" +$(package)_build_opts+=AR="$($(package)_ar)" +$(package)_build_opts_darwin+=AR="$($(package)_libtool)" +$(package)_build_opts_darwin+=ARFLAGS="-o" endef define $(package)_config_cmds From fc3d7db5800f1d821ac233909f38bd342e3fe503 Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Fri, 3 Mar 2017 13:33:32 -0500 Subject: [PATCH 056/136] Optimize GetWitnessHash() for non-segwit transactions Github-Pull: #9912 Rebased-From: 02c57b521a9e7afd4416cd027a8b397f202b08a8 --- src/primitives/transaction.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/primitives/transaction.cpp b/src/primitives/transaction.cpp index 790bc71d14b..28ef1fb4640 100644 --- a/src/primitives/transaction.cpp +++ b/src/primitives/transaction.cpp @@ -69,6 +69,9 @@ uint256 CTransaction::ComputeHash() const uint256 CTransaction::GetWitnessHash() const { + if (!HasWitness()) { + return GetHash(); + } return SerializeHash(*this, SER_GETHASH, 0); } From 142fbb2fec76adee001ffdabfe25ebc462560696 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Sun, 26 Mar 2017 12:08:44 +0200 Subject: [PATCH 057/136] rpc: Rename first named arg of createrawtransaction Github-Pull: #10084 Rebased-From: fa558532192ca0bb519f811ee14df6037413b89f --- src/rpc/client.cpp | 2 +- src/rpc/rawtransaction.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/rpc/client.cpp b/src/rpc/client.cpp index 5bdd84e5551..56d14959192 100644 --- a/src/rpc/client.cpp +++ b/src/rpc/client.cpp @@ -83,7 +83,7 @@ static const CRPCConvertParam vRPCConvertParams[] = { "getblockheader", 1, "verbose" }, { "gettransaction", 1, "include_watchonly" }, { "getrawtransaction", 1, "verbose" }, - { "createrawtransaction", 0, "transactions" }, + { "createrawtransaction", 0, "inputs" }, { "createrawtransaction", 1, "outputs" }, { "createrawtransaction", 2, "locktime" }, { "signrawtransaction", 1, "prevtxs" }, diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp index 9ddeddd71b5..0fabb9f5a88 100644 --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -361,7 +361,7 @@ UniValue createrawtransaction(const JSONRPCRequest& request) "it is not stored in the wallet or transmitted to the network.\n" "\nArguments:\n" - "1. \"inputs\" (string, required) A json array of json objects\n" + "1. \"inputs\" (array, required) A json array of json objects\n" " [\n" " {\n" " \"txid\":\"id\", (string, required) The transaction id\n" @@ -370,7 +370,7 @@ UniValue createrawtransaction(const JSONRPCRequest& request) " } \n" " ,...\n" " ]\n" - "2. \"outputs\" (string, required) a json object with outputs\n" + "2. \"outputs\" (object, required) a json object with outputs\n" " {\n" " \"address\": x.xxx, (numeric or string, required) The key is the bitcoin address, the numeric value (can be string) is the " + CURRENCY_UNIT + " amount\n" " \"data\": \"hex\" (string, required) The key is \"data\", the value is hex encoded data\n" @@ -932,7 +932,7 @@ static const CRPCCommand commands[] = { // category name actor (function) okSafeMode // --------------------- ------------------------ ----------------------- ---------- { "rawtransactions", "getrawtransaction", &getrawtransaction, true, {"txid","verbose"} }, - { "rawtransactions", "createrawtransaction", &createrawtransaction, true, {"transactions","outputs","locktime"} }, + { "rawtransactions", "createrawtransaction", &createrawtransaction, true, {"inputs","outputs","locktime"} }, { "rawtransactions", "decoderawtransaction", &decoderawtransaction, true, {"hexstring"} }, { "rawtransactions", "decodescript", &decodescript, true, {"hexstring"} }, { "rawtransactions", "sendrawtransaction", &sendrawtransaction, false, {"hexstring","allowhighfees"} }, From fa7555b16a4e279f8f04c06f76a315e4c194ad79 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Mon, 27 Mar 2017 23:45:03 +0200 Subject: [PATCH 058/136] doc: Add release notes for RPC createraw break --- doc/release-notes.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/doc/release-notes.md b/doc/release-notes.md index 7ade5b74400..41fb500f164 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -36,7 +36,14 @@ Notable changes Example item ----------------------------------------------- -0.13.x Change log +RPC changes +----------- + +The first positional argument of `createrawtransaction` was renamed. +This interface change breaks compatibility with 0.14.0, when the named +arguments functionality, introduced in 0.14.0, is used. + +0.14.x Change log ================= Detailed release notes follow. This overview includes changes that affect From b5c3440b053217afda5f03ee97b3835f02fd5290 Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Mon, 6 Mar 2017 11:16:06 -0500 Subject: [PATCH 059/136] Mining: return early when block is almost full Github-Pull: #9959 Rebased-From: eed816af6c68c0c67f5fc05472a3927db62f8a18 --- src/miner.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/miner.cpp b/src/miner.cpp index 7b3d94d0e4f..54d66dadd22 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -416,6 +416,13 @@ void BlockAssembler::addPackageTxs() CTxMemPool::indexed_transaction_set::index::type::iterator mi = mempool.mapTx.get().begin(); CTxMemPool::txiter iter; + + // Limit the number of attempts to add transactions to the block when it is + // close to full; this is just a simple heuristic to finish quickly if the + // mempool has a lot of entries. + const int64_t MAX_CONSECUTIVE_FAILURES = 1000; + int64_t nConsecutiveFailed = 0; + while (mi != mempool.mapTx.get().end() || !mapModifiedTx.empty()) { // First try to find a new transaction in mapTx to evaluate. @@ -477,6 +484,14 @@ void BlockAssembler::addPackageTxs() mapModifiedTx.get().erase(modit); failedTx.insert(iter); } + + ++nConsecutiveFailed; + + if (nConsecutiveFailed > MAX_CONSECUTIVE_FAILURES && nBlockWeight > + nBlockMaxWeight - 4000) { + // Give up if we're close to full and haven't succeeded in a while + break; + } continue; } @@ -497,6 +512,9 @@ void BlockAssembler::addPackageTxs() continue; } + // This transaction will make it in; reset the failed counter. + nConsecutiveFailed = 0; + // Package can be added. Sort the entries in a valid order. std::vector sortedEntries; SortForBlock(ancestors, iter, sortedEntries); From 10028fb5551a210c71e63b065c53cb2a3dddba00 Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Wed, 8 Mar 2017 10:17:58 -0500 Subject: [PATCH 060/136] Add benchmarking for CreateNewBlock Github-Pull: #9959 Rebased-From: 42cd8c890fb2d65274f26edf95b6d52ac41fcab8 --- src/miner.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/miner.cpp b/src/miner.cpp index 54d66dadd22..89863d3ec2a 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -129,6 +129,8 @@ void BlockAssembler::resetBlock() std::unique_ptr BlockAssembler::CreateNewBlock(const CScript& scriptPubKeyIn, bool fMineWitnessTx) { + int64_t nTimeStart = GetTimeMicros(); + resetBlock(); pblocktemplate.reset(new CBlockTemplate()); @@ -170,6 +172,8 @@ std::unique_ptr BlockAssembler::CreateNewBlock(const CScript& sc addPriorityTxs(); addPackageTxs(); + int64_t nTime1 = GetTimeMicros(); + nLastBlockTx = nBlockTx; nLastBlockSize = nBlockSize; nLastBlockWeight = nBlockWeight; @@ -200,6 +204,9 @@ std::unique_ptr BlockAssembler::CreateNewBlock(const CScript& sc if (!TestBlockValidity(state, chainparams, *pblock, pindexPrev, false, false)) { throw std::runtime_error(strprintf("%s: TestBlockValidity failed: %s", __func__, FormatStateMessage(state))); } + int64_t nTime2 = GetTimeMicros(); + + LogPrint("bench", "CreateNewBlock() packages: %.2fms, validity: %.2fms (total %.2fms)\n", 0.001 * (nTime1 - nTimeStart), 0.001 * (nTime2 - nTime1), 0.001 * (nTime2 - nTimeStart)); return std::move(pblocktemplate); } From a296c6009ffc64e0409aad791449f9f7fc7ba794 Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Wed, 8 Mar 2017 10:56:29 -0500 Subject: [PATCH 061/136] Update benchmarking with package statistics Github-Pull: #9959 Rebased-From: 011124a2b278c5a60bad5f1b0b4abbf7ebc95aa0 --- src/miner.cpp | 17 ++++++++++++----- src/miner.h | 11 +++++++---- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/miner.cpp b/src/miner.cpp index 89863d3ec2a..a12dcec2ce7 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -170,7 +170,9 @@ std::unique_ptr BlockAssembler::CreateNewBlock(const CScript& sc fIncludeWitness = IsWitnessEnabled(pindexPrev, chainparams.GetConsensus()) && fMineWitnessTx; addPriorityTxs(); - addPackageTxs(); + int nPackagesSelected = 0; + int nDescendantsUpdated = 0; + addPackageTxs(nPackagesSelected, nDescendantsUpdated); int64_t nTime1 = GetTimeMicros(); @@ -206,7 +208,7 @@ std::unique_ptr BlockAssembler::CreateNewBlock(const CScript& sc } int64_t nTime2 = GetTimeMicros(); - LogPrint("bench", "CreateNewBlock() packages: %.2fms, validity: %.2fms (total %.2fms)\n", 0.001 * (nTime1 - nTimeStart), 0.001 * (nTime2 - nTime1), 0.001 * (nTime2 - nTimeStart)); + LogPrint("bench", "CreateNewBlock() packages: %.2fms (%d packages, %d updated descendants), validity: %.2fms (total %.2fms)\n", 0.001 * (nTime1 - nTimeStart), nPackagesSelected, nDescendantsUpdated, 0.001 * (nTime2 - nTime1), 0.001 * (nTime2 - nTimeStart)); return std::move(pblocktemplate); } @@ -347,9 +349,10 @@ void BlockAssembler::AddToBlock(CTxMemPool::txiter iter) } } -void BlockAssembler::UpdatePackagesForAdded(const CTxMemPool::setEntries& alreadyAdded, +int BlockAssembler::UpdatePackagesForAdded(const CTxMemPool::setEntries& alreadyAdded, indexed_modified_transaction_set &mapModifiedTx) { + int nDescendantsUpdated = 0; BOOST_FOREACH(const CTxMemPool::txiter it, alreadyAdded) { CTxMemPool::setEntries descendants; mempool.CalculateDescendants(it, descendants); @@ -357,6 +360,7 @@ void BlockAssembler::UpdatePackagesForAdded(const CTxMemPool::setEntries& alread BOOST_FOREACH(CTxMemPool::txiter desc, descendants) { if (alreadyAdded.count(desc)) continue; + ++nDescendantsUpdated; modtxiter mit = mapModifiedTx.find(desc); if (mit == mapModifiedTx.end()) { CTxMemPoolModifiedEntry modEntry(desc); @@ -369,6 +373,7 @@ void BlockAssembler::UpdatePackagesForAdded(const CTxMemPool::setEntries& alread } } } + return nDescendantsUpdated; } // Skip entries in mapTx that are already in a block or are present @@ -409,7 +414,7 @@ void BlockAssembler::SortForBlock(const CTxMemPool::setEntries& package, CTxMemP // Each time through the loop, we compare the best transaction in // mapModifiedTxs with the next transaction in the mempool to decide what // transaction package to work on next. -void BlockAssembler::addPackageTxs() +void BlockAssembler::addPackageTxs(int &nPackagesSelected, int &nDescendantsUpdated) { // mapModifiedTx will store sorted packages after they are modified // because some of their txs are already in the block @@ -532,8 +537,10 @@ void BlockAssembler::addPackageTxs() mapModifiedTx.erase(sortedEntries[i]); } + ++nPackagesSelected; + // Update transactions that depend on each of these - UpdatePackagesForAdded(ancestors, mapModifiedTx); + nDescendantsUpdated += UpdatePackagesForAdded(ancestors, mapModifiedTx); } } diff --git a/src/miner.h b/src/miner.h index 29013c3bcc1..9ae2874927c 100644 --- a/src/miner.h +++ b/src/miner.h @@ -177,8 +177,10 @@ class BlockAssembler // Methods for how to add transactions to a block. /** Add transactions based on tx "priority" */ void addPriorityTxs(); - /** Add transactions based on feerate including unconfirmed ancestors */ - void addPackageTxs(); + /** Add transactions based on feerate including unconfirmed ancestors + * Increments nPackagesSelected / nDescendantsUpdated with corresponding + * statistics from the package selection (for logging statistics). */ + void addPackageTxs(int &nPackagesSelected, int &nDescendantsUpdated); // helper function for addPriorityTxs /** Test if tx will still "fit" in the block */ @@ -202,8 +204,9 @@ class BlockAssembler /** Sort the package in an order that is valid to appear in a block */ void SortForBlock(const CTxMemPool::setEntries& package, CTxMemPool::txiter entry, std::vector& sortedEntries); /** Add descendants of given transactions to mapModifiedTx with ancestor - * state updated assuming given transactions are inBlock. */ - void UpdatePackagesForAdded(const CTxMemPool::setEntries& alreadyAdded, indexed_modified_transaction_set &mapModifiedTx); + * state updated assuming given transactions are inBlock. Returns number + * of updated descendants. */ + int UpdatePackagesForAdded(const CTxMemPool::setEntries& alreadyAdded, indexed_modified_transaction_set &mapModifiedTx); }; /** Modify the extranonce in a block */ From 04c21afcdf0ed664c1fddff17d066cc2de552b54 Mon Sep 17 00:00:00 2001 From: Awemany Date: Tue, 28 Mar 2017 14:52:59 +0200 Subject: [PATCH 062/136] bitcoin-tx: Fix missing range check The number of arguments is not checked MutateTxAddOutAddr(..), meaning that > ./bitcoin-tx -create outaddr= accessed the vStrInputParts vector beyond its bounds. This also includes work by jnewbery to check the inputs for MutateTxAddPubKey() Github-Pull: #10130 Rebased-From: eb66bf9bdd5ae20c546314eb2c494ac09929970f --- src/bitcoin-tx.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/bitcoin-tx.cpp b/src/bitcoin-tx.cpp index 3c3646523a0..43fa3fdfb96 100644 --- a/src/bitcoin-tx.cpp +++ b/src/bitcoin-tx.cpp @@ -242,6 +242,9 @@ static void MutateTxAddOutAddr(CMutableTransaction& tx, const std::string& strIn std::vector vStrInputParts; boost::split(vStrInputParts, strInput, boost::is_any_of(":")); + if (vStrInputParts.size() != 2) + throw std::runtime_error("TX output missing or too many separators"); + // Extract and validate VALUE CAmount value = ExtractAndValidateValue(vStrInputParts[0]); @@ -264,6 +267,9 @@ static void MutateTxAddOutPubKey(CMutableTransaction& tx, const std::string& str std::vector vStrInputParts; boost::split(vStrInputParts, strInput, boost::is_any_of(":")); + if (vStrInputParts.size() < 2 || vStrInputParts.size() > 3) + throw std::runtime_error("TX output missing or too many separators"); + // Extract and validate VALUE CAmount value = ExtractAndValidateValue(vStrInputParts[0]); From ecc523288cc655089d83f168e81ae1f249a3ae88 Mon Sep 17 00:00:00 2001 From: John Newbery Date: Wed, 29 Mar 2017 10:20:10 -0400 Subject: [PATCH 063/136] Check stderr when testing bitcoin-tx Github-Pull: #10130 Rebased-From: 21704f6334d2a4bd140c6e3260c4bfa3f3157bad --- src/test/bctest.py | 12 ++++++++++++ src/test/data/bitcoin-util-test.json | 4 ++++ 2 files changed, 16 insertions(+) diff --git a/src/test/bctest.py b/src/test/bctest.py index adc5d0e4181..7ea15dfddcd 100644 --- a/src/test/bctest.py +++ b/src/test/bctest.py @@ -98,6 +98,18 @@ def bctest(testDir, testObj, exeext): logging.error("Return code mismatch for " + outputFn) raise Exception + if "error_txt" in testObj: + want_error = testObj["error_txt"] + # Compare error text + # TODO: ideally, we'd compare the strings exactly and also assert + # That stderr is empty if no errors are expected. However, bitcoin-tx + # emits DISPLAY errors when running as a windows application on + # linux through wine. Just assert that the expected error text appears + # somewhere in stderr. + if want_error not in outs[1]: + logging.error("Error mismatch:\n" + "Expected: " + want_error + "\nReceived: " + outs[1].rstrip()) + raise Exception + def bctester(testDir, input_basename, buildenv): """ Loads and parses the input file, runs all tests and reports results""" input_filename = testDir + "/" + input_basename diff --git a/src/test/data/bitcoin-util-test.json b/src/test/data/bitcoin-util-test.json index a80ab519015..2a0a8f1a99d 100644 --- a/src/test/data/bitcoin-util-test.json +++ b/src/test/data/bitcoin-util-test.json @@ -42,6 +42,7 @@ "args": ["-", "delin=31"], "input": "tx394b54bb.hex", "return_code": 1, + "error_txt": "error: Invalid TX input index '31'", "description": "Attempts to delete an input with a bad index from a transaction. Expected to fail." }, { "exec": "./bitcoin-tx", @@ -60,6 +61,7 @@ "args": ["-", "delout=2"], "input": "tx394b54bb.hex", "return_code": 1, + "error_txt": "error: Invalid TX output index '2'", "description": "Attempts to delete an output with a bad index from a transaction. Expected to fail." }, { "exec": "./bitcoin-tx", @@ -233,6 +235,7 @@ "in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0", "outdata=4:badhexdata"], "return_code": 1, + "error_txt": "error: invalid TX output data", "description": "Attempts to create a new transaction with one input and an output with malformed hex data. Expected to fail" }, { "exec": "./bitcoin-tx", @@ -241,6 +244,7 @@ "in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0", "outdata=badhexdata"], "return_code": 1, + "error_txt": "error: invalid TX output data", "description": "Attempts to create a new transaction with one input and an output with no value and malformed hex data. Expected to fail" }, { "exec": "./bitcoin-tx", From f59e3dfc599ca9a30a1189e9a5bb033923498af2 Mon Sep 17 00:00:00 2001 From: John Newbery Date: Wed, 29 Mar 2017 10:53:11 -0400 Subject: [PATCH 064/136] Add tests for bitcoin-tx input checking Github-Pull: #10130 Rebased-From: 19ecd1e2e13514c8a92a2a4337c2568c3d5d13e5 --- src/test/data/bitcoin-util-test.json | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/test/data/bitcoin-util-test.json b/src/test/data/bitcoin-util-test.json index 2a0a8f1a99d..b61a4f7f8f9 100644 --- a/src/test/data/bitcoin-util-test.json +++ b/src/test/data/bitcoin-util-test.json @@ -79,6 +79,38 @@ { "exec": "./bitcoin-tx", "args": ["-create", + "outaddr=1"], + "return_code": 1, + "error_txt": "error: TX output missing or too many separators", + "description": "Malformed outaddr argument (no address specified). Expected to fail." + }, + { "exec": "./bitcoin-tx", + "args": + ["-create", + "outaddr=1:13tuJJDR2RgArmgfv6JScSdreahzgc4T6o:garbage"], + "return_code": 1, + "error_txt": "error: TX output missing or too many separators", + "description": "Malformed outaddr argument (too many separators). Expected to fail." + }, + { "exec": "./bitcoin-tx", + "args": + ["-create", + "outpubkey=0"], + "return_code": 1, + "error_txt": "error: TX output missing or too many separators", + "description": "Malformed outpubkey argument (no pubkey specified). Expected to fail." + }, + { "exec": "./bitcoin-tx", + "args": + ["-create", + "outpubkey=0:02a5613bd857b7048924264d1e70e08fb2a7e6527d32b7ab1bb993ac59964ff397:W:non53nse"], + "return_code": 1, + "error_txt": "error: TX output missing or too many separators", + "description": "Malformed outpubkey argument (too many separators). Expected to fail." + }, + { "exec": "./bitcoin-tx", + "args": + ["-create", "in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0", "in=bf829c6bcf84579331337659d31f89dfd138f7f7785802d5501c92333145ca7c:18", "in=22a6f904655d53ae2ff70e701a0bbd90aa3975c0f40bfc6cc996a9049e31cdfc:1", From e4c9a90fe9aa702d2e1f7d932fc29a9c9f23fd4a Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Thu, 30 Mar 2017 09:37:47 +0200 Subject: [PATCH 065/136] util: Work around (virtual) memory exhaustion on 32-bit w/ glibc glibc-specific: On 32-bit systems set the number of arenas to 1. By default, since glibc 2.10, the C library will create up to two heap arenas per core. This is known to cause excessive virtual address space usage in our usage. Work around it by setting the maximum number of arenas to 1. Github-Pull: #10120 Rebased-From: 625488ace5c41ccba1b68323a72588000782f820 --- configure.ac | 8 ++++++++ src/util.cpp | 14 ++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/configure.ac b/configure.ac index a2332578a63..da42a0a1603 100644 --- a/configure.ac +++ b/configure.ac @@ -557,6 +557,14 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [ AC_MSG_RESULT(no)] ) +dnl Check for mallopt(M_ARENA_MAX) (to set glibc arenas) +AC_MSG_CHECKING(for mallopt M_ARENA_MAX) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[ mallopt(M_ARENA_MAX, 1); ]])], + [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOPT_ARENA_MAX, 1,[Define this symbol if you have mallopt with M_ARENA_MAX]) ], + [ AC_MSG_RESULT(no)] +) + AC_MSG_CHECKING([for visibility attribute]) AC_LINK_IFELSE([AC_LANG_SOURCE([ int foo_def( void ) __attribute__((visibility("default"))); diff --git a/src/util.cpp b/src/util.cpp index 78c353dfe52..6f812d9104e 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -72,6 +72,10 @@ #include #endif +#ifdef HAVE_MALLOPT_ARENA_MAX +#include +#endif + #include // for to_lower() #include #include // for startswith() and endswith() @@ -792,6 +796,16 @@ void RenameThread(const char* name) void SetupEnvironment() { +#ifdef HAVE_MALLOPT_ARENA_MAX + // glibc-specific: On 32-bit systems set the number of arenas to 1. + // By default, since glibc 2.10, the C library will create up to two heap + // arenas per core. This is known to cause excessive virtual address space + // usage in our usage. Work around it by setting the maximum number of + // arenas to 1. + if (sizeof(void*) == 4) { + mallopt(M_ARENA_MAX, 1); + } +#endif // On most POSIX systems (e.g. Linux, but not BSD) the environment's locale // may be invalid, in which case the "C" locale is used as fallback. #if !defined(WIN32) && !defined(MAC_OSX) && !defined(__FreeBSD__) && !defined(__OpenBSD__) From 0b5e162b84ec95cb63903dd21e4003a3d4503421 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Thu, 30 Mar 2017 12:05:05 -0700 Subject: [PATCH 066/136] Compensate for memory peak at flush time Github-Pull: #10126 Rebased-From: 7228ce853de5670d559d752f04a7db79578990ea --- src/validation.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/validation.cpp b/src/validation.cpp index e8a3736e5dd..5643d2ab59c 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -2027,7 +2027,7 @@ bool static FlushStateToDisk(CValidationState &state, FlushStateMode mode, int n nLastSetChain = nNow; } int64_t nMempoolSizeMax = GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000; - int64_t cacheSize = pcoinsTip->DynamicMemoryUsage(); + int64_t cacheSize = pcoinsTip->DynamicMemoryUsage() * 2; // Compensate for extra memory peak (x1.5-x1.9) at flush time. int64_t nTotalSpace = nCoinCacheUsage + std::max(nMempoolSizeMax - nMempoolUsage, 0); // The cache is large and we're within 10% and 100 MiB of the limit, but we have time now (not in the middle of a block processing). bool fCacheLarge = mode == FLUSH_STATE_PERIODIC && cacheSize > std::max((9 * nTotalSpace) / 10, nTotalSpace - 100 * 1024 * 1024); From f15268db3bf1a8c4ea410f4f63c6187b45e06ded Mon Sep 17 00:00:00 2001 From: practicalswift Date: Tue, 28 Mar 2017 08:20:08 +0200 Subject: [PATCH 067/136] [rpc] Remove auth cookie on shutdown Accidentally removed in 40b556d3742a1f65d67e2d4c760d0b13fe8be5b7 Github-Pull: #10139 Rebased-From: 4b87973c32bcaa5fa7509793e4f0c4f4f981f21b --- src/rpc/server.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/rpc/server.cpp b/src/rpc/server.cpp index 0b763acd451..67fc825804f 100644 --- a/src/rpc/server.cpp +++ b/src/rpc/server.cpp @@ -331,6 +331,7 @@ void StopRPC() { LogPrint("rpc", "Stopping RPC\n"); deadlineTimers.clear(); + DeleteAuthCookie(); g_rpcSignals.Stopped(); } From 2fea10ad03c22d3299c56a45370598501d7ee7cf Mon Sep 17 00:00:00 2001 From: Gregory Maxwell Date: Sun, 2 Apr 2017 21:28:17 +0000 Subject: [PATCH 068/136] Make GetWitnessCommitmentIndex callable on blocks without a coinbase txn. This isn't actually needed anywhere, but it's less brittle. Github-Pull: #10146 Rebased-From: ada0caa165905b50db351a56ec124518c922085a --- src/validation.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/validation.cpp b/src/validation.cpp index 5643d2ab59c..43ef8c88feb 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -2922,9 +2922,11 @@ bool IsWitnessEnabled(const CBlockIndex* pindexPrev, const Consensus::Params& pa static int GetWitnessCommitmentIndex(const CBlock& block) { int commitpos = -1; - for (size_t o = 0; o < block.vtx[0]->vout.size(); o++) { - if (block.vtx[0]->vout[o].scriptPubKey.size() >= 38 && block.vtx[0]->vout[o].scriptPubKey[0] == OP_RETURN && block.vtx[0]->vout[o].scriptPubKey[1] == 0x24 && block.vtx[0]->vout[o].scriptPubKey[2] == 0xaa && block.vtx[0]->vout[o].scriptPubKey[3] == 0x21 && block.vtx[0]->vout[o].scriptPubKey[4] == 0xa9 && block.vtx[0]->vout[o].scriptPubKey[5] == 0xed) { - commitpos = o; + if (!block.vtx.empty()) { + for (size_t o = 0; o < block.vtx[0]->vout.size(); o++) { + if (block.vtx[0]->vout[o].scriptPubKey.size() >= 38 && block.vtx[0]->vout[o].scriptPubKey[0] == OP_RETURN && block.vtx[0]->vout[o].scriptPubKey[1] == 0x24 && block.vtx[0]->vout[o].scriptPubKey[2] == 0xaa && block.vtx[0]->vout[o].scriptPubKey[3] == 0x21 && block.vtx[0]->vout[o].scriptPubKey[4] == 0xa9 && block.vtx[0]->vout[o].scriptPubKey[5] == 0xed) { + commitpos = o; + } } } return commitpos; From a44a6a15f94a6223a71790c5a65eb2b8a5b35dd2 Mon Sep 17 00:00:00 2001 From: Gregory Maxwell Date: Sun, 2 Apr 2017 21:39:32 +0000 Subject: [PATCH 069/136] Check transaction count early in submitblock. There is no point in even hashing a submitted block which doesn't have a coinbase transaction. This also results in more useful error reporting on corrupted input. Thanks to rawodb for the bug report. Github-Pull: #10146 Rebased-From: 4f15ea102d15eb237b63464725508dc509e98819 --- src/rpc/mining.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index 38d7b1eb1e2..33e234a95ef 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -748,6 +748,10 @@ UniValue submitblock(const JSONRPCRequest& request) if (!DecodeHexBlk(block, request.params[0].get_str())) throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Block decode failed"); + if (block.vtx.empty() || !block.vtx[0]->IsCoinBase()) { + throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Block does not start with a coinbase"); + } + uint256 hash = block.GetHash(); bool fBlockPresent = false; { From ab864d3e4943fc617853a64cf22fa3939f89fcd2 Mon Sep 17 00:00:00 2001 From: Alex Morcos Date: Fri, 31 Mar 2017 10:17:13 -0400 Subject: [PATCH 070/136] Make pcoinsTip memory calculations consistent Since we are more accurately measuring pcoinsTip peak usage at twice the current in dynamic usage, it makes sense to double the default (this will lead to the same effective usage and peak usage as previously). We should also double the buffer used to avoid flushing if above 90% but still sufficient space remaining. Github-Pull: #10133 Rebased-From: 5b95a190e8d7059039ce61e808d494dcf89ebb3b --- src/txdb.h | 6 +++++- src/validation.cpp | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/txdb.h b/src/txdb.h index 7f5cf2b583f..963f1006eaa 100644 --- a/src/txdb.h +++ b/src/txdb.h @@ -21,8 +21,12 @@ class CBlockIndex; class CCoinsViewDBCursor; class uint256; +//! Compensate for extra memory peak (x1.5-x1.9) at flush time. +static constexpr int DB_PEAK_USAGE_FACTOR = 2; +//! No need to flush if at least this much space still available. +static constexpr int MAX_BLOCK_COINSDB_USAGE = 100 * DB_PEAK_USAGE_FACTOR; //! -dbcache default (MiB) -static const int64_t nDefaultDbCache = 300; +static const int64_t nDefaultDbCache = 600; //! max. -dbcache (MiB) static const int64_t nMaxDbCache = sizeof(void*) > 4 ? 16384 : 1024; //! min. -dbcache (MiB) diff --git a/src/validation.cpp b/src/validation.cpp index 43ef8c88feb..b8555507285 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -2027,10 +2027,10 @@ bool static FlushStateToDisk(CValidationState &state, FlushStateMode mode, int n nLastSetChain = nNow; } int64_t nMempoolSizeMax = GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000; - int64_t cacheSize = pcoinsTip->DynamicMemoryUsage() * 2; // Compensate for extra memory peak (x1.5-x1.9) at flush time. + int64_t cacheSize = pcoinsTip->DynamicMemoryUsage() * DB_PEAK_USAGE_FACTOR; int64_t nTotalSpace = nCoinCacheUsage + std::max(nMempoolSizeMax - nMempoolUsage, 0); // The cache is large and we're within 10% and 100 MiB of the limit, but we have time now (not in the middle of a block processing). - bool fCacheLarge = mode == FLUSH_STATE_PERIODIC && cacheSize > std::max((9 * nTotalSpace) / 10, nTotalSpace - 100 * 1024 * 1024); + bool fCacheLarge = mode == FLUSH_STATE_PERIODIC && cacheSize > std::max((9 * nTotalSpace) / 10, nTotalSpace - MAX_BLOCK_COINSDB_USAGE * 1024 * 1024); // The cache is over the limit, we have to write now. bool fCacheCritical = mode == FLUSH_STATE_IF_NEEDED && cacheSize > nTotalSpace; // It's been a while since we wrote the block index to disk. Do this frequently, so we don't need to redownload after a crash. From d6867689d187b72145bb36f4a204f4468e46ee7e Mon Sep 17 00:00:00 2001 From: Alex Morcos Date: Fri, 31 Mar 2017 10:25:39 -0400 Subject: [PATCH 071/136] Lower default memory footprint slightly Github-Pull: #10133 Rebased-From: f33afd3b2be1bcabeb10168a53835359c9ff4a3e --- src/txdb.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/txdb.h b/src/txdb.h index 963f1006eaa..337942ffaf3 100644 --- a/src/txdb.h +++ b/src/txdb.h @@ -26,7 +26,7 @@ static constexpr int DB_PEAK_USAGE_FACTOR = 2; //! No need to flush if at least this much space still available. static constexpr int MAX_BLOCK_COINSDB_USAGE = 100 * DB_PEAK_USAGE_FACTOR; //! -dbcache default (MiB) -static const int64_t nDefaultDbCache = 600; +static const int64_t nDefaultDbCache = 450; //! max. -dbcache (MiB) static const int64_t nMaxDbCache = sizeof(void*) > 4 ? 16384 : 1024; //! min. -dbcache (MiB) From 0e5133cb2ef8973951f1b576ead37792f9b37f83 Mon Sep 17 00:00:00 2001 From: Alex Morcos Date: Fri, 31 Mar 2017 10:26:25 -0400 Subject: [PATCH 072/136] Make threshold for flushing more conservative. Always leave a reasonable buffer of 50MB for usage from newly connected block (once over 50%) and increase the high water mark buffer to 200MB. Github-Pull: #10133 Rebased-From: 1b55e07b7a61a9e6c299cf4c40fde80fa715d440 --- src/txdb.h | 6 ++++-- src/validation.cpp | 5 +++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/txdb.h b/src/txdb.h index 337942ffaf3..d9214ba6185 100644 --- a/src/txdb.h +++ b/src/txdb.h @@ -23,8 +23,10 @@ class uint256; //! Compensate for extra memory peak (x1.5-x1.9) at flush time. static constexpr int DB_PEAK_USAGE_FACTOR = 2; -//! No need to flush if at least this much space still available. -static constexpr int MAX_BLOCK_COINSDB_USAGE = 100 * DB_PEAK_USAGE_FACTOR; +//! No need to periodic flush if at least this much space still available. +static constexpr int MAX_BLOCK_COINSDB_USAGE = 200 * DB_PEAK_USAGE_FACTOR; +//! Always periodic flush if less than this much space still available. +static constexpr int MIN_BLOCK_COINSDB_USAGE = 50 * DB_PEAK_USAGE_FACTOR; //! -dbcache default (MiB) static const int64_t nDefaultDbCache = 450; //! max. -dbcache (MiB) diff --git a/src/validation.cpp b/src/validation.cpp index b8555507285..c9135c442b1 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -2029,8 +2029,9 @@ bool static FlushStateToDisk(CValidationState &state, FlushStateMode mode, int n int64_t nMempoolSizeMax = GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000; int64_t cacheSize = pcoinsTip->DynamicMemoryUsage() * DB_PEAK_USAGE_FACTOR; int64_t nTotalSpace = nCoinCacheUsage + std::max(nMempoolSizeMax - nMempoolUsage, 0); - // The cache is large and we're within 10% and 100 MiB of the limit, but we have time now (not in the middle of a block processing). - bool fCacheLarge = mode == FLUSH_STATE_PERIODIC && cacheSize > std::max((9 * nTotalSpace) / 10, nTotalSpace - MAX_BLOCK_COINSDB_USAGE * 1024 * 1024); + // The cache is large and we're within 10% and 200 MiB or 50% and 50MiB of the limit, but we have time now (not in the middle of a block processing). + bool fCacheLarge = mode == FLUSH_STATE_PERIODIC && cacheSize > std::min(std::max(nTotalSpace / 2, nTotalSpace - MIN_BLOCK_COINSDB_USAGE * 1024 * 1024), + std::max((9 * nTotalSpace) / 10, nTotalSpace - MAX_BLOCK_COINSDB_USAGE * 1024 * 1024)); // The cache is over the limit, we have to write now. bool fCacheCritical = mode == FLUSH_STATE_IF_NEEDED && cacheSize > nTotalSpace; // It's been a while since we wrote the block index to disk. Do this frequently, so we don't need to redownload after a crash. From d947afc0f7868815dff248ad398c3680def5bf81 Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Mon, 3 Apr 2017 15:48:55 -0400 Subject: [PATCH 073/136] Test prioritisetransaction and ancestor fee state There is already a similar test for descendant fee state. Github-Pull: #10144 Rebased-From: ba7dd8bf6f41de647a8df0c4570df6ac20b08e48 --- qa/rpc-tests/mempool_packages.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/qa/rpc-tests/mempool_packages.py b/qa/rpc-tests/mempool_packages.py index f605e7524f7..f53515d32e2 100755 --- a/qa/rpc-tests/mempool_packages.py +++ b/qa/rpc-tests/mempool_packages.py @@ -102,6 +102,18 @@ def run_test(self): assert_equal(mempool[x], v_descendants[x]) assert(chain[0] not in v_descendants.keys()) + # Check that ancestor modified fees includes fee deltas from + # prioritisetransaction + self.nodes[0].prioritisetransaction(chain[0], 1000) + mempool = self.nodes[0].getrawmempool(True) + ancestor_fees = 0 + for x in chain: + ancestor_fees += mempool[x]['fee'] + assert_equal(mempool[x]['ancestorfees'], ancestor_fees * COIN + 1000) + + # Undo the prioritisetransaction for later tests + self.nodes[0].prioritisetransaction(chain[0], -1000) + # Check that descendant modified fees includes fee deltas from # prioritisetransaction self.nodes[0].prioritisetransaction(chain[-1], 0, 1000) From ea060c7495b10394ecf6909bc0327e93a2a34a7f Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Mon, 3 Apr 2017 15:50:15 -0400 Subject: [PATCH 074/136] Bugfix: ancestor modifed fees were incorrect for descendants If prioritisetransaction was called for a tx with in-mempool descendants, the modified ancestor fee values for those descendants was incorrect. Github-Pull: #10144 Rebased-From: 9bef02e36525d0eed4e2e31678b3ff04bbb0b8cb --- src/txmempool.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/txmempool.cpp b/src/txmempool.cpp index 5842dd88d83..91040fb9b21 100644 --- a/src/txmempool.cpp +++ b/src/txmempool.cpp @@ -938,6 +938,13 @@ void CTxMemPool::PrioritiseTransaction(const uint256 hash, const std::string str BOOST_FOREACH(txiter ancestorIt, setAncestors) { mapTx.modify(ancestorIt, update_descendant_state(0, nFeeDelta, 0)); } + // Now update all descendants' modified fees with ancestors + setEntries setDescendants; + CalculateDescendants(it, setDescendants); + setDescendants.erase(it); + BOOST_FOREACH(txiter descendantIt, setDescendants) { + mapTx.modify(descendantIt, update_ancestor_state(0, nFeeDelta, 0, 0)); + } } } LogPrintf("PrioritiseTransaction: %s priority += %f, fee += %d\n", strHash, dPriorityDelta, FormatMoney(nFeeDelta)); From 47d24c85b71b854939522238f8e44c891d8674af Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Wed, 5 Apr 2017 09:12:17 +0200 Subject: [PATCH 075/136] Bump version to 0.14.1 --- configure.ac | 2 +- doc/Doxyfile | 2 +- doc/README.md | 2 +- doc/README_windows.txt | 2 +- src/clientversion.h | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index da42a0a1603..a9156c34803 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N) AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 0) define(_CLIENT_VERSION_MINOR, 14) -define(_CLIENT_VERSION_REVISION, 0) +define(_CLIENT_VERSION_REVISION, 1) define(_CLIENT_VERSION_BUILD, 0) define(_CLIENT_VERSION_IS_RELEASE, true) define(_COPYRIGHT_YEAR, 2017) diff --git a/doc/Doxyfile b/doc/Doxyfile index a10e4a552cd..2146a002206 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = "Bitcoin Core" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 0.14.0 +PROJECT_NUMBER = 0.14.1 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/doc/README.md b/doc/README.md index fb2e0ee7d00..52a4cc0bf68 100644 --- a/doc/README.md +++ b/doc/README.md @@ -1,4 +1,4 @@ -Bitcoin Core 0.14.0 +Bitcoin Core 0.14.1 ===================== Setup diff --git a/doc/README_windows.txt b/doc/README_windows.txt index 67eb7873a17..5b9aaef57a4 100644 --- a/doc/README_windows.txt +++ b/doc/README_windows.txt @@ -1,4 +1,4 @@ -Bitcoin Core 0.14.0 +Bitcoin Core 0.14.1 ===================== Intro diff --git a/src/clientversion.h b/src/clientversion.h index 2b259fb9f02..aa46955daee 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -16,7 +16,7 @@ //! These need to be macros, as clientversion.cpp's and bitcoin*-res.rc's voodoo requires it #define CLIENT_VERSION_MAJOR 0 #define CLIENT_VERSION_MINOR 14 -#define CLIENT_VERSION_REVISION 0 +#define CLIENT_VERSION_REVISION 1 #define CLIENT_VERSION_BUILD 0 //! Set to true for release, false for prerelease or test build From 920acbcca8240cb11a74055a81d5129c8a4c85af Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Wed, 5 Apr 2017 11:52:16 +0200 Subject: [PATCH 076/136] doc: Update release notes for 0.14.1 --- doc/release-notes.md | 56 +++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 11 deletions(-) diff --git a/doc/release-notes.md b/doc/release-notes.md index 41fb500f164..6b6b6672886 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -1,9 +1,6 @@ -(note: this is a temporary file, to be added-to by anybody, and moved to -release-notes at release time) +Bitcoin Core version 0.14.1 is now available from: -Bitcoin Core version 0.14.x is now available from: - - + This is a new minor version release, including various bugfixes and performance improvements, as well as updated translations. @@ -33,9 +30,6 @@ frequently tested on them. Notable changes =============== -Example item ------------------------------------------------ - RPC changes ----------- @@ -43,7 +37,7 @@ The first positional argument of `createrawtransaction` was renamed. This interface change breaks compatibility with 0.14.0, when the named arguments functionality, introduced in 0.14.0, is used. -0.14.x Change log +0.14.1 Change log ================= Detailed release notes follow. This overview includes changes that affect @@ -51,14 +45,54 @@ behavior, not code moves, refactors and string updates. For convenience in locat the code changes and accompanying discussion, both the pull request and git merge commit are mentioned. -[to be filled in at release] +### RPC and other APIs +- #10084 `142fbb2` Rename first named arg of createrawtransaction (MarcoFalke) +- #10139 `f15268d` Remove auth cookie on shutdown (practicalswift) +- #10146 `2fea10a` Better error handling for submitblock (gmaxwell) +- #10144 `d947afc` Prioritisetransaction wasn't always updating ancestor fee (sdaftuar) + +### Block and transaction handling +- #10126 `0b5e162` Compensate for memory peak at flush time (sipa) +- #9912 `fc3d7db` Optimize GetWitnessHash() for non-segwit transactions (sdaftuar) +- #10133 `ab864d3` Clean up calculations of pcoinsTip memory usage (morcos) + +### P2P protocol and network code +- #9953/#10013 `d2548a4` Fix shutdown hang with >= 8 -addnodes set (TheBlueMatt) + +### Build system +- #9973 `e9611d1` depends: fix zlib build on osx (theuni) + +### GUI +- #10060 `ddc2dd1` Ensure an item exists on the rpcconsole stack before adding (achow101) + +### Mining +- #9955/#10006 `569596c` Don't require segwit in getblocktemplate for segwit signalling or mining (sdaftuar) +- #9959/#10127 `b5c3440` Prevent slowdown in CreateNewBlock on large mempools (sdaftuar) + +### Miscellaneous +- #10094 `37bf0d5` 0.14: Clear release notes (MarcoFalke) +- #10037 `4d8e660` Trivial: Fix typo in help getrawtransaction RPC (keystrike) +- #10120 `e4c9a90` util: Work around (virtual) memory exhaustion on 32-bit w/ glibc (laanwj) +- #10130 `ecc5232` bitcoin-tx input verification (awemany, jnewbery) Credits ======= Thanks to everyone who directly contributed to this release: -[to be filled in at release] +- Alex Morcos +- Andrew Chow +- Awemany +- Cory Fields +- Gregory Maxwell +- James Evans +- John Newbery +- MarcoFalke +- Matt Corallo +- Pieter Wuille +- practicalswift +- Suhas Daftuar +- Wladimir J. van der Laan As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). From df82ea914f6f569e244ab59ca24e4eea898eb1a9 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Wed, 5 Apr 2017 13:01:32 +0200 Subject: [PATCH 077/136] doc: Remove release note about release notes --- doc/release-notes.md | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/release-notes.md b/doc/release-notes.md index 6b6b6672886..5eba44d950c 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -70,7 +70,6 @@ git merge commit are mentioned. - #9959/#10127 `b5c3440` Prevent slowdown in CreateNewBlock on large mempools (sdaftuar) ### Miscellaneous -- #10094 `37bf0d5` 0.14: Clear release notes (MarcoFalke) - #10037 `4d8e660` Trivial: Fix typo in help getrawtransaction RPC (keystrike) - #10120 `e4c9a90` util: Work around (virtual) memory exhaustion on 32-bit w/ glibc (laanwj) - #10130 `ecc5232` bitcoin-tx input verification (awemany, jnewbery) From 39febb8c6dbe286946773630d0484027307e5f42 Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Wed, 5 Apr 2017 08:30:51 -0400 Subject: [PATCH 078/136] [qa] Fix mempool_packages.py for the 0.14 branch The backport in d947afc0f7868815dff248ad398c3680def5bf81 of this test was incorrect due to an api change in prioritisetransaction. --- qa/rpc-tests/mempool_packages.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/qa/rpc-tests/mempool_packages.py b/qa/rpc-tests/mempool_packages.py index f53515d32e2..99e01534d69 100755 --- a/qa/rpc-tests/mempool_packages.py +++ b/qa/rpc-tests/mempool_packages.py @@ -104,7 +104,7 @@ def run_test(self): # Check that ancestor modified fees includes fee deltas from # prioritisetransaction - self.nodes[0].prioritisetransaction(chain[0], 1000) + self.nodes[0].prioritisetransaction(chain[0], 0, 1000) mempool = self.nodes[0].getrawmempool(True) ancestor_fees = 0 for x in chain: @@ -112,7 +112,7 @@ def run_test(self): assert_equal(mempool[x]['ancestorfees'], ancestor_fees * COIN + 1000) # Undo the prioritisetransaction for later tests - self.nodes[0].prioritisetransaction(chain[0], -1000) + self.nodes[0].prioritisetransaction(chain[0], 0, -1000) # Check that descendant modified fees includes fee deltas from # prioritisetransaction From 226a9cb35d2951629abe978e74a1a137c5e26d1a Mon Sep 17 00:00:00 2001 From: Gregory Maxwell Date: Wed, 5 Apr 2017 17:23:43 +0000 Subject: [PATCH 079/136] Add some more release notes for 0.14.1. This adds a blurb for the segwit signaling and fixes up the attribution. --- doc/release-notes.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/doc/release-notes.md b/doc/release-notes.md index 5eba44d950c..22452190aea 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -37,6 +37,20 @@ The first positional argument of `createrawtransaction` was renamed. This interface change breaks compatibility with 0.14.0, when the named arguments functionality, introduced in 0.14.0, is used. + +Mining +------ + +Getblocktemplate sets the segwit version bit even when the downstream +client has not been updated to include the segwit commitment. Ability +to enforce the rule is the only required criteria for safe activation, +but previously signaling was only requested if the miner could include +transactions in order to avoid a potential outcome where segwit would +activate at a time when no segwit transactions could be included. +Since many miners are now including the segwit commitment this concern +no longer applies. + + 0.14.1 Change log ================= @@ -48,7 +62,7 @@ git merge commit are mentioned. ### RPC and other APIs - #10084 `142fbb2` Rename first named arg of createrawtransaction (MarcoFalke) - #10139 `f15268d` Remove auth cookie on shutdown (practicalswift) -- #10146 `2fea10a` Better error handling for submitblock (gmaxwell) +- #10146 `2fea10a` Better error handling for submitblock (rawodb, gmaxwell) - #10144 `d947afc` Prioritisetransaction wasn't always updating ancestor fee (sdaftuar) ### Block and transaction handling @@ -90,6 +104,7 @@ Thanks to everyone who directly contributed to this release: - Matt Corallo - Pieter Wuille - practicalswift +- rawodb - Suhas Daftuar - Wladimir J. van der Laan From b7caa30c48eb60ef14f4746dd1617865187788b1 Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Tue, 11 Apr 2017 09:28:07 -0400 Subject: [PATCH 080/136] Mention dbcache memory changes in 0.14.1 release notes --- doc/release-notes.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/doc/release-notes.md b/doc/release-notes.md index 22452190aea..4479c1a456a 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -50,6 +50,24 @@ activate at a time when no segwit transactions could be included. Since many miners are now including the segwit commitment this concern no longer applies. +UTXO memory accounting +---------------------- + +Memory usage for the UTXO cache is being calculated more accurately, so that +the configured limit (`-dbcache`) will be respected when memory usage peaks +during cache flushes. The memory accounting in prior releases is estimated to +only account for half the actual peak utilization. + +The default `-dbcache` has also been changed in this release to 450MiB. Users +who currently set `-dbcache` to a high value (e.g. to keep the UTXO more fully +cached in memory) should consider increasing this setting in order to achieve +the same cache performance as prior releases. Users on low-memory systems +(such as systems with 1GB or less) should consider specifying a lower value for +this parameter. + +Additional information relating to running on low-memory systems can be found +here: +[reducing-bitcoind-memory-usage.md](https://gist.github.com/laanwj/efe29c7661ce9b6620a7). 0.14.1 Change log ================= From 3c796026e56abddf1b37128c0478532a371b5f9f Mon Sep 17 00:00:00 2001 From: John Newbery Date: Thu, 13 Apr 2017 15:38:59 -0400 Subject: [PATCH 081/136] [rpc] rename disconnectnode argument Github-Pull: #10204 Rebased-From: 883154cbcb306dcc6205fe349c7056ced1f6c5fc --- src/rpc/net.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index f590db5efaa..8706b429515 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -237,11 +237,11 @@ UniValue addnode(const JSONRPCRequest& request) UniValue disconnectnode(const JSONRPCRequest& request) { if (request.fHelp || request.params.size() != 1) - throw runtime_error( - "disconnectnode \"node\" \n" + throw std::runtime_error( + "disconnectnode \"address\" \n" "\nImmediately disconnects from the specified node.\n" "\nArguments:\n" - "1. \"node\" (string, required) The node (see getpeerinfo for nodes)\n" + "1. \"address\" (string, required) The IP address/port of the node\n" "\nExamples:\n" + HelpExampleCli("disconnectnode", "\"192.168.0.6:8333\"") + HelpExampleRpc("disconnectnode", "\"192.168.0.6:8333\"") @@ -609,7 +609,7 @@ static const CRPCCommand commands[] = { "network", "ping", &ping, true, {} }, { "network", "getpeerinfo", &getpeerinfo, true, {} }, { "network", "addnode", &addnode, true, {"node","command"} }, - { "network", "disconnectnode", &disconnectnode, true, {"node"} }, + { "network", "disconnectnode", &disconnectnode, true, {"address"} }, { "network", "getaddednodeinfo", &getaddednodeinfo, true, {"node"} }, { "network", "getnettotals", &getnettotals, true, {} }, { "network", "getnetworkinfo", &getnetworkinfo, true, {} }, From 30fa231011a63404a087420a9de7271af077affa Mon Sep 17 00:00:00 2001 From: Cory Fields Date: Mon, 10 Apr 2017 15:00:23 -0400 Subject: [PATCH 082/136] net: define NodeId as an int64_t This should make occurances of NodeId wrapping essentially impossible for real-world usage. Github-Pull: #10176 Rebased-From: c851be4b25905977ca471c42435dc590fd2ff2f5 --- src/net.h | 2 +- src/qt/peertablemodel.cpp | 2 +- src/qt/rpcconsole.cpp | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/net.h b/src/net.h index 29b6a44c88f..dc727152a34 100644 --- a/src/net.h +++ b/src/net.h @@ -92,7 +92,7 @@ static const ServiceFlags REQUIRED_SERVICES = NODE_NETWORK; // NOTE: When adjusting this, update rpcnet:setban's help ("24h") static const unsigned int DEFAULT_MISBEHAVING_BANTIME = 60 * 60 * 24; // Default 24-hour ban -typedef int NodeId; +typedef int64_t NodeId; struct AddedNodeInfo { diff --git a/src/qt/peertablemodel.cpp b/src/qt/peertablemodel.cpp index 974a71ddca6..fff072fd4c8 100644 --- a/src/qt/peertablemodel.cpp +++ b/src/qt/peertablemodel.cpp @@ -166,7 +166,7 @@ QVariant PeerTableModel::data(const QModelIndex &index, int role) const switch(index.column()) { case NetNodeId: - return rec->nodeStats.nodeid; + return (qint64)rec->nodeStats.nodeid; case Address: return QString::fromStdString(rec->nodeStats.addrName); case Subversion: diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp index 001f1992647..77e5e03e643 100644 --- a/src/qt/rpcconsole.cpp +++ b/src/qt/rpcconsole.cpp @@ -1115,7 +1115,7 @@ void RPCConsole::disconnectSelectedNode() for(int i = 0; i < nodes.count(); i++) { // Get currently selected peer address - NodeId id = nodes.at(i).data().toInt(); + NodeId id = nodes.at(i).data().toLongLong(); // Find the node, disconnect it and clear the selected node if(g_connman->DisconnectNode(id)) clearSelectedNode(); @@ -1132,7 +1132,7 @@ void RPCConsole::banSelectedNode(int bantime) for(int i = 0; i < nodes.count(); i++) { // Get currently selected peer address - NodeId id = nodes.at(i).data().toInt(); + NodeId id = nodes.at(i).data().toLongLong(); // Get currently selected peer address int detailNodeRow = clientModel->getPeerTableModel()->getRowByNodeId(id); From 348a71701db4cb29a762c7d60aba34380ee1d403 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Fri, 14 Apr 2017 10:25:11 +0000 Subject: [PATCH 083/136] qt: translations update pre-rc2 --- src/qt/locale/bitcoin_da.ts | 4 +- src/qt/locale/bitcoin_de.ts | 66 +++++- src/qt/locale/bitcoin_el_GR.ts | 12 ++ src/qt/locale/bitcoin_en.ts | 2 +- src/qt/locale/bitcoin_eo.ts | 122 ++++++++++- src/qt/locale/bitcoin_es.ts | 80 ++++++- src/qt/locale/bitcoin_es_ES.ts | 78 ++++++- src/qt/locale/bitcoin_et_EE.ts | 32 +++ src/qt/locale/bitcoin_fa.ts | 24 +++ src/qt/locale/bitcoin_fr.ts | 2 +- src/qt/locale/bitcoin_it_IT.ts | 20 ++ src/qt/locale/bitcoin_ms_MY.ts | 338 +++++++++++++++++++++++++++++- src/qt/locale/bitcoin_nb.ts | 138 +++++++++++- src/qt/locale/bitcoin_sk.ts | 462 ++++++++++++++++++++++++++++++++++++++++- src/qt/locale/bitcoin_sv.ts | 20 +- src/qt/locale/bitcoin_tr.ts | 6 +- 16 files changed, 1369 insertions(+), 37 deletions(-) diff --git a/src/qt/locale/bitcoin_da.ts b/src/qt/locale/bitcoin_da.ts index 54ef4a2bdf5..235b48f853d 100644 --- a/src/qt/locale/bitcoin_da.ts +++ b/src/qt/locale/bitcoin_da.ts @@ -3,7 +3,7 @@ AddressBookPage Right-click to edit address or label - Højreklik for at redigere adresse eller mærke + Højreklik for at redigere adresse eller mærkat Create a new address @@ -604,7 +604,7 @@ Received with label - Modtaget med mærke + Modtaget med mærkat Received with address diff --git a/src/qt/locale/bitcoin_de.ts b/src/qt/locale/bitcoin_de.ts index af79d477363..9bc94cc8ded 100644 --- a/src/qt/locale/bitcoin_de.ts +++ b/src/qt/locale/bitcoin_de.ts @@ -43,7 +43,7 @@ Choose the address to send coins to - Wählen Sie die Adresse aus, an die Sie Bitcoins überweisen möchten + Wählen Sie die Adresse aus, an die Sie Bitcoins senden möchten Choose the address to receive coins with @@ -886,6 +886,14 @@ Formular + Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below. + Neueste Transaktionen werden eventuell noch nicht angezeigt, daher könnte Ihr Kontostand veraltet sein. Er wird korrigiert, sobald Ihr Wallet die Synchronisation mit dem Bitcoin-Netzwerk erfolgreich abgeschlossen. Details dazu finden sich weiter unten. + + + Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network. + Versuche, Bitcoins aus noch nicht angezeigten Transaktionen auszugeben, werden vom Netzwerk nicht akzeptiert. + + Number of blocks left Anzahl verbleibender Blöcke @@ -2201,6 +2209,10 @@ Bestätige benutzerdefinierte Wechselgeld-Adresse + The address you selected for change is not part of this wallet. Any or all funds in your wallet may be sent to this address. Are you sure? + Die ausgewählte Wechselgeld-Adresse ist nicht Bestandteil dieses Wallets. Einige oder alle Mittel aus Ihrem Wallet könnten an diese Adresse gesendet werden. Wollen Sie das wirklich? + + (no label) (keine Bezeichnung) @@ -2998,6 +3010,10 @@ Eingehende Verbindungen annehmen (Standard: 1, wenn nicht -proxy oder -connect/-noconnect) + Connect only to the specified node(s); -noconnect or -connect=0 alone to disable automatic connections + Verbindungen nur zu spezifizierten Node(s); verwenden Sie -noconnect oder -connect=0 alleine um automatische Verbindungen zu deaktivieren + + Distributed under the MIT software license, see the accompanying file %s or %s Veröffentlicht unter der MIT-Softwarelizenz, siehe beiligende Datei %s oder %s. @@ -3074,6 +3090,14 @@ Befehl ausführen wenn sich eine Wallet-Transaktion verändert (%s im Befehl wird durch die Transaktions-ID ersetzt) + Extra transactions to keep in memory for compact block reconstructions (default: %u) + Zusätzliche Transaktionen für kompakten Block-Nachbau im Speicher vorhalten (default: %u) + + + If this block is in the chain assume that it and its ancestors are valid and potentially skip their script verification (0 to verify all, default: %s, testnet: %s) + Sofern dieser Block Bestandteil der Blockchain ist, nehme an das er und seine Vorgänger gültig sind und überspringe ggf. dessen Skriptverifikation (0 um alle zu verifizieren, default: %s, testnet: %s) + + Maximum allowed median peer time offset adjustment. Local perspective of time may be influenced by peers forward or backward by this amount. (default: %u seconds) Maximum allowed median peer time offset adjustment. Local perspective of time may be influenced by peers forward or backward by this amount. (default: %u seconds) @@ -3090,6 +3114,14 @@ Wenn sie %s nützlich finden, sind Helfer sehr gern gesehen. Besuchen Sie %s um mehr über das Softwareprojekt zu erfahren. + Reduce storage requirements by enabling pruning (deleting) of old blocks. This allows the pruneblockchain RPC to be called to delete specific blocks, and enables automatic pruning of old blocks if a target size in MiB is provided. This mode is incompatible with -txindex and -rescan. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, >%u = automatically prune block files to stay under the specified target size in MiB) + Speicherplatzanforderung durch Kürzen (Pruning) alter Blöcke reduzieren. Dies erlaubt das Aufrufen des sogenannten Pruneblockchain RPC zum Löschen spezifischer Blöcke und und aktiviert das automatische Pruning alter Blöcke, sofern eine Zielgröße in MIB angegeben wird. Dieser Modus ist nicht mit -txindex und -resacan kompatibel. Warnung: Das Rücksetzen dieser Einstellung erfordert das erneute Herunterladen der gesamten Blockchain. (Standard: 0 = deaktiviert das Pruning, 1 = erlaubt manuelles Pruning via RPC, >%u = automatisches Pruning der Blockdateien, um angegebene Maximalgröße nicht zu überschreiten) + + + Set lowest fee rate (in %s/kB) for transactions to be included in block creation. (default: %s) + Niedrigste Gebühr (in %s/kB) für Transaktionen einstellen, die bei der Blockerzeugung berücksichtigt werden sollen. (default: %s) + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) Maximale Anzahl an Skript-Verifizierungs-Threads festlegen (%u bis %d, 0 = automatisch, <0 = so viele Kerne frei lassen, Standard: %d) @@ -3114,6 +3146,10 @@ Benutzername und gehashtes Passwort für JSON-RPC Verbindungen. Das Feld <userpw> kommt im Format: <USERNAME>:<SALT>$<HASH>. Ein kanonisches Pythonskript ist in share/rpcuser inbegriffen. Der client benutzt wie gehabt, die rpcuser/rpcpassword Parameter. Diese Option kann mehrere Male spezifiziert werden + Wallet will not create transactions that violate mempool chain limits (default: %u) + Das Wallet erzeugt keine Transaktionen, die das Mempool Chain Limit überschreiten (Standardeinstellung: %u) + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. Warnung: Das Netzwerk scheint nicht vollständig übereinzustimmen! Einige Miner scheinen Probleme zu haben. @@ -3154,6 +3190,10 @@ Kann Adresse in -%s nicht auflösen: '%s' + Chain selection options: + Chain Auswahloptionen: + + Change index out of range Position des Wechselgelds außerhalb des Bereichs @@ -3646,6 +3686,10 @@ Adressen von Gegenstellen via DNS-Namensauflösung finden, falls zu wenige Adressen verfügbar sind (Standard: 1, außer bei -connect/-noconnect) + Sets the serialization of raw transaction or block hex returned in non-verbose mode, non-segwit(0) or segwit(1) (default: %d) + Setzt die Serialisierung von Rohtransaktionen oder Block Hex-Daten auf non-verbose mode, nicht-Segwit(0) oder Segwit(1) (default: %d) + + Support filtering of blocks and transaction with bloom filters (default: %u) Unterstütze Blöcke und Transaktionen mit Bloomfiltern zu filtern (default: %u) @@ -3706,6 +3750,10 @@ Ungültige Adresse in -proxy: '%s' + Keypool ran out, please call keypoolrefill first + Der Keypool ist erschöpft. Bitte rufen Sie zunächst keypoolrefill auf. + + Listen for JSON-RPC connections on <port> (default: %u or testnet: %u) <port> nach JSON-RPC-Verbindungen abhören (Standard: %u oder Testnetz: %u) @@ -3774,6 +3822,14 @@ Unbestätigtes Wechselgeld darf beim Senden von Transaktionen ausgegeben werden (Standard: %u) + Starting network threads... + Netzwerk-Threads werden gestartet... + + + The wallet will avoid paying less than the minimum relay fee. + Das Wallet verhindert Zahlungen, die die Mindesttransaktionsgebühr nicht berücksichtigen. + + This is the minimum transaction fee you pay on every transaction. Dies ist die minimale Gebühr die beim Senden einer Transaktion fällig wird. @@ -3790,6 +3846,14 @@ Transaktionsbeträge dürfen nicht negativ sein. + Transaction has too long of a mempool chain + Die Speicherpoolkette der Transaktion ist zu lang. + + + Transaction must have at least one recipient + Die Transaktion muss mindestens einen Empfänger enthalten. + + Unknown network specified in -onlynet: '%s' Unbekannter Netztyp in -onlynet angegeben: '%s' diff --git a/src/qt/locale/bitcoin_el_GR.ts b/src/qt/locale/bitcoin_el_GR.ts index 0390a378e77..21f308e80e4 100644 --- a/src/qt/locale/bitcoin_el_GR.ts +++ b/src/qt/locale/bitcoin_el_GR.ts @@ -41,6 +41,14 @@ &Delete &Διαγραφή + + Sending addresses + Διευθύνσεις αποστολής + + + Receiving addresses + Διευθύνσεις λήψης + AddressTableModel @@ -63,6 +71,10 @@ Repeat new passphrase Επανέλαβε τον νέο κωδικό πρόσβασης + + Unlock wallet + Ξεκλειδωσε το πορτοφολι + BanTableModel diff --git a/src/qt/locale/bitcoin_en.ts b/src/qt/locale/bitcoin_en.ts index e6a9c9228d3..a476b56596f 100644 --- a/src/qt/locale/bitcoin_en.ts +++ b/src/qt/locale/bitcoin_en.ts @@ -2030,7 +2030,7 @@ - + Select a peer to view detailed information. diff --git a/src/qt/locale/bitcoin_eo.ts b/src/qt/locale/bitcoin_eo.ts index b4ed5e7fd50..16c584c4b10 100644 --- a/src/qt/locale/bitcoin_eo.ts +++ b/src/qt/locale/bitcoin_eo.ts @@ -41,10 +41,78 @@ &Delete &Forigi - + + Choose the address to send coins to + Elekti la adreson por sendi monerojn + + + Choose the address to receive coins with + Elekti la adreson ricevi monerojn kun + + + C&hoose + &Elekti + + + Sending addresses + Sendaj adresoj + + + Receiving addresses + Ricevaj adresoj + + + These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Jen viaj Bitmon-adresoj por sendi pagojn. Zorge kontrolu la sumon kaj la alsendan adreson antaŭ ol sendi. + + + These are your Bitcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Jen viaj bitmonaj adresoj por ricevi pagojn. Estas konsilinde uzi apartan ricevan adreson por ĉiu transakcio. + + + &Copy Address + &Kopii Adreson + + + Copy &Label + Kopii &Etikedon + + + &Edit + &Redakti + + + Export Address List + Eksporti Adresliston + + + Comma separated file (*.csv) + Perkome disigita dosiero (*.csv) + + + Exporting Failed + ekspotado malsukcesinta + + + There was an error trying to save the address list to %1. Please try again. + Okazis eraron dum konservo de adreslisto al %1. Bonvolu provi denove. + + AddressTableModel - + + Label + Etikedo + + + Address + Adreso + + + (no label) + (neniu etikedo) + + AskPassphraseDialog @@ -386,6 +454,10 @@ Confirmed Konfirmita + + (no label) + (neniu etikedo) + EditAddressDialog @@ -934,9 +1006,25 @@ &Save Image... &Konservi Bildon... + + Address + Adreso + + + Label + Etikedo + RecentRequestsTableModel + + Label + Etikedo + + + (no label) + (neniu etikedo) + SendCoinsDialog @@ -1016,7 +1104,11 @@ S&end Ŝendi - + + (no label) + (neniu etikedo) + + SendCoinsEntry @@ -1179,9 +1271,33 @@ TransactionTableModel + + Label + Etikedo + + + (no label) + (neniu etikedo) + TransactionView + + Comma separated file (*.csv) + Perkome disigita dosiero (*.csv) + + + Label + Etikedo + + + Address + Adreso + + + Exporting Failed + ekspotado malsukcesinta + UnitDisplayStatusBarControl diff --git a/src/qt/locale/bitcoin_es.ts b/src/qt/locale/bitcoin_es.ts index 6e220ea9605..1cac03951c6 100644 --- a/src/qt/locale/bitcoin_es.ts +++ b/src/qt/locale/bitcoin_es.ts @@ -895,7 +895,7 @@ Number of blocks left - Número de bloques dejados + Número de bloques restantes Unknown... @@ -1726,7 +1726,7 @@ WARNING: Scammers have been active, telling users to type commands here, stealing their wallet contents. Do not use this console without fully understanding the ramification of a command. - ADVERTENCIA: Los estafadores han sido activados, diciéndoles a los usuarios que escriban comandos aquí, robando el contenido de sus monederos. No utilice esta consola sin entender completamente la repercusión de un comando. + ADVERTENCIA: Hay estafadores activos diciendo a los usuarios que escriban comandos aquí y robando el contenido de sus monederos. No utilice esta consola sin entender completamente la repercusión de un comando. Network activity disabled @@ -3125,6 +3125,14 @@ Contribuya si encuentra %s de utilidad. Visite %s para mas información acerca del programa. + Reduce storage requirements by enabling pruning (deleting) of old blocks. This allows the pruneblockchain RPC to be called to delete specific blocks, and enables automatic pruning of old blocks if a target size in MiB is provided. This mode is incompatible with -txindex and -rescan. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, >%u = automatically prune block files to stay under the specified target size in MiB) + Reducir los requerimientos de almacenamiento habilitando la poda (eliminación) de los bloques viejos. Esto permite que la cadena de bloqueo RPC sea llamada para eliminar bloques específicos, y habilita la poda automática de bloques viejos si se provee el tamaño de un objetivo en MiB. Este modo es incompatible con -txindex and -rescan. Precaución: Revertir este ajuste requiere volver a descargar la cadena de bloqueo completa. (predefinido: 0 = deshabilita bloques de poda, 1 = permite la poda manual mediante RPC, >%u = elimina automáticamente los archivos de bloqueo para permanecer bajo el tamaño del objetivo especificado en MiB) + + + Set lowest fee rate (in %s/kB) for transactions to be included in block creation. (default: %s) + Establecer la tasa más baja (en %s/kB) por transacciones para incluirse en la creación de bloque. (predeterminado: %s) + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) Establecer el número de hilos (threads) de verificación de scripts (entre %u y %d, 0 = automático, <0 = dejar libres ese número de núcleos; predeterminado: %d) @@ -3133,6 +3141,10 @@ La base de datos de bloques contiene un bloque que parece ser del futuro. Esto puede ser porque la fecha y hora de tu ordenador están mal ajustados. Reconstruye la base de datos de bloques solo si estas seguro de que la fecha y hora de tu ordenador estan ajustados correctamente. + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + Esta es una versión de prueba prelanzada - utilícelo a su propio riesgo - no lo utilice para aplicaciones de minería o comerciales + + Unable to rewind the database to a pre-fork state. You will need to redownload the blockchain No es posible reconstruir la base de datos a un estado anterior. Debe descargar de nuevo la cadena de bloques. @@ -3141,6 +3153,22 @@ Utiliza UPnP para asignar el puerto de escucha (predeterminado: 1 cuando esta escuchando sin -proxy) + Username and hashed password for JSON-RPC connections. The field <userpw> comes in the format: <USERNAME>:<SALT>$<HASH>. A canonical python script is included in share/rpcuser. The client then connects normally using the rpcuser=<USERNAME>/rpcpassword=<PASSWORD> pair of arguments. This option can be specified multiple times + Nombre de usuario y contraseña numerada para conexiones JSON-RPC. El campo <userpw> viene en el formato: <USERNAME>:<SALT>$<HASH>. Un script canónico de python está incluído en compartir/usuario rpc. Entonces el cliente se conecta normalmente utilizando la pareja de argumentos usuario rpc=<USERNAME>/contraseña rpc=<PASSWORD>. Esta opción puede ser especificada múltiples veces + + + Wallet will not create transactions that violate mempool chain limits (default: %u) + El monedero no creará transacciones que violen los límites de la cadena mempool (predeterminado: %u) + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Advertencia: ¡La red no parece coincidir del todo! Algunos mineros parecen estar experimentando problemas. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Advertencia: ¡No parecemos estar del todo con nuestros pares! Puede que necesite actualizarse, o puede que otros nodos necesiten actualizarse. + + You need to rebuild the database using -reindex-chainstate to change -txindex Necesita reconstruir la base de datos usando -reindex-chainstate para cambiar -txindex @@ -3173,6 +3201,10 @@ No se puede resolver -%s direccion: '%s' + Chain selection options: + Opciones de selección en cadena: + + Change index out of range Cambio de indice fuera de rango @@ -3369,6 +3401,10 @@ Usar UPnP para asignar el puerto de escucha (predeterminado:: %u) + Use the test chain + Utilice la cadena de prueba + + User Agent comment (%s) contains unsafe characters. El comentario del Agente de Usuario (%s) contiene caracteres inseguros. @@ -3663,6 +3699,10 @@ Mostrar depuración (por defecto: %u, proporcionar <category> es opcional) + Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect/-noconnect) + Preguntar por direcciones pares al buscar DNS, si baja en las direcciones (predeterminado: 1 a menos que -connect/-noconnect) + + Sets the serialization of raw transaction or block hex returned in non-verbose mode, non-segwit(0) or segwit(1) (default: %d) https://www.transifex.com/joyful-world/breaking-english/ Establecer la serialización de las transacciones sin procesar o el bloque hex devuelto en non-verbose mode, non-segwit(O) o segwit(1) (default: %d) @@ -3672,6 +3712,14 @@ Establecer la serialización de las transacciones sin procesar o el bloque hex d Admite filtrado de bloques, y transacciones con filtros Bloom. Reduce la carga de red. ( por defecto :%u) + This is the transaction fee you may pay when fee estimates are not available. + Esta es la tarifa de cuota que debe pagar cuando las estimaciones de tarifas no estén disponibles. + + + This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit %s and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard. + Este producto incluye software desarrollado por el Proyecto OpenSSL para utilizarlo en el juego de herramientas OpenSSL %s y software criptográfico escrito por Eric Young y software UPnP escrito por Thomas Bernard. + + Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments. La longitud total de la cadena de versión de red ( %i ) supera la longitud máxima ( %i ) . Reducir el número o tamaño de uacomments . @@ -3704,6 +3752,10 @@ Establecer la serialización de las transacciones sin procesar o el bloque hex d Los pares de listas blancas que se conectan desde la dirección IP dada (por ejemplo, 1.2.3.4) o la red marcada CIDR (por ejemplo, 1.2.3.0/24). Se puede especificar varias veces. + %s is set very high! + ¡%s se establece muy alto! + + (default: %s) (predeterminado: %s) @@ -3764,6 +3816,10 @@ Establecer la serialización de las transacciones sin procesar o el bloque hex d Relay non-P2SH multisig (default: %u) + Send transactions with full-RBF opt-in enabled (default: %u) + Enviar transacciones con full-RBF opt-in habilitado (predeterminado: %u) + + Set key pool size to <n> (default: %u) Ajustar el número de claves en reserva <n> (predeterminado: %u) @@ -3796,14 +3852,34 @@ Establecer la serialización de las transacciones sin procesar o el bloque hex d Iniciando funciones de red... + The wallet will avoid paying less than the minimum relay fee. + El monedero evitará pagar menos que la cuota de retransmisión mínima. + + This is the minimum transaction fee you pay on every transaction. Esta es la tarifa mínima de transacción que usted paga en cada transacción. + This is the transaction fee you will pay if you send a transaction. + Esta es la cuota de transacción que pagará si envía una transacción. + + Threshold for disconnecting misbehaving peers (default: %u) Umbral para la desconexión de pares con mal comportamiento (predeterminado: %u) + Transaction amounts must not be negative + Las cantidades de transacción no deben ser negativa + + + Transaction has too long of a mempool chain + La transacción tiene demasiado tiempo de una cadena de mempool + + + Transaction must have at least one recipient + La transacción debe de tener al menos un receptor + + Unknown network specified in -onlynet: '%s' La red especificada en -onlynet '%s' es desconocida diff --git a/src/qt/locale/bitcoin_es_ES.ts b/src/qt/locale/bitcoin_es_ES.ts index 7865483183d..c81723a7a44 100644 --- a/src/qt/locale/bitcoin_es_ES.ts +++ b/src/qt/locale/bitcoin_es_ES.ts @@ -318,6 +318,22 @@ Abrir &URI... + Click to disable network activity. + Haz click para desactivar la actividad de red. + + + Network activity disabled. + Actividad de red desactivada. + + + Click to enable network activity again. + Haz click para reactivar la actividad de red. + + + Syncing Headers (%1%)... + Sincronizando cabeceras (%1%)... + + Reindexing blocks on disk... Reindexando bloques en disco... @@ -519,7 +535,11 @@ Wallet is <b>encrypted</b> and currently <b>locked</b> El monedero está <b>cifrado</b> y actualmente <b>bloqueado</b> - + + A fatal error occurred. Bitcoin can no longer continue safely and will quit. + Ha ocurrido un error fatal. Bitcoin no puede continuar de manera segura y se cerrará. + + CoinControlDialog @@ -854,14 +874,42 @@ Formulario + Number of blocks left + Número de bloques restantes + + + Unknown... + Desconocido... + + Last block time Hora del último bloque + Progress + Progreso + + + Progress increase per hour + Incremento del progreso por hora + + + calculating... + calculando... + + + Estimated time left until synced + Tiempo estimado restante hasta sincronización completa + + Hide Ocultar - + + Unknown. Syncing Headers (%1)... + Desconocido. Sincronizando cabeceras (%1)... + + OpenURIDialog @@ -1296,6 +1344,10 @@ Node/Service Nodo/Servicio + + NodeId + NodeId + QObject @@ -1339,9 +1391,17 @@ %1 and %2 %1 y %2 - + + %1 didn't yet exit safely... + %1 aún no ha salido de manera segura... + + QObject::QObject + + Error: Specified data directory "%1" does not exist. + Error: directorio especificado "%1" no existe. + QRImageWidget @@ -1937,6 +1997,10 @@ Polvo: + Confirmation time target: + Tiempo objetivo de confirmación: + + Clear &All Vaciar &todo @@ -3483,6 +3547,10 @@ Aviso: fichero de monedero corrupto, datos recuperados! Original %s guardado como %s en %s; si su balance de transacciones es incorrecto, debe restaurar desde una copia de seguridad. + %s is set very high! + %s es demasiado alto! + + (default: %s) (predeterminado: %s) @@ -3539,6 +3607,10 @@ Relay non-P2SH multisig (default: %u) + Send transactions with full-RBF opt-in enabled (default: %u) + Enviar transaciones con RBF-completo opt-in activado (default: %u) + + Set key pool size to <n> (default: %u) Ajustar el número de claves en reserva <n> (predeterminado: %u) diff --git a/src/qt/locale/bitcoin_et_EE.ts b/src/qt/locale/bitcoin_et_EE.ts index d96ffa42f5b..9b0c9083815 100644 --- a/src/qt/locale/bitcoin_et_EE.ts +++ b/src/qt/locale/bitcoin_et_EE.ts @@ -88,6 +88,10 @@ Sisestatud paroolid ei kattu. + Wallet unlock failed + Rahakoti lahtilukustamine ebaõnnestus + + Wallet decryption failed Rahakoti dekrüpteerimine ebaõnnestus @@ -110,6 +114,14 @@ &Ülevaade + Quit application + Välju rakendusest + + + &Options... + &Valikud... + + Open &URI... Ava &URI... @@ -126,14 +138,30 @@ Rahakott + &Send + &Saada + + + &Show / Hide + &Näita / Peida + + &File &Fail + &Settings + &Seaded + + &Help &Abi + &Command-line options + &Käsurea valikud + + %1 behind %1 ajast maas @@ -204,6 +232,10 @@ EditAddressDialog + &Address + &Aadress + + New key generation failed. Uue võtme genereerimine ebaõnnestus. diff --git a/src/qt/locale/bitcoin_fa.ts b/src/qt/locale/bitcoin_fa.ts index c9cfad0f2a5..b83afb86180 100644 --- a/src/qt/locale/bitcoin_fa.ts +++ b/src/qt/locale/bitcoin_fa.ts @@ -116,6 +116,10 @@ رمزگشایی کیف پول + Change passphrase + تغییر گذرواژه + + Confirm wallet encryption تأیید رمزنگاری کیف پول @@ -507,6 +511,10 @@ تأیید شده + Copy address + کپی ادرس + + Copy label کپی برچسب @@ -531,6 +539,10 @@ کپی تعداد + Copy fee + رونوشت کارمزد + + (%1 locked) (%1 قفل شده) @@ -698,6 +710,10 @@ فرم + Unknown... + مشخص نیست + + Last block time زمان آخرین بلوک @@ -1329,6 +1345,10 @@ کپی مقدار + Copy fee + رونوشت کارمزد + + (no label) (بدون برچسب) @@ -1515,6 +1535,10 @@ TransactionView + Copy address + کپی ادرس + + Copy label کپی برچسب diff --git a/src/qt/locale/bitcoin_fr.ts b/src/qt/locale/bitcoin_fr.ts index 21800231596..883bb4f8da7 100644 --- a/src/qt/locale/bitcoin_fr.ts +++ b/src/qt/locale/bitcoin_fr.ts @@ -887,7 +887,7 @@ Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below. - Les transactions récentes ne sont peut-être pas encore visibles, et par conséquent, le solde de votre porte-monnaie est peut-être erroné. Cette information sera juste une fois que votre porte-monnaie aura fini de se synchroniser avec le réseau Bitcoin, tel que décrit ci-dessous. + Les transactions récentes ne sont peut-être pas encore visibles, et par conséquent, le solde de votre porte-monnaie est peut-être erroné. Cette information sera juste une fois que votre porte-monnaie aura fini de se synchroniser avec le réseau Bitcoin, comme décrit ci-dessous. Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network. diff --git a/src/qt/locale/bitcoin_it_IT.ts b/src/qt/locale/bitcoin_it_IT.ts index 09d40497fa7..ebb30f13e4b 100644 --- a/src/qt/locale/bitcoin_it_IT.ts +++ b/src/qt/locale/bitcoin_it_IT.ts @@ -41,9 +41,21 @@ &Delete Cancella + + Choose the address to send coins to + Scegli l'indirizzo a cui inviare denaro + + + C&hoose + Scegli + AddressTableModel + + Address + Indirizzo + AskPassphraseDialog @@ -132,6 +144,10 @@ ReceiveRequestDialog + + Address + Indirizzo + RecentRequestsTableModel @@ -168,6 +184,10 @@ TransactionView + + Address + Indirizzo + UnitDisplayStatusBarControl diff --git a/src/qt/locale/bitcoin_ms_MY.ts b/src/qt/locale/bitcoin_ms_MY.ts index 0108332dd75..7844093e3bb 100644 --- a/src/qt/locale/bitcoin_ms_MY.ts +++ b/src/qt/locale/bitcoin_ms_MY.ts @@ -2,6 +2,10 @@ AddressBookPage + Right-click to edit address or label + Klik-kanan untuk edit alamat ataupun label + + Create a new address Cipta alamat baru @@ -18,6 +22,10 @@ &Salin + C&lose + &Tutup + + Delete the currently selected address from the list Padam alamat semasa yang dipilih dari senaraiyang dipilih dari senarai @@ -34,25 +42,301 @@ Alihkan fail data ke dalam tab semasa &Delete &Padam - + + Choose the address to send coins to + Pilih alamat untuk hantar koin kepada + + + Choose the address to receive coins with + Pilih alamat untuk menerima koin dengan + + + C&hoose + &Pilih + + + Sending addresses + alamat-alamat penghantaran + + + Receiving addresses + alamat-alamat penerimaan + + + These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Ini adalah alamat Bitcoin anda untuk pembayaran. Periksa jumlah dan alamat penerima sebelum membuat penghantaran koin sentiasa. + + + These are your Bitcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Ini adalah alamat Bitcoin anda untuk menerima pembayaraan. Anda disyorkan untuk menguna alamat menerima untuk setiap transaksi. + + + &Copy Address + &Salin Aamat + + + Copy &Label + Salin & Label + + + &Edit + &Edit + + + Export Address List + Eskport Senarai Alamat + + + Comma separated file (*.csv) + Fail dibahagi oleh koma(*.csv) + + + Exporting Failed + Mengeksport Gagal + + + There was an error trying to save the address list to %1. Please try again. + Terdapat ralat semasa cubaan menyimpan senarai alamat kepada %1. Sila cuba lagi. + + AddressTableModel - + + Label + Label + + + Address + Alamat + + + (no label) + (tiada label) + + AskPassphraseDialog - + + Passphrase Dialog + Dialog frasa laluan + + + Enter passphrase + memasukkan frasa laluan + + + New passphrase + Frasa laluan baru + + + Repeat new passphrase + Ulangi frasa laluan baru + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>. + Memasukkan frasa laluan baru kepada dompet.<br/>Sila mengunakkan frasa laluan yang<b>mengandungi 10 atau lebih aksara rawak</b>,ataupun<b>lapan atau lebih perkataan.</b> + + + Encrypt wallet + Dompet encrypt + + + This operation needs your wallet passphrase to unlock the wallet. + Operasi ini perlukan frasa laluan dompet anda untuk membuka kunci dompet. + + + Unlock wallet + Membuka kunci dompet + + + This operation needs your wallet passphrase to decrypt the wallet. + Operasi ini memerlukan frasa laluan dompet anda untuk menyahsulit dompet. + + + Decrypt wallet + Menyahsulit dompet + + + Change passphrase + Menukar frasa laluan + + + Enter the old passphrase and new passphrase to the wallet. + Memasukkan frasa laluan lama dan frasa laluan baru untuk. + + + Confirm wallet encryption + Mengesahkan enkripsi dompet + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>! + Amaran: Jika anda enkripkan dompet anda dan hilangkan frasa laluan, anda akan <b>ANDA AKAN HILANGKAN SEMUA BITCOIN ANDA</b>! + + + Are you sure you wish to encrypt your wallet? + Anda pasti untuk membuat enkripsi dompet anda? + + + Wallet encrypted + Dompet dienkripsi + + + %1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. + %1 akan tutup untuk menyelesaikan proses enkripsi. Ingat bahawa enkripsi tidak boleh melidungi sepenuhnya bitcoins anda daripada dicuri oleh malware yang menjangkiti komputer anda. + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + PENTING: Apa-apa sandaran yang anda buat sebelum ini untuk fail dompet anda hendaklah digantikan dengan fail dompet enkripsi yang dijana baru. Untuk sebab-sebab keselamatan , sandaran fail dompet yang belum dibuat enkripsi sebelum ini akan menjadi tidak berguna secepat anda mula guna dompet enkripsi baru. + + + Wallet encryption failed + Enkripsi dompet gagal + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Enkripsi dompet gagal kerana ralat dalaman. Dompet anda tidak dienkripkan. + + + The supplied passphrases do not match. + Frasa laluan yang dibekalkan tidak sepadan. + + + Wallet unlock failed + Pembukaan kunci dompet gagal + + + The passphrase entered for the wallet decryption was incorrect. + Frasa laluan dimasukki untuk dekripsi dompet adalah tidak betul. + + + Wallet decryption failed + Dekripsi dompet gagal + + + Wallet passphrase was successfully changed. + Frasa laluan dompet berjaya ditukar. + + + Warning: The Caps Lock key is on! + Amaran: Kunci Caps Lock buka! + + BanTableModel - + + IP/Netmask + IP/Netmask + + + Banned Until + Diharamkan sehingga + + BitcoinGUI + Sign &message... + Tandatangan & mesej... + + + Synchronizing with network... + Penyegerakan dengan rangkaian... + + + &Overview + &Gambaran Keseluruhan + + + Node + Nod + + + Show general overview of wallet + Tunjuk gambaran keseluruhan umum dompet + + + &Transactions + &Transaksi + + + Browse transaction history + Menyemak imbas sejarah transaksi + + + E&xit + &Keluar + + + Quit application + Berhenti aplikasi + + + &About %1 + &Mengenai%1 + + + Show information about %1 + Menunjuk informasi mengenai%1 + + + About &Qt + Mengenai &Qt + + + Show information about Qt + Menunjuk informasi megenai Qt + + &Options... Pilihan + + Modify configuration options for %1 + Mengubah suai pilihan konfigurasi untuk %1 + + + &Encrypt Wallet... + &Enkripsi Dompet + + + &Backup Wallet... + &Dompet Sandaran... + + + &Change Passphrase... + &Menukar frasa-laluan + + + &Sending addresses... + &Menghantar frasa-laluan + + + &Receiving addresses... + &Menerima frasa-laluan... + + + Open &URI... + Buka &URI... + + + Reindexing blocks on disk... + Reindexi blok pada cakera... + + + Send coins to a Bitcoin address + Menghantar koin kepada alamat Bitcoin + + + Backup wallet to another location + Wallet sandaran ke lokasi lain + CoinControlDialog + + (no label) + (tiada label) + EditAddressDialog @@ -113,9 +397,25 @@ Alihkan fail data ke dalam tab semasa Copy &Address &Salin Alamat + + Address + Alamat + + + Label + Label + RecentRequestsTableModel + + Label + Label + + + (no label) + (tiada label) + SendCoinsDialog @@ -123,7 +423,11 @@ Alihkan fail data ke dalam tab semasa Balance: Baki - + + (no label) + (tiada label) + + SendCoinsEntry @@ -150,9 +454,33 @@ Alihkan fail data ke dalam tab semasa TransactionTableModel + + Label + Label + + + (no label) + (tiada label) + TransactionView + + Comma separated file (*.csv) + Fail dibahagi oleh koma(*.csv) + + + Label + Label + + + Address + Alamat + + + Exporting Failed + Mengeksport Gagal + UnitDisplayStatusBarControl diff --git a/src/qt/locale/bitcoin_nb.ts b/src/qt/locale/bitcoin_nb.ts index 183cbac80aa..d0f82b2d89c 100644 --- a/src/qt/locale/bitcoin_nb.ts +++ b/src/qt/locale/bitcoin_nb.ts @@ -41,10 +41,74 @@ &Delete &Slett - + + Choose the address to send coins to + Velg adressen å sende mynter til + + + Choose the address to receive coins with + Velg adressen til å motta mynter med + + + Sending addresses + Utsendingsadresser + + + Receiving addresses + Mottaksadresser + + + These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Dette er dine Bitcoin-adresser for sending av betalinger. Sjekk alltid beløpet og mottakeradressen før sending av mynter. + + + These are your Bitcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Dette er dine Bitcoin-adresser for å sende betalinger med. Det er anbefalt å bruke en ny mottaksadresse for hver transaksjon. + + + &Copy Address + &Kopier Adresse + + + Copy &Label + Kopier &Merkelapp + + + &Edit + &Rediger + + + Export Address List + Eksporter adresseliste + + + Comma separated file (*.csv) + Kommaseparert fil (*.csv) + + + Exporting Failed + Eksportering feilet + + + There was an error trying to save the address list to %1. Please try again. + Det oppstod en feil under lagring av adresselisten til %1. Vennligst prøv på nytt. + + AddressTableModel - + + Label + Merkelapp + + + Address + Adresse + + + (no label) + (ingen merkelapp) + + AskPassphraseDialog @@ -63,6 +127,26 @@ Repeat new passphrase Gjenta ny adgangsfrase + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>. + Oppgi adgangsfrasen til lommeboken.<br/>Vennligst bruk en adgangsfrase med <b>ti eller flere tilfeldige tegn</b>, eller <b>åtte eller flere ord</b>. + + + Encrypt wallet + Krypter lommebok + + + Unlock wallet + Lås opp lommebok + + + Decrypt wallet + Dekrypter lommebok + + + Change passphrase + Endre adgangsfrase + BanTableModel @@ -422,6 +506,10 @@ Confirmed Bekreftet + + (no label) + (ingen merkelapp) + EditAddressDialog @@ -1302,9 +1390,25 @@ &Save Image... &Lagre Bilde... + + Address + Adresse + + + Label + Merkelapp + RecentRequestsTableModel + + Label + Merkelapp + + + (no label) + (ingen merkelapp) + SendCoinsDialog @@ -1448,7 +1552,11 @@ S&end S&end - + + (no label) + (ingen merkelapp) + + SendCoinsEntry @@ -1651,9 +1759,33 @@ TransactionTableModel + + Label + Merkelapp + + + (no label) + (ingen merkelapp) + TransactionView + + Comma separated file (*.csv) + Kommaseparert fil (*.csv) + + + Label + Merkelapp + + + Address + Adresse + + + Exporting Failed + Eksportering feilet + UnitDisplayStatusBarControl diff --git a/src/qt/locale/bitcoin_sk.ts b/src/qt/locale/bitcoin_sk.ts index 1bc26d55d66..3cd287d3add 100644 --- a/src/qt/locale/bitcoin_sk.ts +++ b/src/qt/locale/bitcoin_sk.ts @@ -50,6 +50,10 @@ Zvoľte adresu na ktorú chcete prijať mince + C&hoose + Vybrať + + Sending addresses Odosielajúce adresy @@ -82,6 +86,14 @@ Exportovať zoznam adries + Comma separated file (*.csv) + Čiarkou oddelovaný súbor (*.csv) + + + Exporting Failed + Export zlyhal + + There was an error trying to save the address list to %1. Please try again. Nastala chyba pri pokuse uložiť zoznam adries do %1. Skúste znovu. @@ -120,14 +132,26 @@ Zopakujte nové heslo + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>. + Zadajte nové heslo k peňaženke.<br/>Prosím použite heslo s dĺžkou <b>desať alebo viac náhodných znakov</b>, prípadne <b>osem alebo viac slov</b>. + + Encrypt wallet Zašifrovať peňaženku + This operation needs your wallet passphrase to unlock the wallet. + Táto operácia potrebuje heslo k vašej peňaženke aby ju mohla odomknúť. + + Unlock wallet Odomknúť peňaženku + This operation needs your wallet passphrase to decrypt the wallet. + Táto operácia potrebuje heslo k vašej peňaženke na dešifrovanie peňaženky. + + Decrypt wallet Dešifrovať peňaženku @@ -136,6 +160,10 @@ Zmena hesla + Enter the old passphrase and new passphrase to the wallet. + Zadajte staré heslo a nové heslo k peňaženke. + + Confirm wallet encryption Potvrďte zašifrovanie peňaženky @@ -148,10 +176,42 @@ Peňaženka zašifrovaná + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + DÔLEŽITÉ: Všetky predchádzajúce zálohy vašej peňaženky, ktoré ste vykonali by mali byť nahradené novo vytvorenou, zašifrovanou peňaženkou. Z bezpečnostných dôvodov bude predchádzajúca záloha nezašifrovanej peňaženky k ničomu, akonáhle začnete používať novú, zašifrovanú peňaženku. + + + Wallet encryption failed + Šifrovanie peňaženky zlyhalo + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Šifrovanie peňaženky zlyhalo kôli internej chybe. Vaša peňaženka nebola zašifrovaná. + + + The supplied passphrases do not match. + Zadané heslá nesúhlasia. + + Wallet unlock failed Odomykanie peňaženky zlyhalo - + + The passphrase entered for the wallet decryption was incorrect. + Zadané heslo pre dešifrovanie peňaženky bolo nesprávne. + + + Wallet decryption failed + Zlyhalo šifrovanie peňaženky. + + + Wallet passphrase was successfully changed. + Heslo k peňaženke bolo úspešne zmenené. + + + Warning: The Caps Lock key is on! + Upozornenie: Máte zapnutý Caps Lock! + + BanTableModel @@ -535,10 +595,54 @@ Kopírovať sumu + Copy transaction ID + Kopírovať ID transakcie + + + Lock unspent + Uzamknúť neminuté + + + Unlock unspent + Odomknúť neminuté + + + Copy quantity + Kopírovať množstvo + + + Copy fee + Kopírovať poplatok + + + Copy after fee + Kopírovať po poplatkoch + + + Copy bytes + Kopírovať bajty + + Copy dust Kopírovať prach + Copy change + Kopírovať zmenu + + + (%1 locked) + (%1 zamknutých) + + + yes + áno + + + no + nie + + This label turns red if any recipient receives an amount smaller than the current dust threshold. Tento popis sčervenie ak ktorýkoľvek príjemca dostane sumu menšiu ako súčasný limit pre "prach". @@ -546,7 +650,15 @@ (no label) (bez popisu) - + + change from %1 (%2) + zmena od %1 (%2) + + + (change) + (zmena) + + EditAddressDialog @@ -593,7 +705,15 @@ The entered address "%1" is already in the address book. Vložená adresa "%1" sa už nachádza v adresári. - + + Could not unlock wallet. + Nepodarilo sa odomknúť peňaženku. + + + New key generation failed. + Generovanie nového kľúča zlyhalo. + + FreespaceChecker @@ -1074,6 +1194,10 @@ Chyba pri vyžiadaní platby + URI handling + URI manipulácia + + Payment request fetch URL is invalid: %1 URL pre stiahnutie výzvy na zaplatenie je neplatné: %1 @@ -1122,14 +1246,30 @@ Požadovaná suma platby %1 je príliš nízka (považovaná za prach). + Refund from %1 + Vrátenie z %1 + + Payment request %1 is too large (%2 bytes, allowed %3 bytes). Požiadavka na platbu %1 je príliš veľká (%2 bajtov, povolené je %3 bajtov). + Error communicating with %1: %2 + Chyba komunikácie s %1: %2 + + Payment request cannot be parsed! Požiadavka na platbu nemôže byť analyzovaná! + Bad response from server %1 + Zlá odpoveď zo servera %1 + + + Network request error + Chyba požiadavky siete + + Payment acknowledged Platba potvrdená @@ -1201,7 +1341,23 @@ QRImageWidget - + + &Save Image... + Uložiť obrázok... + + + &Copy Image + Kopírovať obrázok + + + Save QR Code + Uložiť QR Code + + + PNG Image (*.png) + PNG obrázok (*.png) + + RPCConsole @@ -1596,6 +1752,10 @@ Informácia o platbe + URI + URI + + Address Adresa @@ -1615,7 +1775,11 @@ Resulting URI too long, try to reduce the text for label / message. Výsledné URI je príliš dlhé, skúste skrátiť text pre popis alebo správu. - + + Error encoding URI into QR Code. + Chyba kódovania URI do QR Code. + + RecentRequestsTableModel @@ -1794,14 +1958,42 @@ &Odoslať + Copy quantity + Kopírovať množstvo + + Copy amount Kopírovať sumu + Copy fee + Kopírovať poplatok + + + Copy after fee + Kopírovať po poplatkoch + + + Copy bytes + Kopírovať bajty + + Copy dust Kopírovať prach + Copy change + Kopírovať zmenu + + + %1 to %2 + %1 do %2 + + + Are you sure you want to send? + Určite chcete odoslať transakciu? + + Total Amount %1 Celková suma %1 @@ -1826,10 +2018,18 @@ Suma je vyššia ako Váš zostatok. + The total exceeds your balance when the %1 transaction fee is included. + Celková suma prevyšuje Váš zostatok ak sú započítané aj transakčné poplatky %1. + + Duplicate address found: addresses should only be used once each. Našla sa duplicitná adresa: každá adresa by sa mala použiť len raz. + Transaction creation failed! + Vytvorenie transakcie zlyhalo! + + Payment request expired. Vypršala platnosť požiadavky na platbu. @@ -1842,6 +2042,10 @@ Varovanie: Neplatná Bitcoin adresa + Warning: Unknown change address + UPOZORNENIE: Neznáma zmena adresy + + Confirm custom change address Potvrďte zmenu adresy @@ -1939,7 +2143,11 @@ SendConfirmationDialog - + + Yes + áno + + ShutdownWindow @@ -2054,6 +2262,10 @@ Vložená adresa nezodpovedá žiadnemu kľúču. + Wallet unlock was cancelled. + Odomknutie peňaženky bolo zrušené. + + Private key for the entered address is not available. Súkromný kľúč pre zadanú adresu nieje k dispozícii. @@ -2103,10 +2315,18 @@ TransactionDesc + Open until %1 + Otvorené do %1 + + conflicted with a transaction with %1 confirmations koliduje s transakciou s %1 potvrdeniami + %1/offline + %1/offline + + 0/unconfirmed, %1 0/nepotvrdené, %1 @@ -2119,14 +2339,46 @@ %1 potvrdení + Status + Stav + + + , has not been successfully broadcast yet + , ešte nebola úspešne odoslaná + + Date Dátum + Source + Zdroj + + + Generated + Vygenerované + + + From + Od + + + unknown + neznámy + + + To + do + + own address vlastná adresa + watch-only + Iba sledovanie + + label popis @@ -2135,10 +2387,26 @@ Kredit + not accepted + neprijaté + + + Debit + Debet + + + Total debit + Celkový debet + + Total credit Celkový kredit + Transaction fee + Transakčný poplatok + + Net amount Suma netto @@ -2147,10 +2415,46 @@ Správa + Comment + Komentár + + + Transaction ID + ID transakcie + + + Merchant + Kupec + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Vytvorené coins musia dospieť %1 blokov kým môžu byť minuté. Keď vytvoríte tento blok, bude rozoslaný do siete aby bol akceptovaný do reťaze blokov. Ak sa nedostane reťaze, jeho stav sa zmení na "zamietnutý" a nebude sa dať minúť. Toto sa môže občas stať ak iná nóda vytvorí blok približne v tom istom čase. + + + Debug information + Ladiace informácie + + + Transaction + Transakcie + + + Inputs + Vstupy + + Amount Suma - + + true + pravda + + + false + nepravda + + TransactionDescDialog @@ -2173,6 +2477,14 @@ Popis + Open until %1 + Otvorené do %1 + + + Offline + Offline + + Unconfirmed Nepotvrdené @@ -2185,6 +2497,10 @@ Potvrdené (%1 potvrdení) + Conflicted + V rozpore + + Immature (%1 confirmations, will be available after %2) Nezrelé (%1 potvrdení, bude dostupné po %2) @@ -2193,6 +2509,10 @@ Ten blok nebol prijatý žiadnym iným uzlom a pravdepodobne nebude akceptovaný! + Generated but not accepted + Vypočítané ale neakceptované + + Received with Prijaté s @@ -2213,6 +2533,14 @@ Vyťažené + watch-only + Iba sledovanie + + + (n/a) + (n/a) + + (no label) (bez popisu) @@ -2308,14 +2636,38 @@ Kopírovať sumu + Copy transaction ID + Kopírovať ID transakcie + + + Copy raw transaction + Skopírovať neupravenú transakciu + + Edit label Upraviť popis + Show transaction details + Zobraziť podrobnosti transakcie + + + Export Transaction History + Exportovať históriu transakcií + + + Comma separated file (*.csv) + Čiarkou oddelovaný súbor (*.csv) + + Confirmed Potvrdené + Watch-only + Iba sledovanie + + Date Dátum @@ -2332,10 +2684,34 @@ Adresa + ID + ID + + + Exporting Failed + Export zlyhal + + + There was an error trying to save the transaction history to %1. + Vyskytla sa chyba pri pokuse o uloženie histórie transakcií do %1. + + + Exporting Successful + Export úspešný + + + The transaction history was successfully saved to %1. + História transakciá bola úspešne uložená do %1. + + Range: Rozsah: - + + to + do + + UnitDisplayStatusBarControl @@ -2345,13 +2721,53 @@ WalletFrame - + + No wallet has been loaded. + Nie je načítaná peňaženka. + + WalletModel - + + Send Coins + Poslať mince + + WalletView - + + &Export + &Exportovať... + + + Export the data in the current tab to a file + Exportovať dáta v aktuálnej karte do súboru + + + Backup Wallet + Zálohovanie peňaženky + + + Wallet Data (*.dat) + Dáta peňaženky (*.dat) + + + Backup Failed + Zálohovanie zlyhalo + + + There was an error trying to save the wallet data to %1. + Vyskytla sa chyba pri pokuse o uloženie dát peňaženky do %1. + + + Backup Successful + Záloha úspešná + + + The wallet data was successfully saved to %1. + Dáta peňaženky boli úspešne uložené do %1. + + bitcoin-core @@ -2451,6 +2867,22 @@ Databáza blokov obsahuje blok, ktorý vyzerá byť z budúcnosti. Toto môže byť spôsobené nesprávnym systémovým časom vášho počítača. Obnovujte databázu blokov len keď ste si istý, že systémový čas je nastavený správne. + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + Toto je predbežná testovacia zostava - používate na vlastné riziko - nepoužívajte na ťaženie alebo obchodné aplikácie + + + Use UPnP to map the listening port (default: 1 when listening and no -proxy) + Skúsiť použiť UPnP pre mapovanie počúvajúceho portu (predvolené: 1 počas počúvania a bez -proxy) + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Varovanie: Javí sa že sieť sieť úplne nesúhlasí! Niektorí mineri zjavne majú ťažkosti. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Varovanie: Zjavne sa úplne nezhodujeme s našimi peer-mi! Možno potrebujete prejsť na novšiu verziu alebo ostatné uzly potrebujú vyššiu verziu. + + %s corrupt, salvage failed %s je poškodený, záchrana zlyhala @@ -2699,6 +3131,10 @@ Vykonať príkaz po prijatí patričného varovania alebo uvidíme veľmi dlhé rozdvojenie siete (%s v cmd je nahradené správou) + Fees (in %s/kB) smaller than this are considered zero fee for relaying, mining and transaction creation (default: %s) + Poplatky (v %s/kB) menšie ako toto, sú považované za nulový transakčný poplatok (predvolené: %s) + + If paytxfee is not set, include enough fee so transactions begin confirmation on average within n blocks (default: %u) Ak nie je nastavené paytxfee, pridať dostatočný poplatok aby sa transakcia začala potvrdzovať priemerne v rámci bloku (predvolené: %u) @@ -2867,6 +3303,10 @@ (1 = zachovať metaúdaje tx napr. vlastníka účtu a informácie o platobných príkazoch, 2 = zahodiť metaúdaje tx) + Fees (in %s/kB) smaller than this are considered zero fee for transaction creation (default: %s) + Poplatky (v %s/kB) menšie ako toto, sú považované za nulový transakčný poplatok (predvolené: %s) + + How thorough the block verification of -checkblocks is (0-4, default: %u) Ako dôkladné je -checkblocks overenie blokov (0-4, predvolené: %u) diff --git a/src/qt/locale/bitcoin_sv.ts b/src/qt/locale/bitcoin_sv.ts index 2986115a620..edd808c9b58 100644 --- a/src/qt/locale/bitcoin_sv.ts +++ b/src/qt/locale/bitcoin_sv.ts @@ -540,7 +540,11 @@ Var vänlig och försök igen. Wallet is <b>encrypted</b> and currently <b>locked</b> Denna plånbok är <b>krypterad</b> och för närvarande <b>låst</b> - + + A fatal error occurred. Bitcoin can no longer continue safely and will quit. + Ett kritiskt fel uppstod. Bitcoin kan inte fortsätta att köra säkert och kommer att avslutas. + + CoinControlDialog @@ -679,7 +683,7 @@ Var vänlig och försök igen. Directory already exists. Add %1 if you intend to create a new directory here. - Katalogen finns redan. Läggtill %1 om du vill skapa en ny katalog här. + Katalogen finns redan. Lägg till %1 om du vill skapa en ny katalog här. Path already exists, and is not a directory. @@ -2100,6 +2104,18 @@ Var vänlig och försök igen. TransactionView + Enter address or label to search + Ange en adress eller etikett att söka efter + + + Min amount + Minsta belopp + + + Abandon transaction + Avbryt transaktionen + + Copy address Kopiera adress diff --git a/src/qt/locale/bitcoin_tr.ts b/src/qt/locale/bitcoin_tr.ts index 2de0d14ddd2..321effc7e13 100644 --- a/src/qt/locale/bitcoin_tr.ts +++ b/src/qt/locale/bitcoin_tr.ts @@ -295,15 +295,15 @@ &Encrypt Wallet... - Cüzdanı &Şifrele... + &Cüzdanı Şifrele... &Backup Wallet... - Cüzdanı &Yedekle... + &Cüzdanı Yedekle... &Change Passphrase... - Parolayı &Değiştir... + &Parolayı Değiştir... &Sending addresses... From 33fadc20bae4828788d6d82c582c457adc6941e1 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Fri, 14 Apr 2017 12:45:28 +0200 Subject: [PATCH 084/136] doc: Update release notes pre-rc2 --- doc/release-notes.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/doc/release-notes.md b/doc/release-notes.md index 4479c1a456a..4b5e3c56ed6 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -33,10 +33,14 @@ Notable changes RPC changes ----------- -The first positional argument of `createrawtransaction` was renamed. -This interface change breaks compatibility with 0.14.0, when the named -arguments functionality, introduced in 0.14.0, is used. +- The first positional argument of `createrawtransaction` was renamed from + `transactions` to `inputs`. +- The argument of `disconnectnode` was renamed from `node` to `address`. + +These interface changes break compatibility with 0.14.0, when the named +arguments functionality, introduced in 0.14.0, is used. Client software +using these calls with named arguments needs to be updated. Mining ------ @@ -82,6 +86,7 @@ git merge commit are mentioned. - #10139 `f15268d` Remove auth cookie on shutdown (practicalswift) - #10146 `2fea10a` Better error handling for submitblock (rawodb, gmaxwell) - #10144 `d947afc` Prioritisetransaction wasn't always updating ancestor fee (sdaftuar) +- #10204 `3c79602` Rename disconnectnode argument (jnewbery) ### Block and transaction handling - #10126 `0b5e162` Compensate for memory peak at flush time (sipa) @@ -90,6 +95,7 @@ git merge commit are mentioned. ### P2P protocol and network code - #9953/#10013 `d2548a4` Fix shutdown hang with >= 8 -addnodes set (TheBlueMatt) +- #10176 `30fa231` net: gracefully handle NodeId wrapping (theuni) ### Build system - #9973 `e9611d1` depends: fix zlib build on osx (theuni) @@ -101,6 +107,9 @@ git merge commit are mentioned. - #9955/#10006 `569596c` Don't require segwit in getblocktemplate for segwit signalling or mining (sdaftuar) - #9959/#10127 `b5c3440` Prevent slowdown in CreateNewBlock on large mempools (sdaftuar) +### Tests and QA +- #10157 `55f641c` Fix the `mempool_packages.py` test (sdaftuar) + ### Miscellaneous - #10037 `4d8e660` Trivial: Fix typo in help getrawtransaction RPC (keystrike) - #10120 `e4c9a90` util: Work around (virtual) memory exhaustion on 32-bit w/ glibc (laanwj) From 38ab0a7465942c138051fad8fc270cd2f8e3e4a5 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Wed, 19 Apr 2017 16:45:38 +0000 Subject: [PATCH 085/136] release-notes: Accurately explain getblocktemplate improvements --- doc/release-notes.md | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/doc/release-notes.md b/doc/release-notes.md index 4b5e3c56ed6..ef072afd4d7 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -45,14 +45,18 @@ using these calls with named arguments needs to be updated. Mining ------ -Getblocktemplate sets the segwit version bit even when the downstream -client has not been updated to include the segwit commitment. Ability -to enforce the rule is the only required criteria for safe activation, -but previously signaling was only requested if the miner could include -transactions in order to avoid a potential outcome where segwit would -activate at a time when no segwit transactions could be included. -Since many miners are now including the segwit commitment this concern -no longer applies. +In previous versions, getblocktemplate required segwit support from downstream +clients/miners once the feature activated on the network. In this version, it +now supports non-segwit clients even after activation, by removing all segwit +transactions from the returned block template. This allows non-segwit miners to +continue functioning correctly even after segwit has activated. + +Due to the limitations in previous versions, getblocktemplate also recommended +non-segwit clients to not signal for the segwit version-bit. Since this is no +longer an issue, getblocktemplate now always recommends signalling segwit for +all miners. This is safe because ability to enforce the rule is the only +required criteria for safe activation, not actually producing segwit-enabled +blocks. UTXO memory accounting ---------------------- From d28d58382076c77dc7f8ec59997c5ce2fde99f70 Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Mon, 3 Apr 2017 16:31:51 -0400 Subject: [PATCH 086/136] Bugfix: PrioritiseTransaction updates the mempool tx counter The mempool's nTransactionsUpdated is used by getblocktemplate to trigger new invocations of CreateNewBlock(). Github-Pull: #10196 Rebased-From: 909306cde3770ed7019e7b635e24cedbd9de66ce --- src/txmempool.cpp | 1 + src/txmempool.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/txmempool.cpp b/src/txmempool.cpp index 91040fb9b21..72547b58282 100644 --- a/src/txmempool.cpp +++ b/src/txmempool.cpp @@ -945,6 +945,7 @@ void CTxMemPool::PrioritiseTransaction(const uint256 hash, const std::string str BOOST_FOREACH(txiter descendantIt, setDescendants) { mapTx.modify(descendantIt, update_ancestor_state(0, nFeeDelta, 0, 0)); } + ++nTransactionsUpdated; } } LogPrintf("PrioritiseTransaction: %s priority += %f, fee += %d\n", strHash, dPriorityDelta, FormatMoney(nFeeDelta)); diff --git a/src/txmempool.h b/src/txmempool.h index db1a02455f8..12c9e59f5f0 100644 --- a/src/txmempool.h +++ b/src/txmempool.h @@ -432,7 +432,7 @@ class CTxMemPool { private: uint32_t nCheckFrequency; //!< Value n means that n times in 2^32 we check. - unsigned int nTransactionsUpdated; + unsigned int nTransactionsUpdated; //!< Used by getblocktemplate to trigger CreateNewBlock() invocation CBlockPolicyEstimator* minerPolicyEstimator; uint64_t totalTxSize; //!< sum of all mempool tx's virtual sizes. Differs from serialized tx size since witness data is discounted. Defined in BIP 141. From 51c787dfb4963d2a59dc8944f45e065be0a06613 Mon Sep 17 00:00:00 2001 From: Warren Togami Date: Thu, 13 Apr 2017 20:11:42 -0700 Subject: [PATCH 087/136] Clarify importprivkey help text with example of blank label without rescan Occasionally I waste a lot of time not remembering that the second parameter to importprivkey must be blank if you intend to stop rescan with "false" as the third parameter. Github-Pull: #10207 Rebased-From: c9e31c36ffacedb85d4d9ce75a92e011a3e7d4b4 --- src/wallet/rpcdump.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/wallet/rpcdump.cpp b/src/wallet/rpcdump.cpp index 20a3cbda1e7..cfb53af497c 100644 --- a/src/wallet/rpcdump.cpp +++ b/src/wallet/rpcdump.cpp @@ -96,6 +96,8 @@ UniValue importprivkey(const JSONRPCRequest& request) + HelpExampleCli("importprivkey", "\"mykey\"") + "\nImport using a label and without rescan\n" + HelpExampleCli("importprivkey", "\"mykey\" \"testing\" false") + + "\nImport using default blank label and without rescan\n" + + HelpExampleCli("importprivkey", "\"mykey\" \"\" false") + "\nAs a JSON-RPC call\n" + HelpExampleRpc("importprivkey", "\"mykey\", \"testing\", false") ); From 71463a7d18bb143da62e790f9194193dfaf8f320 Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Tue, 18 Apr 2017 12:52:08 -0400 Subject: [PATCH 088/136] [qa] Test prioritise_transaction / getblocktemplate interaction Github-Pull: #10196 Rebased-From: 6a61424c9eed072ae8d79d68aac71f525c1608b5 --- qa/rpc-tests/prioritise_transaction.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/qa/rpc-tests/prioritise_transaction.py b/qa/rpc-tests/prioritise_transaction.py index b7459c80cbd..16874a6b53b 100755 --- a/qa/rpc-tests/prioritise_transaction.py +++ b/qa/rpc-tests/prioritise_transaction.py @@ -16,7 +16,7 @@ class PrioritiseTransactionTest(BitcoinTestFramework): def __init__(self): super().__init__() self.setup_clean_chain = True - self.num_nodes = 1 + self.num_nodes = 2 self.txouts = gen_return_txouts() @@ -25,8 +25,11 @@ def setup_network(self): self.is_network_split = False self.nodes.append(start_node(0, self.options.tmpdir, ["-debug", "-printpriority=1"])) + self.nodes.append(start_node(1, self.options.tmpdir, ["-debug", "-printpriority=1"])) + connect_nodes(self.nodes[0], 1) self.relayfee = self.nodes[0].getnetworkinfo()['relayfee'] + def run_test(self): utxo_count = 90 utxos = create_confirmed_utxos(self.relayfee, self.nodes[0], utxo_count) @@ -139,5 +142,16 @@ def run_test(self): assert_equal(self.nodes[0].sendrawtransaction(tx2_hex), tx2_id) assert(tx2_id in self.nodes[0].getrawmempool()) + # Test that calling prioritisetransaction is sufficient to trigger + # getblocktemplate to (eventually) return a new block. + mock_time = int(time.time()) + self.nodes[0].setmocktime(mock_time) + template = self.nodes[0].getblocktemplate() + self.nodes[0].prioritisetransaction(txid, 0, -int(self.relayfee*COIN)) + self.nodes[0].setmocktime(mock_time+10) + new_template = self.nodes[0].getblocktemplate() + + assert(template != new_template) + if __name__ == '__main__': PrioritiseTransactionTest().main() From f2a96e7d0289682eb87877a3528cb6a170f8b786 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Sat, 22 Apr 2017 16:21:47 +0200 Subject: [PATCH 089/136] doc: clean out release notes --- doc/release-notes.md | 100 ++------------------- doc/release-notes/release-notes-0.14.1.md | 143 ++++++++++++++++++++++++++++++ 2 files changed, 148 insertions(+), 95 deletions(-) create mode 100644 doc/release-notes/release-notes-0.14.1.md diff --git a/doc/release-notes.md b/doc/release-notes.md index ef072afd4d7..49cbdb55d04 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -1,6 +1,6 @@ -Bitcoin Core version 0.14.1 is now available from: +Bitcoin Core version 0.14.x is now available from: - + This is a new minor version release, including various bugfixes and performance improvements, as well as updated translations. @@ -30,54 +30,11 @@ frequently tested on them. Notable changes =============== -RPC changes ------------ +Example item +------------ -- The first positional argument of `createrawtransaction` was renamed from - `transactions` to `inputs`. -- The argument of `disconnectnode` was renamed from `node` to `address`. - -These interface changes break compatibility with 0.14.0, when the named -arguments functionality, introduced in 0.14.0, is used. Client software -using these calls with named arguments needs to be updated. - -Mining ------- - -In previous versions, getblocktemplate required segwit support from downstream -clients/miners once the feature activated on the network. In this version, it -now supports non-segwit clients even after activation, by removing all segwit -transactions from the returned block template. This allows non-segwit miners to -continue functioning correctly even after segwit has activated. - -Due to the limitations in previous versions, getblocktemplate also recommended -non-segwit clients to not signal for the segwit version-bit. Since this is no -longer an issue, getblocktemplate now always recommends signalling segwit for -all miners. This is safe because ability to enforce the rule is the only -required criteria for safe activation, not actually producing segwit-enabled -blocks. - -UTXO memory accounting ----------------------- - -Memory usage for the UTXO cache is being calculated more accurately, so that -the configured limit (`-dbcache`) will be respected when memory usage peaks -during cache flushes. The memory accounting in prior releases is estimated to -only account for half the actual peak utilization. - -The default `-dbcache` has also been changed in this release to 450MiB. Users -who currently set `-dbcache` to a high value (e.g. to keep the UTXO more fully -cached in memory) should consider increasing this setting in order to achieve -the same cache performance as prior releases. Users on low-memory systems -(such as systems with 1GB or less) should consider specifying a lower value for -this parameter. - -Additional information relating to running on low-memory systems can be found -here: -[reducing-bitcoind-memory-usage.md](https://gist.github.com/laanwj/efe29c7661ce9b6620a7). - -0.14.1 Change log +0.14.x Change log ================= Detailed release notes follow. This overview includes changes that affect @@ -85,59 +42,12 @@ behavior, not code moves, refactors and string updates. For convenience in locat the code changes and accompanying discussion, both the pull request and git merge commit are mentioned. -### RPC and other APIs -- #10084 `142fbb2` Rename first named arg of createrawtransaction (MarcoFalke) -- #10139 `f15268d` Remove auth cookie on shutdown (practicalswift) -- #10146 `2fea10a` Better error handling for submitblock (rawodb, gmaxwell) -- #10144 `d947afc` Prioritisetransaction wasn't always updating ancestor fee (sdaftuar) -- #10204 `3c79602` Rename disconnectnode argument (jnewbery) - -### Block and transaction handling -- #10126 `0b5e162` Compensate for memory peak at flush time (sipa) -- #9912 `fc3d7db` Optimize GetWitnessHash() for non-segwit transactions (sdaftuar) -- #10133 `ab864d3` Clean up calculations of pcoinsTip memory usage (morcos) - -### P2P protocol and network code -- #9953/#10013 `d2548a4` Fix shutdown hang with >= 8 -addnodes set (TheBlueMatt) -- #10176 `30fa231` net: gracefully handle NodeId wrapping (theuni) - -### Build system -- #9973 `e9611d1` depends: fix zlib build on osx (theuni) - -### GUI -- #10060 `ddc2dd1` Ensure an item exists on the rpcconsole stack before adding (achow101) - -### Mining -- #9955/#10006 `569596c` Don't require segwit in getblocktemplate for segwit signalling or mining (sdaftuar) -- #9959/#10127 `b5c3440` Prevent slowdown in CreateNewBlock on large mempools (sdaftuar) - -### Tests and QA -- #10157 `55f641c` Fix the `mempool_packages.py` test (sdaftuar) - -### Miscellaneous -- #10037 `4d8e660` Trivial: Fix typo in help getrawtransaction RPC (keystrike) -- #10120 `e4c9a90` util: Work around (virtual) memory exhaustion on 32-bit w/ glibc (laanwj) -- #10130 `ecc5232` bitcoin-tx input verification (awemany, jnewbery) Credits ======= Thanks to everyone who directly contributed to this release: -- Alex Morcos -- Andrew Chow -- Awemany -- Cory Fields -- Gregory Maxwell -- James Evans -- John Newbery -- MarcoFalke -- Matt Corallo -- Pieter Wuille -- practicalswift -- rawodb -- Suhas Daftuar -- Wladimir J. van der Laan As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.14.1.md b/doc/release-notes/release-notes-0.14.1.md new file mode 100644 index 00000000000..ef072afd4d7 --- /dev/null +++ b/doc/release-notes/release-notes-0.14.1.md @@ -0,0 +1,143 @@ +Bitcoin Core version 0.14.1 is now available from: + + + +This is a new minor version release, including various bugfixes and +performance improvements, as well as updated translations. + +Please report bugs using the issue tracker at github: + + + +To receive security and update notifications, please subscribe to: + + + +Compatibility +============== + +Bitcoin Core is extensively tested on multiple operating systems using +the Linux kernel, macOS 10.8+, and Windows Vista and later. + +Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support), +No attempt is made to prevent installing or running the software on Windows XP, you +can still do so at your own risk but be aware that there are known instabilities and issues. +Please do not report issues about Windows XP to the issue tracker. + +Bitcoin Core should also work on most other Unix-like systems but is not +frequently tested on them. + +Notable changes +=============== + +RPC changes +----------- + +- The first positional argument of `createrawtransaction` was renamed from + `transactions` to `inputs`. + +- The argument of `disconnectnode` was renamed from `node` to `address`. + +These interface changes break compatibility with 0.14.0, when the named +arguments functionality, introduced in 0.14.0, is used. Client software +using these calls with named arguments needs to be updated. + +Mining +------ + +In previous versions, getblocktemplate required segwit support from downstream +clients/miners once the feature activated on the network. In this version, it +now supports non-segwit clients even after activation, by removing all segwit +transactions from the returned block template. This allows non-segwit miners to +continue functioning correctly even after segwit has activated. + +Due to the limitations in previous versions, getblocktemplate also recommended +non-segwit clients to not signal for the segwit version-bit. Since this is no +longer an issue, getblocktemplate now always recommends signalling segwit for +all miners. This is safe because ability to enforce the rule is the only +required criteria for safe activation, not actually producing segwit-enabled +blocks. + +UTXO memory accounting +---------------------- + +Memory usage for the UTXO cache is being calculated more accurately, so that +the configured limit (`-dbcache`) will be respected when memory usage peaks +during cache flushes. The memory accounting in prior releases is estimated to +only account for half the actual peak utilization. + +The default `-dbcache` has also been changed in this release to 450MiB. Users +who currently set `-dbcache` to a high value (e.g. to keep the UTXO more fully +cached in memory) should consider increasing this setting in order to achieve +the same cache performance as prior releases. Users on low-memory systems +(such as systems with 1GB or less) should consider specifying a lower value for +this parameter. + +Additional information relating to running on low-memory systems can be found +here: +[reducing-bitcoind-memory-usage.md](https://gist.github.com/laanwj/efe29c7661ce9b6620a7). + +0.14.1 Change log +================= + +Detailed release notes follow. This overview includes changes that affect +behavior, not code moves, refactors and string updates. For convenience in locating +the code changes and accompanying discussion, both the pull request and +git merge commit are mentioned. + +### RPC and other APIs +- #10084 `142fbb2` Rename first named arg of createrawtransaction (MarcoFalke) +- #10139 `f15268d` Remove auth cookie on shutdown (practicalswift) +- #10146 `2fea10a` Better error handling for submitblock (rawodb, gmaxwell) +- #10144 `d947afc` Prioritisetransaction wasn't always updating ancestor fee (sdaftuar) +- #10204 `3c79602` Rename disconnectnode argument (jnewbery) + +### Block and transaction handling +- #10126 `0b5e162` Compensate for memory peak at flush time (sipa) +- #9912 `fc3d7db` Optimize GetWitnessHash() for non-segwit transactions (sdaftuar) +- #10133 `ab864d3` Clean up calculations of pcoinsTip memory usage (morcos) + +### P2P protocol and network code +- #9953/#10013 `d2548a4` Fix shutdown hang with >= 8 -addnodes set (TheBlueMatt) +- #10176 `30fa231` net: gracefully handle NodeId wrapping (theuni) + +### Build system +- #9973 `e9611d1` depends: fix zlib build on osx (theuni) + +### GUI +- #10060 `ddc2dd1` Ensure an item exists on the rpcconsole stack before adding (achow101) + +### Mining +- #9955/#10006 `569596c` Don't require segwit in getblocktemplate for segwit signalling or mining (sdaftuar) +- #9959/#10127 `b5c3440` Prevent slowdown in CreateNewBlock on large mempools (sdaftuar) + +### Tests and QA +- #10157 `55f641c` Fix the `mempool_packages.py` test (sdaftuar) + +### Miscellaneous +- #10037 `4d8e660` Trivial: Fix typo in help getrawtransaction RPC (keystrike) +- #10120 `e4c9a90` util: Work around (virtual) memory exhaustion on 32-bit w/ glibc (laanwj) +- #10130 `ecc5232` bitcoin-tx input verification (awemany, jnewbery) + +Credits +======= + +Thanks to everyone who directly contributed to this release: + +- Alex Morcos +- Andrew Chow +- Awemany +- Cory Fields +- Gregory Maxwell +- James Evans +- John Newbery +- MarcoFalke +- Matt Corallo +- Pieter Wuille +- practicalswift +- rawodb +- Suhas Daftuar +- Wladimir J. van der Laan + +As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). + From ffb0c4b035a7c1fd1e714d94f92370b05ecb795b Mon Sep 17 00:00:00 2001 From: fanquake Date: Wed, 17 May 2017 17:41:52 +0800 Subject: [PATCH 090/136] [depends] miniupnpc 2.0.20170509 Github-Pull: #10414 Rebased-From: af5d48c9a03182fdf121623bd98136b66d0fcb27 --- depends/packages/miniupnpc.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/depends/packages/miniupnpc.mk b/depends/packages/miniupnpc.mk index e34cf7be2f1..1bb8cb5d266 100644 --- a/depends/packages/miniupnpc.mk +++ b/depends/packages/miniupnpc.mk @@ -1,8 +1,8 @@ package=miniupnpc -$(package)_version=2.0 +$(package)_version=2.0.20170509 $(package)_download_path=http://miniupnp.free.fr/files $(package)_file_name=$(package)-$($(package)_version).tar.gz -$(package)_sha256_hash=d434ceb8986efbe199c5ca53f90ed53eab290b1e6d0530b717eb6fa49d61f93b +$(package)_sha256_hash=d3c368627f5cdfb66d3ebd64ca39ba54d6ff14a61966dbecb8dd296b7039f16a define $(package)_set_vars $(package)_build_opts=CC="$($(package)_cc)" From 37a8fc54d480788a06ff17415128d815ac55eaed Mon Sep 17 00:00:00 2001 From: Alex Morcos Date: Thu, 18 May 2017 16:57:53 -0400 Subject: [PATCH 091/136] Populate services in GetLocalAddress Previously if we didn't have any local addresses, GetLocalAddress would return 0.0.0.0 and then we'd swap in a peer's notion of our address in AdvertiseLocal, but then nServices would never get set. Github-Pull: #10424 Rebased-From: 307013469f9a3b8f13d3eb9dbeea419a55148493 --- src/net.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/net.cpp b/src/net.cpp index 03c8e5ecc49..5593f81eff0 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -143,7 +143,7 @@ static std::vector convertSeed6(const std::vector &vSeedsIn // one by discovery. CAddress GetLocalAddress(const CNetAddr *paddrPeer, ServiceFlags nLocalServices) { - CAddress ret(CService(CNetAddr(),GetListenPort()), NODE_NONE); + CAddress ret(CService(CNetAddr(),GetListenPort()), nLocalServices); CService addr; if (GetLocal(addr, paddrPeer)) { From 321419bc06fdc19e3713b2bcfc10c3c9bbbb8b62 Mon Sep 17 00:00:00 2001 From: Russell Yanofsky Date: Tue, 16 May 2017 11:34:28 -0400 Subject: [PATCH 092/136] Fix importwallet edge case rescan bug Start importwallet rescans at the first block with timestamp greater or equal to the wallet birthday instead of the last block with timestamp less or equal. This fixes an edge case bug where importwallet could fail to start the rescan early enough if there are blocks with decreasing timestamps or multiple blocks with the same timestamp. Github-Pull: #10410 Rebased-From: 2a8e35a11d4bd4828631654fc7b8b8fe8f0a2460 --- src/wallet/rpcdump.cpp | 9 ++---- src/wallet/test/wallet_tests.cpp | 62 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 6 deletions(-) diff --git a/src/wallet/rpcdump.cpp b/src/wallet/rpcdump.cpp index cfb53af497c..cd6ec207f90 100644 --- a/src/wallet/rpcdump.cpp +++ b/src/wallet/rpcdump.cpp @@ -497,14 +497,11 @@ UniValue importwallet(const JSONRPCRequest& request) } file.close(); pwalletMain->ShowProgress("", 100); // hide progress dialog in GUI - - CBlockIndex *pindex = chainActive.Tip(); - while (pindex && pindex->pprev && pindex->GetBlockTime() > nTimeBegin - 7200) - pindex = pindex->pprev; - pwalletMain->UpdateTimeFirstKey(nTimeBegin); - LogPrintf("Rescanning last %i blocks\n", chainActive.Height() - pindex->nHeight + 1); + CBlockIndex *pindex = chainActive.FindEarliestAtLeast(nTimeBegin - 7200); + + LogPrintf("Rescanning last %i blocks\n", pindex ? chainActive.Height() - pindex->nHeight + 1 : 0); pwalletMain->ScanForWalletTransactions(pindex); pwalletMain->MarkDirty(); diff --git a/src/wallet/test/wallet_tests.cpp b/src/wallet/test/wallet_tests.cpp index 7ac2112dd29..083ff0afc3d 100644 --- a/src/wallet/test/wallet_tests.cpp +++ b/src/wallet/test/wallet_tests.cpp @@ -19,6 +19,8 @@ #include extern UniValue importmulti(const JSONRPCRequest& request); +extern UniValue dumpwallet(const JSONRPCRequest& request); +extern UniValue importwallet(const JSONRPCRequest& request); // how many times to run all the tests to have a chance to catch errors that only show up with particular random shuffles #define RUN_TESTS 100 @@ -428,4 +430,64 @@ BOOST_FIXTURE_TEST_CASE(rescan, TestChain100Setup) } } +// Verify importwallet RPC starts rescan at earliest block with timestamp +// greater or equal than key birthday. Previously there was a bug where +// importwallet RPC would start the scan at the latest block with timestamp less +// than or equal to key birthday. +BOOST_FIXTURE_TEST_CASE(importwallet_rescan, TestChain100Setup) +{ + CWallet *pwalletMainBackup = ::pwalletMain; + LOCK(cs_main); + + // Create two blocks with same timestamp to verify that importwallet rescan + // will pick up both blocks, not just the first. + const int64_t BLOCK_TIME = chainActive.Tip()->GetBlockTimeMax() + 5; + SetMockTime(BLOCK_TIME); + coinbaseTxns.emplace_back(*CreateAndProcessBlock({}, GetScriptForRawPubKey(coinbaseKey.GetPubKey())).vtx[0]); + coinbaseTxns.emplace_back(*CreateAndProcessBlock({}, GetScriptForRawPubKey(coinbaseKey.GetPubKey())).vtx[0]); + + // Set key birthday to block time increased by the timestamp window, so + // rescan will start at the block time. + const int64_t KEY_TIME = BLOCK_TIME + 7200; + SetMockTime(KEY_TIME); + coinbaseTxns.emplace_back(*CreateAndProcessBlock({}, GetScriptForRawPubKey(coinbaseKey.GetPubKey())).vtx[0]); + + // Import key into wallet and call dumpwallet to create backup file. + { + CWallet wallet; + LOCK(wallet.cs_wallet); + wallet.mapKeyMetadata[coinbaseKey.GetPubKey().GetID()].nCreateTime = KEY_TIME; + wallet.AddKeyPubKey(coinbaseKey, coinbaseKey.GetPubKey()); + + JSONRPCRequest request; + request.params.setArray(); + request.params.push_back("wallet.backup"); + ::pwalletMain = &wallet; + ::dumpwallet(request); + } + + // Call importwallet RPC and verify all blocks with timestamps >= BLOCK_TIME + // were scanned, and no prior blocks were scanned. + { + CWallet wallet; + + JSONRPCRequest request; + request.params.setArray(); + request.params.push_back("wallet.backup"); + ::pwalletMain = &wallet; + ::importwallet(request); + + BOOST_CHECK_EQUAL(wallet.mapWallet.size(), 3); + BOOST_CHECK_EQUAL(coinbaseTxns.size(), 103); + for (size_t i = 0; i < coinbaseTxns.size(); ++i) { + bool found = wallet.GetWalletTx(coinbaseTxns[i].GetHash()); + bool expected = i >= 100; + BOOST_CHECK_EQUAL(found, expected); + } + } + + SetMockTime(0); + ::pwalletMain = pwalletMainBackup; +} + BOOST_AUTO_TEST_SUITE_END() From 44a17f278a13ee3257b00b30381f591eb09e0165 Mon Sep 17 00:00:00 2001 From: Shigeya Suzuki Date: Fri, 21 Apr 2017 07:36:32 +0900 Subject: [PATCH 093/136] Minor fix in build documentation for FreeBSD 11 - Package name is libevent, not libevent2 - Need to use GNU make Github-Pull: #10245 Rebased-From: 0611bc3439c65e100db98914d18606f623048ba8 --- doc/build-unix.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/build-unix.md b/doc/build-unix.md index 31a88a1b18c..b7eae2a630a 100644 --- a/doc/build-unix.md +++ b/doc/build-unix.md @@ -321,8 +321,10 @@ Clang is installed by default as `cc` compiler, this makes it easier to get started than on [OpenBSD](build-openbsd.md). Installing dependencies: pkg install autoconf automake libtool pkgconf - pkg install boost-libs openssl libevent2 + pkg install boost-libs openssl libevent + pkg install gmake +You need to use GNU make (`gmake`) instead of `make`. (`libressl` instead of `openssl` will also work) For the wallet (optional): @@ -338,7 +340,7 @@ Then build using: ./autogen.sh ./configure --with-incompatible-bdb BDB_CFLAGS="-I/usr/local/include/db5" BDB_LIBS="-L/usr/local/lib -ldb_cxx-5" - make + gmake *Note on debugging*: The version of `gdb` installed by default is [ancient and considered harmful](https://wiki.freebsd.org/GdbRetirement). It is not suitable for debugging a multi-threaded C++ program, not even for getting backtraces. Please install the package `gdb` and From 0aee4a132b6d3be276503c517cb2b7f07d774bf6 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Fri, 14 Apr 2017 16:29:57 -0400 Subject: [PATCH 094/136] Check interruptNet during dnsseed lookups --- src/net.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/net.cpp b/src/net.cpp index 5593f81eff0..2fca994748f 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -1579,6 +1579,9 @@ void CConnman::ThreadDNSAddressSeed() LogPrintf("Loading addresses from DNS seeds (could take a while)\n"); BOOST_FOREACH(const CDNSSeedData &seed, vSeeds) { + if (interruptNet) { + return; + } if (HaveNameProxy()) { AddOneShot(seed.host); } else { @@ -1596,6 +1599,9 @@ void CConnman::ThreadDNSAddressSeed() found++; } } + if (interruptNet) { + return; + } // TODO: The seed name resolve may fail, yielding an IP of [::], which results in // addrman assigning the same source to results from different seeds. // This should switch to a hard-coded stable dummy IP for each seed name, so that the From 1e936d7e8760de230377f4e4af5eb68368f1f550 Mon Sep 17 00:00:00 2001 From: Jonas Schnelli Date: Wed, 19 Apr 2017 18:45:11 +0200 Subject: [PATCH 095/136] Reduce cs_main locks during modal overlay by adding an atomic cache --- src/qt/clientmodel.cpp | 35 +++++++++++++++++++++++++---------- src/qt/clientmodel.h | 8 ++++++-- 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp index bb10e494220..9a8af01a32d 100644 --- a/src/qt/clientmodel.cpp +++ b/src/qt/clientmodel.cpp @@ -36,6 +36,8 @@ ClientModel::ClientModel(OptionsModel *_optionsModel, QObject *parent) : banTableModel(0), pollTimer(0) { + cachedBestHeaderHeight = -1; + cachedBestHeaderTime = -1; peerTableModel = new PeerTableModel(this); banTableModel = new BanTableModel(this); pollTimer = new QTimer(this); @@ -72,20 +74,28 @@ int ClientModel::getNumBlocks() const return chainActive.Height(); } -int ClientModel::getHeaderTipHeight() const +int ClientModel::getHeaderTipHeight() { - LOCK(cs_main); - if (!pindexBestHeader) - return 0; - return pindexBestHeader->nHeight; + if (cachedBestHeaderHeight == -1) { + // make sure we initially populate the cache via a cs_main lock + // otherwise we need to wait for a tip update + LOCK(cs_main); + if (pindexBestHeader) { + cachedBestHeaderHeight = pindexBestHeader->nHeight; + } + } + return cachedBestHeaderHeight; } -int64_t ClientModel::getHeaderTipTime() const +int64_t ClientModel::getHeaderTipTime() { - LOCK(cs_main); - if (!pindexBestHeader) - return 0; - return pindexBestHeader->GetBlockTime(); + if (cachedBestHeaderTime == -1) { + LOCK(cs_main); + if (pindexBestHeader) { + cachedBestHeaderTime = pindexBestHeader->GetBlockTime(); + } + } + return cachedBestHeaderTime; } quint64 ClientModel::getTotalBytesRecv() const @@ -283,6 +293,11 @@ static void BlockTipChanged(ClientModel *clientmodel, bool initialSync, const CB int64_t& nLastUpdateNotification = fHeader ? nLastHeaderTipUpdateNotification : nLastBlockTipUpdateNotification; + if (fHeader) { + // cache best headers time and height to reduce future cs_main locks + clientmodel->cachedBestHeaderHeight = pIndex->nHeight; + clientmodel->cachedBestHeaderTime = pIndex->GetBlockTime(); + } // if we are in-sync, update the UI regardless of last update time if (!initialSync || now - nLastUpdateNotification > MODEL_UPDATE_DELAY) { //pass a async signal to the UI thread diff --git a/src/qt/clientmodel.h b/src/qt/clientmodel.h index 2c10e633b84..6f7077dad61 100644 --- a/src/qt/clientmodel.h +++ b/src/qt/clientmodel.h @@ -51,8 +51,8 @@ class ClientModel : public QObject //! Return number of connections, default is in- and outbound (total) int getNumConnections(unsigned int flags = CONNECTIONS_ALL) const; int getNumBlocks() const; - int getHeaderTipHeight() const; - int64_t getHeaderTipTime() const; + int getHeaderTipHeight(); + int64_t getHeaderTipTime(); //! Return number of transactions in the mempool long getMempoolSize() const; //! Return the dynamic memory usage of the mempool @@ -81,6 +81,10 @@ class ClientModel : public QObject QString formatClientStartupTime() const; QString dataDir() const; + // caches for the best header + std::atomic cachedBestHeaderHeight; + std::atomic cachedBestHeaderTime; + private: OptionsModel *optionsModel; PeerTableModel *peerTableModel; From 9ac40e853c868b4f7294b708104dc65d2b45c2a2 Mon Sep 17 00:00:00 2001 From: Jonas Schnelli Date: Wed, 19 Apr 2017 20:54:30 +0200 Subject: [PATCH 096/136] Update the remaining blocks left in modaloverlay at init. --- src/qt/bitcoingui.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index be79a67990e..5c26baef9e8 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -478,6 +478,7 @@ void BitcoinGUI::setClientModel(ClientModel *_clientModel) connect(_clientModel, SIGNAL(numConnectionsChanged(int)), this, SLOT(setNumConnections(int))); connect(_clientModel, SIGNAL(networkActiveChanged(bool)), this, SLOT(setNetworkActive(bool))); + modalOverlay->setKnownBestHeight(_clientModel->getHeaderTipHeight(), QDateTime::fromTime_t(_clientModel->getHeaderTipTime())); setNumBlocks(_clientModel->getNumBlocks(), _clientModel->getLastBlockDate(), _clientModel->getVerificationProgress(NULL), false); connect(_clientModel, SIGNAL(numBlocksChanged(int,QDateTime,double,bool)), this, SLOT(setNumBlocks(int,QDateTime,double,bool))); @@ -505,8 +506,6 @@ void BitcoinGUI::setClientModel(ClientModel *_clientModel) // initialize the disable state of the tray icon with the current value in the model. setTrayIconVisible(optionsModel->getHideTrayIcon()); } - - modalOverlay->setKnownBestHeight(clientModel->getHeaderTipHeight(), QDateTime::fromTime_t(clientModel->getHeaderTipTime())); } else { // Disable possibility to show main window via action toggleHideAction->setEnabled(false); From 7da133772dd18b44316f7f12567e321eceec8838 Mon Sep 17 00:00:00 2001 From: Jonas Schnelli Date: Thu, 20 Apr 2017 09:51:05 +0200 Subject: [PATCH 097/136] Declare headers height/time cache mutable, re-set the methods const --- src/qt/clientmodel.cpp | 4 ++-- src/qt/clientmodel.h | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp index 9a8af01a32d..cbc6ca1296f 100644 --- a/src/qt/clientmodel.cpp +++ b/src/qt/clientmodel.cpp @@ -74,7 +74,7 @@ int ClientModel::getNumBlocks() const return chainActive.Height(); } -int ClientModel::getHeaderTipHeight() +int ClientModel::getHeaderTipHeight() const { if (cachedBestHeaderHeight == -1) { // make sure we initially populate the cache via a cs_main lock @@ -87,7 +87,7 @@ int ClientModel::getHeaderTipHeight() return cachedBestHeaderHeight; } -int64_t ClientModel::getHeaderTipTime() +int64_t ClientModel::getHeaderTipTime() const { if (cachedBestHeaderTime == -1) { LOCK(cs_main); diff --git a/src/qt/clientmodel.h b/src/qt/clientmodel.h index 6f7077dad61..0e6b34fbfd2 100644 --- a/src/qt/clientmodel.h +++ b/src/qt/clientmodel.h @@ -51,8 +51,8 @@ class ClientModel : public QObject //! Return number of connections, default is in- and outbound (total) int getNumConnections(unsigned int flags = CONNECTIONS_ALL) const; int getNumBlocks() const; - int getHeaderTipHeight(); - int64_t getHeaderTipTime(); + int getHeaderTipHeight() const; + int64_t getHeaderTipTime() const; //! Return number of transactions in the mempool long getMempoolSize() const; //! Return the dynamic memory usage of the mempool @@ -82,8 +82,8 @@ class ClientModel : public QObject QString dataDir() const; // caches for the best header - std::atomic cachedBestHeaderHeight; - std::atomic cachedBestHeaderTime; + mutable std::atomic cachedBestHeaderHeight; + mutable std::atomic cachedBestHeaderTime; private: OptionsModel *optionsModel; From 222f3775cfee505a8f5cdb7f0e12af38998bd3fc Mon Sep 17 00:00:00 2001 From: Jonas Schnelli Date: Thu, 20 Apr 2017 09:51:41 +0200 Subject: [PATCH 098/136] Set both time/height header caches at the same time --- src/qt/clientmodel.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp index cbc6ca1296f..20d4687971e 100644 --- a/src/qt/clientmodel.cpp +++ b/src/qt/clientmodel.cpp @@ -82,6 +82,7 @@ int ClientModel::getHeaderTipHeight() const LOCK(cs_main); if (pindexBestHeader) { cachedBestHeaderHeight = pindexBestHeader->nHeight; + cachedBestHeaderTime = pindexBestHeader->GetBlockTime(); } } return cachedBestHeaderHeight; @@ -92,6 +93,7 @@ int64_t ClientModel::getHeaderTipTime() const if (cachedBestHeaderTime == -1) { LOCK(cs_main); if (pindexBestHeader) { + cachedBestHeaderHeight = pindexBestHeader->nHeight; cachedBestHeaderTime = pindexBestHeader->GetBlockTime(); } } From 4bc99c3b2854f94bb42ca6ecc7a31980498857ac Mon Sep 17 00:00:00 2001 From: Jonas Schnelli Date: Thu, 20 Apr 2017 13:29:12 +0200 Subject: [PATCH 099/136] Add missing header in clientmodel.h --- src/qt/clientmodel.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/qt/clientmodel.h b/src/qt/clientmodel.h index 0e6b34fbfd2..4c92e2144e3 100644 --- a/src/qt/clientmodel.h +++ b/src/qt/clientmodel.h @@ -8,6 +8,8 @@ #include #include +#include + class AddressTableModel; class BanTableModel; class OptionsModel; From 3d395d6815e36850db0af4153756352bcc9c356a Mon Sep 17 00:00:00 2001 From: Cory Fields Date: Tue, 18 Apr 2017 19:12:17 -0400 Subject: [PATCH 100/136] build: remove wonky auto top-level convenience targets These were meant to help build subdir targets from the top builddir, but cause infinite recursion when going the other way. If anyone actually uses these, we can add back specific targets. --- Makefile.am | 3 --- 1 file changed, 3 deletions(-) diff --git a/Makefile.am b/Makefile.am index 6a8c1b761bc..4484bafc57f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -76,9 +76,6 @@ $(BITCOIN_WIN_INSTALLER): all-recursive echo error: could not build $@ @echo built $@ -$(if $(findstring src/,$(MAKECMDGOALS)),$(MAKECMDGOALS), none): FORCE - $(MAKE) -C src $(patsubst src/%,%,$@) - $(OSX_APP)/Contents/PkgInfo: $(MKDIR_P) $(@D) @echo "APPL????" > $@ From ae479bc45bfdfb33e7f1293391db5b9f81b3ce17 Mon Sep 17 00:00:00 2001 From: Cory Fields Date: Tue, 18 Apr 2017 19:14:22 -0400 Subject: [PATCH 101/136] build: fix bitcoin-config.h regeneration after touching build files This was a long-standing and annoying problem. If autogen.sh was not manually run after touching configure.ac, bitcoin-config.h would not be properly regenerated. This causes very subtle problems when configure appears to enable a new value, but it does not end up reflected in the build. --- src/Makefile.am | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Makefile.am b/src/Makefile.am index e8d22313dca..76dbbced6cd 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -457,6 +457,14 @@ DISTCLEANFILES = obj/build.h EXTRA_DIST = $(CTAES_DIST) + +config/bitcoin-config.h: config/stamp-h1 + @$(MAKE) -C $(top_builddir) $(subdir)/$(@) +config/stamp-h1: $(top_srcdir)/$(subdir)/config/bitcoin-config.h.in $(top_builddir)/config.status + $(AM_V_at)$(MAKE) -C $(top_builddir) $(subdir)/$(@) +$(top_srcdir)/$(subdir)/config/bitcoin-config.h.in: $(am__configure_deps) + $(AM_V_at)$(MAKE) -C $(top_srcdir) $(subdir)/config/bitcoin-config.h.in + clean-local: -$(MAKE) -C secp256k1 clean -$(MAKE) -C univalue clean From 18476423fba5d2cadd2b0973e425a6ebedeb66a4 Mon Sep 17 00:00:00 2001 From: Gregory Sanders Date: Fri, 28 Apr 2017 17:22:37 -0400 Subject: [PATCH 102/136] [Wallet] unset change position when there is no change on exact match --- qa/rpc-tests/fundrawtransaction.py | 5 +++++ src/wallet/wallet.cpp | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/qa/rpc-tests/fundrawtransaction.py b/qa/rpc-tests/fundrawtransaction.py index 8d2bc73c0cc..cdea390e224 100755 --- a/qa/rpc-tests/fundrawtransaction.py +++ b/qa/rpc-tests/fundrawtransaction.py @@ -54,6 +54,11 @@ def run_test(self): self.nodes[0].generate(121) self.sync_all() + # ensure that setting changePosition in fundraw with an exact match is handled properly + rawmatch = self.nodes[2].createrawtransaction([], {self.nodes[2].getnewaddress():50}) + rawmatch = self.nodes[2].fundrawtransaction(rawmatch, {"changePosition":1, "subtractFeeFromOutputs":[0]}) + assert_equal(rawmatch["changepos"], -1) + watchonly_address = self.nodes[0].getnewaddress() watchonly_pubkey = self.nodes[0].validateaddress(watchonly_address)["pubkey"] watchonly_amount = Decimal(200) diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 1b59c3cd80c..3e93a56d563 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -2587,9 +2587,10 @@ bool CWallet::CreateTransaction(const vector& vecSend, CWalletTx& wt vector::iterator position = txNew.vout.begin()+nChangePosInOut; txNew.vout.insert(position, newTxOut); } - } - else + } else { reservekey.ReturnKey(); + nChangePosInOut = -1; + } // Fill vin // From 9e3ad500780b284765654cff4144451c7fa5ef6b Mon Sep 17 00:00:00 2001 From: Cory Fields Date: Wed, 24 May 2017 17:00:27 -0400 Subject: [PATCH 103/136] net: only enforce the services required to connect also once half of all outgoing nodes have our preferred flags, require only minimal flags from the rest. Github-Pull: #10441 Rebased-From: b6fbfc228236947eaea5c14dda299f5a01810e92 --- src/net.cpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/net.cpp b/src/net.cpp index 2fca994748f..1752c7707a7 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -1722,11 +1722,17 @@ void CConnman::ThreadOpenConnections() // Only connect out to one peer per network group (/16 for IPv4). // Do this here so we don't have to critsect vNodes inside mapAddresses critsect. int nOutbound = 0; + int nOutboundRelevant = 0; std::set > setConnected; { LOCK(cs_vNodes); BOOST_FOREACH(CNode* pnode, vNodes) { if (!pnode->fInbound && !pnode->fAddnode) { + + // Count the peers that have all relevant services + if (pnode->fSuccessfullyConnected && !pnode->fFeeler && ((pnode->nServices & nRelevantServices) == nRelevantServices)) { + nOutboundRelevant++; + } // Netgroups for inbound and addnode peers are not excluded because our goal here // is to not use multiple of our limited outbound slots on a single netgroup // but inbound and addnode peers do not use our outbound slots. Inbound peers @@ -1790,14 +1796,27 @@ void CConnman::ThreadOpenConnections() continue; // only consider nodes missing relevant services after 40 failed attempts and only if less than half the outbound are up. - if ((addr.nServices & nRelevantServices) != nRelevantServices && (nTries < 40 || nOutbound >= (nMaxOutbound >> 1))) + ServiceFlags nRequiredServices = nRelevantServices; + if (nTries >= 40 && nOutbound < (nMaxOutbound >> 1)) { + nRequiredServices = REQUIRED_SERVICES; + } + + if ((addr.nServices & nRequiredServices) != nRequiredServices) { continue; + } // do not allow non-default ports, unless after 50 invalid addresses selected already if (addr.GetPort() != Params().GetDefaultPort() && nTries < 50) continue; addrConnect = addr; + + // regardless of the services assumed to be available, only require the minimum if half or more outbound have relevant services + if (nOutboundRelevant >= (nMaxOutbound >> 1)) { + addrConnect.nServices = REQUIRED_SERVICES; + } else { + addrConnect.nServices = nRequiredServices; + } break; } From 4a41de4585a4dffb451a9be8078abb838235f336 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Fri, 2 Jun 2017 07:39:48 +0200 Subject: [PATCH 104/136] build: bump version to 0.14.2 --- configure.ac | 2 +- doc/Doxyfile | 2 +- doc/README.md | 2 +- doc/README_windows.txt | 2 +- src/clientversion.h | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index a9156c34803..0894c7197c5 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N) AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 0) define(_CLIENT_VERSION_MINOR, 14) -define(_CLIENT_VERSION_REVISION, 1) +define(_CLIENT_VERSION_REVISION, 2) define(_CLIENT_VERSION_BUILD, 0) define(_CLIENT_VERSION_IS_RELEASE, true) define(_COPYRIGHT_YEAR, 2017) diff --git a/doc/Doxyfile b/doc/Doxyfile index 2146a002206..a76918df7b6 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = "Bitcoin Core" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 0.14.1 +PROJECT_NUMBER = 0.14.2 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/doc/README.md b/doc/README.md index 52a4cc0bf68..81ded9e10a4 100644 --- a/doc/README.md +++ b/doc/README.md @@ -1,4 +1,4 @@ -Bitcoin Core 0.14.1 +Bitcoin Core 0.14.2 ===================== Setup diff --git a/doc/README_windows.txt b/doc/README_windows.txt index 5b9aaef57a4..ec365178a55 100644 --- a/doc/README_windows.txt +++ b/doc/README_windows.txt @@ -1,4 +1,4 @@ -Bitcoin Core 0.14.1 +Bitcoin Core 0.14.2 ===================== Intro diff --git a/src/clientversion.h b/src/clientversion.h index aa46955daee..2a6c55cf98a 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -16,7 +16,7 @@ //! These need to be macros, as clientversion.cpp's and bitcoin*-res.rc's voodoo requires it #define CLIENT_VERSION_MAJOR 0 #define CLIENT_VERSION_MINOR 14 -#define CLIENT_VERSION_REVISION 1 +#define CLIENT_VERSION_REVISION 2 #define CLIENT_VERSION_BUILD 0 //! Set to true for release, false for prerelease or test build From ef810c4cd440dec00a651b944d74ed4ae85603c2 Mon Sep 17 00:00:00 2001 From: practicalswift Date: Thu, 16 Mar 2017 09:05:30 +0100 Subject: [PATCH 105/136] [trivial] Fix a typo (introduced two days ago) in the default fee warning Github-Pull: #10008 Rebased-From: a3ca43bb32520fdc049bc2112a29a554188126cc --- src/qt/forms/sendcoinsdialog.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/forms/sendcoinsdialog.ui b/src/qt/forms/sendcoinsdialog.ui index ca2da6bf372..f13b0d9cf92 100644 --- a/src/qt/forms/sendcoinsdialog.ui +++ b/src/qt/forms/sendcoinsdialog.ui @@ -762,7 +762,7 @@ - Using the fallbackfee can result in sending a transaction that will take serval hours or days (or never) to confirm. Consider choosing your fee manually or wait until your have validated the complete chain. + Using the fallbackfee can result in sending a transaction that will take several hours or days (or never) to confirm. Consider choosing your fee manually or wait until your have validated the complete chain. From c94e262d4bf64f75e97d478a5a2e8d75067d43e3 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Wed, 3 May 2017 09:54:35 -0400 Subject: [PATCH 106/136] Update contrib/debian to latest Ubuntu PPA upload. This: * Partially reverts 9f68ed6 (which fixed spelling in a changelog, though generally changelogs should be append-only). * Disables UPnP support (PPA has not had it for a while, and I still don't trust miniupnpc, plus it seems uneccessary - its been a while since we needed to care about Bitcoin-Qt home users getting their inbound ports auto-mapped). * Enables ZMQ. * Forces GUI to Qt4 to fix various issues people have been seeing on Ubuntu and elsewhere with Qt5. * Reverts 70899d70b (Bitcoin does not enable "instant payments", not is transaction management "carried out collectively by the network", for whatever "transaction management" means, finally Bitcoin Core is not the only way to use the Bitcoin currency, as seemingly implied in the description). Github-Pull: #10328 Rebased-From: 997021986e02f8e59024ffca6437857d9d17f396 --- contrib/debian/changelog | 107 +++++++++++++++++++++++++++++++++++++++++++++-- contrib/debian/control | 50 +++++++++++----------- contrib/debian/rules | 2 +- 3 files changed, 131 insertions(+), 28 deletions(-) diff --git a/contrib/debian/changelog b/contrib/debian/changelog index 110bfe03eff..4f73f6042c5 100644 --- a/contrib/debian/changelog +++ b/contrib/debian/changelog @@ -1,3 +1,104 @@ +bitcoin (0.14.1-trusty1) trusty; urgency=medium + + * New upstream release. + + -- Matt Corallo (BlueMatt) Sat, 22 Apr 2017 17:10:00 -0400 + +bitcoin (0.14.0-trusty1) trusty; urgency=medium + + * New upstream release. + + -- Matt Corallo (BlueMatt) Wed, 08 Mar 2017 10:30:00 -0500 + +bitcoin (0.13.2-trusty1) trusty; urgency=medium + + * New upstream release. + + -- Matt Corallo (BlueMatt) Thu, 05 Jan 2017 09:59:00 -0500 + +bitcoin (0.13.1-trusty2) trusty; urgency=medium + + * Revert to Qt4, due to https://github.com/bitcoin/bitcoin/issues/9038 + + -- Matt Corallo (BlueMatt) Mon, 31 Oct 2016 11:16:00 -0400 + +bitcoin (0.13.1-trusty1) trusty; urgency=medium + + * New upstream release. + * Backport updated bitcoin-qt.desktop from upstream master + * Add zmq dependency + * Switch to Qt5 (breaks precise, but that was already broken by C++11) + + -- Matt Corallo (BlueMatt) Thu, 27 Oct 2016 17:32:00 -0400 + +bitcoin (0.13.0-trusty1) trusty; urgency=medium + + * New upstream release. + + -- Matt Corallo (BlueMatt) Sun, 04 Sep 2016 22:09:00 -0400 + +bitcoin (0.12.1-trusty1) trusty; urgency=medium + + * New upstream release. + + -- Matt Corallo (BlueMatt) Mon, 18 Apr 2016 14:26:00 -0700 + +bitcoin (0.12.0-trusty6) trusty; urgency=medium + + * Fix program-options dep. + + -- Matt Corallo (BlueMatt) Fri, 25 Mar 2016 21:41:00 -0700 + +bitcoin (0.12.0-trusty5) trusty; urgency=medium + + * Test explicit --with-gui + + -- Matt Corallo (BlueMatt) Tue, 23 Feb 2015 23:25:00 -0800 + +bitcoin (0.12.0-trusty4) trusty; urgency=medium + + * Fix libevent-dev dep. + + -- Matt Corallo (BlueMatt) Tue, 23 Feb 2015 23:25:00 -0800 + +bitcoin (0.12.0-trusty3) trusty; urgency=medium + + * Fix precise boost dep. + + -- Matt Corallo (BlueMatt) Tue, 23 Feb 2015 19:55:00 -0800 + +bitcoin (0.12.0-trusty2) trusty; urgency=medium + + * Fix libevent dep. + + -- Matt Corallo (BlueMatt) Tue, 23 Feb 2015 19:53:00 -0800 + +bitcoin (0.12.0-trusty1) trusty; urgency=medium + + * New upstream release + * Various updates to contrib/debian were merged, a few were not + + -- Matt Corallo (BlueMatt) Tue, 23 Feb 2015 19:29:00 -0800 + +bitcoin (0.11.2-trusty1) trusty; urgency=low + + * New upstream release. + + -- Matt Corallo (BlueMatt) Fri, 13 Nov 2015 18:39:00 -0800 + +bitcoin (0.11.1-trusty2) trusty; urgency=low + + * Remove minupnpc builddep. + + -- Matt Corallo (BlueMatt) Wed, 14 Oct 2015 23:06:00 -1000 + +bitcoin (0.11.1-trusty1) trusty; urgency=high + + * New upstream release. + * Disable all UPnP support. + + -- Matt Corallo (BlueMatt) Wed, 14 Oct 2015 13:57:00 -1000 + bitcoin (0.11.0-precise1) precise; urgency=medium * New upstream release. @@ -179,7 +280,7 @@ bitcoin (0.5.3-natty0) natty; urgency=low bitcoin (0.5.2-natty1) natty; urgency=low * Remove mentions on anonymity in package descriptions and manpage. - These should never have been there, bitcoin isn't anonymous without + These should never have been there, bitcoin isnt anonymous without a ton of work that virtually no users will ever be willing and capable of doing @@ -220,7 +321,7 @@ bitcoin (0.5.0~rc1-natty1) natty; urgency=low * Add test_bitcoin to build test * Fix clean - * Remove unnecessary build-dependancies + * Remove uneccessary build-dependancies -- Matt Corallo Wed, 26 Oct 2011 14:37:18 -0400 @@ -380,7 +481,7 @@ bitcoin (0.3.20.01~dfsg-1) unstable; urgency=low bitcoin (0.3.19~dfsg-6) unstable; urgency=low - * Fix override aggressive optimizations. + * Fix override agressive optimizations. * Fix tighten build-dependencies to really fit backporting to Lenny: + Add fallback build-dependency on libdb4.6++-dev. + Tighten unversioned Boost build-dependencies to recent versions, diff --git a/contrib/debian/control b/contrib/debian/control index fce6bc0118f..8cb703e1bc0 100644 --- a/contrib/debian/control +++ b/contrib/debian/control @@ -1,27 +1,29 @@ Source: bitcoin Section: utils Priority: optional -Maintainer: Jonas Smedegaard -Uploaders: Micah Anderson +Maintainer: Matt Corallo +Uploaders: Matt Corallo Build-Depends: debhelper, devscripts, automake, libtool, bash-completion, - libboost-system-dev (>> 1.35) | libboost-system1.35-dev, libdb4.8++-dev, libssl-dev, pkg-config, - libminiupnpc8-dev | libminiupnpc-dev (>> 1.6), - libboost-filesystem-dev (>> 1.35) | libboost-filesystem1.35-dev, - libboost-program-options-dev (>> 1.35) | libboost-program-options1.35-dev, - libboost-thread-dev (>> 1.35) | libboost-thread1.35-dev, - libboost-test-dev (>> 1.35) | libboost-test1.35-dev, + libevent-dev, + libboost-system1.48-dev | libboost-system-dev (>> 1.35), + libboost-filesystem1.48-dev | libboost-filesystem-dev (>> 1.35), + libboost-program-options1.48-dev | libboost-program-options-dev (>> 1.35), + libboost-thread1.48-dev | libboost-thread-dev (>> 1.35), + libboost-test1.48-dev | libboost-test-dev (>> 1.35), + libboost-chrono1.48-dev | libboost-chrono-dev (>> 1.35), qt4-qmake, libqt4-dev, libqrencode-dev, libprotobuf-dev, protobuf-compiler, - python + python, + libzmq3-dev Standards-Version: 3.9.2 Homepage: https://bitcoincore.org/ Vcs-Git: git://github.com/bitcoin/bitcoin.git @@ -31,11 +33,11 @@ Package: bitcoind Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: peer-to-peer network based digital currency - daemon - Bitcoin is an experimental new digital currency that enables instant - payments to anyone, anywhere in the world. Bitcoin uses peer-to-peer - technology to operate with no central authority: managing transactions - and issuing money are carried out collectively by the network. Bitcoin Core - is the name of the open source software which enables the use of this currency. + Bitcoin is a free open source peer-to-peer electronic cash system that + is completely decentralized, without the need for a central server or + trusted parties. Users hold the crypto keys to their own money and + transact directly with each other, with the help of a P2P network to + check for double-spending. . This package provides the daemon, bitcoind, and the CLI tool bitcoin-cli to interact with the daemon. @@ -44,11 +46,11 @@ Package: bitcoin-qt Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: peer-to-peer network based digital currency - Qt GUI - Bitcoin is an experimental new digital currency that enables instant - payments to anyone, anywhere in the world. Bitcoin uses peer-to-peer - technology to operate with no central authority: managing transactions - and issuing money are carried out collectively by the network. Bitcoin Core - is the name of the open source software which enables the use of this currency. + Bitcoin is a free open source peer-to-peer electronic cash system that + is completely decentralized, without the need for a central server or + trusted parties. Users hold the crypto keys to their own money and + transact directly with each other, with the help of a P2P network to + check for double-spending. . This package provides Bitcoin-Qt, a GUI for Bitcoin based on Qt. @@ -56,11 +58,11 @@ Package: bitcoin-tx Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: peer-to-peer digital currency - standalone transaction tool - Bitcoin is an experimental new digital currency that enables instant - payments to anyone, anywhere in the world. Bitcoin uses peer-to-peer - technology to operate with no central authority: managing transactions - and issuing money are carried out collectively by the network. Bitcoin Core - is the name of the open source software which enables the use of this currency. + Bitcoin is a free open source peer-to-peer electronic cash system that + is completely decentralized, without the need for a central server or + trusted parties. Users hold the crypto keys to their own money and + transact directly with each other, with the help of a P2P network to + check for double-spending. . This package provides bitcoin-tx, a command-line transaction creation tool which can be used without a bitcoin daemon. Some means of diff --git a/contrib/debian/rules b/contrib/debian/rules index 3896d2caa31..8db0b2dba58 100755 --- a/contrib/debian/rules +++ b/contrib/debian/rules @@ -15,7 +15,7 @@ override_dh_auto_clean: # Yea, autogen should be run on the source archive, but I like doing git archive override_dh_auto_configure: ./autogen.sh - ./configure + ./configure --without-miniupnpc --with-gui=qt4 override_dh_auto_test: make check From 2ea035832f0ba56db046eff318d3b91f097e1ca4 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Thu, 4 May 2017 17:13:41 -0400 Subject: [PATCH 107/136] Bump minimum boost version in contrib/debian Github-Pull: #10328 Rebased-From: a8e928699a6ab612459e836ba24af143eae37b0f --- contrib/debian/changelog | 6 ++++++ contrib/debian/control | 12 ++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/contrib/debian/changelog b/contrib/debian/changelog index 4f73f6042c5..f38d6da83ac 100644 --- a/contrib/debian/changelog +++ b/contrib/debian/changelog @@ -1,3 +1,9 @@ +bitcoin (0.14.1-trusty2) trusty; urgency=medium + + * Bump minimum boost version in deps. + + -- Matt Corallo (BlueMatt) Thu, 04 May 2017 17:12:00 -0400 + bitcoin (0.14.1-trusty1) trusty; urgency=medium * New upstream release. diff --git a/contrib/debian/control b/contrib/debian/control index 8cb703e1bc0..53dd4faf417 100644 --- a/contrib/debian/control +++ b/contrib/debian/control @@ -12,12 +12,12 @@ Build-Depends: debhelper, libssl-dev, pkg-config, libevent-dev, - libboost-system1.48-dev | libboost-system-dev (>> 1.35), - libboost-filesystem1.48-dev | libboost-filesystem-dev (>> 1.35), - libboost-program-options1.48-dev | libboost-program-options-dev (>> 1.35), - libboost-thread1.48-dev | libboost-thread-dev (>> 1.35), - libboost-test1.48-dev | libboost-test-dev (>> 1.35), - libboost-chrono1.48-dev | libboost-chrono-dev (>> 1.35), + libboost-system1.48-dev | libboost-system-dev (>> 1.47), + libboost-filesystem1.48-dev | libboost-filesystem-dev (>> 1.47), + libboost-program-options1.48-dev | libboost-program-options-dev (>> 1.47), + libboost-thread1.48-dev | libboost-thread-dev (>> 1.47), + libboost-test1.48-dev | libboost-test-dev (>> 1.47), + libboost-chrono1.48-dev | libboost-chrono-dev (>> 1.47), qt4-qmake, libqt4-dev, libqrencode-dev, From e9a0d89bf7593a1ae7ac9b059793281f0b754540 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Thu, 4 May 2017 17:15:16 -0400 Subject: [PATCH 108/136] Build with QT5 on Debian-based systems using contrib/debian Github-Pull: #10328 Rebased-From: c5071e1f03085b4025f2a33fb2c3079d823d660c --- contrib/debian/changelog | 6 ++++++ contrib/debian/control | 4 ++-- contrib/debian/rules | 4 +++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/contrib/debian/changelog b/contrib/debian/changelog index f38d6da83ac..1bef910398c 100644 --- a/contrib/debian/changelog +++ b/contrib/debian/changelog @@ -1,3 +1,9 @@ +bitcoin (0.14.1-trusty3) trusty; urgency=medium + + * Build with qt5 if we are on a non-Ubuntu (ie non-Unity) distro. + + -- Matt Corallo (BlueMatt) Thu, 04 May 2017 17:13:00 -0400 + bitcoin (0.14.1-trusty2) trusty; urgency=medium * Bump minimum boost version in deps. diff --git a/contrib/debian/control b/contrib/debian/control index 53dd4faf417..523b4f936b3 100644 --- a/contrib/debian/control +++ b/contrib/debian/control @@ -18,8 +18,8 @@ Build-Depends: debhelper, libboost-thread1.48-dev | libboost-thread-dev (>> 1.47), libboost-test1.48-dev | libboost-test-dev (>> 1.47), libboost-chrono1.48-dev | libboost-chrono-dev (>> 1.47), - qt4-qmake, - libqt4-dev, + qt4-qmake, libqt4-dev, + qttools5-dev-tools, qttools5-dev, libqrencode-dev, libprotobuf-dev, protobuf-compiler, python, diff --git a/contrib/debian/rules b/contrib/debian/rules index 8db0b2dba58..354f15f320e 100755 --- a/contrib/debian/rules +++ b/contrib/debian/rules @@ -12,10 +12,12 @@ override_dh_auto_clean: if [ -f Makefile ]; then $(MAKE) distclean; fi rm -rf Makefile.in aclocal.m4 configure src/Makefile.in src/bitcoin-config.h.in src/build-aux src/qt/Makefile.in src/qt/test/Makefile.in src/test/Makefile.in +QT=$(shell dpkg-vendor --derives-from Ubuntu && echo qt4 || echo qt5) + # Yea, autogen should be run on the source archive, but I like doing git archive override_dh_auto_configure: ./autogen.sh - ./configure --without-miniupnpc --with-gui=qt4 + ./configure --without-miniupnpc --with-gui=$(QT) override_dh_auto_test: make check From 6ad45b8f8bd1f33842160d109d391deae0d615e7 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Fri, 5 May 2017 13:29:18 -0400 Subject: [PATCH 109/136] Re-enable upnp support in contrib/debian Github-Pull: #10328 Rebased-From: 91700aa1df57c1a9209284e743224119396604d5 --- contrib/debian/changelog | 6 ++++++ contrib/debian/control | 1 + contrib/debian/rules | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/contrib/debian/changelog b/contrib/debian/changelog index 1bef910398c..33dab9b6388 100644 --- a/contrib/debian/changelog +++ b/contrib/debian/changelog @@ -1,3 +1,9 @@ +bitcoin (0.14.1-trusty4) trusty; urgency=medium + + * Re-enable UPnP support. + + -- Matt Corallo (BlueMatt) Fri, 05 May 2017 13:28:00 -0400 + bitcoin (0.14.1-trusty3) trusty; urgency=medium * Build with qt5 if we are on a non-Ubuntu (ie non-Unity) distro. diff --git a/contrib/debian/control b/contrib/debian/control index 523b4f936b3..0d6ad25e249 100644 --- a/contrib/debian/control +++ b/contrib/debian/control @@ -18,6 +18,7 @@ Build-Depends: debhelper, libboost-thread1.48-dev | libboost-thread-dev (>> 1.47), libboost-test1.48-dev | libboost-test-dev (>> 1.47), libboost-chrono1.48-dev | libboost-chrono-dev (>> 1.47), + libminiupnpc8-dev | libminiupnpc-dev, qt4-qmake, libqt4-dev, qttools5-dev-tools, qttools5-dev, libqrencode-dev, diff --git a/contrib/debian/rules b/contrib/debian/rules index 354f15f320e..6885e385212 100755 --- a/contrib/debian/rules +++ b/contrib/debian/rules @@ -17,7 +17,7 @@ QT=$(shell dpkg-vendor --derives-from Ubuntu && echo qt4 || echo qt5) # Yea, autogen should be run on the source archive, but I like doing git archive override_dh_auto_configure: ./autogen.sh - ./configure --without-miniupnpc --with-gui=$(QT) + ./configure --with-gui=$(QT) override_dh_auto_test: make check From 21e1ed48989e1d150e9f85770fd098534e0f81f1 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Mon, 5 Jun 2017 08:43:34 +0200 Subject: [PATCH 110/136] doc: Preliminary release notes 0.14.2 --- doc/release-notes.md | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/doc/release-notes.md b/doc/release-notes.md index 49cbdb55d04..1fbade55a73 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -1,6 +1,6 @@ -Bitcoin Core version 0.14.x is now available from: +Bitcoin Core version 0.14.2 is now available from: - + This is a new minor version release, including various bugfixes and performance improvements, as well as updated translations. @@ -30,11 +30,12 @@ frequently tested on them. Notable changes =============== -Example item ------------- +miniupnp CVE-2017-8798 +---------------------------- +[todo] -0.14.x Change log +0.14.2 Change log ================= Detailed release notes follow. This overview includes changes that affect @@ -42,12 +43,41 @@ behavior, not code moves, refactors and string updates. For convenience in locat the code changes and accompanying discussion, both the pull request and git merge commit are mentioned. +### RPC and other APIs +- #10410 `321419b` Fix importwallet edge case rescan bug (ryanofsky) + +### P2P protocol and network code +- #10424 `37a8fc5` Populate services in GetLocalAddress (morcos) +- #10441 `9e3ad50` net: only enforce expected services for half of outgoing connections (theuni) + +### Build system +- #10414 `ffb0c4b` [depends] miniupnpc 2.0.20170509 (fanquake) +- #10228 `ae479bc` Regenerate bitcoin-config.h as necessary (theuni) + +### Miscellaneous +- #10245 `44a17f2` Minor fix in build documentation for FreeBSD 11 (shigeya) +- #10215 `0aee4a1` Check interruptNet during dnsseed lookups (TheBlueMatt) + +### GUI +- #10231 `1e936d7` Reduce a significant cs_main lock freeze (jonasschnelli) + +### Wallet +- #10294 `1847642` Unset change position when there is no change (instagibbs) Credits ======= Thanks to everyone who directly contributed to this release: +- Alex Morcos +- Cory Fields +- fanquake +- Gregory Sanders +- Jonas Schnelli +- Matt Corallo +- Russell Yanofsky +- Shigeya Suzuki +- Wladimir J. van der Laan As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). From 3ad00b4b32842e005af6378fd71eb9e293804cef Mon Sep 17 00:00:00 2001 From: John Newbery Date: Tue, 7 Feb 2017 14:27:57 -0500 Subject: [PATCH 111/136] Return correct error codes in bumpfee(). The bumpfee() RPC was returning misleading or incorrect error codes (for example RPC_INVALID_ADDRESS_OR_KEY when the transaction was not BIP125 replacable). This commit fixes those error codes: - RPC_INVALID_ADDRESS_OR_KEY if an invalid address was provided: - Invalid change address given - RPC_INVALID_PARAMETER if a single (non-address/key) parameter is incorrect - confTarget and totalFee options should not both be set. - Invalid confTarget - Insufficient totalFee (cannot be less than required fee) - RPC_WALLET_ERROR for any other error - Transaction has descendants in the wallet - Transaction has descendants in the mempool - Transaction has been mined, or is conflicted with a mined transaction - Transaction is not BIP 125 replaceable - Transaction has already been bumped - Transaction contains inputs that don't belong to the wallet - Transaction has multiple change outputs - Transaction does not have a change output - Fee is higher than maxTxFee - New fee rate is less than the minimum fee rate - Change output is too small. This commit also updates the test cases to explicitly test the error code. Github-Pull: #9853 Rebased-From: 6d07c62322f60eb2702c6654e994fc353bcfcf8c --- qa/rpc-tests/bumpfee.py | 18 ++++++++---------- src/wallet/rpcwallet.cpp | 24 ++++++++++++------------ 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/qa/rpc-tests/bumpfee.py b/qa/rpc-tests/bumpfee.py index ac282796c14..7ed2beb176e 100755 --- a/qa/rpc-tests/bumpfee.py +++ b/qa/rpc-tests/bumpfee.py @@ -129,7 +129,7 @@ def test_segwit_bumpfee_succeeds(rbf_node, dest_address): def test_nonrbf_bumpfee_fails(peer_node, dest_address): # cannot replace a non RBF transaction (from node which did not enable RBF) not_rbfid = create_fund_sign_send(peer_node, {dest_address: 0.00090000}) - assert_raises_message(JSONRPCException, "not BIP 125 replaceable", peer_node.bumpfee, not_rbfid) + assert_raises_jsonrpc(-4, "not BIP 125 replaceable", peer_node.bumpfee, not_rbfid) def test_notmine_bumpfee_fails(rbf_node, peer_node, dest_address): @@ -149,7 +149,7 @@ def test_notmine_bumpfee_fails(rbf_node, peer_node, dest_address): signedtx = rbf_node.signrawtransaction(rawtx) signedtx = peer_node.signrawtransaction(signedtx["hex"]) rbfid = rbf_node.sendrawtransaction(signedtx["hex"]) - assert_raises_message(JSONRPCException, "Transaction contains inputs that don't belong to this wallet", + assert_raises_jsonrpc(-4, "Transaction contains inputs that don't belong to this wallet", rbf_node.bumpfee, rbfid) @@ -160,7 +160,7 @@ def test_bumpfee_with_descendant_fails(rbf_node, rbf_node_address, dest_address) tx = rbf_node.createrawtransaction([{"txid": parent_id, "vout": 0}], {dest_address: 0.00020000}) tx = rbf_node.signrawtransaction(tx) txid = rbf_node.sendrawtransaction(tx["hex"]) - assert_raises_message(JSONRPCException, "Transaction has descendants in the wallet", rbf_node.bumpfee, parent_id) + assert_raises_jsonrpc(-8, "Transaction has descendants in the wallet", rbf_node.bumpfee, parent_id) def test_small_output_fails(rbf_node, dest_address): @@ -175,7 +175,7 @@ def test_small_output_fails(rbf_node, dest_address): Decimal("0.00100000"), {dest_address: 0.00080000, get_change_address(rbf_node): Decimal("0.00010000")}) - assert_raises_message(JSONRPCException, "Change output is too small", rbf_node.bumpfee, rbfid, {"totalFee": 20001}) + assert_raises_jsonrpc(-4, "Change output is too small", rbf_node.bumpfee, rbfid, {"totalFee": 20001}) def test_dust_to_fee(rbf_node, dest_address): @@ -210,7 +210,7 @@ def test_rebumping(rbf_node, dest_address): rbf_node.settxfee(Decimal("0.00001000")) rbfid = create_fund_sign_send(rbf_node, {dest_address: 0.00090000}) bumped = rbf_node.bumpfee(rbfid, {"totalFee": 1000}) - assert_raises_message(JSONRPCException, "already bumped", rbf_node.bumpfee, rbfid, {"totalFee": 2000}) + assert_raises_jsonrpc(-4, "already bumped", rbf_node.bumpfee, rbfid, {"totalFee": 2000}) rbf_node.bumpfee(bumped["txid"], {"totalFee": 2000}) @@ -218,7 +218,7 @@ def test_rebumping_not_replaceable(rbf_node, dest_address): # check that re-bumping a non-replaceable bump tx fails rbfid = create_fund_sign_send(rbf_node, {dest_address: 0.00090000}) bumped = rbf_node.bumpfee(rbfid, {"totalFee": 10000, "replaceable": False}) - assert_raises_message(JSONRPCException, "Transaction is not BIP 125 replaceable", rbf_node.bumpfee, bumped["txid"], + assert_raises_jsonrpc(-4, "Transaction is not BIP 125 replaceable", rbf_node.bumpfee, bumped["txid"], {"totalFee": 20000}) @@ -269,7 +269,7 @@ def test_bumpfee_metadata(rbf_node, dest_address): def test_locked_wallet_fails(rbf_node, dest_address): rbfid = create_fund_sign_send(rbf_node, {dest_address: 0.00090000}) rbf_node.walletlock() - assert_raises_message(JSONRPCException, "Please enter the wallet passphrase with walletpassphrase first.", + assert_raises_jsonrpc(-13, "Please enter the wallet passphrase with walletpassphrase first.", rbf_node.bumpfee, rbfid) @@ -316,9 +316,7 @@ def submit_block_with_tx(node, tx): block.rehash() block.hashMerkleRoot = block.calc_merkle_root() block.solve() - error = node.submitblock(bytes_to_hex_str(block.serialize(True))) - if error is not None: - raise Exception(error) + node.submitblock(bytes_to_hex_str(block.serialize(True))) return block diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 5cf1592376f..c141c0ca159 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -2603,7 +2603,7 @@ UniValue fundrawtransaction(const JSONRPCRequest& request) CBitcoinAddress address(options["changeAddress"].get_str()); if (!address.IsValid()) - throw JSONRPCError(RPC_INVALID_PARAMETER, "changeAddress must be a valid bitcoin address"); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "changeAddress must be a valid bitcoin address"); changeAddress = address.Get(); } @@ -2756,33 +2756,33 @@ UniValue bumpfee(const JSONRPCRequest& request) CWalletTx& wtx = pwalletMain->mapWallet[hash]; if (pwalletMain->HasWalletSpend(hash)) { - throw JSONRPCError(RPC_MISC_ERROR, "Transaction has descendants in the wallet"); + throw JSONRPCError(RPC_INVALID_PARAMETER, "Transaction has descendants in the wallet"); } { LOCK(mempool.cs); auto it = mempool.mapTx.find(hash); if (it != mempool.mapTx.end() && it->GetCountWithDescendants() > 1) { - throw JSONRPCError(RPC_MISC_ERROR, "Transaction has descendants in the mempool"); + throw JSONRPCError(RPC_INVALID_PARAMETER, "Transaction has descendants in the mempool"); } } if (wtx.GetDepthInMainChain() != 0) { - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Transaction has been mined, or is conflicted with a mined transaction"); + throw JSONRPCError(RPC_WALLET_ERROR, "Transaction has been mined, or is conflicted with a mined transaction"); } if (!SignalsOptInRBF(wtx)) { - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Transaction is not BIP 125 replaceable"); + throw JSONRPCError(RPC_WALLET_ERROR, "Transaction is not BIP 125 replaceable"); } if (wtx.mapValue.count("replaced_by_txid")) { - throw JSONRPCError(RPC_INVALID_REQUEST, strprintf("Cannot bump transaction %s which was already bumped by transaction %s", hash.ToString(), wtx.mapValue.at("replaced_by_txid"))); + throw JSONRPCError(RPC_WALLET_ERROR, strprintf("Cannot bump transaction %s which was already bumped by transaction %s", hash.ToString(), wtx.mapValue.at("replaced_by_txid"))); } // check that original tx consists entirely of our inputs // if not, we can't bump the fee, because the wallet has no way of knowing the value of the other inputs (thus the fee) if (!pwalletMain->IsAllFromMe(wtx, ISMINE_SPENDABLE)) { - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Transaction contains inputs that don't belong to this wallet"); + throw JSONRPCError(RPC_WALLET_ERROR, "Transaction contains inputs that don't belong to this wallet"); } // figure out which output was change @@ -2791,13 +2791,13 @@ UniValue bumpfee(const JSONRPCRequest& request) for (size_t i = 0; i < wtx.tx->vout.size(); ++i) { if (pwalletMain->IsChange(wtx.tx->vout[i])) { if (nOutput != -1) { - throw JSONRPCError(RPC_MISC_ERROR, "Transaction has multiple change outputs"); + throw JSONRPCError(RPC_WALLET_ERROR, "Transaction has multiple change outputs"); } nOutput = i; } } if (nOutput == -1) { - throw JSONRPCError(RPC_MISC_ERROR, "Transaction does not have a change output"); + throw JSONRPCError(RPC_WALLET_ERROR, "Transaction does not have a change output"); } // Calculate the expected size of the new transaction. @@ -2888,7 +2888,7 @@ UniValue bumpfee(const JSONRPCRequest& request) // Check that in all cases the new fee doesn't violate maxTxFee if (nNewFee > maxTxFee) { - throw JSONRPCError(RPC_MISC_ERROR, + throw JSONRPCError(RPC_WALLET_ERROR, strprintf("Specified or calculated fee %s is too high (cannot be higher than maxTxFee %s)", FormatMoney(nNewFee), FormatMoney(maxTxFee))); } @@ -2900,7 +2900,7 @@ UniValue bumpfee(const JSONRPCRequest& request) // moment earlier. In this case, we report an error to the user, who may use totalFee to make an adjustment. CFeeRate minMempoolFeeRate = mempool.GetMinFee(GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000); if (nNewFeeRate.GetFeePerK() < minMempoolFeeRate.GetFeePerK()) { - throw JSONRPCError(RPC_MISC_ERROR, strprintf("New fee rate (%s) is less than the minimum fee rate (%s) to get into the mempool. totalFee value should to be at least %s or settxfee value should be at least %s to add transaction.", FormatMoney(nNewFeeRate.GetFeePerK()), FormatMoney(minMempoolFeeRate.GetFeePerK()), FormatMoney(minMempoolFeeRate.GetFee(maxNewTxSize)), FormatMoney(minMempoolFeeRate.GetFeePerK()))); + throw JSONRPCError(RPC_WALLET_ERROR, strprintf("New fee rate (%s) is less than the minimum fee rate (%s) to get into the mempool. totalFee value should to be at least %s or settxfee value should be at least %s to add transaction.", FormatMoney(nNewFeeRate.GetFeePerK()), FormatMoney(minMempoolFeeRate.GetFeePerK()), FormatMoney(minMempoolFeeRate.GetFee(maxNewTxSize)), FormatMoney(minMempoolFeeRate.GetFeePerK()))); } // Now modify the output to increase the fee. @@ -2910,7 +2910,7 @@ UniValue bumpfee(const JSONRPCRequest& request) CMutableTransaction tx(*(wtx.tx)); CTxOut* poutput = &(tx.vout[nOutput]); if (poutput->nValue < nDelta) { - throw JSONRPCError(RPC_MISC_ERROR, "Change output is too small to bump the fee"); + throw JSONRPCError(RPC_WALLET_ERROR, "Change output is too small to bump the fee"); } // If the output would become dust, discard it (converting the dust to fee) From fe51c8924e62bf146a722f632324c99c2f97bc75 Mon Sep 17 00:00:00 2001 From: John Newbery Date: Thu, 9 Feb 2017 16:39:18 -0500 Subject: [PATCH 112/136] Return correct error codes in blockchain.cpp. RPCs in blockchain.cpp were returning misleading or incorrect error codes (for example getblock() returning RPC_INTERNAL_ERROR when the block had been pruned). This commit fixes those error codes: - RPC_INTERNAL_ERROR should not be returned for application-level errors, only for genuine internal errors such as corrupted data. - RPC_METHOD_NOT_FOUND should not be returned in response to a JSON request for an existing method. Those error codes have been replaced with RPC_MISC_ERROR or RPC_INVALID_PARAMETER as appropriate. Github-Pull: #9853 Rebased-From: c1190963b388590dc0a346bf625c7e84f69cee8d --- qa/rpc-tests/p2p-acceptblock.py | 30 +++++++++--------------------- qa/rpc-tests/pruning.py | 31 +++++++++++-------------------- src/rpc/blockchain.cpp | 17 +++++++++++------ 3 files changed, 31 insertions(+), 47 deletions(-) diff --git a/qa/rpc-tests/p2p-acceptblock.py b/qa/rpc-tests/p2p-acceptblock.py index 015ec34effa..4ebf2766202 100755 --- a/qa/rpc-tests/p2p-acceptblock.py +++ b/qa/rpc-tests/p2p-acceptblock.py @@ -199,11 +199,8 @@ def run_test(self): assert_equal(x['status'], "headers-only") # But this block should be accepted by node0 since it has more work. - try: - self.nodes[0].getblock(blocks_h3[0].hash) - print("Unrequested more-work block accepted from non-whitelisted peer") - except: - raise AssertionError("Unrequested more work block was not processed") + self.nodes[0].getblock(blocks_h3[0].hash) + print("Unrequested more-work block accepted from non-whitelisted peer") # Node1 should have accepted and reorged. assert_equal(self.nodes[1].getblockcount(), 3) @@ -227,26 +224,17 @@ def run_test(self): tips[j] = next_block time.sleep(2) - for x in all_blocks: - try: - self.nodes[0].getblock(x.hash) - if x == all_blocks[287]: - raise AssertionError("Unrequested block too far-ahead should have been ignored") - except: - if x == all_blocks[287]: - print("Unrequested block too far-ahead not processed") - else: - raise AssertionError("Unrequested block with more work should have been accepted") + # Blocks 1-287 should be accepted, block 288 should be ignored because it's too far ahead + for x in all_blocks[:-1]: + self.nodes[0].getblock(x.hash) + assert_raises_jsonrpc(-1, "Block not found on disk", self.nodes[0].getblock, all_blocks[-1].hash) headers_message.headers.pop() # Ensure the last block is unrequested white_node.send_message(headers_message) # Send headers leading to tip white_node.send_message(msg_block(tips[1])) # Now deliver the tip - try: - white_node.sync_with_ping() - self.nodes[1].getblock(tips[1].hash) - print("Unrequested block far ahead of tip accepted from whitelisted peer") - except: - raise AssertionError("Unrequested block from whitelisted peer not accepted") + white_node.sync_with_ping() + self.nodes[1].getblock(tips[1].hash) + print("Unrequested block far ahead of tip accepted from whitelisted peer") # 5. Test handling of unrequested block on the node that didn't process # Should still not be processed (even though it has a child that has more diff --git a/qa/rpc-tests/pruning.py b/qa/rpc-tests/pruning.py index 1e6d4191869..3308bd1dc5e 100755 --- a/qa/rpc-tests/pruning.py +++ b/qa/rpc-tests/pruning.py @@ -186,11 +186,8 @@ def reorg_test(self): def reorg_back(self): # Verify that a block on the old main chain fork has been pruned away - try: - self.nodes[2].getblock(self.forkhash) - raise AssertionError("Old block wasn't pruned so can't test redownload") - except JSONRPCException as e: - print("Will need to redownload block",self.forkheight) + assert_raises_jsonrpc(-1, "Block not available (pruned data)", self.nodes[2].getblock, self.forkhash) + print("Will need to redownload block",self.forkheight) # Verify that we have enough history to reorg back to the fork point # Although this is more than 288 blocks, because this chain was written more recently @@ -235,7 +232,7 @@ def manual_test(self, node_number, use_timestamp): # at this point, node has 995 blocks and has not yet run in prune mode node = self.nodes[node_number] = start_node(node_number, self.options.tmpdir, ["-debug=0"], timewait=900) assert_equal(node.getblockcount(), 995) - assert_raises_message(JSONRPCException, "not in prune mode", node.pruneblockchain, 500) + assert_raises_jsonrpc(-1, "not in prune mode", node.pruneblockchain, 500) self.stop_node(node_number) # now re-start in manual pruning mode @@ -267,14 +264,14 @@ def has_block(index): return os.path.isfile(self.options.tmpdir + "/node{}/regtest/blocks/blk{:05}.dat".format(node_number, index)) # should not prune because chain tip of node 3 (995) < PruneAfterHeight (1000) - assert_raises_message(JSONRPCException, "Blockchain is too short for pruning", node.pruneblockchain, height(500)) + assert_raises_jsonrpc(-1, "Blockchain is too short for pruning", node.pruneblockchain, height(500)) # mine 6 blocks so we are at height 1001 (i.e., above PruneAfterHeight) node.generate(6) assert_equal(node.getblockchaininfo()["blocks"], 1001) # negative heights should raise an exception - assert_raises_message(JSONRPCException, "Negative", node.pruneblockchain, -10) + assert_raises_jsonrpc(-8, "Negative", node.pruneblockchain, -10) # height=100 too low to prune first block file so this is a no-op prune(100) @@ -320,12 +317,9 @@ def has_block(index): def wallet_test(self): # check that the pruning node's wallet is still in good shape print("Stop and start pruning node to trigger wallet rescan") - try: - self.stop_node(2) - start_node(2, self.options.tmpdir, ["-debug=1","-prune=550"]) - print("Success") - except Exception as detail: - raise AssertionError("Wallet test: unable to re-start the pruning node") + self.stop_node(2) + start_node(2, self.options.tmpdir, ["-debug=1","-prune=550"]) + print("Success") # check that wallet loads loads successfully when restarting a pruned node after IBD. # this was reported to fail in #7494. @@ -333,12 +327,9 @@ def wallet_test(self): connect_nodes(self.nodes[0], 5) nds = [self.nodes[0], self.nodes[5]] sync_blocks(nds, wait=5, timeout=300) - try: - self.stop_node(5) #stop and start to trigger rescan - start_node(5, self.options.tmpdir, ["-debug=1","-prune=550"]) - print ("Success") - except Exception as detail: - raise AssertionError("Wallet test: unable to re-start node5") + self.stop_node(5) #stop and start to trigger rescan + start_node(5, self.options.tmpdir, ["-debug=1","-prune=550"]) + print ("Success") def run_test(self): print("Warning! This test requires 4GB of disk space and takes over 30 mins (up to 2 hours)") diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 7b69c81ff9c..6080650f898 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -744,10 +744,15 @@ UniValue getblock(const JSONRPCRequest& request) CBlockIndex* pblockindex = mapBlockIndex[hash]; if (fHavePruned && !(pblockindex->nStatus & BLOCK_HAVE_DATA) && pblockindex->nTx > 0) - throw JSONRPCError(RPC_INTERNAL_ERROR, "Block not available (pruned data)"); + throw JSONRPCError(RPC_MISC_ERROR, "Block not available (pruned data)"); - if(!ReadBlockFromDisk(block, pblockindex, Params().GetConsensus())) - throw JSONRPCError(RPC_INTERNAL_ERROR, "Can't read block from disk"); + if (!ReadBlockFromDisk(block, pblockindex, Params().GetConsensus())) + // Block not found on disk. This could be because we have the block + // header in our index but don't have the block (for example if a + // non-whitelisted node sends us an unrequested long chain of valid + // blocks, we add the headers to our index, but don't accept the + // block). + throw JSONRPCError(RPC_MISC_ERROR, "Block not found on disk"); if (!fVerbose) { @@ -829,7 +834,7 @@ UniValue pruneblockchain(const JSONRPCRequest& request) + HelpExampleRpc("pruneblockchain", "1000")); if (!fPruneMode) - throw JSONRPCError(RPC_METHOD_NOT_FOUND, "Cannot prune blocks because node is not in prune mode."); + throw JSONRPCError(RPC_MISC_ERROR, "Cannot prune blocks because node is not in prune mode."); LOCK(cs_main); @@ -843,7 +848,7 @@ UniValue pruneblockchain(const JSONRPCRequest& request) // Add a 2 hour buffer to include blocks which might have had old timestamps CBlockIndex* pindex = chainActive.FindEarliestAtLeast(heightParam - 7200); if (!pindex) { - throw JSONRPCError(RPC_INTERNAL_ERROR, "Could not find block with at least the specified timestamp."); + throw JSONRPCError(RPC_INVALID_PARAMETER, "Could not find block with at least the specified timestamp."); } heightParam = pindex->nHeight; } @@ -851,7 +856,7 @@ UniValue pruneblockchain(const JSONRPCRequest& request) unsigned int height = (unsigned int) heightParam; unsigned int chainHeight = (unsigned int) chainActive.Height(); if (chainHeight < Params().PruneAfterHeight()) - throw JSONRPCError(RPC_INTERNAL_ERROR, "Blockchain is too short for pruning."); + throw JSONRPCError(RPC_MISC_ERROR, "Blockchain is too short for pruning."); else if (height > chainHeight) throw JSONRPCError(RPC_INVALID_PARAMETER, "Blockchain is shorter than the attempted prune height."); else if (height > chainHeight - MIN_BLOCKS_TO_KEEP) { From 18c109ddb10e8f2e1075ee4078519cfefd4de47d Mon Sep 17 00:00:00 2001 From: John Newbery Date: Thu, 9 Feb 2017 16:27:28 -0500 Subject: [PATCH 113/136] Return correct error codes in removeprunedfunds(). The removeprunedfunds() RPC was returning misleading or incorrect error codes (for example RPC_INTERNAL_ERROR when the transaction was not found in the wallet). This commit fixes those error codes: - RPC_INTERNAL_ERROR should not be returned for application-level errors, only for genuine internal errors such as corrupted data. This error code has been replaced with RPC_WALLET_ERROR. This commit also updates the test cases to explicitly test the error code. Github-Pull: #9853 Rebased-From: 960bc7f778d8dd618e65f1e37ec734e2d4734051 --- qa/rpc-tests/importprunedfunds.py | 14 ++------------ src/wallet/rpcdump.cpp | 4 ++-- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/qa/rpc-tests/importprunedfunds.py b/qa/rpc-tests/importprunedfunds.py index 0dee8ad4ec9..b289f9be575 100755 --- a/qa/rpc-tests/importprunedfunds.py +++ b/qa/rpc-tests/importprunedfunds.py @@ -76,12 +76,7 @@ def run_test(self): self.sync_all() #Import with no affiliated address - try: - self.nodes[1].importprunedfunds(rawtxn1, proof1) - except JSONRPCException as e: - assert('No addresses' in e.error['message']) - else: - assert(False) + assert_raises_jsonrpc(-5, "No addresses", self.nodes[1].importprunedfunds, rawtxn1, proof1) balance1 = self.nodes[1].getbalance("", 0, True) assert_equal(balance1, Decimal(0)) @@ -112,12 +107,7 @@ def run_test(self): assert_equal(address_info['ismine'], True) #Remove transactions - try: - self.nodes[1].removeprunedfunds(txnid1) - except JSONRPCException as e: - assert('does not exist' in e.error['message']) - else: - assert(False) + assert_raises_jsonrpc(-8, "Transaction does not exist in wallet.", self.nodes[1].removeprunedfunds, txnid1) balance1 = self.nodes[1].getbalance("*", 0, True) assert_equal(balance1, Decimal('0.075')) diff --git a/src/wallet/rpcdump.cpp b/src/wallet/rpcdump.cpp index cd6ec207f90..dc61a4505ed 100644 --- a/src/wallet/rpcdump.cpp +++ b/src/wallet/rpcdump.cpp @@ -340,11 +340,11 @@ UniValue removeprunedfunds(const JSONRPCRequest& request) vector vHashOut; if(pwalletMain->ZapSelectTx(vHash, vHashOut) != DB_LOAD_OK) { - throw JSONRPCError(RPC_INTERNAL_ERROR, "Could not properly delete the transaction."); + throw JSONRPCError(RPC_WALLET_ERROR, "Could not properly delete the transaction."); } if(vHashOut.empty()) { - throw JSONRPCError(RPC_INTERNAL_ERROR, "Transaction does not exist in wallet."); + throw JSONRPCError(RPC_INVALID_PARAMETER, "Transaction does not exist in wallet."); } return NullUniValue; From 4943d7a9feb8e4f5461622f548032e53eb714175 Mon Sep 17 00:00:00 2001 From: John Newbery Date: Tue, 7 Feb 2017 12:57:37 -0500 Subject: [PATCH 114/136] Return correct error codes in setban(). The setban() RPC was returning misleading or incorrect error codes (for example RPC_CLIENT_NODE_ALREADY_ADDED when an invalid IP address was entered). This commit fixes those error codes: - RPC_CLIENT_INVALID_IP_OR_SUBNET should be returned if the client enters an invalid IP address or subnet. This commit also updates the test cases to explicitly test the error code. This commit also adds a testcase for trying to setban on an invalid subnet. Github-Pull: #9853 Rebased-From: a012087667edb35a36f25ae06b42b1644d80e649 --- qa/rpc-tests/nodehandling.py | 14 ++++++-------- src/rpc/net.cpp | 4 ++-- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/qa/rpc-tests/nodehandling.py b/qa/rpc-tests/nodehandling.py index 7313c79b54f..634dba7c8e6 100755 --- a/qa/rpc-tests/nodehandling.py +++ b/qa/rpc-tests/nodehandling.py @@ -32,15 +32,13 @@ def run_test(self): assert_equal(len(self.nodes[2].listbanned()), 0) self.nodes[2].setban("127.0.0.0/24", "add") assert_equal(len(self.nodes[2].listbanned()), 1) - try: - self.nodes[2].setban("127.0.0.1", "add") #throws exception because 127.0.0.1 is within range 127.0.0.0/24 - except: - pass + # This will throw an exception because 127.0.0.1 is within range 127.0.0.0/24 + assert_raises_jsonrpc(-23, "IP/Subnet already banned", self.nodes[2].setban, "127.0.0.1", "add") + # This will throw an exception because 127.0.0.1/42 is not a real subnet + assert_raises_jsonrpc(-30, "Error: Invalid IP/Subnet", self.nodes[2].setban, "127.0.0.1/42", "add") assert_equal(len(self.nodes[2].listbanned()), 1) #still only one banned ip because 127.0.0.1 is within the range of 127.0.0.0/24 - try: - self.nodes[2].setban("127.0.0.1", "remove") - except: - pass + # This will throw an exception because 127.0.0.1 was not added above + assert_raises_jsonrpc(-30, "Error: Unban failed", self.nodes[2].setban, "127.0.0.1", "remove") assert_equal(len(self.nodes[2].listbanned()), 1) self.nodes[2].setban("127.0.0.0/24", "remove") assert_equal(len(self.nodes[2].listbanned()), 0) diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index 8706b429515..42f5db94f94 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -506,7 +506,7 @@ UniValue setban(const JSONRPCRequest& request) LookupSubNet(request.params[0].get_str().c_str(), subNet); if (! (isSubnet ? subNet.IsValid() : netAddr.IsValid()) ) - throw JSONRPCError(RPC_CLIENT_NODE_ALREADY_ADDED, "Error: Invalid IP/Subnet"); + throw JSONRPCError(RPC_CLIENT_INVALID_IP_OR_SUBNET, "Error: Invalid IP/Subnet"); if (strCommand == "add") { @@ -526,7 +526,7 @@ UniValue setban(const JSONRPCRequest& request) else if(strCommand == "remove") { if (!( isSubnet ? g_connman->Unban(subNet) : g_connman->Unban(netAddr) )) - throw JSONRPCError(RPC_MISC_ERROR, "Error: Unban failed"); + throw JSONRPCError(RPC_CLIENT_INVALID_IP_OR_SUBNET, "Error: Unban failed. Requested address/subnet was not previously banned."); } return NullUniValue; } From f5efe82a832a050d1e8f483904913d238dde2e93 Mon Sep 17 00:00:00 2001 From: John Newbery Date: Thu, 9 Feb 2017 15:48:39 -0500 Subject: [PATCH 115/136] Return correct error codes in fundrawtransaction(). The fundrawtransaction() RPC was returning misleading or incorrect error codes (for example RPC_INTERNAL_ERROR when funding the transaction failed). This commit fixes those error codes: - RPC_INTERNAL_ERROR should not be returned for application-level errors, only for genuine internal errors such as corrupted data. That error code has been replaced with RPC_WALLET_ERROR. This commit also updates the test cases to explicitly test the error code. Github-Pull: #9853 Rebased-From: dab804c18a427901684ebe936b2069a97e04a268 --- qa/rpc-tests/fundrawtransaction.py | 40 ++++++-------------------------------- qa/rpc-tests/rawtransactions.py | 21 +++++++++----------- src/wallet/rpcwallet.cpp | 2 +- 3 files changed, 16 insertions(+), 47 deletions(-) diff --git a/qa/rpc-tests/fundrawtransaction.py b/qa/rpc-tests/fundrawtransaction.py index cdea390e224..511faf740eb 100755 --- a/qa/rpc-tests/fundrawtransaction.py +++ b/qa/rpc-tests/fundrawtransaction.py @@ -186,12 +186,7 @@ def run_test(self): dec_tx = self.nodes[2].decoderawtransaction(rawtx) assert_equal(utx['txid'], dec_tx['vin'][0]['txid']) - try: - self.nodes[2].fundrawtransaction(rawtx, {'foo': 'bar'}) - raise AssertionError("Accepted invalid option foo") - except JSONRPCException as e: - assert("Unexpected key foo" in e.error['message']) - + assert_raises_jsonrpc(-3, "Unexpected key foo", self.nodes[2].fundrawtransaction, rawtx, {'foo':'bar'}) ############################################################ # test a fundrawtransaction with an invalid change address # @@ -204,12 +199,7 @@ def run_test(self): dec_tx = self.nodes[2].decoderawtransaction(rawtx) assert_equal(utx['txid'], dec_tx['vin'][0]['txid']) - try: - self.nodes[2].fundrawtransaction(rawtx, {'changeAddress': 'foobar'}) - raise AssertionError("Accepted invalid bitcoin address") - except JSONRPCException as e: - assert("changeAddress must be a valid bitcoin address" in e.error['message']) - + assert_raises_jsonrpc(-5, "changeAddress must be a valid bitcoin address", self.nodes[2].fundrawtransaction, rawtx, {'changeAddress':'foobar'}) ############################################################ # test a fundrawtransaction with a provided change address # @@ -223,12 +213,7 @@ def run_test(self): assert_equal(utx['txid'], dec_tx['vin'][0]['txid']) change = self.nodes[2].getnewaddress() - try: - rawtxfund = self.nodes[2].fundrawtransaction(rawtx, {'changeAddress': change, 'changePosition': 2}) - except JSONRPCException as e: - assert('changePosition out of bounds' == e.error['message']) - else: - assert(False) + assert_raises_jsonrpc(-8, "changePosition out of bounds", self.nodes[2].fundrawtransaction, rawtx, {'changeAddress':change, 'changePosition':2}) rawtxfund = self.nodes[2].fundrawtransaction(rawtx, {'changeAddress': change, 'changePosition': 0}) dec_tx = self.nodes[2].decoderawtransaction(rawtxfund['hex']) out = dec_tx['vout'][0] @@ -337,12 +322,7 @@ def run_test(self): rawtx = self.nodes[2].createrawtransaction(inputs, outputs) dec_tx = self.nodes[2].decoderawtransaction(rawtx) - try: - rawtxfund = self.nodes[2].fundrawtransaction(rawtx) - raise AssertionError("Spent more than available") - except JSONRPCException as e: - assert("Insufficient" in e.error['message']) - + assert_raises_jsonrpc(-4, "Insufficient funds", self.nodes[2].fundrawtransaction, rawtx) ############################################################ #compare fee of a standard pubkeyhash transaction @@ -498,21 +478,13 @@ def run_test(self): rawTx = self.nodes[1].createrawtransaction(inputs, outputs) # fund a transaction that requires a new key for the change output # creating the key must be impossible because the wallet is locked - try: - fundedTx = self.nodes[1].fundrawtransaction(rawTx) - raise AssertionError("Wallet unlocked without passphrase") - except JSONRPCException as e: - assert('Keypool ran out' in e.error['message']) + assert_raises_jsonrpc(-4, "Insufficient funds", self.nodes[1].fundrawtransaction, rawtx) #refill the keypool self.nodes[1].walletpassphrase("test", 100) self.nodes[1].walletlock() - try: - self.nodes[1].sendtoaddress(self.nodes[0].getnewaddress(), 1.2) - raise AssertionError("Wallet unlocked without passphrase") - except JSONRPCException as e: - assert('walletpassphrase' in e.error['message']) + assert_raises_jsonrpc(-13, "walletpassphrase", self.nodes[1].sendtoaddress, self.nodes[0].getnewaddress(), 1.2) oldBalance = self.nodes[0].getbalance() diff --git a/qa/rpc-tests/rawtransactions.py b/qa/rpc-tests/rawtransactions.py index 33a6f2b0cca..2e27bbabb03 100755 --- a/qa/rpc-tests/rawtransactions.py +++ b/qa/rpc-tests/rawtransactions.py @@ -61,13 +61,8 @@ def run_test(self): rawtx = self.nodes[2].createrawtransaction(inputs, outputs) rawtx = self.nodes[2].signrawtransaction(rawtx) - try: - rawtx = self.nodes[2].sendrawtransaction(rawtx['hex']) - except JSONRPCException as e: - assert("Missing inputs" in e.error['message']) - else: - assert(False) - + # This will raise an exception since there are missing inputs + assert_raises_jsonrpc(-25, "Missing inputs", self.nodes[2].sendrawtransaction, rawtx['hex']) ######################### # RAW TX MULTISIG TESTS # @@ -161,13 +156,13 @@ def run_test(self): assert_equal(self.nodes[0].getrawtransaction(txHash, True)["hex"], rawTxSigned['hex']) # 6. invalid parameters - supply txid and string "Flase" - assert_raises(JSONRPCException, self.nodes[0].getrawtransaction, txHash, "Flase") + assert_raises_jsonrpc(-3,"Invalid type", self.nodes[0].getrawtransaction, txHash, "Flase") # 7. invalid parameters - supply txid and empty array - assert_raises(JSONRPCException, self.nodes[0].getrawtransaction, txHash, []) + assert_raises_jsonrpc(-3,"Invalid type", self.nodes[0].getrawtransaction, txHash, []) # 8. invalid parameters - supply txid and empty dict - assert_raises(JSONRPCException, self.nodes[0].getrawtransaction, txHash, {}) + assert_raises_jsonrpc(-3,"Invalid type", self.nodes[0].getrawtransaction, txHash, {}) inputs = [ {'txid' : "1d1d4e24ed99057e84c3f80fd8fbec79ed9e1acee37da269356ecea000000000", 'vout' : 1, 'sequence' : 1000}] outputs = { self.nodes[0].getnewaddress() : 1 } @@ -175,13 +170,15 @@ def run_test(self): decrawtx= self.nodes[0].decoderawtransaction(rawtx) assert_equal(decrawtx['vin'][0]['sequence'], 1000) + # 9. invalid parameters - sequence number out of range inputs = [ {'txid' : "1d1d4e24ed99057e84c3f80fd8fbec79ed9e1acee37da269356ecea000000000", 'vout' : 1, 'sequence' : -1}] outputs = { self.nodes[0].getnewaddress() : 1 } - assert_raises(JSONRPCException, self.nodes[0].createrawtransaction, inputs, outputs) + assert_raises_jsonrpc(-8, 'Invalid parameter, sequence number is out of range', self.nodes[0].createrawtransaction, inputs, outputs) + # 10. invalid parameters - sequence number out of range inputs = [ {'txid' : "1d1d4e24ed99057e84c3f80fd8fbec79ed9e1acee37da269356ecea000000000", 'vout' : 1, 'sequence' : 4294967296}] outputs = { self.nodes[0].getnewaddress() : 1 } - assert_raises(JSONRPCException, self.nodes[0].createrawtransaction, inputs, outputs) + assert_raises_jsonrpc(-8, 'Invalid parameter, sequence number is out of range', self.nodes[0].createrawtransaction, inputs, outputs) inputs = [ {'txid' : "1d1d4e24ed99057e84c3f80fd8fbec79ed9e1acee37da269356ecea000000000", 'vout' : 1, 'sequence' : 4294967294}] outputs = { self.nodes[0].getnewaddress() : 1 } diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index c141c0ca159..7cc03201650 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -2657,7 +2657,7 @@ UniValue fundrawtransaction(const JSONRPCRequest& request) string strFailReason; if(!pwalletMain->FundTransaction(tx, nFeeOut, overrideEstimatedFeerate, feeRate, changePosition, strFailReason, includeWatching, lockUnspents, setSubtractFeeFromOutputs, reserveChangeKey, changeAddress)) - throw JSONRPCError(RPC_INTERNAL_ERROR, strFailReason); + throw JSONRPCError(RPC_WALLET_ERROR, strFailReason); UniValue result(UniValue::VOBJ); result.push_back(Pair("hex", EncodeHexTx(tx))); From c25d0a8739cfcb736ddbf4a5204f25830842eb46 Mon Sep 17 00:00:00 2001 From: John Newbery Date: Wed, 8 Mar 2017 14:23:16 -0500 Subject: [PATCH 116/136] Update release notes to include RPC error code changes. Github-Pull: #9853 Rebased-From: adaa281da12bcc697779f97973cea6b103eec4ab --- doc/release-notes.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/doc/release-notes.md b/doc/release-notes.md index 1fbade55a73..248c2f15258 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -30,6 +30,55 @@ frequently tested on them. Notable changes =============== +Low-level RPC changes +--------------------- + +- Error codes have been updated to be more accurate for the following error cases: + - `getblock` now returns RPC_MISC_ERROR if the block can't be found on disk (for + example if the block has been pruned). Previously returned RPC_INTERNAL_ERROR. + - `pruneblockchain` now returns RPC_MISC_ERROR if the blocks cannot be pruned + because the node is not in pruned mode. Previously returned RPC_METHOD_NOT_FOUND. + - `pruneblockchain` now returns RPC_INVALID_PARAMETER if the blocks cannot be pruned + because the supplied timestamp is too late. Previously returned RPC_INTERNAL_ERROR. + - `pruneblockchain` now returns RPC_MISC_ERROR if the blocks cannot be pruned + because the blockchain is too short. Previously returned RPC_INTERNAL_ERROR. + - `setban` now returns RPC_CLIENT_INVALID_IP_OR_SUBNET if the supplied IP address + or subnet is invalid. Previously returned RPC_CLIENT_NODE_ALREADY_ADDED. + - `setban` now returns RPC_CLIENT_INVALID_IP_OR_SUBNET if the user tries to unban + a node that has not previously been banned. Previously returned RPC_MISC_ERROR. + - `removeprunedfunds` now returns RPC_WALLET_ERROR if bitcoind is unable to remove + the transaction. Previously returned RPC_INTERNAL_ERROR. + - `removeprunedfunds` now returns RPC_INVALID_PARAMETER if the transaction does not + exist in the wallet. Previously returned RPC_INTERNAL_ERROR. + - `fundrawtransaction` now returns RPC_INVALID_ADDRESS_OR_KEY if an invalid change + address is provided. Previously returned RPC_INVALID_PARAMETER. + - `fundrawtransaction` now returns RPC_WALLET_ERROR if bitcoind is unable to create + the transaction. The error message provides further details. Previously returned + RPC_INTERNAL_ERROR. + - `bumpfee` now returns RPC_INVALID_PARAMETER if the provided transaction has + descendants in the wallet. Previously returned RPC_MISC_ERROR. + - `bumpfee` now returns RPC_INVALID_PARAMETER if the provided transaction has + descendants in the mempool. Previously returned RPC_MISC_ERROR. + - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction has + has been mined or conflicts with a mined transaction. Previously returned + RPC_INVALID_ADDRESS_OR_KEY. + - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction is not + BIP 125 replaceable. Previously returned RPC_INVALID_ADDRESS_OR_KEY. + - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction has already + been bumped by a different transaction. Previously returned RPC_INVALID_REQUEST. + - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction contains + inputs which don't belong to this wallet. Previously returned RPC_INVALID_ADDRESS_OR_KEY. + - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction has multiple change + outputs. Previously returned RPC_MISC_ERROR. + - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction has no change + output. Previously returned RPC_MISC_ERROR. + - `bumpfee` now returns RPC_WALLET_ERROR if the fee is too high. Previously returned + RPC_MISC_ERROR. + - `bumpfee` now returns RPC_WALLET_ERROR if the fee is too low. Previously returned + RPC_MISC_ERROR. + - `bumpfee` now returns RPC_WALLET_ERROR if the change output is too small to bump the + fee. Previously returned RPC_MISC_ERROR. + miniupnp CVE-2017-8798 ---------------------------- From 5bc75bb8eea566258ddd9c858e2cf6361318d777 Mon Sep 17 00:00:00 2001 From: John Newbery Date: Wed, 19 Apr 2017 11:07:44 -0400 Subject: [PATCH 117/136] [tests] fix nodehandling.py flake8 warnings Github-Pull: #10143 Rebased-From: d6564a26f4afc28d7d1a24b94946916387c9bf24 --- qa/rpc-tests/nodehandling.py | 46 +++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/qa/rpc-tests/nodehandling.py b/qa/rpc-tests/nodehandling.py index 634dba7c8e6..95dec42fe09 100755 --- a/qa/rpc-tests/nodehandling.py +++ b/qa/rpc-tests/nodehandling.py @@ -6,13 +6,19 @@ # # Test node handling # +import time +import urllib.parse from test_framework.test_framework import BitcoinTestFramework -from test_framework.util import * - -import urllib.parse +from test_framework.util import (assert_equal, + assert_raises_jsonrpc, + connect_nodes_bi, + p2p_port, + start_node, + stop_node, + ) -class NodeHandlingTest (BitcoinTestFramework): +class NodeHandlingTest(BitcoinTestFramework): def __init__(self): super().__init__() @@ -23,10 +29,10 @@ def run_test(self): ########################### # setban/listbanned tests # ########################### - assert_equal(len(self.nodes[2].getpeerinfo()), 4) #we should have 4 nodes at this point + assert_equal(len(self.nodes[2].getpeerinfo()), 4) # we should have 4 nodes at this point self.nodes[2].setban("127.0.0.1", "add") - time.sleep(3) #wait till the nodes are disconected - assert_equal(len(self.nodes[2].getpeerinfo()), 0) #all nodes must be disconnected at this point + time.sleep(3) # wait till the nodes are disconected + assert_equal(len(self.nodes[2].getpeerinfo()), 0) # all nodes must be disconnected at this point assert_equal(len(self.nodes[2].listbanned()), 1) self.nodes[2].clearbanned() assert_equal(len(self.nodes[2].listbanned()), 0) @@ -36,7 +42,7 @@ def run_test(self): assert_raises_jsonrpc(-23, "IP/Subnet already banned", self.nodes[2].setban, "127.0.0.1", "add") # This will throw an exception because 127.0.0.1/42 is not a real subnet assert_raises_jsonrpc(-30, "Error: Invalid IP/Subnet", self.nodes[2].setban, "127.0.0.1/42", "add") - assert_equal(len(self.nodes[2].listbanned()), 1) #still only one banned ip because 127.0.0.1 is within the range of 127.0.0.0/24 + assert_equal(len(self.nodes[2].listbanned()), 1) # still only one banned ip because 127.0.0.1 is within the range of 127.0.0.0/24 # This will throw an exception because 127.0.0.1 was not added above assert_raises_jsonrpc(-30, "Error: Unban failed", self.nodes[2].setban, "127.0.0.1", "remove") assert_equal(len(self.nodes[2].listbanned()), 1) @@ -45,16 +51,16 @@ def run_test(self): self.nodes[2].clearbanned() assert_equal(len(self.nodes[2].listbanned()), 0) - ##test persisted banlist + # test persisted banlist self.nodes[2].setban("127.0.0.0/32", "add") self.nodes[2].setban("127.0.0.0/24", "add") - self.nodes[2].setban("192.168.0.1", "add", 1) #ban for 1 seconds - self.nodes[2].setban("2001:4d48:ac57:400:cacf:e9ff:fe1d:9c63/19", "add", 1000) #ban for 1000 seconds + self.nodes[2].setban("192.168.0.1", "add", 1) # ban for 1 seconds + self.nodes[2].setban("2001:4d48:ac57:400:cacf:e9ff:fe1d:9c63/19", "add", 1000) # ban for 1000 seconds listBeforeShutdown = self.nodes[2].listbanned() - assert_equal("192.168.0.1/32", listBeforeShutdown[2]['address']) #must be here - time.sleep(2) #make 100% sure we expired 192.168.0.1 node time + assert_equal("192.168.0.1/32", listBeforeShutdown[2]['address']) # must be here + time.sleep(2) # make 100% sure we expired 192.168.0.1 node time - #stop node + # stop node stop_node(self.nodes[2], 2) self.nodes[2] = start_node(2, self.options.tmpdir) @@ -67,17 +73,17 @@ def run_test(self): # RPC disconnectnode test # ########################### url = urllib.parse.urlparse(self.nodes[1].url) - self.nodes[0].disconnectnode(url.hostname+":"+str(p2p_port(1))) - time.sleep(2) #disconnecting a node needs a little bit of time + self.nodes[0].disconnectnode(url.hostname + ":" + str(p2p_port(1))) + time.sleep(2) # disconnecting a node needs a little bit of time for node in self.nodes[0].getpeerinfo(): - assert(node['addr'] != url.hostname+":"+str(p2p_port(1))) + assert(node['addr'] != url.hostname + ":" + str(p2p_port(1))) - connect_nodes_bi(self.nodes,0,1) #reconnect the node + connect_nodes_bi(self.nodes, 0, 1) # reconnect the node found = False for node in self.nodes[0].getpeerinfo(): - if node['addr'] == url.hostname+":"+str(p2p_port(1)): + if node['addr'] == url.hostname + ":" + str(p2p_port(1)): found = True assert(found) if __name__ == '__main__': - NodeHandlingTest ().main () + NodeHandlingTest().main() From bfd1cf6713f1f44b88b135c995b9ddb9e99ff7aa Mon Sep 17 00:00:00 2001 From: John Newbery Date: Wed, 19 Apr 2017 11:25:31 -0400 Subject: [PATCH 118/136] [tests] disconnectban test - only use two nodes Github-Pull: #10143 Rebased-From: 395561becfa612fedec74fd841cb4f28afdc23d7 --- qa/rpc-tests/nodehandling.py | 60 +++++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/qa/rpc-tests/nodehandling.py b/qa/rpc-tests/nodehandling.py index 95dec42fe09..ec32cb069fb 100755 --- a/qa/rpc-tests/nodehandling.py +++ b/qa/rpc-tests/nodehandling.py @@ -22,53 +22,61 @@ class NodeHandlingTest(BitcoinTestFramework): def __init__(self): super().__init__() - self.num_nodes = 4 + self.num_nodes = 2 self.setup_clean_chain = False + def setup_network(self): + self.nodes = self.setup_nodes() + connect_nodes_bi(self.nodes, 0, 1) + def run_test(self): ########################### # setban/listbanned tests # ########################### - assert_equal(len(self.nodes[2].getpeerinfo()), 4) # we should have 4 nodes at this point - self.nodes[2].setban("127.0.0.1", "add") + assert_equal(len(self.nodes[1].getpeerinfo()), 2) # node1 should have 2 connections to node0 at this point + self.nodes[1].setban("127.0.0.1", "add") time.sleep(3) # wait till the nodes are disconected - assert_equal(len(self.nodes[2].getpeerinfo()), 0) # all nodes must be disconnected at this point - assert_equal(len(self.nodes[2].listbanned()), 1) - self.nodes[2].clearbanned() - assert_equal(len(self.nodes[2].listbanned()), 0) - self.nodes[2].setban("127.0.0.0/24", "add") - assert_equal(len(self.nodes[2].listbanned()), 1) + assert_equal(len(self.nodes[1].getpeerinfo()), 0) # all nodes must be disconnected at this point + assert_equal(len(self.nodes[1].listbanned()), 1) + self.nodes[1].clearbanned() + assert_equal(len(self.nodes[1].listbanned()), 0) + self.nodes[1].setban("127.0.0.0/24", "add") + assert_equal(len(self.nodes[1].listbanned()), 1) # This will throw an exception because 127.0.0.1 is within range 127.0.0.0/24 - assert_raises_jsonrpc(-23, "IP/Subnet already banned", self.nodes[2].setban, "127.0.0.1", "add") + assert_raises_jsonrpc(-23, "IP/Subnet already banned", self.nodes[1].setban, "127.0.0.1", "add") # This will throw an exception because 127.0.0.1/42 is not a real subnet - assert_raises_jsonrpc(-30, "Error: Invalid IP/Subnet", self.nodes[2].setban, "127.0.0.1/42", "add") - assert_equal(len(self.nodes[2].listbanned()), 1) # still only one banned ip because 127.0.0.1 is within the range of 127.0.0.0/24 + assert_raises_jsonrpc(-30, "Error: Invalid IP/Subnet", self.nodes[1].setban, "127.0.0.1/42", "add") + assert_equal(len(self.nodes[1].listbanned()), 1) # still only one banned ip because 127.0.0.1 is within the range of 127.0.0.0/24 # This will throw an exception because 127.0.0.1 was not added above - assert_raises_jsonrpc(-30, "Error: Unban failed", self.nodes[2].setban, "127.0.0.1", "remove") - assert_equal(len(self.nodes[2].listbanned()), 1) - self.nodes[2].setban("127.0.0.0/24", "remove") - assert_equal(len(self.nodes[2].listbanned()), 0) - self.nodes[2].clearbanned() - assert_equal(len(self.nodes[2].listbanned()), 0) + assert_raises_jsonrpc(-30, "Error: Unban failed", self.nodes[1].setban, "127.0.0.1", "remove") + assert_equal(len(self.nodes[1].listbanned()), 1) + self.nodes[1].setban("127.0.0.0/24", "remove") + assert_equal(len(self.nodes[1].listbanned()), 0) + self.nodes[1].clearbanned() + assert_equal(len(self.nodes[1].listbanned()), 0) # test persisted banlist - self.nodes[2].setban("127.0.0.0/32", "add") - self.nodes[2].setban("127.0.0.0/24", "add") - self.nodes[2].setban("192.168.0.1", "add", 1) # ban for 1 seconds - self.nodes[2].setban("2001:4d48:ac57:400:cacf:e9ff:fe1d:9c63/19", "add", 1000) # ban for 1000 seconds - listBeforeShutdown = self.nodes[2].listbanned() + self.nodes[1].setban("127.0.0.0/32", "add") + self.nodes[1].setban("127.0.0.0/24", "add") + self.nodes[1].setban("192.168.0.1", "add", 1) # ban for 1 seconds + self.nodes[1].setban("2001:4d48:ac57:400:cacf:e9ff:fe1d:9c63/19", "add", 1000) # ban for 1000 seconds + listBeforeShutdown = self.nodes[1].listbanned() assert_equal("192.168.0.1/32", listBeforeShutdown[2]['address']) # must be here time.sleep(2) # make 100% sure we expired 192.168.0.1 node time # stop node - stop_node(self.nodes[2], 2) + stop_node(self.nodes[1], 1) - self.nodes[2] = start_node(2, self.options.tmpdir) - listAfterShutdown = self.nodes[2].listbanned() + self.nodes[1] = start_node(1, self.options.tmpdir) + listAfterShutdown = self.nodes[1].listbanned() assert_equal("127.0.0.0/24", listAfterShutdown[0]['address']) assert_equal("127.0.0.0/32", listAfterShutdown[1]['address']) assert_equal("/19" in listAfterShutdown[2]['address'], True) + # Clear ban lists + self.nodes[1].clearbanned() + connect_nodes_bi(self.nodes, 0, 1) + ########################### # RPC disconnectnode test # ########################### From 98bd0c338b1886d12ea3d90597ab0438acbc07ff Mon Sep 17 00:00:00 2001 From: John Newbery Date: Wed, 19 Apr 2017 12:42:39 -0400 Subject: [PATCH 119/136] [tests] disconnect_ban: use wait_until instead of sleep Github-Pull: #10143 Rebased-From: 12de2f252c8f48e05c579cb679866a68af8c660e --- qa/rpc-tests/nodehandling.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/qa/rpc-tests/nodehandling.py b/qa/rpc-tests/nodehandling.py index ec32cb069fb..f540d3aa958 100755 --- a/qa/rpc-tests/nodehandling.py +++ b/qa/rpc-tests/nodehandling.py @@ -6,9 +6,9 @@ # # Test node handling # -import time import urllib.parse +from test_framework.mininode import wait_until from test_framework.test_framework import BitcoinTestFramework from test_framework.util import (assert_equal, assert_raises_jsonrpc, @@ -35,7 +35,7 @@ def run_test(self): ########################### assert_equal(len(self.nodes[1].getpeerinfo()), 2) # node1 should have 2 connections to node0 at this point self.nodes[1].setban("127.0.0.1", "add") - time.sleep(3) # wait till the nodes are disconected + wait_until(lambda: len(self.nodes[1].getpeerinfo()) == 0) assert_equal(len(self.nodes[1].getpeerinfo()), 0) # all nodes must be disconnected at this point assert_equal(len(self.nodes[1].listbanned()), 1) self.nodes[1].clearbanned() @@ -61,10 +61,9 @@ def run_test(self): self.nodes[1].setban("192.168.0.1", "add", 1) # ban for 1 seconds self.nodes[1].setban("2001:4d48:ac57:400:cacf:e9ff:fe1d:9c63/19", "add", 1000) # ban for 1000 seconds listBeforeShutdown = self.nodes[1].listbanned() - assert_equal("192.168.0.1/32", listBeforeShutdown[2]['address']) # must be here - time.sleep(2) # make 100% sure we expired 192.168.0.1 node time + assert_equal("192.168.0.1/32", listBeforeShutdown[2]['address']) + wait_until(lambda: len(self.nodes[1].listbanned()) == 3) - # stop node stop_node(self.nodes[1], 1) self.nodes[1] = start_node(1, self.options.tmpdir) @@ -82,7 +81,7 @@ def run_test(self): ########################### url = urllib.parse.urlparse(self.nodes[1].url) self.nodes[0].disconnectnode(url.hostname + ":" + str(p2p_port(1))) - time.sleep(2) # disconnecting a node needs a little bit of time + wait_until(lambda: len(self.nodes[0].getpeerinfo()) == 1) for node in self.nodes[0].getpeerinfo(): assert(node['addr'] != url.hostname + ":" + str(p2p_port(1))) From 04226938a3c675faaca81906ae9ff7a936bcb6a7 Mon Sep 17 00:00:00 2001 From: John Newbery Date: Wed, 19 Apr 2017 13:35:51 -0400 Subject: [PATCH 120/136] [tests] disconnect_ban: remove dependency on urllib Github-Pull: #10143 Rebased-From: 5cc3ee24d29397737f2746d78b19a2509c0dedbb --- qa/rpc-tests/nodehandling.py | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/qa/rpc-tests/nodehandling.py b/qa/rpc-tests/nodehandling.py index f540d3aa958..df6e2bc6af3 100755 --- a/qa/rpc-tests/nodehandling.py +++ b/qa/rpc-tests/nodehandling.py @@ -6,14 +6,12 @@ # # Test node handling # -import urllib.parse from test_framework.mininode import wait_until from test_framework.test_framework import BitcoinTestFramework from test_framework.util import (assert_equal, assert_raises_jsonrpc, connect_nodes_bi, - p2p_port, start_node, stop_node, ) @@ -79,18 +77,13 @@ def run_test(self): ########################### # RPC disconnectnode test # ########################### - url = urllib.parse.urlparse(self.nodes[1].url) - self.nodes[0].disconnectnode(url.hostname + ":" + str(p2p_port(1))) + address1 = self.nodes[0].getpeerinfo()[0]['addr'] + self.nodes[0].disconnectnode(address=address1) wait_until(lambda: len(self.nodes[0].getpeerinfo()) == 1) - for node in self.nodes[0].getpeerinfo(): - assert(node['addr'] != url.hostname + ":" + str(p2p_port(1))) + assert not [node for node in self.nodes[0].getpeerinfo() if node['addr'] == address1] connect_nodes_bi(self.nodes, 0, 1) # reconnect the node - found = False - for node in self.nodes[0].getpeerinfo(): - if node['addr'] == url.hostname + ":" + str(p2p_port(1)): - found = True - assert(found) + assert [node for node in self.nodes[0].getpeerinfo() if node['addr'] == address1] if __name__ == '__main__': NodeHandlingTest().main() From d289b564e3ae125cb54c3d9157a13e7bad48c5f5 Mon Sep 17 00:00:00 2001 From: John Newbery Date: Wed, 19 Apr 2017 12:49:11 -0400 Subject: [PATCH 121/136] [net] listbanned RPC and QT should show correct banned subnets Github-Pull: #10234 Rebased-From: 77c54b270dd3b469d662c8f69e06f7b00fc4136d --- src/net.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/net.cpp b/src/net.cpp index 1752c7707a7..5bc886c3408 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -413,10 +413,10 @@ void CConnman::DumpBanlist() CBanDB bandb; banmap_t banmap; - SetBannedSetDirty(false); GetBanned(banmap); - if (!bandb.Write(banmap)) - SetBannedSetDirty(true); + if (bandb.Write(banmap)) { + SetBannedSetDirty(false); + } LogPrint("net", "Flushed %d banned node ips/subnets to banlist.dat %dms\n", banmap.size(), GetTimeMillis() - nStart); @@ -536,6 +536,8 @@ bool CConnman::Unban(const CSubNet &subNet) { void CConnman::GetBanned(banmap_t &banMap) { LOCK(cs_setBanned); + // Sweep the banlist so expired bans are not returned + SweepBanned(); banMap = setBanned; //create a thread safe copy } From ee1a60d15609930954b1b85da7f33774711123cd Mon Sep 17 00:00:00 2001 From: John Newbery Date: Tue, 25 Apr 2017 10:11:31 -0400 Subject: [PATCH 122/136] [tests] update disconnect_ban.py test case to work with listbanned Github-Pull: #10234 Rebased-From: d6732d832aa901e733e63799260d409821a2c37a --- qa/rpc-tests/nodehandling.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/qa/rpc-tests/nodehandling.py b/qa/rpc-tests/nodehandling.py index df6e2bc6af3..61be27ae2b6 100755 --- a/qa/rpc-tests/nodehandling.py +++ b/qa/rpc-tests/nodehandling.py @@ -33,7 +33,7 @@ def run_test(self): ########################### assert_equal(len(self.nodes[1].getpeerinfo()), 2) # node1 should have 2 connections to node0 at this point self.nodes[1].setban("127.0.0.1", "add") - wait_until(lambda: len(self.nodes[1].getpeerinfo()) == 0) + assert wait_until(lambda: len(self.nodes[1].getpeerinfo()) == 0, timeout=10) assert_equal(len(self.nodes[1].getpeerinfo()), 0) # all nodes must be disconnected at this point assert_equal(len(self.nodes[1].listbanned()), 1) self.nodes[1].clearbanned() @@ -60,7 +60,7 @@ def run_test(self): self.nodes[1].setban("2001:4d48:ac57:400:cacf:e9ff:fe1d:9c63/19", "add", 1000) # ban for 1000 seconds listBeforeShutdown = self.nodes[1].listbanned() assert_equal("192.168.0.1/32", listBeforeShutdown[2]['address']) - wait_until(lambda: len(self.nodes[1].listbanned()) == 3) + assert wait_until(lambda: len(self.nodes[1].listbanned()) == 3, timeout=10) stop_node(self.nodes[1], 1) @@ -79,7 +79,7 @@ def run_test(self): ########################### address1 = self.nodes[0].getpeerinfo()[0]['addr'] self.nodes[0].disconnectnode(address=address1) - wait_until(lambda: len(self.nodes[0].getpeerinfo()) == 1) + assert wait_until(lambda: len(self.nodes[0].getpeerinfo()) == 1, timeout=10) assert not [node for node in self.nodes[0].getpeerinfo() if node['addr'] == address1] connect_nodes_bi(self.nodes, 0, 1) # reconnect the node From e23cef0c9469cc360e603a614bb3f0b22c6656bf Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Thu, 13 Apr 2017 02:33:04 -0700 Subject: [PATCH 123/136] Fix some empty vector references streams.h has some methods that can be tricked into dereferencing null pointers or end() iterators. Fix this. Github-Pull: #10250 Rebased-From: f478d98fe49d3c0c0f2c79b3f8d9dbfc1aafd407 --- src/streams.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/streams.h b/src/streams.h index 1d3b55c91ef..e49a9e35469 100644 --- a/src/streams.h +++ b/src/streams.h @@ -248,7 +248,8 @@ class CDataStream void insert(iterator it, std::vector::const_iterator first, std::vector::const_iterator last) { - assert(last - first >= 0); + if (last == first) return; + assert(last - first > 0); if (it == vch.begin() + nReadPos && (unsigned int)(last - first) <= nReadPos) { // special case for inserting at the front when there's room @@ -261,7 +262,8 @@ class CDataStream void insert(iterator it, const char* first, const char* last) { - assert(last - first >= 0); + if (last == first) return; + assert(last - first > 0); if (it == vch.begin() + nReadPos && (unsigned int)(last - first) <= nReadPos) { // special case for inserting at the front when there's room @@ -339,6 +341,8 @@ class CDataStream void read(char* pch, size_t nSize) { + if (nSize == 0) return; + // Read from the beginning of the buffer unsigned int nReadPosNext = nReadPos + nSize; if (nReadPosNext >= vch.size()) From ff13f592c5813b18340a6e9e65abb4e356aac400 Mon Sep 17 00:00:00 2001 From: Karl-Johan Alm Date: Mon, 24 Apr 2017 08:48:12 +0900 Subject: [PATCH 124/136] [wallet] Make sure pindex is non-null before possibly referencing in LogPrintf call. Github-Pull: #10265 Rebased-From: c36ea693ee16611e0337aec682d1ce80b90e1bd3 --- src/wallet/wallet.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 3e93a56d563..2697a3769ac 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -1572,6 +1572,10 @@ CBlockIndex* CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, bool f { if (pindex->nHeight % 100 == 0 && dProgressTip - dProgressStart > 0.0) ShowProgress(_("Rescanning..."), std::max(1, std::min(99, (int)((GuessVerificationProgress(chainParams.TxData(), pindex) - dProgressStart) / (dProgressTip - dProgressStart) * 100)))); + if (GetTime() >= nNow + 60) { + nNow = GetTime(); + LogPrintf("Still rescanning. At block %d. Progress=%f\n", pindex->nHeight, GuessVerificationProgress(chainParams.TxData(), pindex)); + } CBlock block; if (ReadBlockFromDisk(block, pindex, Params().GetConsensus())) { @@ -1585,10 +1589,6 @@ CBlockIndex* CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, bool f ret = nullptr; } pindex = chainActive.Next(pindex); - if (GetTime() >= nNow + 60) { - nNow = GetTime(); - LogPrintf("Still rescanning. At block %d. Progress=%f\n", pindex->nHeight, GuessVerificationProgress(chainParams.TxData(), pindex)); - } } ShowProgress(_("Rescanning..."), 100); // hide progress dialog in GUI } From 28b8b8b6038c45ce2dc2e7dc11f88dc834ddd19a Mon Sep 17 00:00:00 2001 From: Thomas Snider Date: Thu, 23 Mar 2017 14:07:51 -0700 Subject: [PATCH 125/136] [wallet] Securely erase potentially sensitive keys/values Github-Pull: #10308 Rebased-From: 6c914ac176624468c66febdb1ad0e24ff2118a5f --- src/support/cleanse.h | 1 + src/wallet/db.h | 43 ++++++++++++++++++++++--------------------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/src/support/cleanse.h b/src/support/cleanse.h index 3e02aa8fd1f..f020216c730 100644 --- a/src/support/cleanse.h +++ b/src/support/cleanse.h @@ -8,6 +8,7 @@ #include +// Attempt to overwrite data in the specified memory span. void memory_cleanse(void *ptr, size_t len); #endif // BITCOIN_SUPPORT_CLEANSE_H diff --git a/src/wallet/db.h b/src/wallet/db.h index b4ce044e7f5..ea562003230 100644 --- a/src/wallet/db.h +++ b/src/wallet/db.h @@ -126,22 +126,23 @@ class CDB Dbt datValue; datValue.set_flags(DB_DBT_MALLOC); int ret = pdb->get(activeTxn, &datKey, &datValue, 0); - memset(datKey.get_data(), 0, datKey.get_size()); - if (datValue.get_data() == NULL) - return false; - - // Unserialize value - try { - CDataStream ssValue((char*)datValue.get_data(), (char*)datValue.get_data() + datValue.get_size(), SER_DISK, CLIENT_VERSION); - ssValue >> value; - } catch (const std::exception&) { - return false; + memory_cleanse(datKey.get_data(), datKey.get_size()); + bool success = false; + if (datValue.get_data() != NULL) { + // Unserialize value + try { + CDataStream ssValue((char*)datValue.get_data(), (char*)datValue.get_data() + datValue.get_size(), SER_DISK, CLIENT_VERSION); + ssValue >> value; + success = true; + } catch (const std::exception&) { + // In this case success remains 'false' + } + + // Clear and free memory + memory_cleanse(datValue.get_data(), datValue.get_size()); + free(datValue.get_data()); } - - // Clear and free memory - memset(datValue.get_data(), 0, datValue.get_size()); - free(datValue.get_data()); - return (ret == 0); + return ret == 0 && success; } template @@ -168,8 +169,8 @@ class CDB int ret = pdb->put(activeTxn, &datKey, &datValue, (fOverwrite ? 0 : DB_NOOVERWRITE)); // Clear memory in case it was a private key - memset(datKey.get_data(), 0, datKey.get_size()); - memset(datValue.get_data(), 0, datValue.get_size()); + memory_cleanse(datKey.get_data(), datKey.get_size()); + memory_cleanse(datValue.get_data(), datValue.get_size()); return (ret == 0); } @@ -191,7 +192,7 @@ class CDB int ret = pdb->del(activeTxn, &datKey, 0); // Clear memory - memset(datKey.get_data(), 0, datKey.get_size()); + memory_cleanse(datKey.get_data(), datKey.get_size()); return (ret == 0 || ret == DB_NOTFOUND); } @@ -211,7 +212,7 @@ class CDB int ret = pdb->exists(activeTxn, &datKey, 0); // Clear memory - memset(datKey.get_data(), 0, datKey.get_size()); + memory_cleanse(datKey.get_data(), datKey.get_size()); return (ret == 0); } @@ -254,8 +255,8 @@ class CDB ssValue.write((char*)datValue.get_data(), datValue.get_size()); // Clear and free memory - memset(datKey.get_data(), 0, datKey.get_size()); - memset(datValue.get_data(), 0, datValue.get_size()); + memory_cleanse(datKey.get_data(), datKey.get_size()); + memory_cleanse(datValue.get_data(), datValue.get_size()); free(datKey.get_data()); free(datValue.get_data()); return 0; From 87a21d5922f3cdc7a7e21090dc7078e0774c1c1f Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Tue, 23 May 2017 10:04:14 -0700 Subject: [PATCH 126/136] Fix: make CCoinsViewDbCursor::Seek work for missing keys Thanks to Suhas Daftuar for figuring this out. Github-Pull: #10445 Rebased-From: 822755a424d0abfa408dc34313f4aca4b816f54f --- src/txdb.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/txdb.cpp b/src/txdb.cpp index 1a30bb58ad8..662e7cb06d3 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -98,7 +98,11 @@ CCoinsViewCursor *CCoinsViewDB::Cursor() const that restriction. */ i->pcursor->Seek(DB_COINS); // Cache key of first record - i->pcursor->GetKey(i->keyTmp); + if (i->pcursor->Valid()) { + i->pcursor->GetKey(i->keyTmp); + } else { + i->keyTmp.first = 0; // Make sure Valid() and GetKey() return false + } return i; } From 692dbb0288d6582e311a47951ff4afd63ea9d90c Mon Sep 17 00:00:00 2001 From: fanquake Date: Sun, 23 Apr 2017 08:47:12 +0800 Subject: [PATCH 127/136] [doc] Minor corrections to osx dependencies Github-Pull: #10260 Rebased-From: 661caf83b3dcae6376e59b6cae07f0a2a4d37fe9 --- doc/build-osx.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/build-osx.md b/doc/build-osx.md index a15bcd012c6..32d7dbd69e7 100644 --- a/doc/build-osx.md +++ b/doc/build-osx.md @@ -11,14 +11,14 @@ Install the OS X command line tools: When the popup appears, click `Install`. -Then install [Homebrew](http://brew.sh). +Then install [Homebrew](https://brew.sh). Dependencies ---------------------- - brew install automake berkeley-db4 libtool boost --c++11 miniupnpc openssl pkg-config protobuf --c++11 qt5 libevent + brew install automake berkeley-db4 libtool boost --c++11 miniupnpc openssl pkg-config protobuf qt libevent -In case you want to build the disk image with `make deploy` (.dmg / optional), you need RSVG +If you want to build the disk image with `make deploy` (.dmg / optional), you need RSVG brew install librsvg From 3612219f9a18a2bd1ddebb1b90f556aa29586bfd Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Thu, 25 May 2017 01:56:03 +0000 Subject: [PATCH 128/136] contrib/init/bitcoind.openrcconf: Don't disable wallet by default It's harmless if it goes unused, and confused when a wallet is desired Github-Pull: #10451 Rebased-From: afc693dea695b75721db55d0decee3b11dcb3625 --- contrib/init/bitcoind.openrcconf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/init/bitcoind.openrcconf b/contrib/init/bitcoind.openrcconf index 0cbff6d30d2..f70e25cb5fd 100644 --- a/contrib/init/bitcoind.openrcconf +++ b/contrib/init/bitcoind.openrcconf @@ -23,7 +23,7 @@ #BITCOIND_NICE=0 # Additional options (avoid -conf and -datadir, use flags above) -BITCOIND_OPTS="-disablewallet" +#BITCOIND_OPTS="" # The timeout in seconds OpenRC will wait for bitcoind to terminate # after a SIGTERM has been raised. From d2ec96909acc3eda76ee507456d8f3722a965921 Mon Sep 17 00:00:00 2001 From: Mikerah Date: Sat, 22 Apr 2017 07:22:17 -0400 Subject: [PATCH 129/136] Fixed typo in documentation for merkleblock.h Github-Pull: #10258 Rebased-From: dd07068d6b11e738bc954c998800b5660d160959 --- src/merkleblock.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/merkleblock.h b/src/merkleblock.h index 73cbf670ee9..de4c5c8d29e 100644 --- a/src/merkleblock.h +++ b/src/merkleblock.h @@ -23,7 +23,7 @@ * storing a bit for each traversed node, signifying whether the node is the * parent of at least one matched leaf txid (or a matched txid itself). In * case we are at the leaf level, or this bit is 0, its merkle node hash is - * stored, and its children are not explorer further. Otherwise, no hash is + * stored, and its children are not explored further. Otherwise, no hash is * stored, but we recurse into both (or the only) child branch. During * decoding, the same depth-first traversal is performed, consuming bits and * hashes as they written during encoding. From 12adedff0bf813f2a2e790f422e41cc8d84cfc99 Mon Sep 17 00:00:00 2001 From: CryptAxe Date: Mon, 1 May 2017 14:18:30 -0700 Subject: [PATCH 130/136] Trivial: remove extra character from comment Github-Pull: #10309 Rebased-From: 3503716f1e37a0cc3ab13c8f4e774061ff4ae2f8 --- src/merkleblock.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/merkleblock.cpp b/src/merkleblock.cpp index e3f3e4621ad..78d7cd60010 100644 --- a/src/merkleblock.cpp +++ b/src/merkleblock.cpp @@ -65,7 +65,7 @@ uint256 CPartialMerkleTree::CalcHash(int height, unsigned int pos, const std::ve } else { // calculate left hash uint256 left = CalcHash(height-1, pos*2, vTxid), right; - // calculate right hash if not beyond the end of the array - copy left hash otherwise1 + // calculate right hash if not beyond the end of the array - copy left hash otherwise if (pos*2+1 < CalcTreeWidth(height-1)) right = CalcHash(height-1, pos*2+1, vTxid); else From 76f9cf9ac9916f9a29b3f236225d49501ccf230a Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Thu, 1 Jun 2017 10:38:29 +0200 Subject: [PATCH 131/136] contrib: Update location of seeds.txt Update the steps for updating the hardcoded seed nodes to point to the new filename on @sipa's server, and add command to decompress it. Ref: #10163 Github-Pull: #10495 Rebased-From: ac9cd953d91e2448d24851b2f4973c7be8f4c3cd --- contrib/seeds/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/seeds/README.md b/contrib/seeds/README.md index afe902fd7f0..139c03181fc 100644 --- a/contrib/seeds/README.md +++ b/contrib/seeds/README.md @@ -8,7 +8,7 @@ and remove old versions as necessary. The seeds compiled into the release are created from sipa's DNS seed data, like this: - curl -s http://bitcoin.sipa.be/seeds.txt > seeds_main.txt + curl -s http://bitcoin.sipa.be/seeds.txt.gz | gzip -dc > seeds_main.txt python3 makeseeds.py < seeds_main.txt > nodes_main.txt python3 generate-seeds.py . > ../../src/chainparamsseeds.h From ff274d3b00737d9f93c85c0bcff51f1f548354b6 Mon Sep 17 00:00:00 2001 From: Karl-Johan Alm Date: Sat, 6 May 2017 12:51:01 +0900 Subject: [PATCH 132/136] [doc] Add hint about getmempoolentry to getrawmempool help. Github-Pull: #10310 Rebased-From: 3a0a5bc2341ea6a453306f6fe1c065b937294cfb --- src/rpc/blockchain.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 6080650f898..fd8f52a5cb0 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -417,6 +417,7 @@ UniValue getrawmempool(const JSONRPCRequest& request) throw runtime_error( "getrawmempool ( verbose )\n" "\nReturns all transaction ids in memory pool as a json array of string transaction ids.\n" + "\nHint: use getmempoolentry to fetch a specific transaction from the mempool.\n" "\nArguments:\n" "1. verbose (boolean, optional, default=false) True for a json object, false for array of transaction ids\n" "\nResult: (for verbose = false):\n" From cc23438af017da8d477e2dbe58a5ba374a691a03 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Tue, 6 Jun 2017 13:05:49 +0000 Subject: [PATCH 133/136] qt: 0.14.2 pre-rc2 translations update --- src/qt/locale/bitcoin_af.ts | 40 ++ src/qt/locale/bitcoin_da.ts | 2 +- src/qt/locale/bitcoin_de.ts | 50 +- src/qt/locale/bitcoin_el_GR.ts | 246 +++++++++- src/qt/locale/bitcoin_en.ts | 18 +- src/qt/locale/bitcoin_fa.ts | 104 ++++ src/qt/locale/bitcoin_fr.ts | 10 +- src/qt/locale/bitcoin_id_ID.ts | 282 ++++++++++- src/qt/locale/bitcoin_it.ts | 222 ++++++++- src/qt/locale/bitcoin_ko_KR.ts | 1020 +++++++++++++++++++++++++++++++++++++--- src/qt/locale/bitcoin_ne.ts | 76 +++ src/qt/locale/bitcoin_nl.ts | 304 +++++++++++- src/qt/locale/bitcoin_ru_RU.ts | 12 +- src/qt/locale/bitcoin_sk.ts | 224 ++++++++- src/qt/locale/bitcoin_uk.ts | 98 +++- src/qt/locale/bitcoin_ur_PK.ts | 24 + src/qt/locale/bitcoin_vi_VN.ts | 20 + 17 files changed, 2596 insertions(+), 156 deletions(-) diff --git a/src/qt/locale/bitcoin_af.ts b/src/qt/locale/bitcoin_af.ts index 9726987b63b..032d5cca4f9 100644 --- a/src/qt/locale/bitcoin_af.ts +++ b/src/qt/locale/bitcoin_af.ts @@ -74,6 +74,10 @@ &Dupliseer Adres + Copy &Label + Kopieer &Etiket + + &Edit &Verander @@ -200,6 +204,14 @@ U het die verkeerde wagwoord ingetik. + Wallet decryption failed + Beursie-dekripsie het misluk + + + Wallet passphrase was successfully changed. + Beursie wagwoordfrase is suksesvol verander. + + Warning: The Caps Lock key is on! WAARSKUWING: Outomatiese Kapitalisering is aktief op u sleutelbord! @@ -207,6 +219,10 @@ BanTableModel + IP/Netmask + IP/Netmasker + + Banned Until Verban tot @@ -214,6 +230,10 @@ BitcoinGUI + Sign &message... + Teken &boodskap... + + Synchronizing with network... Netwerk-sinkronisasie... @@ -294,6 +314,18 @@ Oop & URI... + Click to disable network activity. + Kliek om netwerkaktiwiteit af te skakel. + + + Network activity disabled. + Netwerkaktiwiteit gedeaktiveer. + + + Click to enable network activity again. + Kliek om netwerkaktiwiteit weer aan te skakel. + + Reindexing blocks on disk... Besig met herindeksering van blokke op hardeskyf... @@ -310,6 +342,14 @@ Verander die wagwoord wat ek vir kodifikasie van my beursie gebruik + &Debug window + &Ontfout venster + + + Open debugging and diagnostic console + Maak ontfouting en diagnostiese konsole oop + + Bitcoin Bitcoin diff --git a/src/qt/locale/bitcoin_da.ts b/src/qt/locale/bitcoin_da.ts index 235b48f853d..bc3fcb278e6 100644 --- a/src/qt/locale/bitcoin_da.ts +++ b/src/qt/locale/bitcoin_da.ts @@ -3123,7 +3123,7 @@ Reduce storage requirements by enabling pruning (deleting) of old blocks. This allows the pruneblockchain RPC to be called to delete specific blocks, and enables automatic pruning of old blocks if a target size in MiB is provided. This mode is incompatible with -txindex and -rescan. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, >%u = automatically prune block files to stay under the specified target size in MiB) - Reducér pladskravene ved at beskære (slette, "prune") gamle blokke. Dette tillader pruneblockchain-RPC'en at blive kaldt for at slette specifikke blokke, og det aktiverer automatisk beskæring af gamle blokke, hvis en målstørrelse i MiB er angivet. Denne tilstand er ikke kompatibel med -txindex og -rescan. Advarsel: Fortrydelse af denne indstilling kræver download af hele blokkæden igen. (standard: 0 = slå beskæring af blokke fra, 1 = tillad manuel beskæring via RPC, >%u = beskær automatisk blokfiler for at bliver under den angivne målstørrelse i MiB) + Reducér pladskravene ved at beskære (slette, “prune”) gamle blokke. Dette tillader pruneblockchain-RPC'en at blive kaldt for at slette specifikke blokke, og det aktiverer automatisk beskæring af gamle blokke, hvis en målstørrelse i MiB er angivet. Denne tilstand er ikke kompatibel med -txindex og -rescan. Advarsel: Fortrydelse af denne indstilling kræver download af hele blokkæden igen. (standard: 0 = slå beskæring af blokke fra, 1 = tillad manuel beskæring via RPC, >%u = beskær automatisk blokfiler for at bliver under den angivne målstørrelse i MiB) Set lowest fee rate (in %s/kB) for transactions to be included in block creation. (default: %s) diff --git a/src/qt/locale/bitcoin_de.ts b/src/qt/locale/bitcoin_de.ts index 9bc94cc8ded..1a6c9cc4bad 100644 --- a/src/qt/locale/bitcoin_de.ts +++ b/src/qt/locale/bitcoin_de.ts @@ -43,7 +43,7 @@ Choose the address to send coins to - Wählen Sie die Adresse aus, an die Sie Bitcoins senden möchten + Wählen Sie die Adresse aus, an die Sie Bitcoins überweisen möchten Choose the address to receive coins with @@ -79,7 +79,7 @@ &Edit - &Editieren + B&earbeiten Export Address List @@ -133,7 +133,7 @@ Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>. - Geben Sie die neue Passphrase für die Wallet ein.<br>Bitte benutzen Sie eine Passphrase bestehend aus <b>zehn oder mehr zufälligen Zeichen</b> oder <b>acht oder mehr Wörtern</b>. + Geben Sie die neue Passphrase für die Brieftasche ein.<br>Bitte benutzen Sie eine Passphrase bestehend aus <b>zehn oder mehr zufälligen Zeichen</b> oder <b>acht oder mehr Wörtern</b>. Encrypt wallet @@ -141,7 +141,7 @@ This operation needs your wallet passphrase to unlock the wallet. - Dieser Vorgang benötigt ihre Passphrase, um die Wallet zu entsperren. + Dieser Vorgang benötigt ihre Passphrase, um die Brieftasche zu entsperren. Unlock wallet @@ -149,11 +149,11 @@ This operation needs your wallet passphrase to decrypt the wallet. - Dieser Vorgang benötigt Ihre Passphrase, um die Wallet zu entschlüsseln. + Dieser Vorgang benötigt Ihre Passphrase, um die Brieftasche zu entschlüsseln. Decrypt wallet - Wallet entschlüsseln + Brieftasche entschlüsseln Change passphrase @@ -161,39 +161,39 @@ Enter the old passphrase and new passphrase to the wallet. - Geben Sie die alte und neue Wallet-Passphrase ein. + Geben Sie die alte und neue Brieftschen-Passphrase ein. Confirm wallet encryption - Wallet-Verschlüsselung bestätigen + Brieftaschen-Verschlüsselung bestätigen Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>! - Warnung: Wenn Sie Ihre Wallet verschlüsseln und Ihre Passphrase verlieren, werden Sie <b>alle Ihre Bitcoins verlieren</b>! + Warnung: Wenn Sie Ihre Brieftasche verschlüsseln und Ihre Passphrase verlieren, werden Sie <b>alle Ihre Bitcoins verlieren</b>! Are you sure you wish to encrypt your wallet? - Sind Sie sich sicher, dass Sie Ihre Wallet verschlüsseln möchten? + Sind Sie sich sicher, dass Sie Ihre Brieftasche verschlüsseln möchten? Wallet encrypted - Wallet verschlüsselt + Brieftasche verschlüsselt %1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. - %1 wird jetzt beendet, um den Verschlüsselungsprozess abzuschließen. Bitte beachten Sie, dass die Wallet-Verschlüsselung nicht vollständig vor Diebstahl Ihrer Bitcoins durch Schadprogramme schützt, die Ihren Computer befällt. + %1 wird jetzt beendet, um den Verschlüsselungsprozess abzuschließen. Bitte beachten Sie, dass die Brieftaschen-Verschlüsselung nicht vollständig vor Diebstahl Ihrer Bitcoins durch Schadprogramme schützt, die Ihren Computer befällt. IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - WICHTIG: Alle vorherigen Wallet-Sicherungen sollten durch die neu erzeugte, verschlüsselte Wallet ersetzt werden. Aus Sicherheitsgründen werden vorherige Sicherungen der unverschlüsselten Wallet nutzlos, sobald Sie die neue, verschlüsselte Wallet verwenden. + WICHTIG: Alle vorherigen Brieftaschen-Sicherungen sollten durch die neu erzeugte, verschlüsselte Brieftasche ersetzt werden. Aus Sicherheitsgründen werden vorherige Sicherungen der unverschlüsselten Brieftasche nutzlos, sobald Sie die neue, verschlüsselte Brieftasche verwenden. Wallet encryption failed - Wallet-Verschlüsselung fehlgeschlagen + Brieftaschen-Verschlüsselung fehlgeschlagen Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Die Wallet-Verschlüsselung ist aufgrund eines internen Fehlers fehlgeschlagen. Ihre Wallet wurde nicht verschlüsselt. + Die Brieftaschen-Verschlüsselung ist aufgrund eines internen Fehlers fehlgeschlagen. Ihre Brieftasche wurde nicht verschlüsselt. The supplied passphrases do not match. @@ -201,19 +201,19 @@ Wallet unlock failed - Wallet-Entsperrung fehlgeschlagen + Brieftaschen-Entsperrung fehlgeschlagen The passphrase entered for the wallet decryption was incorrect. - Die eingegebene Passphrase zur Wallet-Entschlüsselung war nicht korrekt. + Die eingegebene Passphrase zur Brieftaschen-Entschlüsselung war nicht korrekt. Wallet decryption failed - Wallet-Entschlüsselung fehlgeschlagen + Brieftaschen-Entschlüsselung fehlgeschlagen Wallet passphrase was successfully changed. - Die Wallet-Passphrase wurde erfolgreich geändert. + Die Brieftaschen-Passphrase wurde erfolgreich geändert. Warning: The Caps Lock key is on! @@ -439,7 +439,7 @@ Indexing blocks on disk... - Reindiziere Blöcke auf Datenträger... + Indiziere Blöcke auf Datenträger... Processing blocks on disk... @@ -636,7 +636,7 @@ Copy transaction ID - Transaktionskennung kopieren + Transaktions-ID kopieren Lock unspent @@ -660,7 +660,7 @@ Copy bytes - Byte kopieren + Bytes kopieren Copy dust @@ -751,7 +751,7 @@ Could not unlock wallet. - Wallet konnte nicht entsperrt werden. + Brieftasche konnte nicht entsperrt werden. New key generation failed. @@ -817,7 +817,7 @@ Set language, for example "de_DE" (default: system locale) - Sprache einstellen, zum Beispiel "de_DE" (default: system locale) + Sprache einstellen, zum Beispiel "de_DE" (Standard: Systemgebietsschema) Start minimized @@ -825,7 +825,7 @@ Set SSL root certificates for payment request (default: -system-) - SSL-Wurzelzertifikate für Zahlungsanforderungen festlegen (Standard: -system-) + SSL-Wurzelzertifikate für Zahlungsanforderungen festlegen (Standard: Systemstandard) Show splash screen on startup (default: %u) diff --git a/src/qt/locale/bitcoin_el_GR.ts b/src/qt/locale/bitcoin_el_GR.ts index 21f308e80e4..5c72b4d1585 100644 --- a/src/qt/locale/bitcoin_el_GR.ts +++ b/src/qt/locale/bitcoin_el_GR.ts @@ -42,6 +42,14 @@ &Διαγραφή + Choose the address to send coins to + Επιλέξτε διεύθυνση αποστολής των νομισμάτων σας + + + Choose the address to receive coins with + Επιλέξτε διεύθυνση παραλαβής νομισμάτων + + Sending addresses Διευθύνσεις αποστολής @@ -49,10 +57,42 @@ Receiving addresses Διευθύνσεις λήψης + + &Copy Address + &Αντιγραφή Διεύθυνσης + + + Copy &Label + Αντιγραφή&Ετικέτα + + + &Edit + &Διόρθωση + + + Export Address List + Εξαγωγή Λίστας Διεύθυνσεων + + + Exporting Failed + Αποτυχία Εξαγωγής + AddressTableModel - + + Label + Ετικέτα + + + Address + Διεύθυνση + + + (no label) + (χωρίς ετικέτα) + + AskPassphraseDialog @@ -75,6 +115,14 @@ Unlock wallet Ξεκλειδωσε το πορτοφολι + + Change passphrase + Αλλάξτε Φράση Πρόσβασης + + + Wallet unlock failed + Το Ξεκλείδωμα του Πορτοφολιού Απέτυχε + BanTableModel @@ -406,6 +454,26 @@ Confirmed Επικυρωμένες + + Copy address + Αντιγραφή διεύθυνσης + + + Copy label + Αντιγραφή ετικέτας + + + Copy amount + Αντιγραφή ποσού + + + Copy transaction ID + Αντιγραφή ταυτότητας συναλλαγής + + + (no label) + (χωρίς ετικέτα) + EditAddressDialog @@ -429,6 +497,18 @@ &Address &Διεύθυνση + + New receiving address + Νέα Διεύθυνση Λήψης + + + New sending address + Νέα Διεύθυνση Αποστολής + + + Edit receiving address + Διόρθωση Διεύθυνσης Λήψης + FreespaceChecker @@ -1076,7 +1156,15 @@ Remove Αφαίρεση - + + Copy label + Αντιγραφή ετικέτας + + + Copy amount + Αντιγραφή ποσού + + ReceiveRequestDialog @@ -1095,9 +1183,29 @@ &Save Image... &Αποθήκευση εικόνας... + + Address + Διεύθυνση + + + Label + Ετικέτα + RecentRequestsTableModel + + Date + Ημερομήνια + + + Label + Ετικέτα + + + (no label) + (χωρίς ετικέτα) + SendCoinsDialog @@ -1221,7 +1329,15 @@ S&end Αποστολη - + + Copy amount + Αντιγραφή ποσού + + + (no label) + (χωρίς ετικέτα) + + SendCoinsEntry @@ -1386,6 +1502,70 @@ TransactionDesc + + Open until %1 + Ανοιχτό μέχρι %1 + + + %1/offline + %1/αποσυνδεδεμένο + + + 0/unconfirmed, %1 + 0/ανεπιβεβαίωτο, %1 + + + Date + Ημερομηνία + + + Source + Πηγή + + + Generated + Παράχθηκε + + + From + Από + + + unknown + Άγνωστο + + + To + Προς + + + own address + δική σας διεύθυνση + + + watch-only + παρακολούθηση-μόνο + + + label + ετικέτα + + + Credit + Πίστωση + + + not accepted + μη έγκυρο + + + Total credit + Συνολική πίστωση + + + Transaction fee + Κόστος συναλλαγής + TransactionDescDialog @@ -1396,9 +1576,69 @@ TransactionTableModel + + Date + Ημερομήνια + + + Label + Ετικέτα + + + Open until %1 + Ανοιχτό μέχρι %1 + + + watch-only + παρακολούθηση-μόνο + + + (no label) + (χωρίς ετικέτα) + TransactionView + + Copy address + Αντιγραφή διεύθυνσης + + + Copy label + Αντιγραφή ετικέτας + + + Copy amount + Αντιγραφή ποσού + + + Copy transaction ID + Αντιγραφή ταυτότητας συναλλαγής + + + Copy raw transaction + Αντιγραφή ανεπεξέργαστης συναλλαγής + + + Edit label + Επεξεργασία ετικέτας + + + Date + Ημερομήνια + + + Label + Ετικέτα + + + Address + Διεύθυνση + + + Exporting Failed + Αποτυχία Εξαγωγής + UnitDisplayStatusBarControl diff --git a/src/qt/locale/bitcoin_en.ts b/src/qt/locale/bitcoin_en.ts index a476b56596f..b2019cf9aea 100644 --- a/src/qt/locale/bitcoin_en.ts +++ b/src/qt/locale/bitcoin_en.ts @@ -304,12 +304,12 @@ Sign &message... - + Synchronizing with network... Synchronizing with network... - + &Overview &Overview @@ -404,7 +404,7 @@ - + Click to disable network activity. @@ -429,7 +429,7 @@ Reindexing blocks on disk... - + Send coins to a Bitcoin address Send coins to a Bitcoin address @@ -459,12 +459,12 @@ &Verify message... - + Bitcoin Bitcoin - + Wallet Wallet @@ -549,7 +549,7 @@ - + %n active connection(s) to Bitcoin network %n active connection to Bitcoin network @@ -610,12 +610,12 @@ Up to date - + Show the %1 help message to get a list with possible Bitcoin command-line options - + %1 client diff --git a/src/qt/locale/bitcoin_fa.ts b/src/qt/locale/bitcoin_fa.ts index b83afb86180..c9aa1b56249 100644 --- a/src/qt/locale/bitcoin_fa.ts +++ b/src/qt/locale/bitcoin_fa.ts @@ -62,6 +62,14 @@ آدرس های گیرنده + These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + اینها آدرس های شما برای فرستادن پرداخت هاست. همیشه قبل از فرستادن سکه ها مقدار و آدرس دریافت کننده را چک کنید. + + + &Copy Address + کپی کردن آدرس + + Copy &Label کپی و برچسب‌&گذاری @@ -69,6 +77,14 @@ &Edit &ویرایش + + Export Address List + صدور لیست آدرس ها + + + Exporting Failed + صدور موفق نبود + AddressTableModel @@ -108,10 +124,18 @@ رمزنگاری کیف پول + This operation needs your wallet passphrase to unlock the wallet. + این عملیات نیاز به عبارت کیف پول شما برای بازگشایی کیف پول دارد + + Unlock wallet باز کردن قفل کیف پول + This operation needs your wallet passphrase to decrypt the wallet. + این عملیات نیاز به عبارت کیف پول شما برای رمزگشایی کیف پول دارد. + + Decrypt wallet رمزگشایی کیف پول @@ -120,6 +144,10 @@ تغییر گذرواژه + Enter the old passphrase and new passphrase to the wallet. + عبارت کهنه و جدید کیف پول را وارد کنید. + + Confirm wallet encryption تأیید رمزنگاری کیف پول @@ -254,6 +282,18 @@ باز کردن &آدرس + Click to disable network activity. + برای غیر فعال کردن فعالیت شبکه کلیک کنید. + + + Network activity disabled. + فعالیت شبکه غیر فعال شد. + + + Click to enable network activity again. + برای فعال کردن دوباره فعالیت شبکه کلیک کنید. + + Reindexing blocks on disk... بازنشانی بلوک‌ها روی دیسک... @@ -543,6 +583,14 @@ رونوشت کارمزد + Copy bytes + کپی کردن بایت ها + + + Copy change + کپی کردن تغییر + + (%1 locked) (%1 قفل شده) @@ -718,6 +766,22 @@ زمان آخرین بلوک + Progress + پیشروی + + + Progress increase per hour + پیشروی در هر ساعت بیشتر میشود + + + calculating... + در حال محاسبه... + + + Estimated time left until synced + زمان تخمینی تا سینک شدن + + Hide پنهان کردن @@ -937,6 +1001,10 @@ PaymentServer + + Invalid payment request. + درخواست پرداخت نامعتبر. + PeerTableModel @@ -1101,6 +1169,10 @@ در: + Out: + خروجی: + + Debug log file فایلِ لاگِ اشکال زدایی @@ -1109,6 +1181,26 @@ پاکسازی کنسول + 1 &hour + 1 ساعت + + + 1 &day + 1 روز + + + 1 &week + 1 هفته + + + 1 &year + 1 سال + + + Ban for + محدود شده برای + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. دکمه‌های بالا و پایین برای پیمایش تاریخچه و <b>Ctrl-L</b> برای پاک کردن صفحه. @@ -1349,6 +1441,14 @@ رونوشت کارمزد + Copy bytes + کپی کردن بایت ها + + + Copy change + کپی کردن تغییر + + (no label) (بدون برچسب) @@ -1558,6 +1658,10 @@ Address آدرس + + Exporting Failed + صدور موفق نبود + UnitDisplayStatusBarControl diff --git a/src/qt/locale/bitcoin_fr.ts b/src/qt/locale/bitcoin_fr.ts index 883bb4f8da7..cb62a02a582 100644 --- a/src/qt/locale/bitcoin_fr.ts +++ b/src/qt/locale/bitcoin_fr.ts @@ -903,7 +903,7 @@ Last block time - Horodatage du dernier bloc + Estampille temporelle du dernier bloc Progress @@ -1366,7 +1366,7 @@ NodeId - NodeId + ID de nœud Ping @@ -1646,7 +1646,7 @@ Last block time - Horodatage du dernier bloc + Estampille temporelle du dernier bloc &Open @@ -2178,7 +2178,7 @@ The transaction was rejected with the following reason: %1 - La transaction a été rejetée pour la raison suivante: %1 + La transaction a été rejetée pour la raison suivante : %1 A fee higher than %1 is considered an absurdly high fee. @@ -3795,7 +3795,7 @@ Prepend debug output with timestamp (default: %u) - Ajouter l'horodatage au début de la sortie de débogage (par défaut : %u) + Ajouter l'estampille temporelle au début de la sortie de débogage (par défaut : %u) Relay and mine data carrier transactions (default: %u) diff --git a/src/qt/locale/bitcoin_id_ID.ts b/src/qt/locale/bitcoin_id_ID.ts index fd77f07cd85..2fba8233d1d 100644 --- a/src/qt/locale/bitcoin_id_ID.ts +++ b/src/qt/locale/bitcoin_id_ID.ts @@ -41,10 +41,74 @@ &Delete &Hapus + + Choose the address to send coins to + Pilih alamat untuk mengirim koin + + + Choose the address to receive coins with + Piih alamat untuk menerima koin + + + C&hoose + &Pilih + + + Sending addresses + Alamat-alamat pengirim + + + Receiving addresses + Alamat-alamat penerima + + + These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Ini adalah alamat- alamat Bitcoin Anda untuk mengirimkan pembayaran. Selalu periksa jumlah dan alamat penerima sebelum mengirimkan koin. + + + These are your Bitcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Ini adalah alamat- alamat Bitcoin Anda untuk menerima pembayaran. Dianjurkan untuk menggunakan alamat penerima yang baru setiap melakukan transaksi. + + + &Copy Address + &Salin Alamat + + + Copy &Label + Salin& Label + + + &Edit + &Ubah + + + Export Address List + Ekspor Daftar Alamat + + + Comma separated file (*.csv) + File yang berformat(*.csv) + + + Exporting Failed + Mengekspor Gagal + AddressTableModel - + + Label + Label + + + Address + Alamat + + + (no label) + (tidak ada label) + + AskPassphraseDialog @@ -63,7 +127,95 @@ Repeat new passphrase Ulangi kata kunci baru - + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>. + Masukan kata sandi baru ke dompet.<br/>Mohon gunakan kata sandi <b>sepuluh karakter acak atau lebih</b>, atau <b> delapan atau lebih beberapa kata </​​b>. + + + Encrypt wallet + Enkripsi dompet + + + This operation needs your wallet passphrase to unlock the wallet. + Operasi ini memerlukan kata sandi dompet Anda untuk membuka dompet. + + + Unlock wallet + Buka dompet + + + This operation needs your wallet passphrase to decrypt the wallet. + Operasi ini memerlukan kata sandi dompet Anda untuk mendekripsikan dompet. + + + Decrypt wallet + Dekripsi dompet + + + Change passphrase + Ganti kata sandi + + + Enter the old passphrase and new passphrase to the wallet. + Masukkan kata sandi lama dan kata sandi baru ke dompet. + + + Confirm wallet encryption + Konfirmasi pengenkripsian dompet + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>! + Peringatan: Jika Anda enkripsi dompet Anda dan lupa kata sandi anda, Anda akan <b>KEHILANGAN SEMUA BITCOIN ANDA</b>! + + + Are you sure you wish to encrypt your wallet? + Apakah Anda yakin ingin enkripsi dompet Anda? + + + Wallet encrypted + Dompet terenkripsi + + + %1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. + %1 sekarang akan ditutup untuk menyelesaikan proses enkripsi. Ingatlah bahwa mengenkripsi dompet Anda tidak dapat sepenuhnya melindungi komputer Anda dari pencurian malware yang menginfeksi komputer Anda. + + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + PENTING: Backup sebelumnya yang Anda buat dari file dompet Anda harus diganti dengan file dompet terenkripsi yang baru dibuat. Demi keamanan, backup file dompet sebelumnya yang tidak dienkripsi sebelumnya akan menjadi tidak berguna begitu Anda mulai menggunakan dompet terenkripsi yang baru. + + + Wallet encryption failed + Pengenkripsian dompet gagal + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Pengenkripsian dompet gagal karena kesalahan internal. Dompet Anda tidak dienkripsi. + + + The supplied passphrases do not match. + Kata sandi yang dimasukkan tidak cocok. + + + Wallet unlock failed + Membuka dompet gagal + + + The passphrase entered for the wallet decryption was incorrect. + Kata sandi yang dimasukkan untuk dekripsi dompet salah. + + + Wallet decryption failed + Dekripsi dompet gagal + + + Wallet passphrase was successfully changed. + Kata sandi berhasil diganti. + + + Warning: The Caps Lock key is on! + Peringatan: Tombol Caps Lock aktif! + + BanTableModel @@ -114,6 +266,14 @@ Keluar dari aplikasi + &About %1 + &Tentang%1 + + + Show information about %1 + Tampilkan informasi perihal %1 + + About &Qt Mengenai &Qt @@ -126,6 +286,10 @@ &Pilihan... + Modify configuration options for %1 + Pengubahan opsi konfigurasi untuk %1 + + &Encrypt Wallet... &Enkripsi Dompet... @@ -150,6 +314,22 @@ Buka &URI + Click to disable network activity. + Klik untuk menonaktifkan aktivitas jaringan. + + + Network activity disabled. + Aktivitas jaringan dinonaktifkan. + + + Click to enable network activity again. + Klik untuk mengaktifkan aktivitas jaringan lagi. + + + Syncing Headers (%1%)... + Menyinkronkan Header (%1%) ... + + Reindexing blocks on disk... Mengindex ulang blok di dalam disk... @@ -253,6 +433,14 @@ %n active connection(s) to Bitcoin network %n koneksi aktif ke jaringan Bitcoin + + Indexing blocks on disk... + Pengindeksan blok pada disk ... + + + Processing blocks on disk... + Memproses blok pada disk ... + Processed %n block(s) of transaction history. %n blok dari riwayat transaksi diproses. @@ -286,6 +474,18 @@ Terbaru + Show the %1 help message to get a list with possible Bitcoin command-line options + Tampilkan %1 pesan bantuan untuk mendapatkan daftar opsi baris perintah Bitcoin yang memungkinkan + + + %1 client + %1 klien + + + Connecting to peers... + Menghubungkan ke peer... + + Catching up... Menyusul... @@ -406,6 +606,22 @@ Confirmed Terkonfirmasi + + Copy address + Salin alamat + + + Copy label + Salin label + + + Copy fee + Salin biaya + + + (no label) + (tidak ada label) + EditAddressDialog @@ -1065,6 +1281,10 @@ Remove Menghapus + + Copy label + Salin label + ReceiveRequestDialog @@ -1085,12 +1305,28 @@ &Simpan Gambaran... + Address + Alamat + + Amount Jumlah + + Label + Label + RecentRequestsTableModel + + Label + Label + + + (no label) + (tidak ada label) + SendCoinsDialog @@ -1194,7 +1430,15 @@ S&end K&irim - + + Copy fee + Salin biaya + + + (no label) + (tidak ada label) + + SendCoinsEntry @@ -1357,9 +1601,41 @@ TransactionTableModel + + Label + Label + + + (no label) + (tidak ada label) + TransactionView + + Copy address + Salin alamat + + + Copy label + Salin label + + + Comma separated file (*.csv) + Berkas yang berformat(*.csv) + + + Label + Label + + + Address + Alamat + + + Exporting Failed + Mengekspor Gagal + UnitDisplayStatusBarControl diff --git a/src/qt/locale/bitcoin_it.ts b/src/qt/locale/bitcoin_it.ts index b8c89c51af0..d171ffac2f4 100644 --- a/src/qt/locale/bitcoin_it.ts +++ b/src/qt/locale/bitcoin_it.ts @@ -3,7 +3,7 @@ AddressBookPage Right-click to edit address or label - Fare clic con il tasto destro del mouse per modificare l'indirizzo o l'etichettadefault + Fare clic con il tasto destro del mouse per modificare l'indirizzo o l'etichetta Create a new address @@ -180,10 +180,22 @@ Portamonete cifrato + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. + IMPORTANTE: qualsiasi backup del file portamonete effettuato in precedenza dovrà essere sostituito con il file del portamonete cifrato appena generato. Per ragioni di sicurezza, i precedenti backup del file del portamonete non cifrato diventeranno inservibili non appena si inizierà ad utilizzare il nuovo portamonete cifrato. + + Wallet encryption failed Il processo di crittografia del tuo portafogli è fallito + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Crittaggio fallito a causa di un errore interno. Il portamonete non è stato crittato. + + + The supplied passphrases do not match. + Le frasi di accesso non corrispondono. + + Wallet unlock failed Sbloccaggio del portafoglio fallito @@ -191,7 +203,19 @@ The passphrase entered for the wallet decryption was incorrect. La frase inserita per decrittografare il tuo portafoglio è incorretta - + + Wallet decryption failed + Decrittazione del portamonete fallita. + + + Wallet passphrase was successfully changed. + La frase di accesso al portamonete è stata cambiata con successo. + + + Warning: The Caps Lock key is on! + Attenzione: è attivo il tasto blocco maiuscole ! + + BanTableModel @@ -623,10 +647,22 @@ no + This label turns red if any recipient receives an amount smaller than the current dust threshold. + Questa etichetta diventerà rossa se uno qualsiasi dei destinatari riceverà un importo inferiore alla corrente soglia minima per la movimentazione della valuta. + + + Can vary +/- %1 satoshi(s) per input. + Può variare di +/- %1 satoshi per input. + + (no label) (nessuna etichetta) + change from %1 (%2) + cambio da %1 (%2) + + (change) (resto) @@ -653,7 +689,39 @@ &Address &Indirizzo - + + New receiving address + Nuovo indirizzo di ricezione + + + New sending address + Nuovo indirizzo d'invio + + + Edit receiving address + Modifica indirizzo di ricezione + + + Edit sending address + Modifica indirizzo d'invio + + + The entered address "%1" is not a valid Bitcoin address. + L'indirizzo inserito "%1" non è un indirizzo bitcoin valido. + + + The entered address "%1" is already in the address book. + L'indirizzo inserito "%1" è già in rubrica. + + + Could not unlock wallet. + Impossibile sbloccare il portamonete. + + + New key generation failed. + Generazione della nuova chiave non riuscita. + + FreespaceChecker @@ -782,6 +850,10 @@ Modulo + Number of blocks left + Numero di blocchi mancanti + + Unknown... Sconosciuto... @@ -790,6 +862,10 @@ Ora del blocco più recente + Progress + Progresso + + Hide Nascondi @@ -812,7 +888,11 @@ Select payment request file Seleziona il file di richiesta di pagamento - + + Select payment request file to open + Seleziona il file di richiesta di pagamento da aprire + + OptionsDialog @@ -1127,14 +1207,86 @@ Per specificare più URL separarli con una barra verticale "|". PaymentServer + Payment request error + Errore di richiesta di pagamento + + + Cannot start bitcoin: click-to-pay handler + Impossibile avviare bitcoin: gestore click-to-pay + + + URI handling + Gestione URI + + + Payment request fetch URL is invalid: %1 + URL di recupero della Richiesta di pagamento non valido: %1 + + + Invalid payment address %1 + Indirizzo di pagamento non valido %1 + + + URI cannot be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters. + Impossibile interpretare l'URI! I parametri dell'URI o l'indirizzo Bitcoin potrebbero non essere corretti. + + + Payment request file handling + Gestione del file di richiesta del pagamento + + + Payment request file cannot be read! This can be caused by an invalid payment request file. + Impossibile leggere il file della richiesta di pagamento! Il file della richiesta di pagamento potrebbe non essere valido + + + Payment request rejected + Richiesta di pagamento respinta + + + Payment request network doesn't match client network. + La rete della richiesta di pagamento non corrisponde alla rete del client. + + Payment request expired. Richiesta di pagamento scaduta. + Payment request is not initialized. + La richiesta di pagamento non è stata inizializzata. + + + Unverified payment requests to custom payment scripts are unsupported. + Le richieste di pagamento non verificate verso script di pagamento personalizzati non sono supportate. + + Invalid payment request. Richiesta di pagamento invalida - + + Requested payment amount of %1 is too small (considered dust). + L'importo di pagamento di %1 richiesto è troppo basso (considerato come trascurabile). + + + Refund from %1 + Rimborso da %1 + + + Payment request %1 is too large (%2 bytes, allowed %3 bytes). + La richiesta di pagamento %1 è troppo grande (%2 bytes, consentiti %3 bytes) + + + Error communicating with %1: %2 + Errore di comunicazione con %1: %2 + + + Payment request cannot be parsed! + La richiesta di pagamento non può essere processata! + + + Payment acknowledged + Pagamento riconosciuto + + PeerTableModel @@ -1227,6 +1379,18 @@ Per specificare più URL separarli con una barra verticale "|". QRImageWidget + &Save Image... + &Salva immagine + + + &Copy Image + &Copia immagine + + + Save QR Code + Salva codice QR + + PNG Image (*.png) Immagine PNG (*.png) @@ -1450,6 +1614,10 @@ Per specificare più URL separarli con una barra verticale "|". 1 &anno + &Disconnect + &Disconnetti + + Welcome to the %1 RPC console. Benvenuto nella console RPC di %1. @@ -1616,6 +1784,14 @@ Per specificare più URL separarli con una barra verticale "|". &Salva Immagine... + Request payment to %1 + Richiesta di pagamento a %1 + + + Payment information + Informazioni di pagamento + + URI URI @@ -1842,6 +2018,26 @@ Per specificare più URL separarli con una barra verticale "|". %1 a %2 + added as transaction fee + Includi il costo della transazione + + + or + o + + + The amount exceeds your balance. + Non hai abbastanza fondi + + + Transaction creation failed! + Creazione della transazione fallita! + + + The transaction was rejected with the following reason: %1 + La transazione è stata respinta per il seguente motivo: %1 + + Payment request expired. Richiesta di pagamento scaduta. @@ -2115,6 +2311,22 @@ Per specificare più URL separarli con una barra verticale "|". %1/offline + 0/unconfirmed, %1 + 0/non confermati, %1 + + + abandoned + abbandonato + + + %1/unconfirmed + %1/non confermato + + + %1 confirmations + %1 conferme + + Status Stato diff --git a/src/qt/locale/bitcoin_ko_KR.ts b/src/qt/locale/bitcoin_ko_KR.ts index 9b5c1c077ef..c104bdd0db8 100644 --- a/src/qt/locale/bitcoin_ko_KR.ts +++ b/src/qt/locale/bitcoin_ko_KR.ts @@ -318,6 +318,22 @@ &URI 열기... + Click to disable network activity. + 네트워크 활동을 중지하려면 클릭. + + + Network activity disabled. + 네트워크 활동이 정지됨. + + + Click to enable network activity again. + 네트워크 활동을 다시 시작하려면 클릭. + + + Syncing Headers (%1%)... + 헤더 동기화중 (%1%)... + + Reindexing blocks on disk... 디스크에서 블록 다시 색인중... @@ -431,7 +447,7 @@ Processed %n block(s) of transaction history. - %n 블럭 만큼의 거래 기록이 처리됨. + %n 블록 만큼의 거래 기록이 처리됨. %1 behind @@ -470,6 +486,10 @@ %1 클라이언트 + Connecting to peers... + 피어에 연결중... + + Catching up... 블록 따라잡기... @@ -512,14 +532,26 @@ 들어오고 있는 거래 + HD key generation is <b>enabled</b> + HD 키 생성이 <b>활성화되었습니다</b> + + + HD key generation is <b>disabled</b> + HD 키 생성이 <b>비활성화되었습니다</b> + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> - 지갑이 암호화 되었고 현재 차단해제 되었습니다 + 지갑이 <b>암호화</b> 되었고 현재 <b>잠금해제</b> 되었습니다 Wallet is <b>encrypted</b> and currently <b>locked</b> - 지갑이 암호화 되었고 현재 잠겨져 있습니다 + 지갑이 <b>암호화</b> 되었고 현재 <b>잠겨져</b> 있습니다 - + + A fatal error occurred. Bitcoin can no longer continue safely and will quit. + 치명적인 오류가 발생했습니다. 비트코인을 더이상 안전하게 진행할 수 없어 곧 종료합니다. + + CoinControlDialog @@ -552,7 +584,7 @@ Change: - 체인지: + 잔돈: (un)select all @@ -651,6 +683,10 @@ 아니요 + This label turns red if any recipient receives an amount smaller than the current dust threshold. + 수령인이 현재 더스트 임계값보다 작은 양을 수신하면 이 라벨이 빨간색으로 변합니다. + + Can vary +/- %1 satoshi(s) per input. 입력마다 +/- %1 사토시(s)가 변할 수 있습니다. @@ -816,7 +852,7 @@ %1 will download and store a copy of the Bitcoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. - %1가 블럭체인의 복사본을 다운로드 저장합니다. 적어도 %2GB의 데이터가 이 폴더에 저장되며 시간이 경과할수록 점차 증가합니다. 그리고 지갑 또한 이 폴더에 저장됩니다. + %1가 블록체인의 복사본을 다운로드 저장합니다. 적어도 %2GB의 데이터가 이 폴더에 저장되며 시간이 경과할수록 점차 증가합니다. 그리고 지갑 또한 이 폴더에 저장됩니다. Use the default data directory @@ -850,14 +886,50 @@ 유형 + Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below. + 최근 거래는 아직 보이지 않을 것입니다, 그러므로 당신의 지갑의 잔액이 틀릴 수도 있습니다. 이 정보는 비트코인 네트워크와 완전한 동기화가 완료되면 아래의 설명과 같이 정확해집니다. + + + Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network. + 아직 표시되지 않은 거래의 영향을 받는 비트코인을 사용하려고 하는 것은 네트워크에서 허가되지 않습니다. + + + Number of blocks left + 남은 블록의 수 + + + Unknown... + 알수없음... + + Last block time - 최종 블럭 시각 + 최종 블록 시각 + + + Progress + 진행 + + + Progress increase per hour + 시간당 진행 증가율 + + + calculating... + 계산중... + + + Estimated time left until synced + 동기화 완료까지 예상 시간 Hide 숨기기 - + + Unknown. Syncing Headers (%1)... + 알수없음. 헤더 동기화중 (%1)... + + OpenURIDialog @@ -929,7 +1001,7 @@ Third party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |. - 서드-파티 URLs (예. 블록 탐색기)는 거래 탭의 컨텍스트 메뉴에 나타납니다. URL의 %s는 트랜잭션 해시값으로 대체됩니다. 여러 URLs는 수직 바 | 에서 나누어 집니다. + 서드-파티 URLs (예. 블록 탐색기)는 거래 탭의 컨텍스트 메뉴에 나타납니다. URL의 %s는 거래 해시값으로 대체됩니다. 여러 URLs는 수직 바 | 에서 나누어 집니다. Third party transaction URLs @@ -969,7 +1041,7 @@ If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. - 검증되지 않은 잔돈 쓰기를 비활성화하면 트랜잭션이 적어도 1회 이상 검증되기 전까지 그 트랜잭션의 거스름돈은 사용할 수 없습니다. 이는 잔액 계산 방법에도 영향을 미칩니다. + 검증되지 않은 잔돈 쓰기를 비활성화하면 거래가 적어도 1회 이상 검증되기 전까지 그 거래의 거스름돈은 사용할 수 없습니다. 이는 잔액 계산 방법에도 영향을 미칩니다. &Spend unconfirmed change @@ -1128,7 +1200,7 @@ Watch-only: - 모니터링 지갑: + 조회전용: Available: @@ -1168,7 +1240,7 @@ Your current balance in watch-only addresses - 모니터링 지갑의 현재 잔액 + 조회전용 주소의 현재 잔액 Spendable: @@ -1180,15 +1252,15 @@ Unconfirmed transactions to watch-only addresses - 모니터링 지갑의 검증되지 않은 트랜잭션 + 조회전용 주소의 검증되지 않은 거래 Mined balance in watch-only addresses that has not yet matured - 모니터링 지갑의 채굴된 잔액 중 숙성되지 않은 것 + 조회전용 주소의 채굴된 잔액 중 숙성되지 않은 것 Current total balance in watch-only addresses - 모니터링 지갑의 현재 잔액 + 조회전용 주소의 현재 잔액 @@ -1199,13 +1271,89 @@ Cannot start bitcoin: click-to-pay handler - 비트코인을 시작할 수 없습니다: 지급제어기를 클릭하시오 + 비트코인을 시작할 수 없습니다: 지급제어기를 클릭하세요 URI handling URI 핸들링 - + + Payment request fetch URL is invalid: %1 + 지불 요청의 URL이 올바르지 않습니다: %1 + + + Invalid payment address %1 + 잘못된 지불 주소입니다 %1 + + + URI cannot be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters. + URI의 파싱에 문제가 발생했습니다. 잘못된 비트코인 주소나 URI 파라미터 구성에 오류가 존재할 수 있습니다. + + + Payment request file handling + 지불이 파일 처리를 요청합니다 + + + Payment request file cannot be read! This can be caused by an invalid payment request file. + 지불 요청 파일을 읽을 수 없습니다. 이것은 잘못된 지불 요청 파일에 의해 발생하는 오류일 수 있습니다. + + + Payment request rejected + 지불 요청이 거부됨 + + + Payment request network doesn't match client network. + 지급 요청 네트워크가 클라이언트 네트워크와 일치되지 않습니다. + + + Payment request expired. + 지불 요청이 만료됨. + + + Payment request is not initialized. + 지불 요청이 초기화 되지 않았습니다. + + + Unverified payment requests to custom payment scripts are unsupported. + 임의로 변경한 결제 스크립트 기반의 지불 요청 양식은 검증되기 전까지는 지원되지 않습니다. + + + Invalid payment request. + 잘못된 지불 요청. + + + Requested payment amount of %1 is too small (considered dust). + 요청한 금액 %1의 양이 너무 적습니다. (스팸성 거래로 간주) + + + Refund from %1 + %1 으로부터의 환불 + + + Payment request %1 is too large (%2 bytes, allowed %3 bytes). + 지불 요청 %1은 너무 큽니다 (%2 바이트, %3 바이트까지 허용됩니다). + + + Error communicating with %1: %2 + %1과 소통하는데 에러: %2 + + + Payment request cannot be parsed! + 지불요청을 파싱할 수 없습니다. + + + Bad response from server %1 + 서버로 부터 잘못된 반응 %1 + + + Network request error + 네트워크 요청 에러 + + + Payment acknowledged + 지불이 승인됨 + + PeerTableModel @@ -1216,7 +1364,15 @@ Node/Service 노드/서비스 - + + NodeId + 노드 ID + + + Ping + + + QObject @@ -1255,17 +1411,73 @@ %1 ms %1 ms + + %n second(s) + %n 초 + + + %n minute(s) + %n 분 + + + %n hour(s) + %n 시간 + + + %n day(s) + &n 일 + + + %n week(s) + %n 주 + %1 and %2 %1 그리고 %2 - + + %n year(s) + %n 년 + + + %1 didn't yet exit safely... + %1가 아직 안전하게 종료되지 않았습니다... + + QObject::QObject - + + Error: Specified data directory "%1" does not exist. + 에러: 지정한 데이터 폴더 "%1"은 존재하지 않습니다. + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + 에러: 설정파일을 파싱할수 없습니다: %1. key=value syntax만 사용가능합니다. + + + Error: %1 + 에러: %1 + + QRImageWidget - + + &Save Image... + 이미지 저장(&S)... + + + &Copy Image + 이미지 복사(&C) + + + Save QR Code + QR코드 저장 + + + PNG Image (*.png) + PNG 이미지(*.png) + + RPCConsole @@ -1314,11 +1526,11 @@ Block chain - 블럭 체인 + 블록 체인 Current number of blocks - 현재 블럭 수 + 현재 블록 수 Memory Pool @@ -1326,7 +1538,7 @@ Current number of transactions - 현재 트랜잭션 수 + 현재 거래 수 Memory usage @@ -1425,12 +1637,16 @@ Ping 대기 + Min Ping + 최소 핑 + + Time Offset 시간 오프셋 Last block time - 최종 블럭 시각 + 최종 블록 시각 &Open @@ -1485,6 +1701,18 @@ 1년(&Y) + &Disconnect + 접속 끊기(&D) + + + Ban for + 추방 + + + &Unban + 노드 추방 취소(&U) + + Welcome to the %1 RPC console. %1 RPC 콘솔에 오신걸 환영합니다 @@ -1497,6 +1725,14 @@ 사용할 수 있는 명령을 둘러보려면 <b>help</b>를 입력하십시오. + WARNING: Scammers have been active, telling users to type commands here, stealing their wallet contents. Do not use this console without fully understanding the ramification of a command. + 경고 : 사기꾼이 사용자에게 여기에 명령을 입력하게 하여 지갑 내용을 훔칠수 있다는 사실을 알려드립니다. 명령어를 완전히 이해하지 못한다면 콘솔을 사용하지 마십시오. + + + Network activity disabled + 네트워크 활동이 정지됨. + + %1 B %1 바이트 @@ -1616,10 +1852,18 @@ 삭제 + Copy URI + URI 복사 + + Copy label 라벨 복사 + Copy message + 메시지 복사 + + Copy amount 거래액 복사 @@ -1643,14 +1887,42 @@ 이미지 저장(&S)... + Request payment to %1 + %1에 지불을 요청했습니다 + + + Payment information + 지불 정보 + + + URI + URI + + Address 주소 + Amount + 거래액 + + Label 라벨 - + + Message + 메시지 + + + Resulting URI too long, try to reduce the text for label / message. + URI 결과가 너무 길음, 라벨/메세지의 글을 줄이도록 하세요. + + + Error encoding URI into QR Code. + URI를 QR 코드로 인코딩하는 중 오류가 발생했습니다. + + RecentRequestsTableModel @@ -1662,10 +1934,26 @@ 라벨 + Message + 메시지 + + (no label) (라벨 없음) - + + (no message) + (메세지가 없습니다) + + + (no amount requested) + (요청한 거래액 없음) + + + Requested + 요청됨 + + SendCoinsDialog @@ -1710,7 +1998,7 @@ Change: - 체인지: + 잔돈: If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. @@ -1738,7 +2026,7 @@ If the custom fee is set to 1000 satoshis and the transaction is only 250 bytes, then "per kilobyte" only pays 250 satoshis in fee, while "total at least" pays 1000 satoshis. For transactions bigger than a kilobyte both pay by kilobyte. - 사용자 정의 수수료가 1000사토시로 지정된 경우 트랜잭션의 크기가 250바이트 일 경우 1킬로바이트당 250사토시만 지불되지만 "최소 수수료"에선 1000사토시가 지불됩니다. 1킬로바이트가 넘는 트랜잭션인 경우 어떠한 경우에든 1킬로바이트 기준으로 지불됩니다. + 사용자 정의 수수료가 1000사토시로 지정된 경우 거래의 크기가 250바이트 일 경우 1킬로바이트당 250사토시만 지불되지만 "최소 수수료"에선 1000사토시가 지불됩니다. 1킬로바이트가 넘는 거래인 경우 어떠한 경우에든 1킬로바이트 기준으로 지불됩니다. Hide @@ -1750,11 +2038,11 @@ Paying only the minimum fee is just fine as long as there is less transaction volume than space in the blocks. But be aware that this can end up in a never confirming transaction once there is more demand for bitcoin transactions than the network can process. - 블록의 용량보다 트랜잭션의 용량이 작은 경우에는 최소한의 수수료만으로도 충분합니다. 그러나 비트코인 네트워크의 처리량보다 더 많은 트랜잭션 요구는 영원히 검증이 안 될 수도 있습니다. + 블록의 용량보다 거래의 용량이 작은 경우에는 최소한의 수수료만으로도 충분합니다. 그러나 비트코인 네트워크의 처리량보다 더 많은 거래 요구는 영원히 검증이 안 될 수도 있습니다. (read the tooltip) - (툴팁을 읽어보세요) + (툴팁을 꼭 읽어보세요) Recommended: @@ -1766,7 +2054,7 @@ (Smart fee not initialized yet. This usually takes a few blocks...) - (Smart fee가 아직 초기화되지 않았습니다. 블록 분석이 완료될 때 까지 기다려주십시오...) + (Smart fee가 아직 초기화 되지 않았습니다. 블록 분석이 완전하게 끝날 때 까지 기다려주십시오...) normal @@ -1793,6 +2081,10 @@ 더스트: + Confirmation time target: + 승인 시간 목표: + + Clear &All 모두 지우기(&A) @@ -1837,6 +2129,94 @@ 잔돈 복사 + %1 to %2 + %1을(를) %2(으)로 + + + Are you sure you want to send? + 정말로 보내시겠습니까? + + + added as transaction fee + 거래 수수료로 추가됨 + + + Total Amount %1 + 총 액수 %1 + + + or + 또는 + + + Confirm send coins + 코인 전송을 확인 + + + The recipient address is not valid. Please recheck. + 수령인 주소가 정확하지 않습니다. 재확인 바랍니다 + + + The amount to pay must be larger than 0. + 지불하는 금액은 0 보다 커야 합니다. + + + The amount exceeds your balance. + 잔고를 초과하였습니다. + + + The total exceeds your balance when the %1 transaction fee is included. + %1 의 거래수수료를 포함하면 잔고를 초과합니다. + + + Duplicate address found: addresses should only be used once each. + 중복된 주소 발견: 한번에 하나의 주소에만 작업할 수 있습니다. + + + Transaction creation failed! + 거래를 생성하는 것을 실패하였습니다! + + + The transaction was rejected with the following reason: %1 + 거래가 다음과 같은 이유로 거부되었습니다: %1 + + + A fee higher than %1 is considered an absurdly high fee. + %1 보다 높은 수수료는 너무 높은 수수료 입니다. + + + Payment request expired. + 지불 요청이 만료됨. + + + %n block(s) + %n 블록 + + + Pay only the required fee of %1 + 오직 %1 만의 수수료를 지불하기 + + + Estimated to begin confirmation within %n block(s). + %n 블록 안에 승인이 시작될 것으로 추정됩니다. + + + Warning: Invalid Bitcoin address + 경고: 잘못된 비트코인주소입니다 + + + Warning: Unknown change address + 경고: 알려지지 않은 주소변경입니다 + + + Confirm custom change address + 맞춤 주소 변경 확인 + + + The address you selected for change is not part of this wallet. Any or all funds in your wallet may be sent to this address. Are you sure? + 변경하기 위해 선택한 주소는 이 지갑의 일부가 아닙니다. 지갑에 있는 일부 또는 모든 금액을 이 주소로 보낼 수 있습니다. 확실합니까? + + (no label) (라벨 없음) @@ -1919,10 +2299,18 @@ Memo: 메모: - + + Enter a label for this address to add it to your address book + 주소록에 추가하려면 라벨을 입력하세요 + + SendConfirmationDialog - + + Yes + + + ShutdownWindow @@ -1931,7 +2319,7 @@ Do not shut down the computer until this window disappears. - 창이 사라지기 전까지 컴퓨터를 끄지마시오. + 이 창이 사라지기 전까지 컴퓨터를 끄지 마세요. @@ -2020,7 +2408,59 @@ Reset all verify message fields 모든 검증 메시지 필드 재설정 - + + Click "Sign Message" to generate signature + 서명을 만들려면 "메시지 서명"을 누르십시오 + + + The entered address is invalid. + 입력한 주소가 잘못되었습니다. + + + Please check the address and try again. + 주소를 확인하고 다시 시도하십시오. + + + The entered address does not refer to a key. + 입력한 주소는 키에서 참조하지 않습니다. + + + Wallet unlock was cancelled. + 지갑 잠금 해제를 취소했습니다. + + + Private key for the entered address is not available. + 입력한 주소에 대한 개인키가 없습니다. + + + Message signing failed. + 메시지 서명에 실패했습니다. + + + Message signed. + 메시지를 서명했습니다. + + + The signature could not be decoded. + 서명을 해독할 수 없습니다. + + + Please check the signature and try again. + 서명을 확인하고 다시 시도하십시오. + + + The signature did not match the message digest. + 메시지 다이제스트와 서명이 일치하지 않습니다. + + + Message verification failed. + 메시지 검증에 실패했습니다. + + + Message verified. + 메시지를 검증했습니다. + + SplashScreen @@ -2037,18 +2477,190 @@ TransactionDesc + + Open for %n more block(s) + %n개의 더 많은 블록 열기 + + + Open until %1 + %1 까지 열림 + + + conflicted with a transaction with %1 confirmations + %1 승인이 있는 거래와 충돌 함 + + + %1/offline + %1/오프라인 + + + 0/unconfirmed, %1 + 0/미승인, %1 + + + in memory pool + 메모리 풀 안에 있음 + + + not in memory pool + 메모리 풀 안에 없음 + + + abandoned + 버려진 + + + %1/unconfirmed + %1/미확인 + + + %1 confirmations + %1 확인됨 + + + Status + 상태 + + + , has not been successfully broadcast yet + . 아직 성공적으로 통보하지 않음 + + + , broadcast through %n node(s) + , %n개 노드를 통해 전파 + Date 날짜 - + + Source + 소스 + + + Generated + 생성됨 + + + From + 으로부터 + + + unknown + 알수없음 + + + To + 에게 + + + own address + 자신의 주소 + + + watch-only + 조회전용 + + + label + 라벨 + + + Credit + 입금액 + + + matures in %n more block(s) + %n개의 더 많은 블록을 숙성 + + + not accepted + 허용되지 않음 + + + Debit + 출금액 + + + Total debit + 총 출금액 + + + Total credit + 총 입금액 + + + Transaction fee + 거래 수수료 + + + Net amount + 총 거래액 + + + Message + 메시지 + + + Comment + 설명 + + + Transaction ID + 거래 ID + + + Transaction total size + 거래 총 크기 + + + Output index + 출력 인덱스 + + + Merchant + 상인 + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + 신규 채굴된 코인이 사용되기 위해서는 %1 개의 블록이 경과되어야 합니다. 블록을 생성할 때 블록체인에 추가되도록 네트워크에 전파되는 과정을 거치는데, 블록체인에 포함되지 못하고 실패한다면 해당 블록의 상태는 '미승인'으로 표현되고 비트코인 또한 사용될 수 없습니다. 이 현상은 다른 노드가 비슷한 시간대에 동시에 블록을 생성할 때 종종 발생할 수 있습니다. + + + Debug information + 디버깅 정보 + + + Transaction + 거래 + + + Inputs + 입력 + + + Amount + 거래액 + + + true + + + + false + 거짓 + + TransactionDescDialog This pane shows a detailed description of the transaction 이 창은 거래의 세부내역을 보여줍니다 - + + Details for %1 + %1에 대한 세부 정보 + + TransactionTableModel @@ -2063,22 +2675,138 @@ Label 라벨 + + Open for %n more block(s) + %n개의 더 많은 블록 열기 + + + Open until %1 + %1 까지 열림 + + + Offline + 오프라인 + + + Unconfirmed + 미확인 + + + Abandoned + 버려진 + + + Confirming (%1 of %2 recommended confirmations) + 승인 중 (권장되는 승인 회수 %2 대비 현재 승인 수 %1) + + + Confirmed (%1 confirmations) + 승인됨 (%1 확인됨) + + + Conflicted + 충돌 + + + Immature (%1 confirmations, will be available after %2) + 충분히 숙성되지 않은 상태 (%1 승인, %2 후에 사용 가능합니다) + + + This block was not received by any other nodes and will probably not be accepted! + 이 블록은 다른 노드로부터 받지 않아 허용되지 않을 것임! + + + Generated but not accepted + 생성되었으나 거절됨 + Received with 받은 주소 + Received from + 보낸 주소 + + Sent to 보낸 주소 + Payment to yourself + 자신에게 지불 + + + Mined + 채굴 + + + watch-only + 조회전용 + + + (n/a) + (없음) + + (no label) (라벨 없음) - + + Transaction status. Hover over this field to show number of confirmations. + 거래상황. 마우스를 올리면 검증횟수가 표시됩니다. + + + Date and time that the transaction was received. + 거래가 이루어진 날짜와 시각. + + + Type of transaction. + 거래의 종류. + + + Whether or not a watch-only address is involved in this transaction. + 조회전용 주소가 이 거래에 참여하는지 여부입니다. + + + User-defined intent/purpose of the transaction. + 거래에 대한 사용자 정의 intent/purpose + + + Amount removed from or added to balance. + 변경된 잔고. + + TransactionView + All + 전체 + + + Today + 오늘 + + + This week + 이번주 + + + This month + 이번 달 + + + Last month + 지난 달 + + + This year + 올 해 + + + Range... + 범위... + + Received with 받은 주소 @@ -2087,8 +2815,28 @@ 보낸 주소 + To yourself + 자기거래 + + + Mined + 채굴 + + + Other + 기타 + + + Enter address or label to search + 검색하기 위한 주소 또는 표 입력 + + + Min amount + 최소 거래액 + + Abandon transaction - 버려진 트랜잭션 + 버려진 거래 Copy address @@ -2104,11 +2852,11 @@ Copy transaction ID - 트랜잭션 아이디 복사 + 거래 아이디 복사 Copy raw transaction - 로우 트랜잭션 복사 + 원시 거래 복사 Copy full transaction details @@ -2136,7 +2884,7 @@ Watch-only - 모니터링 지갑 + 조회전용 Date @@ -2262,6 +3010,18 @@ 명령줄과 JSON-RPC 명령 수락 + Accept connections from outside (default: 1 if no -proxy or -connect/-noconnect) + 외부 접속을 승인합니다 (기본값 : -proxy 또는 -connect / -noconnect가 없는 경우 1) + + + Connect only to the specified node(s); -noconnect or -connect=0 alone to disable automatic connections + 지정된 노드에만 연결; 자동 연결을 사용하지 않으려면 -noconnect 또는 -connect=0 을 단독으로 사용하십시오. + + + Distributed under the MIT software license, see the accompanying file %s or %s + MIT 소프트웨어 라이센스에 따라 배포 됨, 첨부 파일 %s 또는 %s을 참조하십시오. + + If <category> is not supplied or if <category> = 1, output all debugging information. <category>가 제공되지 않거나 <category> = 1 인 경우, 모든 디버깅 정보를 출력 @@ -2303,7 +3063,7 @@ The %s developers - %s 코어 개발자 + %s 개발자 A fee rate (in %s/kB) that will be used when fee estimation has insufficient data (default: %s) @@ -2311,7 +3071,7 @@ Accept relayed transactions received from whitelisted peers even when not relaying transactions (default: %d) - 트랜잭션의 중계를 하지 않더라도 화이트 리스트에 포함된 피어에서 받은 트랜잭션은 중계하기 (기본값: %d) + 거래의 중계를 하지 않더라도 화이트 리스트에 포함된 피어에서 받은 트랜잭션은 중계하기 (기본값: %d) Bind to given address and always listen on it. Use [host]:port notation for IPv6 @@ -2323,7 +3083,7 @@ Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup - 시작시 모든 지갑 트랜잭션을 삭제하고 -rescan을 통하여 블록체인만 복구합니다. + 시작시 모든 지갑 거래를 삭제하고 -rescan을 통하여 블록체인만 복구합니다. Error loading %s: You can't enable HD on a already existing non-HD wallet @@ -2338,8 +3098,16 @@ 지갑 거래가 바뀌면 명령을 실행합니다.(%s 안의 명령어가 TxID로 바뀝니다) - Maximum total fees (in %s) to use in a single wallet transaction or raw transaction; setting this too low may abort large transactions (default: %s) - 하나의 지갑 트랜잭션에서의 총 수수료(%s)의 최대치; 너무 낮게 설정하면 큰 트랜잭션이 중지 됩니다 (기본값: %s) + Extra transactions to keep in memory for compact block reconstructions (default: %u) + 압축 블록 재구성을 위해 메모리에 보관해야하는 추가 거래 (기본값: %u) + + + If this block is in the chain assume that it and its ancestors are valid and potentially skip their script verification (0 to verify all, default: %s, testnet: %s) + 이 블록이 체인에 있으면 해당 블록과 그 조상이 유효하며 잠재적으로 스크립트 확인을 건너 뜁니다 (0은 모두 확인, 기본값: %s, testnet: %s) + + + Maximum allowed median peer time offset adjustment. Local perspective of time may be influenced by peers forward or backward by this amount. (default: %u seconds) + 허용 된 최대 중간 피어 시간 오프셋 조정. 시간에 대한 지역적 전망치는 전방 또는 후방의 피어에 의해 영향을 받을 수 있습니다. (기본값: %u 초) Please check that your computer's date and time are correct! If your clock is wrong, %s will not work properly. @@ -2350,6 +3118,10 @@ %s가 유용하다고 생각한다면 프로젝트에 공헌해주세요. 이 소프트웨어에 대한 보다 자세한 정보는 %s를 방문해주십시오. + Set lowest fee rate (in %s/kB) for transactions to be included in block creation. (default: %s) + 블록 생성시 거래가 포함되도록 최저 수수료율을 설정하십시오 (%s/kB 단위). (기본값: %s) + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) 스크립트 인증 스레드의 갯수 설정 (%u-%d, 0 = 자동, <0 = 지정된 코어 개수만큼 사용 안함, 기본값: %d) @@ -2358,6 +3130,10 @@ 블록 데이터베이스에 미래의 블록이 포함되어 있습니다. 이것은 사용자의 컴퓨터의 날짜와 시간이 올바르게 설정되어 있지 않을때 나타날 수 있습니다. 만약 사용자의 컴퓨터의 날짜와 시간이 올바르다고 확신할 때에만 블록 데이터 베이스의 재구성을 하십시오 + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + 출시 전의 테스트 빌드 입니다. - 스스로의 책임하에 사용하십시오 - 채굴이나 상업적 용도로 프로그램으로 사용하지 마십시오 + + Unable to rewind the database to a pre-fork state. You will need to redownload the blockchain 데이터베이스를 포크 전 상태로 돌리지 못했습니다. 블록체인을 다시 다운로드 해주십시오. @@ -2366,8 +3142,24 @@ 리슨(Listen) 포트를 할당하기 위해 UPnP 사용 (기본값: 열려있거나 -proxy 옵션을 사용하지 않을 시 1) + Username and hashed password for JSON-RPC connections. The field <userpw> comes in the format: <USERNAME>:<SALT>$<HASH>. A canonical python script is included in share/rpcuser. The client then connects normally using the rpcuser=<USERNAME>/rpcpassword=<PASSWORD> pair of arguments. This option can be specified multiple times + 클라이언트JSON-RPC 연결시 사용자 이름과 해시화된 암호문. <userpw> 필드는 <USERNAME>:<SALT>$<HASH> 포멧으로 구성되어 있습니다. 전형적 파이썬 스크립트에선 share/rpcuser가 포함되어 있습니다. 그런 다음 클라이언트는 rpcuser=<USERNAME>/ rpcpassword=<PASSWORD> 쌍의 인수를 사용하여 정상적으로 연결합니다. 이 옵션은 여러번 지정할 수 있습니다. + + + Wallet will not create transactions that violate mempool chain limits (default: %u) + 지갑은 mempool chain limit (기본값: %u) 을 위반하는 거래를 생성하지 않습니다. + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + 경고 : 모든 네트워크가 동의해야 하나, 일부 채굴자들에게 문제가 있는 것으로 보입니다. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + 경고: 현재 비트코인 버전이 다른 네트워크 참여자들과 동일하지 않은 것 같습니다. 당신 또는 다른 참여자들이 동일한 비트코인 버전으로 업그레이드 할 필요가 있습니다. + + You need to rebuild the database using -reindex-chainstate to change -txindex - -txindex를 바꾸기 위해서는 -reindex-chainstate를 사용해서 데이터베이스를 재구성해야 합니다. + -txindex를 바꾸기 위해서는 -reindex-chainstate 를 사용해서 데이터베이스를 재구성해야 합니다. %s corrupt, salvage failed @@ -2398,6 +3190,14 @@ %s 주소를 확인할 수 없습니다: '%s' + Chain selection options: + 체인 선택 옵션: + + + Change index out of range + 범위 밖의 인덱스 변경 + + Connection options: 연결 설정 : @@ -2419,7 +3219,7 @@ Do you want to rebuild the block database now? - 블락 데이터베이스를 다시 생성하시겠습니까? + 블록 데이터베이스를 다시 생성하시겠습니까? Enable publish hash block in <address> @@ -2427,19 +3227,19 @@ Enable publish hash transaction in <address> - <address>에 대한 해시 트랙잭션 공개 활성화 + <address>에 대한 해시 거래 공개 활성화 Enable publish raw block in <address> - <address>에 대한 로우 블록 공개 활성화 + <address>에 대한 원시 블록 공개 활성화 Enable publish raw transaction in <address> - <address>에 대한 로우 트랜잭션 공개 활성화 + <address>에 대한 원시 거래 공개 활성화 Enable transaction replacement in the memory pool (default: %u) - 메모리 풀(pool) 내의 트랜잭션 치환(replacement) 활성화 (기본값: %u) + 메모리 풀(pool) 내의 거래 치환(replacement) 활성화 (기본값: %u) Error initializing block database @@ -2507,7 +3307,7 @@ Keep the transaction memory pool below <n> megabytes (default: %u) - 트랜잭션 메모리 풀의 용량을 <n>메가바이트 아래로 유지하기 (기본값: %u) + 거래 메모리 풀의 용량을 <n>메가바이트 아래로 유지하기 (기본값: %u) Loading banlist... @@ -2590,6 +3390,10 @@ 리슨(Listen) 포트를 할당하기 위해 UPnP 사용 (기본값: %u) + Use the test chain + 테스트 체인 사용 + + User Agent comment (%s) contains unsafe characters. 사용자 정의 코멘트 (%s)에 안전하지 못한 글자가 포함되어 있습니다. @@ -2647,7 +3451,7 @@ Fees (in %s/kB) smaller than this are considered zero fee for relaying, mining and transaction creation (default: %s) - 해당 금액(%s/kB) 보다 적은 수수료는 중계, 채굴, 트랜잭션 생성에서 수수료 면제로 간주됩니다 (기본값: %s) + 해당 금액(%s/kB) 보다 적은 수수료는 중계, 채굴, 거래 생성에서 수수료 면제로 간주됩니다 (기본값: %s) If paytxfee is not set, include enough fee so transactions begin confirmation on average within n blocks (default: %u) @@ -2655,11 +3459,11 @@ Invalid amount for -maxtxfee=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions) - 유효하지 않은 금액 -maxtxfee=<amount>: '%s' (트랜잭션이 막히는 상황을 방지하게 위해 적어도 %s 의 중계 수수료를 지정해야 합니다) + 유효하지 않은 금액 -maxtxfee=<amount>: '%s' (거래가 막히는 상황을 방지하게 위해 적어도 %s 의 중계 수수료를 지정해야 합니다) Maximum size of data in data carrier transactions we relay and mine (default: %u) - 중계 및 채굴을 할 때 데이터 운송 트랜잭션에서 데이터의 최대 크기 (기본값: %u) + 중계 및 채굴을 할 때 데이터 운송 거래에서 데이터의 최대 크기 (기본값: %u) Randomize credentials for every proxy connection. This enables Tor stream isolation (default: %u) @@ -2674,8 +3478,12 @@ 거래액이 수수료를 지불하기엔 너무 작습니다 + Use hierarchical deterministic key generation (HD) after BIP32. Only has effect during wallet creation/first start + BIP32 이후에는 계층적 결정성 키 생성 (HD)을 사용하십시오. 지갑 생성/처음 시작 시에만 효과가 있습니다. + + Whitelisted peers cannot be DoS banned and their transactions are always relayed, even if they are already in the mempool, useful e.g. for a gateway - 화이트리스트에 포함된 피어는 이미 메모리풀에 포함되어 있어도 DoS 추방이 되지 않으며 그들의 트랜잭션이 항상 중계됩니다, 이는 예를 들면 게이트웨이에서 유용합니다. + 화이트리스트에 포함된 피어는 이미 메모리풀에 포함되어 있어도 DoS 추방이 되지 않으며 그들의 거래가 항상 중계됩니다, 이는 예를 들면 게이트웨이에서 유용합니다. You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain @@ -2719,7 +3527,7 @@ Keep at most <n> unconnectable transactions in memory (default: %u) - 최대 <n>개의 연결할 수 없는 트랜잭션을 메모리에 저장 (기본값: %u) + 최대 <n>개의 연결할 수 없는 거래를 메모리에 저장 (기본값: %u) Need to specify a port with -whitebind: '%s' @@ -2739,7 +3547,7 @@ Rescan the block chain for missing wallet transactions on startup - 시작시 누락된 지갑 트랜잭션에 대해 블록 체인을 다시 검색 합니다 + 시작시 누락된 지갑 거래에 대해 블록 체인을 다시 검색 합니다 Send trace/debug info to console instead of debug.log file @@ -2747,7 +3555,7 @@ Send transactions as zero-fee transactions if possible (default: %u) - 가능한 경우 수수료 없이 트랜잭션 보내기 (기본값: %u) + 가능한 경우 수수료 없이 거래 보내기 (기본값: %u) Show all debugging options (usage: --help -help-debug) @@ -2783,7 +3591,7 @@ Transaction too large for fee policy - 수수료 정책에 비해 트랜잭션이 너무 큽니다 + 수수료 정책에 비해 거래가 너무 큽니다 Transaction too large @@ -2823,7 +3631,7 @@ Execute command when the best block changes (%s in cmd is replaced by block hash) - 최고의 블럭이 변하면 명령을 실행(cmd 에 있는 %s 는 블럭 해시에 의해 대체되어 짐) + 최고의 블록이 변하면 명령을 실행 (cmd 에 있는 %s 는 블록 해시에 의해 대체되어 짐) Allow DNS lookups for -addnode, -seednode and -connect @@ -2835,27 +3643,35 @@ (1 = keep tx meta data e.g. account owner and payment request information, 2 = drop tx meta data) - (1 = 트랜잭션의 메타 데이터를 유지함 예. 계좌정보 와 지불 요구 정보, 2 = 트랜잭션 메타 데이터 파기) + (1 = 거래의 메타 데이터를 유지함 예. 계좌정보 와 지불 요구 정보, 2 = 거래 메타 데이터 파기) -maxtxfee is set very high! Fees this large could be paid on a single transaction. - -maxtxfee값이 너무 큽니다! 하나의 트랜잭션에 너무 큰 수수료가 지불 됩니다. + -maxtxfee값이 너무 큽니다! 하나의 거래에 너무 큰 수수료가 지불 됩니다. Do not keep transactions in the mempool longer than <n> hours (default: %u) - 메모리 풀에 있는 트랜잭션 기록을 <n>시간 후 부터는 유지하지 않기 (기본값: %u) + 메모리 풀에 있는 거래 기록을 <n>시간 후 부터는 유지하지 않기 (기본값: %u) + + + Equivalent bytes per sigop in transactions for relay and mining (default: %u) + 릴레이 및 마이닝 거래의 sigop 당 동등한 바이트 (기본값: %u) Fees (in %s/kB) smaller than this are considered zero fee for transaction creation (default: %s) 해당 금액(%s/kB) 보다 적은 수수료는 수수료 면제로 간주됩니다.(기본값: %s) + Force relay of transactions from whitelisted peers even if they violate local relay policy (default: %d) + 피어들이 로컬 중계 정책을 위반하더라도 화이트 리스트에 포함된 피어인경우 강제로 중계하기 (기본값: %d) + + How thorough the block verification of -checkblocks is (0-4, default: %u) -checkblocks을 통한 블록 점검 (0-4, 기본값: %u) Maintain a full transaction index, used by the getrawtransaction rpc call (default: %u) - getrawtransaction를 RPC CALL를 통해 완전한 트랜잭션 인덱스 유지 (기본값: %u) + getrawtransaction를 RPC CALL를 통해 완전한 거래 인덱스 유지 (기본값: %u) Number of seconds to keep misbehaving peers from reconnecting (default: %u) @@ -2866,8 +3682,24 @@ 디버그 정보 출력 (기본값: %u, <category> 제공은 선택입니다) + Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect/-noconnect) + 보유한 피어 주소가 적은 경우 DNS 조회를 통해 피어 주소를 요청합니다. (-connect / -noconnect가 아니라면 기본값은 1) + + + Sets the serialization of raw transaction or block hex returned in non-verbose mode, non-segwit(0) or segwit(1) (default: %d) + non-segwit(0) 또는 segwit(1) (기본값: %d) 가 아닌 자세한 정보 표시 모드로 반환 된 원시 거래 또는 블록 hex의 직렬화를 설정합니다. + + Support filtering of blocks and transaction with bloom filters (default: %u) - 블룸필터를 통해 블록과 트랜잭션 필터링 지원 (기본값: %u) + 블룸필터를 통해 블록과 거래 필터링 지원 (기본값: %u) + + + This is the transaction fee you may pay when fee estimates are not available. + 이것은 수수료 견적을 이용할 수 없을 때 지불 할 수 있는 거래 수수료입니다. + + + This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit %s and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard. + 이 제품에는 OpenSSL Project에서 OpenSSL Toolkit %s으로 사용하기 위해 개발 한 소프트웨어와 Eric Young이 작성한 암호화 소프트웨어 및 Thomas Bernard가 작성한 UPnP 소프트웨어가 포함되어 있습니다. Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments. @@ -2902,6 +3734,10 @@ 설정된 IP주소 (보기 1.2.3.4) 혹은 CIDR로 작성된 네트워크 (보기 1.2.3.0/24)로 화이트리스트에 포함된 피어에 접속합니다. 이 설정은 복수로 지정 할 수 있습니다. + %s is set very high! + %s가 매우 높게 설정되었습니다! + + (default: %s) (기본값: %s) @@ -2922,6 +3758,10 @@ 잘못된 -proxy 주소입니다: '%s' + Keypool ran out, please call keypoolrefill first + Keypool이 종료되었습니다. 먼저 keypoolrefill을 호출하십시오. + + Listen for JSON-RPC connections on <port> (default: %u or testnet: %u) JSON-RPC 연결을 <port>포트로 받기 (기본값: %u 혹은 테스트넷: %u) @@ -2935,7 +3775,7 @@ Make the wallet broadcast transactions - 지갑 브로드캐스트 트랜잭션을 만들기 + 지갑 브로드캐스트 거래를 만들기 Maximum per-connection receive buffer, <n>*1000 bytes (default: %u) @@ -2951,17 +3791,25 @@ Relay and mine data carrier transactions (default: %u) - 데이터 운송 트랜잭션을 중계 및 채굴 (기본값: %u) + 데이터 운송 거래를 중계 및 채굴 (기본값: %u) Relay non-P2SH multisig (default: %u) 비 P2SH 다중서명을 중계 (기본값: %u) + Send transactions with full-RBF opt-in enabled (default: %u) + full-RBF opt-in이 활성화 된 거래을 전송합니다. (기본값: %u) + + Set key pool size to <n> (default: %u) 키 풀 사이즈를 <n> 로 설정 (기본값: %u) + Set maximum BIP141 block weight (default: %d) + 최대 BIP141 블록 무게 설정 (기본값: %d) + + Set the number of threads to service RPC calls (default: %d) 원격 프로시져 호출 서비스를 위한 쓰레드 개수를 설정 (기본값 : %d) @@ -2979,15 +3827,39 @@ Spend unconfirmed change when sending transactions (default: %u) - 트랜잭션을 보낼 때 검증되지 않은 잔돈 쓰기 (기본값: %u) + 거래를 보낼 때 검증되지 않은 잔돈 쓰기 (기본값: %u) Starting network threads... 네트워크 스레드 시작중... + The wallet will avoid paying less than the minimum relay fee. + 지갑은 최소 중계 수수료보다 적은 금액을 지불하는 것을 피할 것입니다. + + + This is the minimum transaction fee you pay on every transaction. + 이것은 모든 거래에서 지불하는 최소 거래 수수료입니다. + + + This is the transaction fee you will pay if you send a transaction. + 이것은 거래를 보낼 경우 지불 할 거래 수수료입니다. + + Threshold for disconnecting misbehaving peers (default: %u) - 이상행동 네트워크 참여자의 연결을 차단시키기 위한 한계치 (기본값: %u) + 비정상적인 피어의 연결을 차단시키기 위한 임계값 (기본값: %u) + + + Transaction amounts must not be negative + 거래액은 반드시 정수여야합니다. + + + Transaction has too long of a mempool chain + 거래가 너무 긴 mempool 체인을 갖고 있습니다 + + + Transaction must have at least one recipient + 거래에는 최소한 한명의 수령인이 있어야 합니다. Unknown network specified in -onlynet: '%s' @@ -2999,7 +3871,7 @@ Loading block index... - 블럭 인덱스를 불러오는 중... + 블록 인덱스를 불러오는 중... Add a node to connect to and attempt to keep the connection open diff --git a/src/qt/locale/bitcoin_ne.ts b/src/qt/locale/bitcoin_ne.ts index f7fb0e5a6e8..be6e8e03910 100644 --- a/src/qt/locale/bitcoin_ne.ts +++ b/src/qt/locale/bitcoin_ne.ts @@ -41,6 +41,23 @@ &Delete &amp;मेटाउनुहोस् + + C&hoose + छनौट गर्नुहोस्... + + + Sending addresses + पठाउने ठेगानाहरू... + + + Receiving addresses + प्राप्त गर्ने ठेगानाहरू... + + + &Copy Address + ठेगाना कपी गर्नुहोस् + + AddressTableModel @@ -192,6 +209,11 @@ Amount रकम + + Copy address + ठेगाना कपी गर्नुहोस् + + EditAddressDialog @@ -204,6 +226,10 @@ Intro + + %1 will download and store a copy of the Bitcoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + %1 ले बिटकोइन ब्लक चेनको एउटा प्रतिलिपि डाउनलोड र भण्डारण गर्नेछ । यो निर्देशिकामा कम्तिमा पनि %2GB डाटा भण्डारण गरिनेछ, र यो समयसँगै बढ्नेछ । वालेटलाई पनि यो निर्देशिकामा भण्डारण गरिनेछ । + ModalOverlay @@ -213,6 +239,10 @@ OptionsDialog + + Choose the default subdivision unit to show in the interface and when sending coins. + इन्टरफेसमा र सिक्का पठाउँदा देखिने डिफल्ट उपविभाजन एकाइ चयन गर्नुहोस् । + OverviewPage @@ -281,6 +311,10 @@ Amount रकम + + Enter a Bitcoin address (e.g. %1) + कृपया बिटकोइन ठेगाना प्रवेश गर्नुहोस् (उदाहरण %1) + QObject::QObject @@ -310,14 +344,26 @@ SendCoinsDialog + + Choose... + छनौट गर्नुहोस्... + SendCoinsEntry + Choose previously used address + पहिला प्रयोग गरिएको ठेगाना प्रयोग गर्नुहोस् + + The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally. पठाइँदै गरेको रकमबाट शुल्क कटौती गरिनेछ । प्राप्तकर्ताले तपाईंले रकम क्षेत्रमा प्रवेष गरेको भन्दा थोरै बिटकोइन प्राप्त गर्ने छन् । धेरै प्राप्तकर्ता चयन गरिएको छ भने समान रूपमा शुल्क विभाजित गरिनेछ । + Enter a label for this address to add it to the list of used addresses + यो ठेगानालाई प्रयोग गरिएको ठेगानाको सूचीमा थप्न एउटा लेबल प्रविष्ट गर्नुहोस् + + A message that was attached to the bitcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network. बिटकोइनमा संलग्न गरिएको सन्देश: तपाईंको मध्यस्थको लागि कारोबारको साथमा भण्डारण गरिने URI । नोट: यो सन्देश बिटकोइन नेटवर्क मार्फत पठाइने छैन । @@ -334,6 +380,18 @@ You can sign messages/agreements with your addresses to prove you can receive bitcoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. आफ्नो ठेगानामा पठाइएको बिटकोइन प्राप्त गर्न सकिन्छ भनेर प्रमाणित गर्न तपाईंले ती ठेगानाले सन्देश/सम्झौताहरूमा हस्ताक्षर गर्न सक्नुहुन्छ । फिसिङ आक्रमणले तपाईंलाई छक्याएर अरूका लागि तपाईंको परिचयमा हस्ताक्षर गराउने प्रयास गर्न सक्ने भएकाले अस्पष्ट वा जथाभावीमा हस्ताक्षर गर्दा ध्यान दिनुहोस् । आफू सहमत भएको पूर्ण विस्तृत-कथनमा मात्र हस्ताक्षर गर्नुहोस् । + + Choose previously used address + पहिला प्रयोग गरिएको ठेगाना प्रयोग गर्नुहोस् + + + Copy the current signature to the system clipboard + वर्तमान हस्ताक्षरलाई प्रणाली क्लिपबोर्डमा कपी गर्नुहोस् + + + Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction! + सन्देश प्रमाणित गर्न, तल दिइएको स्थानमा प्राप्तकर्ता ठेगाना, सन्देश (लाइन ब्रेक, स्पेस, ट्याब, आदि उस्तै गरी कपी गर्ने कुरा सुनिश्चित गर्नुहोस्) र हस्ताक्षर &apos;s प्रविष्ट गर्नुहोस् । बीचमा-मानिसको-आक्रमणबाट बच्न हस्ताक्षर पढ्दा हस्ताक्षर गरिएको सन्देशमा जे छ त्यो भन्दा धेरै कुरामा ध्यान नदिनुहोस् । यो कार्यले हस्ताक्षर गर्ने पक्षले मात्र यो ठेगानाले प्राप्त गर्छ भन्ने कुरा प्रमाणित गर्छ, यसले कुनै पनि कारोबारको प्रेषककर्तालाई प्रमाणित गर्न सक्दैन भन्ने कुरा याद गर्नुहोस्! + SplashScreen @@ -352,6 +410,11 @@ TransactionView + + Copy address + ठेगाना कपी गर्नुहोस् + + UnitDisplayStatusBarControl @@ -364,10 +427,23 @@ WalletView + + &Export + &amp;निर्यात गर्नुहोस् + + + + Export the data in the current tab to a file + वर्तमान ट्याबको डाटालाई फाइलमा निर्यात गर्नुहोस् + bitcoin-core + Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup + वालेटको सबै कारोबार मेटाउनुहोस् र -स्टार्टअपको पुनः स्क्यान मार्फत ब्लकचेनका ती भागहरूलाई मात्र पुनः प्राप्त गर्नुहोस् + + The block database contains a block which appears to be from the future. This may be due to your computer's date and time being set incorrectly. Only rebuild the block database if you are sure that your computer's date and time are correct ब्लक डाटाबेसमा भविष्यबाट आए जस्तो देखिने एउटा ब्लक हुन्छ । तपाईंको कम्प्युटरको मिति र समय गलत तरिकाले सेट गरिएकाले यस्तो हुन सक्छ । तपाईं आफ्नो कम्प्युटरको मिति र समय सही छ भनेर पक्का हुनुहुन्छ भने मात्र ब्लक डाटाबेस पुनर्निर्माण गर्नुहोस् । diff --git a/src/qt/locale/bitcoin_nl.ts b/src/qt/locale/bitcoin_nl.ts index 2b625b5a078..e523e832810 100644 --- a/src/qt/locale/bitcoin_nl.ts +++ b/src/qt/locale/bitcoin_nl.ts @@ -3,7 +3,7 @@ AddressBookPage Right-click to edit address or label - Klik met de rechtermuisknop om het adres of label te wijzigen + Rechtermuisklik om het adres of label te wijzigen Create a new address @@ -318,6 +318,22 @@ Open &URI... + Click to disable network activity. + Klik om de netwerkactiviteit te stoppen. + + + Network activity disabled. + Netwerkactiviteit gestopt. + + + Click to enable network activity again. + Klik om de netwerkactiviteit opnieuw te starten. + + + Syncing Headers (%1%)... + Kopteksten synchroniseren (%1%)... + + Reindexing blocks on disk... Bezig met herindexeren van blokken op harde schijf... @@ -470,6 +486,10 @@ %1 client + Connecting to peers... + Gelijke worden verbonden... + + Catching up... Aan het bijwerken... @@ -512,6 +532,14 @@ Binnenkomende transactie + HD key generation is <b>enabled</b> + HD sleutel voortbrenging is <b>ingeschakeld</b> + + + HD key generation is <b>disabled</b> + HD sleutel voortbrenging is <b>uitgeschakeld</b> + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> Portemonnee is <b>versleuteld</b> en momenteel <b>geopend</b> @@ -519,7 +547,11 @@ Wallet is <b>encrypted</b> and currently <b>locked</b> Portemonnee is <b>versleuteld</b> en momenteel <b>gesloten</b> - + + A fatal error occurred. Bitcoin can no longer continue safely and will quit. + Een fatale fout heeft zich voorgedaan. Bitcoin kan niet veilig worden verdergezet en wordt afgesloten. + + CoinControlDialog @@ -854,14 +886,50 @@ Vorm + Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below. + Recente transacties zijn mogelijk nog niet zichtbaar. De balans van de geldbeugel is daarom mogelijk niet correct. Deze informatie is correct van zodra de synchronisatie met het Bitcoin-netwerk werd voltooid, zoals onderaan beschreven. + + + Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network. + Poging om bitcoins te besteden die door "nog niet weergegeven" transacties worden beïnvloed, worden niet door het netwerk geaccepteerd. + + + Number of blocks left + Aantal blokken resterend. + + + Unknown... + Onbekend... + + Last block time Tijd laatste blok + Progress + Vooruitgang + + + Progress increase per hour + Vooruitgang per uur + + + calculating... + Berekenen... + + + Estimated time left until synced + Geschatte tijd tot volledig synchroon + + Hide Verbergen - + + Unknown. Syncing Headers (%1)... + Onbekend. Kopteksten synchroniseren (%1%)... + + OpenURIDialog @@ -1296,7 +1364,15 @@ Node/Service Node/Dienst - + + NodeId + Node ID + + + Ping + Ping + + QObject @@ -1335,14 +1411,54 @@ %1 ms %1 ms + + %n second(s) + %n seconde%n seconden + + + %n minute(s) + %n minuut%n minuten + + + %n hour(s) + %n uur%n uren + + + %n day(s) + %n dag%n dagen + + + %n week(s) + %n week%n weken + %1 and %2 %1 en %2 - + + %n year(s) + %n jaar%n jaren + + + %1 didn't yet exit safely... + %1 sloot nog niet veilig af... + + QObject::QObject - + + Error: Specified data directory "%1" does not exist. + Fout: Opgegeven gegevensmap "%1" bestaat niet. + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Fout: Kan configuratiebestand niet verwerken: %1. Gebruik enkel de key=value syntax. + + + Error: %1 + Fout: %1 + + QRImageWidget @@ -1521,6 +1637,10 @@ Pingwachttijd + Min Ping + Min Ping + + Time Offset Tijdcompensatie @@ -1581,6 +1701,18 @@ 1 &jaar + &Disconnect + &Verbreek verbinding + + + Ban for + Ban Node voor + + + &Unban + &Maak ban voor Node ongedaan + + Welcome to the %1 RPC console. Welkom bij de %1 RPC-console. @@ -1593,6 +1725,14 @@ Typ <b>help</b> voor een overzicht van de beschikbare opdrachten. + WARNING: Scammers have been active, telling users to type commands here, stealing their wallet contents. Do not use this console without fully understanding the ramification of a command. + WAARSCHUWING: Er zijn Scammers actief geweest, die gebruikers vragen om hier commando's te typen, waardoor de inhoud van hun portefeuille werd gestolen. Gebruik deze console niet zonder de toedracht van een opdracht volledig te begrijpen. + + + Network activity disabled + Netwerkactiviteit uitgeschakeld + + %1 B %1 B @@ -1712,6 +1852,10 @@ Verwijder + Copy URI + Kopieer URI + + Copy label Kopieer label @@ -1937,6 +2081,10 @@ Stof: + Confirmation time target: + Bevestigingstijddoel: + + Clear &All Verwijder &Alles @@ -2029,6 +2177,10 @@ Transactiecreatie mislukt + The transaction was rejected with the following reason: %1 + De transactie werd afgewezen om de volgende reden: %1 + + A fee higher than %1 is considered an absurdly high fee. Een vergoeding van meer dan %1 wordt beschouwd als een absurd hoge vergoeding. @@ -2036,10 +2188,18 @@ Payment request expired. Betalingsverzoek verlopen. + + %n block(s) + %n blok%n blokken + Pay only the required fee of %1 Betaal alleen de verplichte transactiekosten van %1 + + Estimated to begin confirmation within %n block(s). + Schatting is dat bevestiging begint over %n blok.Schatting is dat bevestiging begint over %n blokken. + Warning: Invalid Bitcoin address Waarschuwing: Ongeldig Bitcoinadres @@ -2049,6 +2209,14 @@ Waarschuwing: Onbekend wisselgeldadres + Confirm custom change address + Bevestig aangepast wisselgeldadres + + + The address you selected for change is not part of this wallet. Any or all funds in your wallet may be sent to this address. Are you sure? + Het wisselgeldadres dat u heeft geselecteerd maakt geen deel uit van deze portemonnee. Een deel of zelfs alle geld in uw portemonnee kan mogelijk naar dit adres worden verzonden. Weet je het zeker? + + (no label) (geen label) @@ -2309,6 +2477,10 @@ TransactionDesc + + Open for %n more block(s) + Open voor nog %n blokOpen voor nog %n blokken + Open until %1 Open tot %1 @@ -2393,6 +2565,10 @@ Credit Credit + + matures in %n more block(s) + komt beschikbaar na %n nieuwe blokkomt beschikbaar na %n nieuwe blokken + not accepted niet geaccepteerd @@ -2430,6 +2606,10 @@ Transactie-ID + Transaction total size + Transactie totale grootte + + Output index Output index @@ -2491,6 +2671,10 @@ Label Label + + Open for %n more block(s) + Open voor nog %n blokOpen voor nog %n blokken + Open until %1 Open tot %1 @@ -2822,6 +3006,18 @@ Aanvaard opdrachtregel- en JSON-RPC-opdrachten + Accept connections from outside (default: 1 if no -proxy or -connect/-noconnect) + Accepteer verbindingen van buitenaf (standaard: 1 indien geen -proxy of -connect/-noconnect werd opgegeven) + + + Connect only to the specified node(s); -noconnect or -connect=0 alone to disable automatic connections + Verbind enkel met de opgegeven knooppunt(en); -noconnect of -connect = 0 alleen om automatische verbindingen uit te schakelen + + + Distributed under the MIT software license, see the accompanying file %s or %s + Uitgegeven onder de MIT software licentie, zie het bijgevoegde bestand %s of %s + + If <category> is not supplied or if <category> = 1, output all debugging information. Als er geen <categorie> is opgegeven of als de <categorie> 1 is, laat dan alle debugginginformatie zien. @@ -2898,6 +3094,14 @@ Voer opdracht uit zodra een portemonneetransactie verandert (%s in cmd wordt vervangen door TxID) + Extra transactions to keep in memory for compact block reconstructions (default: %u) + Extra transacties wordt bijgehouden voor compacte blokreconstructie (standaard: %u) + + + If this block is in the chain assume that it and its ancestors are valid and potentially skip their script verification (0 to verify all, default: %s, testnet: %s) + Als dit blok in de keten staat, gaat het ervan uit dat dit blok en zijn voorouders geldig zijn en mogelijk hun script verificatie overslaan (0 om alles te verifiëren, standaard:%s, testnet:%s) + + Maximum allowed median peer time offset adjustment. Local perspective of time may be influenced by peers forward or backward by this amount. (default: %u seconds) Maximum toegestane peer tijd compensatie. Lokaal perspectief van tijd mag worden beinvloed door peers die met deze hoeveelheid voor of achter lopen. (standaard: %u seconden) @@ -2914,6 +3118,14 @@ Gelieve bij te dragen als je %s nuttig vindt. Bezoek %s voor meer informatie over de software. + Reduce storage requirements by enabling pruning (deleting) of old blocks. This allows the pruneblockchain RPC to be called to delete specific blocks, and enables automatic pruning of old blocks if a target size in MiB is provided. This mode is incompatible with -txindex and -rescan. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, >%u = automatically prune block files to stay under the specified target size in MiB) + Beperk benodigde opslag door trimmen (verwijderen) van oude blokken in te schakelen. Dit maakt het mogelijk om de pruneblockchain RPC aan te roepen om specifieke blokken te verwijderen, en maakt het automatische trimmen van oude blokken mogelijk wanneer een doelgrootte in MiB is voorzien. Deze modus is niet compatibele met -txindex en -rescan. Waarschuwing: Terugzetten van deze instellingen vereist het opnieuw downloaden van gehele de blokketen. (standaard:0 = uitzetten trimmodus, 1 = manueel trimmen via RPC toestaan, >%u = automatisch blokbestanden trimmen om beneden de gespecificeerde doelgrootte in MiB te blijven) + + + Set lowest fee rate (in %s/kB) for transactions to be included in block creation. (default: %s) + Specificeer het laagste tarief (in %s/kB) voor transacties die bij het maken van een blok moeten worden in rekening worden gebracht (standaard: %s) + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) Kies het aantal scriptverificatie processen (%u tot %d, 0 = auto, <0 = laat dit aantal kernen vrij, standaard: %d) @@ -2922,6 +3134,10 @@ De blokdatabase bevat een blok dat lijkt uit de toekomst te komen. Dit kan gebeuren omdat de datum en tijd van uw computer niet goed staat. Herbouw de blokdatabase pas nadat u de datum en tijd van uw computer correct heeft ingesteld. + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + Dit is een pre-release testversie - gebruik op eigen risico! Gebruik deze niet voor het delven van munten of handelsdoeleinden + + Unable to rewind the database to a pre-fork state. You will need to redownload the blockchain Niet mogelijk om de databank terug te draaien naar een staat voor de vork. Je zal je blokketen opnieuw moeten downloaden @@ -2930,6 +3146,22 @@ Gebruik UPnP om de luisterende poort te mappen (standaard: 1 als er geluisterd worden en geen -proxy is meegegeven) + Username and hashed password for JSON-RPC connections. The field <userpw> comes in the format: <USERNAME>:<SALT>$<HASH>. A canonical python script is included in share/rpcuser. The client then connects normally using the rpcuser=<USERNAME>/rpcpassword=<PASSWORD> pair of arguments. This option can be specified multiple times + Gebruikersnaam en gehasht wachtwoord voor JSON-RPC-verbindingen. De velden <userpw> is in het formaat: <GEBRUIKERSNAAM>:<SALT>$<HASH>. Een kanoniek Pythonscript is inbegrepen in de share/rpcuser. De klant connecteert dan normaal via de rpcuser=<GEBRUIKERSNAAM>/rpcpassword=<PASWOORD> argumenten. Deze optie kan meerdere keren worden meegegeven + + + Wallet will not create transactions that violate mempool chain limits (default: %u) + Portemonnee creëert geen transacties die mempool-ketenlimieten schenden (standaard: %u) + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Waarschuwing: Het lijkt erop dat het netwerk geen consensus kan vinden! Sommige delvers lijken problemen te ondervinden. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Waarschuwing: Het lijkt erop dat we geen consensus kunnen vinden met onze peers! Mogelijk dient u te upgraden, of andere nodes moeten wellicht upgraden. + + You need to rebuild the database using -reindex-chainstate to change -txindex Om -txindex te kunnen veranderen dient u de database opnieuw te bouwen met gebruik van -reindex-chainstate. @@ -2962,6 +3194,10 @@ Kan -%s adres niet herleiden: '%s' + Chain selection options: + Keten selectie opties: + + Change index out of range Wijzigingsindex buiten bereik @@ -3158,6 +3394,10 @@ Gebruik UPnP om de luisterende poort te mappen (standaard: %u) + Use the test chain + Gebruik de test keten + + User Agent comment (%s) contains unsafe characters. User Agentcommentaar (%s) bevat onveilige karakters. @@ -3450,10 +3690,22 @@ Output extra debugginginformatie (standaard: %u, het leveren van <categorie> is optioneel) + Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect/-noconnect) + Query voor peer-adressen via DNS-lookup , indien laag aan adressen (default: 1 unless -connect/-noconnect) + + Support filtering of blocks and transaction with bloom filters (default: %u) Ondersteun filtering van blokken en transacties met bloomfilters (standaard: %u) + This is the transaction fee you may pay when fee estimates are not available. + Dit is de transactiekost die je mogelijk betaald indien geschatte tarief niet beschikbaar is + + + This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit %s and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard. + Dit product bevat software dat ontwikkeld is door het OpenSSL Project voor gebruik in de OpenSSL Toolkit %s en cryptografische software geschreven door Eric Young en UPnP software geschreven door Thomas Bernard. + + Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments. Totale lengte van netwerkversiestring (%i) overschrijdt maximale lengte (%i). Verminder het aantal of grootte van uacomments. @@ -3482,6 +3734,14 @@ Waarschuwing: portomonee bestand is corrupt, data is veiliggesteld! Originele %s is opgeslagen als %s in %s; als uw balans of transacties incorrect zijn dient u een backup terug te zetten. + Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times. + Goedgekeurde peers die verbinden vanaf een bepaald IP adres (vb. 1.2.3.4) of CIDR genoteerd netwerk (vb. 1.2.3.0/24). Kan meerdere keren worden gespecificeerd. + + + %s is set very high! + %s is zeer hoog ingesteld! + + (default: %s) (standaard: %s) @@ -3502,6 +3762,10 @@ Ongeldig -proxy adres: '%s' + Keypool ran out, please call keypoolrefill first + Keypool op geraakt, roep alsjeblieft eerst keypoolrefill functie aan + + Listen for JSON-RPC connections on <port> (default: %u or testnet: %u) Luister naar JSON-RPC-verbindingen op <poort> (standaard: %u of testnet: %u) @@ -3538,6 +3802,10 @@ Geef non-P2SH multisig door (standaard: %u) + Send transactions with full-RBF opt-in enabled (default: %u) + Verstuur transacties met full-RBF opt-in ingeschakeld (standaard: %u) + + Set key pool size to <n> (default: %u) Stel sleutelpoelgrootte in op <n> (standaard: %u) @@ -3570,10 +3838,34 @@ Netwerkthread starten... + The wallet will avoid paying less than the minimum relay fee. + De portemonnee vermijdt minder te betalen dan het minimale relay vergoeding. + + + This is the minimum transaction fee you pay on every transaction. + Dit is het minimum transactietarief dat je betaald op elke transactie. + + + This is the transaction fee you will pay if you send a transaction. + Dit is het transactietarief dat je betaald wanneer je een transactie verstuurt. + + Threshold for disconnecting misbehaving peers (default: %u) Drempel om verbinding te verbreken naar zich misdragende peers (standaard: %u) + Transaction amounts must not be negative + Transactiebedragen moeten positief zijn + + + Transaction has too long of a mempool chain + Transactie heeft een te lange mempoolketen + + + Transaction must have at least one recipient + Transactie moet ten minste één ontvanger hebben + + Unknown network specified in -onlynet: '%s' Onbekend netwerk gespecificeerd in -onlynet: '%s' diff --git a/src/qt/locale/bitcoin_ru_RU.ts b/src/qt/locale/bitcoin_ru_RU.ts index 60d98c41d95..66ab7c81f49 100644 --- a/src/qt/locale/bitcoin_ru_RU.ts +++ b/src/qt/locale/bitcoin_ru_RU.ts @@ -3,7 +3,7 @@ AddressBookPage Right-click to edit address or label - Кликните правой кнопкой мыши для редоктирования адреса или ярлыка + Кликните правой кнопкой мыши для редактирования адреса или метки Create a new address @@ -15,7 +15,7 @@ Copy the currently selected address to the system clipboard - Copy the currently selected address to the system clipboardый адрес в буфер + Скопировать текущий выбранный адрес в буфер обмена системы &Copy @@ -41,6 +41,14 @@ &Delete Удалить + + Choose the address to send coins to + Выбрать адрес для отправки монет + + + Choose the address to receive coins with + Выбрать адрес для получения монет + AddressTableModel diff --git a/src/qt/locale/bitcoin_sk.ts b/src/qt/locale/bitcoin_sk.ts index 3cd287d3add..510d1aaf618 100644 --- a/src/qt/locale/bitcoin_sk.ts +++ b/src/qt/locale/bitcoin_sk.ts @@ -168,6 +168,10 @@ Potvrďte zašifrovanie peňaženky + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>! + Varovanie: Ak zašifrujete peňaženku a stratíte heslo, <b>STRATÍTE VŠETKY VAŠE BITCOINY</b>! + + Are you sure you wish to encrypt your wallet? Ste si istí, že si želáte zašifrovať peňaženku? @@ -176,6 +180,10 @@ Peňaženka zašifrovaná + %1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. + %1 sa teraz zavrie, aby sa ukončil proces šifrovania. Zašifrovanie peňaženky neochráni úplne pred krádežou bitcoinov škodlivými programami, ktoré prenikli do vášho počítača. + + IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. DÔLEŽITÉ: Všetky predchádzajúce zálohy vašej peňaženky, ktoré ste vykonali by mali byť nahradené novo vytvorenou, zašifrovanou peňaženkou. Z bezpečnostných dôvodov bude predchádzajúca záloha nezašifrovanej peňaženky k ničomu, akonáhle začnete používať novú, zašifrovanú peňaženku. @@ -310,6 +318,22 @@ Otvoriť &URI... + Click to disable network activity. + Kliknite pre zakázanie sieťovej aktivity. + + + Network activity disabled. + Sieťová aktivita zakázaná. + + + Click to enable network activity again. + Kliknite pre povolenie sieťovej aktivity. + + + Syncing Headers (%1%)... + Synchronizujú sa hlavičky (%1%)... + + Reindexing blocks on disk... Preindexúvam bloky na disku... @@ -431,7 +455,7 @@ Last received block was generated %1 ago. - Posledný prijatý blok bol vygenerovaný pred %1. + Posledný prijatý blok bol vygenerovaný pred: %1. Transactions after this will not yet be visible. @@ -462,6 +486,10 @@ %1 klient + Connecting to peers... + Pripája sa k partnerom... + + Catching up... Sťahujem... @@ -511,7 +539,11 @@ Wallet is <b>encrypted</b> and currently <b>locked</b> Peňaženka je <b>zašifrovaná</b> a momentálne <b>zamknutá</b> - + + A fatal error occurred. Bitcoin can no longer continue safely and will quit. + Vyskytla sa kritická chyba. Bitcoin nemôže ďalej bezpečne pokračovať a ukončí sa. + + CoinControlDialog @@ -647,6 +679,10 @@ Tento popis sčervenie ak ktorýkoľvek príjemca dostane sumu menšiu ako súčasný limit pre "prach". + Can vary +/- %1 satoshi(s) per input. + Môže sa líšiť o +/- %1 satoshi pre každý vstup. + + (no label) (bez popisu) @@ -842,10 +878,38 @@ Forma + Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below. + Nedávne transakcie nemusia byť ešte viditeľné preto môže byť zostatok vo vašej peňaženke nesprávny. Táto informácia bude správna keď sa dokončí synchronizovanie peňaženky so sieťou bitcoin, ako je rozpísané nižšie. + + + Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network. + Pokus o minutie bitcoinov, ktoré sú ovplyvnené ešte nezobrazenými transakciami, nebude sieťou akceptovaný. + + + Number of blocks left + Počet zostávajúcich blokov + + + Unknown... + Neznáme... + + Last block time Čas posledného bloku + Progress + Postup synchronizácie + + + Progress increase per hour + Prírastok postupu za hodinu + + + calculating... + počíta sa... + + Estimated time left until synced Odhadovaný čas do ukončenia synchronizácie @@ -853,7 +917,11 @@ Hide Skryť - + + Unknown. Syncing Headers (%1)... + Neznámy. Synchronizujú sa hlavičky (%1)... + + OpenURIDialog @@ -1284,7 +1352,15 @@ Node/Service Uzol/Služba - + + NodeId + ID uzlu + + + Ping + Odozva + + QObject @@ -1324,6 +1400,22 @@ %1 ms + %n second(s) + %n sekunda%n sekundy%n sekúnd + + + %n minute(s) + %n minúta%n minúty%n minút + + + %n hour(s) + %n hodina%n hodiny%n hodín + + + %n day(s) + %n deň%n dni%n dní + + %n week(s) %n týždeň%n týždne%n týždňov @@ -1335,10 +1427,18 @@ %n year(s) %n rok%n roky%n rokov - + + %1 didn't yet exit safely... + %1 ešte nebol bezpečne ukončený... + + QObject::QObject - + + Error: %1 + Chyba: %1 + + QRImageWidget @@ -1382,7 +1482,7 @@ Using BerkeleyDB version - Používa BerkeleyDB verziu + Používa verziu BerkeleyDB Datadir @@ -1418,7 +1518,7 @@ Current number of transactions - Aktuálny počet tranzakcií + Aktuálny počet transakcií Memory usage @@ -1458,7 +1558,7 @@ Starting Block - Počiatočný Blok + Počiatočný blok Synced Headers @@ -1511,11 +1611,15 @@ The duration of a currently outstanding ping. - Trvanie aktuálneho pingu + Trvanie aktuálnej požiadavky na odozvu. Ping Wait - Čakanie na ping + Čakanie na odozvu + + + Min Ping + Minimálna odozva Time Offset @@ -1578,6 +1682,18 @@ 1 &rok + &Disconnect + &Odpojiť + + + Ban for + Zakázať na + + + &Unban + &Zrušiť zákaz + + Welcome to the %1 RPC console. Vitajte v %1 RPC konzole @@ -1594,6 +1710,10 @@ VAROVANIE: Podvodníci sú aktívni a môžu nabádať používateľov napísať sem príkazy, pomocou ktorých ukradnú ich obsah peňaženky. Nepoužívajte túto konzolu ak nerozumiete presne účinkom príkazov. + Network activity disabled + Sieťová aktivita zakázaná + + %1 B %1 B @@ -1713,6 +1833,10 @@ Odstrániť + Copy URI + Kopírovať URI + + Copy label Kopírovať popis @@ -1911,7 +2035,7 @@ (Smart fee not initialized yet. This usually takes a few blocks...) - (Automatický poplatok ešte nebol aktivovaný. Toto zvyčajne trvá niekoľko blokov...) + (Automatický poplatok ešte nebol vypočítaný. Toto zvyčajne trvá niekoľko blokov...) normal @@ -1994,6 +2118,10 @@ Určite chcete odoslať transakciu? + added as transaction fee + pridané ako poplatok za transakciu + + Total Amount %1 Celková suma %1 @@ -2030,10 +2158,26 @@ Vytvorenie transakcie zlyhalo! + The transaction was rejected with the following reason: %1 + Transakcia bola odmietnutá z nasledujúceho dôvodu: %1 + + + A fee higher than %1 is considered an absurdly high fee. + Poplatok vyšší ako %1 sa považuje za neprimerane vysoký. + + Payment request expired. Vypršala platnosť požiadavky na platbu. + %n block(s) + %n blok%n bloky%n blokov + + + Pay only the required fee of %1 + Zaplatiť iba požadovaný poplatok %1 + + Estimated to begin confirmation within %n block(s). Odhadovaný začiatok potvrdzovania po %n bloku.Odhadovaný začiatok potvrdzovania po %n blokoch.Odhadovaný začiatok potvrdzovania po %n blokoch. @@ -2090,7 +2234,7 @@ Paste address from clipboard - Vložte adresu z klipbordu + Vložiť adresu zo schránky Alt+P @@ -2187,7 +2331,7 @@ Paste address from clipboard - Vložte adresu z klipbordu + Vložiť adresu zo schránky Alt+P @@ -2203,7 +2347,7 @@ Copy the current signature to the system clipboard - Kopírovať práve zvolenú adresu do systémového klipbordu + Kopírovať tento podpis do systémovej schránky Sign the message to prove you own this Bitcoin address @@ -2423,6 +2567,10 @@ ID transakcie + Transaction total size + Celková veľkosť transakcie + + Merchant Kupec @@ -2461,7 +2609,11 @@ This pane shows a detailed description of the transaction Táto časť obrazovky zobrazuje detailný popis transakcie - + + Details for %1 + Podrobnosti pre %1 + + TransactionTableModel @@ -2644,6 +2796,10 @@ Skopírovať neupravenú transakciu + Copy full transaction details + Kopírovať všetky podrobnosti o transakcii + + Edit label Upraviť popis @@ -2804,7 +2960,7 @@ Fee (in %s/kB) to add to transactions you send (default: %s) - Poplatok (za %s/kB) pridaný do tranzakcie, ktorú posielate (predvolené: %s) + Poplatok (za %s/kB) pridaný do transakcie, ktorú posielate (predvolené: %s) Pruning blockstore... @@ -2932,7 +3088,7 @@ Enable publish hash transaction in <address> - Povoliť zverejnenie hash tranzakcií pre <address> + Povoliť zverejnenie hash transakcií pre <address> Enable publish raw block in <address> @@ -3152,7 +3308,7 @@ The transaction amount is too small to send after the fee has been deducted - Suma je príliš malá pre odoslanie tranzakcie + Suma je príliš malá pre odoslanie transakcie Whitelisted peers cannot be DoS banned and their transactions are always relayed, even if they are already in the mempool, useful e.g. for a gateway @@ -3236,7 +3392,7 @@ The transaction amount is too small to pay the fee - Suma tranzakcie je príliš malá na zaplatenie poplatku + Suma transakcie je príliš malá na zaplatenie poplatku This is experimental software. @@ -3323,6 +3479,10 @@ Výstupné ladiace informácie (predvolené: %u, dodanie <category> je voliteľné) + This is the transaction fee you may pay when fee estimates are not available. + Toto je poplatok za transakciu keď odhad poplatkov ešte nie je k dispozícii. + + Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments. Celková dĺžka verzie sieťového reťazca (%i) prekračuje maximálnu dĺžku (%i). Znížte počet a veľkosť komentárov. @@ -3355,6 +3515,10 @@ Povoliť partnerov pripájajúcich sa z danej IP adresy (napr. 1.2.3.4) alebo zo siete vo formáte CIDR (napr. 1.2.3.0/24). Môže byť zadané viackrát. + %s is set very high! + Hodnota %s je nastavená veľmi vysoko! + + (default: %s) (predvolené: %s) @@ -3431,6 +3595,22 @@ Minúť nepotvrdené zmenu pri posielaní transakcií (predvolené: %u) + Starting network threads... + Spúšťajú sa sieťové vlákna... + + + The wallet will avoid paying less than the minimum relay fee. + Peňaženka zabráni zaplateniu menšej sumy ako je minimálny poplatok. + + + This is the minimum transaction fee you pay on every transaction. + Toto je minimálny poplatok za transakciu pri každej transakcii. + + + This is the transaction fee you will pay if you send a transaction. + Toto je poplatok za transakciu pri odoslaní transakcie. + + Threshold for disconnecting misbehaving peers (default: %u) Hranica pre odpájanie zle sa správajúcim partnerským uzlom (predvolené: %u) @@ -3439,6 +3619,10 @@ Sumy transakcií nesmú byť záporné + Transaction must have at least one recipient + Transakcia musí mať aspoň jedného príjemcu + + Unknown network specified in -onlynet: '%s' Neznáma sieť upresnená v -onlynet: '%s' diff --git a/src/qt/locale/bitcoin_uk.ts b/src/qt/locale/bitcoin_uk.ts index 2c017fc52e2..7126b2e5c15 100644 --- a/src/qt/locale/bitcoin_uk.ts +++ b/src/qt/locale/bitcoin_uk.ts @@ -41,10 +41,62 @@ &Delete &Видалити - + + Choose the address to send coins to + Оберіть адресу для відправки монет + + + Choose the address to receive coins with + Оберіть адресу для отримання монет + + + C&hoose + О&брати + + + Sending addresses + Адреса відправлення + + + Receiving addresses + Адреса отримання + + + Copy &Label + Зкопіювати&Створити мітку + + + &Edit + &Редагувати + + + Export Address List + Експотувати список адрес + + + Comma separated file (*.csv) + Файли (*.csv) розділеі комами + + + Exporting Failed + Експортування пройшло не успішно + + + There was an error trying to save the address list to %1. Please try again. + Виникла помилка при спрбі збереження списку адрес %1. Будь-ласка, спробувати пізніше. + + AddressTableModel - + + Label + Мітка + + + (no label) + (немає мітки) + + AskPassphraseDialog @@ -410,6 +462,10 @@ Confirmed Підтверджені + + (no label) + немає мітки + EditAddressDialog @@ -1270,9 +1326,21 @@ &Save Image... &Зберегти зображення... + + Label + Мітка + RecentRequestsTableModel + + Label + Мітка + + + (no label) + немає мітки + SendCoinsDialog @@ -1416,7 +1484,11 @@ S&end &Відправити - + + (no label) + немає мітки + + SendCoinsEntry @@ -1619,9 +1691,29 @@ TransactionTableModel + + Label + Мітка + + + (no label) + немає мітки + TransactionView + + Comma separated file (*.csv) + Файли (*.csv) розділеі комами + + + Label + Мітка + + + Exporting Failed + Експортування пройшло не успішно + UnitDisplayStatusBarControl diff --git a/src/qt/locale/bitcoin_ur_PK.ts b/src/qt/locale/bitcoin_ur_PK.ts index 923198c91a3..bd0ef617ae7 100644 --- a/src/qt/locale/bitcoin_ur_PK.ts +++ b/src/qt/locale/bitcoin_ur_PK.ts @@ -41,9 +41,25 @@ &Delete مٹا + + Choose the address to send coins to + کوئین وصول کرنے والے کا پتہ + + + Choose the address to receive coins with + کوئین وصول کرنے والے کا پتہ + + + C&hoose + چننا + AddressTableModel + + Address + پتہ + AskPassphraseDialog @@ -152,6 +168,10 @@ Copy &Address کاپی پتہ + + Address + پتہ + RecentRequestsTableModel @@ -200,6 +220,10 @@ TransactionView + + Address + پتہ + UnitDisplayStatusBarControl diff --git a/src/qt/locale/bitcoin_vi_VN.ts b/src/qt/locale/bitcoin_vi_VN.ts index c27111a52a2..8c4bececa14 100644 --- a/src/qt/locale/bitcoin_vi_VN.ts +++ b/src/qt/locale/bitcoin_vi_VN.ts @@ -41,6 +41,26 @@ &Delete &Xó&a + + Choose the address to send coins to + Chọn địa chỉ để gửi coin đến + + + Choose the address to receive coins with + Chọn địa chỉ để nhận coin + + + C&hoose + Chọn + + + Sending addresses + Địa chỉ gửi đến + + + Receiving addresses + Địa chỉ nhận + AddressTableModel From 5e408d99a219f80e3dab06d3ba03f102d404b886 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Tue, 6 Jun 2017 16:26:44 +0200 Subject: [PATCH 134/136] doc: Update manpages for 0.14.2 --- doc/man/bitcoin-cli.1 | 6 +++--- doc/man/bitcoin-qt.1 | 8 ++++---- doc/man/bitcoin-tx.1 | 6 +++--- doc/man/bitcoind.1 | 8 ++++---- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/doc/man/bitcoin-cli.1 b/doc/man/bitcoin-cli.1 index 844ec40a485..77ee12f04a8 100644 --- a/doc/man/bitcoin-cli.1 +++ b/doc/man/bitcoin-cli.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. -.TH BITCOIN-CLI "1" "February 2017" "bitcoin-cli v0.14.0.0" "User Commands" +.TH BITCOIN-CLI "1" "June 2017" "bitcoin-cli v0.14.2.0" "User Commands" .SH NAME -bitcoin-cli \- manual page for bitcoin-cli v0.14.0.0 +bitcoin-cli \- manual page for bitcoin-cli v0.14.2.0 .SH DESCRIPTION -Bitcoin Core RPC client version v0.14.0.0\-dirty +Bitcoin Core RPC client version v0.14.2.0 .SS "Usage:" .TP bitcoin\-cli [options] [params] diff --git a/doc/man/bitcoin-qt.1 b/doc/man/bitcoin-qt.1 index c1edae22b36..a51d4f63160 100644 --- a/doc/man/bitcoin-qt.1 +++ b/doc/man/bitcoin-qt.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. -.TH BITCOIN-QT "1" "February 2017" "bitcoin-qt v0.14.0.0" "User Commands" +.TH BITCOIN-QT "1" "June 2017" "bitcoin-qt v0.14.2.0" "User Commands" .SH NAME -bitcoin-qt \- manual page for bitcoin-qt v0.14.0.0 +bitcoin-qt \- manual page for bitcoin-qt v0.14.2.0 .SH DESCRIPTION -Bitcoin Core version v0.14.0.0\-dirty (64\-bit) +Bitcoin Core version v0.14.2.0 (64\-bit) Usage: .IP bitcoin\-qt [command\-line options] @@ -46,7 +46,7 @@ Specify data directory .HP \fB\-dbcache=\fR .IP -Set database cache size in megabytes (4 to 16384, default: 300) +Set database cache size in megabytes (4 to 16384, default: 450) .HP \fB\-loadblock=\fR .IP diff --git a/doc/man/bitcoin-tx.1 b/doc/man/bitcoin-tx.1 index 73d4e4b7942..04ec7b95532 100644 --- a/doc/man/bitcoin-tx.1 +++ b/doc/man/bitcoin-tx.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. -.TH BITCOIN-TX "1" "February 2017" "bitcoin-tx v0.14.0.0" "User Commands" +.TH BITCOIN-TX "1" "June 2017" "bitcoin-tx v0.14.2.0" "User Commands" .SH NAME -bitcoin-tx \- manual page for bitcoin-tx v0.14.0.0 +bitcoin-tx \- manual page for bitcoin-tx v0.14.2.0 .SH DESCRIPTION -Bitcoin Core bitcoin\-tx utility version v0.14.0.0\-dirty +Bitcoin Core bitcoin\-tx utility version v0.14.2.0 .SS "Usage:" .TP bitcoin\-tx [options] [commands] diff --git a/doc/man/bitcoind.1 b/doc/man/bitcoind.1 index e8c68c18edd..b3d8e0b9a33 100644 --- a/doc/man/bitcoind.1 +++ b/doc/man/bitcoind.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. -.TH BITCOIND "1" "February 2017" "bitcoind v0.14.0.0" "User Commands" +.TH BITCOIND "1" "June 2017" "bitcoind v0.14.2.0" "User Commands" .SH NAME -bitcoind \- manual page for bitcoind v0.14.0.0 +bitcoind \- manual page for bitcoind v0.14.2.0 .SH DESCRIPTION -Bitcoin Core Daemon version v0.14.0.0\-dirty +Bitcoin Core Daemon version v0.14.2.0 .SS "Usage:" .TP bitcoind [options] @@ -51,7 +51,7 @@ Specify data directory .HP \fB\-dbcache=\fR .IP -Set database cache size in megabytes (4 to 16384, default: 300) +Set database cache size in megabytes (4 to 16384, default: 450) .HP \fB\-loadblock=\fR .IP From 7a643511b474d53f952d3cd403af51aabd104044 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Wed, 7 Jun 2017 13:06:11 +0200 Subject: [PATCH 135/136] doc: Fill in details about miniupnp CVE-2017-8798 --- doc/release-notes.md | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/doc/release-notes.md b/doc/release-notes.md index 1fbade55a73..defec1696d6 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -33,7 +33,17 @@ Notable changes miniupnp CVE-2017-8798 ---------------------------- -[todo] +Bundled miniupnpc was updated to 2.0.20170509. This fixes an integer signedness error +(present in MiniUPnPc v1.4.20101221 through v2.0) that allows remote attackers +(within the LAN) to cause a denial of service or possibly have unspecified +other impact. + +This only affects users that have explicitly enabled UPnP through the GUI +setting or through the `-upnp` option, as since the last UPnP vulnerability +(in Bitcoin Core 0.10.3) it has been disabled by default. + +If you use this option, it is recommended to upgrade to this version as soon as +possible. 0.14.2 Change log ================= @@ -48,10 +58,10 @@ git merge commit are mentioned. ### P2P protocol and network code - #10424 `37a8fc5` Populate services in GetLocalAddress (morcos) -- #10441 `9e3ad50` net: only enforce expected services for half of outgoing connections (theuni) +- #10441 `9e3ad50` Only enforce expected services for half of outgoing connections (theuni) ### Build system -- #10414 `ffb0c4b` [depends] miniupnpc 2.0.20170509 (fanquake) +- #10414 `ffb0c4b` miniupnpc 2.0.20170509 (fanquake) - #10228 `ae479bc` Regenerate bitcoin-config.h as necessary (theuni) ### Miscellaneous From 60b967ec41edc93f7f2d7cc115c169348be28b69 Mon Sep 17 00:00:00 2001 From: Alex Morcos Date: Wed, 14 Jun 2017 14:34:29 -0400 Subject: [PATCH 136/136] Note preexisting bug in display of fee calculation in coin control --- doc/release-notes.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/doc/release-notes.md b/doc/release-notes.md index defec1696d6..0ad554b7738 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -45,6 +45,15 @@ setting or through the `-upnp` option, as since the last UPnP vulnerability If you use this option, it is recommended to upgrade to this version as soon as possible. +Known Bugs +========== + +Since 0.14.0 the approximate transaction fee shown in Bitcoin-Qt when using coin +control and smart fee estimation does not reflect any change in target from the +smart fee slider. It will only present an approximate fee calculated using the +default target. The fee calculated using the correct target is still applied to +the transaction and shown in the final send confirmation dialog. + 0.14.2 Change log =================