Merge pull request #168 from fsb4000/translation
authorCryptoManiac <CryptoManiac@users.noreply.github.com>
Mon, 16 Feb 2015 07:59:54 +0000 (10:59 +0300)
committerCryptoManiac <CryptoManiac@users.noreply.github.com>
Mon, 16 Feb 2015 07:59:54 +0000 (10:59 +0300)
lupdate

13 files changed:
doc/tor.md [new file with mode: 0644]
src/allocators.h
src/init.cpp
src/qt/bitcoin.cpp
src/qt/bitcoingui.cpp
src/qt/multisigdialog.cpp
src/qt/optionsmodel.cpp
src/qt/optionsmodel.h
src/qt/transactiontablemodel.cpp
src/rpcwallet.cpp
src/txdb-leveldb.h
src/wallet.cpp
src/walletdb.h

diff --git a/doc/tor.md b/doc/tor.md
new file mode 100644 (file)
index 0000000..2f8d4dc
--- /dev/null
@@ -0,0 +1,99 @@
+TOR SUPPORT IN NOVACOIN
+======================
+
+It is possible to run Novacoin as a Tor hidden service, and connect to such services.
+
+The following directions assume you have a Tor proxy running on port 9050. Many distributions default to having a SOCKS proxy listening on port 9050, but others may not. In particular, the Tor Browser Bundle defaults to listening on a random port. See [Tor Project FAQ:TBBSocksPort](https://www.torproject.org/docs/faq.html.en#TBBSocksPort) for how to properly
+configure Tor.
+
+
+1. Run novacoin behind a Tor proxy
+---------------------------------
+
+The first step is running Novacoin behind a Tor proxy. This will already make all
+outgoing connections be anonymized, but more is possible.
+
+       -proxy=ip:port  Set the proxy server. If SOCKS5 is selected (default), this proxy
+                       server will be used to try to reach .onion addresses as well.
+       
+       -onion=ip:port  Set the proxy server to use for tor hidden services. You do not
+                       need to set this if it's the same as -proxy. You can use -noonion
+                       to explicitly disable access to hidden service.
+       
+       -listen         When using -proxy, listening is disabled by default. If you want
+                       to run a hidden service (see next section), you'll need to enable
+                       it explicitly.
+       
+       -connect=X      When behind a Tor proxy, you can specify .onion addresses instead
+       -addnode=X      of IP addresses or hostnames in these parameters. It requires
+       -seednode=X     SOCKS5. In Tor mode, such addresses can also be exchanged with
+                       other P2P nodes.
+
+In a typical situation, this suffices to run behind a Tor proxy:
+
+       ./novacoin -proxy=127.0.0.1:9050
+
+
+2. Run a novacoin hidden server
+------------------------------
+
+If you configure your Tor system accordingly, it is possible to make your node also
+reachable from the Tor network. Add these lines to your /etc/tor/torrc (or equivalent
+config file):
+
+       HiddenServiceDir /var/lib/tor/novacoin-service/
+       HiddenServicePort 7777 127.0.0.1:7777
+       HiddenServicePort 17777 127.0.0.1:17777
+
+The directory can be different of course, but (both) port numbers should be equal to
+your novacoind's P2P listen port (7777 by default, 17777 by default for testnet).
+
+       -externalip=X   You can tell novacoin about its publicly reachable address using
+                       this option, and this can be a .onion address. Given the above
+                       configuration, you can find your onion address in
+                       /var/lib/tor/novacoin-service/hostname. Onion addresses are given
+                       preference for your node to advertize itself with, for connections
+                       coming from unroutable addresses (such as 127.0.0.1, where the
+                       Tor proxy typically runs).
+       
+       -listen         You'll need to enable listening for incoming connections, as this
+                       is off by default behind a proxy.
+       
+       -discover       When -externalip is specified, no attempt is made to discover local
+                       IPv4 or IPv6 addresses. If you want to run a dual stack, reachable
+                       from both Tor and IPv4 (or IPv6), you'll need to either pass your
+                       other addresses using -externalip, or explicitly enable -discover.
+                       Note that both addresses of a dual-stack system may be easily
+                       linkable using traffic analysis.
+
+In a typical situation, where you're only reachable via Tor, this should suffice:
+
+       ./novacoind -proxy=127.0.0.1:9050 -externalip=youraddress.onion -listen
+
+(obviously, replace the Onion address with your own). If you don't care too much
+about hiding your node, and want to be reachable on IPv4 as well, additionally
+specify:
+
+       ./novacoind ... -discover
+
+and open port 7777 on your firewall (or use -upnp).
+
+If you only want to use Tor to reach onion addresses, but not use it as a proxy
+for normal IPv4/IPv6 communication, use:
+
+       ./novacoin -onion=127.0.0.1:9050 -externalip=youraddress.onion -discover
+
+Known addresses of novacoin nodes
+
+       seedp4knqnoei57u.onion
+       seedr3hhlepyi7fd.onion
+       seed3uuomkclbiz4.onion
+       seedeh7qck3ouff5.onion
+       seedt3sraf53ajiy.onion
+       seedg4qyccsg42oq.onion
+       novaqrtoywpg7jly.onion
+       seed3d5wolqbgrcb.onion
+       seed24u5dwph3qw4.onion
+       mj26ulzbs2oskgym.onion
+       eqon4usunavt76m7.onion
+       5rg3vq4jagckeckf.onion
index 99afa10..31ab21b 100644 (file)
@@ -143,7 +143,7 @@ public:
     bool Lock(const void *addr, size_t len)
     {
 #ifdef WIN32
-        return VirtualLock(const_cast<void*>(addr), len);
+        return VirtualLock(const_cast<void*>(addr), len) != 0;
 #else
         return mlock(addr, len) == 0;
 #endif
@@ -154,7 +154,7 @@ public:
     bool Unlock(const void *addr, size_t len)
     {
 #ifdef WIN32
-        return VirtualUnlock(const_cast<void*>(addr), len);
+        return VirtualUnlock(const_cast<void*>(addr), len) != 0;
 #else
         return munlock(addr, len) == 0;
 #endif
index b1dec89..395527e 100644 (file)
@@ -784,6 +784,7 @@ bool AppInit2()
                     break;
                 }
             } catch(std::exception &e) {
+                (void)e;
                 strLoadError = _("Error opening block database");
                 break;
             }
index f6f8074..e2b6904 100644 (file)
@@ -224,8 +224,6 @@ int main(int argc, char *argv[])
                 // Put this in a block, so that the Model objects are cleaned up before
                 // calling Shutdown().
 
-                optionsModel.Upgrade(); // Must be done after AppInit2
-
                 if (splashref)
                     splash.finish(&window);
 
index 3171647..a191a8d 100644 (file)
@@ -735,17 +735,6 @@ void BitcoinGUI::updateMining()
         labelMiningIcon->setToolTip(tr("No suitable inputs were found"));
 }
 
-void BitcoinGUI::error(const QString &title, const QString &message, bool modal)
-{
-    // Report errors from network/worker thread
-    if(modal)
-    {
-        QMessageBox::critical(this, title, message, QMessageBox::Ok, QMessageBox::Ok);
-    } else {
-        notificator->notify(Notificator::Critical, title, message);
-    }
-}
-
 void BitcoinGUI::message(const QString &title, const QString &message, unsigned int style, const QString &detail)
 {
     QString strTitle = tr("NovaCoin") + " - ";
@@ -1116,7 +1105,7 @@ void BitcoinGUI::dumpWallet()
     QString filename = QFileDialog::getSaveFileName(this, tr("Dump Wallet"), saveDir, tr("Wallet dump (*.txt)"));
     if(!filename.isEmpty()) {
         if(!walletModel->dumpWallet(filename)) {
-            error(tr("Dump failed"),
+            message(tr("Dump failed"),
                          tr("An error happened while trying to save the keys to your location.\n"
                             "Keys were not saved.")
                       ,CClientUIInterface::MSG_ERROR);
@@ -1149,7 +1138,7 @@ void BitcoinGUI::importWallet()
     QString filename = QFileDialog::getOpenFileName(this, tr("Import Wallet"), openDir, tr("Wallet dump (*.txt)"));
     if(!filename.isEmpty()) {
         if(!walletModel->importWallet(filename)) {
-            error(tr("Import Failed"),
+            message(tr("Import Failed"),
                          tr("An error happened while trying to import the keys.\n"
                             "Some or all keys from:\n %1,\n were not imported into your wallet.")
                          .arg(filename)
@@ -1229,3 +1218,14 @@ void BitcoinGUI::toggleHidden()
 {
     showNormalIfMinimized(true);
 }
+
+void BitcoinGUI::error(const QString &title, const QString &message, bool modal)
+{
+    // Report errors from network/worker thread
+    if(modal)
+    {
+        QMessageBox::critical(this, title, message, QMessageBox::Ok, QMessageBox::Ok);
+    } else {
+        notificator->notify(Notificator::Critical, title, message);
+    }
+}
index 56d1674..6013c79 100644 (file)
 #include "txdb-bdb.h"
 #endif
 
-#ifdef _MSC_VER
-#pragma warning( disable : 4101)
-#endif
-
 MultisigDialog::MultisigDialog(QWidget *parent) : QWidget(parent), ui(new Ui::MultisigDialog), model(0)
 {
     ui->setupUi(this);
@@ -353,6 +349,7 @@ void MultisigDialog::on_transaction_textChanged()
     }
     catch(std::exception &e)
     {
+        (void)e;
         return;
     }
 
@@ -423,6 +420,7 @@ void MultisigDialog::on_signTransactionButton_clicked()
     }
     catch(std::exception &e)
     {
+        (void)e;
         return;
     }
     CTransaction mergedTx(tx);
@@ -542,6 +540,7 @@ void MultisigDialog::on_sendTransactionButton_clicked()
     }
     catch(std::exception &e)
     {
+        (void)e;
         return;
     }
     uint256 txHash = tx.GetHash();
index 71203f5..664de32 100644 (file)
@@ -107,80 +107,6 @@ void OptionsModel::Init()
         SoftSetArg("-lang", language.toStdString());
 }
 
-bool OptionsModel::Upgrade()
-{
-    QSettings settings;
-
-    if (settings.contains("bImportFinished"))
-        return false; // Already upgraded
-
-    settings.setValue("bImportFinished", true);
-
-    // Move settings from old wallet.dat (if any):
-    CWalletDB walletdb(strWalletFileName);
-
-    QList<QString> intOptions;
-    intOptions << "nDisplayUnit" << "nTransactionFee";
-    foreach(QString key, intOptions)
-    {
-        int value = 0;
-        if (walletdb.ReadSetting(key.toStdString(), value))
-        {
-            settings.setValue(key, value);
-            walletdb.EraseSetting(key.toStdString());
-        }
-    }
-    QList<QString> boolOptions;
-    boolOptions << "bDisplayAddresses" << "fMinimizeToTray" << "fMinimizeOnClose" << "fUseProxy" << "fUseTor" << "fTorOnly" << "fUseUPnP";
-    foreach(QString key, boolOptions)
-    {
-        bool value = false;
-        if (walletdb.ReadSetting(key.toStdString(), value))
-        {
-            settings.setValue(key, value);
-            walletdb.EraseSetting(key.toStdString());
-        }
-    }
-    try
-    {
-        CAddress addrProxyAddress, addrTorAddress;
-        if (walletdb.ReadSetting("addrProxy", addrProxyAddress))
-        {
-            settings.setValue("addrProxy", addrProxyAddress.ToStringIPPort().c_str());
-            walletdb.EraseSetting("addrProxy");
-        }
-
-        if (walletdb.ReadSetting("addrTor", addrTorAddress))
-        {
-            settings.setValue("addrTor", addrTorAddress.ToStringIPPort().c_str());
-            walletdb.EraseSetting("addrTor");
-        }
-    }
-    catch (std::ios_base::failure &e)
-    {
-        // 0.6.0rc1 saved this as a CService, which causes failure when parsing as a CAddress
-        CService addrProxy, addrTor;
-        if (walletdb.ReadSetting("addrProxy", addrProxy))
-        {
-            settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str());
-            walletdb.EraseSetting("addrProxy");
-        }
-
-        if (walletdb.ReadSetting("addrTor", addrTor))
-        {
-            settings.setValue("addrTor", addrTor.ToStringIPPort().c_str());
-            walletdb.EraseSetting("addrTor");
-        }
-    }
-
-    ApplyProxySettings();
-    ApplyTorSettings();
-    Init();
-
-    return true;
-}
-
-
 int OptionsModel::rowCount(const QModelIndex & parent) const
 {
     return OptionIDRowCount;
index 6331fac..3a27427 100644 (file)
@@ -42,9 +42,6 @@ public:
 
     void Init();
 
-    /* Migrate settings from wallet.dat after app initialization */
-    bool Upgrade(); /* returns true if settings upgraded */
-
     int rowCount(const QModelIndex & parent = QModelIndex()) const;
     QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
     bool setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole);
index b6e4530..1adc81b 100644 (file)
@@ -293,7 +293,7 @@ QString TransactionTableModel::formatTxStatus(const TransactionRecord *wtx) cons
 
     if (wtx->type == TransactionRecord::Generated)
     {
-        nNumConf = nCoinbaseMaturity;
+        nNumConf = nCoinbaseMaturity + 20;
     }
 
     switch(wtx->status.status)
index 4090e01..5607a4b 100644 (file)
@@ -20,7 +20,7 @@ extern void TxToJSON(const CTransaction& tx, const uint256 hashBlock, json_spiri
 std::string HelpRequiringPassphrase()
 {
     return pwalletMain->IsCrypted()
-        ? "\nrequires wallet passphrase to be set with walletpassphrase first"
+        ? "\n\nRequires wallet passphrase to be set with walletpassphrase first"
         : "";
 }
 
@@ -1410,7 +1410,9 @@ Value keypoolrefill(const Array& params, bool fHelp)
     if (fHelp || params.size() > 1)
         throw runtime_error(
             "keypoolrefill [new-size]\n"
-            "Fills the keypool."
+            "Fills the keypool.\n"
+            "IMPORTANT: Any previous backups you have made of your wallet file "
+            "should be replaced with the newly generated one."
             + HelpRequiringPassphrase());
 
     unsigned int nSize = max<unsigned int>(GetArg("-keypool", 100), 0);
@@ -1435,7 +1437,9 @@ Value keypoolreset(const Array& params, bool fHelp)
     if (fHelp || params.size() > 1)
         throw runtime_error(
             "keypoolreset [new-size]\n"
-            "Resets the keypool."
+            "Resets the keypool.\n"
+            "IMPORTANT: Any previous backups you have made of your wallet file "
+            "should be replaced with the newly generated one."
             + HelpRequiringPassphrase());
 
     unsigned int nSize = max<unsigned int>(GetArg("-keypool", 100), 0);
index 67a8b7a..c73dda6 100644 (file)
@@ -92,6 +92,7 @@ protected:
             ssValue >> value;
         }
         catch (std::exception &e) {
+            (void)e;
             return false;
         }
         return true;
index 89fad8f..45823f6 100644 (file)
@@ -267,13 +267,6 @@ bool CWallet::SetMinVersion(enum WalletFeature nVersion, CWalletDB* pwalletdbIn,
     if (fFileBacked)
     {
         CWalletDB* pwalletdb = pwalletdbIn ? pwalletdbIn : new CWalletDB(strWalletFile);
-        if (nWalletVersion >= 40000)
-        {
-            // Versions prior to 0.4.0 did not support the "minversion" record.
-            // Use a CCorruptAddress to make them crash instead.
-            CCorruptAddress corruptAddress;
-            pwalletdb->WriteSetting("addrIncoming", corruptAddress);
-        }
         if (nWalletVersion > 40000)
             pwalletdb->WriteMinVersion(nWalletVersion);
         if (!pwalletdbIn)
index 1739693..b5b7f02 100644 (file)
@@ -188,25 +188,6 @@ public:
         return Erase(std::make_pair(std::string("pool"), nPool));
     }
 
-    // Settings are no longer stored in wallet.dat; these are
-    // used only for backwards compatibility:
-    template<typename T>
-    bool ReadSetting(const std::string& strKey, T& value)
-    {
-        return Read(std::make_pair(std::string("setting"), strKey), value);
-    }
-    template<typename T>
-    bool WriteSetting(const std::string& strKey, const T& value)
-    {
-        nWalletDBUpdated++;
-        return Write(std::make_pair(std::string("setting"), strKey), value);
-    }
-    bool EraseSetting(const std::string& strKey)
-    {
-        nWalletDBUpdated++;
-        return Erase(std::make_pair(std::string("setting"), strKey));
-    }
-
     bool WriteMinVersion(int nVersion)
     {
         return Write(std::string("minversion"), nVersion);