diff --git a/cryptonote b/cryptonote index f15bcca55..ebe194e48 160000 --- a/cryptonote +++ b/cryptonote @@ -1 +1 @@ -Subproject commit f15bcca5559eb7405bc28fb68c2362042d38ceba +Subproject commit ebe194e488d0030e0328022a3aba0d09773ea83d diff --git a/src/Languages.pro b/src/Languages.pro index 4c96403b1..62f2bf443 100644 --- a/src/Languages.pro +++ b/src/Languages.pro @@ -70,6 +70,7 @@ gui/VerifyMnemonicSeedDialog.cpp \ gui/NoWalletFrame.cpp \ gui/SendGlassFrame.cpp \ gui/SignMessageDialog.cpp \ +gui/OptimizationSettings.cpp \ HEADERS = CommandLineParser.h \ @@ -129,6 +130,7 @@ gui/VerifyMnemonicSeedDialog.h \ gui/NoWalletFrame.h \ gui/SendGlassFrame.h \ gui/SignMessageDialog.h \ +gui/OptimizationSettings.h \ FORMS = gui/ui/aboutdialog.ui \ @@ -166,6 +168,7 @@ gui/ui/restorefrommnemonicseeddialog.ui \ gui/ui/verifymnemonicseeddialog.ui \ gui/ui/nowalletframe.ui \ gui/ui/signmessagedialog.ui \ +gui/ui/optimizationsettingsdialog.ui \ TRANSLATIONS = languages/uk.ts \ diff --git a/src/OptimizationManager.cpp b/src/OptimizationManager.cpp new file mode 100644 index 000000000..79629c55b --- /dev/null +++ b/src/OptimizationManager.cpp @@ -0,0 +1,157 @@ +// Copyright (c) 2015-2017, The Bytecoin developers +// Copyright (c) 2018, The Karbo developers +// +// This file is part of Karbovanets. +// +// Karbovanets is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Karbovanets is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with Karbovanets. If not, see . + +#include +#include + +#include "OptimizationManager.h" +#include "WalletAdapter.h" +#include "gui/WalletEvents.h" +#include "NodeAdapter.h" +#include "Settings.h" + +namespace WalletGui { + +namespace { + +const int CHECK_TIMER_INTERVAL = 1000; + +} + +OptimizationManager::OptimizationManager(QObject* _parent) : QObject(_parent), + m_checkTimerId(-1), m_optimizationTimerId(-1), m_currentOptimizationInterval(0), m_isSynchronized(false) { + connect(&WalletAdapter::instance(), &WalletAdapter::walletInitCompletedSignal, this, &OptimizationManager::walletOpened); + connect(&WalletAdapter::instance(), &WalletAdapter::walletCloseCompletedSignal, this, &OptimizationManager::walletClosed); + connect(&WalletAdapter::instance(), &WalletAdapter::walletSynchronizationProgressUpdatedSignal, this, &OptimizationManager::synchronizationProgressUpdated, Qt::QueuedConnection); + connect(&WalletAdapter::instance(), &WalletAdapter::walletSynchronizationCompletedSignal, this, &OptimizationManager::synchronizationCompleted, Qt::QueuedConnection); +} + +OptimizationManager::~OptimizationManager() { +} + +void OptimizationManager::walletOpened() { + Q_ASSERT(m_checkTimerId == -1); + m_checkTimerId = startTimer(CHECK_TIMER_INTERVAL); +} + +void OptimizationManager::walletClosed() { + if (m_checkTimerId != -1) { + killTimer(m_checkTimerId); + m_checkTimerId = -1; + } + + if (m_optimizationTimerId != -1) { + killTimer(m_optimizationTimerId); + m_optimizationTimerId = -1; + } +} + +void OptimizationManager::synchronizationProgressUpdated() { + m_isSynchronized = false; +} + +void OptimizationManager::synchronizationCompleted() { + m_isSynchronized = true; +} + +void OptimizationManager::timerEvent(QTimerEvent* _event) { + if (_event->timerId() == m_checkTimerId) { + checkOptimization(); + } else if (_event->timerId() == m_optimizationTimerId) { + optimize(); + } + + QObject::timerEvent(_event); +} + +void OptimizationManager::checkOptimization() { + if (Settings::instance().isOptimizationEnabled()) { + bool customTimeEnabled = Settings::instance().isOptimizationTimeSetManually(); + QTime startTime = Settings::instance().getOptimizationStartTime(); + QTime stopTime = Settings::instance().getOptimizationStopTime(); + QTime currentTime = QTime::currentTime(); + if (!customTimeEnabled || startTime == stopTime) { + ensureStarted(); + } else if (stopTime > startTime) { + if (currentTime >= startTime && currentTime < stopTime) { + ensureStarted(); + } else { + ensureStopped(); + } + } else { + if ((currentTime >= startTime && currentTime < QTime(0, 0)) || (currentTime >= QTime(0, 0) && currentTime < stopTime)) { + ensureStarted(); + } else { + ensureStopped(); + } + } + } else { + ensureStopped(); + } +} + +void OptimizationManager::optimize() { + if (!m_isSynchronized) { + return; + } + + Q_ASSERT(WalletAdapter::instance().isOpen()); + if (Settings::instance().isTrackingMode()) { + return; + } + + size_t fusionReadyCount = WalletAdapter::instance().estimateFusion(CurrencyAdapter::instance().getMinimumFee()); + const size_t MAX_FUSION_OUTPUT_COUNT = 4; + const quint64 mixin = Settings::instance().getOptimizationMixin(); + size_t estimatedFusionInputsCount = CurrencyAdapter::instance().getCurrency().getApproximateMaximumInputCount(CurrencyAdapter::instance().getCurrency().fusionTxMaxSize(), MAX_FUSION_OUTPUT_COUNT, mixin); + if (estimatedFusionInputsCount < CurrencyAdapter::instance().getCurrency().fusionTxMinInputCount()) { + // Mixin is too big + return; + } + std::list fusionInputs = WalletAdapter::instance().getFusionTransfersToSend(Settings::instance().getOptimizationThreshold(), CurrencyAdapter::instance().getCurrency().fusionTxMinInputCount(), estimatedFusionInputsCount); + if (fusionInputs.size() < CurrencyAdapter::instance().getCurrency().fusionTxMinInputCount()) { + //nothing to optimize + return; + } + quint64 amount = 0; + WalletAdapter::instance().sendFusionTransaction(fusionInputs, 0, "", mixin); +} + +void OptimizationManager::ensureStarted() { + if (m_optimizationTimerId != -1) { + if (m_currentOptimizationInterval == Settings::instance().getOptimizationInterval()) { + return; + } + } + + optimize(); + m_currentOptimizationInterval = Settings::instance().getOptimizationInterval(); + m_optimizationTimerId = startTimer(m_currentOptimizationInterval); +} + +void OptimizationManager::ensureStopped() { + if (m_optimizationTimerId == -1) { + return; + } + + killTimer(m_optimizationTimerId); + m_currentOptimizationInterval = 0; + m_optimizationTimerId = -1; +} + +} diff --git a/src/OptimizationManager.h b/src/OptimizationManager.h new file mode 100644 index 000000000..39441d1dc --- /dev/null +++ b/src/OptimizationManager.h @@ -0,0 +1,59 @@ +// Copyright (c) 2015-2017, The Bytecoin developers +// Copyright (c) 2018, The Karbo developers +// +// This file is part of Karbovanets. +// +// Karbovanets is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Karbovanets is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with Karbovanets. If not, see . + +#pragma once + +#include + +#include "CryptoNoteWrapper.h" +#include "CurrencyAdapter.h" +#include "WalletAdapter.h" + +namespace WalletGui { + +class OptimizationManager : public QObject { + Q_OBJECT + Q_DISABLE_COPY(OptimizationManager) + +public: + OptimizationManager(QObject *_parent); + ~OptimizationManager(); + + void checkOptimization(); + + Q_SLOT void walletOpened(); + Q_SLOT void walletClosed(); + Q_SLOT void synchronizationProgressUpdated(); + Q_SLOT void synchronizationCompleted(); + +protected: + virtual void timerEvent(QTimerEvent* _event); + +private: + int m_checkTimerId; + int m_optimizationTimerId; + quint64 m_currentOptimizationInterval; + bool m_isSynchronized; + + void optimize(); + void ensureStarted(); + void ensureStopped(); + +}; + +} diff --git a/src/Settings.cpp b/src/Settings.cpp index 3754f8817..3ec3b5ca8 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -25,9 +26,20 @@ Q_DECL_CONSTEXPR char OPTION_CONNECTION[] = "connectionMode"; Q_DECL_CONSTEXPR char OPTION_RPCNODES[] = "remoteNodes"; Q_DECL_CONSTEXPR char OPTION_DAEMON_PORT[] = "daemonPort"; Q_DECL_CONSTEXPR char OPTION_REMOTE_NODE[] = "remoteNode"; -Q_DECL_CONSTEXPR char OPTION_CURRENT_POOL[] = "currentPool"; const char OPTION_WALLET_THEME[] = "theme"; +const char OPTION_WALLET_OPTIMIZATION[] = "optimization"; +const char OPTION_WALLET_OPTIMIZATION_ENABLED[] = "enabled"; +const char OPTION_WALLET_OPTIMIZATION_TIME_SET_MANUALLY[] = "useCustomTime"; +const char OPTION_WALLET_OPTIMIZATION_START_TIME[] = "startTime"; +const char OPTION_WALLET_OPTIMIZATION_STOP_TIME[] = "stopTime"; +const char OPTION_WALLET_OPTIMIZATION_INTERVAL[] = "interval"; +const char OPTION_WALLET_OPTIMIZATION_THRESHOLD[] = "target"; +const char OPTION_WALLET_OPTIMIZATION_MIXIN[] = "mixin"; +const quint64 DEFAULT_OPTIMIZATION_PERIOD = 1000 * 60 * 30; // 30 minutes +const quint64 DEFAULT_OPTIMIZATION_THRESHOLD = 10000000000000; +const quint64 DEFAULT_OPTIMIZATION_MIXIN = 3; + Settings& Settings::instance() { static Settings inst; return inst; @@ -245,14 +257,6 @@ QString Settings::getCurrentRemoteNode() const { return remotenode; } -QString Settings::getCurrentPool() const { - QString pool; - if (m_settings.contains(OPTION_CURRENT_POOL)) { - pool = m_settings.value(OPTION_CURRENT_POOL).toString(); - } - return pool; -} - bool Settings::isStartOnLoginEnabled() const { bool res = false; #ifdef Q_OS_MAC @@ -300,6 +304,95 @@ bool Settings::isCloseToTrayEnabled() const { } #endif +bool Settings::isOptimizationEnabled() const { + if (!m_settings.contains(OPTION_WALLET_OPTIMIZATION)) { + return false; + } + + QJsonObject optimizationObject = m_settings.value(OPTION_WALLET_OPTIMIZATION).toObject(); + return optimizationObject.contains(OPTION_WALLET_OPTIMIZATION_ENABLED) ? optimizationObject.value(OPTION_WALLET_OPTIMIZATION_ENABLED).toBool() : false; +} + +bool Settings::isOptimizationTimeSetManually() const { + if (!m_settings.contains(OPTION_WALLET_OPTIMIZATION)) { + return false; + } + + QJsonObject optimizationObject = m_settings.value(OPTION_WALLET_OPTIMIZATION).toObject(); + if (!optimizationObject.contains(OPTION_WALLET_OPTIMIZATION_TIME_SET_MANUALLY)) { + return false; + } + + return optimizationObject.value(OPTION_WALLET_OPTIMIZATION_TIME_SET_MANUALLY).toBool(); +} + +QTime Settings::getOptimizationStartTime() const { + if (!m_settings.contains(OPTION_WALLET_OPTIMIZATION)) { + return QTime(0, 0); + } + + QJsonObject optimizationObject = m_settings.value(OPTION_WALLET_OPTIMIZATION).toObject(); + if (!optimizationObject.contains(OPTION_WALLET_OPTIMIZATION_START_TIME)) { + return QTime(0, 0); + } + + QString timeString = optimizationObject.value(OPTION_WALLET_OPTIMIZATION_START_TIME).toString(); + return QTime::fromString(timeString, Qt::ISODate); +} + +QTime Settings::getOptimizationStopTime() const { + if (!m_settings.contains(OPTION_WALLET_OPTIMIZATION)) { + return QTime(0, 0); + } + + QJsonObject optimizationObject = m_settings.value(OPTION_WALLET_OPTIMIZATION).toObject(); + if (!optimizationObject.contains(OPTION_WALLET_OPTIMIZATION_STOP_TIME)) { + return QTime(0, 0); + } + + QString timeString = optimizationObject.value(OPTION_WALLET_OPTIMIZATION_STOP_TIME).toString(); + return QTime::fromString(timeString, Qt::ISODate); +} + +quint64 Settings::getOptimizationInterval() const { + if (!m_settings.contains(OPTION_WALLET_OPTIMIZATION)) { + return DEFAULT_OPTIMIZATION_PERIOD; + } + + QJsonObject optimizationObject = m_settings.value(OPTION_WALLET_OPTIMIZATION).toObject(); + if (!optimizationObject.contains(OPTION_WALLET_OPTIMIZATION_INTERVAL)) { + return DEFAULT_OPTIMIZATION_PERIOD; + } + + return optimizationObject.value(OPTION_WALLET_OPTIMIZATION_INTERVAL).toString().toULongLong(); +} + +quint64 Settings::getOptimizationThreshold() const { + if (!m_settings.contains(OPTION_WALLET_OPTIMIZATION)) { + return DEFAULT_OPTIMIZATION_THRESHOLD; + } + + QJsonObject optimizationObject = m_settings.value(OPTION_WALLET_OPTIMIZATION).toObject(); + if (!optimizationObject.contains(OPTION_WALLET_OPTIMIZATION_THRESHOLD)) { + return DEFAULT_OPTIMIZATION_THRESHOLD; + } + + return optimizationObject.value(OPTION_WALLET_OPTIMIZATION_THRESHOLD).toString().toULongLong(); +} + +quint64 Settings::getOptimizationMixin() const { + if (!m_settings.contains(OPTION_WALLET_OPTIMIZATION)) { + return DEFAULT_OPTIMIZATION_MIXIN; + } + + QJsonObject optimizationObject = m_settings.value(OPTION_WALLET_OPTIMIZATION).toObject(); + if (!optimizationObject.contains(OPTION_WALLET_OPTIMIZATION_MIXIN)) { + return DEFAULT_OPTIMIZATION_MIXIN; + } + + return optimizationObject.value(OPTION_WALLET_OPTIMIZATION_MIXIN).toString().toULongLong(); +} + void Settings::setWalletFile(const QString& _file) { if (_file.endsWith(".wallet") || _file.endsWith(".keys")) { m_settings.insert("walletFile", _file); @@ -461,6 +554,125 @@ void Settings::setCloseToTrayEnabled(bool _enable) { } #endif +void Settings::setOptimizationEnabled(bool _enable) { + if (_enable == isOptimizationEnabled()) { + return; + } + + { + QJsonObject optimizationObject; + if (m_settings.contains(OPTION_WALLET_OPTIMIZATION)) { + optimizationObject = m_settings.value(OPTION_WALLET_OPTIMIZATION).toObject(); + } + + optimizationObject.insert(OPTION_WALLET_OPTIMIZATION_ENABLED, _enable); + m_settings.insert(OPTION_WALLET_OPTIMIZATION, optimizationObject); + saveSettings(); + } +} + +void Settings::setOptimizationTimeSetManually(bool _enable) { + if (_enable == isOptimizationTimeSetManually()) { + return; + } + + { + QJsonObject optimizationObject; + if (m_settings.contains(OPTION_WALLET_OPTIMIZATION)) { + optimizationObject = m_settings.value(OPTION_WALLET_OPTIMIZATION).toObject(); + } + + optimizationObject.insert(OPTION_WALLET_OPTIMIZATION_TIME_SET_MANUALLY, _enable); + m_settings.insert(OPTION_WALLET_OPTIMIZATION, optimizationObject); + saveSettings(); + } +} + +void Settings::setOptimizationStartTime(const QTime& _startTime) { + if (_startTime == getOptimizationStartTime()) { + return; + } + + { + QJsonObject optimizationObject; + if (m_settings.contains(OPTION_WALLET_OPTIMIZATION)) { + optimizationObject = m_settings.value(OPTION_WALLET_OPTIMIZATION).toObject(); + } + + optimizationObject.insert(OPTION_WALLET_OPTIMIZATION_START_TIME, _startTime.toString(Qt::ISODate)); + m_settings.insert(OPTION_WALLET_OPTIMIZATION, optimizationObject); + saveSettings(); + } +} + +void Settings::setOptimizationStopTime(const QTime& _stopTime) { + if (_stopTime == getOptimizationStopTime()) { + return; + } + + { + QJsonObject optimizationObject; + if (m_settings.contains(OPTION_WALLET_OPTIMIZATION)) { + optimizationObject = m_settings.value(OPTION_WALLET_OPTIMIZATION).toObject(); + } + + optimizationObject.insert(OPTION_WALLET_OPTIMIZATION_STOP_TIME, _stopTime.toString(Qt::ISODate)); + m_settings.insert(OPTION_WALLET_OPTIMIZATION, optimizationObject); + saveSettings(); + } +} + +void Settings::setOptimizationInterval(quint64 _interval) { + if (_interval == getOptimizationInterval()) { + return; + } + + { + QJsonObject optimizationObject; + if (m_settings.contains(OPTION_WALLET_OPTIMIZATION)) { + optimizationObject = m_settings.value(OPTION_WALLET_OPTIMIZATION).toObject(); + } + + optimizationObject.insert(OPTION_WALLET_OPTIMIZATION_INTERVAL, QString::number(_interval)); + m_settings.insert(OPTION_WALLET_OPTIMIZATION, optimizationObject); + saveSettings(); + } +} + +void Settings::setOptimizationThreshold(quint64 _threshold) { + if (_threshold == getOptimizationThreshold()) { + return; + } + + { + QJsonObject optimizationObject; + if (m_settings.contains(OPTION_WALLET_OPTIMIZATION)) { + optimizationObject = m_settings.value(OPTION_WALLET_OPTIMIZATION).toObject(); + } + + optimizationObject.insert(OPTION_WALLET_OPTIMIZATION_THRESHOLD, QString::number(_threshold)); + m_settings.insert(OPTION_WALLET_OPTIMIZATION, optimizationObject); + saveSettings(); + } +} + +void Settings::setOptimizationMixin(quint64 _mixin) { + if (_mixin == getOptimizationMixin()) { + return; + } + + { + QJsonObject optimizationObject; + if (m_settings.contains(OPTION_WALLET_OPTIMIZATION)) { + optimizationObject = m_settings.value(OPTION_WALLET_OPTIMIZATION).toObject(); + } + + optimizationObject.insert(OPTION_WALLET_OPTIMIZATION_MIXIN, QString::number(_mixin)); + m_settings.insert(OPTION_WALLET_OPTIMIZATION, optimizationObject); + saveSettings(); + } +} + void Settings::saveSettings() const { QFile cfgFile(getDataDir().absoluteFilePath(QCoreApplication::applicationName() + ".cfg")); if (cfgFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) { diff --git a/src/Settings.h b/src/Settings.h index 948e4ea97..5777be13a 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -48,6 +48,14 @@ class Settings : public QObject { QString getCurrentPool() const; QString getCurrentTheme() const; + bool isOptimizationEnabled() const; + bool isOptimizationTimeSetManually() const; + QTime getOptimizationStartTime() const; + QTime getOptimizationStopTime() const; + quint64 getOptimizationInterval() const; + quint64 getOptimizationThreshold() const; + quint64 getOptimizationMixin() const; + bool isEncrypted() const; bool isStartOnLoginEnabled() const; bool isTrackingMode() const; @@ -72,6 +80,14 @@ class Settings : public QObject { void setCloseToTrayEnabled(bool _enable); #endif + void setOptimizationEnabled(bool _enable); + void setOptimizationTimeSetManually(bool _enable); + void setOptimizationStartTime(const QTime& _startTime); + void setOptimizationStopTime(const QTime& _stopTime); + void setOptimizationInterval(quint64 _interval); + void setOptimizationThreshold(quint64 _threshold); + void setOptimizationMixin(quint64 _mixin); + private: QJsonObject m_settings; QString m_addressBookFile; diff --git a/src/WalletAdapter.cpp b/src/WalletAdapter.cpp index ea8549d6e..8a7fadf95 100644 --- a/src/WalletAdapter.cpp +++ b/src/WalletAdapter.cpp @@ -360,6 +360,35 @@ void WalletAdapter::sweepDust(const std::vectorestimateFusion(_threshold); + } catch (std::system_error&) { + return 0; + } +} + +std::list WalletAdapter::getFusionTransfersToSend(quint64 _threshold, size_t _min_input_count, size_t _max_input_count) { + Q_CHECK_PTR(m_wallet); + try { + return m_wallet->selectFusionTransfersToSend(_threshold, _min_input_count, _max_input_count); + } catch (std::system_error&) { + return {}; + } +} + +void WalletAdapter::sendFusionTransaction(const std::list& _fusion_inputs, quint64 _fee, const QString& _extra, quint64 _mixin) { + Q_CHECK_PTR(m_wallet); + try { + lock(); + m_wallet->sendFusionTransaction(_fusion_inputs, _fee, _extra.toStdString(), _mixin, 0); + Q_EMIT walletStateChangedSignal(tr("Optimizing wallet")); + } catch (std::system_error&) { + unlock(); + } +} + bool WalletAdapter::changePassword(const QString& _oldPassword, const QString& _newPassword) { Q_CHECK_PTR(m_wallet); try { diff --git a/src/WalletAdapter.h b/src/WalletAdapter.h index fdfde9fb0..d6c6517b1 100644 --- a/src/WalletAdapter.h +++ b/src/WalletAdapter.h @@ -11,10 +11,12 @@ #include #include +#include #include #include #include +#include namespace WalletGui { @@ -51,6 +53,10 @@ class WalletAdapter : public QObject, public CryptoNote::IWalletLegacyObserver { void setWalletFile(const QString& _path); Crypto::SecretKey getTxKey(Crypto::Hash& txid); + quint64 estimateFusion(quint64 _threshold); + std::list getFusionTransfersToSend(quint64 _threshold, size_t _min_input_count, size_t _max_input_count); + void sendFusionTransaction(const std::list& _fusion_inputs, quint64 _fee, const QString& _extra, quint64 _mixin); + void initCompleted(std::error_code _result) Q_DECL_OVERRIDE; void saveCompleted(std::error_code _result) Q_DECL_OVERRIDE; void synchronizationProgressUpdated(uint32_t _current, uint32_t _total) Q_DECL_OVERRIDE; diff --git a/src/gui/ConnectionSettings.cpp b/src/gui/ConnectionSettings.cpp index 36a1fc8bb..5fe4d183c 100644 --- a/src/gui/ConnectionSettings.cpp +++ b/src/gui/ConnectionSettings.cpp @@ -10,8 +10,6 @@ #include "NodeModel.h" #include "Settings.h" -#include - namespace Ui { class ConnectionSettingsDialog; } diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 25641af12..112aff784 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -27,6 +27,7 @@ #include "AddressBookModel.h" #include "ChangePasswordDialog.h" #include "ConnectionSettings.h" +#include "OptimizationSettings.h" #include "PrivateKeysDialog.h" #include "ExportTrackingKeyDialog.h" #include "ImportTrackingKeyDialog.h" @@ -74,7 +75,7 @@ MainWindow& MainWindow::instance() { } MainWindow::MainWindow() : QMainWindow(), m_ui(new Ui::MainWindow), m_trayIcon(nullptr), m_tabActionGroup(new QActionGroup(this)), - m_isAboutToQuit(false), paymentServer(0), maxRecentFiles(10), trayIconMenu(0), toggleHideAction(0) { + m_isAboutToQuit(false), paymentServer(0), optimizationManager(nullptr), maxRecentFiles(10), trayIconMenu(0), toggleHideAction(0) { m_ui->setupUi(this); m_connectionStateIconLabel = new QPushButton(); m_connectionStateIconLabel->setFlat(true); // Make the button look like a label, but clickable @@ -87,13 +88,14 @@ MainWindow::MainWindow() : QMainWindow(), m_ui(new Ui::MainWindow), m_trayIcon(n connectToSignals(); createLanguageMenu(); initUi(); - walletClosed(); } MainWindow::~MainWindow() { delete paymentServer; paymentServer = 0; + delete optimizationManager; + optimizationManager = 0; //if(m_trayIcon) // Hide tray icon, as deleting will let it linger until quit (on Ubuntu) // m_trayIcon->hide(); #ifdef Q_OS_MAC @@ -221,6 +223,7 @@ void MainWindow::initUi() { m_ui->m_closeToTrayAction->deleteLater(); #endif + OptimizationManager* optimizationManager = new OptimizationManager(this); createTrayIconMenu(); } @@ -535,6 +538,7 @@ void MainWindow::isTrackingMode() { m_ui->m_openUriAction->setEnabled(false); m_ui->m_showMnemonicSeedAction->setEnabled(false); m_ui->m_sweepUnmixableAction->setEnabled(false); + m_ui->m_optimizationAction->setEnabled(false); m_trackingModeIconLabel->show(); } @@ -676,7 +680,6 @@ void MainWindow::openConnectionSettings() { dlg.setRemoteNode(); dlg.setLocalDaemonPort(); if (dlg.exec() == QDialog::Accepted) { - QString connection = dlg.setConnectionMode(); Settings::instance().setConnection(connection); @@ -690,6 +693,15 @@ void MainWindow::openConnectionSettings() { } } +void MainWindow::openOptimizationSettings() { + OptimizationSettingsDialog dlg(&MainWindow::instance()); + dlg.exec(); + +// if (dlg.exec() == QDialog::Accepted) { +// optimizationManager->checkOptimization(); +// } +} + void MainWindow::showStatusInfo() { InfoDialog dlg(this); dlg.exec(); @@ -938,6 +950,7 @@ void MainWindow::walletOpened(bool _error, const QString& _error_text) { m_ui->m_resetAction->setEnabled(true); m_ui->m_openUriAction->setEnabled(true); m_ui->m_sweepUnmixableAction->setEnabled(true); + m_ui->m_optimizationAction->setEnabled(true); m_ui->m_signMessageAction->setEnabled(true); m_ui->m_verifySignedMessageAction->setEnabled(true); if(WalletAdapter::instance().isDeterministic()) { @@ -980,6 +993,7 @@ void MainWindow::walletClosed() { m_ui->m_resetAction->setEnabled(false); m_ui->m_showMnemonicSeedAction->setEnabled(false); m_ui->m_sweepUnmixableAction->setEnabled(false); + m_ui->m_optimizationAction->setEnabled(false); m_ui->m_signMessageAction->setEnabled(false); m_ui->m_verifySignedMessageAction->setEnabled(false); m_ui->m_overviewFrame->hide(); diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index 81da325fa..8a3582200 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -15,8 +15,10 @@ #include #include "CommandLineParser.h" #include "PaymentServer.h" +#include "OptimizationManager.h" class QActionGroup; +class OptimizationManager; namespace Ui { class MainWindow; @@ -49,6 +51,7 @@ private slots: private: PaymentServer* paymentServer; + OptimizationManager* optimizationManager; QScopedPointer m_ui; QPushButton* m_connectionStateIconLabel; @@ -117,6 +120,7 @@ private slots: Q_SLOT void showPrivateKeys(); Q_SLOT void DisplayCmdLineHelp(); Q_SLOT void openConnectionSettings(); + Q_SLOT void openOptimizationSettings(); Q_SLOT void exportTrackingKey(); Q_SLOT void importTrackingKey(); Q_SLOT void signMessage(); diff --git a/src/gui/OptimizationSettings.cpp b/src/gui/OptimizationSettings.cpp new file mode 100644 index 000000000..d65f2f036 --- /dev/null +++ b/src/gui/OptimizationSettings.cpp @@ -0,0 +1,138 @@ +// Copyright (c) 2018 The Karbowanec developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include + +#include "ui_optimizationsettingsdialog.h" +#include "OptimizationSettings.h" +#include "CurrencyAdapter.h" +#include "WalletAdapter.h" +#include "MainWindow.h" +#include "Settings.h" + +namespace Ui { +class OptimizationSettingsDialog; +} + +namespace WalletGui { + +namespace { + +const int MIN_THRESHOLD_ORDER_VALUE = 0; +const int MAX_THRESHOLD_ORDER_VALUE = 4; +const int MIN_MIXIN_VALUE = 0; +const int MAX_MIXIN_VALUE = 5; +const quint64 MINUTE_MSECS = 1000 * 60; +const quint64 HOUR_MSECS = MINUTE_MSECS * 60; + +} + +OptimizationSettingsDialog::OptimizationSettingsDialog(QWidget* _parent) : QDialog(_parent), + m_ui(new Ui::OptimizationSettingsDialog) { + m_ui->setupUi(this); + m_ui->m_thresholdSlider->setRange(MIN_THRESHOLD_ORDER_VALUE, MAX_THRESHOLD_ORDER_VALUE); + m_ui->m_mixinSpin->setRange(MIN_MIXIN_VALUE, MAX_MIXIN_VALUE); + m_ui->m_mixinSlider->setRange(MIN_MIXIN_VALUE, MAX_MIXIN_VALUE); + initOptimizationPeriods(); + m_currencyMultiplier = CurrencyAdapter::instance().parseAmount("1"); + initThresholdCombo(); + load(); +} + +OptimizationSettingsDialog::~OptimizationSettingsDialog() { +} + +void OptimizationSettingsDialog::load() { + m_ui->m_enableOptimizationCheck->setChecked(Settings::instance().isOptimizationEnabled()); + m_ui->m_optimizationTimeCheck->setChecked(Settings::instance().isOptimizationTimeSetManually()); + m_ui->m_startTimeEdit->setTime(Settings::instance().getOptimizationStartTime()); + m_ui->m_stopTimeEdit->setTime(Settings::instance().getOptimizationStopTime()); + int index = m_ui->m_periodCombo->findData(Settings::instance().getOptimizationInterval()); + if (index == -1) { + Settings::instance().setOptimizationInterval(1000 * 60 * 30); + } + + m_ui->m_periodCombo->setCurrentIndex(m_ui->m_periodCombo->findData(Settings::instance().getOptimizationInterval())); + quint64 coinCount = Settings::instance().getOptimizationThreshold() / m_currencyMultiplier; + m_ui->m_thresholdSlider->setValue(std::log10(coinCount)); + m_ui->m_mixinSlider->setValue(Settings::instance().getOptimizationMixin()); + updateEstimateValue(); +} + +void OptimizationSettingsDialog::save() { + Settings::instance().setOptimizationEnabled(m_ui->m_enableOptimizationCheck->isChecked()); + Settings::instance().setOptimizationTimeSetManually(m_ui->m_optimizationTimeCheck->isChecked()); + Settings::instance().setOptimizationStartTime(m_ui->m_startTimeEdit->time()); + Settings::instance().setOptimizationStopTime(m_ui->m_stopTimeEdit->time()); + Settings::instance().setOptimizationInterval(m_ui->m_periodCombo->currentData().value()); + Settings::instance().setOptimizationThreshold(qPow(10, m_ui->m_thresholdSlider->value()) * m_currencyMultiplier); + Settings::instance().setOptimizationMixin(m_ui->m_mixinSlider->value()); + + accept(); +} + +void OptimizationSettingsDialog::initOptimizationPeriods() { + m_ui->m_periodCombo->addItem(tr("30 minutes"), 30 * MINUTE_MSECS); + m_ui->m_periodCombo->addItem(tr("1 hour"), HOUR_MSECS); + m_ui->m_periodCombo->addItem(tr("1.5 hours"), HOUR_MSECS + 30 * MINUTE_MSECS); + m_ui->m_periodCombo->addItem(tr("2 hours"), 2 * HOUR_MSECS); + m_ui->m_periodCombo->addItem(tr("2.5 hours"), 2 * HOUR_MSECS + 30 * MINUTE_MSECS); + m_ui->m_periodCombo->addItem(tr("3 hours"), 3 * HOUR_MSECS); + m_ui->m_periodCombo->addItem(tr("3.5 hours"), 3 * HOUR_MSECS + 30 * MINUTE_MSECS); + m_ui->m_periodCombo->addItem(tr("4 hours"), 4 * HOUR_MSECS); + m_ui->m_periodCombo->addItem(tr("4.5 hours"), 4 * HOUR_MSECS + 30 * MINUTE_MSECS); + m_ui->m_periodCombo->addItem(tr("5 hours"), 5 * HOUR_MSECS); + m_ui->m_periodCombo->addItem(tr("5.5 hours"), 5 * HOUR_MSECS + 30 * MINUTE_MSECS); + m_ui->m_periodCombo->addItem(tr("6 hours"), 6 * HOUR_MSECS); +} + +void OptimizationSettingsDialog::initThresholdCombo() { + for (int i = MIN_THRESHOLD_ORDER_VALUE; i <= MAX_THRESHOLD_ORDER_VALUE; ++i) { + int value = qPow(10, i); + m_ui->m_thresholdCombo->addItem(QString("%1 %2").arg(value).arg(CurrencyAdapter::instance().getCurrencyTicker().toUpper()), i); + } +} + +void OptimizationSettingsDialog::updateEstimateValue() { + quintptr estimate = 0; + if (WalletAdapter::instance().isOpen()) { + estimate = WalletAdapter::instance().estimateFusion(qPow(10, m_ui->m_thresholdSlider->value()) * m_currencyMultiplier); + if (estimate == 0) { + m_ui->m_nonOptimizedOutputsLabel->hide(); + m_ui->m_nonOptimizedOutputsTextLabel->setText(tr("Wallet is currently optimized for this target")); + } else { + m_ui->m_nonOptimizedOutputsLabel->show(); + m_ui->m_nonOptimizedOutputsLabel->setText(QString::number(estimate)); + m_ui->m_nonOptimizedOutputsTextLabel->setText(tr(" outputs below selected target")); + } + } else { + m_ui->m_nonOptimizedOutputsLabel->hide(); + m_ui->m_nonOptimizedOutputsTextLabel->setText(tr("Wallet is closed")); + } +} + +void OptimizationSettingsDialog::thresholdChanged(int _value) { + if (m_ui->m_thresholdCombo->currentIndex() != _value) { + m_ui->m_thresholdCombo->setCurrentIndex(_value); + } + + if (m_ui->m_thresholdSlider->value() != _value) { + m_ui->m_thresholdSlider->setValue(_value); + } + + updateEstimateValue(); +} + +void OptimizationSettingsDialog::mixinChanged(int _mixin) { + if (m_ui->m_mixinSlider->value() != _mixin) { + m_ui->m_mixinSlider->setValue(_mixin); + } + + if (m_ui->m_mixinSpin->value() != _mixin) { + m_ui->m_mixinSpin->setValue(_mixin); + } +} + +} + diff --git a/src/gui/OptimizationSettings.h b/src/gui/OptimizationSettings.h new file mode 100644 index 000000000..16fa69261 --- /dev/null +++ b/src/gui/OptimizationSettings.h @@ -0,0 +1,43 @@ +// Copyright (c) 2018 The Karbowanec developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#pragma once + +#include + +namespace Ui { +class OptimizationSettingsDialog; +} + +namespace WalletGui { + +//class NodeModel; + +class OptimizationSettingsDialog : public QDialog { + Q_OBJECT + Q_DISABLE_COPY(OptimizationSettingsDialog) + +public: + OptimizationSettingsDialog(QWidget* _parent); + ~OptimizationSettingsDialog(); + + void load(); + +private: + QScopedPointer m_ui; + + quint64 m_currencyMultiplier; + + void initOptimizationPeriods(); + void initThresholdCombo(); + void updateEstimateValue(); + + Q_SLOT void thresholdChanged(int _value); + Q_SLOT void mixinChanged(int _mixin); + Q_SLOT void save(); + +}; + +} + diff --git a/src/gui/ui/mainwindow.ui b/src/gui/ui/mainwindow.ui index dc0320c97..5b834d376 100644 --- a/src/gui/ui/mainwindow.ui +++ b/src/gui/ui/mainwindow.ui @@ -230,6 +230,7 @@ + @@ -609,6 +610,11 @@ Verify signed message + + + Optimization + + @@ -1154,6 +1160,22 @@ + + m_optimizationAction + triggered() + MainWindow + openOptimizationSettings() + + + -1 + -1 + + + 489 + 274 + + + createWallet() @@ -1169,6 +1191,7 @@ resetWallet() showPrivateKeys() openConnectionSettings() + openOptimizationSettings() showStatusInfo() sweepUnmixable() diff --git a/src/gui/ui/optimizationsettingsdialog.ui b/src/gui/ui/optimizationsettingsdialog.ui new file mode 100644 index 000000000..e115abd2c --- /dev/null +++ b/src/gui/ui/optimizationsettingsdialog.ui @@ -0,0 +1,649 @@ + + + OptimizationSettingsDialog + + + Qt::ApplicationModal + + + + 0 + 0 + 757 + 516 + + + + Wallet optimization settings + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + Run background wallet optimization + + + + + + + (Recommended) + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 40 + + + + + + + + true + + + + 75 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + false + + + + 0 + + + 0 + + + 0 + + + 0 + + + 5 + + + + + Optimization target + + + 0 + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + 6 + + + 1 + + + Qt::Horizontal + + + + + + + + + + Qt::Horizontal + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 15 + + + + + + + + QAbstractSpinBox::UpDownArrows + + + + + + + Anonymity level + + + 0 + + + + + + + 1 + + + Qt::Horizontal + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 0 + + + + + + + + + + 0 + + + + + + + outputs below selected target + + + + + + + + + + + + 10 + + + 0 + + + 0 + + + + + false + + + + 0 + + + 0 + + + 0 + + + 0 + + + 5 + + + + + From + + + + + + + + + + false + + + HH:mm + + + + + + + To + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 0 + + + + + + + + Send optimization transactions each + + + 0 + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 0 + + + + + + + + false + + + HH:mm + + + + + + + Qt::Horizontal + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 10 + + + + + + + + Specific time for optimization transactions + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 10 + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 40 + + + + + + + + Wallet optimization is a background task performed in order to aggregate transactions outputs that are below optimization target into bigger ones. It allows to send larger amounts of KRB within one transaction. Wallet optimization is free for all users but takes some time. + + + true + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Cancel + + + + + + + Save + + + true + + + + + + + + + + + optimizationCancelButton + clicked() + OptimizationSettingsDialog + reject() + + + 549 + 259 + + + 338 + 140 + + + + + optimizationSaveButton + clicked() + OptimizationSettingsDialog + save() + + + 630 + 259 + + + 338 + 140 + + + + + m_enableOptimizationCheck + toggled(bool) + widget1 + setEnabled(bool) + + + 147 + 47 + + + 176 + 204 + + + + + m_optimizationTimeCheck + toggled(bool) + m_startTimeEdit + setEnabled(bool) + + + 543 + 179 + + + 501 + 207 + + + + + m_optimizationTimeCheck + toggled(bool) + m_stopTimeEdit + setEnabled(bool) + + + 543 + 179 + + + 643 + 207 + + + + + m_enableOptimizationCheck + toggled(bool) + widget2 + setEnabled(bool) + + + 158 + 48 + + + 556 + 197 + + + + + m_thresholdSlider + valueChanged(int) + OptimizationSettingsDialog + thresholdChanged(int) + + + 116 + 139 + + + 355 + 194 + + + + + m_mixinSlider + valueChanged(int) + OptimizationSettingsDialog + mixinChanged(int) + + + 116 + 240 + + + 367 + 236 + + + + + + thresholdChanged(int) + mixinChanged(int) + save() + + diff --git a/src/gui/ui/sendframe.ui b/src/gui/ui/sendframe.ui index dce1624c3..d8c4a4195 100644 --- a/src/gui/ui/sendframe.ui +++ b/src/gui/ui/sendframe.ui @@ -205,7 +205,7 @@ - 2 + 0 19 diff --git a/src/languages/ar.qm b/src/languages/ar.qm index fb1e5c62c..59d0645d4 100644 Binary files a/src/languages/ar.qm and b/src/languages/ar.qm differ diff --git a/src/languages/ar.ts b/src/languages/ar.ts index 45e0b710f..b032f5c35 100644 --- a/src/languages/ar.ts +++ b/src/languages/ar.ts @@ -551,7 +551,7 @@ Please wait... - + Recent wallets المحافظ الأخيرة @@ -561,134 +561,139 @@ Please wait... الإعدادات - - + + Help مساعدة - + Wallet محفظة - + toolBar شريط الأدوات - + Account toolbar شريط أدوات الحساب - + Overview لمحة عامة - + Send إرسال - + Receive استلام - + Transactions المعاملات - + Exit خروج - + Ctrl+Q كونترول + Q - + Contacts جهات الاتصال - + Create wallet إنشاء محفظة - + Open wallet فتح محفظة - + Encrypt wallet تشفير المحفظة - - + + Change password تغيير كلمة المرور - + About حول - + About Qt حول Qt - + Backup wallet نسخ المحفظة - + Start on system login البدء بتسجيل الدخول إلى النظام - + Minimize to tray تصغير إلى شريط الأدوات - + Close to tray بالقرب من شريط الأدوات - + Import private key استيراد المفتاح الخاص - + Sign message - + العنوان - + Verify signed message + + + Optimization + الاقوي + Mining تعدين - - + + Reset wallet إعادة تعيين المحفظة @@ -702,62 +707,62 @@ Please wait... تغيير اللغة - + Export private key تصدير المفتاح الخاص - + F1 F1 - + Connection اتصال - + Open payment request فتح طلب الدفع - + Export tracking key تصدير مفتاح التتبع - + Import tracking key استيراد مفتاح التتبع - + Close wallet إغلاق المحفظة - + Information معلومات - + Open log file فتح ملف السجل - + Show mnemonic seed عرض كلمة استرجاع المحفظة - + Restore from mnemonic seed استعاد ة من كلمة استرجاع المحفظة - + Create nondeterministic wallet إنشاء نظام عدم اشتقاق مفاتيح @@ -766,7 +771,7 @@ Please wait... بدء التعدين الجماعي تلقائياً - + Sweep unmixable زر الدفعات القديمة @@ -1003,6 +1008,85 @@ Please wait... موافق + + OptimizationSettingsDialog + + + Wallet optimization settings + إعدادات تحسين المحفظة + + + + Run background wallet optimization + تشغيل الخلفية المحفظة الأمثل + + + + (Recommended) + (موصى به) + + + + Optimization target + هدف التحسين + + + + Anonymity level + مستوى سرية الهوية + + + + 0 + 0 + + + + outputs below selected target + النواتج دون الهدف المحدد + + + + From + من + + + + + HH:mm + + + + + To + إلى + + + + Specific time for optimization transactions + الوقت المحدد لمعاملات التحسين + + + + Wallet optimization is a background task performed in order to aggregate transactions outputs that are below optimization target into bigger ones. It allows to send larger amounts of KRB within one transaction. Wallet optimization is free for all users but takes some time. + + + + + Send optimization transactions each + إرسال المعاملات الأمثل لكل منهما + + + + Cancel + + + + + Save + حفظ + + OverviewFrame @@ -1117,7 +1201,7 @@ Please wait... QObject - + Help مساعدة @@ -1404,7 +1488,7 @@ Do you want to go to download page? Sign message - + العنوان @@ -1873,113 +1957,113 @@ Do you want to go to download page? WalletGui::MainWindow - + Show or hide the main window عرض أو إخفاء النافذة الرئيسية - - + + New wallet file ملف محفظة جديد - - - + + + Wallets (*.wallet) المحافظ (*. wallet) - + Open .wallet/.keys file فتح ملف .wallet/.keys - + Wallet (*.wallet *.keys) المحفظة (* .wallet * .keys) - + Wrong wallet file extension امتداد ملف محفظة خاطئ - + Wrong wallet file extension, wallet file should have ".wallet", ".keys" or ".trackingwallet" extension. - + Wallet keys are not valid مفاتيح المحفظة غير صحيحة - + The private keys you entered are not valid. المفاتيح الخاصة التي أدخلتها غير صالحة. - + Tracking key is not valid مفتاح التتبع غير صالح - + The tracking key you entered is not valid. مفتاح التتبع الذي أدخلته غير صالح. - - - - + + + + Key is not valid المفتاح غير صالح. - + The public spend key you entered is not valid. مفتاح الإنفاق العام الذي أدخلته غير صالح. - + The public view key you entered is not valid. مفتاح العرض العام الذي أدخلته غير صالح. - + The private spend key you entered is not valid. مفتاح الإنفاق الخاص الذي أدخلته غير صالح. - + The private view key you entered is not valid. مفتاح العرض الخاص الذي أدخلته غير صالح. - + Mnemonic seed is not correct كلمة استرجاع المحفظة غير صحيحة - + There must be an error in mnemonic seed. Make sure you entered it correctly. لابد أن هناك خطأ في كلمة استرجاع المحفظة. تأكد من إدخالها بشكل صحيح. - + Language changed to %1 %1 تم تغيير اللغة - + Language was changed تم تغيير اللغة - + Language changed to %1. The change will take effect after restarting the wallet. @@ -1988,58 +2072,58 @@ Do you want to go to download page? سيتم تغيير اللغة بعد إعادة تشغيل المحفظة. - + More info can be found at www.karbowanec.com in Documentation section يمكن العثور على مزيد من المعلومات على www.karbowanec.com في قسم الوثائق. - + Connection settings changed تم تغيير إعدادات الاتصال - + Connection mode will be changed after restarting the wallet. سيتم تغيير وضع الاتصال بعد إعادة تشغيل المحفظة. - + Backup wallet to... حفظ المحفظة في... - + Warning تحذير - + Your wallet will be reset and restored from blockchain. Are you sure? سيتم إعادة تعيين محفظتك، واستعادتها من البلوكتشين. هل أنت متأكد من ذلك؟ - + Wallet error خطأ في المحفظة - + Wallet المحفظة - + Encrypted مشفر - + Not encrypted غير مشفر - + %n active connection(s) ٪ n اتصال نشط @@ -2051,43 +2135,43 @@ Are you sure? - + Synchronization in progress التزامن جارٍ - + Not synchronized غير متزامن - + Synchronized متزامن - - + + Karbo Wallet %1 محفظة 1% Karbo - + About %1 Wallet تقريباً محفظة 1% - + Tracking wallet. Spending unawailable تتبع المحفظة. الإنفاق غير متوفر - + Connected through remote node متصل من خلال وحدة بعيدة - + &Show / Hide عرض / إخفاء @@ -2135,6 +2219,84 @@ Are you sure? رباط الوحدة + + WalletGui::OptimizationSettingsDialog + + + 30 minutes + 30 دقيقة + + + + 1 hour + ساعة واحدة + + + + 1.5 hours + 1.5 ساعة + + + + 2 hours + 2 ساعة + + + + 2.5 hours + 2.5 ساعة + + + + 3 hours + 3 ساعات + + + + 3.5 hours + 3.5 ساعة + + + + 4 hours + 4 ساعات + + + + 4.5 hours + 4.5 ساعة + + + + 5 hours + 5 ساعات + + + + 5.5 hours + 5.5 ساعة + + + + 6 hours + 6 ساعات + + + + Wallet is currently optimized for this target + المحفظة محسنة حاليًا لهذا الهدف + + + + outputs below selected target + النواتج دون الهدف المحدد + + + + Wallet is closed + المحفظة مغلقة + + WalletGui::PoolModel @@ -2593,183 +2755,188 @@ when the wallet is synchronized مسح القيمة الكسرية غير قابلة للمزج - - + + Optimizing wallet + + + + + Ready جاهز - + Synchronizing مزامنة - + Object was not initialized لم يتم تهيئة العنصر - + The password is wrong كلمة المرور خاطئة - + The object is already initialized تمت تهيئة العنصر من قبل - + Internal error occurred حدث خطأ داخلي - + MixIn count is too big عدد التوقيعات كبير جداً - + Bad address عنوان غير صالح - + Transaction size is too big حجم المعاملة كبير جداً - + Wrong amount مبلغ خاطئ - + Sum overflow تجاوز الحد المطلوب - + The destination is empty الوجهة فارغة - + Impossible to cancel transaction لا يمكن إلغاء المعاملة - + The wallet is in wrong state (maybe loading or saving), try again later المحفظة في حالة خطأ (ربما التحميل أو الحفظ)، حاول مرة أخرى لاحقًا. - + The operation you've requested has been cancelled لقد تم إلغاء العملية التي طلبتها. - + Transaction transfer impossible لا يمكن تحويل المعاملة. - + Wrong version إصدار خاطئ - + Transaction fee is too small رسوم المعاملة صغيرة جداً. - + Cannot generate new key لا يمكن إنشاء مفتاح جديد - + Index is out of range الفهرس خارج النطاق - + Address already exists العنوان موجود بالفعل - + The wallet is in tracking mode المحفظة في وضع التتبع - + Wrong parameters passed معلمات خاطئة - + Object not found العنصر غير موجود - + Requested wallet not found المحفظة المطلوبة غير موجودة - + Change address required تغيير العنوان مطلوب - + Change address not found تغيير العنوان غير موجود - + Destination address required عنوان الوجهة مطلوب - + Destination address not found عنوان الوجهة غير موجود - + Wrong payment id format صيغة رقم الدفع خاطئة - + Wrong transaction extra format صيغة المعاملة الإضافية خاطئة - + Unknown error خطأ غير معروف - + Warning: last block was received %1 hours %2 minutes ago تحذير: تم استلام آخر بلوك قبل 1% ساعة٪ 2% دقيقة. - + Wallet synchronized. Height: %1 | Time (UTC): %2%3 المحفظة متزامنة. الارتفاع:٪ :%1 | الوقت (UTC): %2%3 - + Mnemonic seed is not correct كلمة استرجاع المحفظة غير صحيحة - + There must be an error in mnemonic seed. Make sure you entered it correctly. لابد أن هناك خطأ في كلمة استرجاع المحفظة. تأكد من إدخالها بشكل صحيح. diff --git a/src/languages/be.qm b/src/languages/be.qm index db0230d31..41a09de9f 100644 Binary files a/src/languages/be.qm and b/src/languages/be.qm differ diff --git a/src/languages/be.ts b/src/languages/be.ts index 9115e9b3d..1316a7275 100644 --- a/src/languages/be.ts +++ b/src/languages/be.ts @@ -648,6 +648,10 @@ Please wait... Verify signed message Праверка падпісанага паведамленні + + Optimization + Аптымізацыя + MiningFrame @@ -861,6 +865,69 @@ Please wait... Добра + + OptimizationSettingsDialog + + Wallet optimization settings + Налады аптымізацыі гаманца + + + Run background wallet optimization + Выканаць аптымізацыю гаманца ў фонавым рэжыме + + + (Recommended) + (Рэкамендуецца) + + + Optimization target + Мэта аптымізацыі + + + Anonymity level + Узровень прыватнасці + + + 0 + 0 + + + outputs below selected target + выхадаў ніжэй абранай мэты + + + From + Ад + + + HH:mm + + + + To + да + + + Specific time for optimization transactions + Канкрэтны час для аптымізацыі + + + Send optimization transactions each + Адпраўляць аптымізацыйныя транзакцыйі са кожную + + + Cancel + Адмяніць + + + Save + Захаваць + + + Wallet optimization is a background task performed in order to aggregate transactions outputs that are below optimization target into bigger ones. It allows to send larger amounts of KRB within one transaction. Wallet optimization is free for all users but takes some time. + + + OverviewFrame @@ -1865,6 +1932,69 @@ Are you sure? Адрас узла + + WalletGui::OptimizationSettingsDialog + + 30 minutes + 30 хвілін + + + 1 hour + 1 гадз. + + + 1.5 hours + 1,5 гадз. + + + 2 hours + 2 гадз. + + + 2.5 hours + 2,5 гадз. + + + 3 hours + 3 гадз. + + + 3.5 hours + 3,5 гадз. + + + 4 hours + 4 гадз. + + + 4.5 hours + 4,5 гадз. + + + 5 hours + 5 гадз. + + + 5.5 hours + 5,5 гадз. + + + 6 hours + 6 гадз. + + + Wallet is currently optimized for this target + Гаманец у цяперашні час аптымізаваны для гэтай мэты + + + outputs below selected target + выхадаў ніжэй абранай мэты + + + Wallet is closed + Гаманец зачынены + + WalletGui::PoolModel @@ -2401,5 +2531,9 @@ when the wallet is synchronized Sweeping unmixable dust Аптымізацыя несмешываемых выхадаў + + Optimizing wallet + Аптымізацыя гаманца + diff --git a/src/languages/de.qm b/src/languages/de.qm index 39ae5c1cd..ca7cc644f 100644 Binary files a/src/languages/de.qm and b/src/languages/de.qm differ diff --git a/src/languages/de.ts b/src/languages/de.ts index aae1d3979..408871e45 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -649,6 +649,10 @@ Bitte warten... Verify signed message Überprüfen Sie die signierte Nachricht + + Optimization + Optimierung + MiningFrame @@ -866,6 +870,69 @@ Bitte warten... OK + + OptimizationSettingsDialog + + Wallet optimization settings + Wallet-Optimierungseinstellungen + + + Run background wallet optimization + Führen Hintergrund Optimierung der Brieftasche + + + (Recommended) + (Empfohlen) + + + Optimization target + Optimierungsziel + + + Anonymity level + Anonymitätsebene + + + 0 + 0 + + + outputs below selected target + Ausgänge liegen unter dem ausgewählten Ziel + + + From + Von + + + HH:mm + + + + To + an + + + Specific time for optimization transactions + Spezifische Zeit für die Optimierung + + + Send optimization transactions each + Sende Optimierungstransaktionen jede + + + Cancel + Abbrechen + + + Save + Speichern + + + Wallet optimization is a background task performed in order to aggregate transactions outputs that are below optimization target into bigger ones. It allows to send larger amounts of KRB within one transaction. Wallet optimization is free for all users but takes some time. + + + OverviewFrame @@ -1865,6 +1932,69 @@ Bist du sicher? Node URL + + WalletGui::OptimizationSettingsDialog + + 30 minutes + 30 Minuten + + + 1 hour + 1 Stunde + + + 1.5 hours + 1,5 Stunden + + + 2 hours + 2 Stunden + + + 2.5 hours + 2,5 Stunden + + + 3 hours + 3 Stunden + + + 3.5 hours + 3,5 Stunden + + + 4 hours + 4 Stunden + + + 4.5 hours + 4,5 Stunden + + + 5 hours + 5 Stunden + + + 5.5 hours + 5,5 Stunden + + + 6 hours + 6 Stunden + + + Wallet is currently optimized for this target + Die Brieftasche ist derzeit für dieses Ziel optimiert + + + outputs below selected target + Ausgänge liegen unter dem ausgewählten Ziel + + + Wallet is closed + Brieftasche ist geschlossen + + WalletGui::PoolModel @@ -2400,5 +2530,9 @@ Kann keinen neuen Schlüssel generieren Sweeping unmixable dust Unvermischbaren Staub ausstreichen + + Optimizing wallet + Optimierung der Brieftasche + diff --git a/src/languages/es.qm b/src/languages/es.qm index 58fa70085..f3a58b2d5 100644 Binary files a/src/languages/es.qm and b/src/languages/es.qm differ diff --git a/src/languages/es.ts b/src/languages/es.ts index d78c7c684..83f45051c 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -650,6 +650,10 @@ Por favor, espera... Verify signed message Verificar mensaje firmado + + Optimization + Optimización + MiningFrame @@ -869,6 +873,69 @@ Por favor, espera... OK + + OptimizationSettingsDialog + + Wallet optimization settings + Configuración de optimización de cartera + + + Run background wallet optimization + Ejecutar la optimización de la cartera en el fondo + + + (Recommended) + (Recomendado) + + + Optimization target + Objetivo de optimización + + + Anonymity level + Nivel de anonimato + + + 0 + 0 + + + outputs below selected target + salidas están por debajo del objetivo seleccionado + + + From + De + + + HH:mm + + + + To + a + + + Specific time for optimization transactions + Tiempo específico para la optimización + + + Send optimization transactions each + Enviar transacciones de optimización cada + + + Cancel + Cancelar + + + Save + Guardar + + + Wallet optimization is a background task performed in order to aggregate transactions outputs that are below optimization target into bigger ones. It allows to send larger amounts of KRB within one transaction. Wallet optimization is free for all users but takes some time. + + + OverviewFrame @@ -1861,6 +1928,69 @@ Are you sure? Nodo URL + + WalletGui::OptimizationSettingsDialog + + 30 minutes + 30 minutos + + + 1 hour + 1 hora + + + 1.5 hours + 1,5 horas + + + 2 hours + 2 horas + + + 2.5 hours + 2,5 horas + + + 3 hours + 3 horas + + + 3.5 hours + 3,5 horas + + + 4 hours + 4 horas + + + 4.5 hours + 4,5 horas + + + 5 hours + 5 horas + + + 5.5 hours + 5,5 horas + + + 6 hours + 6 horas + + + Wallet is currently optimized for this target + La cartera está actualmente optimizada para este objetivo + + + outputs below selected target + salidas están por debajo del objetivo seleccionado + + + Wallet is closed + La cartera esta cerrada + + WalletGui::PoolModel @@ -2393,5 +2523,9 @@ cuando la cartera termine de sincronizar Sweeping unmixable dust Barrer inigualable + + Optimizing wallet + La optimización de la cartera + diff --git a/src/languages/fa.qm b/src/languages/fa.qm index 0918bece6..e2443e5fc 100644 Binary files a/src/languages/fa.qm and b/src/languages/fa.qm differ diff --git a/src/languages/fa.ts b/src/languages/fa.ts index bb697ce24..20c5d06da 100644 --- a/src/languages/fa.ts +++ b/src/languages/fa.ts @@ -1,6 +1,6 @@ - + AboutDialog @@ -221,10 +221,6 @@ Cancel لغو - - Confirm sending %1 KRB - تایید ارسال %1 KRB - ConnectionSettingsDialog @@ -648,6 +644,10 @@ Please wait... Verify signed message تایید امضا پیام + + Optimization + بهينه سازي + MiningFrame @@ -716,7 +716,7 @@ Please wait... MnemonicSeedDialog Mnemonic seed - کدهای پشتیبان مهم + کدهای پشتیبان مهم Close @@ -865,6 +865,69 @@ Please wait... تایید + + OptimizationSettingsDialog + + Wallet optimization settings + تنظیمات بهینه سازی کیف پول + + + Run background wallet optimization + اجرای پسزمینه کیف پول را انجام دهید + + + (Recommended) + (توصیه شده) + + + Optimization target + هدف بهینه سازی + + + Anonymity level + میزان ناشناس بودن + + + 0 + 0 + + + outputs below selected target + خروجی زیر هدف انتخاب شده + + + From + از طرف + + + HH:mm + + + + To + + + + Specific time for optimization transactions + زمان خاص برای معاملات بهینه سازی + + + Send optimization transactions each + ارسال هر یک از معاملات بهینه سازی + + + Cancel + لغو + + + Save + ذخیره + + + Wallet optimization is a background task performed in order to aggregate transactions outputs that are below optimization target into bigger ones. It allows to send larger amounts of KRB within one transaction. Wallet optimization is free for all users but takes some time. + + + OverviewFrame @@ -1555,6 +1618,10 @@ Do you want to go to download page? <html><head/><body><p>Are you sure you want to send <strong>without Payment ID</strong>?</p></body></html> <html><head/><body><p>آیا مطمینید که میخواهید <strong>sin کربو را بدون شناسه واریز ارسال کنید</strong>?</p></body></html> + + Confirm sending %1 KRB + تایید ارسال %1 KRB + WalletGui::ExportTrackingKeyDialog @@ -1852,6 +1919,69 @@ Are you sure? Node URL + + WalletGui::OptimizationSettingsDialog + + 30 minutes + 30 دقیقه + + + 1 hour + 1 ساعت + + + 1.5 hours + 1.5 ساعت + + + 2 hours + 2 ساعت + + + 2.5 hours + 2.5 ساعت + + + 3 hours + 3 ساعت + + + 3.5 hours + 3.5 ساعت + + + 4 hours + 4 ساعت + + + 4.5 hours + 4.5 ساعت + + + 5 hours + 5 ساعت + + + 5.5 hours + 5.5 ساعت + + + 6 hours + 6 ساعت + + + Wallet is currently optimized for this target + کیف پول در حال حاضر برای این هدف بهینه شده است + + + outputs below selected target + خروجی زیر هدف انتخاب شده + + + Wallet is closed + کیف پول بسته است + + WalletGui::PoolModel @@ -2017,7 +2147,6 @@ when the wallet is synchronized %n confirmation(s) %n confirmacion - %n تاییدیه @@ -2379,5 +2508,9 @@ when the wallet is synchronized Sweeping unmixable dust پاکسازی میزان غیرقابل ارسال + + Optimizing wallet + + diff --git a/src/languages/fr.qm b/src/languages/fr.qm index 070d9e9c9..c8ffa25b6 100644 Binary files a/src/languages/fr.qm and b/src/languages/fr.qm differ diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 100c69028..61cf5dfcd 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -664,6 +664,10 @@ S'il vous plaît, patientez... Verify signed message Vérifier le message signé + + Optimization + Optimisation + MiningFrame @@ -881,6 +885,69 @@ S'il vous plaît, patientez... OK + + OptimizationSettingsDialog + + Wallet optimization settings + Paramètres d'optimisation du portefeuille + + + Run background wallet optimization + Exécuter l'optimisation de l'arrière-plan du portefeuille + + + (Recommended) + (Conseillé) + + + Optimization target + Cible d'optimisation + + + Anonymity level + Niveau d'anonymat + + + 0 + 0 + + + outputs below selected target + sorties sont en dessous de la cible sélectionnée + + + From + De + + + HH:mm + + + + To + à + + + Specific time for optimization transactions + Heure spécifique pour l'optimisation + + + Send optimization transactions each + Envoyez des transactions d'optimisation toutes les + + + Cancel + Annuler + + + Save + Sauvegarder + + + Wallet optimization is a background task performed in order to aggregate transactions outputs that are below optimization target into bigger ones. It allows to send larger amounts of KRB within one transaction. Wallet optimization is free for all users but takes some time. + + + OverviewFrame @@ -1873,6 +1940,69 @@ Are you sure? URL du noeud + + WalletGui::OptimizationSettingsDialog + + 30 minutes + 30 minutes + + + 1 hour + 1 heure + + + 1.5 hours + 1,5 heure + + + 2 hours + 2 heures + + + 2.5 hours + 2,5 heures + + + 3 hours + 3 heures + + + 3.5 hours + 3,5 heures + + + 4 hours + 4 heures + + + 4.5 hours + 4,5 heures + + + 5 hours + 5 heures + + + 5.5 hours + 5,5 heures + + + 6 hours + 6 heures + + + Wallet is currently optimized for this target + Le portefeuille est actuellement optimisé pour cette cible + + + outputs below selected target + sorties sont en dessous de la cible sélectionnée + + + Wallet is closed + Le portefeuille est fermé + + WalletGui::PoolModel @@ -2404,5 +2534,9 @@ quand le portefeuille aura terminé la synchronisation Sweeping unmixable dust Balayer non mélangeable + + Optimizing wallet + Optimiser le portefeuille + diff --git a/src/languages/hi.qm b/src/languages/hi.qm index c0bcf3184..40b7f5a53 100644 Binary files a/src/languages/hi.qm and b/src/languages/hi.qm differ diff --git a/src/languages/hi.ts b/src/languages/hi.ts index 0650e44b0..1a75fd67f 100644 --- a/src/languages/hi.ts +++ b/src/languages/hi.ts @@ -536,7 +536,7 @@ Please wait... - + Recent wallets हाल के वॉलेट @@ -546,134 +546,139 @@ Please wait... सेटिंग्स - - + + Help सहायता - + Wallet वॉलेट - + toolBar टूलबार - + Account toolbar अकाउंट टूलबार - + Overview अवलोकन - + Send भेजें - + Receive प्राप्त करें - + Transactions लेनदेन - + Exit बाहर जाएँ - + Ctrl+Q Ctrl + Q - + Contacts संपर्क - + Create wallet वॉलेट बनाएँ - + Open wallet वॉलेट खोलें - + Encrypt wallet वॉलेट एन्क्रिप्ट करें - - + + Change password पासवर्ड बदलें - + About बारे में - + About Qt QT के बारे में - + Backup wallet बैकअप वॉलेट - + Start on system login सिस्टम लॉगिन पर शुरू करें - + Minimize to tray ट्रे में छोटा करें - + Close to tray ट्रे में बंद करें - + Import private key प्राइवेट की इम्पोर्ट करें - + Sign message - + Verify signed message + + + Optimization + + Mining माइनिंग - - + + Reset wallet वॉलेट रीसेट करें @@ -687,62 +692,62 @@ Please wait... भाषा बदलें - + Export private key प्राइवेट की एक्सपोर्ट करें - + F1 F1 - + Connection कनेक्शन - + Open payment request भुगतान रिक्वेस्ट खोलें - + Export tracking key ट्रैकिंग की एक्सपोर्ट करें - + Import tracking key ट्रैकिंग की इम्पोर्ट करें - + Close wallet वॉलेट बंद करें - + Information जानकारी - + Open log file लॉग फ़ाइल खोलें - + Show mnemonic seed म्नेमोनिक सीड दिखाएँ - + Restore from mnemonic seed म्नेमोनिक सीड से रिस्टोर करें - + Create nondeterministic wallet नोनडिटर्मिनिस्टिक वॉलेट बनायें @@ -751,7 +756,7 @@ Please wait... पूल माइनिंग स्वतः शुरू करें - + Sweep unmixable मिक्स नहीं होने वालों को स्वीप करें @@ -988,6 +993,85 @@ Please wait... + + OptimizationSettingsDialog + + + Wallet optimization settings + + + + + Run background wallet optimization + + + + + (Recommended) + + + + + Optimization target + + + + + Anonymity level + गुमनाम स्तर + + + + 0 + 0 + + + + outputs below selected target + + + + + From + से + + + + + HH:mm + + + + + To + + + + + Specific time for optimization transactions + + + + + Wallet optimization is a background task performed in order to aggregate transactions outputs that are below optimization target into bigger ones. It allows to send larger amounts of KRB within one transaction. Wallet optimization is free for all users but takes some time. + + + + + Send optimization transactions each + + + + + Cancel + रद्द करें + + + + Save + सेव करें + + OverviewFrame @@ -1098,7 +1182,7 @@ Please wait... QObject - + Help @@ -1845,118 +1929,118 @@ Do you want to go to download page? WalletGui::MainWindow - + &Show / Hide Show / Hide - + Show or hide the main window मुख्य विंडो दिखाएं या छुपाएं - - + + New wallet file नई वॉलेट फ़ाइल - - - + + + Wallets (*.wallet) वॉलेट (*.wallet) - + Open .wallet/.keys file .wallet/.keys फाइल खोलें - + Wallet (*.wallet *.keys) वॉलेट (*.wallet *.keys) - + Wrong wallet file extension गलत वॉलेट फ़ाइल एक्सटेंशन - + Wrong wallet file extension, wallet file should have ".wallet", ".keys" or ".trackingwallet" extension. - + Wallet keys are not valid वॉलेट की मान्य नहीं हैं - + The private keys you entered are not valid. आपके द्वारा दर्ज की गई प्राइवेट की मान्य नहीं हैं। - + Tracking key is not valid ट्रैकिंग की मान्य नहीं है - + The tracking key you entered is not valid. आपके द्वारा दर्ज की गई ट्रैकिंग की मान्य नहीं है। - - - - + + + + Key is not valid की मान्य नहीं है - + The public spend key you entered is not valid. आपके द्वारा दर्ज की गई पब्लिक स्पेंड की मान्य नहीं है। - + The public view key you entered is not valid. आपके द्वारा दर्ज की गई पब्लिक व्यू की मान्य नहीं है। - + The private spend key you entered is not valid. आपके द्वारा दर्ज की गई प्राइवेट स्पेंड की मान्य नहीं है। - + The private view key you entered is not valid. आपके द्वारा दर्ज की गई प्राइवेट व्यू की मान्य नहीं है। - + Mnemonic seed is not correct म्नेमोनिक सीड सही नहीं है - + There must be an error in mnemonic seed. Make sure you entered it correctly. म्नेमोनिक सीड में एक त्रुटि होनी चाहिए। सुनिश्चित करें कि आपने यह सही दर्ज की है। - + Language changed to %1 - + Language was changed भाषा बदल दी गई थी - + Language changed to %1. The change will take effect after restarting the wallet. @@ -1965,58 +2049,58 @@ Do you want to go to download page? वॉलेट को रीस्टार्ट करने के बाद भाषा बदल दी जाएगी। - + More info can be found at www.karbowanec.com in Documentation section डॉक्यूमेंटेशन अनुभाग में www.karbowanec.com पर अधिक जानकारी मिल सकती है - + Connection settings changed कनेक्शन सेटिंग्स बदल दी - + Connection mode will be changed after restarting the wallet. वॉलेट को रीस्टार्ट करने के बाद कनेक्शन मोड बदल दिया जाएगा। - + Backup wallet to... ... में वॉलेट का बैकअप - + Warning चेतावनी - + Your wallet will be reset and restored from blockchain. Are you sure? आपका वॉलेट ब्लॉकचेन से रीसेट और रिस्टोर किया जाएगा। क्या आपको चाहते हैं? - + Wallet error वॉलेट त्रुटि - + Wallet वॉलेट - + Encrypted एन्क्रिप्टेड - + Not encrypted एन्क्रिप्ट नहीं किया गया - + %n active connection(s) %n सक्रिय कनेक्शन @@ -2024,38 +2108,38 @@ Are you sure? - + Synchronization in progress प्रगति पर सिंक्रनाइज़ेशन - + Not synchronized सिंक्रोनाइज नहीं है - + Synchronized सिंक्रनाइज़ है - - + + Karbo Wallet %1 कार्बो वॉलेट %1 - + About %1 Wallet लगभग %1 वॉलेट - + Tracking wallet. Spending unawailable ट्रैकिंग वॉलेट। अनुपलब्ध खर्च करना - + Connected through remote node रिमोट नोड के माध्यम से कनेक्ट किया गया @@ -2103,6 +2187,84 @@ Are you sure? नोड URL + + WalletGui::OptimizationSettingsDialog + + + 30 minutes + + + + + 1 hour + + + + + 1.5 hours + + + + + 2 hours + + + + + 2.5 hours + + + + + 3 hours + + + + + 3.5 hours + + + + + 4 hours + + + + + 4.5 hours + + + + + 5 hours + + + + + 5.5 hours + + + + + 6 hours + + + + + Wallet is currently optimized for this target + + + + + outputs below selected target + + + + + Wallet is closed + + + WalletGui::PoolModel @@ -2550,183 +2712,188 @@ when the wallet is synchronized मिक्स नहीं होने वाला डस्ट साफ़ हो रहा है - - + + Optimizing wallet + + + + + Ready तैयार - + Synchronizing सिंक्रनाइज़ हो रहा है - + Object was not initialized वस्तु शुरू नहीं हुई थी - + The password is wrong पासवर्ड गलत है - + The object is already initialized वस्तु पहले ही शुरू हो चुकी है - + Internal error occurred आंतरिक त्रुटि हुई - + MixIn count is too big मिक्सलन संख्या बहुत बड़ी है - + Bad address गलत पता - + Transaction size is too big लेनदेन की साइज़ बहुत बड़ी है - + Wrong amount ग़लत राशि - + Sum overflow कुल ज्यादा है - + The destination is empty गंतव्य खाली है - + Impossible to cancel transaction लेनदेन रद्द करना असंभव है - + The wallet is in wrong state (maybe loading or saving), try again later वॉलेट गलत स्थिति में है (शायद लोड हो रहा है या सेव हो रहा है), बाद में पुनः प्रयास करें - + The operation you've requested has been cancelled आपके द्वारा अनुरोधित ऑपरेशन रद्द कर दिया गया है - + Transaction transfer impossible लेनदेन हस्तांतरण असंभव है - + Wrong version गलत वर्ज़न - + Transaction fee is too small लेनदेन शुल्क बहुत कम है - + Cannot generate new key नई की को बनाया नहीं जा सकता - + Index is out of range सूचकांक सीमा से बाहर है - + Address already exists पता पहले से मौजूद है - + The wallet is in tracking mode वॉलेट ट्रैकिंग मोड में है - + Wrong parameters passed गलत पैरामीटर पारित किया - + Object not found वस्तु नहीं मिली - + Requested wallet not found अनुरोधित वॉलेट नहीं मिला - + Change address required पता बदलने की आवश्यकता - + Change address not found पता बदलना नहीं मिला - + Destination address required गंतव्य पता आवश्यक है - + Destination address not found गंतव्य पता नहीं मिला - + Wrong payment id format गलत भुगतान आईडी प्रारूप - + Wrong transaction extra format गलत लेनदेन अतिरिक्त प्रारूप - + Unknown error अज्ञात त्रुटि - + Warning: last block was received %1 hours %2 minutes ago चेतावनी: अंतिम ब्लॉक %1 घंटे %2 मिनट पहले प्राप्त हुआ था - + Wallet synchronized. Height: %1 | Time (UTC): %2%3 वॉलेट सिंक्रनाइज़ किया गया। ऊंचाई: %1 | समय (UTC): %2%3 - + Mnemonic seed is not correct म्नेमोनिक सीड सही नहीं है - + There must be an error in mnemonic seed. Make sure you entered it correctly. म्नेमोनिक सीड में कोई त्रुटि है। सुनिश्चित करें कि आपने इसे सही तरीके से दर्ज किया है। diff --git a/src/languages/it.qm b/src/languages/it.qm index 6734cca77..e0b880109 100644 Binary files a/src/languages/it.qm and b/src/languages/it.qm differ diff --git a/src/languages/it.ts b/src/languages/it.ts index 249ecdbf5..9ead6b5ee 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -514,7 +514,7 @@ Attendere prego… - + Recent wallets Portafogli recenti @@ -524,130 +524,135 @@ Attendere prego… Impostazioni - - + + Help Aiuto - + Wallet Portafoglio - + toolBar - + Account toolbar Barra degli strumenti dell'account - + Overview Riepilogo - + Send Invia - + Receive Ricevi - + Transactions Transazioni - + Exit Esci - + Ctrl+Q - + Contacts Contatti - + Create wallet Crea un portafoglio - + Open wallet Apri il portafoglio - + Encrypt wallet Cripta il portafoglio - - + + Change password Cambia password - + About Informazioni - + About Qt Info su Qt - + Backup wallet Portafoglio di backup - + Start on system login Avvia il login di sistema - + Minimize to tray Riduci a icona nel vassoio - + Close to tray Chiudi nel vassoio - + Import private key Importa la chiave privata - + Sign message Firmare un messaggio - + Verify signed message Verifica messaggio firmato - - + + Optimization + Ottimizzazione + + + + Reset wallet Resetta il portafoglio @@ -657,62 +662,62 @@ Attendere prego… Lingua - + Export private key Esporta la chiave privata - + F1 - + Connection Connessione - + Open payment request Apri una richiesta di pagamento - + Export tracking key Esporta la chiave di tracking - + Import tracking key Importa la chiave di tracking - + Close wallet Chiudi il portafoglio - + Information Informazioni - + Open log file Apri il file di registro - + Show mnemonic seed Mostra il seed mnemonico - + Restore from mnemonic seed Ripristina dal seed mnemonico - + Create nondeterministic wallet Crea un portafoglio nondeterministico @@ -721,7 +726,7 @@ Attendere prego… Inizia il mining pool automaticamente - + Sweep unmixable Sweep unmixable @@ -970,6 +975,85 @@ Attendere prego… OK + + OptimizationSettingsDialog + + + Wallet optimization settings + Impostazioni di ottimizzazione del portafoglio + + + + Run background wallet optimization + Esegui l'ottimizzazione del portafoglio in background + + + + (Recommended) + (Consigliato) + + + + Optimization target + Obiettivo di ottimizzazione + + + + Anonymity level + Anonimato + + + + 0 + + + + + outputs below selected target + uscite sono sotto il obiettivo selezionato + + + + From + Da + + + + + HH:mm + + + + + To + a + + + + Specific time for optimization transactions + Tempo specifico per l'ottimizzazione + + + + Wallet optimization is a background task performed in order to aggregate transactions outputs that are below optimization target into bigger ones. It allows to send larger amounts of KRB within one transaction. Wallet optimization is free for all users but takes some time. + + + + + Send optimization transactions each + Invia transazioni di ottimizzazione ogni + + + + Cancel + Annulla + + + + Save + Salva + + OverviewFrame @@ -1080,7 +1164,7 @@ Attendere prego… QObject - + Help Aiuto @@ -1812,195 +1896,195 @@ Vuoi andare alla pagina dei download? WalletGui::MainWindow - - + + Karbo Wallet %1 Karbo Wallet %1 - + About %1 Wallet Informazioni su %1 Wallet - + Tracking wallet. Spending unawailable Portafoglio di tracking. Non è possibile spendere - + Connected through remote node Connesso tramite un nodo remoto - + &Show / Hide Mostra/Nascondi - + Show or hide the main window Mostra o nascondi la finestra principale - - + + New wallet file Nuovo file di portafoglio - - - + + + Wallets (*.wallet) Portafogli (*.wallet) - + Open .wallet/.keys file Apri file .wallet/.keys - + Wallet (*.wallet *.keys) Portafoglio (*.wallet *.keys) - + Wrong wallet file extension Estensione del file di portafoglio errata - + Wrong wallet file extension, wallet file should have ".wallet", ".keys" or ".trackingwallet" extension. - + Wallet keys are not valid Le chiavi di portafoglio non sono valide - + The private keys you entered are not valid. Le chiavi private che hai inserito non sono valide. - + Tracking key is not valid La chiave di tracking non è valida - + The tracking key you entered is not valid. La chiave di tracking che hai inserito non è valida. - - - - + + + + Key is not valid La chiave non è valida. - + The public spend key you entered is not valid. La chiave di spesa pubblica che hai inserito non è valida. - + The public view key you entered is not valid. La chiave di vista pubblica che hai inserito non è valida. - + The private spend key you entered is not valid. La chiave di spesa privata che hai inserito non è valida. - + The private view key you entered is not valid. La chiave di vista privata che hai inserito non è valida. - + Mnemonic seed is not correct Il seed mnemonico non è corretto - + There must be an error in mnemonic seed. Make sure you entered it correctly. Ci deve essere un errore nel seed mnemonico. Assicuratevi di averlo inserito correttamente. - + Language changed to %1 La lingua è stata modificata 1% - + Language was changed La lingua è stata modificata - + Language changed to %1. The change will take effect after restarting the wallet. La lingua è stata modificata in %1. La lingua sarà modificata dopo il riavvio del portafoglio. - + More info can be found at www.karbowanec.com in Documentation section Maggiori info si possono trovare su www.karbowanec.com nella sezione Documentazione - + Connection settings changed Impostazioni di connessione modificate - + Connection mode will be changed after restarting the wallet. La modalità di connessione sarà modificata dopo il riavvio del portafoglio. - + Backup wallet to... Portafoglio di backup in… - + Warning Attenzione - + Your wallet will be reset and restored from blockchain. Are you sure? Il tuo portafoglio sarà resettato e ripristinato dal blockchain. Sei sicuro? - + Wallet error Errore nel portafoglio - + Wallet Portafoglio - + Encrypted Criptato - + Not encrypted Non criptato - + %n active connection(s) %n connessione attiva @@ -2008,17 +2092,17 @@ Are you sure? - + Synchronization in progress Sincronizzazione in corso - + Not synchronized Non sincronizzato - + Synchronized Sincronizzato @@ -2066,6 +2150,84 @@ Are you sure? UrL del nodo + + WalletGui::OptimizationSettingsDialog + + + 30 minutes + 30 minuti + + + + 1 hour + 1 ora + + + + 1.5 hours + 1,5 ore + + + + 2 hours + 2 ore + + + + 2.5 hours + 2,5 ore + + + + 3 hours + 3 ore + + + + 3.5 hours + 3,5 ore + + + + 4 hours + 4 ore + + + + 4.5 hours + 4,5 ore + + + + 5 hours + 5 ore + + + + 5.5 hours + 5,5 ore + + + + 6 hours + 6 ore + + + + Wallet is currently optimized for this target + Il portafoglio è attualmente ottimizzato per questo obiettivo + + + + outputs below selected target + uscite sono sotto il obiettivo selezionato + + + + Wallet is closed + Il portafoglio è chiuso + + WalletGui::PoolModel @@ -2513,183 +2675,188 @@ when the wallet is synchronized Sweeping unmixable dust - - + + Optimizing wallet + Ottimizzazione del portafoglio + + + + Ready Pronto - + Synchronizing Sincronizzazione in corso - + Object was not initialized L'oggetto non è stato inizializzato - + The password is wrong La password è errata - + The object is already initialized L'oggetto è già stato inizializzato - + Internal error occurred C'è stato un errore interno - + MixIn count is too big Il conto Mixln è troppo elevato - + Bad address Indirizzo errato - + Transaction size is too big La dimensione della transazione è troppo grande - + Wrong amount Somma errata - + Sum overflow Somma eccessiva - + The destination is empty La destinazione è vuota - + Impossible to cancel transaction Impossibile cancellare la transazione - + The wallet is in wrong state (maybe loading or saving), try again later Il portafoglio è in stato di errore (forse in fase di caricamento o salvataggio), riprovate più tardi - + The operation you've requested has been cancelled L'operazione che hai richiesto è stata annullata - + Transaction transfer impossible Impossibile trasferire la transazione - + Wrong version Versione errata - + Transaction fee is too small La commissione di transazione è troppo bassa - + Cannot generate new key Impossibile generare una nuova chiave - + Index is out of range L'indice è fuori dal range - + Address already exists L'indirizzo è già esistente - + The wallet is in tracking mode Il portafoglio è in modalità tracking - + Wrong parameters passed Passati parametri errati - + Object not found Oggetto non trovato - + Requested wallet not found Il portafoglio richiesto non è stato trovato - + Change address required Necessaria modifica all'indirizzo - + Change address not found Indirizzo modificato non trovato - + Destination address required Necessario indirizzo di destinazione - + Destination address not found Indirizzo di destinazione non trovato - + Wrong payment id format Pagamento errato formato id - + Wrong transaction extra format Transazione errata formato extra - + Unknown error Errore sconosciuto - + Warning: last block was received %1 hours %2 minutes ago Attenzione: l'ultimo blocco è stato ricevuto %1 ora e %2 minuti fa - + Wallet synchronized. Height: %1 | Time (UTC): %2%3 Il portafoglio è stato sicronizzato. Altezza: %1 | Ora (UTC): %2%3 - + Mnemonic seed is not correct Il seed mnemonico non è corretto - + There must be an error in mnemonic seed. Make sure you entered it correctly. Ci deve essere un errore nel seed mnemonico. Assicuratevi di averlo inserito correttamente. diff --git a/src/languages/ja.qm b/src/languages/ja.qm index a38dc167e..c404bf8c6 100644 Binary files a/src/languages/ja.qm and b/src/languages/ja.qm differ diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 6f53f3a91..c7e5dbd9f 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -513,7 +513,7 @@ Please wait... - + Recent wallets 最近のウォレット @@ -523,134 +523,139 @@ Please wait... 設定 - - + + Help ヘルプ - + Wallet ウォレット - + toolBar - + Account toolbar アカウント ツールバー - + Overview 概要 - + Send 送信 - + Receive 受信 - + Transactions 史籍 - + Exit 退出 - + Ctrl+Q - + Contacts 連絡先 - + Create wallet ウォレットを作る - + Open wallet ウォレットを開く - + Encrypt wallet ウォレットの暗号化 - - + + Change password パスワードの変更 - + About アバウト - + About Qt Qtについて - + Backup wallet ウォレットをバックアップ - + Start on system login システム ログインを始める - + Minimize to tray トレイに最小化 - + Close to tray トレイに閉じる - + Import private key プライベートキーのインポート - + Sign message - + サインメッセージ - + Verify signed message - + 署名されたメッセージを確認する + + + + Optimization + 最適化 Mining マイニング - - + + Reset wallet ウォレットをリセット @@ -660,62 +665,62 @@ Please wait... 言語 - + Export private key プライベートキーをエクスポート - + F1 - + Connection 接続 - + Open payment request ペイメント リクエストを開く - + Export tracking key トラッキングキーをエクスポート - + Import tracking key トラッキングキーをインポート - + Close wallet ウォレットを閉じる - + Information インフォメーション - + Open log file ログファイルを開く - + Show mnemonic seed ニーモニックシードを表示 - + Restore from mnemonic seed ニーモニックシードから復元 - + Create nondeterministic wallet 非決定的ウォレットを作成 @@ -724,7 +729,7 @@ Please wait... 自動プールマイニング開始 - + Sweep unmixable スイープ混合不可 @@ -953,6 +958,85 @@ Please wait... + + OptimizationSettingsDialog + + + Wallet optimization settings + 最適化設定 + + + + Run background wallet optimization + バックグラウンドで財布の最適化を実行します + + + + (Recommended) + (推奨) + + + + Optimization target + 最適化対象 + + + + Anonymity level + 匿名性レベル + + + + 0 + + + + + outputs below selected target + 選択されたターゲットの下に出力 + + + + From + から + + + + + HH:mm + + + + + To + まで + + + + Specific time for optimization transactions + + + + + Wallet optimization is a background task performed in order to aggregate transactions outputs that are below optimization target into bigger ones. It allows to send larger amounts of KRB within one transaction. Wallet optimization is free for all users but takes some time. + + + + + Send optimization transactions each + + + + + Cancel + キャンセル + + + + Save + 保存 + + OverviewFrame @@ -1067,7 +1151,7 @@ Please wait... QObject - + Help ヘルプ @@ -1354,7 +1438,7 @@ Do you want to go to download page? Sign message - + サインメッセージ @@ -1815,212 +1899,212 @@ Do you want to go to download page? WalletGui::MainWindow - - + + Karbo Wallet %1 カルボウォレット %1 - + About %1 Wallet カルボウォレットについて - + Tracking wallet. Spending unawailable トラッキングウォレット. 利用不可能な出費 - + Connected through remote node リモートノードを介して接続 - + &Show / Hide 表示 / 非表示 - + Show or hide the main window メインウィンドウを表示または非表示 - - + + New wallet file 新ウォレットファイル - - - + + + Wallets (*.wallet) ウォレット (*.wallet) - + Open .wallet/.keys file .wallet/.keysファイルを開く - + Wallet (*.wallet *.keys) ウォレット (*.wallet *.keys) - + Wrong wallet file extension ウォレットファイルの拡張子が間違っています - + Wrong wallet file extension, wallet file should have ".wallet", ".keys" or ".trackingwallet" extension. - + Wallet keys are not valid ウォレットキーは無効です - + The private keys you entered are not valid. あなたが入力したプライベートキーは無効です。 - + Tracking key is not valid トラッキングキーは無効です - + The tracking key you entered is not valid. あなたが入力したトラッキングキーは無効です。 - - - - + + + + Key is not valid キーは無効です - + The public spend key you entered is not valid. あなたが入力したパブリックスペンドキーは無効です。 - + The public view key you entered is not valid. あなたが入力したパブリックビューキーは無効です。 - + The private spend key you entered is not valid. あなたが入力したプライベートスペンドキーは無効です。 - + The private view key you entered is not valid. あなたが入力したプライベートビューキーは無効です。 - + Mnemonic seed is not correct ニーモニックシードが正しくありません。 - + There must be an error in mnemonic seed. Make sure you entered it correctly. ニーモニックシードにエラーがあります。正しく入力したか確認してください。 - + Language changed to %1 - + Language was changed 言語は変更されました。 - + Language changed to %1. The change will take effect after restarting the wallet. ウォレットの再起動後に言語が変更されます。 - + More info can be found at www.karbowanec.com in Documentation section 詳細情報はwww.karbowanec.comのDocumentationセクションにあります。 - + Connection settings changed 接続設定は変更されました - + Connection mode will be changed after restarting the wallet. ウォレットの再起動後に接続モードが変更されます。 - + Backup wallet to... ...へウォレットをバックアップ - + Warning 警告 - + Your wallet will be reset and restored from blockchain. Are you sure? ウォレットがリセットされ、ブロックチェーンから復元されます。本当に実行してもよろしいでしょうか? - + Wallet error ウォレットエラー - + Wallet ウォレット - + Encrypted 暗号化 - + Not encrypted 暗号化されていない - + %n active connection(s) %n アクティブコネクション - + Synchronization in progress 同期化進行中 - + Not synchronized 同期化されていない - + Synchronized 同期化 @@ -2068,6 +2152,84 @@ Are you sure? ノードURL + + WalletGui::OptimizationSettingsDialog + + + 30 minutes + 30分 + + + + 1 hour + 1時間 + + + + 1.5 hours + 1.5時間 + + + + 2 hours + 2時間 + + + + 2.5 hours + 2,5時間 + + + + 3 hours + 3時間 + + + + 3.5 hours + 3,5時間 + + + + 4 hours + 4時間 + + + + 4.5 hours + 4,5時間 + + + + 5 hours + 5時間 + + + + 5.5 hours + 5,5時間 + + + + 6 hours + 6時間 + + + + Wallet is currently optimized for this target + ウォレットは現在、このターゲット用に最適化されています + + + + outputs below selected target + 選択されたターゲットの下に出力 + + + + Wallet is closed + ウォレットは閉鎖されています + + WalletGui::PoolModel @@ -2501,183 +2663,188 @@ when the wallet is synchronized 混合不可ダスト一掃中 - - + + Optimizing wallet + + + + + Ready 開始 - + Synchronizing 同期中 - + Object was not initialized オブジェクトは初期化されませんでした - + The password is wrong パスワードが違います - + The object is already initialized オブジェクトは既に初期化されました - + Internal error occurred 内部エラー発生 - + MixIn count is too big ミックスインカウントが大きすぎます。 - + Bad address 無効アドレス - + Transaction size is too big トランザクションサイズが大きすぎます - + Wrong amount 不適切な数量 - + Sum overflow 合計オーバーフロー - + The destination is empty 宛先は空です - + Impossible to cancel transaction トランザクションのキャンセルはできません。 - + The wallet is in wrong state (maybe loading or saving), try again later ウォレットが不適切な状態(おそらくローディング中、または、保存中)なので、しばらく経ってからもう一度試してください。 - + The operation you've requested has been cancelled あなたがリクエストした操作はキャンセルされました。 - + Transaction transfer impossible トランザクショントランスファー不可能 - + Wrong version 不適当なバージョン - + Transaction fee is too small トランザクション手数料が少なすぎます - + Cannot generate new key 新キーは生成できない - + Index is out of range インデックスは範囲外 - + Address already exists アドレスは既に存在します - + The wallet is in tracking mode ウォレットはトラッキングモードです - + Wrong parameters passed 不適切なパラメーターが渡されました - + Object not found 不明オブジェクト - + Requested wallet not found リクエストされたウォレットが見つかりません - + Change address required アドレスの変更が必要 - + Change address not found 変更されたアドレスが見つかりません - + Destination address required 宛先アドレスが必要 - + Destination address not found 宛先アドレスが見つかりません - + Wrong payment id format 不適切なペイメントIDフォーマット - + Wrong transaction extra format 不適切なトランザクションエキストラフォーマット - + Unknown error 不明のエラー - + Warning: last block was received %1 hours %2 minutes ago 警告: 最新のブロックは%1時間%2分前に受信されました。 - + Wallet synchronized. Height: %1 | Time (UTC): %2%3 ウォレットは同期されました。高さ: %1 | 時刻(UTC): %2%3 - + Mnemonic seed is not correct ニーモニックシードが正しくありません。 - + There must be an error in mnemonic seed. Make sure you entered it correctly. ニーモニックシードにエラーがあります。正しく入力したか確認してください。 diff --git a/src/languages/ko.qm b/src/languages/ko.qm index 11f128d46..020d3db20 100644 Binary files a/src/languages/ko.qm and b/src/languages/ko.qm differ diff --git a/src/languages/ko.ts b/src/languages/ko.ts index 8ea688854..cdef3e788 100644 --- a/src/languages/ko.ts +++ b/src/languages/ko.ts @@ -536,7 +536,7 @@ Please wait... - + Recent wallets 최근 지갑 @@ -546,134 +546,139 @@ Please wait... 설정 - - + + Help 도움말 - + Wallet 지갑 - + toolBar 툴바 - + Account toolbar 계정 툴바 - + Overview 개요 - + Send 전송 - + Receive 수신 - + Transactions 트랜잭션 - + Exit 나가기 - + Ctrl+Q Ctrl+Q - + Contacts 연락처 - + Create wallet 지갑 생성 - + Open wallet 지갑 열기 - + Encrypt wallet 지갑 암호화 - - + + Change password 암호 변경 - + About 소개 - + About Qt Qt 소개 - + Backup wallet 백업 지갑 - + Start on system login 시스템 로그인 시작 - + Minimize to tray 트레이에 최소화하기 - + Close to tray 트레이에 닫기 - + Import private key 개인 키 불러오기 - + Sign message - + 메시지에 서명 - + Verify signed message - + 서명 된 메시지 확인 + + + + Optimization + 최적화 Mining 마이닝 - - + + Reset wallet 지갑 재설정 @@ -687,62 +692,62 @@ Please wait... 언어 변경 - + Export private key 개인 키 내보내기 - + F1 F1 - + Connection 연결 - + Open payment request 지갑 요청 열기 - + Export tracking key 추적 키 내보내기 - + Import tracking key 추적 키 불러오기 - + Close wallet 지갑 닫기 - + Information 정보 - + Open log file 로그 파일 열기 - + Show mnemonic seed 연상기호 시드 표시 - + Restore from mnemonic seed 연상기호 시드에서 복구 - + Create nondeterministic wallet 연상기호 지갑 생성 @@ -751,7 +756,7 @@ Please wait... 자동 풀 마이닝 시작 - + Sweep unmixable 혼합불가 제거 @@ -988,6 +993,85 @@ Please wait... 확인 + + OptimizationSettingsDialog + + + Wallet optimization settings + 최적화 설정 + + + + Run background wallet optimization + 백그라운드에서 지갑의 최적화 실행 + + + + (Recommended) + (권장) + + + + Optimization target + 최적화 대상 + + + + Anonymity level + 익명 레벨 + + + + 0 + 0 + + + + outputs below selected target + 선택한 목표보다 낮은 출력 + + + + From + 에서 + + + + + HH:mm + + + + + To + 까지 + + + + Specific time for optimization transactions + + + + + Wallet optimization is a background task performed in order to aggregate transactions outputs that are below optimization target into bigger ones. It allows to send larger amounts of KRB within one transaction. Wallet optimization is free for all users but takes some time. + + + + + Send optimization transactions each + + + + + Cancel + 취소 + + + + Save + 저장 + + OverviewFrame @@ -1102,7 +1186,7 @@ Please wait... QObject - + Help 도움말 @@ -1413,7 +1497,7 @@ Do you want to go to download page? Sign message - + 메시지에 서명 @@ -1878,133 +1962,133 @@ Do you want to go to download page? WalletGui::MainWindow - + About %1 Wallet %1 지갑 소개 - + Tracking wallet. Spending unawailable 지갑 추적. 지출 이용 불가 - + Connected through remote node 원격 노드로 연결됨 - + &Show / Hide 표시/숨기기 - + Show or hide the main window 메인창 표시 또는 숨기기 - - + + New wallet file 새로운 지갑 파일 - - - + + + Wallets (*.wallet) 지갑 (*.wallet) - + Open .wallet/.keys file .wallet/.keys 파일 열기 - + Wallet (*.wallet *.keys) 지갑 (*.wallet *.keys) - + Wrong wallet file extension 잘못된 지갑 파일 확장 - + Wrong wallet file extension, wallet file should have ".wallet", ".keys" or ".trackingwallet" extension. - + Wallet keys are not valid 지갑 키가 유효하지 않습니다 - + The private keys you entered are not valid. 입력하신 개인 키가 유효하지 않습니다 - + Tracking key is not valid 추적 키가 유효하지 않습니다 - + The tracking key you entered is not valid. 입력하신 추적 키가 유효하지 않습니다 - - - - + + + + Key is not valid 키가 유효하지 않습니다 - + The public spend key you entered is not valid. 입력하신 공개 지출 키가 유효하지 않습니다. - + The public view key you entered is not valid. 입력하신 공개 보기 키가 유효하지 않습니다. - + The private spend key you entered is not valid. 입력하신 비공개 지출 키가 유효하지 않습니다. - + The private view key you entered is not valid. 입력하신 비공개 보기 키가 유효하지 않습니다. - + Mnemonic seed is not correct 연산 기호가 올바르지 않습니다 - + There must be an error in mnemonic seed. Make sure you entered it correctly. 연산기호 시드에 오류가 있습니다. 올바르게 입력했는지 확인하세요. - + Language changed to %1 - + Language was changed 언어가 변경되었습니다 - + Language changed to %1. The change will take effect after restarting the wallet. @@ -2013,81 +2097,81 @@ Do you want to go to download page? 지갑을 재시작한 후에 언어가 변경되었습니다. - + More info can be found at www.karbowanec.com in Documentation section 더 많은 정보는 www.karbowanec.com 문서 항목에서 확인하실 수 있습니다 - + Connection settings changed 연결 설정 변경됨 - + Connection mode will be changed after restarting the wallet. 연결 모드가 지갑을 재시작한 후에 변경되었습니다. - + Backup wallet to... 지갑을 다음으로 백업합니다... - + Warning 경고 - + Your wallet will be reset and restored from blockchain. Are you sure? 지갑이 블록체인에서 재설정 및 복구되었습니다. 계속 진행하시겠습니까? - + Wallet error 지갑 오류 - + Wallet 지갑 - + Encrypted 암호화됨 - + Not encrypted 암호화되지 않음 - + %n active connection(s) %n개의 활성화된 연결 - + Synchronization in progress 진행 중인 동기화 - + Not synchronized 동기화되지 않음 - + Synchronized 동기화됨 - - + + Karbo Wallet %1 Karbo 지갑 %1 @@ -2135,6 +2219,84 @@ Are you sure? 노드 URL + + WalletGui::OptimizationSettingsDialog + + + 30 minutes + 30 분 + + + + 1 hour + 1 시간 + + + + 1.5 hours + 1.5 시간 + + + + 2 hours + 2시간 + + + + 2.5 hours + 2.5시간 + + + + 3 hours + 3시간 + + + + 3.5 hours + 3.5시간 + + + + 4 hours + 4시간 + + + + 4.5 hours + 4.5시간 + + + + 5 hours + 5시간 + + + + 5.5 hours + 5.5시간 + + + + 6 hours + 6시간 + + + + Wallet is currently optimized for this target + 지갑은 현재이 타겟에 맞게 최적화되어 있습니다 + + + + outputs below selected target + 선택한 목표보다 낮은 출력 + + + + Wallet is closed + 지갑이 폐쇄되었습니다 + + WalletGui::PoolModel @@ -2568,183 +2730,188 @@ when the wallet is synchronized 혼합 불가능한 현금 삭제 - - + + Optimizing wallet + + + + + Ready 완료 - + Synchronizing 동기화 중 - + Object was not initialized 개체가 초기화되지 않았습니다 - + The password is wrong 올바르지 않은 암호 - + The object is already initialized 개체가 이미 초기화되었습니다 - + Internal error occurred 내부 오류 발생 - + MixIn count is too big 믹스인 수가 너무 큽니다 - + Bad address 나쁜 주소 - + Transaction size is too big 트랜잭션 크기가 너무 큽니다 - + Wrong amount 잘못된 금액 - + Sum overflow 합계 개요 - + The destination is empty 대상이 비어있습니다 - + Impossible to cancel transaction 트랜잭션 취소가 불가능합니다 - + The wallet is in wrong state (maybe loading or saving), try again later 지갑이 작동할 수 없는 상태입니다(로딩 중 또는 저장 중). 다시 시도하세요. - + The operation you've requested has been cancelled 요청하신 작업이 취소되었습니다 - + Transaction transfer impossible 트랜잭션 거래가 불가능합니다 - + Wrong version 잘못된 버전 - + Transaction fee is too small 전송비용이 너무 적습니다 - + Cannot generate new key 새로운 키를 생성할 수 없습니다 - + Index is out of range 인덱스가 범위를 벗어났습니다 - + Address already exists 주소가 이미 존재합니다 - + The wallet is in tracking mode 지갑이 추적 모드입니다 - + Wrong parameters passed 잘못된 한도가 패스됨 - + Object not found 발견된 개체가 없습니다 - + Requested wallet not found 요청한 지갑을 찾을 수 없습니다 - + Change address required 변경된 주소가 필요합니다 - + Change address not found 변경된 주소를 찾을 수 없습니다 - + Destination address required 대상 주소가 필요합니다 - + Destination address not found 대상 주소를 찾을 수 없습니다 - + Wrong payment id format 잘못된 지출 id 형식 - + Wrong transaction extra format 잘못된 트랜잭션 추가 형식 - + Unknown error 알 수 없는 오류 - + Warning: last block was received %1 hours %2 minutes ago 경고: 마지막 블록이 %1시간 %2분 전에 수신되었습니다 - + Wallet synchronized. Height: %1 | Time (UTC): %2%3 지갑 동기화 완료됨. 절정: %1 | 시간(UTC): %2%3 - + Mnemonic seed is not correct 연상기호 시드가 올바르지 않습니다 - + There must be an error in mnemonic seed. Make sure you entered it correctly. 연상기호 시드에 오류가 있어야 합니다. 올바르게 입력했는지 확인하세요. diff --git a/src/languages/pl.qm b/src/languages/pl.qm index 377c7ba3a..0cd07dcd0 100644 Binary files a/src/languages/pl.qm and b/src/languages/pl.qm differ diff --git a/src/languages/pl.ts b/src/languages/pl.ts index dc66d1ef6..520dcaf82 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -644,6 +644,10 @@ Proszę czekać... Verify signed message Sprawdź podpis wiadomości + + Optimization + Optymalizacja + MiningFrame @@ -857,6 +861,69 @@ Proszę czekać... OK + + OptimizationSettingsDialog + + Wallet optimization settings + Ustawienia optymalizacji portfela + + + Run background wallet optimization + Wykonywać optymalizację portfela w tle + + + (Recommended) + (Zalecane) + + + Optimization target + Cel optymalizacji + + + Anonymity level + Poziom prywatności + + + 0 + 0 + + + outputs below selected target + wyjść znajduje się poniżej wybranego celu + + + From + Od + + + HH:mm + + + + To + do + + + Specific time for optimization transactions + Określony czas na optymalizację + + + Send optimization transactions each + Wysyłaj transakcje optymalizacyjne co + + + Cancel + Anuluj + + + Save + Zapisz + + + Wallet optimization is a background task performed in order to aggregate transactions outputs that are below optimization target into bigger ones. It allows to send larger amounts of KRB within one transaction. Wallet optimization is free for all users but takes some time. + + + OverviewFrame @@ -1861,6 +1928,69 @@ Jesteś pewien? Adres węzła + + WalletGui::OptimizationSettingsDialog + + 30 minutes + 30 minut + + + 1 hour + 1 godz. + + + 1.5 hours + 1,5 godz. + + + 2 hours + 2 godz. + + + 2.5 hours + 2,5 godz. + + + 3 hours + 3 godz. + + + 3.5 hours + 3,5 godz. + + + 4 hours + 4 godz. + + + 4.5 hours + 4,5 godz. + + + 5 hours + 5 godz. + + + 5.5 hours + 5,5 godz. + + + 6 hours + 6 godz. + + + Wallet is currently optimized for this target + Portfel jest obecnie zoptymalizowany dla tego celu + + + outputs below selected target + wyjść znajduje się poniżej wybranego celu + + + Wallet is closed + Portfel jest zamknięty + + WalletGui::PoolModel @@ -2397,5 +2527,9 @@ kiedy portfel skończy synchronizowanie Sweeping unmixable dust Optymizacja nieosiągalnych wyjść + + Optimizing wallet + Optymalizacja portfela + diff --git a/src/languages/pt.qm b/src/languages/pt.qm index 10f8471e9..7c6c45f8c 100644 Binary files a/src/languages/pt.qm and b/src/languages/pt.qm differ diff --git a/src/languages/pt.ts b/src/languages/pt.ts index 2a8a6f153..8308852fd 100644 --- a/src/languages/pt.ts +++ b/src/languages/pt.ts @@ -665,6 +665,10 @@ Por favor aguarde... Verificar mensagem assinada + + Optimization + Otimização + MiningFrame @@ -878,6 +882,69 @@ Por favor aguarde... OK + + OptimizationSettingsDialog + + Wallet optimization settings + Configurações de otimização de carteira + + + Run background wallet optimization + Execute a otimização da carteira em segundo plano + + + (Recommended) + (Recomendado) + + + Optimization target + Meta de otimização + + + Anonymity level + Nível de privacidade + + + 0 + 0 + + + outputs below selected target + saídas estão abaixo da meta selecionada + + + From + De + + + HH:mm + + + + To + a + + + Specific time for optimization transactions + Hora específica para otimização + + + Send optimization transactions each + Envie transações de otimização a cada + + + Cancel + Cancelar + + + Save + Salvar + + + Wallet optimization is a background task performed in order to aggregate transactions outputs that are below optimization target into bigger ones. It allows to send larger amounts of KRB within one transaction. Wallet optimization is free for all users but takes some time. + + + OverviewFrame @@ -1870,6 +1937,69 @@ Você tem certeza? Node URL + + WalletGui::OptimizationSettingsDialog + + 30 minutes + 30 minutos + + + 1 hour + 1 hora + + + 1.5 hours + 1,5 horas + + + 2 hours + 2 horas + + + 2.5 hours + 2,5 horas + + + 3 hours + 3 horas + + + 3.5 hours + 3,5 horas + + + 4 hours + 4 horas + + + 4.5 hours + 45,5 horas + + + 5 hours + 5 horas + + + 5.5 hours + 5,5 horas + + + 6 hours + 6 horas + + + Wallet is currently optimized for this target + Carteira está otimizada para essa meta + + + outputs below selected target + saídas estão abaixo da meta selecionada + + + Wallet is closed + Carteira é fechada + + WalletGui::PoolModel @@ -2401,5 +2531,9 @@ quando a carteira vai terminar de sincronizar Sweeping unmixable dust Varrendo não misturável + + Optimizing wallet + Otimizando carteira + diff --git a/src/languages/ru.qm b/src/languages/ru.qm index bfb2e97f9..0dc80023b 100644 Binary files a/src/languages/ru.qm and b/src/languages/ru.qm differ diff --git a/src/languages/ru.ts b/src/languages/ru.ts index 33e1d41b6..5afeaff7e 100644 --- a/src/languages/ru.ts +++ b/src/languages/ru.ts @@ -644,6 +644,10 @@ Please wait... Verify signed message Проверка подписанного сообщения + + Optimization + Оптимизация + MiningFrame @@ -857,6 +861,70 @@ Please wait... Хорошо + + OptimizationSettingsDialog + + Wallet optimization settings + Настройки оптимизации кошелька + + + Run background wallet optimization + Выполнять оптимизацию кошелька в фоновом режиме + + + (Recommended) + (Рекомендуется) + + + Optimization target + Цель оптимизации + + + Anonymity level + Уровень анонимности + + + 0 + 0 + + + outputs below selected target + выходов ниже выбранной цели + + + From + От + + + HH:mm + + + + To + до + + + Specific time for optimization transactions + Конкретное время для оптимизации + + + Send optimization transactions each + Отправлять транзакции оптимизации каждые + + + Cancel + Отменить + + + Save + Сохранить + + + Wallet optimization is a background task performed in order to aggregate transactions outputs that are below optimization target into bigger ones. It allows to send larger amounts of KRB within one transaction. Wallet optimization is free for all users but takes some time. + Оптимизация кошелька - это фоновая задача, выполняемая для суммирования выходов транзакций, которые ниже целевого показателя оптимизации, в более крупные. Это позволяет отправлять большие суммы KRB в одной транзакции. Оптимизация кошелька бесплатна для всех пользователей, но занимает некоторое время. + + + OverviewFrame @@ -1854,6 +1922,69 @@ Are you sure? Адрес узла + + WalletGui::OptimizationSettingsDialog + + 30 minutes + 30 мин. + + + 1 hour + 1 час + + + 1.5 hours + 1,5 часа + + + 2 hours + 2 часа + + + 2.5 hours + 2,5 часа + + + 3 hours + 3 часа + + + 3.5 hours + 3,5 часа + + + 4 hours + 4 часа + + + 4.5 hours + 4,5 часа + + + 5 hours + 5 часов + + + 5.5 hours + 5,5 часов + + + 6 hours + 6 часов + + + Wallet is currently optimized for this target + Кошелек в настоящее время оптимизирован для этой цели + + + outputs below selected target + выходов ниже выбранной цели + + + Wallet is closed + Кошелек закрыт + + WalletGui::PoolModel @@ -2390,5 +2521,9 @@ when the wallet is synchronized Sweeping unmixable dust Оптимизация несмешываемых выходов + + Optimizing wallet + Оптимизация кошелька + diff --git a/src/languages/uk.qm b/src/languages/uk.qm index 6057be275..64c334b89 100644 Binary files a/src/languages/uk.qm and b/src/languages/uk.qm differ diff --git a/src/languages/uk.ts b/src/languages/uk.ts index ffe926a38..9199ede47 100644 --- a/src/languages/uk.ts +++ b/src/languages/uk.ts @@ -644,6 +644,10 @@ Please wait... Verify signed message Перевірити підписане повідомлення + + Optimization + Оптимізація + MiningFrame @@ -857,6 +861,69 @@ Please wait... Гаразд + + OptimizationSettingsDialog + + Wallet optimization settings + Налаштування оптимізації гаманця + + + Run background wallet optimization + Виконувати оптимізацію гаманця у фоновому режимі + + + (Recommended) + (Рекомедується) + + + Optimization target + Ціль оптимізації + + + Anonymity level + Рівень приватності + + + 0 + 0 + + + outputs below selected target + виходів нижче вибраної цілі + + + From + Від + + + HH:mm + + + + To + до + + + Specific time for optimization transactions + Конкретний час для оптимізації + + + Send optimization transactions each + Надсилати транзакції оптимізації кожні + + + Cancel + Скасувати + + + Save + Зберегти + + + Wallet optimization is a background task performed in order to aggregate transactions outputs that are below optimization target into bigger ones. It allows to send larger amounts of KRB within one transaction. Wallet optimization is free for all users but takes some time. + Оптимізація гаманця - це фонове завдання, що виконується для об'єднання виходів транзакцій, які нижче цільового показника оптимізації, в більш великі. Це дозволяє відправляти великі суми KRB в одній транзакції. Оптимізація гаманця безкоштовна для всіх користувачів, але займає деякий час. + + OverviewFrame @@ -1850,6 +1917,69 @@ Are you sure? Адреса вузла + + WalletGui::OptimizationSettingsDialog + + 30 minutes + 30 хв. + + + 1 hour + 1 год. + + + 1.5 hours + 1,5 год. + + + 2 hours + 2 год. + + + 2.5 hours + 2,5 год. + + + 3 hours + 3 год. + + + 3.5 hours + 3,5 год. + + + 4 hours + 4 год. + + + 4.5 hours + 4,5 год. + + + 5 hours + 5 год. + + + 5.5 hours + 5,5 год. + + + 6 hours + 6 год. + + + Wallet is currently optimized for this target + Гаманець наразі оптимізовано для цієї цілі + + + outputs below selected target + виходів нижче вибраної цілі + + + Wallet is closed + Гаманець закритий + + WalletGui::PoolModel @@ -2384,7 +2514,11 @@ when the wallet is synchronized Sweeping unmixable dust - Триває оптимізація незмішуваних виходів + Триває оптимізація незмішуваних виходів + + + Optimizing wallet + Триває оптимізація гаманця diff --git a/src/languages/zh.qm b/src/languages/zh.qm index 1adbce66e..2fca2c30f 100644 Binary files a/src/languages/zh.qm and b/src/languages/zh.qm differ diff --git a/src/languages/zh.ts b/src/languages/zh.ts index 75eb7a935..6b87c0ef3 100644 --- a/src/languages/zh.ts +++ b/src/languages/zh.ts @@ -536,7 +536,7 @@ Please wait... - + Recent wallets 最近的钱包 @@ -546,134 +546,139 @@ Please wait... 设置 - - + + Help 帮助 - + Wallet 钱包 - + toolBar 工具栏 - + Account toolbar 账户工具栏 - + Overview 概览 - + Send 发送 - + Receive 接收 - + Transactions 交易 - + Exit 退出 - + Ctrl+Q 按键 Ctrl+Q - + Contacts 联系人 - + Create wallet 创建钱包 - + Open wallet 打开钱包 - + Encrypt wallet 加密钱包 - - + + Change password 更改密码 - + About 相关信息 - + About Qt 关于QT - + Backup wallet 备用钱包 - + Start on system login 开始登陆系统 - + Minimize to tray 最小化到托盘 - + Close to tray 关闭至托盘 - + Import private key 导入私钥 - + Sign message 签名消息 - + Verify signed message 验证已签名的邮件 + + + Optimization + 优化 + Mining 挖矿 - - + + Reset wallet 重置钱包 @@ -687,62 +692,62 @@ Please wait... 更换语言 - + Export private key 导出私钥 - + F1 F1 - + Connection 连接 - + Open payment request 打开付款请求 - + Export tracking key 导出跟踪密钥 - + Import tracking key 导入跟踪密钥 - + Close wallet 关闭钱包 - + Information 信息 - + Open log file 打开日志文件 - + Show mnemonic seed 显示助记种子 - + Restore from mnemonic seed 从助记种子恢复 - + Create nondeterministic wallet 创建非确定性钱包 @@ -751,7 +756,7 @@ Please wait... 自动开始从矿池挖矿 - + Sweep unmixable 扫除不可混合的金额 @@ -988,6 +993,85 @@ Please wait... + + OptimizationSettingsDialog + + + Wallet optimization settings + 优化设置 + + + + Run background wallet optimization + 在后台运行钱包的优化 + + + + (Recommended) + (推荐的) + + + + Optimization target + 优化目标 + + + + Anonymity level + 匿名级别 + + + + 0 + 0 + + + + outputs below selected target + 个输出低于所选目标 + + + + From + + + + + + HH:mm + + + + + To + + + + + Specific time for optimization transactions + 优化交易的具体时间 + + + + Wallet optimization is a background task performed in order to aggregate transactions outputs that are below optimization target into bigger ones. It allows to send larger amounts of KRB within one transaction. Wallet optimization is free for all users but takes some time. + + + + + Send optimization transactions each + 每次发送优化事务 + + + + Cancel + 取消 + + + + Save + 保存 + + OverviewFrame @@ -1102,7 +1186,7 @@ Please wait... QObject - + Help 帮助 @@ -1862,128 +1946,128 @@ Do you want to go to download page? WalletGui::MainWindow - + Tracking wallet. Spending unawailable 跟踪钱包。支付不可用。 - + Connected through remote node 通过远程节点连接 - + &Show / Hide 显示/隐藏 - + Show or hide the main window 显示或隐藏主窗口 - - + + New wallet file 新钱包文件 - - - + + + Wallets (*.wallet) 钱包(*.wallet) - + Open .wallet/.keys file 打开.wallet/.key文件 - + Wallet (*.wallet *.keys) 钱包(*.wallet *.keys) - + Wrong wallet file extension 钱包文件扩展名错误 - + Wrong wallet file extension, wallet file should have ".wallet", ".keys" or ".trackingwallet" extension. - + Wallet keys are not valid 钱包密钥无效 - + The private keys you entered are not valid. 您输入的私钥无效。 - + Tracking key is not valid 跟踪密钥无效 - + The tracking key you entered is not valid. 您输入的跟踪密钥无效。 - - - - + + + + Key is not valid 密钥无效 - + The public spend key you entered is not valid. 您输入的支出公钥无效。 - + The public view key you entered is not valid. 您输入的检视公钥无效。 - + The private spend key you entered is not valid. 您输入的支出私钥无效。 - + The private view key you entered is not valid. 您输入的检视私钥无效。 - + Mnemonic seed is not correct 助记种子不正确 - + There must be an error in mnemonic seed. Make sure you entered it correctly. 助记种子有误,请确保输入正确的数据。 - + Language changed to %1 - + Language was changed 语言已更改 - + Language changed to %1. The change will take effect after restarting the wallet. @@ -1992,86 +2076,86 @@ Do you want to go to download page? 语言更改会在重启钱包后生效 - + More info can be found at www.karbowanec.com in Documentation section 更多信息请阅读www.karbowanec.com的文档部分。 - + Connection settings changed 连接设置已更改 - + Connection mode will be changed after restarting the wallet. 连接模式更改会在重启钱包后生效 - + Backup wallet to... 备份钱包至... - + Warning 系统提醒 - + Your wallet will be reset and restored from blockchain. Are you sure? 您的钱包将会被重置,并从区块链中恢复,您确定吗? - + Wallet error 钱包错误 - + Wallet 钱包 - + Encrypted 加密 - + Not encrypted 未加密 - + %n active connection(s) %n 有效连接 - + Synchronization in progress 正在同步中 - + Not synchronized 未同步 - + Synchronized 已同步 - - + + Karbo Wallet %1 Karbo钱包%1 - + About %1 Wallet 关于%1钱包 @@ -2119,6 +2203,84 @@ Are you sure? 节点网址URL + + WalletGui::OptimizationSettingsDialog + + + 30 minutes + 30分钟 + + + + 1 hour + 1小时 + + + + 1.5 hours + 1.5小时 + + + + 2 hours + 2小时 + + + + 2.5 hours + 2.5小时 + + + + 3 hours + 3小时 + + + + 3.5 hours + 3.5小时 + + + + 4 hours + 4个小时 + + + + 4.5 hours + 4.5小时 + + + + 5 hours + 5个小时 + + + + 5.5 hours + 5.5小时 + + + + 6 hours + 6个小时 + + + + Wallet is currently optimized for this target + 钱包目前针对此目标进行了优化 + + + + outputs below selected target + 输出低于所选目标 + + + + Wallet is closed + 钱包已关闭 + + WalletGui::PoolModel @@ -2552,183 +2714,188 @@ when the wallet is synchronized 正在扫除不可混合的尘额 - - + + Optimizing wallet + + + + + Ready 已就绪 - + Synchronizing 同步中 - + Object was not initialized 对象未初始化 - + The password is wrong 密码错误 - + The object is already initialized 对象已初始化 - + Internal error occurred 发生内部错误 - + MixIn count is too big MixIn计数过大 - + Bad address 地址错误 - + Transaction size is too big 交易规模过大 - + Wrong amount 数额错误 - + Sum overflow 总和溢位 - + The destination is empty 目的地不存在 - + Impossible to cancel transaction 无法取消交易 - + The wallet is in wrong state (maybe loading or saving), try again later 钱包状态有误(可能正在加载或保存中),请稍后再试 - + The operation you've requested has been cancelled 您请求的操作已取消 - + Transaction transfer impossible 无法进行交易转移 - + Wrong version 版本错误 - + Transaction fee is too small 交易费用太小 - + Cannot generate new key 无法生成新的密钥 - + Index is out of range 指数超出范围 - + Address already exists 地址已存在 - + The wallet is in tracking mode 钱包处于跟踪模式 - + Wrong parameters passed 传递的参数错误 - + Object not found 对象未找到 - + Requested wallet not found 请求的钱包未找到 - + Change address required 需要更改地址 - + Change address not found 更改地址未找到 - + Destination address required 需要目标地址 - + Destination address not found 目标地址未找到 - + Wrong payment id format 付款ID格式错误 - + Wrong transaction extra format 交易额外格式错误 - + Unknown error 未知错误 - + Warning: last block was received %1 hours %2 minutes ago 系统提醒:上个区块已于%1小时%2分钟前收到 - + Wallet synchronized. Height: %1 | Time (UTC): %2%3 钱包已同步。高度:%1 | 时间(UTC):%2%3 - + Mnemonic seed is not correct 助记种子不正确 - + There must be an error in mnemonic seed. Make sure you entered it correctly. 助记种子有误,请确保输入正确的数据。