diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/addrman.cpp | 2 | ||||
-rw-r--r-- | src/base58.h | 10 | ||||
-rw-r--r-- | src/bignum.h | 2 | ||||
-rw-r--r-- | src/bitcoinrpc.cpp | 4 | ||||
-rw-r--r-- | src/db.cpp | 4 | ||||
-rw-r--r-- | src/keystore.h | 2 | ||||
-rw-r--r-- | src/main.cpp | 54 | ||||
-rw-r--r-- | src/main.h | 3 | ||||
-rw-r--r-- | src/makefile.osx | 2 | ||||
-rw-r--r-- | src/makefile.unix | 2 | ||||
-rw-r--r-- | src/net.cpp | 3 | ||||
-rw-r--r-- | src/net.h | 4 | ||||
-rw-r--r-- | src/protocol.h | 7 | ||||
-rw-r--r-- | src/qt/addresstablemodel.cpp | 3 | ||||
-rw-r--r-- | src/qt/bitcoin.cpp | 13 | ||||
-rw-r--r-- | src/qt/bitcoingui.cpp | 19 | ||||
-rw-r--r-- | src/qt/bitcoinstrings.cpp | 73 | ||||
-rw-r--r-- | src/qt/editaddressdialog.cpp | 3 | ||||
-rw-r--r-- | src/qt/locale/bitcoin_en.ts | 640 | ||||
-rw-r--r-- | src/qt/qrcodedialog.cpp | 5 | ||||
-rw-r--r-- | src/qt/sendcoinsdialog.cpp | 2 | ||||
-rw-r--r-- | src/qt/sendcoinsentry.cpp | 8 | ||||
-rw-r--r-- | src/qt/transactiontablemodel.cpp | 3 | ||||
-rw-r--r-- | src/qt/walletmodel.h | 3 | ||||
-rw-r--r-- | src/script.cpp | 1 | ||||
-rw-r--r-- | src/serialize.h | 3 | ||||
-rw-r--r-- | src/test/key_tests.cpp | 12 | ||||
-rw-r--r-- | src/uint256.h | 2 | ||||
-rw-r--r-- | src/util.cpp | 17 | ||||
-rw-r--r-- | src/version.cpp | 10 | ||||
-rw-r--r-- | src/version.h | 36 | ||||
-rw-r--r-- | src/wallet.cpp | 2 | ||||
-rw-r--r-- | src/wallet.h | 2 |
33 files changed, 625 insertions, 331 deletions
diff --git a/src/addrman.cpp b/src/addrman.cpp index 2ef666cf2c..8fb40b46df 100644 --- a/src/addrman.cpp +++ b/src/addrman.cpp @@ -312,7 +312,7 @@ bool CAddrMan::Add_(const CAddress &addr, const CNetAddr& source, int64 nTimePen pinfo->nServices |= addr.nServices; // do not update if no new information is present - if (!addr.nTime || pinfo->nTime && addr.nTime <= pinfo->nTime) + if (!addr.nTime || (pinfo->nTime && addr.nTime <= pinfo->nTime)) return false; // do not update if the entry was already in the "tried" table diff --git a/src/base58.h b/src/base58.h index 755e34c418..7fefbc5d74 100644 --- a/src/base58.h +++ b/src/base58.h @@ -396,6 +396,16 @@ public: return fExpectTestNet == fTestNet && (vchData.size() == 32 || (vchData.size() == 33 && vchData[32] == 1)); } + bool SetString(const char* pszSecret) + { + return CBase58Data::SetString(pszSecret) && IsValid(); + } + + bool SetString(const std::string& strSecret) + { + return SetString(strSecret.c_str()); + } + CBitcoinSecret(const CSecret& vchSecret, bool fCompressed) { SetSecret(vchSecret, fCompressed); diff --git a/src/bignum.h b/src/bignum.h index 95e21977e7..daf5f6883a 100644 --- a/src/bignum.h +++ b/src/bignum.h @@ -301,7 +301,7 @@ public: while (isxdigit(*psz)) { *this <<= 4; - int n = phexdigit[*psz++]; + int n = phexdigit[(unsigned char)*psz++]; *this += n; } if (fNegative) diff --git a/src/bitcoinrpc.cpp b/src/bitcoinrpc.cpp index 7c991144d3..63c51ada8d 100644 --- a/src/bitcoinrpc.cpp +++ b/src/bitcoinrpc.cpp @@ -796,8 +796,10 @@ Value getbalance(const Array& params, bool fHelp) list<pair<CBitcoinAddress, int64> > listSent; wtx.GetAmounts(allGeneratedImmature, allGeneratedMature, listReceived, listSent, allFee, strSentAccount); if (wtx.GetDepthInMainChain() >= nMinDepth) + { BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress,int64)& r, listReceived) nBalance += r.second; + } BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress,int64)& r, listSent) nBalance -= r.second; nBalance -= allFee; @@ -1228,6 +1230,7 @@ void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDe // Received if (listReceived.size() > 0 && wtx.GetDepthInMainChain() >= nMinDepth) + { BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, int64)& r, listReceived) { string account; @@ -1245,6 +1248,7 @@ void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDe ret.push_back(entry); } } + } } void AcentryToJSON(const CAccountingEntry& acentry, const string& strAccount, Array& ret) diff --git a/src/db.cpp b/src/db.cpp index 839c0807cc..2d136914c5 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -642,6 +642,7 @@ bool CTxDB::LoadBlockIndex() // check level 4: check whether spent txouts were spent within the main chain int nOutput = 0; if (nCheckLevel>3) + { BOOST_FOREACH(const CDiskTxPos &txpos, txindex.vSpent) { if (!txpos.IsNull()) @@ -682,9 +683,11 @@ bool CTxDB::LoadBlockIndex() } nOutput++; } + } } // check level 5: check whether all prevouts are marked spent if (nCheckLevel>4) + { BOOST_FOREACH(const CTxIn &txin, tx.vin) { CTxIndex txindex; @@ -695,6 +698,7 @@ bool CTxDB::LoadBlockIndex() pindexFork = pindex->pprev; } } + } } } } diff --git a/src/keystore.h b/src/keystore.h index 282eaaa047..5d29ac1cb9 100644 --- a/src/keystore.h +++ b/src/keystore.h @@ -15,6 +15,8 @@ protected: mutable CCriticalSection cs_KeyStore; public: + virtual ~CKeyStore() {} + // Add a key to the store. virtual bool AddKey(const CKey& key) =0; diff --git a/src/main.cpp b/src/main.cpp index c9368cf7ff..449f4bd372 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -592,12 +592,6 @@ bool CTransaction::AcceptToMemoryPool(CTxDB& txdb, bool fCheckInputs, bool* pfMi return true; } -bool CTransaction::AcceptToMemoryPool(bool fCheckInputs, bool* pfMissingInputs) -{ - CTxDB txdb("r"); - return AcceptToMemoryPool(txdb, fCheckInputs, pfMissingInputs); -} - uint64 nPooledTx = 0; bool CTransaction::AddToMemoryPoolUnchecked() @@ -1267,14 +1261,18 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex) // This rule applies to all blocks whose timestamp is after March 15, 2012, 0:00 UTC. // On testnet it is enabled as of februari 20, 2012, 0:00 UTC. if (pindex->nTime > 1331769600 || (fTestNet && pindex->nTime > 1329696000)) + { BOOST_FOREACH(CTransaction& tx, vtx) { CTxIndex txindexOld; if (txdb.ReadTxIndex(tx.GetHash(), txindexOld)) + { BOOST_FOREACH(CDiskTxPos &pos, txindexOld.vSpent) if (pos.IsNull()) return false; + } } + } // BIP16 didn't become active until Apr 1 2012 (Feb 15 on testnet) int64 nBIP16SwitchTime = fTestNet ? 1329264000 : 1333238400; @@ -2194,7 +2192,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) CAddress addrFrom; uint64 nNonce = 1; vRecv >> pfrom->nVersion >> pfrom->nServices >> nTime >> addrMe; - if (pfrom->nVersion < 209) + if (pfrom->nVersion < MIN_PROTO_VERSION) { // Since February 20, 2012, the protocol is initiated at version 209, // and earlier versions are no longer supported @@ -2244,7 +2242,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) } // Get recent addresses - if (pfrom->nVersion >= 31402 || addrman.size() < 1000) + if (pfrom->nVersion >= CADDR_TIME_VERSION || addrman.size() < 1000) { pfrom->PushMessage("getaddr"); pfrom->fGetAddr = true; @@ -2261,7 +2259,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) // Ask the first connected node for block updates static int nAskedForBlocks = 0; if (!pfrom->fClient && - (pfrom->nVersion < 32000 || pfrom->nVersion >= 32400) && + (pfrom->nVersion < NOBLKS_VERSION_START || + pfrom->nVersion >= NOBLKS_VERSION_END) && (nAskedForBlocks < 1 || vNodes.size() <= 1)) { nAskedForBlocks++; @@ -2303,7 +2302,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) vRecv >> vAddr; // Don't want addr from older versions unless seeding - if (pfrom->nVersion < 31402 && addrman.size() > 1000) + if (pfrom->nVersion < CADDR_TIME_VERSION && addrman.size() > 1000) return true; if (vAddr.size() > 1000) { @@ -2340,7 +2339,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) multimap<uint256, CNode*> mapMix; BOOST_FOREACH(CNode* pnode, vNodes) { - if (pnode->nVersion < 31402) + if (pnode->nVersion < CADDR_TIME_VERSION) continue; unsigned int nPointer; memcpy(&nPointer, &pnode, sizeof(nPointer)); @@ -2531,6 +2530,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) { vector<uint256> vWorkQueue; CDataStream vMsg(vRecv); + CTxDB txdb("r"); CTransaction tx; vRecv >> tx; @@ -2538,7 +2538,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) pfrom->AddInventoryKnown(inv); bool fMissingInputs = false; - if (tx.AcceptToMemoryPool(true, &fMissingInputs)) + if (tx.AcceptToMemoryPool(txdb, true, &fMissingInputs)) { SyncWithWallets(tx, NULL, true); RelayMessage(inv, vMsg); @@ -2558,7 +2558,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) CDataStream(vMsg) >> tx; CInv inv(MSG_TX, tx.GetHash()); - if (tx.AcceptToMemoryPool(true)) + if (tx.AcceptToMemoryPool(txdb, true)) { printf(" accepted orphan tx %s\n", inv.hash.ToString().substr(0,10).c_str()); SyncWithWallets(tx, NULL, true); @@ -2661,6 +2661,23 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) else if (strCommand == "ping") { + if (pfrom->nVersion > BIP0031_VERSION) + { + uint64 nonce = 0; + vRecv >> nonce; + // Echo the message back with the nonce. This allows for two useful features: + // + // 1) A remote node can quickly check if the connection is operational + // 2) Remote nodes can measure the latency of the network thread. If this node + // is overloaded it won't respond to pings quickly and the remote node can + // avoid sending us more work, like chain download requests. + // + // The nonce stops the remote getting confused between different pings: without + // it, if the remote node sends a ping once per second and this node takes 5 + // seconds to respond to each, the 5th ping the remote sends would appear to + // return very quickly. + pfrom->PushMessage("pong", nonce); + } } @@ -2823,9 +2840,14 @@ bool SendMessages(CNode* pto, bool fSendTrickle) if (pto->nVersion == 0) return true; - // Keep-alive ping - if (pto->nLastSend && GetTime() - pto->nLastSend > 30 * 60 && pto->vSend.empty()) - pto->PushMessage("ping"); + // Keep-alive ping. We send a nonce of zero because we don't use it anywhere + // right now. + if (pto->nLastSend && GetTime() - pto->nLastSend > 30 * 60 && pto->vSend.empty()) { + if (pto->nVersion > BIP0031_VERSION) + pto->PushMessage("ping", 0); + else + pto->PushMessage("ping"); + } // Resend wallet transactions that haven't gotten in a block yet ResendWalletTransactions(); diff --git a/src/main.h b/src/main.h index 1d46851ac2..a89c0935fe 100644 --- a/src/main.h +++ b/src/main.h @@ -573,9 +573,11 @@ public: // To limit dust spam, require MIN_TX_FEE/MIN_RELAY_TX_FEE if any output is less than 0.01 if (nMinFee < nBaseFee) + { BOOST_FOREACH(const CTxOut& txout, vout) if (txout.nValue < CENT) nMinFee = nBaseFee; + } // Raise the price as the block approaches full if (nBlockSize != 1 && nNewBlockSize >= MAX_BLOCK_SIZE_GEN/2) @@ -684,7 +686,6 @@ public: bool ClientConnectInputs(); bool CheckTransaction() const; bool AcceptToMemoryPool(CTxDB& txdb, bool fCheckInputs=true, bool* pfMissingInputs=NULL); - bool AcceptToMemoryPool(bool fCheckInputs=true, bool* pfMissingInputs=NULL); protected: const CTxOut& GetOutputFor(const CTxIn& input, const MapPrevTx& inputs) const; diff --git a/src/makefile.osx b/src/makefile.osx index c5d3edbdc9..e2e35de5cc 100644 --- a/src/makefile.osx +++ b/src/makefile.osx @@ -62,7 +62,7 @@ CFLAGS = -g endif # ppc doesn't work because we don't support big-endian -CFLAGS += -Wextra -Wno-sign-compare -Wno-char-subscripts -Wno-invalid-offsetof -Wformat-security \ +CFLAGS += -Wextra -Wno-sign-compare -Wno-invalid-offsetof -Wformat-security \ $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS) OBJS= \ diff --git a/src/makefile.unix b/src/makefile.unix index 79251dc7a6..9bc780d53c 100644 --- a/src/makefile.unix +++ b/src/makefile.unix @@ -81,7 +81,7 @@ LIBS+= \ DEBUGFLAGS=-g CXXFLAGS=-O2 -xCXXFLAGS=-pthread -Wextra -Wno-sign-compare -Wno-char-subscripts -Wno-invalid-offsetof -Wformat -Wformat-security \ +xCXXFLAGS=-pthread -Wall -Wextra -Wno-sign-compare -Wno-invalid-offsetof -Wno-unused-parameter -Wformat -Wformat-security \ $(DEBUGFLAGS) $(DEFS) $(HARDENING) $(CXXFLAGS) OBJS= \ diff --git a/src/net.cpp b/src/net.cpp index 8272b25561..b0f365061c 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -1233,8 +1233,6 @@ void ThreadOpenConnections2(void* parg) if (fShutdown) return; - bool fAddSeeds = false; - // Add seed nodes if IRC isn't working bool fTOR = (fUseProxy && addrProxy.GetPort() == 9050); if (addrman.size()==0 && (GetTime() - nStart > 60 || fTOR) && !fTestNet) @@ -1260,7 +1258,6 @@ void ThreadOpenConnections2(void* parg) // Choose an address to connect to based on most recently seen // CAddress addrConnect; - int64 nBest = std::numeric_limits<int64>::min(); // Only connect to one address per a.b.?.? range. // Do this here so we don't have to critsect vNodes inside mapAddresses critsect. @@ -163,8 +163,8 @@ public: hSocket = hSocketIn; vSend.SetType(SER_NETWORK); vRecv.SetType(SER_NETWORK); - vSend.SetVersion(209); - vRecv.SetVersion(209); + vSend.SetVersion(MIN_PROTO_VERSION); + vRecv.SetVersion(MIN_PROTO_VERSION); nLastSend = 0; nLastRecv = 0; nLastSendEmpty = GetTime(); diff --git a/src/protocol.h b/src/protocol.h index e639127355..a820563d08 100644 --- a/src/protocol.h +++ b/src/protocol.h @@ -79,9 +79,10 @@ class CAddress : public CService if (fRead) pthis->Init(); if (nType & SER_DISK) - READWRITE(nVersion); - if ((nType & SER_DISK) || (nVersion >= 31402 && !(nType & SER_GETHASH))) - READWRITE(nTime); + READWRITE(nVersion); + if ((nType & SER_DISK) || + (nVersion >= CADDR_TIME_VERSION && !(nType & SER_GETHASH))) + READWRITE(nTime); READWRITE(nServices); READWRITE(*pip); ) diff --git a/src/qt/addresstablemodel.cpp b/src/qt/addresstablemodel.cpp index 05f3a81698..0239a167d7 100644 --- a/src/qt/addresstablemodel.cpp +++ b/src/qt/addresstablemodel.cpp @@ -27,8 +27,9 @@ struct AddressTableEntry }; // Private implementation -struct AddressTablePriv +class AddressTablePriv { +public: CWallet *wallet; QList<AddressTableEntry> cachedAddressTable; diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp index bfb49cbcab..463b2cfa79 100644 --- a/src/qt/bitcoin.cpp +++ b/src/qt/bitcoin.cpp @@ -119,6 +119,15 @@ std::string _(const char* psz) return QCoreApplication::translate("bitcoin-core", psz).toStdString(); } +/* Handle runaway exceptions. Shows a message box with the problem and quits the program. + */ +static void handleRunawayException(std::exception *e) +{ + PrintExceptionContinue(e, "Runaway exception"); + QMessageBox::critical(0, "Runaway exception", BitcoinGUI::tr("A fatal error occured. Bitcoin can no longer continue safely and will quit.") + QString("\n\n") + QString::fromStdString(strMiscWarning)); + exit(1); +} + #ifdef WIN32 #define strncasecmp strnicmp #endif @@ -284,9 +293,9 @@ int main(int argc, char *argv[]) return 1; } } catch (std::exception& e) { - PrintException(&e, "Runaway exception"); + handleRunawayException(&e); } catch (...) { - PrintException(NULL, "Runaway exception"); + handleRunawayException(NULL); } return 0; } diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 3c31f291c2..bcf90917ed 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -143,16 +143,13 @@ BitcoinGUI::BitcoinGUI(QWidget *parent): progressBarLabel = new QLabel(); progressBarLabel->setVisible(false); progressBar = new QProgressBar(); + progressBar->setAlignment(Qt::AlignCenter); progressBar->setVisible(false); statusBar()->addWidget(progressBarLabel); statusBar()->addWidget(progressBar); statusBar()->addPermanentWidget(frameBlocks); - // define OS independent progress bar style (has to be placed after addWidget(), otherwise we crash) - // we did this, because with some OSes default style, text on the progress bar is unreadable - progressBar->setStyleSheet("QProgressBar { background-color: transparent; border: 1px solid grey; border-radius: 2px; padding: 1px; text-align: center; } QProgressBar::chunk { background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #FF8000, stop: 1 orange); margin: 0px; }"); - syncIconMovie = new QMovie(":/movies/update_spinner", "mng", this); // Clicking on a transaction on the overview page simply sends you to transaction history page @@ -241,7 +238,7 @@ void BitcoinGUI::createActions() optionsAction->setToolTip(tr("Modify configuration options for bitcoin")); optionsAction->setMenuRole(QAction::PreferencesRole); toggleHideAction = new QAction(QIcon(":/icons/bitcoin"), tr("Show/Hide &Bitcoin"), this); - toggleHideAction->setToolTip(tr("Show or Hide the Bitcoin window")); + toggleHideAction->setToolTip(tr("Show or hide the Bitcoin window")); exportAction = new QAction(QIcon(":/icons/export"), tr("&Export..."), this); exportAction->setToolTip(tr("Export the data in the current tab to a file")); encryptWalletAction = new QAction(QIcon(":/icons/lock_closed"), tr("&Encrypt Wallet"), this); @@ -416,7 +413,7 @@ void BitcoinGUI::trayIconActivated(QSystemTrayIcon::ActivationReason reason) { if(reason == QSystemTrayIcon::Trigger) { - // Click on system tray icon triggers "open bitcoin" + // Click on system tray icon triggers "show/hide bitcoin" toggleHideAction->trigger(); } } @@ -425,17 +422,17 @@ void BitcoinGUI::trayIconActivated(QSystemTrayIcon::ActivationReason reason) void BitcoinGUI::toggleHidden() { // activateWindow() (sometimes) helps with keyboard focus on Windows - if(isHidden()) + if (isHidden()) { show(); activateWindow(); } - else if(isMinimized()) + else if (isMinimized()) { showNormal(); activateWindow(); } - else if(GUIUtil::isObscured(this)) + else if (GUIUtil::isObscured(this)) { raise(); activateWindow(); @@ -552,10 +549,10 @@ void BitcoinGUI::setNumBlocks(int count) } // Set icon state: spinning if catching up, tick otherwise - if(secs < 90*60) + if(secs < 90*60 && count >= nTotalBlocks) { tooltip = tr("Up to date") + QString(".\n") + tooltip; - labelBlocksIcon->setPixmap(QIcon(":/icons/synced").pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE)); + labelBlocksIcon->setPixmap(QIcon(":/icons/synced").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE)); } else { diff --git a/src/qt/bitcoinstrings.cpp b/src/qt/bitcoinstrings.cpp index 73db1fe46c..b25af1a210 100644 --- a/src/qt/bitcoinstrings.cpp +++ b/src/qt/bitcoinstrings.cpp @@ -1,6 +1,15 @@ #include <QtGlobal> // Automatically generated by extract_strings.py -static const char *bitcoin_strings[] = {QT_TRANSLATE_NOOP("bitcoin-core", "Bitcoin version"), +#ifdef __GNUC__ +#define UNUSED __attribute__((unused)) +#else +#define UNUSED +#endif +static const char UNUSED *bitcoin_strings[] = {QT_TRANSLATE_NOOP("bitcoin-core", "" +"Unable to bind to port %d on this computer. Bitcoin is probably already " +"running."), +QT_TRANSLATE_NOOP("bitcoin-core", "Warning: Disk space is low "), +QT_TRANSLATE_NOOP("bitcoin-core", "Bitcoin version"), QT_TRANSLATE_NOOP("bitcoin-core", "Usage:"), QT_TRANSLATE_NOOP("bitcoin-core", "Send command to -server or bitcoind"), QT_TRANSLATE_NOOP("bitcoin-core", "List commands"), @@ -11,25 +20,30 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Specify pid file (default: bitcoind.pid)"), QT_TRANSLATE_NOOP("bitcoin-core", "Generate coins"), QT_TRANSLATE_NOOP("bitcoin-core", "Don't generate coins"), QT_TRANSLATE_NOOP("bitcoin-core", "Start minimized"), +QT_TRANSLATE_NOOP("bitcoin-core", "Show splash screen on startup (default: 1)"), QT_TRANSLATE_NOOP("bitcoin-core", "Specify data directory"), +QT_TRANSLATE_NOOP("bitcoin-core", "Set database cache size in megabytes (default: 25)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Set database disk log size in megabytes (default: 100)"), QT_TRANSLATE_NOOP("bitcoin-core", "Specify connection timeout (in milliseconds)"), QT_TRANSLATE_NOOP("bitcoin-core", "Connect through socks4 proxy"), QT_TRANSLATE_NOOP("bitcoin-core", "Allow DNS lookups for addnode and connect"), QT_TRANSLATE_NOOP("bitcoin-core", "Listen for connections on <port> (default: 8333 or testnet: 18333)"), QT_TRANSLATE_NOOP("bitcoin-core", "Maintain at most <n> connections to peers (default: 125)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Add a node to connect to"), +QT_TRANSLATE_NOOP("bitcoin-core", "Add a node to connect to and attempt to keep the connection open"), QT_TRANSLATE_NOOP("bitcoin-core", "Connect only to the specified node"), -QT_TRANSLATE_NOOP("bitcoin-core", "Don't accept connections from outside"), -QT_TRANSLATE_NOOP("bitcoin-core", "Don't bootstrap list of peers using DNS"), +QT_TRANSLATE_NOOP("bitcoin-core", "Find peers using internet relay chat (default: 0)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Accept connections from outside (default: 1)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Set language, for example \"de_DE\" (default: system locale)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Find peers using DNS lookup (default: 1)"), QT_TRANSLATE_NOOP("bitcoin-core", "Threshold for disconnecting misbehaving peers (default: 100)"), QT_TRANSLATE_NOOP("bitcoin-core", "" "Number of seconds to keep misbehaving peers from reconnecting (default: " "86400)"), QT_TRANSLATE_NOOP("bitcoin-core", "Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)"), QT_TRANSLATE_NOOP("bitcoin-core", "Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Don't attempt to use UPnP to map the listening port"), -QT_TRANSLATE_NOOP("bitcoin-core", "Attempt to use UPnP to map the listening port"), -QT_TRANSLATE_NOOP("bitcoin-core", "Fee per kB to add to transactions you send"), +QT_TRANSLATE_NOOP("bitcoin-core", "Use Universal Plug and Play to map the listening port (default: 1)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Use Universal Plug and Play to map the listening port (default: 0)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Fee per KB to add to transactions you send"), QT_TRANSLATE_NOOP("bitcoin-core", "Accept command line and JSON-RPC commands"), QT_TRANSLATE_NOOP("bitcoin-core", "Run in the background as a daemon and accept commands"), QT_TRANSLATE_NOOP("bitcoin-core", "Use the test network"), @@ -42,8 +56,14 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Password for JSON-RPC connections"), QT_TRANSLATE_NOOP("bitcoin-core", "Listen for JSON-RPC connections on <port> (default: 8332)"), QT_TRANSLATE_NOOP("bitcoin-core", "Allow JSON-RPC connections from specified IP address"), QT_TRANSLATE_NOOP("bitcoin-core", "Send commands to node running on <ip> (default: 127.0.0.1)"), +QT_TRANSLATE_NOOP("bitcoin-core", "" +"Execute command when the best block changes (%s in cmd is replaced by block " +"hash)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Upgrade wallet to latest format"), QT_TRANSLATE_NOOP("bitcoin-core", "Set key pool size to <n> (default: 100)"), QT_TRANSLATE_NOOP("bitcoin-core", "Rescan the block chain for missing wallet transactions"), +QT_TRANSLATE_NOOP("bitcoin-core", "How many blocks to check at startup (default: 2500, 0 = all)"), +QT_TRANSLATE_NOOP("bitcoin-core", "How thorough the block verification is (0-6, default: 1)"), QT_TRANSLATE_NOOP("bitcoin-core", "" "\n" "SSL options: (see the Bitcoin Wiki for SSL setup instructions)"), @@ -54,9 +74,11 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" "Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:" "@STRENGTH)"), QT_TRANSLATE_NOOP("bitcoin-core", "This help message"), +QT_TRANSLATE_NOOP("bitcoin-core", "Usage"), QT_TRANSLATE_NOOP("bitcoin-core", "" "Cannot obtain a lock on data directory %s. Bitcoin is probably already " "running."), +QT_TRANSLATE_NOOP("bitcoin-core", "Bitcoin"), QT_TRANSLATE_NOOP("bitcoin-core", "Loading addresses..."), QT_TRANSLATE_NOOP("bitcoin-core", "Error loading addr.dat"), QT_TRANSLATE_NOOP("bitcoin-core", "Loading block index..."), @@ -66,6 +88,9 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat: Wallet corrupted"), QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat: Wallet requires newer version of Bitcoin"), QT_TRANSLATE_NOOP("bitcoin-core", "Wallet needed to be rewritten: restart Bitcoin to complete"), QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat"), +QT_TRANSLATE_NOOP("bitcoin-core", "Cannot downgrade wallet"), +QT_TRANSLATE_NOOP("bitcoin-core", "Cannot initialize keypool"), +QT_TRANSLATE_NOOP("bitcoin-core", "Cannot write default address"), QT_TRANSLATE_NOOP("bitcoin-core", "Rescanning..."), QT_TRANSLATE_NOOP("bitcoin-core", "Done loading"), QT_TRANSLATE_NOOP("bitcoin-core", "Invalid -proxy address"), @@ -74,12 +99,36 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" "Warning: -paytxfee is set very high. This is the transaction fee you will " "pay if you send a transaction."), QT_TRANSLATE_NOOP("bitcoin-core", "Error: CreateThread(StartNode) failed"), -QT_TRANSLATE_NOOP("bitcoin-core", "Warning: Disk space is low "), +QT_TRANSLATE_NOOP("bitcoin-core", "To use the %s option"), QT_TRANSLATE_NOOP("bitcoin-core", "" -"Unable to bind to port %d on this computer. Bitcoin is probably already " -"running."), +"%s, you must set a rpcpassword in the configuration file:\n" +" %s\n" +"It is recommended you use the following random password:\n" +"rpcuser=bitcoinrpc\n" +"rpcpassword=%s\n" +"(you do not need to remember this password)\n" +"If the file does not exist, create it with owner-readable-only file " +"permissions.\n"), +QT_TRANSLATE_NOOP("bitcoin-core", "Error"), +QT_TRANSLATE_NOOP("bitcoin-core", "An error occured while setting up the RPC port %i for listening: %s"), +QT_TRANSLATE_NOOP("bitcoin-core", "" +"You must set rpcpassword=<password> in the configuration file:\n" +"%s\n" +"If the file does not exist, create it with owner-readable-only file " +"permissions."), QT_TRANSLATE_NOOP("bitcoin-core", "" "Warning: Please check that your computer's date and time are correct. If " "your clock is wrong Bitcoin will not work properly."), -QT_TRANSLATE_NOOP("bitcoin-core", "beta"), -}; +QT_TRANSLATE_NOOP("bitcoin-core", "Error: Wallet locked, unable to create transaction "), +QT_TRANSLATE_NOOP("bitcoin-core", "" +"Error: This transaction requires a transaction fee of at least %s because of " +"its amount, complexity, or use of recently received funds "), +QT_TRANSLATE_NOOP("bitcoin-core", "Error: Transaction creation failed "), +QT_TRANSLATE_NOOP("bitcoin-core", "Sending..."), +QT_TRANSLATE_NOOP("bitcoin-core", "" +"Error: The transaction was rejected. This might happen if some of the coins " +"in your wallet were already spent, such as if you used a copy of wallet.dat " +"and coins were spent in the copy but not marked as spent here."), +QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount"), +QT_TRANSLATE_NOOP("bitcoin-core", "Insufficient funds"), +};
\ No newline at end of file diff --git a/src/qt/editaddressdialog.cpp b/src/qt/editaddressdialog.cpp index 8cc3c85d7a..cecb8aecd7 100644 --- a/src/qt/editaddressdialog.cpp +++ b/src/qt/editaddressdialog.cpp @@ -106,6 +106,9 @@ void EditAddressDialog::accept() tr("New key generation failed."), QMessageBox::Ok, QMessageBox::Ok); return; + case AddressTableModel::OK: + // Failed with unknown reason. Just reject. + break; } return; diff --git a/src/qt/locale/bitcoin_en.ts b/src/qt/locale/bitcoin_en.ts index d83d4bc2d1..53ba23b11c 100644 --- a/src/qt/locale/bitcoin_en.ts +++ b/src/qt/locale/bitcoin_en.ts @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> -<TS version="2.0" language="en_US"> +<TS version="2.0" language="en"> <defaultcodec>UTF-8</defaultcodec> <context> <name>AboutDialog</name> @@ -15,7 +15,7 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../forms/aboutdialog.ui" line="85"/> + <location filename="../forms/aboutdialog.ui" line="91"/> <source>Copyright © 2009-2012 Bitcoin Developers This is experimental software. @@ -89,42 +89,42 @@ This product includes software developed by the OpenSSL Project for use in the O <translation type="unfinished"></translation> </message> <message> - <location filename="../addressbookpage.cpp" line="61"/> + <location filename="../addressbookpage.cpp" line="65"/> <source>Copy address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../addressbookpage.cpp" line="62"/> + <location filename="../addressbookpage.cpp" line="66"/> <source>Copy label</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../addressbookpage.cpp" line="63"/> + <location filename="../addressbookpage.cpp" line="67"/> <source>Edit</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../addressbookpage.cpp" line="64"/> + <location filename="../addressbookpage.cpp" line="68"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../addressbookpage.cpp" line="281"/> + <location filename="../addressbookpage.cpp" line="288"/> <source>Export Address Book Data</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../addressbookpage.cpp" line="282"/> + <location filename="../addressbookpage.cpp" line="289"/> <source>Comma separated file (*.csv)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../addressbookpage.cpp" line="295"/> + <location filename="../addressbookpage.cpp" line="302"/> <source>Error exporting</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../addressbookpage.cpp" line="295"/> + <location filename="../addressbookpage.cpp" line="302"/> <source>Could not write to file %1.</source> <translation type="unfinished"></translation> </message> @@ -288,293 +288,300 @@ Are you sure you wish to encrypt your wallet?</source> <context> <name>BitcoinGUI</name> <message> - <location filename="../bitcoingui.cpp" line="69"/> + <location filename="../bitcoingui.cpp" line="70"/> <source>Bitcoin Wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="142"/> - <location filename="../bitcoingui.cpp" line="464"/> - <source>Synchronizing with network...</source> + <location filename="../bitcoingui.cpp" line="243"/> + <source>Show/Hide &Bitcoin</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="145"/> - <source>Block chain synchronization in progress</source> + <location filename="../bitcoingui.cpp" line="499"/> + <source>Synchronizing with network...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="176"/> + <location filename="../bitcoingui.cpp" line="180"/> <source>&Overview</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="177"/> + <location filename="../bitcoingui.cpp" line="181"/> <source>Show general overview of wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="182"/> + <location filename="../bitcoingui.cpp" line="186"/> <source>&Transactions</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="183"/> + <location filename="../bitcoingui.cpp" line="187"/> <source>Browse transaction history</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="188"/> + <location filename="../bitcoingui.cpp" line="192"/> <source>&Address Book</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="189"/> + <location filename="../bitcoingui.cpp" line="193"/> <source>Edit the list of stored addresses and labels</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="194"/> + <location filename="../bitcoingui.cpp" line="198"/> <source>&Receive coins</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="195"/> + <location filename="../bitcoingui.cpp" line="199"/> <source>Show the list of addresses for receiving payments</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="200"/> + <location filename="../bitcoingui.cpp" line="204"/> <source>&Send coins</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="201"/> + <location filename="../bitcoingui.cpp" line="205"/> <source>Send coins to a bitcoin address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="206"/> + <location filename="../bitcoingui.cpp" line="210"/> <source>Sign &message</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="207"/> + <location filename="../bitcoingui.cpp" line="211"/> <source>Prove you control an address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="226"/> + <location filename="../bitcoingui.cpp" line="230"/> <source>E&xit</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="227"/> + <location filename="../bitcoingui.cpp" line="231"/> <source>Quit application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="230"/> + <location filename="../bitcoingui.cpp" line="234"/> <source>&About %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="231"/> + <location filename="../bitcoingui.cpp" line="235"/> <source>Show information about Bitcoin</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="233"/> + <location filename="../bitcoingui.cpp" line="237"/> <source>About &Qt</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="234"/> + <location filename="../bitcoingui.cpp" line="238"/> <source>Show information about Qt</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="236"/> + <location filename="../bitcoingui.cpp" line="240"/> <source>&Options...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="237"/> + <location filename="../bitcoingui.cpp" line="241"/> <source>Modify configuration options for bitcoin</source> <translation type="unfinished"></translation> </message> + <message numerus="yes"> + <location filename="../bitcoingui.cpp" line="501"/> + <source>~%n block(s) remaining</source> + <translation> + <numerusform>~%n block remaining</numerusform> + <numerusform>~%n blocks remaining</numerusform> + </translation> + </message> <message> - <location filename="../bitcoingui.cpp" line="239"/> - <source>Open &Bitcoin</source> + <location filename="../bitcoingui.cpp" line="512"/> + <source>Downloaded %1 of %2 blocks of transaction history (%3% done).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="240"/> - <source>Show the Bitcoin window</source> + <location filename="../bitcoingui.cpp" line="245"/> + <source>&Export...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="241"/> - <source>&Export...</source> + <location filename="../bitcoingui.cpp" line="244"/> + <source>Show or hide the Bitcoin window</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="242"/> + <location filename="../bitcoingui.cpp" line="246"/> <source>Export the data in the current tab to a file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="243"/> + <location filename="../bitcoingui.cpp" line="247"/> <source>&Encrypt Wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="244"/> + <location filename="../bitcoingui.cpp" line="248"/> <source>Encrypt or decrypt wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="246"/> + <location filename="../bitcoingui.cpp" line="250"/> <source>&Backup Wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="247"/> + <location filename="../bitcoingui.cpp" line="251"/> <source>Backup wallet to another location</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="248"/> + <location filename="../bitcoingui.cpp" line="252"/> <source>&Change Passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="249"/> + <location filename="../bitcoingui.cpp" line="253"/> <source>Change the passphrase used for wallet encryption</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="272"/> + <location filename="../bitcoingui.cpp" line="276"/> <source>&File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="281"/> + <location filename="../bitcoingui.cpp" line="285"/> <source>&Settings</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="287"/> + <location filename="../bitcoingui.cpp" line="291"/> <source>&Help</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="294"/> + <location filename="../bitcoingui.cpp" line="298"/> <source>Tabs toolbar</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="305"/> + <location filename="../bitcoingui.cpp" line="309"/> <source>Actions toolbar</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="317"/> + <location filename="../bitcoingui.cpp" line="321"/> <source>[testnet]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="407"/> + <location filename="../bitcoingui.cpp" line="383"/> + <source>Bitcoin client</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoingui.cpp" line="411"/> <source>bitcoin-qt</source> <translation type="unfinished"></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="449"/> + <location filename="../bitcoingui.cpp" line="475"/> <source>%n active connection(s) to Bitcoin network</source> - <translation type="unfinished"> + <translation> <numerusform>%n active connection to Bitcoin network</numerusform> <numerusform>%n active connections to Bitcoin network</numerusform> </translation> </message> <message> - <location filename="../bitcoingui.cpp" line="475"/> - <source>Downloaded %1 of %2 blocks of transaction history.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoingui.cpp" line="487"/> + <location filename="../bitcoingui.cpp" line="524"/> <source>Downloaded %1 blocks of transaction history.</source> <translation type="unfinished"></translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="502"/> + <location filename="../bitcoingui.cpp" line="539"/> <source>%n second(s) ago</source> - <translation type="unfinished"> + <translation> <numerusform>%n second ago</numerusform> <numerusform>%n seconds ago</numerusform> </translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="506"/> + <location filename="../bitcoingui.cpp" line="543"/> <source>%n minute(s) ago</source> - <translation type="unfinished"> + <translation> <numerusform>%n minute ago</numerusform> <numerusform>%n minutes ago</numerusform> </translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="510"/> + <location filename="../bitcoingui.cpp" line="547"/> <source>%n hour(s) ago</source> - <translation type="unfinished"> + <translation> <numerusform>%n hour ago</numerusform> <numerusform>%n hours ago</numerusform> </translation> </message> <message numerus="yes"> - <location filename="../bitcoingui.cpp" line="514"/> + <location filename="../bitcoingui.cpp" line="551"/> <source>%n day(s) ago</source> - <translation type="unfinished"> + <translation> <numerusform>%n day ago</numerusform> <numerusform>%n days ago</numerusform> </translation> </message> <message> - <location filename="../bitcoingui.cpp" line="520"/> + <location filename="../bitcoingui.cpp" line="557"/> <source>Up to date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="525"/> + <location filename="../bitcoingui.cpp" line="562"/> <source>Catching up...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="533"/> + <location filename="../bitcoingui.cpp" line="570"/> <source>Last received block was generated %1.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="597"/> + <location filename="../bitcoingui.cpp" line="626"/> <source>This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="602"/> + <location filename="../bitcoingui.cpp" line="631"/> <source>Sending...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="629"/> + <location filename="../bitcoingui.cpp" line="658"/> <source>Sent transaction</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="630"/> + <location filename="../bitcoingui.cpp" line="659"/> <source>Incoming transaction</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="631"/> + <location filename="../bitcoingui.cpp" line="660"/> <source>Date: %1 Amount: %2 Type: %3 @@ -583,32 +590,32 @@ Address: %4 <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="751"/> + <location filename="../bitcoingui.cpp" line="785"/> <source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="759"/> + <location filename="../bitcoingui.cpp" line="793"/> <source>Wallet is <b>encrypted</b> and currently <b>locked</b></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="782"/> + <location filename="../bitcoingui.cpp" line="816"/> <source>Backup Wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="782"/> + <location filename="../bitcoingui.cpp" line="816"/> <source>Wallet Data (*.dat)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="785"/> + <location filename="../bitcoingui.cpp" line="819"/> <source>Backup Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoingui.cpp" line="785"/> + <location filename="../bitcoingui.cpp" line="819"/> <source>There was an error trying to save the wallet data to the new location.</source> <translation type="unfinished"></translation> </message> @@ -616,17 +623,17 @@ Address: %4 <context> <name>DisplayOptionsPage</name> <message> - <location filename="../optionsdialog.cpp" line="270"/> + <location filename="../optionsdialog.cpp" line="268"/> <source>&Unit to show amounts in: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../optionsdialog.cpp" line="274"/> + <location filename="../optionsdialog.cpp" line="272"/> <source>Choose the default subdivision unit to show in the interface, and when sending coins</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../optionsdialog.cpp" line="281"/> + <location filename="../optionsdialog.cpp" line="279"/> <source>Display addresses in transaction list</source> <translation type="unfinished"></translation> </message> @@ -722,67 +729,67 @@ Address: %4 <translation type="unfinished"></translation> </message> <message> - <location filename="../optionsdialog.cpp" line="180"/> + <location filename="../optionsdialog.cpp" line="184"/> <source>Map port using &UPnP</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../optionsdialog.cpp" line="181"/> + <location filename="../optionsdialog.cpp" line="185"/> <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../optionsdialog.cpp" line="185"/> + <location filename="../optionsdialog.cpp" line="179"/> <source>M&inimize on close</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../optionsdialog.cpp" line="186"/> + <location filename="../optionsdialog.cpp" line="180"/> <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../optionsdialog.cpp" line="190"/> + <location filename="../optionsdialog.cpp" line="188"/> <source>&Connect through SOCKS4 proxy:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../optionsdialog.cpp" line="191"/> + <location filename="../optionsdialog.cpp" line="189"/> <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../optionsdialog.cpp" line="196"/> + <location filename="../optionsdialog.cpp" line="194"/> <source>Proxy &IP: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../optionsdialog.cpp" line="202"/> + <location filename="../optionsdialog.cpp" line="200"/> <source>IP address of the proxy (e.g. 127.0.0.1)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../optionsdialog.cpp" line="205"/> + <location filename="../optionsdialog.cpp" line="203"/> <source>&Port: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../optionsdialog.cpp" line="211"/> + <location filename="../optionsdialog.cpp" line="209"/> <source>Port of the proxy (e.g. 1234)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../optionsdialog.cpp" line="217"/> + <location filename="../optionsdialog.cpp" line="215"/> <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../optionsdialog.cpp" line="223"/> + <location filename="../optionsdialog.cpp" line="221"/> <source>Pay transaction &fee</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../optionsdialog.cpp" line="226"/> + <location filename="../optionsdialog.cpp" line="224"/> <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source> <translation type="unfinished"></translation> </message> @@ -801,7 +808,7 @@ Address: %4 </message> <message> <location filename="../forms/messagepage.ui" line="38"/> - <source>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> + <source>The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source> <translation type="unfinished"></translation> </message> <message> @@ -975,42 +982,47 @@ p, li { white-space: pre-wrap; } <translation type="unfinished"></translation> </message> <message> - <location filename="../forms/qrcodedialog.ui" line="52"/> + <location filename="../forms/qrcodedialog.ui" line="55"/> <source>Request Payment</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../forms/qrcodedialog.ui" line="67"/> + <location filename="../forms/qrcodedialog.ui" line="70"/> <source>Amount:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../forms/qrcodedialog.ui" line="102"/> + <location filename="../forms/qrcodedialog.ui" line="105"/> <source>BTC</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../forms/qrcodedialog.ui" line="118"/> + <location filename="../forms/qrcodedialog.ui" line="121"/> <source>Label:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../forms/qrcodedialog.ui" line="141"/> + <location filename="../forms/qrcodedialog.ui" line="144"/> <source>Message:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../forms/qrcodedialog.ui" line="183"/> + <location filename="../forms/qrcodedialog.ui" line="186"/> <source>&Save As...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qrcodedialog.cpp" line="101"/> + <location filename="../qrcodedialog.cpp" line="59"/> + <source>Resulting URI too long, try to reduce the text for label / message.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qrcodedialog.cpp" line="116"/> <source>Save Image...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qrcodedialog.cpp" line="101"/> + <location filename="../qrcodedialog.cpp" line="116"/> <source>PNG Images (*.png)</source> <translation type="unfinished"></translation> </message> @@ -1217,115 +1229,115 @@ p, li { white-space: pre-wrap; } <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="47"/> + <location filename="../transactiondesc.cpp" line="48"/> <source><b>Status:</b> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="52"/> + <location filename="../transactiondesc.cpp" line="53"/> <source>, has not been successfully broadcast yet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="54"/> + <location filename="../transactiondesc.cpp" line="55"/> <source>, broadcast through %1 node</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="56"/> + <location filename="../transactiondesc.cpp" line="57"/> <source>, broadcast through %1 nodes</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="60"/> + <location filename="../transactiondesc.cpp" line="61"/> <source><b>Date:</b> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="67"/> + <location filename="../transactiondesc.cpp" line="68"/> <source><b>Source:</b> Generated<br></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="73"/> - <location filename="../transactiondesc.cpp" line="90"/> + <location filename="../transactiondesc.cpp" line="74"/> + <location filename="../transactiondesc.cpp" line="91"/> <source><b>From:</b> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="90"/> + <location filename="../transactiondesc.cpp" line="91"/> <source>unknown</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="91"/> - <location filename="../transactiondesc.cpp" line="114"/> - <location filename="../transactiondesc.cpp" line="173"/> + <location filename="../transactiondesc.cpp" line="92"/> + <location filename="../transactiondesc.cpp" line="115"/> + <location filename="../transactiondesc.cpp" line="174"/> <source><b>To:</b> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="94"/> + <location filename="../transactiondesc.cpp" line="95"/> <source> (yours, label: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="96"/> + <location filename="../transactiondesc.cpp" line="97"/> <source> (yours)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="131"/> - <location filename="../transactiondesc.cpp" line="145"/> - <location filename="../transactiondesc.cpp" line="190"/> - <location filename="../transactiondesc.cpp" line="207"/> + <location filename="../transactiondesc.cpp" line="132"/> + <location filename="../transactiondesc.cpp" line="146"/> + <location filename="../transactiondesc.cpp" line="191"/> + <location filename="../transactiondesc.cpp" line="208"/> <source><b>Credit:</b> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="133"/> + <location filename="../transactiondesc.cpp" line="134"/> <source>(%1 matures in %2 more blocks)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="137"/> + <location filename="../transactiondesc.cpp" line="138"/> <source>(not accepted)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="181"/> - <location filename="../transactiondesc.cpp" line="189"/> - <location filename="../transactiondesc.cpp" line="204"/> + <location filename="../transactiondesc.cpp" line="182"/> + <location filename="../transactiondesc.cpp" line="190"/> + <location filename="../transactiondesc.cpp" line="205"/> <source><b>Debit:</b> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="195"/> + <location filename="../transactiondesc.cpp" line="196"/> <source><b>Transaction fee:</b> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="211"/> + <location filename="../transactiondesc.cpp" line="212"/> <source><b>Net amount:</b> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="217"/> + <location filename="../transactiondesc.cpp" line="218"/> <source>Message:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="219"/> + <location filename="../transactiondesc.cpp" line="220"/> <source>Comment:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="221"/> + <location filename="../transactiondesc.cpp" line="222"/> <source>Transaction ID:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiondesc.cpp" line="224"/> + <location filename="../transactiondesc.cpp" line="225"/> <source>Generated coins must wait 120 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, it will change to "not accepted" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.</source> <translation type="unfinished"></translation> </message> @@ -1368,7 +1380,7 @@ p, li { white-space: pre-wrap; } <message numerus="yes"> <location filename="../transactiontablemodel.cpp" line="274"/> <source>Open for %n block(s)</source> - <translation type="unfinished"> + <translation> <numerusform>Open for %n block</numerusform> <numerusform>Open for %n blocks</numerusform> </translation> @@ -1394,75 +1406,75 @@ p, li { white-space: pre-wrap; } <translation type="unfinished"></translation> </message> <message numerus="yes"> - <location filename="../transactiontablemodel.cpp" line="295"/> + <location filename="../transactiontablemodel.cpp" line="294"/> <source>Mined balance will be available in %n more blocks</source> - <translation type="unfinished"> + <translation> <numerusform>Mined balance will be available in %n more block</numerusform> <numerusform>Mined balance will be available in %n more blocks</numerusform> </translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="301"/> + <location filename="../transactiontablemodel.cpp" line="300"/> <source>This block was not received by any other nodes and will probably not be accepted!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="304"/> + <location filename="../transactiontablemodel.cpp" line="303"/> <source>Generated but not accepted</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="347"/> + <location filename="../transactiontablemodel.cpp" line="346"/> <source>Received with</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="349"/> + <location filename="../transactiontablemodel.cpp" line="348"/> <source>Received from</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="352"/> + <location filename="../transactiontablemodel.cpp" line="351"/> <source>Sent to</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="354"/> + <location filename="../transactiontablemodel.cpp" line="353"/> <source>Payment to yourself</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="356"/> + <location filename="../transactiontablemodel.cpp" line="355"/> <source>Mined</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="394"/> + <location filename="../transactiontablemodel.cpp" line="393"/> <source>(n/a)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="593"/> + <location filename="../transactiontablemodel.cpp" line="592"/> <source>Transaction status. Hover over this field to show number of confirmations.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="595"/> + <location filename="../transactiontablemodel.cpp" line="594"/> <source>Date and time that the transaction was received.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="597"/> + <location filename="../transactiontablemodel.cpp" line="596"/> <source>Type of transaction.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="599"/> + <location filename="../transactiontablemodel.cpp" line="598"/> <source>Destination address of transaction.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../transactiontablemodel.cpp" line="601"/> + <location filename="../transactiontablemodel.cpp" line="600"/> <source>Amount removed from or added to balance.</source> <translation type="unfinished"></translation> </message> @@ -1634,7 +1646,7 @@ p, li { white-space: pre-wrap; } <context> <name>WalletModel</name> <message> - <location filename="../walletmodel.cpp" line="145"/> + <location filename="../walletmodel.cpp" line="143"/> <source>Sending...</source> <translation type="unfinished"></translation> </message> @@ -1642,344 +1654,478 @@ p, li { white-space: pre-wrap; } <context> <name>bitcoin-core</name> <message> - <location filename="../bitcoinstrings.cpp" line="3"/> - <source>Bitcoin version</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="4"/> - <source>Usage:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="5"/> - <source>Send command to -server or bitcoind</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../bitcoinstrings.cpp" line="6"/> - <source>List commands</source> - <translation type="unfinished"></translation> - </message> - <message> <location filename="../bitcoinstrings.cpp" line="7"/> - <source>Get help for a command</source> + <source>Bitcoin version</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="8"/> - <source>Options:</source> + <source>Usage:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="9"/> - <source>Specify configuration file (default: bitcoin.conf)</source> + <source>Send command to -server or bitcoind</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="10"/> - <source>Specify pid file (default: bitcoind.pid)</source> + <source>List commands</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="11"/> - <source>Generate coins</source> + <source>Get help for a command</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="12"/> - <source>Don't generate coins</source> + <source>Options:</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="13"/> - <source>Start minimized</source> + <source>Specify configuration file (default: bitcoin.conf)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="14"/> - <source>Specify data directory</source> + <source>Specify pid file (default: bitcoind.pid)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="15"/> - <source>Specify connection timeout (in milliseconds)</source> + <source>Generate coins</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="16"/> - <source>Connect through socks4 proxy</source> + <source>Don't generate coins</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="17"/> - <source>Allow DNS lookups for addnode and connect</source> + <source>Start minimized</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="18"/> - <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <source>Show splash screen on startup (default: 1)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="19"/> - <source>Maintain at most <n> connections to peers (default: 125)</source> + <source>Specify data directory</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="20"/> - <source>Add a node to connect to</source> + <source>Set database cache size in megabytes (default: 25)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="21"/> - <source>Connect only to the specified node</source> + <source>Set database disk log size in megabytes (default: 100)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="22"/> - <source>Don't accept connections from outside</source> + <source>Specify connection timeout (in milliseconds)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="23"/> - <source>Don't bootstrap list of peers using DNS</source> + <source>Connect through socks4 proxy</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="24"/> - <source>Threshold for disconnecting misbehaving peers (default: 100)</source> + <source>Allow DNS lookups for addnode and connect</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="25"/> - <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> + <source>Listen for connections on <port> (default: 8333 or testnet: 18333)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="26"/> + <source>Maintain at most <n> connections to peers (default: 125)</source> <translation type="unfinished"></translation> </message> <message> <location filename="../bitcoinstrings.cpp" line="28"/> - <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> + <source>Connect only to the specified node</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="29"/> - <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> + <location filename="../bitcoinstrings.cpp" line="33"/> + <source>Threshold for disconnecting misbehaving peers (default: 100)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="30"/> - <source>Don't attempt to use UPnP to map the listening port</source> + <location filename="../bitcoinstrings.cpp" line="34"/> + <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="31"/> - <source>Attempt to use UPnP to map the listening port</source> + <location filename="../bitcoinstrings.cpp" line="37"/> + <source>Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="32"/> - <source>Fee per kB to add to transactions you send</source> + <location filename="../bitcoinstrings.cpp" line="38"/> + <source>Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="33"/> + <location filename="../bitcoinstrings.cpp" line="42"/> <source>Accept command line and JSON-RPC commands</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="34"/> + <location filename="../bitcoinstrings.cpp" line="43"/> <source>Run in the background as a daemon and accept commands</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="35"/> + <location filename="../bitcoinstrings.cpp" line="44"/> <source>Use the test network</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="36"/> + <location filename="../bitcoinstrings.cpp" line="45"/> <source>Output extra debugging information</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="37"/> + <location filename="../bitcoinstrings.cpp" line="46"/> <source>Prepend debug output with timestamp</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="38"/> + <location filename="../bitcoinstrings.cpp" line="47"/> <source>Send trace/debug info to console instead of debug.log file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="39"/> + <location filename="../bitcoinstrings.cpp" line="48"/> <source>Send trace/debug info to debugger</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="40"/> + <location filename="../bitcoinstrings.cpp" line="49"/> <source>Username for JSON-RPC connections</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="41"/> + <location filename="../bitcoinstrings.cpp" line="50"/> <source>Password for JSON-RPC connections</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="42"/> + <location filename="../bitcoinstrings.cpp" line="51"/> <source>Listen for JSON-RPC connections on <port> (default: 8332)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="43"/> + <location filename="../bitcoinstrings.cpp" line="52"/> <source>Allow JSON-RPC connections from specified IP address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="44"/> + <location filename="../bitcoinstrings.cpp" line="53"/> <source>Send commands to node running on <ip> (default: 127.0.0.1)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="45"/> + <location filename="../bitcoinstrings.cpp" line="54"/> + <source>Execute command when the best block changes (%s in cmd is replaced by block hash)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="57"/> + <source>Upgrade wallet to latest format</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="58"/> <source>Set key pool size to <n> (default: 100)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="46"/> + <location filename="../bitcoinstrings.cpp" line="59"/> <source>Rescan the block chain for missing wallet transactions</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="47"/> + <location filename="../bitcoinstrings.cpp" line="60"/> + <source>How many blocks to check at startup (default: 2500, 0 = all)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="61"/> + <source>How thorough the block verification is (0-6, default: 1)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="62"/> <source> SSL options: (see the Bitcoin Wiki for SSL setup instructions)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="50"/> + <location filename="../bitcoinstrings.cpp" line="65"/> <source>Use OpenSSL (https) for JSON-RPC connections</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="51"/> + <location filename="../bitcoinstrings.cpp" line="66"/> <source>Server certificate file (default: server.cert)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="52"/> + <location filename="../bitcoinstrings.cpp" line="67"/> <source>Server private key (default: server.pem)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="53"/> + <location filename="../bitcoinstrings.cpp" line="68"/> <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="56"/> + <location filename="../bitcoinstrings.cpp" line="71"/> <source>This help message</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="57"/> + <location filename="../bitcoinstrings.cpp" line="72"/> + <source>Usage</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="73"/> <source>Cannot obtain a lock on data directory %s. Bitcoin is probably already running.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="60"/> + <location filename="../bitcoinstrings.cpp" line="76"/> + <source>Bitcoin</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="77"/> <source>Loading addresses...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="61"/> + <location filename="../bitcoinstrings.cpp" line="78"/> <source>Error loading addr.dat</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="63"/> + <location filename="../bitcoinstrings.cpp" line="80"/> <source>Error loading blkindex.dat</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="65"/> + <location filename="../bitcoinstrings.cpp" line="82"/> <source>Error loading wallet.dat: Wallet corrupted</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="66"/> + <location filename="../bitcoinstrings.cpp" line="83"/> <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="67"/> + <location filename="../bitcoinstrings.cpp" line="84"/> <source>Wallet needed to be rewritten: restart Bitcoin to complete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="68"/> + <location filename="../bitcoinstrings.cpp" line="85"/> <source>Error loading wallet.dat</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="62"/> + <location filename="../bitcoinstrings.cpp" line="117"/> + <source>Error: Wallet locked, unable to create transaction </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="118"/> + <source>Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="121"/> + <source>Error: Transaction creation failed </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="122"/> + <source>Sending...</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="123"/> + <source>Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="127"/> + <source>Invalid amount</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="128"/> + <source>Insufficient funds</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="79"/> <source>Loading block index...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="64"/> + <location filename="../bitcoinstrings.cpp" line="27"/> + <source>Add a node to connect to and attempt to keep the connection open</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="29"/> + <source>Find peers using internet relay chat (default: 0)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="30"/> + <source>Accept connections from outside (default: 1)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="31"/> + <source>Set language, for example "de_DE" (default: system locale)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="32"/> + <source>Find peers using DNS lookup (default: 1)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="39"/> + <source>Use Universal Plug and Play to map the listening port (default: 1)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="40"/> + <source>Use Universal Plug and Play to map the listening port (default: 0)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="41"/> + <source>Fee per KB to add to transactions you send</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="81"/> <source>Loading wallet...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="69"/> + <location filename="../bitcoinstrings.cpp" line="86"/> + <source>Cannot downgrade wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="87"/> + <source>Cannot initialize keypool</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="88"/> + <source>Cannot write default address</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="89"/> <source>Rescanning...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="70"/> + <location filename="../bitcoinstrings.cpp" line="90"/> <source>Done loading</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="71"/> + <location filename="../bitcoinstrings.cpp" line="91"/> <source>Invalid -proxy address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="72"/> + <location filename="../bitcoinstrings.cpp" line="92"/> <source>Invalid amount for -paytxfee=<amount></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="73"/> + <location filename="../bitcoinstrings.cpp" line="93"/> <source>Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="76"/> + <location filename="../bitcoinstrings.cpp" line="96"/> <source>Error: CreateThread(StartNode) failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="77"/> + <location filename="../bitcoinstrings.cpp" line="6"/> <source>Warning: Disk space is low </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="78"/> + <location filename="../bitcoinstrings.cpp" line="3"/> <source>Unable to bind to port %d on this computer. Bitcoin is probably already running.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="81"/> - <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> + <location filename="../bitcoinstrings.cpp" line="97"/> + <source>To use the %s option</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../bitcoinstrings.cpp" line="84"/> - <source>beta</source> + <location filename="../bitcoinstrings.cpp" line="98"/> + <source>%s, you must set a rpcpassword in the configuration file: + %s +It is recommended you use the following random password: +rpcuser=bitcoinrpc +rpcpassword=%s +(you do not need to remember this password) +If the file does not exist, create it with owner-readable-only file permissions. +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="107"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="108"/> + <source>An error occured while setting up the RPC port %i for listening: %s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="109"/> + <source>You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../bitcoinstrings.cpp" line="114"/> + <source>Warning: Please check that your computer's date and time are correct. If your clock is wrong Bitcoin will not work properly.</source> <translation type="unfinished"></translation> </message> </context> diff --git a/src/qt/qrcodedialog.cpp b/src/qt/qrcodedialog.cpp index 9965f1438f..2a428fb79e 100644 --- a/src/qt/qrcodedialog.cpp +++ b/src/qt/qrcodedialog.cpp @@ -41,6 +41,11 @@ void QRCodeDialog::genCode() ui->lblQRCode->setText(""); QRcode *code = QRcode_encodeString(uri.toUtf8().constData(), 0, QR_ECLEVEL_L, QR_MODE_8, 1); + if (!code) + { + ui->lblQRCode->setText(tr("Error encoding URI into QR Code.")); + return; + } myImage = QImage(code->width + 8, code->width + 8, QImage::Format_RGB32); myImage.fill(0xffffff); unsigned char *p = code->data; diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp index 592ae6f45a..b4029aa0d2 100644 --- a/src/qt/sendcoinsdialog.cpp +++ b/src/qt/sendcoinsdialog.cpp @@ -154,6 +154,8 @@ void SendCoinsDialog::on_sendButton_clicked() tr("Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."), QMessageBox::Ok, QMessageBox::Ok); break; + case WalletModel::Aborted: // User aborted, nothing to do + break; case WalletModel::OK: accept(); break; diff --git a/src/qt/sendcoinsentry.cpp b/src/qt/sendcoinsentry.cpp index caffaaeff2..c8242d8352 100644 --- a/src/qt/sendcoinsentry.cpp +++ b/src/qt/sendcoinsentry.cpp @@ -59,9 +59,11 @@ void SendCoinsEntry::on_payTo_textChanged(const QString &address) { if(!model) return; - // Fill in label from address book, if no label is filled in yet - if(ui->addAsLabel->text().isEmpty()) - ui->addAsLabel->setText(model->getAddressTableModel()->labelForAddress(address));} + // Fill in label from address book, if address has an associated label + QString associatedLabel = model->getAddressTableModel()->labelForAddress(address); + if(!associatedLabel.isEmpty()) + ui->addAsLabel->setText(associatedLabel); +} void SendCoinsEntry::setModel(WalletModel *model) { diff --git a/src/qt/transactiontablemodel.cpp b/src/qt/transactiontablemodel.cpp index aa11df979f..41c9db1123 100644 --- a/src/qt/transactiontablemodel.cpp +++ b/src/qt/transactiontablemodel.cpp @@ -45,8 +45,9 @@ struct TxLessThan }; // Private implementation -struct TransactionTablePriv +class TransactionTablePriv { +public: TransactionTablePriv(CWallet *wallet, TransactionTableModel *parent): wallet(wallet), parent(parent) diff --git a/src/qt/walletmodel.h b/src/qt/walletmodel.h index c4468171a8..6c47f61bef 100644 --- a/src/qt/walletmodel.h +++ b/src/qt/walletmodel.h @@ -35,8 +35,7 @@ public: DuplicateAddress, TransactionCreationFailed, // Error returned when wallet is still locked TransactionCommitFailed, - Aborted, - MiscError + Aborted }; enum EncryptionStatus diff --git a/src/script.cpp b/src/script.cpp index b6f120289a..21f101e1c5 100644 --- a/src/script.cpp +++ b/src/script.cpp @@ -1443,7 +1443,6 @@ bool ExtractAddresses(const CScript& scriptPubKey, txnouttype& typeRet, vector<C if (typeRet == TX_MULTISIG) { nRequiredRet = vSolutions.front()[0]; - int n = vSolutions.back()[0]; for (int i = 1; i < vSolutions.size()-1; i++) { CBitcoinAddress address; diff --git a/src/serialize.h b/src/serialize.h index 2d4aaba6a9..d34f3e557c 100644 --- a/src/serialize.h +++ b/src/serialize.h @@ -20,6 +20,7 @@ #include <boost/tuple/tuple_io.hpp> #include "allocators.h" +#include "version.h" typedef long long int64; typedef unsigned long long uint64; @@ -29,8 +30,6 @@ class CDataStream; class CAutoFile; static const unsigned int MAX_SIZE = 0x02000000; -static const int PROTOCOL_VERSION = 60000; - // Used to bypass the rule against non-const reference to temporary // where it makes sense with wrappers such as CFlatData or CTxDB template<typename T> diff --git a/src/test/key_tests.cpp b/src/test/key_tests.cpp index bc8759b6fa..a6dab623b0 100644 --- a/src/test/key_tests.cpp +++ b/src/test/key_tests.cpp @@ -14,6 +14,7 @@ static const string strSecret1 ("5HxWvvfubhXpYYpS3tJkw6fq9jE9j18THftkZjHHfmFiWtm static const string strSecret2 ("5KC4ejrDjv152FGwP386VD1i2NYc5KkfSMyv1nGy1VGDxGHqVY3"); static const string strSecret1C("Kwr371tjA9u2rFSMZjTNun2PXXP3WPZu2afRHTcta6KxEUdm1vEw"); static const string strSecret2C("L3Hq7a8FEQwJkW1M2GNKDW28546Vp5miewcCzSqUD9kCAXrJdS3g"); +static const string strAddress1("1HV9Lc3sNHZxwj4Zk6fB38tEmBryq2cBiF"); #ifdef KEY_TESTS_DUMPINFO void dumpKeyInfo(uint256 privkey) @@ -47,11 +48,12 @@ BOOST_AUTO_TEST_SUITE(key_tests) BOOST_AUTO_TEST_CASE(key_test1) { - CBitcoinSecret bsecret1, bsecret2, bsecret1C, bsecret2C; - bsecret1.SetString (strSecret1); - bsecret2.SetString (strSecret2); - bsecret1C.SetString(strSecret1C); - bsecret2C.SetString(strSecret2C); + CBitcoinSecret bsecret1, bsecret2, bsecret1C, bsecret2C, baddress1; + BOOST_CHECK( bsecret1.SetString (strSecret1)); + BOOST_CHECK( bsecret2.SetString (strSecret2)); + BOOST_CHECK( bsecret1C.SetString(strSecret1C)); + BOOST_CHECK( bsecret2C.SetString(strSecret2C)); + BOOST_CHECK(!baddress1.SetString(strAddress1)); bool fCompressed; CSecret secret1 = bsecret1.GetSecret (fCompressed); diff --git a/src/uint256.h b/src/uint256.h index cfc2eb128e..0947816785 100644 --- a/src/uint256.h +++ b/src/uint256.h @@ -308,7 +308,7 @@ public: // hex string to uint static char phexdigit[256] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0, 0,0xa,0xb,0xc,0xd,0xe,0xf,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0xa,0xb,0xc,0xd,0xe,0xf,0,0,0,0,0,0,0,0,0 }; const char* pbegin = psz; - while (phexdigit[*psz] || *psz == '0') + while (phexdigit[(unsigned char)*psz] || *psz == '0') psz++; psz--; unsigned char* p1 = (unsigned char*)pn; diff --git a/src/util.cpp b/src/util.cpp index 911388b37d..a5427c061b 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -6,6 +6,17 @@ #include "headers.h" #include "strlcpy.h" #include <boost/algorithm/string/join.hpp> + +// Work around clang compilation problem in Boost 1.46: +// /usr/include/boost/program_options/detail/config_file.hpp:163:17: error: call to function 'to_internal' that is neither visible in the template definition nor found by argument-dependent lookup +// See also: http://stackoverflow.com/questions/10020179/compilation-fail-in-boost-librairies-program-options +// http://clang.debian.net/status.php?version=3.0&key=CANNOT_FIND_FUNCTION +namespace boost { + namespace program_options { + std::string to_internal(const std::string&); + } +} + #include <boost/program_options/detail/config_file.hpp> #include <boost/program_options/parsers.hpp> #include <boost/filesystem.hpp> @@ -625,7 +636,7 @@ vector<unsigned char> DecodeBase64(const char* p, bool* pfInvalid) while (1) { - int dec = decode64_table[*p]; + int dec = decode64_table[(unsigned char)*p]; if (dec == -1) break; p++; switch (mode) @@ -665,12 +676,12 @@ vector<unsigned char> DecodeBase64(const char* p, bool* pfInvalid) break; case 2: // 4n+2 base64 characters processed: require '==' - if (left || p[0] != '=' || p[1] != '=' || decode64_table[p[2]] != -1) + if (left || p[0] != '=' || p[1] != '=' || decode64_table[(unsigned char)p[2]] != -1) *pfInvalid = true; break; case 3: // 4n+3 base64 characters processed: require '=' - if (left || p[0] != '=' || decode64_table[p[1]] != -1) + if (left || p[0] != '=' || decode64_table[(unsigned char)p[1]] != -1) *pfInvalid = true; break; } diff --git a/src/version.cpp b/src/version.cpp index e1be5f491b..0c1e8bfa80 100644 --- a/src/version.cpp +++ b/src/version.cpp @@ -11,18 +11,8 @@ const std::string CLIENT_NAME("Satoshi"); // Client version number -#define CLIENT_VERSION_MAJOR 0 -#define CLIENT_VERSION_MINOR 6 -#define CLIENT_VERSION_REVISION 0 -#define CLIENT_VERSION_BUILD 99 #define CLIENT_VERSION_SUFFIX "-beta" -const int CLIENT_VERSION = 1000000 * CLIENT_VERSION_MAJOR - + 10000 * CLIENT_VERSION_MINOR - + 100 * CLIENT_VERSION_REVISION - + 1 * CLIENT_VERSION_BUILD; - - // The following part of the code determines the CLIENT_BUILD variable. // Several mechanisms are used for this: diff --git a/src/version.h b/src/version.h index c93b28fb7d..f63b1bdadd 100644 --- a/src/version.h +++ b/src/version.h @@ -6,9 +6,43 @@ #include <string> +// +// client versioning +// + +static const int CLIENT_VERSION_MAJOR = 0; +static const int CLIENT_VERSION_MINOR = 6; +static const int CLIENT_VERSION_REVISION = 0; +static const int CLIENT_VERSION_BUILD = 99; + +static const int CLIENT_VERSION = + 1000000 * CLIENT_VERSION_MAJOR + + 10000 * CLIENT_VERSION_MINOR + + 100 * CLIENT_VERSION_REVISION + + 1 * CLIENT_VERSION_BUILD; + extern const std::string CLIENT_NAME; extern const std::string CLIENT_BUILD; extern const std::string CLIENT_DATE; -extern const int CLIENT_VERSION; + +// +// network protocol versioning +// + +static const int PROTOCOL_VERSION = 60001; + +// earlier versions not supported as of Feb 2012, and are disconnected +static const int MIN_PROTO_VERSION = 209; + +// nTime field added to CAddress, starting with this version; +// if possible, avoid requesting addresses nodes older than this +static const int CADDR_TIME_VERSION = 31402; + +// only request blocks from nodes outside this range of versions +static const int NOBLKS_VERSION_START = 32000; +static const int NOBLKS_VERSION_END = 32400; + +// BIP 0031, pong message, is enabled for all versions AFTER this one +static const int BIP0031_VERSION = 60000; #endif diff --git a/src/wallet.cpp b/src/wallet.cpp index 97ed6aa580..ff10e0cef8 100644 --- a/src/wallet.cpp +++ b/src/wallet.cpp @@ -648,8 +648,10 @@ void CWalletTx::AddSupportingTransactions(CTxDB& txdb) vtxPrev.push_back(tx); if (nDepth < COPY_DEPTH) + { BOOST_FOREACH(const CTxIn& txin, tx.vin) vWorkQueue.push_back(txin.prevout.hash); + } } } } diff --git a/src/wallet.h b/src/wallet.h index f864370acf..869e888fcd 100644 --- a/src/wallet.h +++ b/src/wallet.h @@ -553,8 +553,10 @@ public: return false; if (mapPrev.empty()) + { BOOST_FOREACH(const CMerkleTx& tx, vtxPrev) mapPrev[tx.GetHash()] = &tx; + } BOOST_FOREACH(const CTxIn& txin, ptx->vin) { |