aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt10
-rw-r--r--Makefile10
-rw-r--r--README.i18n.md43
-rw-r--r--contrib/epee/include/console_handler.h12
-rw-r--r--contrib/epee/include/misc_log_ex.h1
-rw-r--r--contrib/epee/include/net/abstract_tcp_server2.inl6
-rw-r--r--contrib/epee/include/net/http_protocol_handler.inl2
-rw-r--r--contrib/epee/include/net/levin_client.inl4
-rw-r--r--contrib/epee/include/net/levin_client_async.h2
-rw-r--r--contrib/epee/include/net/levin_helper.h4
-rw-r--r--contrib/epee/include/net/levin_protocol_handler.h4
-rw-r--r--contrib/epee/include/net/levin_protocol_handler_async.h35
-rw-r--r--contrib/epee/include/net/net_helper.h2
-rw-r--r--contrib/epee/include/net/net_utils_base.h8
-rw-r--r--contrib/epee/include/readline_buffer.h13
-rw-r--r--contrib/epee/include/serialization/keyvalue_serialization.h7
-rw-r--r--contrib/epee/include/serialization/keyvalue_serialization_overloads.h1
-rw-r--r--contrib/epee/include/storages/portable_storage.h2
-rw-r--r--contrib/epee/src/mlog.cpp4
-rw-r--r--contrib/epee/src/readline_buffer.cpp121
-rwxr-xr-xcontrib/fuzz_testing/fuzz.sh21
-rw-r--r--src/blockchain_db/blockchain_db.cpp1
-rw-r--r--src/blockchain_db/lmdb/db_lmdb.cpp1
-rw-r--r--src/common/dns_utils.cpp54
-rw-r--r--src/common/dns_utils.h7
-rw-r--r--src/common/scoped_message_writer.h2
-rw-r--r--src/common/stack_trace.cpp5
-rw-r--r--src/common/stack_trace.h1
-rw-r--r--src/common/util.h9
-rw-r--r--src/cryptonote_basic/cryptonote_basic_impl.cpp8
-rw-r--r--src/cryptonote_basic/cryptonote_basic_impl.h13
-rw-r--r--src/cryptonote_basic/cryptonote_format_utils.h1
-rw-r--r--src/cryptonote_basic/miner.cpp116
-rw-r--r--src/cryptonote_core/blockchain.cpp31
-rw-r--r--src/cryptonote_core/blockchain.h7
-rw-r--r--src/cryptonote_core/cryptonote_core.cpp25
-rw-r--r--src/cryptonote_core/cryptonote_core.h9
-rw-r--r--src/cryptonote_core/cryptonote_tx_utils.cpp2
-rw-r--r--src/cryptonote_core/cryptonote_tx_utils.h1
-rw-r--r--src/cryptonote_core/tx_pool.cpp2
-rw-r--r--src/cryptonote_core/tx_pool.h1
-rw-r--r--src/cryptonote_protocol/cryptonote_protocol_handler-base.cpp10
-rw-r--r--src/cryptonote_protocol/cryptonote_protocol_handler.inl8
-rw-r--r--src/daemon/command_parser_executor.cpp3
-rw-r--r--src/daemon/daemon.cpp2
-rw-r--r--src/daemon/rpc_command_executor.cpp16
-rw-r--r--src/daemon/rpc_command_executor.h5
-rw-r--r--src/daemonizer/posix_daemonizer.inl12
-rw-r--r--src/daemonizer/posix_fork.cpp56
-rw-r--r--src/daemonizer/posix_fork.h15
-rw-r--r--src/mnemonics/electrum-words.cpp5
-rw-r--r--src/mnemonics/electrum-words.h2
-rw-r--r--src/p2p/connection_basic.cpp10
-rw-r--r--src/p2p/connection_basic.hpp4
-rw-r--r--src/p2p/net_node.h3
-rw-r--r--src/p2p/net_node.inl38
-rw-r--r--src/p2p/net_peerlist_boost_serialization.h12
-rw-r--r--src/p2p/network_throttle-detail.cpp8
-rw-r--r--src/p2p/network_throttle-detail.hpp2
-rw-r--r--src/p2p/network_throttle.cpp20
-rw-r--r--src/p2p/network_throttle.hpp11
-rw-r--r--src/p2p/p2p_protocol_defs.h14
-rw-r--r--src/rpc/core_rpc_server.cpp26
-rw-r--r--src/rpc/core_rpc_server.h2
-rw-r--r--src/rpc/core_rpc_server_commands_defs.h21
-rw-r--r--src/simplewallet/simplewallet.cpp152
-rw-r--r--src/wallet/api/wallet.cpp8
-rw-r--r--src/wallet/wallet2.cpp98
-rw-r--r--src/wallet/wallet2.h2
-rw-r--r--src/wallet/wallet_args.cpp6
-rw-r--r--src/wallet/wallet_rpc_server.cpp109
-rw-r--r--src/wallet/wallet_rpc_server.h2
-rw-r--r--src/wallet/wallet_rpc_server_commands_defs.h26
-rw-r--r--tests/CMakeLists.txt2
-rw-r--r--tests/data/fuzz/block/BLOCK1bin0 -> 205 bytes
-rw-r--r--tests/data/fuzz/block/BLOCK2bin0 -> 252 bytes
-rw-r--r--tests/data/fuzz/cold-outputs/OUTPUTS1bin0 -> 7 bytes
-rw-r--r--tests/data/fuzz/cold-outputs/OUTPUTS2bin0 -> 256 bytes
-rw-r--r--tests/data/fuzz/cold-transaction/CTX1bin0 -> 1073 bytes
-rw-r--r--tests/data/fuzz/signature/SIG10
-rw-r--r--tests/data/fuzz/signature/SIG21
-rw-r--r--tests/data/fuzz/transaction/TX1bin0 -> 95 bytes
-rw-r--r--tests/data/fuzz/transaction/TX2bin0 -> 13255 bytes
-rw-r--r--tests/fuzz/CMakeLists.txt91
-rw-r--r--tests/fuzz/block.cpp67
-rw-r--r--tests/fuzz/cold-outputs.cpp108
-rw-r--r--tests/fuzz/cold-transaction.cpp110
-rw-r--r--tests/fuzz/fuzzer.cpp96
-rw-r--r--tests/fuzz/fuzzer.h38
-rw-r--r--tests/fuzz/signature.cpp105
-rw-r--r--tests/fuzz/transaction.cpp67
-rw-r--r--translations/monero.ts1356
-rw-r--r--translations/monero_fr.ts2803
-rw-r--r--translations/monero_it.ts2761
-rw-r--r--utils/systemd/monerod.service11
95 files changed, 7900 insertions, 1032 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a8060f90c..45745abee 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -86,6 +86,10 @@ if (ARM_ID STREQUAL "aarch64" OR ARM_ID STREQUAL "arm64" OR ARM_ID STREQUAL "arm
set(ARCH "armv8-a")
endif()
+if(ARCH_ID STREQUAL "ppc64le")
+ set(PPC64LE 1)
+endif()
+
if(WIN32 OR ARM)
set(OPT_FLAGS_RELEASE "-O2")
else()
@@ -386,6 +390,8 @@ else()
message(STATUS "Building on ${CMAKE_SYSTEM_PROCESSOR} for ${ARCH}")
if(ARCH STREQUAL "default")
set(ARCH_FLAG "")
+ elseif(PPC64LE)
+ set(ARCH_FLAG "-mcpu=${ARCH}")
else()
set(ARCH_FLAG "-march=${ARCH}")
endif()
@@ -442,10 +448,12 @@ else()
option(NO_AES "Explicitly disable AES support" ${NO_AES})
- if(NOT NO_AES AND NOT ARM)
+ if(NOT NO_AES AND NOT ARM AND NOT PPC64LE)
message(STATUS "AES support enabled")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maes")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maes")
+ elseif(PPC64LE)
+ message(STATUS "AES support not available on ppc64le")
elseif(ARM6)
message(STATUS "AES support not available on ARMv6")
elseif(ARM7)
diff --git a/Makefile b/Makefile
index 9344f387c..4f6e6465f 100644
--- a/Makefile
+++ b/Makefile
@@ -41,7 +41,11 @@ debug-test:
debug-all:
mkdir -p build/debug
- cd build/debug && cmake -D BUILD_TESTS=ON -D CMAKE_BUILD_TYPE=Debug ../.. && $(MAKE)
+ cd build/debug && cmake -D BUILD_TESTS=ON -D BUILD_SHARED_LIBS=OFF -D CMAKE_BUILD_TYPE=Debug ../.. && $(MAKE)
+
+debug-static-all:
+ mkdir -p build/debug
+ cd build/debug && cmake -D BUILD_TESTS=ON -D STATIC=ON -D CMAKE_BUILD_TYPE=Debug ../.. && $(MAKE)
cmake-release:
mkdir -p build/release
@@ -108,6 +112,10 @@ release-static-win32:
mkdir -p build/release
cd build/release && cmake -G "MSYS Makefiles" -D STATIC=ON -D ARCH="i686" -D BUILD_64=OFF -D CMAKE_BUILD_TYPE=Release -D BUILD_TAG="win-x32" -D CMAKE_TOOLCHAIN_FILE=../../cmake/32-bit-toolchain.cmake -D MSYS2_FOLDER=c:/msys32 ../.. && $(MAKE)
+fuzz:
+ mkdir -p build/fuzz
+ cd build/fuzz && cmake -D BUILD_TESTS=ON -D USE_LTO=OFF -D CMAKE_C_COMPILER=afl-gcc -D CMAKE_CXX_COMPILER=afl-g++ -D ARCH="x86-64" -D CMAKE_BUILD_TYPE=fuzz -D BUILD_TAG="linux-x64" ../.. && $(MAKE)
+
clean:
@echo "WARNING: Back-up your wallet if it exists within ./build!" ; \
read -r -p "This will destroy the build directory, continue (y/N)?: " CONTINUE; \
diff --git a/README.i18n.md b/README.i18n.md
index 755c5cf38..65f87cda2 100644
--- a/README.i18n.md
+++ b/README.i18n.md
@@ -1,45 +1,44 @@
+Monero daemon internationalization
+==================================
+
The Monero command line tools can be translated in various languages.
-In order to use the same translation workflow as the future GUI, they
-use Qt Linguist translation files. However, to avoid the dependencies
-on Qt this normally implies, they use a custom loader to read those
-files at runtime. In order to update, or build translations files, you
-do need to have Qt tools installed, however. For translating, you need
-either the Qt Linguist GUI, or another tool that supports Qt ts files,
-such as Transifex. To run, you do not need anything Qt.
+
+In order to use the same translation workflow as the [Monero Core GUI](https://github.com/monero-project/monero-core), they use Qt Linguist translation files. However, to avoid the dependencies on Qt this normally implies, they use a custom loader to read those files at runtime.
+
+### Tools for translators
+
+In order to create, update or build translations files, you need to have Qt tools installed. For translating, you need either the **Qt Linguist GUI** ([part of QT Creator](https://www.qt.io/download-open-source/#allDownloadsDiv-9) or a [3rd-party standalone version](https://github.com/lelegard/qtlinguist-installers/releases)), or another tool that supports Qt ts files, such as Transifex. The files are XML, so they can be edited in any plain text editor if needed.
+
+### Creating / modifying translations
+
+You do not need anything from Qt in order to use the final translations.
To update ts files after changing source code:
- ./utils/translations/update-translations.sh
+ ./utils/translations/update-translations.sh
To add a new language, eg Spanish (ISO code es):
- cp translations/monero.ts translations/monero_es.ts
+ cp translations/monero.ts translations/monero_es.ts
To edit translations for Spanish:
- linguist translations/monero_es.ts
+ linguist translations/monero_es.ts
To build translations after modifying them:
- ./utils/translations/build-translations.sh
+ ./utils/translations/build-translations.sh
To test a translation:
- LANG=es ./build/release/bin/monero-wallet-cli
+ LANG=es ./build/release/bin/monero-wallet-cli
-To add new translatable sources in the source:
+To add new translatable strings in the source code:
- Use the tr(string) function if possible. If the code is in a class,
- and this class doesn't already have a tr() static function, add one,
- which uses a context named after what lupdate uses for the context,
- usually the fully qualified class name (eg, cryptonote::simple_wallet).
- If you need to use tr in code that's not in a class, you can use the
- fully qualified version (eg, simple_wallet::tr) of the one matching
- the context you want.
- Use QT_TRANSLATE_NOOP(string) if you want to specify a context manually.
+Use the `tr(string)` function if possible. If the code is in a class, and this class doesn't already have a `tr()` static function, add one, which uses a context named after what `lupdate` uses for the context, usually the fully qualified class name (eg, `cryptonote::simple_wallet`). If you need to use `tr()` in code that's not in a class, you can use the fully qualified version (eg, `simple_wallet::tr`) of the one matching the context you want. Use `QT_TRANSLATE_NOOP(string)` if you want to specify a context manually.
If you're getting messages of the form:
- Class 'cryptonote::simple_wallet' lacks Q_OBJECT macro
+ Class 'cryptonote::simple_wallet' lacks Q_OBJECT macro
all is fine, we don't actually need that here.
diff --git a/contrib/epee/include/console_handler.h b/contrib/epee/include/console_handler.h
index bb20faa65..e780ad4de 100644
--- a/contrib/epee/include/console_handler.h
+++ b/contrib/epee/include/console_handler.h
@@ -315,7 +315,11 @@ namespace epee
if (!m_prompt.empty())
{
#ifdef HAVE_READLINE
- m_stdin_reader.get_readline_buffer().set_prompt(m_prompt);
+ std::string color_prompt = "\001\033[1;33m\002" + m_prompt;
+ if (' ' != m_prompt.back())
+ color_prompt += " ";
+ color_prompt += "\001\033[0m\002";
+ m_stdin_reader.get_readline_buffer().set_prompt(color_prompt);
#else
epee::set_console_color(epee::console_color_yellow, true);
std::cout << m_prompt;
@@ -370,6 +374,9 @@ namespace epee
}
else
{
+#ifdef HAVE_READLINE
+ rdln::suspend_readline pause_readline;
+#endif
std::cout << "unknown command: " << command << std::endl;
std::cout << usage;
}
@@ -473,6 +480,9 @@ namespace epee
lookup::mapped_type & vt = m_command_handlers[cmd];
vt.first = hndlr;
vt.second = usage;
+#ifdef HAVE_READLINE
+ rdln::readline_buffer::add_completion(cmd);
+#endif
}
bool process_command_vec(const std::vector<std::string>& cmd)
diff --git a/contrib/epee/include/misc_log_ex.h b/contrib/epee/include/misc_log_ex.h
index 6eeb1441f..ec4bcbe2d 100644
--- a/contrib/epee/include/misc_log_ex.h
+++ b/contrib/epee/include/misc_log_ex.h
@@ -60,6 +60,7 @@
#define MCDEBUG(cat,x) CLOG(DEBUG,cat) << x
#define MCTRACE(cat,x) CLOG(TRACE,cat) << x
#define MCLOG(level,cat,x) ELPP_WRITE_LOG(el::base::Writer, level, el::base::DispatchAction::NormalLog, cat) << x
+#define MCLOG_FILE(level,cat,x) ELPP_WRITE_LOG(el::base::Writer, level, el::base::DispatchAction::FileOnlyLog, cat) << x
#define MCLOG_COLOR(level,cat,color,x) MCLOG(level,cat,"\033[1;" color "m" << x << "\033[0m")
#define MCLOG_RED(level,cat,x) MCLOG_COLOR(level,cat,"31",x)
diff --git a/contrib/epee/include/net/abstract_tcp_server2.inl b/contrib/epee/include/net/abstract_tcp_server2.inl
index 0fbd9ed28..61276e761 100644
--- a/contrib/epee/include/net/abstract_tcp_server2.inl
+++ b/contrib/epee/include/net/abstract_tcp_server2.inl
@@ -209,14 +209,14 @@ PRAGMA_WARNING_DISABLE_VS(4355)
bool connection<t_protocol_handler>::add_ref()
{
TRY_ENTRY();
- //_dbg3("[sock " << socket_.native_handle() << "] add_ref, m_peer_number=" << mI->m_peer_number);
- CRITICAL_REGION_LOCAL(m_self_refs_lock);
- //_dbg3("[sock " << socket_.native_handle() << "] add_ref 2, m_peer_number=" << mI->m_peer_number);
// Use safe_shared_from_this, because of this is public method and it can be called on the object being deleted
auto self = safe_shared_from_this();
if(!self)
return false;
+ //_dbg3("[sock " << socket_.native_handle() << "] add_ref, m_peer_number=" << mI->m_peer_number);
+ CRITICAL_REGION_LOCAL(self->m_self_refs_lock);
+ //_dbg3("[sock " << socket_.native_handle() << "] add_ref 2, m_peer_number=" << mI->m_peer_number);
if(m_was_shutdown)
return false;
m_self_refs.push_back(self);
diff --git a/contrib/epee/include/net/http_protocol_handler.inl b/contrib/epee/include/net/http_protocol_handler.inl
index d9eca2479..c92a13bcc 100644
--- a/contrib/epee/include/net/http_protocol_handler.inl
+++ b/contrib/epee/include/net/http_protocol_handler.inl
@@ -547,7 +547,7 @@ namespace net_utils
LOG_PRINT_L3("HTTP_RESPONSE_HEAD: << \r\n" << response_data);
m_psnd_hndlr->do_send((void*)response_data.data(), response_data.size());
- if(response.m_body.size())
+ if(response.m_body.size() && (query_info.m_http_method != http::http_method_head))
m_psnd_hndlr->do_send((void*)response.m_body.data(), response.m_body.size());
return res;
}
diff --git a/contrib/epee/include/net/levin_client.inl b/contrib/epee/include/net/levin_client.inl
index 50a01aaa5..ab7c32c32 100644
--- a/contrib/epee/include/net/levin_client.inl
+++ b/contrib/epee/include/net/levin_client.inl
@@ -99,7 +99,7 @@ int levin_client_impl::invoke(int command, const std::string& in_buff, std::stri
if(head.m_signature!=LEVIN_SIGNATURE)
{
- LOG_PRINT_L1("Signature missmatch in response");
+ LOG_PRINT_L1("Signature mismatch in response");
return -1;
}
@@ -160,7 +160,7 @@ inline
if(head.m_signature!=LEVIN_SIGNATURE)
{
- LOG_PRINT_L1("Signature missmatch in response");
+ LOG_PRINT_L1("Signature mismatch in response");
return -1;
}
diff --git a/contrib/epee/include/net/levin_client_async.h b/contrib/epee/include/net/levin_client_async.h
index 4b48070d6..337d345c4 100644
--- a/contrib/epee/include/net/levin_client_async.h
+++ b/contrib/epee/include/net/levin_client_async.h
@@ -408,7 +408,7 @@ namespace levin
if(head.m_signature!=LEVIN_SIGNATURE)
{
- LOG_ERROR("Signature missmatch in response");
+ LOG_ERROR("Signature mismatch in response");
return false;
}
diff --git a/contrib/epee/include/net/levin_helper.h b/contrib/epee/include/net/levin_helper.h
index c51d7244b..05560dd90 100644
--- a/contrib/epee/include/net/levin_helper.h
+++ b/contrib/epee/include/net/levin_helper.h
@@ -94,7 +94,7 @@ namespace levin
}
if(head.m_cb != buff.size()-sizeof(levin::bucket_head))
{
- LOG_PRINT_L3("sizes missmatch, at load_struct_from_levin_message");
+ LOG_PRINT_L3("sizes mismatch, at load_struct_from_levin_message");
return false;
}
@@ -121,7 +121,7 @@ namespace levin
}
if(head.m_cb != buff.size()-sizeof(levin::bucket_head))
{
- LOG_ERROR("sizes missmatch, at load_struct_from_levin_message");
+ LOG_ERROR("sizes mismatch, at load_struct_from_levin_message");
return false;
}
diff --git a/contrib/epee/include/net/levin_protocol_handler.h b/contrib/epee/include/net/levin_protocol_handler.h
index 3e1b8493a..fbc9727e2 100644
--- a/contrib/epee/include/net/levin_protocol_handler.h
+++ b/contrib/epee/include/net/levin_protocol_handler.h
@@ -103,7 +103,7 @@ namespace levin
{
if(m_cach_in_buffer.size() >= sizeof(uint64_t) && *((uint64_t*)m_cach_in_buffer.data()) != LEVIN_SIGNATURE)
{
- LOG_ERROR_CC(m_conn_context, "Signature missmatch on accepted connection");
+ LOG_ERROR_CC(m_conn_context, "Signature mismatch on accepted connection");
return false;
}
is_continue = false;
@@ -113,7 +113,7 @@ namespace levin
bucket_head* phead = (bucket_head*)m_cach_in_buffer.data();
if(LEVIN_SIGNATURE != phead->m_signature)
{
- LOG_ERROR_CC(m_conn_context, "Signature missmatch on accepted connection");
+ LOG_ERROR_CC(m_conn_context, "Signature mismatch on accepted connection");
return false;
}
m_current_head = *phead;
diff --git a/contrib/epee/include/net/levin_protocol_handler_async.h b/contrib/epee/include/net/levin_protocol_handler_async.h
index 5ef782206..8aa0faba1 100644
--- a/contrib/epee/include/net/levin_protocol_handler_async.h
+++ b/contrib/epee/include/net/levin_protocol_handler_async.h
@@ -144,7 +144,6 @@ public:
virtual void cancel()=0;
virtual bool cancel_timer()=0;
virtual void reset_timer()=0;
- virtual void timeout_handler(const boost::system::error_code& error)=0;
};
template <class callback_t>
struct anvoke_handler: invoke_response_handler_base
@@ -157,9 +156,15 @@ public:
{
MDEBUG(con.get_context_ref() << "anvoke_handler, timeout: " << timeout);
m_timer.expires_from_now(boost::posix_time::milliseconds(timeout));
- m_timer.async_wait([this](const boost::system::error_code& ec)
+ m_timer.async_wait([&con, command, cb, timeout](const boost::system::error_code& ec)
{
- timeout_handler(ec);
+ if(ec == boost::asio::error::operation_aborted)
+ return;
+ MINFO(con.get_context_ref() << "Timeout on invoke operation happened, command: " << command << " timeout: " << timeout);
+ std::string fake;
+ cb(LEVIN_ERROR_CONNECTION_TIMEDOUT, fake, con.get_context_ref());
+ con.close();
+ con.finish_outer_call();
});
m_timer_started = true;
}
@@ -174,16 +179,6 @@ public:
bool m_timer_cancelled;
uint64_t m_timeout;
int m_command;
- virtual void timeout_handler(const boost::system::error_code& error)
- {
- if(error == boost::asio::error::operation_aborted)
- return;
- MINFO(m_con.get_context_ref() << "Timeout on invoke operation happened, command: " << m_command << " timeout: " << m_timeout);
- std::string fake;
- m_cb(LEVIN_ERROR_CONNECTION_TIMEDOUT, fake, m_con.get_context_ref());
- m_con.close();
- m_con.finish_outer_call();
- }
virtual bool handle(int res, const std::string& buff, typename async_protocol_handler::connection_context& context)
{
if(!cancel_timer())
@@ -220,10 +215,20 @@ public:
boost::system::error_code ignored_ec;
if (!m_cancel_timer_called && m_timer.cancel(ignored_ec) > 0)
{
+ callback_t& cb = m_cb;
+ uint64_t timeout = m_timeout;
+ async_protocol_handler& con = m_con;
+ int command = m_command;
m_timer.expires_from_now(boost::posix_time::milliseconds(m_timeout));
- m_timer.async_wait([this](const boost::system::error_code& ec)
+ m_timer.async_wait([&con, cb, command, timeout](const boost::system::error_code& ec)
{
- timeout_handler(ec);
+ if(ec == boost::asio::error::operation_aborted)
+ return;
+ MINFO(con.get_context_ref() << "Timeout on invoke operation happened, command: " << command << " timeout: " << timeout);
+ std::string fake;
+ cb(LEVIN_ERROR_CONNECTION_TIMEDOUT, fake, con.get_context_ref());
+ con.close();
+ con.finish_outer_call();
});
}
}
diff --git a/contrib/epee/include/net/net_helper.h b/contrib/epee/include/net/net_helper.h
index 432169990..1d808cc4c 100644
--- a/contrib/epee/include/net/net_helper.h
+++ b/contrib/epee/include/net/net_helper.h
@@ -473,7 +473,7 @@ namespace net_utils
if(bytes_transfered != buff.size())
{
- LOG_ERROR("Transferred missmatch with transfer_at_least value: m_bytes_transferred=" << bytes_transfered << " at_least value=" << buff.size());
+ LOG_ERROR("Transferred mismatch with transfer_at_least value: m_bytes_transferred=" << bytes_transfered << " at_least value=" << buff.size());
return false;
}
diff --git a/contrib/epee/include/net/net_utils_base.h b/contrib/epee/include/net/net_utils_base.h
index 1884412dc..ef3a1d146 100644
--- a/contrib/epee/include/net/net_utils_base.h
+++ b/contrib/epee/include/net/net_utils_base.h
@@ -115,10 +115,9 @@ namespace net_utils
std::string host_str() const { return (*this) ? (*this)->host_str() : "<none>"; }
bool is_loopback() const { return (*this)->is_loopback(); }
bool is_local() const { return (*this)->is_local(); }
- const std::type_info &type() const { return typeid(**this); }
uint8_t get_type_id() const { return (*this)->get_type_id(); }
- template<typename Type> Type &as() { if (type() != typeid(Type)) throw std::runtime_error("Bad type"); return *(Type*)get(); }
- template<typename Type> const Type &as() const { if (type() != typeid(Type)) throw std::runtime_error("Bad type"); return *(const Type*)get(); }
+ template<typename Type> Type &as() { if (get_type_id() != Type::ID) throw std::runtime_error("Bad type"); return *(Type*)get(); }
+ template<typename Type> const Type &as() const { if (get_type_id() != Type::ID) throw std::runtime_error("Bad type"); return *(const Type*)get(); }
BEGIN_KV_SERIALIZE_MAP()
uint8_t type = is_store ? this_ref.get_type_id() : 0;
@@ -156,7 +155,6 @@ namespace net_utils
const network_address m_remote_address;
const bool m_is_income;
const time_t m_started;
- bool m_in_timedsync;
time_t m_last_recv;
time_t m_last_send;
uint64_t m_recv_cnt;
@@ -172,7 +170,6 @@ namespace net_utils
m_remote_address(remote_address),
m_is_income(is_income),
m_started(time(NULL)),
- m_in_timedsync(false),
m_last_recv(last_recv),
m_last_send(last_send),
m_recv_cnt(recv_cnt),
@@ -185,7 +182,6 @@ namespace net_utils
m_remote_address(new ipv4_network_address(0,0)),
m_is_income(false),
m_started(time(NULL)),
- m_in_timedsync(false),
m_last_recv(0),
m_last_send(0),
m_recv_cnt(0),
diff --git a/contrib/epee/include/readline_buffer.h b/contrib/epee/include/readline_buffer.h
index 916d14f01..8dd082a70 100644
--- a/contrib/epee/include/readline_buffer.h
+++ b/contrib/epee/include/readline_buffer.h
@@ -3,6 +3,8 @@
#include <streambuf>
#include <sstream>
#include <iostream>
+#include <vector>
+#include <algorithm>
namespace rdln
{
@@ -19,12 +21,23 @@ namespace rdln
}
void get_line(std::string& line) const;
void set_prompt(const std::string& prompt);
+ static void add_completion(const std::string& command)
+ {
+ if(std::find(completion_commands.begin(), completion_commands.end(), command) != completion_commands.end())
+ return;
+ completion_commands.push_back(command);
+ }
+ static const std::vector<std::string>& get_completions()
+ {
+ return completion_commands;
+ }
protected:
virtual int sync();
private:
std::streambuf* m_cout_buf;
+ static std::vector<std::string> completion_commands;
};
class suspend_readline
diff --git a/contrib/epee/include/serialization/keyvalue_serialization.h b/contrib/epee/include/serialization/keyvalue_serialization.h
index bf2c8dacd..f4442e46c 100644
--- a/contrib/epee/include/serialization/keyvalue_serialization.h
+++ b/contrib/epee/include/serialization/keyvalue_serialization.h
@@ -70,6 +70,12 @@ public: \
#define KV_SERIALIZE_N(varialble, val_name) \
epee::serialization::selector<is_store>::serialize(this_ref.varialble, stg, hparent_section, val_name);
+#define KV_SERIALIZE_OPT_N(variable, val_name, default_value) \
+ do { \
+ if (!epee::serialization::selector<is_store>::serialize(this_ref.variable, stg, hparent_section, val_name)) \
+ this_ref.variable = default_value; \
+ } while (0);
+
#define KV_SERIALIZE_VAL_POD_AS_BLOB_FORCE_N(varialble, val_name) \
epee::serialization::selector<is_store>::serialize_t_val_as_blob(this_ref.varialble, stg, hparent_section, val_name);
@@ -86,6 +92,7 @@ public: \
#define KV_SERIALIZE_VAL_POD_AS_BLOB(varialble) KV_SERIALIZE_VAL_POD_AS_BLOB_N(varialble, #varialble)
#define KV_SERIALIZE_VAL_POD_AS_BLOB_FORCE(varialble) KV_SERIALIZE_VAL_POD_AS_BLOB_FORCE_N(varialble, #varialble) //skip is_pod compile time check
#define KV_SERIALIZE_CONTAINER_POD_AS_BLOB(varialble) KV_SERIALIZE_CONTAINER_POD_AS_BLOB_N(varialble, #varialble)
+#define KV_SERIALIZE_OPT(variable,default_value) KV_SERIALIZE_OPT_N(variable, #variable, default_value)
}
diff --git a/contrib/epee/include/serialization/keyvalue_serialization_overloads.h b/contrib/epee/include/serialization/keyvalue_serialization_overloads.h
index 33486d9ec..1a58cab99 100644
--- a/contrib/epee/include/serialization/keyvalue_serialization_overloads.h
+++ b/contrib/epee/include/serialization/keyvalue_serialization_overloads.h
@@ -126,7 +126,6 @@ namespace epee
static bool serialize_stl_container_pod_val_as_blob(const stl_container& container, t_storage& stg, typename t_storage::hsection hparent_section, const char* pname)
{
if(!container.size()) return true;
- typename stl_container::const_iterator it = container.begin();
std::string mb;
mb.resize(sizeof(typename stl_container::value_type)*container.size());
typename stl_container::value_type* p_elem = (typename stl_container::value_type*)mb.data();
diff --git a/contrib/epee/include/storages/portable_storage.h b/contrib/epee/include/storages/portable_storage.h
index ba9292306..2023e2f2a 100644
--- a/contrib/epee/include/storages/portable_storage.h
+++ b/contrib/epee/include/storages/portable_storage.h
@@ -158,7 +158,7 @@ namespace epee
pbuff->m_signature_b != PORTABLE_STORAGE_SIGNATUREB
)
{
- LOG_ERROR("portable_storage: wrong binary format - signature missmatch");
+ LOG_ERROR("portable_storage: wrong binary format - signature mismatch");
return false;
}
if(pbuff->m_ver != PORTABLE_STORAGE_FORMAT_VER)
diff --git a/contrib/epee/src/mlog.cpp b/contrib/epee/src/mlog.cpp
index 3be992374..39661a1a0 100644
--- a/contrib/epee/src/mlog.cpp
+++ b/contrib/epee/src/mlog.cpp
@@ -94,7 +94,7 @@ static const char *get_default_categories(int level)
categories = "*:WARNING,net:FATAL,net.p2p:FATAL,net.cn:FATAL,global:INFO,verify:FATAL,stacktrace:INFO,logging:INFO";
break;
case 1:
- categories = "*:WARNING,global:INFO,stacktrace:INFO,logging:INFO";
+ categories = "*:WARNING,global:INFO,stacktrace:INFO,logging:INFO,msgwriter:INFO";
break;
case 2:
categories = "*:DEBUG";
@@ -139,7 +139,7 @@ void mlog_configure(const std::string &filename_base, bool console)
{
monero_log = get_default_categories(0);
}
- mlog_set_categories(monero_log);
+ mlog_set_log(monero_log);
}
void mlog_set_categories(const char *categories)
diff --git a/contrib/epee/src/readline_buffer.cpp b/contrib/epee/src/readline_buffer.cpp
index 2d17103b3..ce8260ef6 100644
--- a/contrib/epee/src/readline_buffer.cpp
+++ b/contrib/epee/src/readline_buffer.cpp
@@ -5,6 +5,8 @@
#include <unistd.h>
#include <mutex>
#include <condition_variable>
+#include <boost/thread.hpp>
+#include <boost/algorithm/string.hpp>
static int process_input();
static void install_line_handler();
@@ -12,15 +14,18 @@ static void remove_line_handler();
static std::string last_line;
static std::string last_prompt;
-std::mutex line_mutex, sync_mutex;
+std::mutex line_mutex, sync_mutex, process_mutex;
std::condition_variable have_line;
+std::vector<std::string> rdln::readline_buffer::completion_commands = {"exit"};
+
namespace
{
rdln::readline_buffer* current = NULL;
}
rdln::suspend_readline::suspend_readline()
+: m_buffer(NULL), m_restart(false)
{
m_buffer = current;
if(!m_buffer)
@@ -46,6 +51,7 @@ rdln::readline_buffer::readline_buffer()
void rdln::readline_buffer::start()
{
+ std::unique_lock<std::mutex> lock(process_mutex);
if(m_cout_buf != NULL)
return;
m_cout_buf = std::cout.rdbuf();
@@ -55,6 +61,8 @@ void rdln::readline_buffer::start()
void rdln::readline_buffer::stop()
{
+ std::unique_lock<std::mutex> lock(process_mutex);
+ have_line.notify_all();
if(m_cout_buf == NULL)
return;
std::cout.rdbuf(m_cout_buf);
@@ -74,15 +82,24 @@ void rdln::readline_buffer::set_prompt(const std::string& prompt)
last_prompt = prompt;
if(m_cout_buf == NULL)
return;
+ std::lock_guard<std::mutex> lock(sync_mutex);
rl_set_prompt(last_prompt.c_str());
rl_redisplay();
}
int rdln::readline_buffer::process()
{
+ process_mutex.lock();
if(m_cout_buf == NULL)
+ {
+ process_mutex.unlock();
+ boost::this_thread::sleep_for(boost::chrono::milliseconds( 1 ));
return 0;
- return process_input();
+ }
+ int count = process_input();
+ process_mutex.unlock();
+ boost::this_thread::sleep_for(boost::chrono::milliseconds( 1 ));
+ return count;
}
int rdln::readline_buffer::sync()
@@ -100,8 +117,7 @@ int rdln::readline_buffer::sync()
do
{
- char x = this->sgetc();
- m_cout_buf->sputc(x);
+ m_cout_buf->sputc( this->sgetc() );
}
while ( this->snextc() != EOF );
@@ -114,19 +130,18 @@ int rdln::readline_buffer::sync()
return 0;
}
-static fd_set fds;
-
static int process_input()
{
int count;
struct timeval t;
+ fd_set fds;
t.tv_sec = 0;
t.tv_usec = 1000;
FD_ZERO(&fds);
FD_SET(STDIN_FILENO, &fds);
- count = select(FD_SETSIZE, &fds, NULL, NULL, &t);
+ count = select(STDIN_FILENO + 1, &fds, NULL, NULL, &t);
if (count < 1)
{
return count;
@@ -137,41 +152,55 @@ static int process_input()
static void handle_line(char* line)
{
- if (line != NULL)
- {
- std::lock_guard<std::mutex> lock(sync_mutex);
- rl_set_prompt(last_prompt.c_str());
- rl_already_prompted = 1;
- return;
- }
- rl_set_prompt("");
- rl_replace_line("", 0);
- rl_redisplay();
- rl_set_prompt(last_prompt.c_str());
+ // This function never gets called now as we are trapping newlines.
+ // However, it still needs to be present for readline to know we are
+ // manually handling lines.
+ rl_done = 1;
+ return;
}
static int handle_enter(int x, int y)
{
std::lock_guard<std::mutex> lock(sync_mutex);
char* line = NULL;
-
+
line = rl_copy_text(0, rl_end);
+ std::string test_line = line;
+ boost::trim_right(test_line);
+
+ rl_crlf();
+ rl_on_new_line();
+
+ if(test_line.empty())
+ {
+ last_line = "";
+ rl_set_prompt(last_prompt.c_str());
+ rl_replace_line("", 1);
+ rl_redisplay();
+ have_line.notify_one();
+ return 0;
+ }
+
rl_set_prompt("");
rl_replace_line("", 1);
rl_redisplay();
- if (strcmp(line, "") != 0)
+ if (!test_line.empty())
{
- last_line = line;
- add_history(line);
- have_line.notify_one();
+ last_line = test_line;
+ add_history(test_line.c_str());
+ history_set_pos(history_length);
}
free(line);
-
- rl_set_prompt(last_prompt.c_str());
- rl_redisplay();
-
- rl_done = 1;
+
+ if(last_line != "exit" && last_line != "q")
+ {
+ rl_set_prompt(last_prompt.c_str());
+ rl_replace_line("", 1);
+ rl_redisplay();
+ }
+
+ have_line.notify_one();
return 0;
}
@@ -182,15 +211,51 @@ static int startup_hook()
return 0;
}
+static char* completion_matches(const char* text, int state)
+{
+ static size_t list_index;
+ static size_t len;
+
+ if(state == 0)
+ {
+ list_index = 0;
+ len = strlen(text);
+ }
+
+ const std::vector<std::string>& completions = rdln::readline_buffer::get_completions();
+ for(; list_index<completions.size(); )
+ {
+ const std::string& cmd = completions[list_index++];
+ if(cmd.compare(0, len, text) == 0)
+ {
+ return strdup(cmd.c_str());
+ }
+ }
+
+ return NULL;
+}
+
+static char** attempted_completion(const char* text, int start, int end)
+{
+ rl_attempted_completion_over = 1;
+ return rl_completion_matches(text, completion_matches);
+}
+
static void install_line_handler()
{
rl_startup_hook = startup_hook;
+ rl_attempted_completion_function = attempted_completion;
rl_callback_handler_install("", handle_line);
+ stifle_history(500);
}
static void remove_line_handler()
{
+ rl_replace_line("", 0);
+ rl_set_prompt("");
+ rl_redisplay();
rl_unbind_key(RETURN);
+ rl_unbind_key(NEWLINE);
rl_callback_handler_remove();
}
diff --git a/contrib/fuzz_testing/fuzz.sh b/contrib/fuzz_testing/fuzz.sh
new file mode 100755
index 000000000..35b74f7e4
--- /dev/null
+++ b/contrib/fuzz_testing/fuzz.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+AFLFUZZ=$(which afl-fuzz)
+if ! test -x "$AFLFUZZ"
+then
+ echo "afl-fuzz not found - install american-fuzzy-lop"
+ exit 1
+fi
+
+type="$1"
+if test -z "$type"
+then
+ echo "usage: $0 block|transaction|signature|cold-outputs|cold-transaction"
+ exit 1
+fi
+case "$type" in
+ block|transaction|signature|cold-outputs|cold-transaction) ;;
+ *) echo "usage: $0 block|transaction|signature|cold-outputs|cold-transaction"; exit 1 ;;
+esac
+
+afl-fuzz -i tests/data/fuzz/$type -m 150 -t 250 -o fuzz-out/$type build/fuzz/tests/fuzz/${type}_fuzz_tests
diff --git a/src/blockchain_db/blockchain_db.cpp b/src/blockchain_db/blockchain_db.cpp
index 136d4fa80..a6774a25c 100644
--- a/src/blockchain_db/blockchain_db.cpp
+++ b/src/blockchain_db/blockchain_db.cpp
@@ -31,6 +31,7 @@
#include "blockchain_db.h"
#include "cryptonote_basic/cryptonote_format_utils.h"
#include "profile_tools.h"
+#include "ringct/rctOps.h"
#undef MONERO_DEFAULT_LOG_CATEGORY
#define MONERO_DEFAULT_LOG_CATEGORY "blockchain.db"
diff --git a/src/blockchain_db/lmdb/db_lmdb.cpp b/src/blockchain_db/lmdb/db_lmdb.cpp
index 6bb96d1db..0073ddf54 100644
--- a/src/blockchain_db/lmdb/db_lmdb.cpp
+++ b/src/blockchain_db/lmdb/db_lmdb.cpp
@@ -37,6 +37,7 @@
#include "cryptonote_basic/cryptonote_format_utils.h"
#include "crypto/crypto.h"
#include "profile_tools.h"
+#include "ringct/rctOps.h"
#undef MONERO_DEFAULT_LOG_CATEGORY
#define MONERO_DEFAULT_LOG_CATEGORY "blockchain.db.lmdb"
diff --git a/src/common/dns_utils.cpp b/src/common/dns_utils.cpp
index ab38cbbae..e7ff11c5c 100644
--- a/src/common/dns_utils.cpp
+++ b/src/common/dns_utils.cpp
@@ -26,12 +26,9 @@
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#include "common/command_line.h"
-#include "common/i18n.h"
#include "common/dns_utils.h"
+#include "common/i18n.h"
#include "cryptonote_basic/cryptonote_basic_impl.h"
-#include <cstring>
-#include <sstream>
// check local first (in the event of static or in-source compilation of libunbound)
#include "unbound.h"
@@ -307,12 +304,8 @@ DNSResolver& DNSResolver::instance()
{
boost::lock_guard<boost::mutex> lock(instance_lock);
- static DNSResolver* staticInstance = NULL;
- if (staticInstance == NULL)
- {
- staticInstance = new DNSResolver();
- }
- return *staticInstance;
+ static DNSResolver staticInstance;
+ return staticInstance;
}
DNSResolver DNSResolver::create()
@@ -405,7 +398,7 @@ std::vector<std::string> addresses_from_url(const std::string& url, bool& dnssec
return addresses;
}
-std::string get_account_address_as_str_from_url(const std::string& url, bool& dnssec_valid, bool cli_confirm)
+std::string get_account_address_as_str_from_url(const std::string& url, bool& dnssec_valid, std::function<std::string(const std::string&, const std::vector<std::string>&, bool)> dns_confirm)
{
// attempt to get address from dns query
auto addresses = addresses_from_url(url, dnssec_valid);
@@ -414,44 +407,7 @@ std::string get_account_address_as_str_from_url(const std::string& url, bool& dn
LOG_ERROR("wrong address: " << url);
return {};
}
- // for now, move on only if one address found
- if (addresses.size() > 1)
- {
- LOG_ERROR("not yet supported: Multiple Monero addresses found for given URL: " << url);
- return {};
- }
- if (!cli_confirm)
- return addresses[0];
- // prompt user for confirmation.
- // inform user of DNSSEC validation status as well.
- std::string dnssec_str;
- if (dnssec_valid)
- {
- dnssec_str = tr("DNSSEC validation passed");
- }
- else
- {
- dnssec_str = tr("WARNING: DNSSEC validation was unsuccessful, this address may not be correct!");
- }
- std::stringstream prompt;
- prompt << tr("For URL: ") << url
- << ", " << dnssec_str << std::endl
- << tr(" Monero Address = ") << addresses[0]
- << std::endl
- << tr("Is this OK? (Y/n) ")
- ;
- // prompt the user for confirmation given the dns query and dnssec status
- std::string confirm_dns_ok = command_line::input_line(prompt.str());
- if (std::cin.eof())
- {
- return {};
- }
- if (!command_line::is_yes(confirm_dns_ok))
- {
- std::cout << tr("you have cancelled the transfer request") << std::endl;
- return {};
- }
- return addresses[0];
+ return dns_confirm(url, addresses, dnssec_valid);
}
namespace
diff --git a/src/common/dns_utils.h b/src/common/dns_utils.h
index 53c0c1c7b..61e1358ca 100644
--- a/src/common/dns_utils.h
+++ b/src/common/dns_utils.h
@@ -29,7 +29,6 @@
#include <vector>
#include <string>
-#include "cryptonote_basic/cryptonote_basic.h"
namespace tools
{
@@ -101,7 +100,7 @@ public:
*
* @return A vector of strings containing a TXT record; or an empty vector
*/
- // TODO: modify this to accomodate DNSSEC
+ // TODO: modify this to accommodate DNSSEC
std::vector<std::string> get_txt_record(const std::string& url, bool& dnssec_available, bool& dnssec_valid);
/**
@@ -142,7 +141,7 @@ private:
*
* @return A vector of strings containing the requested record; or an empty vector
*/
- // TODO: modify this to accomodate DNSSEC
+ // TODO: modify this to accommodate DNSSEC
std::vector<std::string> get_record(const std::string& url, int record_type, std::string (*reader)(const char *,size_t), bool& dnssec_available, bool& dnssec_valid);
/**
@@ -163,7 +162,7 @@ namespace dns_utils
std::string address_from_txt_record(const std::string& s);
std::vector<std::string> addresses_from_url(const std::string& url, bool& dnssec_valid);
-std::string get_account_address_as_str_from_url(const std::string& url, bool& dnssec_valid, bool cli_confirm = true);
+std::string get_account_address_as_str_from_url(const std::string& url, bool& dnssec_valid, std::function<std::string(const std::string&, const std::vector<std::string>&, bool)> confirm_dns);
bool load_txt_records_from_dns(std::vector<std::string> &records, const std::vector<std::string> &dns_urls);
diff --git a/src/common/scoped_message_writer.h b/src/common/scoped_message_writer.h
index 7ee4f1379..e31f8f0b2 100644
--- a/src/common/scoped_message_writer.h
+++ b/src/common/scoped_message_writer.h
@@ -91,7 +91,7 @@ public:
{
m_flush = false;
- MCLOG(m_log_level, "msgwriter", m_oss.str());
+ MCLOG_FILE(m_log_level, "msgwriter", m_oss.str());
if (epee::console_color_default == m_color)
{
diff --git a/src/common/stack_trace.cpp b/src/common/stack_trace.cpp
index ef64c20c5..6fdf4dd47 100644
--- a/src/common/stack_trace.cpp
+++ b/src/common/stack_trace.cpp
@@ -30,8 +30,7 @@
#define USE_UNWIND
#endif
-#include "common/stack_trace.h"
-#include "misc_log_ex.h"
+#include <stdexcept>
#ifdef USE_UNWIND
#define UNW_LOCAL_ONLY
#include <libunwind.h>
@@ -40,6 +39,8 @@
#ifndef STATICLIB
#include <dlfcn.h>
#endif
+#include "common/stack_trace.h"
+#include "misc_log_ex.h"
#undef MONERO_DEFAULT_LOG_CATEGORY
#define MONERO_DEFAULT_LOG_CATEGORY "stacktrace"
diff --git a/src/common/stack_trace.h b/src/common/stack_trace.h
index 25eec9fb3..0f6bdc08b 100644
--- a/src/common/stack_trace.h
+++ b/src/common/stack_trace.h
@@ -29,7 +29,6 @@
#ifndef MONERO_EXCEPTION_H
#define MONERO_EXCEPTION_H
-#include <stdexcept>
#include <string>
namespace tools
diff --git a/src/common/util.h b/src/common/util.h
index 4291d7e18..2452bc9d5 100644
--- a/src/common/util.h
+++ b/src/common/util.h
@@ -40,7 +40,6 @@
#include <string>
#include "crypto/hash.h"
-#include "p2p/p2p_protocol_defs.h"
/*! \brief Various Tools
*
@@ -108,14 +107,6 @@ namespace tools
bool sanitize_locale();
- inline crypto::hash get_proof_of_trust_hash(const nodetool::proof_of_trust& pot)
- {
- std::string s;
- s.append(reinterpret_cast<const char*>(&pot.peer_id), sizeof(pot.peer_id));
- s.append(reinterpret_cast<const char*>(&pot.time), sizeof(pot.time));
- return crypto::cn_fast_hash(s.data(), s.size());
- }
-
/*! \brief Defines a signal handler for win32 and *nix
*/
class signal_handler
diff --git a/src/cryptonote_basic/cryptonote_basic_impl.cpp b/src/cryptonote_basic/cryptonote_basic_impl.cpp
index edd67793f..a59f96956 100644
--- a/src/cryptonote_basic/cryptonote_basic_impl.cpp
+++ b/src/cryptonote_basic/cryptonote_basic_impl.cpp
@@ -308,13 +308,13 @@ namespace cryptonote {
, crypto::hash8& payment_id
, bool testnet
, const std::string& str_or_url
- , bool cli_confirm
+ , std::function<std::string(const std::string&, const std::vector<std::string>&, bool)> dns_confirm
)
{
if (get_account_integrated_address_from_str(address, has_payment_id, payment_id, testnet, str_or_url))
return true;
bool dnssec_valid;
- std::string address_str = tools::dns_utils::get_account_address_as_str_from_url(str_or_url, dnssec_valid, cli_confirm);
+ std::string address_str = tools::dns_utils::get_account_address_as_str_from_url(str_or_url, dnssec_valid, dns_confirm);
return !address_str.empty() &&
get_account_integrated_address_from_str(address, has_payment_id, payment_id, testnet, address_str);
}
@@ -323,12 +323,12 @@ namespace cryptonote {
cryptonote::account_public_address& address
, bool testnet
, const std::string& str_or_url
- , bool cli_confirm
+ , std::function<std::string(const std::string&, const std::vector<std::string>&, bool)> dns_confirm
)
{
bool has_payment_id;
crypto::hash8 payment_id;
- return get_account_address_from_str_or_url(address, has_payment_id, payment_id, testnet, str_or_url, cli_confirm);
+ return get_account_address_from_str_or_url(address, has_payment_id, payment_id, testnet, str_or_url, dns_confirm);
}
//--------------------------------------------------------------------------------
bool operator ==(const cryptonote::transaction& a, const cryptonote::transaction& b) {
diff --git a/src/cryptonote_basic/cryptonote_basic_impl.h b/src/cryptonote_basic/cryptonote_basic_impl.h
index 14c03ac4c..9838fcb47 100644
--- a/src/cryptonote_basic/cryptonote_basic_impl.h
+++ b/src/cryptonote_basic/cryptonote_basic_impl.h
@@ -67,6 +67,15 @@ namespace cryptonote {
};
#pragma pack (pop)
+ namespace
+ {
+ std::string return_first_address(const std::string &url, const std::vector<std::string> &addresses, bool dnssec_valid)
+ {
+ if (addresses.empty())
+ return {};
+ return addresses[0];
+ }
+ }
/************************************************************************/
/* Cryptonote helper functions */
@@ -109,14 +118,14 @@ namespace cryptonote {
, crypto::hash8& payment_id
, bool testnet
, const std::string& str_or_url
- , bool cli_confirm = true
+ , std::function<std::string(const std::string&, const std::vector<std::string>&, bool)> dns_confirm = return_first_address
);
bool get_account_address_from_str_or_url(
cryptonote::account_public_address& address
, bool testnet
, const std::string& str_or_url
- , bool cli_confirm = true
+ , std::function<std::string(const std::string&, const std::vector<std::string>&, bool)> dns_confirm = return_first_address
);
bool is_coinbase(const transaction& tx);
diff --git a/src/cryptonote_basic/cryptonote_format_utils.h b/src/cryptonote_basic/cryptonote_format_utils.h
index 5c10907fd..d8ccf8eec 100644
--- a/src/cryptonote_basic/cryptonote_format_utils.h
+++ b/src/cryptonote_basic/cryptonote_format_utils.h
@@ -35,7 +35,6 @@
#include "include_base_utils.h"
#include "crypto/crypto.h"
#include "crypto/hash.h"
-#include "ringct/rctOps.h"
namespace cryptonote
{
diff --git a/src/cryptonote_basic/miner.cpp b/src/cryptonote_basic/miner.cpp
index 6928a0ded..9248e2e1d 100644
--- a/src/cryptonote_basic/miner.cpp
+++ b/src/cryptonote_basic/miner.cpp
@@ -74,8 +74,8 @@ namespace cryptonote
const command_line::arg_descriptor<bool> arg_bg_mining_enable = {"bg-mining-enable", "enable/disable background mining", true, true};
const command_line::arg_descriptor<bool> arg_bg_mining_ignore_battery = {"bg-mining-ignore-battery", "if true, assumes plugged in when unable to query system power status", false, true};
const command_line::arg_descriptor<uint64_t> arg_bg_mining_min_idle_interval_seconds = {"bg-mining-min-idle-interval", "Specify min lookback interval in seconds for determining idle state", miner::BACKGROUND_MINING_DEFAULT_MIN_IDLE_INTERVAL_IN_SECONDS, true};
- const command_line::arg_descriptor<uint8_t> arg_bg_mining_idle_threshold_percentage = {"bg-mining-idle-threshold", "Specify minimum avg idle percentage over lookback interval", miner::BACKGROUND_MINING_DEFAULT_IDLE_THRESHOLD_PERCENTAGE, true};
- const command_line::arg_descriptor<uint8_t> arg_bg_mining_miner_target_percentage = {"bg-mining-miner-target", "Specificy maximum percentage cpu use by miner(s)", miner::BACKGROUND_MINING_DEFAULT_MINING_TARGET_PERCENTAGE, true};
+ const command_line::arg_descriptor<uint16_t> arg_bg_mining_idle_threshold_percentage = {"bg-mining-idle-threshold", "Specify minimum avg idle percentage over lookback interval", miner::BACKGROUND_MINING_DEFAULT_IDLE_THRESHOLD_PERCENTAGE, true};
+ const command_line::arg_descriptor<uint16_t> arg_bg_mining_miner_target_percentage = {"bg-mining-miner-target", "Specificy maximum percentage cpu use by miner(s)", miner::BACKGROUND_MINING_DEFAULT_MINING_TARGET_PERCENTAGE, true};
}
@@ -846,40 +846,100 @@ namespace cryptonote
#elif defined(__linux__)
- // i've only tested on UBUNTU, these paths might be different on other systems
- // need to figure out a way to make this more flexible
- std::string power_supply_path = "";
- const std::string POWER_SUPPLY_STATUS_PATHS[] =
- {
- "/sys/class/power_supply/ACAD/online",
- "/sys/class/power_supply/AC/online",
- "/sys/class/power_supply/AC0/online",
- "/sys/class/power_supply/ADP0/online"
- };
+ // Use the power_supply class http://lxr.linux.no/#linux+v4.10.1/Documentation/power/power_supply_class.txt
+ std::string power_supply_class_path = "/sys/class/power_supply";
- for(const std::string& path : POWER_SUPPLY_STATUS_PATHS)
+ boost::tribool on_battery = boost::logic::tribool(boost::logic::indeterminate);
+ if (boost::filesystem::is_directory(power_supply_class_path))
{
- if( epee::file_io_utils::is_file_exist(path) )
+ const boost::filesystem::directory_iterator end_itr;
+ for (boost::filesystem::directory_iterator iter(power_supply_class_path); iter != end_itr; ++iter)
{
- power_supply_path = path;
- break;
+ const boost::filesystem::path& power_supply_path = iter->path();
+ if (boost::filesystem::is_directory(power_supply_path))
+ {
+ std::ifstream power_supply_present_stream((power_supply_path / "present").string());
+ if (power_supply_present_stream.fail())
+ {
+ LOG_PRINT_L0("Unable to read from " << power_supply_path << " to check if power supply present");
+ continue;
+ }
+
+ if (power_supply_present_stream.get() != '1')
+ {
+ LOG_PRINT_L4("Power supply not present at " << power_supply_path);
+ continue;
+ }
+
+ boost::filesystem::path power_supply_type_path = power_supply_path / "type";
+ if (boost::filesystem::is_regular_file(power_supply_type_path))
+ {
+ std::ifstream power_supply_type_stream(power_supply_type_path.string());
+ if (power_supply_type_stream.fail())
+ {
+ LOG_PRINT_L0("Unable to read from " << power_supply_type_path << " to check power supply type");
+ continue;
+ }
+
+ std::string power_supply_type;
+ std::getline(power_supply_type_stream, power_supply_type);
+
+ // If there is an AC adapter that's present and online we can break early
+ if (boost::starts_with(power_supply_type, "Mains"))
+ {
+ boost::filesystem::path power_supply_online_path = power_supply_path / "online";
+ if (boost::filesystem::is_regular_file(power_supply_online_path))
+ {
+ std::ifstream power_supply_online_stream(power_supply_online_path.string());
+ if (power_supply_online_stream.fail())
+ {
+ LOG_PRINT_L0("Unable to read from " << power_supply_online_path << " to check ac power supply status");
+ continue;
+ }
+
+ if (power_supply_online_stream.get() == '1')
+ {
+ return boost::logic::tribool(false);
+ }
+ }
+ }
+ else if (boost::starts_with(power_supply_type, "Battery") && boost::logic::indeterminate(on_battery))
+ {
+ boost::filesystem::path power_supply_status_path = power_supply_path / "status";
+ if (boost::filesystem::is_regular_file(power_supply_status_path))
+ {
+ std::ifstream power_supply_status_stream(power_supply_status_path.string());
+ if (power_supply_status_stream.fail())
+ {
+ LOG_PRINT_L0("Unable to read from " << power_supply_status_path << " to check battery power supply status");
+ continue;
+ }
+
+ // Possible status are Charging, Full, Discharging, Not Charging, and Unknown
+ // We are only need to handle negative states right now
+ std::string power_supply_status;
+ std::getline(power_supply_status_stream, power_supply_status);
+ if (boost::starts_with(power_supply_status, "Charging") || boost::starts_with(power_supply_status, "Full"))
+ {
+ on_battery = boost::logic::tribool(false);
+ }
+
+ if (boost::starts_with(power_supply_status, "Discharging"))
+ {
+ on_battery = boost::logic::tribool(true);
+ }
+ }
+ }
+ }
+ }
}
}
- if( power_supply_path.empty() )
+ if (boost::logic::indeterminate(on_battery))
{
- LOG_ERROR("Couldn't find battery/power status file, can't determine if plugged in!");
- return boost::logic::tribool(boost::logic::indeterminate);;
+ LOG_ERROR("couldn't query power status from " << power_supply_class_path);
}
-
- std::ifstream power_stream(power_supply_path);
- if( power_stream.fail() )
- {
- LOG_ERROR("failed to open '" << power_supply_path << "'");
- return boost::logic::tribool(boost::logic::indeterminate);;
- }
-
- return boost::logic::tribool( (power_stream.get() != '1') );
+ return on_battery;
#endif
diff --git a/src/cryptonote_core/blockchain.cpp b/src/cryptonote_core/blockchain.cpp
index 745608b9f..792bee8d1 100644
--- a/src/cryptonote_core/blockchain.cpp
+++ b/src/cryptonote_core/blockchain.cpp
@@ -118,6 +118,8 @@ static const struct {
{ 3, 800500, 0, 1472415034 },
{ 4, 801219, 0, 1472415035 },
{ 5, 802660, 0, 1472415036 + 86400*180 }, // add 5 months on testnet to shut the update warning up since there's a large gap to v6
+
+ { 6, 971400, 0, 1501709789 },
};
static const uint64_t testnet_hard_fork_version_1_till = 624633;
@@ -279,7 +281,8 @@ uint64_t Blockchain::get_current_blockchain_height() const
bool Blockchain::init(BlockchainDB* db, const bool testnet, const cryptonote::test_options *test_options)
{
LOG_PRINT_L3("Blockchain::" << __func__);
- CRITICAL_REGION_LOCAL(m_blockchain_lock);
+ CRITICAL_REGION_LOCAL(m_tx_pool);
+ CRITICAL_REGION_LOCAL1(m_blockchain_lock);
bool fakechain = test_options != NULL;
@@ -3097,6 +3100,8 @@ bool Blockchain::handle_block_to_main_chain(const block& bl, const crypto::hash&
CRITICAL_REGION_LOCAL(m_blockchain_lock);
TIME_MEASURE_START(t1);
+ static bool seen_future_version = false;
+
m_db->block_txn_start(true);
if(bl.prev_id != get_tail_id())
{
@@ -3106,6 +3111,18 @@ leave:
return false;
}
+ // warn users if they're running an old version
+ if (!seen_future_version && bl.major_version > m_hardfork->get_ideal_version())
+ {
+ seen_future_version = true;
+ const el::Level level = el::Level::Warning;
+ MCLOG_RED(level, "global", "**********************************************************************");
+ MCLOG_RED(level, "global", "A block was seen on the network with a version higher than the last");
+ MCLOG_RED(level, "global", "known one. This may be an old version of the daemon, and a software");
+ MCLOG_RED(level, "global", "update may be required to sync further. Try running: update check");
+ MCLOG_RED(level, "global", "**********************************************************************");
+ }
+
// this is a cheap test
if (!m_hardfork->check(bl))
{
@@ -3541,19 +3558,17 @@ void Blockchain::set_enforce_dns_checkpoints(bool enforce_checkpoints)
}
//------------------------------------------------------------------
-void Blockchain::block_longhash_worker(const uint64_t height, const std::vector<block> &blocks, std::unordered_map<crypto::hash, crypto::hash> &map) const
+void Blockchain::block_longhash_worker(uint64_t height, const std::vector<block> &blocks, std::unordered_map<crypto::hash, crypto::hash> &map) const
{
TIME_MEASURE_START(t);
slow_hash_allocate_state();
- //FIXME: height should be changing here, as get_block_longhash expects
- // the height of the block passed to it
for (const auto & block : blocks)
{
if (m_cancel)
- return;
+ break;
crypto::hash id = get_block_hash(block);
- crypto::hash pow = get_block_longhash(block, height);
+ crypto::hash pow = get_block_longhash(block, height++);
map.emplace(id, pow);
}
@@ -3745,9 +3760,11 @@ bool Blockchain::prepare_handle_incoming_blocks(const std::list<block_complete_e
if (!blocks_exist)
{
m_blocks_longhash_table.clear();
+ uint64_t thread_height = height;
for (uint64_t i = 0; i < threads; i++)
{
- thread_list.push_back(new boost::thread(attrs, boost::bind(&Blockchain::block_longhash_worker, this, height + (i * batches), std::cref(blocks[i]), std::ref(maps[i]))));
+ thread_list.push_back(new boost::thread(attrs, boost::bind(&Blockchain::block_longhash_worker, this, thread_height, std::cref(blocks[i]), std::ref(maps[i]))));
+ thread_height += blocks[i].size();
}
for (size_t j = 0; j < thread_list.size(); j++)
diff --git a/src/cryptonote_core/blockchain.h b/src/cryptonote_core/blockchain.h
index 56373adf9..564b53af3 100644
--- a/src/cryptonote_core/blockchain.h
+++ b/src/cryptonote_core/blockchain.h
@@ -689,16 +689,15 @@ namespace cryptonote
// user options, must be called before calling init()
- //FIXME: parameter names don't match function definition in .cpp file
/**
* @brief sets various performance options
*
- * @param block_threads max number of threads when preparing blocks for addition
+ * @param maxthreads max number of threads when preparing blocks for addition
* @param blocks_per_sync number of blocks to cache before syncing to database
* @param sync_mode the ::blockchain_db_sync_mode to use
* @param fast_sync sync using built-in block hashes as trusted
*/
- void set_user_options(uint64_t block_threads, uint64_t blocks_per_sync,
+ void set_user_options(uint64_t maxthreads, uint64_t blocks_per_sync,
blockchain_db_sync_mode sync_mode, bool fast_sync);
/**
@@ -847,7 +846,7 @@ namespace cryptonote
* @param blocks the blocks to be hashed
* @param map return-by-reference the hashes for each block
*/
- void block_longhash_worker(const uint64_t height, const std::vector<block> &blocks,
+ void block_longhash_worker(uint64_t height, const std::vector<block> &blocks,
std::unordered_map<crypto::hash, crypto::hash> &map) const;
/**
diff --git a/src/cryptonote_core/cryptonote_core.cpp b/src/cryptonote_core/cryptonote_core.cpp
index c601c066c..62e92ba30 100644
--- a/src/cryptonote_core/cryptonote_core.cpp
+++ b/src/cryptonote_core/cryptonote_core.cpp
@@ -78,6 +78,7 @@ namespace cryptonote
m_last_json_checkpoints_update(0),
m_update_download(0)
{
+ m_checkpoints_updating.clear();
set_cryptonote_protocol(pprotocol);
}
void core::set_cryptonote_protocol(i_cryptonote_protocol* pprotocol)
@@ -413,6 +414,8 @@ namespace cryptonote
if (block_sync_size == 0)
block_sync_size = BLOCKS_SYNCHRONIZING_DEFAULT_COUNT;
+ MGINFO("Loading checkpoints");
+
// load json & DNS checkpoints, and verify them
// with respect to what blocks we already have
CHECK_AND_ASSERT_MES(update_checkpoints(), false, "One or more checkpoints loaded from json or dns conflicted with existing checkpoints.");
@@ -659,6 +662,12 @@ namespace cryptonote
return false;
}
+ if (!check_tx_inputs_ring_members_diff(tx))
+ {
+ MERROR_VER("tx uses duplicate ring members");
+ return false;
+ }
+
if (!check_tx_inputs_keyimages_domain(tx))
{
MERROR_VER("tx uses key image not in the valid domain");
@@ -751,6 +760,22 @@ namespace cryptonote
return true;
}
//-----------------------------------------------------------------------------------------------
+ bool core::check_tx_inputs_ring_members_diff(const transaction& tx) const
+ {
+ const uint8_t version = m_blockchain_storage.get_current_hard_fork_version();
+ if (version >= 6)
+ {
+ for(const auto& in: tx.vin)
+ {
+ CHECKED_GET_SPECIFIC_VARIANT(in, const txin_to_key, tokey_in, false);
+ for (size_t n = 1; n < tokey_in.key_offsets.size(); ++n)
+ if (tokey_in.key_offsets[n] == 0)
+ return false;
+ }
+ }
+ return true;
+ }
+ //-----------------------------------------------------------------------------------------------
bool core::check_tx_inputs_keyimages_domain(const transaction& tx) const
{
std::unordered_set<crypto::key_image> ki;
diff --git a/src/cryptonote_core/cryptonote_core.h b/src/cryptonote_core/cryptonote_core.h
index e5fbf7f91..4ced91e23 100644
--- a/src/cryptonote_core/cryptonote_core.h
+++ b/src/cryptonote_core/cryptonote_core.h
@@ -781,6 +781,15 @@ namespace cryptonote
bool check_tx_inputs_keyimages_diff(const transaction& tx) const;
/**
+ * @brief verify that each ring uses distinct members
+ *
+ * @param tx the transaction to check
+ *
+ * @return false if any ring uses duplicate members, true otherwise
+ */
+ bool check_tx_inputs_ring_members_diff(const transaction& tx) const;
+
+ /**
* @brief verify that each input key image in a transaction is in
* the valid domain
*
diff --git a/src/cryptonote_core/cryptonote_tx_utils.cpp b/src/cryptonote_core/cryptonote_tx_utils.cpp
index 26d5fb767..abb4b31ec 100644
--- a/src/cryptonote_core/cryptonote_tx_utils.cpp
+++ b/src/cryptonote_core/cryptonote_tx_utils.cpp
@@ -265,7 +265,7 @@ namespace cryptonote
// "Shuffle" outs
std::vector<tx_destination_entry> shuffled_dsts(destinations);
- std::sort(shuffled_dsts.begin(), shuffled_dsts.end(), [](const tx_destination_entry& de1, const tx_destination_entry& de2) { return de1.amount < de2.amount; } );
+ std::random_shuffle(shuffled_dsts.begin(), shuffled_dsts.end(), [](int i) { return crypto::rand<int>() % i; });
uint64_t summary_outs_money = 0;
//fill outputs
diff --git a/src/cryptonote_core/cryptonote_tx_utils.h b/src/cryptonote_core/cryptonote_tx_utils.h
index 933070e1e..7aa7c280d 100644
--- a/src/cryptonote_core/cryptonote_tx_utils.h
+++ b/src/cryptonote_core/cryptonote_tx_utils.h
@@ -32,6 +32,7 @@
#include "cryptonote_basic/cryptonote_format_utils.h"
#include <boost/serialization/vector.hpp>
#include <boost/serialization/utility.hpp>
+#include "ringct/rctOps.h"
namespace cryptonote
{
diff --git a/src/cryptonote_core/tx_pool.cpp b/src/cryptonote_core/tx_pool.cpp
index ffb5b478b..33b1d4101 100644
--- a/src/cryptonote_core/tx_pool.cpp
+++ b/src/cryptonote_core/tx_pool.cpp
@@ -225,6 +225,7 @@ namespace cryptonote
meta.last_relayed_time = time(NULL);
meta.relayed = relayed;
meta.do_not_relay = do_not_relay;
+ memset(meta.padding, 0, sizeof(meta.padding));
try
{
CRITICAL_REGION_LOCAL1(m_blockchain);
@@ -261,6 +262,7 @@ namespace cryptonote
meta.last_relayed_time = time(NULL);
meta.relayed = relayed;
meta.do_not_relay = do_not_relay;
+ memset(meta.padding, 0, sizeof(meta.padding));
try
{
diff --git a/src/cryptonote_core/tx_pool.h b/src/cryptonote_core/tx_pool.h
index 1858ccdd8..47a41d070 100644
--- a/src/cryptonote_core/tx_pool.h
+++ b/src/cryptonote_core/tx_pool.h
@@ -493,7 +493,6 @@ private:
*/
std::unordered_set<crypto::hash> m_timed_out_transactions;
- std::string m_config_folder; //!< the folder to save state to
Blockchain& m_blockchain; //!< reference to the Blockchain object
};
}
diff --git a/src/cryptonote_protocol/cryptonote_protocol_handler-base.cpp b/src/cryptonote_protocol/cryptonote_protocol_handler-base.cpp
index e31276031..cb4ec41af 100644
--- a/src/cryptonote_protocol/cryptonote_protocol_handler-base.cpp
+++ b/src/cryptonote_protocol/cryptonote_protocol_handler-base.cpp
@@ -49,8 +49,8 @@
#include "syncobj.h"
-#include "../../contrib/epee/include/net/net_utils_base.h"
-#include "../../contrib/epee/include/misc_log_ex.h"
+#include "net/net_utils_base.h"
+#include "misc_log_ex.h"
#include <boost/lambda/bind.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/uuid/random_generator.hpp>
@@ -69,10 +69,10 @@
#include <boost/asio/basic_socket.hpp>
#include <boost/asio/ip/unicast.hpp>
-#include "../../src/cryptonote_protocol/cryptonote_protocol_handler.h"
-#include "../../src/p2p/network_throttle.hpp"
+#include "cryptonote_protocol_handler.h"
+#include "p2p/network_throttle.hpp"
-#include "../../../src/cryptonote_core/cryptonote_core.h" // e.g. for the send_stop_signal()
+#include "cryptonote_core/cryptonote_core.h" // e.g. for the send_stop_signal()
#undef MONERO_DEFAULT_LOG_CATEGORY
#define MONERO_DEFAULT_LOG_CATEGORY "net.cn"
diff --git a/src/cryptonote_protocol/cryptonote_protocol_handler.inl b/src/cryptonote_protocol/cryptonote_protocol_handler.inl
index 0b99aa7bd..f3d6429a2 100644
--- a/src/cryptonote_protocol/cryptonote_protocol_handler.inl
+++ b/src/cryptonote_protocol/cryptonote_protocol_handler.inl
@@ -41,7 +41,7 @@
#include "cryptonote_basic/cryptonote_format_utils.h"
#include "profile_tools.h"
-#include "../../src/p2p/network_throttle-detail.hpp"
+#include "p2p/network_throttle-detail.hpp"
#undef MONERO_DEFAULT_LOG_CATEGORY
#define MONERO_DEFAULT_LOG_CATEGORY "net.cn"
@@ -192,7 +192,7 @@ namespace cryptonote
cnx.host = cntxt.m_remote_address.host_str();
cnx.ip = "";
cnx.port = "";
- if (cntxt.m_remote_address.type() == typeid(epee::net_utils::ipv4_network_address))
+ if (cntxt.m_remote_address.get_type_id() == epee::net_utils::ipv4_network_address::ID)
{
cnx.ip = cnx.host;
cnx.port = std::to_string(cntxt.m_remote_address.as<epee::net_utils::ipv4_network_address>().port());
@@ -208,7 +208,7 @@ namespace cryptonote
cnx.recv_idle_time = timestamp - cntxt.m_last_recv;
cnx.send_count = cntxt.m_send_cnt;
- cnx.send_idle_time = timestamp;
+ cnx.send_idle_time = timestamp - cntxt.m_last_send;
cnx.state = get_protocol_state_string(cntxt.m_state);
@@ -270,7 +270,7 @@ namespace cryptonote
m_core.set_target_blockchain_height(static_cast<int64_t>(hshd.current_height));
int64_t diff = static_cast<int64_t>(hshd.current_height) - static_cast<int64_t>(m_core.get_current_blockchain_height());
int64_t max_block_height = max(static_cast<int64_t>(hshd.current_height),static_cast<int64_t>(m_core.get_current_blockchain_height()));
- int64_t last_block_v1 = 1009826;
+ int64_t last_block_v1 = m_core.get_testnet() ? 624633 : 1009826;
int64_t diff_v2 = max_block_height > last_block_v1 ? min(abs(diff), max_block_height - last_block_v1) : 0;
MCLOG(is_inital ? el::Level::Info : el::Level::Debug, "global", context << "Sync data returned a new top block candidate: " << m_core.get_current_blockchain_height() << " -> " << hshd.current_height
<< " [Your node is " << std::abs(diff) << " blocks (" << ((abs(diff) - diff_v2) / (24 * 60 * 60 / DIFFICULTY_TARGET_V1)) + (diff_v2 / (24 * 60 * 60 / DIFFICULTY_TARGET_V2)) << " days) "
diff --git a/src/daemon/command_parser_executor.cpp b/src/daemon/command_parser_executor.cpp
index a7caeeffc..d654954ef 100644
--- a/src/daemon/command_parser_executor.cpp
+++ b/src/daemon/command_parser_executor.cpp
@@ -256,7 +256,8 @@ bool t_command_parser_executor::start_mining(const std::vector<std::string>& arg
if(!cryptonote::get_account_integrated_address_from_str(adr, has_payment_id, payment_id, true, args.front()))
{
bool dnssec_valid;
- std::string address_str = tools::dns_utils::get_account_address_as_str_from_url(args.front(), dnssec_valid);
+ std::string address_str = tools::dns_utils::get_account_address_as_str_from_url(args.front(), dnssec_valid,
+ [](const std::string &url, const std::vector<std::string> &addresses, bool dnssec_valid){return addresses[0];});
if(!cryptonote::get_account_integrated_address_from_str(adr, has_payment_id, payment_id, false, address_str))
{
if(!cryptonote::get_account_integrated_address_from_str(adr, has_payment_id, payment_id, true, address_str))
diff --git a/src/daemon/daemon.cpp b/src/daemon/daemon.cpp
index 241cb3883..683eaf4ff 100644
--- a/src/daemon/daemon.cpp
+++ b/src/daemon/daemon.cpp
@@ -41,7 +41,7 @@
#include "daemon/rpc.h"
#include "daemon/command_server.h"
#include "version.h"
-#include "../../contrib/epee/include/syncobj.h"
+#include "syncobj.h"
using namespace epee;
diff --git a/src/daemon/rpc_command_executor.cpp b/src/daemon/rpc_command_executor.cpp
index 1c9cd714d..bf2d8a7b7 100644
--- a/src/daemon/rpc_command_executor.cpp
+++ b/src/daemon/rpc_command_executor.cpp
@@ -369,6 +369,7 @@ bool t_rpc_command_executor::show_status() {
cryptonote::COMMAND_RPC_MINING_STATUS::request mreq;
cryptonote::COMMAND_RPC_MINING_STATUS::response mres;
epee::json_rpc::error error_resp;
+ bool has_mining_info = true;
std::string fail_message = "Problem fetching info";
@@ -384,10 +385,8 @@ bool t_rpc_command_executor::show_status() {
{
return true;
}
- if (!m_rpc_client->rpc_request(mreq, mres, "/mining_status", fail_message.c_str()))
- {
- return true;
- }
+ // mining info is only available non unrestricted RPC mode
+ has_mining_info = m_rpc_client->rpc_request(mreq, mres, "/mining_status", fail_message.c_str());
}
else
{
@@ -425,7 +424,7 @@ bool t_rpc_command_executor::show_status() {
% (unsigned long long)(ires.target_height >= ires.height ? ires.target_height : ires.height)
% get_sync_percentage(ires)
% (ires.testnet ? "testnet" : "mainnet")
- % (mining_busy ? "syncing" : mres.active ? ( ( mres.is_background_mining_enabled ? "smart " : "" ) + std::string("mining at ") + get_mining_speed(mres.speed) ) : "not mining")
+ % (!has_mining_info ? "mining info unavailable" : mining_busy ? "syncing" : mres.active ? ( ( mres.is_background_mining_enabled ? "smart " : "" ) + std::string("mining at ") + get_mining_speed(mres.speed) ) : "not mining")
% get_mining_speed(ires.difficulty / ires.target)
% (unsigned)hfres.version
% get_fork_extra_info(hfres.earliest_height, ires.height, ires.target)
@@ -966,7 +965,7 @@ bool t_rpc_command_executor::print_transaction_pool_stats() {
denom = n-1;
for (i=0; i<denom; i++)
times[i] = i * numer / denom;
- times[i] = res.pool_stats.oldest;
+ times[i] = now - res.pool_stats.oldest;
} else
{
numer = now - res.pool_stats.oldest;
@@ -1584,6 +1583,7 @@ bool t_rpc_command_executor::print_blockchain_dynamic_stats(uint64_t nblocks)
double avgreward = 0;
std::vector<uint64_t> sizes;
sizes.reserve(nblocks);
+ uint64_t earliest = std::numeric_limits<uint64_t>::max(), latest = 0;
std::vector<unsigned> major_versions(256, 0), minor_versions(256, 0);
for (const auto &bhr: bhres.headers)
{
@@ -1595,12 +1595,14 @@ bool t_rpc_command_executor::print_blockchain_dynamic_stats(uint64_t nblocks)
static_assert(sizeof(bhr.minor_version) == 1, "major_version expected to be uint8_t");
major_versions[(unsigned)bhr.major_version]++;
minor_versions[(unsigned)bhr.minor_version]++;
+ earliest = std::min(earliest, bhr.timestamp);
+ latest = std::max(latest, bhr.timestamp);
}
avgdiff /= nblocks;
avgnumtxes /= nblocks;
avgreward /= nblocks;
uint64_t median_block_size = epee::misc_utils::median(sizes);
- tools::msg_writer() << "Last " << nblocks << ": avg. diff " << (uint64_t)avgdiff << ", avg num txes " << avgnumtxes
+ tools::msg_writer() << "Last " << nblocks << ": avg. diff " << (uint64_t)avgdiff << ", " << (latest - earliest) / nblocks << " avg sec/block, avg num txes " << avgnumtxes
<< ", avg. reward " << cryptonote::print_money(avgreward) << ", median block size " << median_block_size;
unsigned int max_major = 256, max_minor = 256;
diff --git a/src/daemon/rpc_command_executor.h b/src/daemon/rpc_command_executor.h
index 3f551bd14..0ff03d35a 100644
--- a/src/daemon/rpc_command_executor.h
+++ b/src/daemon/rpc_command_executor.h
@@ -42,10 +42,7 @@
#include "common/common_fwd.h"
#include "common/rpc_client.h"
-#include "misc_log_ex.h"
-#include "cryptonote_core/cryptonote_core.h"
-#include "cryptonote_protocol/cryptonote_protocol_handler.h"
-#include "p2p/net_node.h"
+#include "cryptonote_basic/cryptonote_basic.h"
#include "rpc/core_rpc_server.h"
#undef MONERO_DEFAULT_LOG_CATEGORY
diff --git a/src/daemonizer/posix_daemonizer.inl b/src/daemonizer/posix_daemonizer.inl
index f8be15dda..506c7766f 100644
--- a/src/daemonizer/posix_daemonizer.inl
+++ b/src/daemonizer/posix_daemonizer.inl
@@ -43,6 +43,10 @@ namespace daemonizer
"detach"
, "Run as daemon"
};
+ const command_line::arg_descriptor<std::string> arg_pidfile = {
+ "pidfile"
+ , "File path to write the daemon's PID to (optional, requires --detach)"
+ };
const command_line::arg_descriptor<bool> arg_non_interactive = {
"non-interactive"
, "Run non-interactive"
@@ -55,6 +59,7 @@ namespace daemonizer
)
{
command_line::add_arg(normal_options, arg_detach);
+ command_line::add_arg(normal_options, arg_pidfile);
command_line::add_arg(normal_options, arg_non_interactive);
}
@@ -80,7 +85,12 @@ namespace daemonizer
if (command_line::has_arg(vm, arg_detach))
{
tools::success_msg_writer() << "Forking to background...";
- posix::fork();
+ std::string pidfile;
+ if (command_line::has_arg(vm, arg_pidfile))
+ {
+ pidfile = command_line::get_arg(vm, arg_pidfile);
+ }
+ posix::fork(pidfile);
auto daemon = executor.create_daemon(vm);
return daemon.run();
}
diff --git a/src/daemonizer/posix_fork.cpp b/src/daemonizer/posix_fork.cpp
index 949c0f593..4dff04f3f 100644
--- a/src/daemonizer/posix_fork.cpp
+++ b/src/daemonizer/posix_fork.cpp
@@ -14,18 +14,50 @@
#include <string>
#include <sys/stat.h>
+#ifndef TMPDIR
+#define TMPDIR "/tmp"
+#endif
+
namespace posix {
namespace {
- void quit(std::string const & message)
+ void quit(const std::string & message)
{
LOG_ERROR(message);
throw std::runtime_error(message);
}
}
-void fork()
+void fork(const std::string & pidfile)
{
+ // If a PID file is specified, we open the file here, because
+ // we can't report errors after the fork operation.
+ // When we fork, we close thise file in each of the parent
+ // processes.
+ // Only in the final child process do we write the PID to the
+ // file (and close it).
+ std::ofstream pidofs;
+ if (! pidfile.empty ())
+ {
+ int oldpid;
+ std::ifstream pidrifs;
+ pidrifs.open(pidfile, std::fstream::in);
+ if (! pidrifs.fail())
+ {
+ // Read the PID and send signal 0 to see if the process exists.
+ if (pidrifs >> oldpid && oldpid > 1 && kill(oldpid, 0) == 0)
+ {
+ quit("PID file " + pidfile + " already exists and the PID therein is valid");
+ }
+ pidrifs.close();
+ }
+
+ pidofs.open(pidfile, std::fstream::out | std::fstream::trunc);
+ if (pidofs.fail())
+ {
+ quit("Failed to open specified PID file for writing");
+ }
+ }
// Fork the process and have the parent exit. If the process was started
// from a shell, this returns control to the user. Forking a new process is
// also a prerequisite for the subsequent call to setsid().
@@ -34,7 +66,7 @@ void fork()
if (pid > 0)
{
// We're in the parent process and need to exit.
- //
+ pidofs.close();
// When the exit() function is used, the program terminates without
// invoking local variables' destructors. Only global variables are
// destroyed.
@@ -55,6 +87,7 @@ void fork()
{
if (pid > 0)
{
+ pidofs.close();
exit(0);
}
else
@@ -63,6 +96,13 @@ void fork()
}
}
+ if (! pidofs.fail())
+ {
+ int pid = ::getpid();
+ pidofs << pid << std::endl;
+ pidofs.close();
+ }
+
// Close the standard streams. This decouples the daemon from the terminal
// that started it.
close(0);
@@ -76,12 +116,16 @@ void fork()
}
// Send standard output to a log file.
- const char* output = "/tmp/bitmonero.daemon.stdout.stderr";
+ const char *tmpdir = getenv("TMPDIR");
+ if (!tmpdir)
+ tmpdir = TMPDIR;
+ std::string output = tmpdir;
+ output += "/bitmonero.daemon.stdout.stderr";
const int flags = O_WRONLY | O_CREAT | O_APPEND;
const mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
- if (open(output, flags, mode) < 0)
+ if (open(output.c_str(), flags, mode) < 0)
{
- quit("Unable to open output file: " + std::string(output));
+ quit("Unable to open output file: " + output);
}
// Also send standard error to the same log file.
diff --git a/src/daemonizer/posix_fork.h b/src/daemonizer/posix_fork.h
index 459417d25..77ef4cb19 100644
--- a/src/daemonizer/posix_fork.h
+++ b/src/daemonizer/posix_fork.h
@@ -1,21 +1,21 @@
// Copyright (c) 2014-2017, The Monero Project
-//
+//
// All rights reserved.
-//
+//
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
-//
+//
// 1. Redistributions of source code must retain the above copyright notice, this list of
// conditions and the following disclaimer.
-//
+//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
// of conditions and the following disclaimer in the documentation and/or other
// materials provided with the distribution.
-//
+//
// 3. Neither the name of the copyright holder nor the names of its contributors may be
// used to endorse or promote products derived from this software without specific
// prior written permission.
-//
+//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
@@ -27,12 +27,13 @@
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#pragma once
+#include <string>
#ifndef WIN32
namespace posix {
-void fork();
+void fork(const std::string & pidfile);
}
diff --git a/src/mnemonics/electrum-words.cpp b/src/mnemonics/electrum-words.cpp
index ef1100a10..3b1dc53d7 100644
--- a/src/mnemonics/electrum-words.cpp
+++ b/src/mnemonics/electrum-words.cpp
@@ -422,10 +422,11 @@ namespace crypto
* \param seed The seed to check (a space delimited concatenated word list)
* \return true if the seed passed is a old style seed false if not.
*/
- bool get_is_old_style_seed(const std::string &seed)
+ bool get_is_old_style_seed(std::string seed)
{
std::vector<std::string> word_list;
- boost::split(word_list, seed, boost::is_any_of(" "));
+ boost::algorithm::trim(seed);
+ boost::split(word_list, seed, boost::is_any_of(" "), boost::token_compress_on);
return word_list.size() != (seed_length + 1);
}
diff --git a/src/mnemonics/electrum-words.h b/src/mnemonics/electrum-words.h
index 3655dd201..94ce9c200 100644
--- a/src/mnemonics/electrum-words.h
+++ b/src/mnemonics/electrum-words.h
@@ -92,7 +92,7 @@ namespace crypto
* \param seed The seed to check (a space delimited concatenated word list)
* \return true if the seed passed is a old style seed false if not.
*/
- bool get_is_old_style_seed(const std::string &seed);
+ bool get_is_old_style_seed(std::string seed);
}
}
diff --git a/src/p2p/connection_basic.cpp b/src/p2p/connection_basic.cpp
index df34379e2..d4fbc79e1 100644
--- a/src/p2p/connection_basic.cpp
+++ b/src/p2p/connection_basic.cpp
@@ -53,8 +53,8 @@
#include "syncobj.h"
-#include "../../contrib/epee/include/net/net_utils_base.h"
-#include "../../contrib/epee/include/misc_log_ex.h"
+#include "net/net_utils_base.h"
+#include "misc_log_ex.h"
#include <boost/lambda/bind.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/uuid/random_generator.hpp>
@@ -74,11 +74,11 @@
#include <boost/asio/basic_socket.hpp>
#include <boost/asio/ip/unicast.hpp>
-#include "../../contrib/epee/include/net/abstract_tcp_server2.h"
+#include "net/abstract_tcp_server2.h"
// TODO:
-#include "../../src/p2p/network_throttle-detail.hpp"
-#include "../../src/cryptonote_core/cryptonote_core.h"
+#include "network_throttle-detail.hpp"
+#include "cryptonote_core/cryptonote_core.h"
#undef MONERO_DEFAULT_LOG_CATEGORY
#define MONERO_DEFAULT_LOG_CATEGORY "net.p2p"
diff --git a/src/p2p/connection_basic.hpp b/src/p2p/connection_basic.hpp
index bea2df1cd..16de469a7 100644
--- a/src/p2p/connection_basic.hpp
+++ b/src/p2p/connection_basic.hpp
@@ -59,8 +59,8 @@
#include <memory>
-#include "../../contrib/epee/include/net/net_utils_base.h"
-#include "../../contrib/epee/include/syncobj.h"
+#include "net/net_utils_base.h"
+#include "syncobj.h"
namespace epee
{
diff --git a/src/p2p/net_node.h b/src/p2p/net_node.h
index 8798a52e0..ed00de731 100644
--- a/src/p2p/net_node.h
+++ b/src/p2p/net_node.h
@@ -61,8 +61,11 @@ namespace nodetool
template<class base_type>
struct p2p_connection_context_t: base_type //t_payload_net_handler::connection_context //public net_utils::connection_context_base
{
+ p2p_connection_context_t(): support_flags(0), m_in_timedsync(false) {}
+
peerid_type peer_id;
uint32_t support_flags;
+ bool m_in_timedsync;
};
template<class t_payload_net_handler>
diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl
index c250d5185..3cd48ccf0 100644
--- a/src/p2p/net_node.inl
+++ b/src/p2p/net_node.inl
@@ -444,11 +444,11 @@ namespace nodetool
std::vector<std::vector<std::string>> dns_results;
dns_results.resize(m_seed_nodes_list.size());
- std::list<boost::thread*> dns_threads;
+ std::list<boost::thread> dns_threads;
uint64_t result_index = 0;
for (const std::string& addr_str : m_seed_nodes_list)
{
- boost::thread* th = new boost::thread([=, &dns_results, &addr_str]
+ boost::thread th = boost::thread([=, &dns_results, &addr_str]
{
MDEBUG("dns_threads[" << result_index << "] created for: " << addr_str);
// TODO: care about dnssec avail/valid
@@ -474,19 +474,19 @@ namespace nodetool
dns_results[result_index] = addr_list;
});
- dns_threads.push_back(th);
+ dns_threads.push_back(std::move(th));
++result_index;
}
MDEBUG("dns_threads created, now waiting for completion or timeout of " << CRYPTONOTE_DNS_TIMEOUT_MS << "ms");
boost::chrono::system_clock::time_point deadline = boost::chrono::system_clock::now() + boost::chrono::milliseconds(CRYPTONOTE_DNS_TIMEOUT_MS);
uint64_t i = 0;
- for (boost::thread* th : dns_threads)
+ for (boost::thread& th : dns_threads)
{
- if (! th->try_join_until(deadline))
+ if (! th.try_join_until(deadline))
{
MWARNING("dns_threads[" << i << "] timed out, sending interrupt");
- th->interrupt();
+ th.interrupt();
}
++i;
}
@@ -714,6 +714,14 @@ namespace nodetool
template<class t_payload_net_handler>
bool node_server<t_payload_net_handler>::send_stop_signal()
{
+ std::list<boost::uuids::uuid> connection_ids;
+ m_net_server.get_config_object().foreach_connection([&](const p2p_connection_context& cntxt) {
+ connection_ids.push_back(cntxt.m_connection_id);
+ return true;
+ });
+ for (const auto &connection_id: connection_ids)
+ m_net_server.get_config_object().close(connection_id);
+
m_payload_handler.stop();
m_net_server.send_stop_signal();
MDEBUG("[node] Stop signal sent");
@@ -939,8 +947,8 @@ namespace nodetool
<< (last_seen_stamp ? epee::misc_utils::get_time_interval_string(time(NULL) - last_seen_stamp):"never")
<< ")...");
- CHECK_AND_ASSERT_MES(na.type() == typeid(epee::net_utils::ipv4_network_address), false,
- "Only IPv4 addresses are supported here, got " << na.type().name());
+ CHECK_AND_ASSERT_MES(na.get_type_id() == epee::net_utils::ipv4_network_address::ID, false,
+ "Only IPv4 addresses are supported here");
const epee::net_utils::ipv4_network_address &ipv4 = na.as<const epee::net_utils::ipv4_network_address>();
typename net_server::t_connection_context con = AUTO_VAL_INIT(con);
@@ -1004,8 +1012,8 @@ namespace nodetool
<< (last_seen_stamp ? epee::misc_utils::get_time_interval_string(time(NULL) - last_seen_stamp):"never")
<< ")...");
- CHECK_AND_ASSERT_MES(na.type() == typeid(epee::net_utils::ipv4_network_address), false,
- "Only IPv4 addresses are supported here, got " << na.type().name());
+ CHECK_AND_ASSERT_MES(na.get_type_id() == epee::net_utils::ipv4_network_address::ID, false,
+ "Only IPv4 addresses are supported here");
const epee::net_utils::ipv4_network_address &ipv4 = na.as<epee::net_utils::ipv4_network_address>();
typename net_server::t_connection_context con = AUTO_VAL_INIT(con);
@@ -1382,7 +1390,7 @@ namespace nodetool
}
crypto::public_key pk = AUTO_VAL_INIT(pk);
epee::string_tools::hex_to_pod(::config::P2P_REMOTE_DEBUG_TRUSTED_PUB_KEY, pk);
- crypto::hash h = tools::get_proof_of_trust_hash(tr);
+ crypto::hash h = get_proof_of_trust_hash(tr);
if(!crypto::check_signature(h, pk, tr.sign))
{
LOG_ERROR("check_trust failed: sign check failed");
@@ -1510,8 +1518,8 @@ namespace nodetool
if(!node_data.my_port)
return false;
- CHECK_AND_ASSERT_MES(context.m_remote_address.type() == typeid(epee::net_utils::ipv4_network_address), false,
- "Only IPv4 addresses are supported here, got " << context.m_remote_address.type().name());
+ CHECK_AND_ASSERT_MES(context.m_remote_address.get_type_id() == epee::net_utils::ipv4_network_address::ID, false,
+ "Only IPv4 addresses are supported here");
const epee::net_utils::network_address na = context.m_remote_address;
uint32_t actual_ip = na.as<const epee::net_utils::ipv4_network_address>().ip();
@@ -1670,8 +1678,8 @@ namespace nodetool
//try ping to be sure that we can add this peer to peer_list
try_ping(arg.node_data, context, [peer_id_l, port_l, context, this]()
{
- CHECK_AND_ASSERT_MES(context.m_remote_address.type() == typeid(epee::net_utils::ipv4_network_address), void(),
- "Only IPv4 addresses are supported here, got " << context.m_remote_address.type().name());
+ CHECK_AND_ASSERT_MES(context.m_remote_address.get_type_id() == epee::net_utils::ipv4_network_address::ID, void(),
+ "Only IPv4 addresses are supported here");
//called only(!) if success pinged, update local peerlist
peerlist_entry pe;
const epee::net_utils::network_address na = context.m_remote_address;
diff --git a/src/p2p/net_peerlist_boost_serialization.h b/src/p2p/net_peerlist_boost_serialization.h
index 0a21895cf..43c5ea5f0 100644
--- a/src/p2p/net_peerlist_boost_serialization.h
+++ b/src/p2p/net_peerlist_boost_serialization.h
@@ -36,24 +36,16 @@ namespace boost
{
namespace serialization
{
- enum { sertype_ipv4_address };
- static inline uint8_t get_type(const epee::net_utils::network_address &na)
- {
- if (na.type() == typeid(epee::net_utils::ipv4_network_address))
- return sertype_ipv4_address;
- throw std::runtime_error("Unsupported network address type");
- return 0;
- }
template <class Archive, class ver_type>
inline void serialize(Archive &a, epee::net_utils::network_address& na, const ver_type ver)
{
uint8_t type;
if (typename Archive::is_saving())
- type = get_type(na);
+ type = na.get_type_id();
a & type;
switch (type)
{
- case sertype_ipv4_address:
+ case epee::net_utils::ipv4_network_address::ID:
if (!typename Archive::is_saving())
na.reset(new epee::net_utils::ipv4_network_address(0, 0));
a & na.as<epee::net_utils::ipv4_network_address>();
diff --git a/src/p2p/network_throttle-detail.cpp b/src/p2p/network_throttle-detail.cpp
index 0747b6f36..1df48ee26 100644
--- a/src/p2p/network_throttle-detail.cpp
+++ b/src/p2p/network_throttle-detail.cpp
@@ -51,8 +51,8 @@
#include "syncobj.h"
-#include "../../contrib/epee/include/net/net_utils_base.h"
-#include "../../contrib/epee/include/misc_log_ex.h"
+#include "net/net_utils_base.h"
+#include "misc_log_ex.h"
#include <boost/lambda/bind.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/uuid/random_generator.hpp>
@@ -71,10 +71,10 @@
#include <boost/asio/basic_socket.hpp>
#include <boost/asio/ip/unicast.hpp>
-#include "../../contrib/epee/include/net/abstract_tcp_server2.h"
+#include "net/abstract_tcp_server2.h"
// TODO:
-#include "../../src/p2p/network_throttle-detail.hpp"
+#include "network_throttle-detail.hpp"
#undef MONERO_DEFAULT_LOG_CATEGORY
#define MONERO_DEFAULT_LOG_CATEGORY "net.throttle"
diff --git a/src/p2p/network_throttle-detail.hpp b/src/p2p/network_throttle-detail.hpp
index c514db450..27caa85d3 100644
--- a/src/p2p/network_throttle-detail.hpp
+++ b/src/p2p/network_throttle-detail.hpp
@@ -36,7 +36,7 @@
#ifndef INCLUDED_src_p2p_throttle_detail_hpp
#define INCLUDED_src_p2p_throttle_detail_hpp
-#include "../../src/p2p/network_throttle.hpp"
+#include "network_throttle.hpp"
namespace epee
{
diff --git a/src/p2p/network_throttle.cpp b/src/p2p/network_throttle.cpp
index 6d68f3286..74b20376d 100644
--- a/src/p2p/network_throttle.cpp
+++ b/src/p2p/network_throttle.cpp
@@ -54,7 +54,7 @@ Throttling work by:
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#include "../../src/p2p/network_throttle-detail.hpp"
+#include "network_throttle-detail.hpp"
namespace epee
{
@@ -77,28 +77,22 @@ int network_throttle_manager::xxx;
// ================================================================================================
// methods:
i_network_throttle & network_throttle_manager::get_global_throttle_in() {
- boost::call_once(m_once_get_global_throttle_in, [] { m_obj_get_global_throttle_in.reset(new network_throttle("in/all","<<< global-IN",10)); } );
- return * m_obj_get_global_throttle_in;
+ static network_throttle obj_get_global_throttle_in("in/all","<<< global-IN",10);
+ return obj_get_global_throttle_in;
}
-boost::once_flag network_throttle_manager::m_once_get_global_throttle_in;
-std::unique_ptr<i_network_throttle> network_throttle_manager::m_obj_get_global_throttle_in;
i_network_throttle & network_throttle_manager::get_global_throttle_inreq() {
- boost::call_once(m_once_get_global_throttle_inreq, [] { m_obj_get_global_throttle_inreq.reset(new network_throttle("inreq/all", "<== global-IN-REQ",10)); } );
- return * m_obj_get_global_throttle_inreq;
+ static network_throttle obj_get_global_throttle_inreq("inreq/all", "<== global-IN-REQ",10);
+ return obj_get_global_throttle_inreq;
}
-boost::once_flag network_throttle_manager::m_once_get_global_throttle_inreq;
-std::unique_ptr<i_network_throttle> network_throttle_manager::m_obj_get_global_throttle_inreq;
i_network_throttle & network_throttle_manager::get_global_throttle_out() {
- boost::call_once(m_once_get_global_throttle_out, [] { m_obj_get_global_throttle_out.reset(new network_throttle("out/all", ">>> global-OUT",10)); } );
- return * m_obj_get_global_throttle_out;
+ static network_throttle obj_get_global_throttle_out("out/all", ">>> global-OUT",10);
+ return obj_get_global_throttle_out;
}
-boost::once_flag network_throttle_manager::m_once_get_global_throttle_out;
-std::unique_ptr<i_network_throttle> network_throttle_manager::m_obj_get_global_throttle_out;
diff --git a/src/p2p/network_throttle.hpp b/src/p2p/network_throttle.hpp
index a747cdd71..9853df5e1 100644
--- a/src/p2p/network_throttle.hpp
+++ b/src/p2p/network_throttle.hpp
@@ -54,8 +54,8 @@
#include "syncobj.h"
-#include "../../contrib/epee/include/net/net_utils_base.h"
-#include "../../contrib/epee/include/misc_log_ex.h"
+#include "net/net_utils_base.h"
+#include "misc_log_ex.h"
#include <boost/lambda/bind.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/uuid/random_generator.hpp>
@@ -111,13 +111,6 @@ class network_throttle_manager {
//protected:
public: // XXX
- // [[note1]]
- static boost::once_flag m_once_get_global_throttle_in;
- static boost::once_flag m_once_get_global_throttle_inreq; // [[note2]]
- static boost::once_flag m_once_get_global_throttle_out;
- static std::unique_ptr<i_network_throttle> m_obj_get_global_throttle_in;
- static std::unique_ptr<i_network_throttle> m_obj_get_global_throttle_inreq;
- static std::unique_ptr<i_network_throttle> m_obj_get_global_throttle_out;
static boost::mutex m_lock_get_global_throttle_in;
static boost::mutex m_lock_get_global_throttle_inreq;
diff --git a/src/p2p/p2p_protocol_defs.h b/src/p2p/p2p_protocol_defs.h
index d60990f8a..f38615def 100644
--- a/src/p2p/p2p_protocol_defs.h
+++ b/src/p2p/p2p_protocol_defs.h
@@ -35,7 +35,9 @@
#include "net/net_utils_base.h"
#include "misc_language.h"
#include "cryptonote_config.h"
+#ifdef ALLOW_DEBUG_COMMANDS
#include "crypto/crypto.h"
+#endif
namespace nodetool
{
@@ -188,7 +190,7 @@ namespace nodetool
std::list<peerlist_entry_base<network_address_old>> local_peerlist;
for (const auto &p: this_ref.local_peerlist_new)
{
- if (p.adr.type() == typeid(epee::net_utils::ipv4_network_address))
+ if (p.adr.get_type_id() == epee::net_utils::ipv4_network_address::ID)
{
const epee::net_utils::network_address &na = p.adr;
const epee::net_utils::ipv4_network_address &ipv4 = na.as<const epee::net_utils::ipv4_network_address>();
@@ -247,7 +249,7 @@ namespace nodetool
std::list<peerlist_entry_base<network_address_old>> local_peerlist;
for (const auto &p: this_ref.local_peerlist_new)
{
- if (p.adr.type() == typeid(epee::net_utils::ipv4_network_address))
+ if (p.adr.get_type_id() == epee::net_utils::ipv4_network_address::ID)
{
const epee::net_utils::network_address &na = p.adr;
const epee::net_utils::ipv4_network_address &ipv4 = na.as<const epee::net_utils::ipv4_network_address>();
@@ -440,6 +442,14 @@ namespace nodetool
#endif
+ inline crypto::hash get_proof_of_trust_hash(const nodetool::proof_of_trust& pot)
+ {
+ std::string s;
+ s.append(reinterpret_cast<const char*>(&pot.peer_id), sizeof(pot.peer_id));
+ s.append(reinterpret_cast<const char*>(&pot.time), sizeof(pot.time));
+ return crypto::cn_fast_hash(s.data(), s.size());
+ }
+
}
diff --git a/src/rpc/core_rpc_server.cpp b/src/rpc/core_rpc_server.cpp
index 18d1cea75..097958d24 100644
--- a/src/rpc/core_rpc_server.cpp
+++ b/src/rpc/core_rpc_server.cpp
@@ -227,6 +227,28 @@ namespace cryptonote
res.status = CORE_RPC_STATUS_OK;
return true;
}
+ bool core_rpc_server::on_get_alt_blocks_hashes(const COMMAND_RPC_GET_ALT_BLOCKS_HASHES::request& req, COMMAND_RPC_GET_ALT_BLOCKS_HASHES::response& res)
+ {
+ CHECK_CORE_BUSY();
+ std::list<block> blks;
+
+ if(!m_core.get_alternative_blocks(blks))
+ {
+ res.status = "Failed";
+ return false;
+ }
+
+ res.blks_hashes.reserve(blks.size());
+
+ for (auto const& blk: blks)
+ {
+ res.blks_hashes.push_back(epee::string_tools::pod_to_hex(get_block_hash(blk)));
+ }
+
+ MDEBUG("on_get_alt_blocks_hashes: " << blks.size() << " blocks " );
+ res.status = CORE_RPC_STATUS_OK;
+ return true;
+ }
//------------------------------------------------------------------------------------------------------------------------------
bool core_rpc_server::on_get_blocks_by_height(const COMMAND_RPC_GET_BLOCKS_BY_HEIGHT::request& req, COMMAND_RPC_GET_BLOCKS_BY_HEIGHT::response& res)
{
@@ -736,7 +758,7 @@ namespace cryptonote
for (auto & entry : white_list)
{
- if (entry.adr.type() == typeid(epee::net_utils::ipv4_network_address))
+ if (entry.adr.get_type_id() == epee::net_utils::ipv4_network_address::ID)
res.white_list.emplace_back(entry.id, entry.adr.as<epee::net_utils::ipv4_network_address>().ip(),
entry.adr.as<epee::net_utils::ipv4_network_address>().port(), entry.last_seen);
else
@@ -745,7 +767,7 @@ namespace cryptonote
for (auto & entry : gray_list)
{
- if (entry.adr.type() == typeid(epee::net_utils::ipv4_network_address))
+ if (entry.adr.get_type_id() == epee::net_utils::ipv4_network_address::ID)
res.gray_list.emplace_back(entry.id, entry.adr.as<epee::net_utils::ipv4_network_address>().ip(),
entry.adr.as<epee::net_utils::ipv4_network_address>().port(), entry.last_seen);
else
diff --git a/src/rpc/core_rpc_server.h b/src/rpc/core_rpc_server.h
index 44ac6f07a..cf95b0edf 100644
--- a/src/rpc/core_rpc_server.h
+++ b/src/rpc/core_rpc_server.h
@@ -81,6 +81,7 @@ namespace cryptonote
MAP_URI_AUTO_BIN2("/get_outs.bin", on_get_outs_bin, COMMAND_RPC_GET_OUTPUTS_BIN)
MAP_URI_AUTO_BIN2("/getrandom_rctouts.bin", on_get_random_rct_outs, COMMAND_RPC_GET_RANDOM_RCT_OUTPUTS)
MAP_URI_AUTO_JON2("/gettransactions", on_get_transactions, COMMAND_RPC_GET_TRANSACTIONS)
+ MAP_URI_AUTO_JON2("/get_alt_blocks_hashes", on_get_alt_blocks_hashes, COMMAND_RPC_GET_ALT_BLOCKS_HASHES)
MAP_URI_AUTO_JON2("/is_key_image_spent", on_is_key_image_spent, COMMAND_RPC_IS_KEY_IMAGE_SPENT)
MAP_URI_AUTO_JON2("/sendrawtransaction", on_send_raw_tx, COMMAND_RPC_SEND_RAW_TX)
MAP_URI_AUTO_JON2_IF("/start_mining", on_start_mining, COMMAND_RPC_START_MINING, !m_restricted)
@@ -128,6 +129,7 @@ namespace cryptonote
bool on_get_height(const COMMAND_RPC_GET_HEIGHT::request& req, COMMAND_RPC_GET_HEIGHT::response& res);
bool on_get_blocks(const COMMAND_RPC_GET_BLOCKS_FAST::request& req, COMMAND_RPC_GET_BLOCKS_FAST::response& res);
+ bool on_get_alt_blocks_hashes(const COMMAND_RPC_GET_ALT_BLOCKS_HASHES::request& req, COMMAND_RPC_GET_ALT_BLOCKS_HASHES::response& res);
bool on_get_blocks_by_height(const COMMAND_RPC_GET_BLOCKS_BY_HEIGHT::request& req, COMMAND_RPC_GET_BLOCKS_BY_HEIGHT::response& res);
bool on_get_hashes(const COMMAND_RPC_GET_HASHES_FAST::request& req, COMMAND_RPC_GET_HASHES_FAST::response& res);
bool on_get_transactions(const COMMAND_RPC_GET_TRANSACTIONS::request& req, COMMAND_RPC_GET_TRANSACTIONS::response& res);
diff --git a/src/rpc/core_rpc_server_commands_defs.h b/src/rpc/core_rpc_server_commands_defs.h
index 7a1f5a963..a38952bff 100644
--- a/src/rpc/core_rpc_server_commands_defs.h
+++ b/src/rpc/core_rpc_server_commands_defs.h
@@ -49,7 +49,7 @@ namespace cryptonote
// advance which version they will stop working with
// Don't go over 32767 for any of these
#define CORE_RPC_VERSION_MAJOR 1
-#define CORE_RPC_VERSION_MINOR 12
+#define CORE_RPC_VERSION_MINOR 13
#define MAKE_CORE_RPC_VERSION(major,minor) (((major)<<16)|(minor))
#define CORE_RPC_VERSION MAKE_CORE_RPC_VERSION(CORE_RPC_VERSION_MAJOR, CORE_RPC_VERSION_MINOR)
@@ -146,6 +146,25 @@ namespace cryptonote
};
};
+ struct COMMAND_RPC_GET_ALT_BLOCKS_HASHES
+ {
+ struct request
+ {
+ BEGIN_KV_SERIALIZE_MAP()
+ END_KV_SERIALIZE_MAP()
+ };
+
+ struct response
+ {
+ std::vector<std::string> blks_hashes;
+ std::string status;
+
+ BEGIN_KV_SERIALIZE_MAP()
+ KV_SERIALIZE(blks_hashes)
+ KV_SERIALIZE(status)
+ END_KV_SERIALIZE_MAP()
+ };
+ };
struct COMMAND_RPC_GET_HASHES_FAST
{
diff --git a/src/simplewallet/simplewallet.cpp b/src/simplewallet/simplewallet.cpp
index 4d53f063e..bf8fbe3d0 100644
--- a/src/simplewallet/simplewallet.cpp
+++ b/src/simplewallet/simplewallet.cpp
@@ -62,6 +62,14 @@
#include "wallet/wallet_args.h"
#include <stdexcept>
+#ifdef HAVE_READLINE
+ #include "readline_buffer.h"
+ #define PAUSE_READLINE() \
+ rdln::suspend_readline pause_readline;
+#else
+ #define PAUSE_READLINE()
+#endif
+
using namespace std;
using namespace epee;
using namespace cryptonote;
@@ -186,6 +194,7 @@ namespace
}
else
{
+ PAUSE_READLINE();
set_console_color(m_color, m_bright);
std::cout << m_oss.str();
reset_console_color();
@@ -272,6 +281,42 @@ namespace
{
return boost::lexical_cast<std::string>(version >> 16) + "." + boost::lexical_cast<std::string>(version & 0xffff);
}
+
+ std::string oa_prompter(const std::string &url, const std::vector<std::string> &addresses, bool dnssec_valid)
+ {
+ if (addresses.empty())
+ return {};
+ // prompt user for confirmation.
+ // inform user of DNSSEC validation status as well.
+ std::string dnssec_str;
+ if (dnssec_valid)
+ {
+ dnssec_str = tr("DNSSEC validation passed");
+ }
+ else
+ {
+ dnssec_str = tr("WARNING: DNSSEC validation was unsuccessful, this address may not be correct!");
+ }
+ std::stringstream prompt;
+ prompt << tr("For URL: ") << url
+ << ", " << dnssec_str << std::endl
+ << tr(" Monero Address = ") << addresses[0]
+ << std::endl
+ << tr("Is this OK? (Y/n) ")
+ ;
+ // prompt the user for confirmation given the dns query and dnssec status
+ std::string confirm_dns_ok = command_line::input_line(prompt.str());
+ if (std::cin.eof())
+ {
+ return {};
+ }
+ if (!command_line::is_yes(confirm_dns_ok))
+ {
+ std::cout << tr("you have cancelled the transfer request") << std::endl;
+ return {};
+ }
+ return addresses[0];
+ }
}
@@ -711,14 +756,14 @@ simple_wallet::simple_wallet()
m_cmd_binder.set_handler("viewkey", boost::bind(&simple_wallet::viewkey, this, _1), tr("Display private view key"));
m_cmd_binder.set_handler("spendkey", boost::bind(&simple_wallet::spendkey, this, _1), tr("Display private spend key"));
m_cmd_binder.set_handler("seed", boost::bind(&simple_wallet::seed, this, _1), tr("Display Electrum-style mnemonic seed"));
- m_cmd_binder.set_handler("set", boost::bind(&simple_wallet::set_variable, this, _1), tr("Available options: seed language - set wallet seed language; always-confirm-transfers <1|0> - whether to confirm unsplit txes; print-ring-members <1|0> - whether to print detailed information about ring members during confirmation; store-tx-info <1|0> - whether to store outgoing tx info (destination address, payment ID, tx secret key) for future reference; default-mixin <n> - set default mixin (default is 4); auto-refresh <1|0> - whether to automatically sync new blocks from the daemon; refresh-type <full|optimize-coinbase|no-coinbase|default> - set wallet refresh behaviour; priority [0|1|2|3|4] - default/unimportant/normal/elevated/priority fee; confirm-missing-payment-id <1|0>; ask-password <1|0>; unit <monero|millinero|micronero|nanonero|piconero> - set default monero (sub-)unit; min-outputs-count [n] - try to keep at least that many outputs of value at least min-outputs-value; min-outputs-value [n] - try to keep at least min-outputs-count outputs of at least that value - merge-destinations <1|0> - whether to merge multiple payments to the same destination address"));
+ m_cmd_binder.set_handler("set", boost::bind(&simple_wallet::set_variable, this, _1), tr("Available options: seed language - set wallet seed language; always-confirm-transfers <1|0> - whether to confirm unsplit txes; print-ring-members <1|0> - whether to print detailed information about ring members during confirmation; store-tx-info <1|0> - whether to store outgoing tx info (destination address, payment ID, tx secret key) for future reference; default-mixin <n> - set default mixin (default is 4); auto-refresh <1|0> - whether to automatically sync new blocks from the daemon; refresh-type <full|optimize-coinbase|no-coinbase|default> - set wallet refresh behaviour; priority [0|1|2|3|4] - default/unimportant/normal/elevated/priority fee; confirm-missing-payment-id <1|0>; ask-password <1|0>; unit <monero|millinero|micronero|nanonero|piconero> - set default monero (sub-)unit; min-outputs-count [n] - try to keep at least that many outputs of value at least min-outputs-value; min-outputs-value [n] - try to keep at least min-outputs-count outputs of at least that value; merge-destinations <1|0> - whether to merge multiple payments to the same destination address"));
m_cmd_binder.set_handler("rescan_spent", boost::bind(&simple_wallet::rescan_spent, this, _1), tr("Rescan blockchain for spent outputs"));
m_cmd_binder.set_handler("get_tx_key", boost::bind(&simple_wallet::get_tx_key, this, _1), tr("Get transaction key (r) for a given <txid>"));
m_cmd_binder.set_handler("check_tx_key", boost::bind(&simple_wallet::check_tx_key, this, _1), tr("Check amount going to <address> in <txid>"));
m_cmd_binder.set_handler("get_tx_proof", boost::bind(&simple_wallet::get_tx_proof, this, _1), tr("Generate a signature to prove payment to <address> in <txid> using the transaction secret key (r) without revealing it"));
m_cmd_binder.set_handler("check_tx_proof", boost::bind(&simple_wallet::check_tx_proof, this, _1), tr("Check tx proof for payment going to <address> in <txid>"));
m_cmd_binder.set_handler("show_transfers", boost::bind(&simple_wallet::show_transfers, this, _1), tr("show_transfers [in|out|pending|failed|pool] [<min_height> [<max_height>]] - Show incoming/outgoing transfers within an optional height range"));
- m_cmd_binder.set_handler("unspent_outputs", boost::bind(&simple_wallet::unspent_outputs, this, _1), tr("unspent_outputs [<min_amount> <max_amount>] - Show unspent outputs within an optional amount range)"));
+ m_cmd_binder.set_handler("unspent_outputs", boost::bind(&simple_wallet::unspent_outputs, this, _1), tr("unspent_outputs [<min_amount> <max_amount>] - Show unspent outputs within an optional amount range"));
m_cmd_binder.set_handler("rescan_bc", boost::bind(&simple_wallet::rescan_blockchain, this, _1), tr("Rescan blockchain from scratch"));
m_cmd_binder.set_handler("set_tx_note", boost::bind(&simple_wallet::set_tx_note, this, _1), tr("Set an arbitrary string note for a txid"));
m_cmd_binder.set_handler("get_tx_note", boost::bind(&simple_wallet::get_tx_note, this, _1), tr("Get a string note for a txid"));
@@ -794,7 +839,7 @@ bool simple_wallet::set_variable(const std::vector<std::string> &args)
CHECK_SIMPLE_VARIABLE("priority", set_default_priority, tr("0, 1, 2, 3, or 4"));
CHECK_SIMPLE_VARIABLE("confirm-missing-payment-id", set_confirm_missing_payment_id, tr("0 or 1"));
CHECK_SIMPLE_VARIABLE("ask-password", set_ask_password, tr("0 or 1"));
- CHECK_SIMPLE_VARIABLE("unit", set_unit, tr("monero, millinero, micronero, nanop, piconero"));
+ CHECK_SIMPLE_VARIABLE("unit", set_unit, tr("monero, millinero, micronero, nanonero, piconero"));
CHECK_SIMPLE_VARIABLE("min-outputs-count", set_min_output_count, tr("unsigned integer"));
CHECK_SIMPLE_VARIABLE("min-outputs-value", set_min_output_value, tr("amount"));
CHECK_SIMPLE_VARIABLE("merge-destinations", set_merge_destinations, tr("0 or 1"));
@@ -920,8 +965,6 @@ static bool might_be_partial_seed(std::string words)
//----------------------------------------------------------------------------------------------------
bool simple_wallet::init(const boost::program_options::variables_map& vm)
{
- bool need_refresh_height = false;
-
if (!handle_command_line(vm))
return false;
@@ -1119,8 +1162,6 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm)
m_wallet_file = m_generate_new;
bool r = new_wallet(vm, m_recovery_key, m_restore_deterministic_wallet, m_non_deterministic, old_language);
CHECK_AND_ASSERT_MES(r, false, tr("account creation failed"));
- if (!m_restore_deterministic_wallet)
- need_refresh_height = true;
}
if (!m_restore_height && m_restoring)
{
@@ -1213,14 +1254,6 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm)
m_http_client.set_server(m_wallet->get_daemon_address(), m_wallet->get_daemon_login());
m_wallet->callback(this);
- if (need_refresh_height)
- {
- // for a totally new account, we don't care about older blocks.
- MDEBUG("Calling daemon to set refresh height");
- std::string err;
- m_wallet->set_refresh_from_block_height(get_daemon_blockchain_height(err));
- }
-
return true;
}
//----------------------------------------------------------------------------------------------------
@@ -1831,6 +1864,8 @@ bool simple_wallet::show_incoming_transfers(const std::vector<std::string>& args
}
}
+ PAUSE_READLINE();
+
tools::wallet2::transfer_container transfers;
m_wallet->get_transfers(transfers);
@@ -1891,6 +1926,8 @@ bool simple_wallet::show_payments(const std::vector<std::string> &args)
LOCK_IDLE_SCOPE();
+ PAUSE_READLINE();
+
message_writer() << boost::format("%68s%68s%12s%21s%16s") %
tr("payment") % tr("transaction") % tr("height") % tr("amount") % tr("unlock time");
@@ -2101,7 +2138,7 @@ bool simple_wallet::print_ring_members(const std::vector<tools::wallet2::pending
{
ostr
<< tr("\nWarning: Some input keys being spent are from ")
- << tr(are_keys_from_same_tx ? "the same transaction" : "blocks that are temporally very close")
+ << (are_keys_from_same_tx ? tr("the same transaction") : tr("blocks that are temporally very close"))
<< tr(", which can break the anonymity of ring signature. Make sure this is intentional!");
}
ostr << ENDL;
@@ -2214,7 +2251,7 @@ bool simple_wallet::transfer_main(int transfer_type, const std::vector<std::stri
cryptonote::tx_destination_entry de;
bool has_payment_id;
crypto::hash8 new_payment_id;
- if (!cryptonote::get_account_address_from_str_or_url(de.addr, has_payment_id, new_payment_id, m_wallet->testnet(), local_args[i]))
+ if (!cryptonote::get_account_address_from_str_or_url(de.addr, has_payment_id, new_payment_id, m_wallet->testnet(), local_args[i], oa_prompter))
{
fail_msg_writer() << tr("failed to parse address");
return true;
@@ -2374,7 +2411,8 @@ bool simple_wallet::transfer_main(int transfer_type, const std::vector<std::stri
{
auto & ptx = ptx_vector.back();
m_wallet->commit_tx(ptx);
- success_msg_writer(true) << tr("Money successfully sent, transaction ") << get_transaction_hash(ptx.tx);
+ success_msg_writer(true) << tr("Transaction successfully submitted, transaction ") << get_transaction_hash(ptx.tx) << ENDL
+ << tr("You can check its status by using the `show_transfers` command.");
// if no exception, remove element from vector
ptx_vector.pop_back();
@@ -2712,7 +2750,7 @@ bool simple_wallet::sweep_main(uint64_t below, const std::vector<std::string> &a
bool has_payment_id;
crypto::hash8 new_payment_id;
cryptonote::account_public_address address;
- if (!cryptonote::get_account_address_from_str_or_url(address, has_payment_id, new_payment_id, m_wallet->testnet(), local_args[0]))
+ if (!cryptonote::get_account_address_from_str_or_url(address, has_payment_id, new_payment_id, m_wallet->testnet(), local_args[0], oa_prompter))
{
fail_msg_writer() << tr("failed to parse address");
return true;
@@ -2751,6 +2789,8 @@ bool simple_wallet::sweep_main(uint64_t below, const std::vector<std::string> &a
}
}
+ LOCK_IDLE_SCOPE();
+
try
{
// figure out what tx will be necessary
@@ -2975,12 +3015,39 @@ bool simple_wallet::accept_loaded_tx(const std::function<size_t()> get_num_txes,
// gather info to ask the user
uint64_t amount = 0, amount_to_dests = 0, change = 0;
size_t min_mixin = ~0;
- std::unordered_map<std::string, uint64_t> dests;
+ std::unordered_map<std::string, std::pair<std::string, uint64_t>> dests;
const std::string wallet_address = m_wallet->get_account().get_public_address_str(m_wallet->testnet());
int first_known_non_zero_change_index = -1;
+ std::string payment_id_string = "";
for (size_t n = 0; n < get_num_txes(); ++n)
{
const tools::wallet2::tx_construction_data &cd = get_tx(n);
+
+ std::vector<tx_extra_field> tx_extra_fields;
+ bool has_encrypted_payment_id = false;
+ crypto::hash8 payment_id8 = cryptonote::null_hash8;
+ if (cryptonote::parse_tx_extra(cd.extra, tx_extra_fields))
+ {
+ tx_extra_nonce extra_nonce;
+ if (find_tx_extra_field_by_type(tx_extra_fields, extra_nonce))
+ {
+ crypto::hash payment_id;
+ if(get_encrypted_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id8))
+ {
+ if (!payment_id_string.empty())
+ payment_id_string += ", ";
+ payment_id_string = std::string("encrypted payment ID ") + epee::string_tools::pod_to_hex(payment_id8);
+ has_encrypted_payment_id = true;
+ }
+ else if (get_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id))
+ {
+ if (!payment_id_string.empty())
+ payment_id_string += ", ";
+ payment_id_string = std::string("unencrypted payment ID ") + epee::string_tools::pod_to_hex(payment_id);
+ }
+ }
+ }
+
for (size_t s = 0; s < cd.sources.size(); ++s)
{
amount += cd.sources[s].amount;
@@ -2991,23 +3058,30 @@ bool simple_wallet::accept_loaded_tx(const std::function<size_t()> get_num_txes,
for (size_t d = 0; d < cd.splitted_dsts.size(); ++d)
{
const tx_destination_entry &entry = cd.splitted_dsts[d];
- std::string address = get_account_address_as_str(m_wallet->testnet(), entry.addr);
- std::unordered_map<std::string,uint64_t>::iterator i = dests.find(address);
+ std::string address, standard_address = get_account_address_as_str(m_wallet->testnet(), entry.addr);
+ if (has_encrypted_payment_id)
+ {
+ address = get_account_integrated_address_as_str(m_wallet->testnet(), entry.addr, payment_id8);
+ address += std::string(" (" + standard_address + " with encrypted payment id " + epee::string_tools::pod_to_hex(payment_id8) + ")");
+ }
+ else
+ address = standard_address;
+ std::unordered_map<std::string,std::pair<std::string,uint64_t>>::iterator i = dests.find(standard_address);
if (i == dests.end())
- dests.insert(std::make_pair(address, entry.amount));
+ dests.insert(std::make_pair(standard_address, std::make_pair(address, entry.amount)));
else
- i->second += entry.amount;
+ i->second.second += entry.amount;
amount_to_dests += entry.amount;
}
if (cd.change_dts.amount > 0)
{
- std::unordered_map<std::string, uint64_t>::iterator it = dests.find(get_account_address_as_str(m_wallet->testnet(), cd.change_dts.addr));
+ std::unordered_map<std::string, std::pair<std::string, uint64_t>>::iterator it = dests.find(get_account_address_as_str(m_wallet->testnet(), cd.change_dts.addr));
if (it == dests.end())
{
fail_msg_writer() << tr("Claimed change does not go to a paid address");
return false;
}
- if (it->second < cd.change_dts.amount)
+ if (it->second.second < cd.change_dts.amount)
{
fail_msg_writer() << tr("Claimed change is larger than payment to the change address");
return false;
@@ -3023,15 +3097,19 @@ bool simple_wallet::accept_loaded_tx(const std::function<size_t()> get_num_txes,
}
}
change += cd.change_dts.amount;
- it->second -= cd.change_dts.amount;
- if (it->second == 0)
+ it->second.second -= cd.change_dts.amount;
+ if (it->second.second == 0)
dests.erase(get_account_address_as_str(m_wallet->testnet(), cd.change_dts.addr));
}
}
+
+ if (payment_id_string.empty())
+ payment_id_string = "no payment ID";
+
std::string dest_string;
- for (std::unordered_map<std::string, uint64_t>::const_iterator i = dests.begin(); i != dests.end(); )
+ for (std::unordered_map<std::string, std::pair<std::string, uint64_t>>::const_iterator i = dests.begin(); i != dests.end(); )
{
- dest_string += (boost::format(tr("sending %s to %s")) % print_money(i->second) % i->first).str();
+ dest_string += (boost::format(tr("sending %s to %s")) % print_money(i->second.second) % i->second.first).str();
++i;
if (i != dests.end())
dest_string += ", ";
@@ -3049,7 +3127,7 @@ bool simple_wallet::accept_loaded_tx(const std::function<size_t()> get_num_txes,
change_string += tr("no change");
uint64_t fee = amount - amount_to_dests;
- std::string prompt_str = (boost::format(tr("Loaded %lu transactions, for %s, fee %s, %s, %s, with min mixin %lu. %sIs this okay? (Y/Yes/N/No): ")) % (unsigned long)get_num_txes() % print_money(amount) % print_money(fee) % dest_string % change_string % (unsigned long)min_mixin % extra_message).str();
+ std::string prompt_str = (boost::format(tr("Loaded %lu transactions, for %s, fee %s, %s, %s, with min mixin %lu, %s. %sIs this okay? (Y/Yes/N/No): ")) % (unsigned long)get_num_txes() % print_money(amount) % print_money(fee) % dest_string % change_string % (unsigned long)min_mixin % payment_id_string % extra_message).str();
return command_line::is_yes(command_line::input_line(prompt_str));
}
//----------------------------------------------------------------------------------------------------
@@ -3270,7 +3348,7 @@ bool simple_wallet::get_tx_proof(const std::vector<std::string> &args)
cryptonote::account_public_address address;
bool has_payment_id;
crypto::hash8 payment_id;
- if(!cryptonote::get_account_address_from_str_or_url(address, has_payment_id, payment_id, m_wallet->testnet(), args[1]))
+ if(!cryptonote::get_account_address_from_str_or_url(address, has_payment_id, payment_id, m_wallet->testnet(), args[1], oa_prompter))
{
fail_msg_writer() << tr("failed to parse address");
return true;
@@ -3372,7 +3450,7 @@ bool simple_wallet::check_tx_key(const std::vector<std::string> &args_)
cryptonote::account_public_address address;
bool has_payment_id;
crypto::hash8 payment_id;
- if(!cryptonote::get_account_address_from_str_or_url(address, has_payment_id, payment_id, m_wallet->testnet(), local_args[2]))
+ if(!cryptonote::get_account_address_from_str_or_url(address, has_payment_id, payment_id, m_wallet->testnet(), local_args[2], oa_prompter))
{
fail_msg_writer() << tr("failed to parse address");
return true;
@@ -3524,7 +3602,7 @@ bool simple_wallet::check_tx_proof(const std::vector<std::string> &args)
cryptonote::account_public_address address;
bool has_payment_id;
crypto::hash8 payment_id;
- if(!cryptonote::get_account_address_from_str_or_url(address, has_payment_id, payment_id, m_wallet->testnet(), args[1]))
+ if(!cryptonote::get_account_address_from_str_or_url(address, has_payment_id, payment_id, m_wallet->testnet(), args[1], oa_prompter))
{
fail_msg_writer() << tr("failed to parse address");
return true;
@@ -3716,6 +3794,8 @@ bool simple_wallet::show_transfers(const std::vector<std::string> &args_)
std::multimap<uint64_t, std::pair<bool,std::string>> output;
+ PAUSE_READLINE();
+
if (in) {
std::list<std::pair<crypto::hash, tools::wallet2::payment_details>> payments;
m_wallet->get_payments(payments, min_height, max_height);
@@ -4040,7 +4120,7 @@ bool simple_wallet::address_book(const std::vector<std::string> &args/* = std::v
cryptonote::account_public_address address;
bool has_payment_id;
crypto::hash8 payment_id8;
- if(!cryptonote::get_account_address_from_str_or_url(address, has_payment_id, payment_id8, m_wallet->testnet(), args[1]))
+ if(!cryptonote::get_account_address_from_str_or_url(address, has_payment_id, payment_id8, m_wallet->testnet(), args[1], oa_prompter))
{
fail_msg_writer() << tr("failed to parse address");
return true;
@@ -4231,7 +4311,7 @@ bool simple_wallet::verify(const std::vector<std::string> &args)
cryptonote::account_public_address address;
bool has_payment_id;
crypto::hash8 payment_id;
- if(!cryptonote::get_account_address_from_str_or_url(address, has_payment_id, payment_id, m_wallet->testnet(), address_string))
+ if(!cryptonote::get_account_address_from_str_or_url(address, has_payment_id, payment_id, m_wallet->testnet(), address_string, oa_prompter))
{
fail_msg_writer() << tr("failed to parse address");
return true;
diff --git a/src/wallet/api/wallet.cpp b/src/wallet/api/wallet.cpp
index 6a0e1727c..9915a9ca1 100644
--- a/src/wallet/api/wallet.cpp
+++ b/src/wallet/api/wallet.cpp
@@ -99,7 +99,7 @@ struct Wallet2CallbackImpl : public tools::i_wallet2_callback
}
}
- virtual void on_money_received(uint64_t height, const crypto::hash &txid, uint64_t amount)
+ virtual void on_money_received(uint64_t height, const crypto::hash &txid, const cryptonote::transaction& tx, uint64_t amount)
{
std::string tx_hash = epee::string_tools::pod_to_hex(txid);
@@ -114,7 +114,7 @@ struct Wallet2CallbackImpl : public tools::i_wallet2_callback
}
}
- virtual void on_unconfirmed_money_received(uint64_t height, const crypto::hash &txid, uint64_t amount)
+ virtual void on_unconfirmed_money_received(uint64_t height, const crypto::hash &txid, const cryptonote::transaction& tx, uint64_t amount)
{
std::string tx_hash = epee::string_tools::pod_to_hex(txid);
@@ -129,8 +129,8 @@ struct Wallet2CallbackImpl : public tools::i_wallet2_callback
}
}
- virtual void on_money_spent(uint64_t height, const crypto::hash &txid, uint64_t amount,
- const cryptonote::transaction& spend_tx)
+ virtual void on_money_spent(uint64_t height, const crypto::hash &txid, const cryptonote::transaction& in_tx,
+ uint64_t amount, const cryptonote::transaction& spend_tx)
{
// TODO;
std::string tx_hash = epee::string_tools::pod_to_hex(txid);
diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp
index ee2b6055c..034b0a02a 100644
--- a/src/wallet/wallet2.cpp
+++ b/src/wallet/wallet2.cpp
@@ -1388,7 +1388,7 @@ void wallet2::pull_next_blocks(uint64_t start_height, uint64_t &blocks_start_hei
}
}
//----------------------------------------------------------------------------------------------------
-void wallet2::update_pool_state()
+void wallet2::update_pool_state(bool refreshed)
{
MDEBUG("update_pool_state start");
@@ -1424,13 +1424,14 @@ void wallet2::update_pool_state()
// a tx is removed from the pool due to being found in a new block, but
// just before the block is visible by refresh. So we keep a boolean, so
// that the first time we don't see the tx, we set that boolean, and only
- // delete it the second time it is checked
+ // delete it the second time it is checked (but only when refreshed, so
+ // we're sure we've seen the blockchain state first)
if (pit->second.m_state == wallet2::unconfirmed_transfer_details::pending)
{
LOG_PRINT_L1("Pending txid " << txid << " not in pool, marking as not in pool");
pit->second.m_state = wallet2::unconfirmed_transfer_details::pending_not_in_pool;
}
- else if (pit->second.m_state == wallet2::unconfirmed_transfer_details::pending_not_in_pool)
+ else if (pit->second.m_state == wallet2::unconfirmed_transfer_details::pending_not_in_pool && refreshed)
{
LOG_PRINT_L1("Pending txid " << txid << " not in pool, marking as failed");
pit->second.m_state = wallet2::unconfirmed_transfer_details::failed;
@@ -1459,24 +1460,30 @@ void wallet2::update_pool_state()
MDEBUG("update_pool_state done first loop");
// remove pool txes to us that aren't in the pool anymore
- std::unordered_map<crypto::hash, wallet2::payment_details>::iterator uit = m_unconfirmed_payments.begin();
- while (uit != m_unconfirmed_payments.end())
+ // but only if we just refreshed, so that the tx can go in
+ // the in transfers list instead (or nowhere if it just
+ // disappeared without being mined)
+ if (refreshed)
{
- const crypto::hash &txid = uit->second.m_tx_hash;
- bool found = false;
- for (const auto &it2: res.tx_hashes)
+ std::unordered_map<crypto::hash, wallet2::payment_details>::iterator uit = m_unconfirmed_payments.begin();
+ while (uit != m_unconfirmed_payments.end())
{
- if (it2 == txid)
+ const crypto::hash &txid = uit->second.m_tx_hash;
+ bool found = false;
+ for (const auto &it2: res.tx_hashes)
{
- found = true;
- break;
+ if (it2 == txid)
+ {
+ found = true;
+ break;
+ }
+ }
+ auto pit = uit++;
+ if (!found)
+ {
+ MDEBUG("Removing " << txid << " from unconfirmed payments, not found in pool");
+ m_unconfirmed_payments.erase(pit);
}
- }
- auto pit = uit++;
- if (!found)
- {
- MDEBUG("Removing " << txid << " from unconfirmed payments, not found in pool");
- m_unconfirmed_payments.erase(pit);
}
}
MDEBUG("update_pool_state done second loop");
@@ -1490,7 +1497,16 @@ void wallet2::update_pool_state()
LOG_PRINT_L2("Already seen " << txid << ", skipped");
continue;
}
- if (m_unconfirmed_payments.find(txid) == m_unconfirmed_payments.end())
+ bool txid_found_in_up = false;
+ for (const auto &up: m_unconfirmed_payments)
+ {
+ if (up.second.m_tx_hash == txid)
+ {
+ txid_found_in_up = true;
+ break;
+ }
+ }
+ if (!txid_found_in_up)
{
LOG_PRINT_L1("Found new pool tx: " << txid);
bool found = false;
@@ -1601,7 +1617,7 @@ void wallet2::fast_refresh(uint64_t stop_height, uint64_t &blocks_start_height,
while(m_run.load(std::memory_order_relaxed) && current_index < stop_height)
{
pull_hashes(0, blocks_start_height, short_chain_history, hashes);
- if (hashes.size() < 3)
+ if (hashes.size() <= 3)
return;
if (hashes.size() + current_index < stop_height) {
std::list<crypto::hash>::iterator right;
@@ -1685,6 +1701,7 @@ void wallet2::refresh(uint64_t start_height, uint64_t & blocks_fetched, bool& re
uint64_t blocks_start_height;
std::list<cryptonote::block_complete_entry> blocks;
std::vector<COMMAND_RPC_GET_BLOCKS_FAST::block_output_indices> o_indices;
+ bool refreshed = false;
// pull the first set of blocks
get_short_chain_history(short_chain_history);
@@ -1726,6 +1743,7 @@ void wallet2::refresh(uint64_t start_height, uint64_t & blocks_fetched, bool& re
if(blocks_start_height == next_blocks_start_height)
{
m_node_rpc_proxy.set_height(m_blockchain.size());
+ refreshed = true;
break;
}
@@ -1764,7 +1782,7 @@ void wallet2::refresh(uint64_t start_height, uint64_t & blocks_fetched, bool& re
{
// If stop() is called we don't need to check pending transactions
if(m_run.load(std::memory_order_relaxed))
- update_pool_state();
+ update_pool_state(refreshed);
}
catch (...)
{
@@ -2165,14 +2183,23 @@ crypto::secret_key wallet2::generate(const std::string& wallet_, const std::stri
m_account_public_address = m_account.get_keys().m_account_address;
m_watch_only = false;
+ // -1 month for fluctuations in block time and machine date/time setup.
+ // avg seconds per block
+ const int seconds_per_block = DIFFICULTY_TARGET_V2;
+ // ~num blocks per month
+ const uint64_t blocks_per_month = 60*60*24*30/seconds_per_block;
+
+ // try asking the daemon first
+ if(m_refresh_from_block_height == 0 && !recover){
+ std::string err;
+ uint64_t height = get_daemon_blockchain_height(err);
+ if (err.empty())
+ m_refresh_from_block_height = height - blocks_per_month;
+ }
+
if(m_refresh_from_block_height == 0 && !recover){
// Wallets created offline don't know blockchain height.
// Set blockchain height calculated from current date/time
- // -1 month for fluctuations in block time and machine date/time setup.
- // avg seconds per block
- const int seconds_per_block = DIFFICULTY_TARGET_V2;
- // ~num blocks per month
- const uint64_t blocks_per_month = 60*60*24*30/seconds_per_block;
uint64_t approx_blockchain_height = get_approximate_blockchain_height();
if(approx_blockchain_height > 0) {
m_refresh_from_block_height = approx_blockchain_height - blocks_per_month;
@@ -4350,7 +4377,7 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_2(std::vector<cryp
// try to pick outputs not from the same block. We will get two outputs, one for
// the destination, and one for change.
LOG_PRINT_L2("checking preferred");
- std::vector<size_t> prefered_inputs;
+ std::vector<size_t> preferred_inputs;
uint64_t rct_outs_needed = 2 * (fake_outs_count + 1);
rct_outs_needed += 100; // some fudge factor since we don't know how many are locked
if (use_rct && get_num_rct_outputs() >= rct_outs_needed)
@@ -4358,12 +4385,12 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_2(std::vector<cryp
// this is used to build a tx that's 1 or 2 inputs, and 2 outputs, which
// will get us a known fee.
uint64_t estimated_fee = calculate_fee(fee_per_kb, estimate_rct_tx_size(2, fake_outs_count + 1, 2), fee_multiplier);
- prefered_inputs = pick_preferred_rct_inputs(needed_money + estimated_fee);
- if (!prefered_inputs.empty())
+ preferred_inputs = pick_preferred_rct_inputs(needed_money + estimated_fee);
+ if (!preferred_inputs.empty())
{
string s;
- for (auto i: prefered_inputs) s += boost::lexical_cast<std::string>(i) + "(" + print_money(m_transfers[i].amount()) + ") ";
- LOG_PRINT_L1("Found prefered rct inputs for rct tx: " << s);
+ for (auto i: preferred_inputs) s += boost::lexical_cast<std::string>(i) + "(" + print_money(m_transfers[i].amount()) + ") ";
+ LOG_PRINT_L1("Found preferred rct inputs for rct tx: " << s);
}
}
LOG_PRINT_L2("done checking preferred");
@@ -4418,8 +4445,8 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_2(std::vector<cryp
}
pop_if_present(unused_transfers_indices, idx);
pop_if_present(unused_dust_indices, idx);
- } else if (!prefered_inputs.empty()) {
- idx = pop_back(prefered_inputs);
+ } else if (!preferred_inputs.empty()) {
+ idx = pop_back(preferred_inputs);
pop_if_present(unused_transfers_indices, idx);
pop_if_present(unused_dust_indices, idx);
} else
@@ -4512,7 +4539,7 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_2(std::vector<cryp
{
uint64_t new_paid_amount = i->amount /*+ test_ptx.fee*/ - needed_fee;
LOG_PRINT_L2("Adjusting amount paid to " << get_account_address_as_str(m_testnet, i->addr) << " from " <<
- print_money(i->amount) << " to " << print_money(new_paid_amount) << " to accomodate " <<
+ print_money(i->amount) << " to " << print_money(new_paid_amount) << " to accommodate " <<
print_money(needed_fee) << " fee");
dsts[0].amount += i->amount - new_paid_amount;
i->amount = new_paid_amount;
@@ -5010,11 +5037,10 @@ uint64_t wallet2::get_daemon_blockchain_target_height(string &err)
uint64_t wallet2::get_approximate_blockchain_height() const
{
- if (m_testnet) return 0;
// time of v2 fork
- const time_t fork_time = 1458748658;
+ const time_t fork_time = m_testnet ? 1448285909 : 1458748658;
// v2 fork block
- const uint64_t fork_block = 1009827;
+ const uint64_t fork_block = m_testnet ? 624634 : 1009827;
// avg seconds per block
const int seconds_per_block = DIFFICULTY_TARGET_V2;
// Calculated blockchain height
diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h
index e7692badb..b853c5f3c 100644
--- a/src/wallet/wallet2.h
+++ b/src/wallet/wallet2.h
@@ -585,7 +585,7 @@ namespace tools
uint64_t import_key_images(const std::vector<std::pair<crypto::key_image, crypto::signature>> &signed_key_images, uint64_t &spent, uint64_t &unspent);
uint64_t import_key_images(const std::string &filename, uint64_t &spent, uint64_t &unspent);
- void update_pool_state();
+ void update_pool_state(bool refreshed = false);
std::string encrypt(const std::string &plaintext, const crypto::secret_key &skey, bool authenticated = true) const;
std::string encrypt_with_view_secret_key(const std::string &plaintext, bool authenticated = true) const;
diff --git a/src/wallet/wallet_args.cpp b/src/wallet/wallet_args.cpp
index 1508f3791..34c5a2a5d 100644
--- a/src/wallet/wallet_args.cpp
+++ b/src/wallet/wallet_args.cpp
@@ -149,8 +149,10 @@ namespace wallet_args
if (command_line::get_arg(vm, command_line::arg_help))
{
- tools::msg_writer() << "Monero '" << MONERO_RELEASE_NAME << "' (v" << MONERO_VERSION_FULL << ")";
- tools::msg_writer() << wallet_args::tr("Usage:") << ' ' << usage;
+ tools::msg_writer() << "Monero '" << MONERO_RELEASE_NAME << "' (v" << MONERO_VERSION_FULL << ")" << ENDL;
+ tools::msg_writer() << wallet_args::tr("This is the command line monero wallet. It needs to connect to a monero\n"
+ "daemon to work correctly.") << ENDL;
+ tools::msg_writer() << wallet_args::tr("Usage:") << ENDL << " " << usage;
tools::msg_writer() << desc_all;
return boost::none;
}
diff --git a/src/wallet/wallet_rpc_server.cpp b/src/wallet/wallet_rpc_server.cpp
index f2b3dcaf5..58b020740 100644
--- a/src/wallet/wallet_rpc_server.cpp
+++ b/src/wallet/wallet_rpc_server.cpp
@@ -352,10 +352,25 @@ namespace tools
cryptonote::tx_destination_entry de;
bool has_payment_id;
crypto::hash8 new_payment_id;
- if(!get_account_address_from_str_or_url(de.addr, has_payment_id, new_payment_id, m_wallet->testnet(), it->address, false))
+ er.message = "";
+ if(!get_account_address_from_str_or_url(de.addr, has_payment_id, new_payment_id, m_wallet->testnet(), it->address,
+ [&er](const std::string &url, const std::vector<std::string> &addresses, bool dnssec_valid)->std::string {
+ if (!dnssec_valid)
+ {
+ er.message = std::string("Invalid DNSSEC for ") + url;
+ return {};
+ }
+ if (addresses.empty())
+ {
+ er.message = std::string("No Monero address found at ") + url;
+ return {};
+ }
+ return addresses[0];
+ }))
{
er.code = WALLET_RPC_ERROR_CODE_WRONG_ADDRESS;
- er.message = std::string("WALLET_RPC_ERROR_CODE_WRONG_ADDRESS: ") + it->address;
+ if (er.message.empty())
+ er.message = std::string("WALLET_RPC_ERROR_CODE_WRONG_ADDRESS: ") + it->address;
return false;
}
de.amount = it->amount;
@@ -422,7 +437,7 @@ namespace tools
std::vector<cryptonote::tx_destination_entry> dsts;
std::vector<uint8_t> extra;
- LOG_PRINT_L3("on_transfer_split starts");
+ LOG_PRINT_L3("on_transfer starts");
if (!m_wallet) return not_open(er);
if (m_wallet->restricted())
{
@@ -454,7 +469,8 @@ namespace tools
return false;
}
- m_wallet->commit_tx(ptx_vector);
+ if (!req.do_not_relay)
+ m_wallet->commit_tx(ptx_vector);
// populate response with tx hash
res.tx_hash = epee::string_tools::pod_to_hex(cryptonote::get_transaction_hash(ptx_vector.back().tx));
@@ -463,6 +479,13 @@ namespace tools
res.tx_key = epee::string_tools::pod_to_hex(ptx_vector.back().tx_key);
}
res.fee = ptx_vector.back().fee;
+
+ if (req.get_tx_hex)
+ {
+ cryptonote::blobdata blob;
+ tx_to_blob(ptx_vector.back().tx, blob);
+ res.tx_blob = epee::string_tools::buff_to_hex_nodelimer(blob);
+ }
return true;
}
catch (const tools::error::daemon_busy& e)
@@ -509,6 +532,7 @@ namespace tools
try
{
uint64_t mixin = req.mixin;
+ uint64_t ptx_amount;
if (mixin < 2 && m_wallet->use_fork_rules(2, 10)) {
LOG_PRINT_L1("Requested mixin " << req.mixin << " too low for hard fork 2, using 2");
mixin = 2;
@@ -518,9 +542,12 @@ namespace tools
ptx_vector = m_wallet->create_transactions_2(dsts, mixin, req.unlock_time, req.priority, extra, m_trusted_daemon);
LOG_PRINT_L2("on_transfer_split called create_transactions_2");
- LOG_PRINT_L2("on_transfer_split calling commit_txyy");
- m_wallet->commit_tx(ptx_vector);
- LOG_PRINT_L2("on_transfer_split called commit_txyy");
+ if (!req.do_not_relay)
+ {
+ LOG_PRINT_L2("on_transfer_split calling commit_tx");
+ m_wallet->commit_tx(ptx_vector);
+ LOG_PRINT_L2("on_transfer_split called commit_tx");
+ }
// populate response with tx hashes
for (auto & ptx : ptx_vector)
@@ -530,7 +557,20 @@ namespace tools
{
res.tx_key_list.push_back(epee::string_tools::pod_to_hex(ptx.tx_key));
}
+ // Compute amount leaving wallet in tx. By convention dests does not include change outputs
+ ptx_amount = 0;
+ for(auto & dt: ptx.dests)
+ ptx_amount += dt.amount;
+ res.amount_list.push_back(ptx_amount);
+
res.fee_list.push_back(ptx.fee);
+
+ if (req.get_tx_hex)
+ {
+ cryptonote::blobdata blob;
+ tx_to_blob(ptx.tx, blob);
+ res.tx_blob_list.push_back(epee::string_tools::buff_to_hex_nodelimer(blob));
+ }
}
return true;
@@ -570,7 +610,8 @@ namespace tools
{
std::vector<wallet2::pending_tx> ptx_vector = m_wallet->create_unmixable_sweep_transactions(m_trusted_daemon);
- m_wallet->commit_tx(ptx_vector);
+ if (!req.do_not_relay)
+ m_wallet->commit_tx(ptx_vector);
// populate response with tx hashes
for (auto & ptx : ptx_vector)
@@ -581,6 +622,12 @@ namespace tools
res.tx_key_list.push_back(epee::string_tools::pod_to_hex(ptx.tx_key));
}
res.fee_list.push_back(ptx.fee);
+ if (req.get_tx_hex)
+ {
+ cryptonote::blobdata blob;
+ tx_to_blob(ptx.tx, blob);
+ res.tx_blob_list.push_back(epee::string_tools::buff_to_hex_nodelimer(blob));
+ }
}
return true;
@@ -633,7 +680,8 @@ namespace tools
{
std::vector<wallet2::pending_tx> ptx_vector = m_wallet->create_transactions_all(req.below_amount, dsts[0].addr, req.mixin, req.unlock_time, req.priority, extra, m_trusted_daemon);
- m_wallet->commit_tx(ptx_vector);
+ if (!req.do_not_relay)
+ m_wallet->commit_tx(ptx_vector);
// populate response with tx hashes
for (auto & ptx : ptx_vector)
@@ -643,7 +691,12 @@ namespace tools
{
res.tx_key_list.push_back(epee::string_tools::pod_to_hex(ptx.tx_key));
}
- res.fee_list.push_back(ptx.fee);
+ if (req.get_tx_hex)
+ {
+ cryptonote::blobdata blob;
+ tx_to_blob(ptx.tx, blob);
+ res.tx_blob_list.push_back(epee::string_tools::buff_to_hex_nodelimer(blob));
+ }
}
return true;
@@ -1011,10 +1064,23 @@ namespace tools
cryptonote::account_public_address address;
bool has_payment_id;
crypto::hash8 payment_id;
- if(!get_account_address_from_str_or_url(address, has_payment_id, payment_id, m_wallet->testnet(), req.address, false))
+ er.message = "";
+ if(!get_account_address_from_str_or_url(address, has_payment_id, payment_id, m_wallet->testnet(), req.address,
+ [&er](const std::string &url, const std::vector<std::string> &addresses, bool dnssec_valid)->std::string {
+ if (!dnssec_valid)
+ {
+ er.message = std::string("Invalid DNSSEC for ") + url;
+ return {};
+ }
+ if (addresses.empty())
+ {
+ er.message = std::string("No Monero address found at ") + url;
+ return {};
+ }
+ return addresses[0];
+ }))
{
er.code = WALLET_RPC_ERROR_CODE_WRONG_ADDRESS;
- er.message = "";
return false;
}
@@ -1405,10 +1471,25 @@ namespace tools
bool has_payment_id;
crypto::hash8 payment_id8;
crypto::hash payment_id = cryptonote::null_hash;
- if(!get_account_address_from_str_or_url(address, has_payment_id, payment_id8, m_wallet->testnet(), req.address, false))
+ er.message = "";
+ if(!get_account_address_from_str_or_url(address, has_payment_id, payment_id8, m_wallet->testnet(), req.address,
+ [&er](const std::string &url, const std::vector<std::string> &addresses, bool dnssec_valid)->std::string {
+ if (!dnssec_valid)
+ {
+ er.message = std::string("Invalid DNSSEC for ") + url;
+ return {};
+ }
+ if (addresses.empty())
+ {
+ er.message = std::string("No Monero address found at ") + url;
+ return {};
+ }
+ return addresses[0];
+ }))
{
er.code = WALLET_RPC_ERROR_CODE_WRONG_ADDRESS;
- er.message = std::string("WALLET_RPC_ERROR_CODE_WRONG_ADDRESS: ") + req.address;
+ if (er.message.empty())
+ er.message = std::string("WALLET_RPC_ERROR_CODE_WRONG_ADDRESS: ") + req.address;
return false;
}
if (has_payment_id)
diff --git a/src/wallet/wallet_rpc_server.h b/src/wallet/wallet_rpc_server.h
index 230dcee5b..68e4c049a 100644
--- a/src/wallet/wallet_rpc_server.h
+++ b/src/wallet/wallet_rpc_server.h
@@ -149,7 +149,7 @@ namespace tools
void fill_transfer_entry(tools::wallet_rpc::transfer_entry &entry, const crypto::hash &txid, const tools::wallet2::confirmed_transfer_details &pd);
void fill_transfer_entry(tools::wallet_rpc::transfer_entry &entry, const crypto::hash &txid, const tools::wallet2::unconfirmed_transfer_details &pd);
void fill_transfer_entry(tools::wallet_rpc::transfer_entry &entry, const crypto::hash &payment_id, const tools::wallet2::payment_details &pd);
- bool not_open(epee::json_rpc::error& er);
+ bool not_open(epee::json_rpc::error& er);
wallet2 *m_wallet;
std::string m_wallet_dir;
diff --git a/src/wallet/wallet_rpc_server_commands_defs.h b/src/wallet/wallet_rpc_server_commands_defs.h
index 3c10dc41f..5832bb032 100644
--- a/src/wallet/wallet_rpc_server_commands_defs.h
+++ b/src/wallet/wallet_rpc_server_commands_defs.h
@@ -119,6 +119,8 @@ namespace wallet_rpc
uint64_t unlock_time;
std::string payment_id;
bool get_tx_key;
+ bool do_not_relay;
+ bool get_tx_hex;
BEGIN_KV_SERIALIZE_MAP()
KV_SERIALIZE(destinations)
@@ -127,6 +129,8 @@ namespace wallet_rpc
KV_SERIALIZE(unlock_time)
KV_SERIALIZE(payment_id)
KV_SERIALIZE(get_tx_key)
+ KV_SERIALIZE_OPT(do_not_relay, false)
+ KV_SERIALIZE_OPT(get_tx_hex, false)
END_KV_SERIALIZE_MAP()
};
@@ -136,12 +140,14 @@ namespace wallet_rpc
std::string tx_key;
std::list<std::string> amount_keys;
uint64_t fee;
+ std::string tx_blob;
BEGIN_KV_SERIALIZE_MAP()
KV_SERIALIZE(tx_hash)
KV_SERIALIZE(tx_key)
KV_SERIALIZE(amount_keys)
KV_SERIALIZE(fee)
+ KV_SERIALIZE(tx_blob)
END_KV_SERIALIZE_MAP()
};
};
@@ -156,6 +162,8 @@ namespace wallet_rpc
uint64_t unlock_time;
std::string payment_id;
bool get_tx_keys;
+ bool do_not_relay;
+ bool get_tx_hex;
BEGIN_KV_SERIALIZE_MAP()
KV_SERIALIZE(destinations)
@@ -164,6 +172,8 @@ namespace wallet_rpc
KV_SERIALIZE(unlock_time)
KV_SERIALIZE(payment_id)
KV_SERIALIZE(get_tx_keys)
+ KV_SERIALIZE_OPT(do_not_relay, false)
+ KV_SERIALIZE_OPT(get_tx_hex, false)
END_KV_SERIALIZE_MAP()
};
@@ -180,12 +190,16 @@ namespace wallet_rpc
{
std::list<std::string> tx_hash_list;
std::list<std::string> tx_key_list;
+ std::list<uint64_t> amount_list;
std::list<uint64_t> fee_list;
+ std::list<std::string> tx_blob_list;
BEGIN_KV_SERIALIZE_MAP()
KV_SERIALIZE(tx_hash_list)
KV_SERIALIZE(tx_key_list)
+ KV_SERIALIZE(amount_list)
KV_SERIALIZE(fee_list)
+ KV_SERIALIZE(tx_blob_list)
END_KV_SERIALIZE_MAP()
};
};
@@ -195,9 +209,13 @@ namespace wallet_rpc
struct request
{
bool get_tx_keys;
+ bool do_not_relay;
+ bool get_tx_hex;
BEGIN_KV_SERIALIZE_MAP()
KV_SERIALIZE(get_tx_keys)
+ KV_SERIALIZE_OPT(do_not_relay, false)
+ KV_SERIALIZE_OPT(get_tx_hex, false)
END_KV_SERIALIZE_MAP()
};
@@ -215,11 +233,13 @@ namespace wallet_rpc
std::list<std::string> tx_hash_list;
std::list<std::string> tx_key_list;
std::list<uint64_t> fee_list;
+ std::list<std::string> tx_blob_list;
BEGIN_KV_SERIALIZE_MAP()
KV_SERIALIZE(tx_hash_list)
KV_SERIALIZE(tx_key_list)
KV_SERIALIZE(fee_list)
+ KV_SERIALIZE(tx_blob_list)
END_KV_SERIALIZE_MAP()
};
};
@@ -235,6 +255,8 @@ namespace wallet_rpc
std::string payment_id;
bool get_tx_keys;
uint64_t below_amount;
+ bool do_not_relay;
+ bool get_tx_hex;
BEGIN_KV_SERIALIZE_MAP()
KV_SERIALIZE(address)
@@ -244,6 +266,8 @@ namespace wallet_rpc
KV_SERIALIZE(payment_id)
KV_SERIALIZE(get_tx_keys)
KV_SERIALIZE(below_amount)
+ KV_SERIALIZE_OPT(do_not_relay, false)
+ KV_SERIALIZE_OPT(get_tx_hex, false)
END_KV_SERIALIZE_MAP()
};
@@ -261,11 +285,13 @@ namespace wallet_rpc
std::list<std::string> tx_hash_list;
std::list<std::string> tx_key_list;
std::list<uint64_t> fee_list;
+ std::list<std::string> tx_blob_list;
BEGIN_KV_SERIALIZE_MAP()
KV_SERIALIZE(tx_hash_list)
KV_SERIALIZE(tx_key_list)
KV_SERIALIZE(fee_list)
+ KV_SERIALIZE(tx_blob_list)
END_KV_SERIALIZE_MAP()
};
};
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index cb29b27a0..85763f8b5 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -77,6 +77,7 @@ file(COPY
DESTINATION data)
add_subdirectory(core_tests)
+add_subdirectory(fuzz)
add_subdirectory(crypto)
add_subdirectory(functional_tests)
add_subdirectory(performance_tests)
@@ -114,6 +115,7 @@ set(enabled_tests
hash
performance_tests
core_proxy
+ fuzz
unit_tests)
add_custom_target(tests DEPENDS enabled_tests)
diff --git a/tests/data/fuzz/block/BLOCK1 b/tests/data/fuzz/block/BLOCK1
new file mode 100644
index 000000000..1d681ac23
--- /dev/null
+++ b/tests/data/fuzz/block/BLOCK1
Binary files differ
diff --git a/tests/data/fuzz/block/BLOCK2 b/tests/data/fuzz/block/BLOCK2
new file mode 100644
index 000000000..b9de418a9
--- /dev/null
+++ b/tests/data/fuzz/block/BLOCK2
Binary files differ
diff --git a/tests/data/fuzz/cold-outputs/OUTPUTS1 b/tests/data/fuzz/cold-outputs/OUTPUTS1
new file mode 100644
index 000000000..f449f61ad
--- /dev/null
+++ b/tests/data/fuzz/cold-outputs/OUTPUTS1
Binary files differ
diff --git a/tests/data/fuzz/cold-outputs/OUTPUTS2 b/tests/data/fuzz/cold-outputs/OUTPUTS2
new file mode 100644
index 000000000..907bcdb91
--- /dev/null
+++ b/tests/data/fuzz/cold-outputs/OUTPUTS2
Binary files differ
diff --git a/tests/data/fuzz/cold-transaction/CTX1 b/tests/data/fuzz/cold-transaction/CTX1
new file mode 100644
index 000000000..0afecedbc
--- /dev/null
+++ b/tests/data/fuzz/cold-transaction/CTX1
Binary files differ
diff --git a/tests/data/fuzz/signature/SIG1 b/tests/data/fuzz/signature/SIG1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/data/fuzz/signature/SIG1
diff --git a/tests/data/fuzz/signature/SIG2 b/tests/data/fuzz/signature/SIG2
new file mode 100644
index 000000000..f03e8a4de
--- /dev/null
+++ b/tests/data/fuzz/signature/SIG2
@@ -0,0 +1 @@
+SigV1WbMcLkLKXz3Su9iFUp9aYF5vSfpVetcytVWAgqhn3KNe1kidn7M2KfTRpuK8G1ba1w2u5mbyoWbkLPy2Gm97BM4W \ No newline at end of file
diff --git a/tests/data/fuzz/transaction/TX1 b/tests/data/fuzz/transaction/TX1
new file mode 100644
index 000000000..706af6ace
--- /dev/null
+++ b/tests/data/fuzz/transaction/TX1
Binary files differ
diff --git a/tests/data/fuzz/transaction/TX2 b/tests/data/fuzz/transaction/TX2
new file mode 100644
index 000000000..f751f97a2
--- /dev/null
+++ b/tests/data/fuzz/transaction/TX2
Binary files differ
diff --git a/tests/fuzz/CMakeLists.txt b/tests/fuzz/CMakeLists.txt
new file mode 100644
index 000000000..853d46a12
--- /dev/null
+++ b/tests/fuzz/CMakeLists.txt
@@ -0,0 +1,91 @@
+# Copyright (c) 2014-2017, The Monero Project
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this list of
+# conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice, this list
+# of conditions and the following disclaimer in the documentation and/or other
+# materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its contributors may be
+# used to endorse or promote products derived from this software without specific
+# prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+add_executable(block_fuzz_tests block.cpp fuzzer.cpp)
+target_link_libraries(block_fuzz_tests
+ PRIVATE
+ cryptonote_core
+ p2p
+ epee
+ ${CMAKE_THREAD_LIBS_INIT}
+ ${EXTRA_LIBRARIES})
+set_property(TARGET block_fuzz_tests
+ PROPERTY
+ FOLDER "tests")
+
+add_executable(transaction_fuzz_tests transaction.cpp fuzzer.cpp)
+target_link_libraries(transaction_fuzz_tests
+ PRIVATE
+ cryptonote_core
+ p2p
+ epee
+ ${CMAKE_THREAD_LIBS_INIT}
+ ${EXTRA_LIBRARIES})
+set_property(TARGET transaction_fuzz_tests
+ PROPERTY
+ FOLDER "tests")
+
+add_executable(signature_fuzz_tests signature.cpp fuzzer.cpp)
+target_link_libraries(signature_fuzz_tests
+ PRIVATE
+ wallet
+ cryptonote_core
+ p2p
+ epee
+ ${CMAKE_THREAD_LIBS_INIT}
+ ${EXTRA_LIBRARIES})
+set_property(TARGET signature_fuzz_tests
+ PROPERTY
+ FOLDER "tests")
+
+add_executable(cold-outputs_fuzz_tests cold-outputs.cpp fuzzer.cpp)
+target_link_libraries(cold-outputs_fuzz_tests
+ PRIVATE
+ wallet
+ cryptonote_core
+ p2p
+ epee
+ ${CMAKE_THREAD_LIBS_INIT}
+ ${EXTRA_LIBRARIES})
+set_property(TARGET cold-outputs_fuzz_tests
+ PROPERTY
+ FOLDER "tests")
+
+add_executable(cold-transaction_fuzz_tests cold-transaction.cpp fuzzer.cpp)
+target_link_libraries(cold-transaction_fuzz_tests
+ PRIVATE
+ wallet
+ cryptonote_core
+ p2p
+ epee
+ ${CMAKE_THREAD_LIBS_INIT}
+ ${EXTRA_LIBRARIES})
+set_property(TARGET cold-transaction_fuzz_tests
+ PROPERTY
+ FOLDER "tests")
+
diff --git a/tests/fuzz/block.cpp b/tests/fuzz/block.cpp
new file mode 100644
index 000000000..099e8e3bd
--- /dev/null
+++ b/tests/fuzz/block.cpp
@@ -0,0 +1,67 @@
+// Copyright (c) 2017, The Monero Project
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification, are
+// permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of
+// conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list
+// of conditions and the following disclaimer in the documentation and/or other
+// materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be
+// used to endorse or promote products derived from this software without specific
+// prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "include_base_utils.h"
+#include "common/command_line.h"
+#include "file_io_utils.h"
+#include "cryptonote_protocol/blobdatatype.h"
+#include "cryptonote_basic/cryptonote_basic.h"
+#include "cryptonote_basic/cryptonote_format_utils.h"
+#include "fuzzer.h"
+
+class BlockFuzzer: public Fuzzer
+{
+public:
+ virtual int run(const std::string &filename);
+
+private:
+};
+
+int BlockFuzzer::run(const std::string &filename)
+{
+ std::string s;
+
+ if (!epee::file_io_utils::load_file_to_string(filename, s))
+ {
+ std::cout << "Error: failed to load file " << filename << std::endl;
+ return 1;
+ }
+ cryptonote::block b = AUTO_VAL_INIT(b);
+ if(!parse_and_validate_block_from_blob(s, b))
+ {
+ std::cout << "Error: failed to parse block from file " << filename << std::endl;
+ return 1;
+ }
+ return 0;
+}
+
+int main(int argc, const char **argv)
+{
+ BlockFuzzer fuzzer;
+ return run_fuzzer(argc, argv, fuzzer);
+}
diff --git a/tests/fuzz/cold-outputs.cpp b/tests/fuzz/cold-outputs.cpp
new file mode 100644
index 000000000..e585b4b13
--- /dev/null
+++ b/tests/fuzz/cold-outputs.cpp
@@ -0,0 +1,108 @@
+// Copyright (c) 2017, The Monero Project
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification, are
+// permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of
+// conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list
+// of conditions and the following disclaimer in the documentation and/or other
+// materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be
+// used to endorse or promote products derived from this software without specific
+// prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "include_base_utils.h"
+#include "file_io_utils.h"
+#include "cryptonote_protocol/blobdatatype.h"
+#include "cryptonote_basic/cryptonote_basic.h"
+#include "cryptonote_basic/cryptonote_format_utils.h"
+#include "wallet/wallet2.h"
+#include "fuzzer.h"
+
+class ColdOutputsFuzzer: public Fuzzer
+{
+public:
+ ColdOutputsFuzzer(): wallet(true) {}
+ virtual int init();
+ virtual int run(const std::string &filename);
+
+private:
+ tools::wallet2 wallet;
+};
+
+int ColdOutputsFuzzer::init()
+{
+ static const char * const spendkey_hex = "0b4f47697ec99c3de6579304e5f25c68b07afbe55b71d99620bf6cbf4e45a80f";
+ crypto::secret_key spendkey;
+ epee::string_tools::hex_to_pod(spendkey_hex, spendkey);
+
+ try
+ {
+ boost::filesystem::remove("/tmp/cold-outputs-test.keys");
+ boost::filesystem::remove("/tmp/cold-outputs-test.address.txt");
+ boost::filesystem::remove("/tmp/cold-outputs-test");
+
+ wallet.init("");
+ wallet.generate("/tmp/cold-outputs-test", "", spendkey, true, false);
+
+ boost::filesystem::remove("/tmp/cold-outputs-test.keys");
+ boost::filesystem::remove("/tmp/cold-outputs-test.address.txt");
+ boost::filesystem::remove("/tmp/cold-outputs-test");
+ }
+ catch (const std::exception &e)
+ {
+ std::cerr << "Error on ColdOutputsFuzzer::init: " << e.what() << std::endl;
+ return 1;
+ }
+ return 0;
+}
+
+int ColdOutputsFuzzer::run(const std::string &filename)
+{
+ std::string s;
+
+ if (!epee::file_io_utils::load_file_to_string(filename, s))
+ {
+ std::cout << "Error: failed to load file " << filename << std::endl;
+ return 1;
+ }
+ s = std::string("\x01\x16serialization::archive") + s;
+ try
+ {
+ std::vector<tools::wallet2::transfer_details> outputs;
+ std::stringstream iss;
+ iss << s;
+ boost::archive::portable_binary_iarchive ar(iss);
+ ar >> outputs;
+ size_t n_outputs = wallet.import_outputs(outputs);
+ std::cout << boost::lexical_cast<std::string>(n_outputs) << " outputs imported" << std::endl;
+ }
+ catch (const std::exception &e)
+ {
+ std::cerr << "Failed to import outputs: " << e.what() << std::endl;
+ return 1;
+ }
+ return 0;
+}
+
+int main(int argc, const char **argv)
+{
+ ColdOutputsFuzzer fuzzer;
+ return run_fuzzer(argc, argv, fuzzer);
+}
+
diff --git a/tests/fuzz/cold-transaction.cpp b/tests/fuzz/cold-transaction.cpp
new file mode 100644
index 000000000..c35d604a8
--- /dev/null
+++ b/tests/fuzz/cold-transaction.cpp
@@ -0,0 +1,110 @@
+// Copyright (c) 2017, The Monero Project
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification, are
+// permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of
+// conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list
+// of conditions and the following disclaimer in the documentation and/or other
+// materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be
+// used to endorse or promote products derived from this software without specific
+// prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "include_base_utils.h"
+#include "common/command_line.h"
+#include "file_io_utils.h"
+#include "cryptonote_protocol/blobdatatype.h"
+#include "cryptonote_basic/cryptonote_basic.h"
+#include "cryptonote_basic/cryptonote_format_utils.h"
+#include "wallet/wallet2.h"
+#include "fuzzer.h"
+
+class ColdTransactionFuzzer: public Fuzzer
+{
+public:
+ ColdTransactionFuzzer(): wallet(true) {}
+ virtual int init();
+ virtual int run(const std::string &filename);
+
+private:
+ tools::wallet2 wallet;
+};
+
+
+int ColdTransactionFuzzer::init()
+{
+ static const char * const spendkey_hex = "0b4f47697ec99c3de6579304e5f25c68b07afbe55b71d99620bf6cbf4e45a80f";
+ crypto::secret_key spendkey;
+ epee::string_tools::hex_to_pod(spendkey_hex, spendkey);
+
+ try
+ {
+ boost::filesystem::remove("/tmp/cold-transaction-test.keys");
+ boost::filesystem::remove("/tmp/cold-transaction-test.address.txt");
+ boost::filesystem::remove("/tmp/cold-transaction-test");
+
+ wallet.init("");
+ wallet.generate("/tmp/cold-transaction-test", "", spendkey, true, false);
+
+ boost::filesystem::remove("/tmp/cold-transaction-test.keys");
+ boost::filesystem::remove("/tmp/cold-transaction-test.address.txt");
+ boost::filesystem::remove("/tmp/cold-transaction-test");
+ }
+ catch (const std::exception &e)
+ {
+ std::cerr << "Error on ColdTransactionFuzzer::init: " << e.what() << std::endl;
+ return 1;
+ }
+ return 0;
+}
+
+int ColdTransactionFuzzer::run(const std::string &filename)
+{
+ std::string s;
+
+ if (!epee::file_io_utils::load_file_to_string(filename, s))
+ {
+ std::cout << "Error: failed to load file " << filename << std::endl;
+ return 1;
+ }
+ s = std::string("\x01\x16serialization::archive") + s;
+ try
+ {
+ tools::wallet2::unsigned_tx_set exported_txs;
+ std::stringstream iss;
+ iss << s;
+ boost::archive::portable_binary_iarchive ar(iss);
+ ar >> exported_txs;
+ std::vector<tools::wallet2::pending_tx> ptx;
+ bool success = wallet.sign_tx(exported_txs, "/tmp/cold-transaction-test-signed", ptx);
+ std::cout << (success ? "signed" : "error") << std::endl;
+ }
+ catch (const std::exception &e)
+ {
+ std::cerr << "Failed to sign transaction: " << e.what() << std::endl;
+ return 1;
+ }
+ return 0;
+}
+
+int main(int argc, const char **argv)
+{
+ ColdTransactionFuzzer fuzzer;
+ return run_fuzzer(argc, argv, fuzzer);
+}
diff --git a/tests/fuzz/fuzzer.cpp b/tests/fuzz/fuzzer.cpp
new file mode 100644
index 000000000..3edf8cd19
--- /dev/null
+++ b/tests/fuzz/fuzzer.cpp
@@ -0,0 +1,96 @@
+// Copyright (c) 2017, The Monero Project
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification, are
+// permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of
+// conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list
+// of conditions and the following disclaimer in the documentation and/or other
+// materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be
+// used to endorse or promote products derived from this software without specific
+// prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include <boost/program_options.hpp>
+#include "include_base_utils.h"
+#include "common/command_line.h"
+#include "fuzzer.h"
+
+#if (!defined(__clang__) || (__clang__ < 5))
+static int __AFL_LOOP(int)
+{
+ static int once = 0;
+ if (once)
+ return 0;
+ once = 1;
+ return 1;
+}
+#endif
+
+using namespace epee;
+using namespace boost::program_options;
+
+int run_fuzzer(int argc, const char **argv, Fuzzer &fuzzer)
+{
+ TRY_ENTRY();
+ string_tools::set_module_name_and_folder(argv[0]);
+
+ //set up logging options
+ mlog_configure(mlog_get_default_log_path("fuzztests.log"), true);
+ mlog_set_log("*:FATAL,logging:none");
+
+ options_description desc_options("Allowed options");
+ command_line::add_arg(desc_options, command_line::arg_help);
+
+ variables_map vm;
+ bool r = command_line::handle_error_helper(desc_options, [&]()
+ {
+ store(parse_command_line(argc, argv, desc_options), vm);
+ notify(vm);
+ return true;
+ });
+ if (!r)
+ return 1;
+
+ if (command_line::get_arg(vm, command_line::arg_help))
+ {
+ std::cout << desc_options << std::endl;
+ return 0;
+ }
+
+ if (argc < 2)
+ {
+ std::cout << desc_options << std::endl;
+ return 1;
+ }
+
+ int ret = fuzzer.init();
+ if (ret)
+ return ret;
+
+ const std::string filename = argv[1];
+ while (__AFL_LOOP(1000))
+ {
+ ret = fuzzer.run(filename);
+ if (ret)
+ return ret;
+ }
+
+ CATCH_ENTRY_L0("fuzzer_main", 1);
+ return 0;
+}
diff --git a/tests/fuzz/fuzzer.h b/tests/fuzz/fuzzer.h
new file mode 100644
index 000000000..a0a9c0173
--- /dev/null
+++ b/tests/fuzz/fuzzer.h
@@ -0,0 +1,38 @@
+// Copyright (c) 2017, The Monero Project
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification, are
+// permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of
+// conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list
+// of conditions and the following disclaimer in the documentation and/or other
+// materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be
+// used to endorse or promote products derived from this software without specific
+// prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include <string>
+
+class Fuzzer
+{
+public:
+ virtual int init() { return 0; }
+ virtual int run(const std::string &filename) = 0;
+};
+
+int run_fuzzer(int argc, const char **argv, Fuzzer &fuzzer);
diff --git a/tests/fuzz/signature.cpp b/tests/fuzz/signature.cpp
new file mode 100644
index 000000000..69d0ad25b
--- /dev/null
+++ b/tests/fuzz/signature.cpp
@@ -0,0 +1,105 @@
+// Copyright (c) 2017, The Monero Project
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification, are
+// permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of
+// conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list
+// of conditions and the following disclaimer in the documentation and/or other
+// materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be
+// used to endorse or promote products derived from this software without specific
+// prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "include_base_utils.h"
+#include "common/command_line.h"
+#include "file_io_utils.h"
+#include "cryptonote_protocol/blobdatatype.h"
+#include "cryptonote_basic/cryptonote_basic.h"
+#include "cryptonote_basic/cryptonote_format_utils.h"
+#include "wallet/wallet2.h"
+#include "fuzzer.h"
+
+class SignatureFuzzer: public Fuzzer
+{
+public:
+ SignatureFuzzer(): Fuzzer(), wallet(true) {}
+ virtual int init();
+ virtual int run(const std::string &filename);
+
+private:
+ tools::wallet2 wallet;
+ cryptonote::account_public_address address;
+};
+
+int SignatureFuzzer::init()
+{
+ static const char * const spendkey_hex = "0b4f47697ec99c3de6579304e5f25c68b07afbe55b71d99620bf6cbf4e45a80f";
+ crypto::secret_key spendkey;
+ epee::string_tools::hex_to_pod(spendkey_hex, spendkey);
+
+ try
+ {
+ boost::filesystem::remove("/tmp/signature-test.keys");
+ boost::filesystem::remove("/tmp/signature-test.address.txt");
+ boost::filesystem::remove("/tmp/signature-test");
+
+ wallet.init("");
+ wallet.generate("/tmp/signature-test", "", spendkey, true, false);
+
+ boost::filesystem::remove("/tmp/signature-test.keys");
+ boost::filesystem::remove("/tmp/signature-test.address.txt");
+ boost::filesystem::remove("/tmp/signature-test");
+
+ bool has_payment_id;
+ crypto::hash8 new_payment_id;
+ if (!cryptonote::get_account_address_from_str_or_url(address, has_payment_id, new_payment_id, true, "9uVsvEryzpN8WH2t1WWhFFCG5tS8cBNdmJYNRuckLENFimfauV5pZKeS1P2CbxGkSDTUPHXWwiYE5ZGSXDAGbaZgDxobqDN"))
+ {
+ std::cerr << "failed to parse address" << std::endl;
+ return 1;
+ }
+ }
+ catch (const std::exception &e)
+ {
+ std::cerr << "Error on SignatureFuzzer::init: " << e.what() << std::endl;
+ return 1;
+ }
+ return 0;
+}
+
+int SignatureFuzzer::run(const std::string &filename)
+{
+ std::string s;
+
+ if (!epee::file_io_utils::load_file_to_string(filename, s))
+ {
+ std::cout << "Error: failed to load file " << filename << std::endl;
+ return 1;
+ }
+
+ bool valid = wallet.verify("test", address, s);
+ std::cout << "Signature " << (valid ? "valid" : "invalid") << std::endl;
+
+ return 0;
+}
+
+int main(int argc, const char **argv)
+{
+ SignatureFuzzer fuzzer;
+ return run_fuzzer(argc, argv, fuzzer);
+}
diff --git a/tests/fuzz/transaction.cpp b/tests/fuzz/transaction.cpp
new file mode 100644
index 000000000..21cd01bef
--- /dev/null
+++ b/tests/fuzz/transaction.cpp
@@ -0,0 +1,67 @@
+// Copyright (c) 2017, The Monero Project
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification, are
+// permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of
+// conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list
+// of conditions and the following disclaimer in the documentation and/or other
+// materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be
+// used to endorse or promote products derived from this software without specific
+// prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "include_base_utils.h"
+#include "common/command_line.h"
+#include "file_io_utils.h"
+#include "cryptonote_protocol/blobdatatype.h"
+#include "cryptonote_basic/cryptonote_basic.h"
+#include "cryptonote_basic/cryptonote_format_utils.h"
+#include "fuzzer.h"
+
+class TransactionFuzzer: public Fuzzer
+{
+public:
+ virtual int run(const std::string &filename);
+
+private:
+};
+
+int TransactionFuzzer::run(const std::string &filename)
+{
+ std::string s;
+
+ if (!epee::file_io_utils::load_file_to_string(filename, s))
+ {
+ std::cout << "Error: failed to load file " << filename << std::endl;
+ return 1;
+ }
+ cryptonote::transaction tx = AUTO_VAL_INIT(tx);
+ if(!parse_and_validate_tx_from_blob(s, tx))
+ {
+ std::cout << "Error: failed to parse transaction from file " << filename << std::endl;
+ return 1;
+ }
+ return 0;
+}
+
+int main(int argc, const char **argv)
+{
+ TransactionFuzzer fuzzer;
+ return run_fuzzer(argc, argv, fuzzer);
+}
diff --git a/translations/monero.ts b/translations/monero.ts
index 1862e88ff..c65013f12 100644
--- a/translations/monero.ts
+++ b/translations/monero.ts
@@ -81,42 +81,42 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/unsigned_transaction.cpp" line="134"/>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="135"/>
<source>Claimed change does not go to a paid address</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/unsigned_transaction.cpp" line="140"/>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="141"/>
<source>Claimed change is larger than payment to the change address</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/unsigned_transaction.cpp" line="146"/>
- <source>Change does to more than one address</source>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="151"/>
+ <source>Change goes to more than one address</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/unsigned_transaction.cpp" line="158"/>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="164"/>
<source>sending %s to %s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/unsigned_transaction.cpp" line="164"/>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="170"/>
<source>with no destinations</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/unsigned_transaction.cpp" line="170"/>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="176"/>
<source>%s change to %s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/unsigned_transaction.cpp" line="173"/>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="179"/>
<source>no change</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/unsigned_transaction.cpp" line="175"/>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="181"/>
<source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min mixin %lu. %s</source>
<translation type="unfinished"></translation>
</message>
@@ -124,41 +124,41 @@
<context>
<name>Monero::WalletImpl</name>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="926"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="942"/>
<source>payment id has invalid format, expected 16 or 64 character hex string: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="936"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="952"/>
<source>Failed to add short payment id: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="962"/>
- <location filename="../src/wallet/api/wallet.cpp" line="1056"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="978"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1072"/>
<source>daemon is busy. Please try again later.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="965"/>
- <location filename="../src/wallet/api/wallet.cpp" line="1059"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="981"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1075"/>
<source>no connection to daemon. Please make sure daemon is running.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="968"/>
- <location filename="../src/wallet/api/wallet.cpp" line="1062"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="984"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1078"/>
<source>RPC error: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="1065"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1081"/>
<source>failed to get random outputs to mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="978"/>
- <location filename="../src/wallet/api/wallet.cpp" line="1072"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="994"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1088"/>
<source>not enough money to transfer, available only %s, sent amount %s</source>
<translation type="unfinished"></translation>
</message>
@@ -203,114 +203,114 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="476"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="477"/>
<source>failed to generate new wallet: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="783"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="799"/>
<source>Failed to load unsigned transactions</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="804"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="820"/>
<source>Failed to load transaction from file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="822"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="838"/>
<source>Wallet is view only</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="831"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="847"/>
<source>failed to save file </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="858"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="874"/>
<source>Failed to import key images: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="971"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="987"/>
<source>failed to get random outputs to mix: %s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="987"/>
- <location filename="../src/wallet/api/wallet.cpp" line="1081"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1003"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1097"/>
<source>not enough money to transfer, available only %s, transaction amount %s = %s + %s (fee)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="996"/>
- <location filename="../src/wallet/api/wallet.cpp" line="1090"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1012"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1106"/>
<source>not enough outputs for specified mixin_count</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="998"/>
- <location filename="../src/wallet/api/wallet.cpp" line="1092"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1014"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1108"/>
<source>output amount</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="998"/>
- <location filename="../src/wallet/api/wallet.cpp" line="1092"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1014"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1108"/>
<source>found outputs to mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="1003"/>
- <location filename="../src/wallet/api/wallet.cpp" line="1097"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1019"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1113"/>
<source>transaction was not constructed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="1007"/>
- <location filename="../src/wallet/api/wallet.cpp" line="1101"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1023"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1117"/>
<source>transaction %s was rejected by daemon with status: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="1014"/>
- <location filename="../src/wallet/api/wallet.cpp" line="1108"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1030"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1124"/>
<source>one of destinations is zero</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="1017"/>
- <location filename="../src/wallet/api/wallet.cpp" line="1111"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1033"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1127"/>
<source>failed to find a suitable way to split transactions</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="1020"/>
- <location filename="../src/wallet/api/wallet.cpp" line="1114"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1036"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1130"/>
<source>unknown transfer error: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="1023"/>
- <location filename="../src/wallet/api/wallet.cpp" line="1117"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1039"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1133"/>
<source>internal error: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="1026"/>
- <location filename="../src/wallet/api/wallet.cpp" line="1120"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1042"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1136"/>
<source>unexpected error: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="1029"/>
- <location filename="../src/wallet/api/wallet.cpp" line="1123"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1045"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1139"/>
<source>unknown error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/api/wallet.cpp" line="1403"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1419"/>
<source>Rescan spent can only be used with a trusted daemon</source>
<translation type="unfinished"></translation>
</message>
@@ -405,7 +405,7 @@
<context>
<name>command_line</name>
<message>
- <location filename="../src/common/command_line.cpp" line="69"/>
+ <location filename="../src/common/command_line.cpp" line="76"/>
<source>yes</source>
<translation type="unfinished"></translation>
</message>
@@ -451,1156 +451,1178 @@
<context>
<name>cryptonote::simple_wallet</name>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="280"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="290"/>
<source>Commands: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1659"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1557"/>
<source>failed to read wallet password</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1417"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1325"/>
<source>invalid password</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="680"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="697"/>
<source>start_mining [&lt;number_of_threads&gt;] - Start mining in daemon</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="681"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="698"/>
<source>Stop mining in daemon</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="682"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="699"/>
<source>Save current blockchain data</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="684"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="701"/>
<source>Show current wallet balance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="687"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="704"/>
<source>Show blockchain height</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="697"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="715"/>
<source>Show current wallet public address</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="723"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="744"/>
<source>Show this help</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="752"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="788"/>
<source>set seed: needs an argument. available options: language</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="765"/>
- <source>set always-confirm-transfers: needs an argument (0 or 1)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="932"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="811"/>
<source>set: unrecognized argument(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1544"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1442"/>
<source>wallet file path not valid: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="984"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="863"/>
<source>Attempting to generate or restore wallet, but specified file(s) exist. Exiting to not risk overwriting.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1033"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="416"/>
+ <source>usage: payment_id</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="710"/>
+ <source>sweep_below &lt;amount_threshold&gt; [mixin] address [payment_id] - Send all unlocked outputs below the threshold to an address</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="743"/>
+ <source>Generate a new random full size payment id - these will be unencrypted on the blockchain, see integrated_address for encrypted short payment ids</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="774"/>
+ <source>needs an argument</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="797"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="798"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="799"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="801"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="804"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="805"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="809"/>
+ <source>0 or 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="800"/>
+ <source>integer &gt;= 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="803"/>
+ <source>0, 1, 2, 3, or 4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="807"/>
+ <source>unsigned integer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="912"/>
<source>PLEASE NOTE: the following 25 words can be used to recover access to your wallet. Please write them down and store them somewhere safe and secure. Please do not store them in your email or on file storage services outside of your immediate control.
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1076"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="958"/>
+ <source>--restore-deterministic-wallet uses --generate-new-wallet, not --wallet-file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="973"/>
<source>specify a recovery parameter with the --electrum-seed=&quot;words list here&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1353"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1123"/>
+ <source>specify a wallet path with --generate-new-wallet (not --wallet-file)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1261"/>
<source>wallet failed to connect to daemon: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1361"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1269"/>
<source>Daemon uses a different RPC major version (%u) than the wallet (%u): %s. Either update one of them, or use --allow-mismatched-daemon-version.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1380"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1288"/>
<source>List of available languages for your wallet&apos;s seed:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1389"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1297"/>
<source>Enter the number corresponding to the language of your choice: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1446"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1354"/>
<source>You had been using a deprecated version of the wallet. Please use the new seed that we provide.
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1470"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1527"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1368"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1425"/>
<source>Generated new wallet: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1476"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1532"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1374"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1430"/>
<source>failed to generate new wallet: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1559"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1457"/>
<source>Opened watch-only wallet</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1559"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1457"/>
<source>Opened wallet</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1568"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1466"/>
<source>You had been using a deprecated version of the wallet. Please proceed to upgrade your wallet.
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1583"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1481"/>
<source>You had been using a deprecated version of the wallet. Your wallet file format is being upgraded now.
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1591"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1489"/>
<source>failed to load wallet: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1599"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1497"/>
<source>Use &quot;help&quot; command to see the list of available commands.
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1643"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1541"/>
<source>Wallet data saved</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1711"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1613"/>
<source>Mining started in daemon</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1713"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1615"/>
<source>mining has NOT been started: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1728"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1634"/>
<source>Mining stopped in daemon</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1730"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1636"/>
<source>mining has NOT been stopped: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1745"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1655"/>
<source>Blockchain saved</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1760"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1777"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1789"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1670"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1687"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1699"/>
<source>Height </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1761"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1778"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1790"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1671"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1688"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1700"/>
<source>transaction </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1762"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1672"/>
<source>received </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1779"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1689"/>
<source>spent </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1791"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1701"/>
<source>unsupported transaction format</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1808"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1718"/>
<source>Starting refresh...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1821"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1731"/>
<source>Refresh done, blocks received: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2278"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2799"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2186"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2701"/>
<source>payment id has invalid format, expected 16 or 64 character hex string: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2293"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2201"/>
<source>bad locked_blocks parameter:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2320"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2824"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2228"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2726"/>
<source>a single transaction cannot use more than one payment id: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2329"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2833"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2237"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2735"/>
<source>failed to set up payment id, though it was decoded correctly</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2354"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2449"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2629"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2847"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2894"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2262"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2355"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2533"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2749"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2794"/>
<source>transaction cancelled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2417"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2323"/>
<source>Sending %s. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2420"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2326"/>
<source>Your transaction needs to be split into %llu transactions. This will result in a transaction fee being applied to each transaction, for a total fee of %s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2426"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2332"/>
<source>The transaction fee is %s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2429"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2335"/>
<source>, of which %s is dust from change</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2430"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2336"/>
<source>.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2430"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2336"/>
<source>A total of %s from dust change will be sent to dust address</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2435"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2341"/>
<source>.
This transaction will unlock on block %llu, in approximately %s days (assuming 2 minutes per block)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2463"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2642"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2907"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2367"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2544"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2805"/>
<source>Failed to write transaction(s) to file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2467"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2646"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2911"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2371"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2548"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2809"/>
<source>Unsigned transaction(s) successfully written to file: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2502"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2681"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2946"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3233"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2406"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2583"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2844"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3157"/>
<source>Not enough money in unlocked balance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2511"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2690"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2955"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3242"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2415"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2592"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2853"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3166"/>
<source>Failed to find a way to create transactions. This is usually due to dust which is so small it cannot pay for itself in fees, or trying to send more money than the unlocked balance, or not leaving enough for fees</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2531"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2710"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2975"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2435"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2612"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2873"/>
<source>Reason: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2543"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2722"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2987"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2447"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2624"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2885"/>
<source>failed to find a suitable way to split transactions</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2599"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2503"/>
<source>No unmixable outputs found</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2807"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2709"/>
<source>No address given</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3089"/>
- <source>Claimed change does not go to a paid address</source>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2921"/>
+ <source>missing amount threshold</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3094"/>
- <source>Claimed change is larger than payment to the change address</source>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2926"/>
+ <source>invalid amount threshold</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3099"/>
- <source>Change does to more than one address</source>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3008"/>
+ <source>Claimed change does not go to a paid address</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3111"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3013"/>
+ <source>Claimed change is larger than payment to the change address</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3035"/>
<source>sending %s to %s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3117"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3041"/>
<source>with no destinations</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3164"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3088"/>
<source>Failed to sign transaction</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3170"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3094"/>
<source>Failed to sign transaction: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3196"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3120"/>
<source>Failed to load transaction from file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3213"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3137"/>
<source>daemon is busy. Please try later</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1835"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2081"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2491"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2670"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2935"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3222"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1745"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1995"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2395"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2572"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2833"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3146"/>
<source>RPC error: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="302"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="312"/>
<source>wallet is watch-only and has no spend key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="380"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="390"/>
<source>Your original password was incorrect.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="394"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="404"/>
<source>Error with wallet rewrite: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="490"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="513"/>
<source>priority must be 0, 1, 2, 3, or 4 </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="502"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="525"/>
<source>priority must be 0, 1, 2, 3,or 4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="517"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="540"/>
<source>priority must be 0, 1, 2 3,or 4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="606"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="623"/>
<source>invalid unit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="624"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="641"/>
<source>invalid count: must be an unsigned integer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="642"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="659"/>
<source>invalid value</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="688"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="705"/>
<source>Same as transfer, but using an older transaction building algorithm</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="692"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="709"/>
<source>sweep_all [mixin] address [payment_id] - Send all unlocked balance to an address</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="693"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="711"/>
<source>donate [&lt;mixin_count&gt;] &lt;amount&gt; [payment_id] - Donate &lt;amount&gt; to the development team (donate.getmonero.org)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="696"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="714"/>
<source>set_log &lt;level&gt;|&lt;categories&gt; - Change current log detail (level must be &lt;0-4&gt;)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="699"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="717"/>
<source>address_book [(add (&lt;address&gt; [pid &lt;long or short payment id&gt;])|&lt;integrated address&gt; [&lt;description possibly with whitespaces&gt;])|(delete &lt;index&gt;)] - Print all entries in the address book, optionally adding/deleting an entry to/from it</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="705"/>
- <source>Available options: seed language - set wallet seed language; always-confirm-transfers &lt;1|0&gt; - whether to confirm unsplit txes; print-ring-members &lt;1|0&gt; - whether to print detailed information about ring members during confirmation; store-tx-info &lt;1|0&gt; - whether to store outgoing tx info (destination address, payment ID, tx secret key) for future reference; default-mixin &lt;n&gt; - set default mixin (default is 4); auto-refresh &lt;1|0&gt; - whether to automatically sync new blocks from the daemon; refresh-type &lt;full|optimize-coinbase|no-coinbase|default&gt; - set wallet refresh behaviour; priority [0|1|2|3|4] - default/unimportant/normal/elevated/priority fee; confirm-missing-payment-id &lt;1|0&gt;; ask-password &lt;1|0&gt;; unit &lt;monero|millinero|micronero|nanonero|piconero&gt; - set default monero (sub-)unit; min-output-count [n] - try to keep at least that many outputs of value at least min-output-value; min-output-value [n] - try to keep at least min-output-count outputs of at least that value - merge-destinations &lt;1|0&gt; - whether to merge multiple payments to the same destination address</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="709"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="729"/>
<source>show_transfers [in|out|pending|failed|pool] [&lt;min_height&gt; [&lt;max_height&gt;]] - Show incoming/outgoing transfers within an optional height range</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="710"/>
- <source>unspent_outputs [&lt;min_amount&gt; &lt;max_amount&gt;] - Show unspent outputs within an optional amount range)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="721"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="741"/>
<source>Show information about a transfer to/from this address</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="722"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="742"/>
<source>Change wallet password</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="778"/>
- <source>set print-ring-members: needs an argument (0 or 1)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="844"/>
- <source>set priority: needs an argument: 0, 1, 2, 3, or 4</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="870"/>
- <source>set ask-password: needs an argument (0 or 1)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="883"/>
- <source>set unit: needs an argument (monero, millinero, micronero, nanop, piconero)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="896"/>
- <source>set min-outputs-count: needs an argument (unsigned integer)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="909"/>
- <source>set min-outputs-value: needs an argument (unsigned integer)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="922"/>
- <source>set merge-destinations: needs an argument (0 or 1)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="941"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="820"/>
<source>usage: set_log &lt;log_level_number_0-4&gt; | &lt;categories&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1007"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="886"/>
<source>(Y/Yes/N/No): </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1254"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1281"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1157"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1184"/>
<source>bad m_restore_height parameter: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1259"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1162"/>
<source>date format must be YYYY-MM-DD</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1272"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1175"/>
<source>Restore height is: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1273"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2442"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1176"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2348"/>
<source>Is this okay? (Y/Yes/N/No): </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1305"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1212"/>
<source>Daemon is local, assuming trusted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1655"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1553"/>
<source>Password for new watch-only wallet</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1702"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1604"/>
<source>invalid arguments. Please use start_mining [&lt;number_of_threads&gt;] [do_bg_mining] [ignore_battery], &lt;number_of_threads&gt; should be from 1 to </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1845"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2553"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2732"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2997"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3281"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1755"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2457"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2634"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2895"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3205"/>
<source>internal error: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1850"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2086"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2558"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2737"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3002"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3286"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1760"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2000"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2462"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2639"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2900"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3210"/>
<source>unexpected error: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1855"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2091"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2563"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2742"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3007"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3291"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1765"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2005"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2467"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2644"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2905"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3215"/>
<source>unknown error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1860"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1770"/>
<source>refresh failed: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1860"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1770"/>
<source>Blocks received: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1885"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1795"/>
<source>unlocked balance: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1934"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1982"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="808"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/>
<source>amount</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1934"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/>
<source>spent</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1934"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/>
<source>global index</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1934"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/>
<source>tx id</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1956"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1868"/>
<source>No incoming transfers</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1960"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1872"/>
<source>No incoming available transfers</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1964"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1876"/>
<source>No incoming unavailable transfers</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1975"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1887"/>
<source>expected at least one payment_id</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1982"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/>
<source>payment</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1982"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/>
<source>transaction</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1982"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/>
<source>height</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1982"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/>
<source>unlock time</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1994"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1908"/>
<source>No payments with id </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2046"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2112"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2374"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1960"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2026"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2280"/>
<source>failed to get blockchain height: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2102"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2016"/>
<source>failed to connect to the daemon</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2120"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2034"/>
<source>
Transaction %llu/%llu: txid=%s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2130"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2044"/>
<source>
Input %llu/%llu: amount=%s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2146"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2060"/>
<source>failed to get output: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2154"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2068"/>
<source>output key&apos;s originating block height shouldn&apos;t be higher than the blockchain height</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2158"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2072"/>
<source>
Originating block heights: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2173"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2087"/>
<source>
|</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2173"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3788"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2087"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3915"/>
<source>|
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2190"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2104"/>
<source>
Warning: Some input keys being spent are from </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2192"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2106"/>
<source>, which can break the anonymity of ring signature. Make sure this is intentional!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2244"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3019"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2152"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2937"/>
<source>wrong number of arguments</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2349"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2842"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2257"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2744"/>
<source>No payment id is included with this transaction. Is this okay? (Y/Yes/N/No): </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2392"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2862"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2298"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2762"/>
<source>No outputs found, or daemon is not ready</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2495"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2674"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2939"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3226"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2399"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2576"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2837"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3150"/>
<source>failed to get random outputs to mix: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2614"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2879"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2518"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2779"/>
<source>Sweeping %s in %llu transactions for a total fee of %s. Is this okay? (Y/Yes/N/No): </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2620"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2524"/>
<source>Sweeping %s for a total fee of %s. Is this okay? (Y/Yes/N/No): </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3051"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2969"/>
<source>Donating </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3129"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3053"/>
<source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min mixin %lu. %sIs this okay? (Y/Yes/N/No): </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3153"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3077"/>
<source>This is a watch only wallet</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4316"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4443"/>
<source>usage: show_transfer &lt;txid&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4430"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4557"/>
<source>Transaction ID not found</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="227"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="237"/>
<source>true</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="256"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="266"/>
<source>failed to parse refresh type</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="320"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="352"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="330"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="362"/>
<source>wallet is watch-only and has no seed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="343"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="357"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="353"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="367"/>
<source>wallet is non-deterministic and has no seed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="427"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="444"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="565"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="450"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="467"/>
<source>wallet is watch-only and cannot transfer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="451"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="457"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="473"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="474"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="480"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="496"/>
<source>mixin must be an integer &gt;= 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="478"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="501"/>
<source>could not change default mixin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="522"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="545"/>
<source>could not change default priority</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="683"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="700"/>
<source>Synchronize transactions and balance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="685"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="702"/>
<source>incoming_transfers [available|unavailable] - Show incoming transfers, all or filtered by availability</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="686"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="703"/>
<source>payments &lt;PID_1&gt; [&lt;PID_2&gt; ... &lt;PID_N&gt;] - Show payments for given payment ID[s]</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="689"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="706"/>
<source>transfer [&lt;priority&gt;] [&lt;mixin_count&gt;] &lt;address&gt; &lt;amount&gt; [&lt;payment_id&gt;] - Transfer &lt;amount&gt; to &lt;address&gt;. &lt;priority&gt; is the priority of the transaction. The higher the priority, the higher the fee of the transaction. Valid values in priority order (from lowest to highest) are: unimportant, normal, elevated, priority. If omitted, the default value (see the command &quot;set priority&quot;) is used. &lt;mixin_count&gt; is the number of extra inputs to include for untraceability. Multiple payments can be made at once by adding &lt;address_2&gt; &lt;amount_2&gt; etcetera (before the payment ID, if it&apos;s included)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="690"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="707"/>
<source>locked_transfer [&lt;mixin_count&gt;] &lt;addr&gt; &lt;amount&gt; &lt;lockblocks&gt;(Number of blocks to lock the transaction for, max 1000000) [&lt;payment_id&gt;]</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="691"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="708"/>
<source>Send all unmixable outputs to yourself with mixin 0</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="694"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="712"/>
<source>Sign a transaction from a file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="695"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="713"/>
<source>Submit a signed transaction from a file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="698"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="716"/>
<source>integrated_address [PID] - Encode a payment ID into an integrated address for the current wallet public address (no argument uses a random payment ID), or decode an integrated address to standard address and payment ID</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="700"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="718"/>
<source>Save wallet data</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="701"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="719"/>
<source>Save a watch-only keys file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="702"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="720"/>
<source>Display private view key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="703"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="721"/>
<source>Display private spend key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="704"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="722"/>
<source>Display Electrum-style mnemonic seed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="706"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="723"/>
+ <source>Available options: seed language - set wallet seed language; always-confirm-transfers &lt;1|0&gt; - whether to confirm unsplit txes; print-ring-members &lt;1|0&gt; - whether to print detailed information about ring members during confirmation; store-tx-info &lt;1|0&gt; - whether to store outgoing tx info (destination address, payment ID, tx secret key) for future reference; default-mixin &lt;n&gt; - set default mixin (default is 4); auto-refresh &lt;1|0&gt; - whether to automatically sync new blocks from the daemon; refresh-type &lt;full|optimize-coinbase|no-coinbase|default&gt; - set wallet refresh behaviour; priority [0|1|2|3|4] - default/unimportant/normal/elevated/priority fee; confirm-missing-payment-id &lt;1|0&gt;; ask-password &lt;1|0&gt;; unit &lt;monero|millinero|micronero|nanonero|piconero&gt; - set default monero (sub-)unit; min-outputs-count [n] - try to keep at least that many outputs of value at least min-outputs-value; min-outputs-value [n] - try to keep at least min-outputs-count outputs of at least that value; merge-destinations &lt;1|0&gt; - whether to merge multiple payments to the same destination address</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="724"/>
<source>Rescan blockchain for spent outputs</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="707"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="725"/>
<source>Get transaction key (r) for a given &lt;txid&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="708"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="726"/>
<source>Check amount going to &lt;address&gt; in &lt;txid&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="711"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="727"/>
+ <source>Generate a signature to prove payment to &lt;address&gt; in &lt;txid&gt; using the transaction secret key (r) without revealing it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="728"/>
+ <source>Check tx proof for payment going to &lt;address&gt; in &lt;txid&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="730"/>
+ <source>unspent_outputs [&lt;min_amount&gt; &lt;max_amount&gt;] - Show unspent outputs within an optional amount range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="731"/>
<source>Rescan blockchain from scratch</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="712"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="732"/>
<source>Set an arbitrary string note for a txid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="713"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="733"/>
<source>Get a string note for a txid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="714"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="734"/>
<source>Show wallet status information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="715"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="735"/>
<source>Sign the contents of a file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="716"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="736"/>
<source>Verify a signature on the contents of a file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="717"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="737"/>
<source>Export a signed set of key images</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="718"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="738"/>
<source>Import signed key images list and verify their spent status</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="719"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="739"/>
<source>Export a set of outputs owned by this wallet</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="720"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="740"/>
<source>Import set of outputs owned by this wallet</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="791"/>
- <source>set store-tx-info: needs an argument (0 or 1)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="804"/>
- <source>set default-mixin: needs an argument (integer &gt;= 2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="817"/>
- <source>set auto-refresh: needs an argument (0 or 1)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="830"/>
- <source>set refresh-type: needs an argument:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="831"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="802"/>
<source>full (slowest, no assumptions); optimize-coinbase (fast, assumes the whole coinbase is paid to a single address); no-coinbase (fastest, assumes we receive no coinbase transaction), default (same as optimize-coinbase)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="857"/>
- <source>set confirm-missing-payment-id: needs an argument (0 or 1)</source>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="806"/>
+ <source>monero, millinero, micronero, nanonero, piconero</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="972"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="851"/>
<source>Wallet name not valid. Please try again or use Ctrl-C to quit.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="989"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="868"/>
<source>Wallet and key files found, loading...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="995"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="874"/>
<source>Key file found but not wallet file. Regenerating...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1001"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="880"/>
<source>Key file not found. Failed to open wallet: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1015"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="894"/>
<source>Generating new wallet...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1049"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="937"/>
<source>can&apos;t specify more than one of --generate-new-wallet=&quot;wallet_name&quot;, --wallet-file=&quot;wallet_name&quot;, --generate-from-view-key=&quot;wallet_name&quot;, --generate-from-json=&quot;jsonfilename&quot; and --generate-from-keys=&quot;wallet_name&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1065"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="953"/>
<source>can&apos;t specify both --restore-deterministic-wallet and --non-deterministic</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1083"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="982"/>
<source>Electrum-style word list failed verification</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1095"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1112"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1147"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1164"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1180"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="994"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1011"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1046"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1063"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1079"/>
<source>No data supplied, cancelled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1103"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1155"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2312"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2816"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3373"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3921"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4112"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1002"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1054"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2220"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2718"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3276"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3378"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3530"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4048"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4239"/>
<source>failed to parse address</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1118"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1186"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1017"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1085"/>
<source>failed to parse view key secret key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1128"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1204"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1027"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1103"/>
<source>failed to verify view key secret key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1132"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1208"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1031"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1107"/>
<source>view key does not match standard address</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1137"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1212"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1225"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1036"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1111"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1128"/>
<source>account creation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1170"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1069"/>
<source>failed to parse spend key secret key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1196"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1095"/>
<source>failed to verify spend key secret key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1200"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1099"/>
<source>spend key does not match standard address</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1296"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1199"/>
<source>failed to open account</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1354"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1203"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1579"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1626"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1647"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3348"/>
+ <source>wallet is null</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1262"/>
<source>Daemon either is not started or wrong port was passed. Please make sure daemon is running or restart the wallet with the correct daemon address.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1398"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1403"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1306"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1311"/>
<source>invalid language choice passed. Please try again.
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1472"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1370"/>
<source>View key: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1487"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1385"/>
<source>Your wallet has been generated!
To start synchronizing with the daemon, use &quot;refresh&quot; command.
Use &quot;help&quot; command to see the list of available commands.
@@ -1611,623 +1633,707 @@ your wallet again (your wallet keys are NOT at risk in any case).
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1594"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1492"/>
<source>You may want to remove the file &quot;%s&quot; and try again</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1620"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1518"/>
<source>failed to deinitialize wallet</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1672"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2054"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1570"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1968"/>
<source>this command requires a trusted daemon. Enable with --trusted-daemon</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1747"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1657"/>
<source>blockchain can&apos;t be saved: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1826"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2068"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2482"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2661"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2926"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1736"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1982"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2386"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2563"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2824"/>
<source>daemon is busy. Please try again later.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1830"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2072"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2486"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2665"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2930"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1740"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1986"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2390"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2567"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2828"/>
<source>no connection to daemon. Please make sure daemon is running.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1840"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1750"/>
<source>refresh error: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1884"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1794"/>
<source>Balance: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1933"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1845"/>
<source>pubkey</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1933"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1845"/>
<source>key image</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1934"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1944"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1856"/>
<source>unlocked</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1934"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/>
<source>ringct</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1943"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1855"/>
<source>T</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1943"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1855"/>
<source>F</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1944"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1856"/>
<source>locked</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1945"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1857"/>
<source>RingCT</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="1945"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1857"/>
<source>-</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2015"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1929"/>
<source>payment ID has invalid format, expected 16 or 64 character hex string: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2076"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1990"/>
<source>failed to get spent status</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2298"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2105"/>
+ <source>the same transaction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2105"/>
+ <source>blocks that are temporally very close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2206"/>
<source>Locked blocks too high, max 1000000 (˜4 yrs)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3867"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3258"/>
+ <source>usage: get_tx_proof &lt;txid&gt; &lt;dest_address&gt; [&lt;tx_key&gt;]</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3289"/>
+ <source>failed to parse tx_key</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3298"/>
+ <source>Tx secret key was found for the given txid, but you&apos;ve also provided another tx secret key which doesn&apos;t match the found one.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3306"/>
+ <source>Tx secret key wasn&apos;t found in the wallet file. Provide it as the optional third parameter if you have it elsewhere.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3330"/>
+ <source>Signature: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3508"/>
+ <source>usage: check_tx_proof &lt;txid&gt; &lt;address&gt; &lt;signature&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3539"/>
+ <source>Signature header check error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3550"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3555"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3560"/>
+ <source>Signature decoding error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3602"/>
+ <source>Tx pubkey was not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3609"/>
+ <source>Good signature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3613"/>
+ <source>Bad signature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3621"/>
+ <source>failed to generate key derivation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3994"/>
<source>usage: integrated_address [payment ID]</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3890"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4017"/>
<source>Integrated address: account %s, payment ID %s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3895"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4022"/>
<source>Standard address: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3900"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4027"/>
<source>failed to parse payment ID or address</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3911"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4038"/>
<source>usage: address_book [(add (&lt;address&gt; [pid &lt;long or short payment id&gt;])|&lt;integrated address&gt; [&lt;description possibly with whitespaces&gt;])|(delete &lt;index&gt;)]</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3943"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4070"/>
<source>failed to parse payment ID</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3961"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4088"/>
<source>failed to parse index</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3969"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4096"/>
<source>Address book is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3975"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4102"/>
<source>Index: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3976"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4103"/>
<source>Address: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3977"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4104"/>
<source>Payment ID: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3978"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4105"/>
<source>Description: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3988"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4115"/>
<source>usage: set_tx_note [txid] free text note</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4016"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4143"/>
<source>usage: get_tx_note [txid]</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4066"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4193"/>
<source>usage: sign &lt;filename&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4071"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4198"/>
<source>wallet is watch-only and cannot sign</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4080"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4103"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4247"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4207"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4230"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4374"/>
<source>failed to read file </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4092"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4219"/>
<source>usage: verify &lt;filename&gt; &lt;address&gt; &lt;signature&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4119"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4246"/>
<source>Bad signature from </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4123"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4250"/>
<source>Good signature from </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4132"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4259"/>
<source>usage: export_key_images &lt;filename&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4137"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4264"/>
<source>wallet is watch-only and cannot export key images</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4147"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4219"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4274"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4346"/>
<source>failed to save file </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4158"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4285"/>
<source>Signed key images exported to </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4166"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4293"/>
<source>usage: import_key_images &lt;filename&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4196"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4323"/>
<source>usage: export_outputs &lt;filename&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4230"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4357"/>
<source>Outputs exported to </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4238"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4365"/>
<source>usage: import_outputs &lt;filename&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2338"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3691"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2246"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3818"/>
<source>amount is wrong: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2339"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3692"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2247"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3819"/>
<source>expected number from 0 to </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2474"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2378"/>
<source>Money successfully sent, transaction </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3217"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3141"/>
<source>no connection to daemon. Please, make sure daemon is running.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2516"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2695"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2960"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3247"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2420"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2597"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2858"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3171"/>
<source>not enough outputs for specified mixin_count</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2519"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2698"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2963"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3250"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2423"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2600"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2861"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3174"/>
<source>output amount</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2519"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2698"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2963"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3250"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2423"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2600"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2861"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3174"/>
<source>found outputs to mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2524"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2703"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2968"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3255"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2428"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2605"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2866"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3179"/>
<source>transaction was not constructed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2528"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2707"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2972"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3259"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2432"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2609"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2870"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3183"/>
<source>transaction %s was rejected by daemon with status: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2539"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2718"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2983"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3267"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2443"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2620"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2881"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3191"/>
<source>one of destinations is zero</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3271"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3195"/>
<source>Failed to find a suitable way to split transactions</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2548"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2727"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2992"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3276"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2452"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2629"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2890"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3200"/>
<source>unknown transfer error: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2612"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2516"/>
<source>Sweeping </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2885"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2785"/>
<source>Sweeping %s for a total fee of %s. Is this okay? (Y/Yes/N/No)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2653"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="2918"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3205"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2555"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2816"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3129"/>
<source>Money successfully sent, transaction: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3123"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3022"/>
+ <source>Change goes to more than one address</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3047"/>
<source>%s change to %s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3126"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3050"/>
<source>no change</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3181"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3105"/>
<source>Transaction successfully signed to file </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3302"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3226"/>
<source>usage: get_tx_key &lt;txid&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3347"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3995"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4023"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4323"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3234"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3266"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3354"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3519"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4122"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4150"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4450"/>
<source>failed to parse txid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3321"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3245"/>
<source>Tx key: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3326"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3250"/>
<source>no tx keys found for this txid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3336"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3339"/>
<source>usage: check_tx_key &lt;txid&gt; &lt;txkey&gt; &lt;address&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3356"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3363"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3361"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3368"/>
<source>failed to parse tx key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3383"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3573"/>
<source>failed to get transaction from daemon</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3394"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3411"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3584"/>
<source>failed to parse transaction from daemon</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3401"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3418"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3591"/>
<source>failed to validate transaction from daemon</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3406"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3423"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3596"/>
<source>failed to get the right transaction from daemon</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3413"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3385"/>
<source>failed to generate key derivation from supplied parameters</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3469"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3471"/>
<source>error: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3475"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3477"/>
<source>received</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3475"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3477"/>
<source>in txid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3479"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3481"/>
<source>received nothing in txid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3483"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3485"/>
<source>WARNING: this transaction is not yet included in the blockchain!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3492"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3494"/>
<source>This transaction has %u confirmations</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3496"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3498"/>
<source>WARNING: failed to determine number of confirmations!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3536"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3661"/>
<source>usage: show_transfers [in|out|all|pending|failed] [&lt;min_height&gt; [&lt;max_height&gt;]]</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3575"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3700"/>
<source>bad min_height parameter:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3587"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3712"/>
<source>bad max_height parameter:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3633"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3760"/>
<source>in</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3633"/>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3671"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3760"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3798"/>
<source>out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3671"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3798"/>
<source>failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3671"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3798"/>
<source>pending</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3682"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3809"/>
<source>usage: unspent_outputs [&lt;min_amount&gt; &lt;max_amount&gt;]</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3697"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3824"/>
<source>&lt;min_amount&gt; should be smaller than &lt;max_amount&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3729"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3856"/>
<source>
Amount: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3729"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3856"/>
<source>, number of keys: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3734"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3861"/>
<source> </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3739"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3866"/>
<source>
Min block height: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3740"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3867"/>
<source>
Max block height: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3741"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3868"/>
<source>
Min amount found: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3742"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3869"/>
<source>
Max amount found: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3743"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3870"/>
<source>
Total count: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3783"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3910"/>
<source>
Bin size: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3784"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3911"/>
<source>
Outputs per *: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3786"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3913"/>
<source>count
^
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3788"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3915"/>
<source> |</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3790"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3917"/>
<source> +</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3790"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3917"/>
<source>+--&gt; block height
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3791"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3918"/>
<source> ^</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3791"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3918"/>
<source>^
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3792"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3919"/>
<source> </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3842"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3969"/>
<source>wallet</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3873"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="420"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4000"/>
<source>Random payment ID: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="3874"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4001"/>
<source>Matching integrated address: </source>
<translation type="unfinished"></translation>
</message>
@@ -2235,67 +2341,67 @@ Outputs per *: </source>
<context>
<name>sw</name>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="106"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="116"/>
<source>Generate new wallet and save it to &lt;arg&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="107"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="117"/>
<source>Generate incoming-only wallet from view key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="108"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="118"/>
<source>Generate wallet from private keys</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="110"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="120"/>
<source>Specify Electrum seed for wallet recovery/creation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="111"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="121"/>
<source>Recover wallet using Electrum-style mnemonic seed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="112"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="122"/>
<source>Create non-deterministic view and spend keys</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="113"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="123"/>
<source>Enable commands which rely on a trusted daemon</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="114"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="124"/>
<source>Allow communicating with a daemon that uses a different RPC version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="115"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="125"/>
<source>Restore from specific blockchain height</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="126"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="136"/>
<source>daemon is busy. Please try again later.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="135"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="145"/>
<source>possibly lost connection to daemon</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="216"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="226"/>
<source>Error: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4487"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4614"/>
<source>Failed to initialize wallet</source>
<translation type="unfinished"></translation>
</message>
@@ -2346,8 +2452,7 @@ Outputs per *: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet2.cpp" line="108"/>
- <location filename="../src/wallet/wallet2.cpp" line="458"/>
+ <location filename="../src/wallet/wallet2.cpp" line="460"/>
<source>Wallet password</source>
<translation type="unfinished"></translation>
</message>
@@ -2387,101 +2492,106 @@ Outputs per *: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet2.cpp" line="458"/>
+ <location filename="../src/wallet/wallet2.cpp" line="460"/>
<source>Enter new wallet password</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet2.cpp" line="462"/>
+ <location filename="../src/wallet/wallet2.cpp" line="464"/>
<source>failed to read wallet password</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet2.cpp" line="225"/>
+ <location filename="../src/wallet/wallet2.cpp" line="227"/>
<source>Failed to load file </source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../src/wallet/wallet2.cpp" line="108"/>
+ <source>Wallet password (escape/quote as needed)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../src/wallet/wallet2.cpp" line="111"/>
<source>Specify username[:password] for daemon RPC client</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet2.cpp" line="231"/>
+ <location filename="../src/wallet/wallet2.cpp" line="233"/>
<source>Failed to parse JSON</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet2.cpp" line="238"/>
+ <location filename="../src/wallet/wallet2.cpp" line="240"/>
<source>Version %u too new, we can only grok up to %u</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet2.cpp" line="256"/>
+ <location filename="../src/wallet/wallet2.cpp" line="258"/>
<source>failed to parse view key secret key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet2.cpp" line="262"/>
- <location filename="../src/wallet/wallet2.cpp" line="329"/>
- <location filename="../src/wallet/wallet2.cpp" line="371"/>
+ <location filename="../src/wallet/wallet2.cpp" line="264"/>
+ <location filename="../src/wallet/wallet2.cpp" line="331"/>
+ <location filename="../src/wallet/wallet2.cpp" line="373"/>
<source>failed to verify view key secret key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet2.cpp" line="274"/>
+ <location filename="../src/wallet/wallet2.cpp" line="276"/>
<source>failed to parse spend key secret key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet2.cpp" line="280"/>
- <location filename="../src/wallet/wallet2.cpp" line="341"/>
- <location filename="../src/wallet/wallet2.cpp" line="392"/>
+ <location filename="../src/wallet/wallet2.cpp" line="282"/>
+ <location filename="../src/wallet/wallet2.cpp" line="343"/>
+ <location filename="../src/wallet/wallet2.cpp" line="394"/>
<source>failed to verify spend key secret key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet2.cpp" line="293"/>
+ <location filename="../src/wallet/wallet2.cpp" line="295"/>
<source>Electrum-style word list failed verification</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet2.cpp" line="304"/>
+ <location filename="../src/wallet/wallet2.cpp" line="306"/>
<source>At least one of Electrum-style word list and private view key must be specified</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet2.cpp" line="309"/>
+ <location filename="../src/wallet/wallet2.cpp" line="311"/>
<source>Both Electrum-style word list and private key(s) specified</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet2.cpp" line="322"/>
+ <location filename="../src/wallet/wallet2.cpp" line="324"/>
<source>invalid address</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet2.cpp" line="333"/>
+ <location filename="../src/wallet/wallet2.cpp" line="335"/>
<source>view key does not match standard address</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet2.cpp" line="345"/>
+ <location filename="../src/wallet/wallet2.cpp" line="347"/>
<source>spend key does not match standard address</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet2.cpp" line="354"/>
+ <location filename="../src/wallet/wallet2.cpp" line="356"/>
<source>Cannot create deprecated wallets from JSON</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet2.cpp" line="401"/>
+ <location filename="../src/wallet/wallet2.cpp" line="403"/>
<source>failed to generate new wallet: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet2.cpp" line="5167"/>
+ <location filename="../src/wallet/wallet2.cpp" line="5205"/>
<source>failed to read file </source>
<translation type="unfinished"></translation>
</message>
@@ -2489,94 +2599,94 @@ Outputs per *: </source>
<context>
<name>tools::wallet_rpc_server</name>
<message>
- <location filename="../src/wallet/wallet_rpc_server.cpp" line="122"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="151"/>
<source>Daemon is local, assuming trusted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet_rpc_server.cpp" line="132"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="171"/>
<source>Cannot specify --</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet_rpc_server.cpp" line="132"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="171"/>
<source> and --</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet_rpc_server.cpp" line="159"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="198"/>
<source>Failed to create file </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet_rpc_server.cpp" line="159"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="198"/>
<source>. Check permissions or remove file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet_rpc_server.cpp" line="170"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="209"/>
<source>Error writing to file </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet_rpc_server.cpp" line="173"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="212"/>
<source>RPC username/password is stored in file </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet_rpc_server.cpp" line="1517"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1748"/>
<source>Can&apos;t specify more than one of --wallet-file and --generate-from-json</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet_rpc_server.cpp" line="1523"/>
- <source>Must specify --wallet-file or --generate-from-json</source>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1760"/>
+ <source>Must specify --wallet-file or --generate-from-json or --wallet-dir</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet_rpc_server.cpp" line="1527"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1764"/>
<source>Loading wallet...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet_rpc_server.cpp" line="1552"/>
- <location filename="../src/wallet/wallet_rpc_server.cpp" line="1575"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1789"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1814"/>
<source>Storing wallet...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet_rpc_server.cpp" line="1554"/>
- <location filename="../src/wallet/wallet_rpc_server.cpp" line="1577"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1791"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1816"/>
<source>Stored ok</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet_rpc_server.cpp" line="1557"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1794"/>
<source>Loaded ok</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet_rpc_server.cpp" line="1561"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1798"/>
<source>Wallet initialization failed: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet_rpc_server.cpp" line="1566"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1805"/>
<source>Failed to initialize wallet rpc server</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet_rpc_server.cpp" line="1570"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1809"/>
<source>Starting wallet rpc server</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet_rpc_server.cpp" line="1572"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1811"/>
<source>Stopped wallet rpc server</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/wallet/wallet_rpc_server.cpp" line="1581"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1820"/>
<source>Failed to store wallet: </source>
<translation type="unfinished"></translation>
</message>
@@ -2584,8 +2694,8 @@ Outputs per *: </source>
<context>
<name>wallet_args</name>
<message>
- <location filename="../src/simplewallet/simplewallet.cpp" line="4453"/>
- <location filename="../src/wallet/wallet_rpc_server.cpp" line="1486"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1715"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4580"/>
<source>Wallet options</source>
<translation type="unfinished"></translation>
</message>
diff --git a/translations/monero_fr.ts b/translations/monero_fr.ts
new file mode 100644
index 000000000..58fcc17e1
--- /dev/null
+++ b/translations/monero_fr.ts
@@ -0,0 +1,2803 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="fr_FR">
+<context>
+ <name>Monero::AddressBookImpl</name>
+ <message>
+ <location filename="../src/wallet/api/address_book.cpp" line="55"/>
+ <source>Invalid destination address</source>
+ <translation>Adresse de destination invalide</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/address_book.cpp" line="65"/>
+ <source>Invalid payment ID. Short payment ID should only be used in an integrated address</source>
+ <translation>ID de paiement invalide. L&apos;identifiant de paiement court devrait seulement être utilisé dans une adresse intégrée</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/address_book.cpp" line="72"/>
+ <source>Invalid payment ID</source>
+ <translation>ID de paiement invalide</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/address_book.cpp" line="79"/>
+ <source>Integrated address and long payment id can&apos;t be used at the same time</source>
+ <translation>Une adresse intégrée et un identifiant de paiement long ne peuvent pas être utilisés en même temps</translation>
+ </message>
+</context>
+<context>
+ <name>Monero::PendingTransactionImpl</name>
+ <message>
+ <location filename="../src/wallet/api/pending_transaction.cpp" line="90"/>
+ <source>Attempting to save transaction to file, but specified file(s) exist. Exiting to not risk overwriting. File:</source>
+ <translation>Tentative d&apos;enregistrement d&apos;une transaction dans un fichier, mais le fichier spécifié existe déjà. Sortie pour ne pas risquer de l&apos;écraser. Fichier :</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/pending_transaction.cpp" line="97"/>
+ <source>Failed to write transaction(s) to file</source>
+ <translation>Échec de l&apos;écriture de(s) transaction(s) dans le fichier</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/pending_transaction.cpp" line="114"/>
+ <source>daemon is busy. Please try again later.</source>
+ <translation>le démon est occupé. Veuillez réessayer plus tard.</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/pending_transaction.cpp" line="117"/>
+ <source>no connection to daemon. Please make sure daemon is running.</source>
+ <translation>pas de connexion au démon. Veuillez vous assurer que le démon fonctionne.</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/pending_transaction.cpp" line="121"/>
+ <source>transaction %s was rejected by daemon with status: </source>
+ <translation>la transaction %s a été rejetée par le démon avec le statut : </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/pending_transaction.cpp" line="126"/>
+ <source>. Reason: </source>
+ <translation>. Raison : </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/pending_transaction.cpp" line="128"/>
+ <source>Unknown exception: </source>
+ <translation>Exception inconnue : </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/pending_transaction.cpp" line="131"/>
+ <source>Unhandled exception</source>
+ <translation>Exception non gérée</translation>
+ </message>
+</context>
+<context>
+ <name>Monero::UnsignedTransactionImpl</name>
+ <message>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="75"/>
+ <source>This is a watch only wallet</source>
+ <translation>Ceci est un portefeuille d&apos;audit</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="85"/>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="92"/>
+ <source>Failed to sign transaction</source>
+ <translation>Échec de signature de transaction</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="135"/>
+ <source>Claimed change does not go to a paid address</source>
+ <translation>La monnaie réclamée ne va pas à une adresse payée</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="141"/>
+ <source>Claimed change is larger than payment to the change address</source>
+ <translation>La monnaie réclamée est supérieure au paiement à l&apos;adresse de monnaie</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="151"/>
+ <source>Change goes to more than one address</source>
+ <translation>La monnaie rendue va à plus d&apos;une adresse</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="164"/>
+ <source>sending %s to %s</source>
+ <translation>envoi de %s à %s</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="170"/>
+ <source>with no destinations</source>
+ <translation>sans destination</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="176"/>
+ <source>%s change to %s</source>
+ <translation>%s de monnaie rendue à %s</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="179"/>
+ <source>no change</source>
+ <translation>sans monnaie rendue</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="181"/>
+ <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min mixin %lu. %s</source>
+ <translation>%lu transactions chargées, pour %s, %s de frais, %s, %s, avec mixin minimum de %lu, %s</translation>
+ </message>
+</context>
+<context>
+ <name>Monero::WalletImpl</name>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="942"/>
+ <source>payment id has invalid format, expected 16 or 64 character hex string: </source>
+ <translation>format d&apos;identifiant de paiement invalide, 16 ou 64 caractères hexadécimaux attendus : </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="952"/>
+ <source>Failed to add short payment id: </source>
+ <translation>Échec de l&apos;ajout de l&apos;ID de paiement court : </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="978"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1072"/>
+ <source>daemon is busy. Please try again later.</source>
+ <translation>le démon est occupé. Veuillez réessayer plus tard.</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="981"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1075"/>
+ <source>no connection to daemon. Please make sure daemon is running.</source>
+ <translation>pas de connexion au démon. Veuillez vous assurer que le démon fonctionne.</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="984"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1078"/>
+ <source>RPC error: </source>
+ <translation>Erreur RPC : </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1081"/>
+ <source>failed to get random outputs to mix</source>
+ <translation>échec de la récupération de sorties aléatoires à mélanger</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="994"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1088"/>
+ <source>not enough money to transfer, available only %s, sent amount %s</source>
+ <translation>pas assez de fonds pour le transfert, montant disponible %s, montant envoyé %s</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="403"/>
+ <source>failed to parse address</source>
+ <translation>échec de l&apos;analyse de l&apos;adresse</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="415"/>
+ <source>failed to parse secret spend key</source>
+ <translation>échec de l&apos;analyse de la clé secrète de dépense</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="425"/>
+ <source>No view key supplied, cancelled</source>
+ <translation>Pas de clé d&apos;audit fournie, annulation</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="432"/>
+ <source>failed to parse secret view key</source>
+ <translation>échec de l&apos;analyse de la clé secrète d&apos;audit</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="442"/>
+ <source>failed to verify secret spend key</source>
+ <translation>échec de la vérification de la clé secrète de dépense</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="447"/>
+ <source>spend key does not match address</source>
+ <translation>la clé de dépense ne correspond pas à l&apos;adresse</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="453"/>
+ <source>failed to verify secret view key</source>
+ <translation>échec de la vérification de la clé secrète d&apos;audit</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="458"/>
+ <source>view key does not match address</source>
+ <translation>la clé d&apos;audit ne correspond pas à l&apos;adresse</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="477"/>
+ <source>failed to generate new wallet: </source>
+ <translation>échec de la génération du nouveau portefeuille : </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="799"/>
+ <source>Failed to load unsigned transactions</source>
+ <translation>Échec du chargement des transaction non signées</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="820"/>
+ <source>Failed to load transaction from file</source>
+ <translation>Échec du chargement de la transaction du fichier</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="838"/>
+ <source>Wallet is view only</source>
+ <translation>Portefeuille d&apos;audit uniquement</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="847"/>
+ <source>failed to save file </source>
+ <translation>échec de l&apos;enregistrement du fichier </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="874"/>
+ <source>Failed to import key images: </source>
+ <translation>Échec de l&apos;importation des images de clé : </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="987"/>
+ <source>failed to get random outputs to mix: %s</source>
+ <translation>échec de la récupération de sorties aléatoires à mélanger : %s</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1003"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1097"/>
+ <source>not enough money to transfer, available only %s, transaction amount %s = %s + %s (fee)</source>
+ <translation>pas assez de fonds pour le transfert, montant disponible %s, montant envoyé %s = %s + %s (frais)</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1012"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1106"/>
+ <source>not enough outputs for specified mixin_count</source>
+ <translation>pas assez de sorties pour le mixin spécifié</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1014"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1108"/>
+ <source>output amount</source>
+ <translation>montant de la sortie</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1014"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1108"/>
+ <source>found outputs to mix</source>
+ <translation>sorties à mélanger trouvées</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1019"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1113"/>
+ <source>transaction was not constructed</source>
+ <translation>la transaction n&apos;a pas été construite</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1023"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1117"/>
+ <source>transaction %s was rejected by daemon with status: </source>
+ <translation>la transaction %s a été rejetée par le démon avec le statut : </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1030"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1124"/>
+ <source>one of destinations is zero</source>
+ <translation>une des destinations est zéro</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1033"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1127"/>
+ <source>failed to find a suitable way to split transactions</source>
+ <translation>échec de la recherche d&apos;une façon adéquate de scinder les transactions</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1036"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1130"/>
+ <source>unknown transfer error: </source>
+ <translation>erreur de transfert inconnue : </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1039"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1133"/>
+ <source>internal error: </source>
+ <translation>erreur interne : </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1042"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1136"/>
+ <source>unexpected error: </source>
+ <translation>erreur inattendue : </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1045"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1139"/>
+ <source>unknown error</source>
+ <translation>erreur inconnue</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1419"/>
+ <source>Rescan spent can only be used with a trusted daemon</source>
+ <translation>Réexaminer les dépenses ne peut se faire qu&apos;avec un démon de confiance</translation>
+ </message>
+</context>
+<context>
+ <name>Monero::WalletManagerImpl</name>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="192"/>
+ <source>failed to parse txid</source>
+ <translation>échec de l&apos;analyse de l&apos;ID de transaction</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="199"/>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="206"/>
+ <source>failed to parse tx key</source>
+ <translation>échec de l&apos;analyse de la clé de transaction</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="217"/>
+ <source>failed to parse address</source>
+ <translation>échec de l&apos;analyse de l&apos;adresse</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="227"/>
+ <source>failed to get transaction from daemon</source>
+ <translation>échec de la récupération de la transaction du démon</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="238"/>
+ <source>failed to parse transaction from daemon</source>
+ <translation>échec de l&apos;analyse de la transaction du démon</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="245"/>
+ <source>failed to validate transaction from daemon</source>
+ <translation>échec de la validation de la transaction du démon</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="250"/>
+ <source>failed to get the right transaction from daemon</source>
+ <translation>échec de la récupération de la bonne transaction du démon</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="257"/>
+ <source>failed to generate key derivation from supplied parameters</source>
+ <translation>échec de la génération de la dérivation de clé à partir des paramètres fournis</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="313"/>
+ <source>error: </source>
+ <translation>erreur : </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="319"/>
+ <source>received</source>
+ <translation>a reçu</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="319"/>
+ <source>in txid</source>
+ <translation>dans la transaction</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="323"/>
+ <source>received nothing in txid</source>
+ <translation>n&apos;a rien reçu dans la transaction</translation>
+ </message>
+</context>
+<context>
+ <name>Wallet</name>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="212"/>
+ <source>Failed to parse address</source>
+ <translation>Échec de l&apos;analyse de l&apos;adresse</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="219"/>
+ <source>Failed to parse key</source>
+ <translation>Échec de l&apos;analyse de la clé</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="227"/>
+ <source>failed to verify key</source>
+ <translation>Échec de la vérification de la clé</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="237"/>
+ <source>key does not match address</source>
+ <translation>la clé ne correspond pas à l&apos;adresse</translation>
+ </message>
+</context>
+<context>
+ <name>command_line</name>
+ <message>
+ <location filename="../src/common/command_line.cpp" line="76"/>
+ <source>yes</source>
+ <translation>oui</translation>
+ </message>
+</context>
+<context>
+ <name>cryptonote::rpc_args</name>
+ <message>
+ <location filename="../src/rpc/rpc_args.cpp" line="38"/>
+ <source>Specify ip to bind rpc server</source>
+ <translation>Spécifier l&apos;IP à laquelle lier le serveur RPC</translation>
+ </message>
+ <message>
+ <location filename="../src/rpc/rpc_args.cpp" line="39"/>
+ <source>Specify username[:password] required for RPC server</source>
+ <translation>Spécifier le nom_utilisateur[:mot_de_passe] requis pour le serveur RPC</translation>
+ </message>
+ <message>
+ <location filename="../src/rpc/rpc_args.cpp" line="40"/>
+ <source>Confirm rpc-bind-ip value is NOT a loopback (local) IP</source>
+ <translation>Confirmer que la valeur de rpc-bind-ip n&apos;est PAS une IP de bouclage (locale)</translation>
+ </message>
+ <message>
+ <location filename="../src/rpc/rpc_args.cpp" line="66"/>
+ <source>Invalid IP address given for --</source>
+ <translation>Adresse IP invalide fournie pour --</translation>
+ </message>
+ <message>
+ <location filename="../src/rpc/rpc_args.cpp" line="74"/>
+ <source> permits inbound unencrypted external connections. Consider SSH tunnel or SSL proxy instead. Override with --</source>
+ <translation> autorise les connexions entrantes non cryptées venant de l&apos;extérieur. Considérez plutôt un tunnel SSH ou un proxy SSL. Outrepasser avec --</translation>
+ </message>
+ <message>
+ <location filename="../src/rpc/rpc_args.cpp" line="89"/>
+ <source>Username specified with --</source>
+ <translation>Le nom d&apos;utilisateur spécifié avec --</translation>
+ </message>
+ <message>
+ <location filename="../src/rpc/rpc_args.cpp" line="89"/>
+ <source> cannot be empty</source>
+ <translation> ne peut pas être vide</translation>
+ </message>
+</context>
+<context>
+ <name>cryptonote::simple_wallet</name>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="290"/>
+ <source>Commands: </source>
+ <translation>Commandes : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1557"/>
+ <source>failed to read wallet password</source>
+ <translation>échec de la lecture du mot de passe du portefeuille</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1325"/>
+ <source>invalid password</source>
+ <translation>mot de passe invalide</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="697"/>
+ <source>start_mining [&lt;number_of_threads&gt;] - Start mining in daemon</source>
+ <translation>start_mining [&lt;nombre_de_threads&gt;] - Démarrer l&apos;extraction minière dans le démon</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="698"/>
+ <source>Stop mining in daemon</source>
+ <translation>Stopper l&apos;extraction minière dans le démon</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="699"/>
+ <source>Save current blockchain data</source>
+ <translation>Sauvegarder les données actuelles de la chaîne de blocs</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="701"/>
+ <source>Show current wallet balance</source>
+ <translation>Afficher le solde actuel du portefeuille</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="704"/>
+ <source>Show blockchain height</source>
+ <translation>Afficher la hauteur de la chaîne de blocs</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="715"/>
+ <source>Show current wallet public address</source>
+ <translation>Afficher l&apos;adresse publique du portefeuille actuel</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="744"/>
+ <source>Show this help</source>
+ <translation>Afficher cette aide</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="788"/>
+ <source>set seed: needs an argument. available options: language</source>
+ <translation>set seed : requiert un argument. options disponibles : language</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="811"/>
+ <source>set: unrecognized argument(s)</source>
+ <translation>set : argument(s) non reconnu(s)</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1442"/>
+ <source>wallet file path not valid: </source>
+ <translation>chemin du fichier portefeuille non valide : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="863"/>
+ <source>Attempting to generate or restore wallet, but specified file(s) exist. Exiting to not risk overwriting.</source>
+ <translation>Tentative de génération ou de restauration d&apos;un portefeuille, mais le fichier spécifié existe déjà. Sortie pour ne pas risquer de l&apos;écraser.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="416"/>
+ <source>usage: payment_id</source>
+ <translation>usage : payment_id</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="710"/>
+ <source>sweep_below &lt;amount_threshold&gt; [mixin] address [payment_id] - Send all unlocked outputs below the threshold to an address</source>
+ <translation>sweep_below &lt;montant_seuil&gt; [mixin] adresse [ID_paiement] - Envoyer toutes les sorties débloquées sous le seuil vers une adresse</translation>
+ </message>
+ <message>
+ <source>Available options: seed language - set wallet seed language; always-confirm-transfers &lt;1|0&gt; - whether to confirm unsplit txes; print-ring-members &lt;1|0&gt; - whether to print detailed information about ring members during confirmation; store-tx-info &lt;1|0&gt; - whether to store outgoing tx info (destination address, payment ID, tx secret key) for future reference; default-mixin &lt;n&gt; - set default mixin (default is 4); auto-refresh &lt;1|0&gt; - whether to automatically sync new blocks from the daemon; refresh-type &lt;full|optimize-coinbase|no-coinbase|default&gt; - set wallet refresh behaviour; priority [0|1|2|3|4] - default/unimportant/normal/elevated/priority fee; confirm-missing-payment-id &lt;1|0&gt;; ask-password &lt;1|0&gt;; unit &lt;monero|millinero|micronero|nanonero|piconero&gt; - set default monero (sub-)unit; min-outputs-count [n] - try to keep at least that many outputs of value at least min-outputs-value; min-outputs-value [n] - try to keep at least min-outputs-count outputs of at least that value - merge-destinations &lt;1|0&gt; - whether to merge multiple payments to the same destination address</source>
+ <translation type="obsolete">Options disponibles : seed language - définir la langue de la graine du portefeuille; always-confirm-transfers &lt;1|0&gt; - confirmer ou non les transactions non scindées; print-ring-members &lt;1|0&gt; - afficher ou non des informations détaillées sur les membres du cercle pendant la confirmation; store-tx-info &lt;1|0&gt; - sauvegarder ou non les informations des transactions sortantes (adresse de destination, ID de paiement, clé secrète de transaction) pour référence future; default-mixin &lt;n&gt; - définir le mixin par défaut (4 par défaut); auto-refresh &lt;1|0&gt; - synchroniser automatiquement ou non les nouveau blocs du démon; refresh-type &lt;full|optimize-coinbase|no-coinbase|default&gt; - définir le comportement du rafraîchissement du portefeuille; priority [0|1|2|3|4] - frais de transaction par défault/peu important/normal/élevé/prioritaire; confirm-missing-payment-id &lt;1|0&gt;; ask-password &lt;1|0&gt;; unit &lt;monero|millinero|micronero|nanonero|piconero&gt; - définir la (sous-)unité monero par défaut; min-outputs-count [n] - essayer de garder au moins ce nombre de sortie d&apos;une valeur d&apos;au moins min-outputs-value; min-outputs-value [n] - essayer de garder au moins min-outputs-count sorties d&apos;une valeur d&apos;au moins ce montant; merge-destinations &lt;1|0&gt; - fusionner ou non de multiples paiements à une même adresse de destination</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="743"/>
+ <source>Generate a new random full size payment id - these will be unencrypted on the blockchain, see integrated_address for encrypted short payment ids</source>
+ <translation>Générer un nouvel ID de paiement long aléatoire - ceux-ci seront non cryptés dans la chaîne de blocs, voir integrated_address pour les IDs de paiement courts cryptés</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="774"/>
+ <source>needs an argument</source>
+ <translation>requiert un argument</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="797"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="798"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="799"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="801"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="804"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="805"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="809"/>
+ <source>0 or 1</source>
+ <translation>0 ou 1</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="800"/>
+ <source>integer &gt;= 2</source>
+ <translation>entier &gt;= 2</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="803"/>
+ <source>0, 1, 2, 3, or 4</source>
+ <translation>0, 1, 2, 3 ou 4</translation>
+ </message>
+ <message>
+ <source>monero, millinero, micronero, nanop, piconero</source>
+ <translation type="obsolete">monero, millinero, micronero, nanonero, piconero</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="807"/>
+ <source>unsigned integer</source>
+ <translation>entier non signé</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="912"/>
+ <source>PLEASE NOTE: the following 25 words can be used to recover access to your wallet. Please write them down and store them somewhere safe and secure. Please do not store them in your email or on file storage services outside of your immediate control.
+</source>
+ <translation>VEUILLEZ NOTER : les 25 mots suivants peuvent être utilisés pour restaurer votre portefeuille. Veuillez les écrire sur papier et les garder dans un endroit sûr. Ne les gardez pas dans un courriel ou dans un service de stockage de fichiers hors de votre contrôle.
+</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="958"/>
+ <source>--restore-deterministic-wallet uses --generate-new-wallet, not --wallet-file</source>
+ <translation>--restore-deterministic-wallet utilise --generate-new-wallet, pas --wallet-file</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="973"/>
+ <source>specify a recovery parameter with the --electrum-seed=&quot;words list here&quot;</source>
+ <translation>spécifiez un paramètre de récupération avec --electrum-seed=&quot;liste de mots ici&quot;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1123"/>
+ <source>specify a wallet path with --generate-new-wallet (not --wallet-file)</source>
+ <translation>spécifiez un chemin de portefeuille avec --generate-new-wallet (pas --wallet-file)</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1261"/>
+ <source>wallet failed to connect to daemon: </source>
+ <translation>échec de la connexion du portefeuille au démon : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1269"/>
+ <source>Daemon uses a different RPC major version (%u) than the wallet (%u): %s. Either update one of them, or use --allow-mismatched-daemon-version.</source>
+ <translation>Le démon utilise une version majeure de RPC (%u) différente de celle du portefeuille (%u) : %s. Mettez l&apos;un des deux à jour, ou utilisez --allow-mismatched-daemon-version.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1288"/>
+ <source>List of available languages for your wallet&apos;s seed:</source>
+ <translation>Liste des langues disponibles pour la graine de votre portefeuille :</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1297"/>
+ <source>Enter the number corresponding to the language of your choice: </source>
+ <translation>Entrez le nombre correspondant à la langue de votre choix : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1354"/>
+ <source>You had been using a deprecated version of the wallet. Please use the new seed that we provide.
+</source>
+ <translation>Vous avez utilisé une version obsolète du portefeuille. Veuillez dorénavant utiliser la nouvelle graine que nous fournissons.
+</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1368"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1425"/>
+ <source>Generated new wallet: </source>
+ <translation>Nouveau portefeuille généré : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1374"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1430"/>
+ <source>failed to generate new wallet: </source>
+ <translation>échec de la génération du nouveau portefeuille : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1457"/>
+ <source>Opened watch-only wallet</source>
+ <translation>Ouverture du portefeuille d&apos;audit</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1457"/>
+ <source>Opened wallet</source>
+ <translation>Ouverture du portefeuille</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1466"/>
+ <source>You had been using a deprecated version of the wallet. Please proceed to upgrade your wallet.
+</source>
+ <translation>Vous avez utilisé une version obsolète du portefeuille. Veuillez procéder à la mise à jour de votre portefeuille.
+</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1481"/>
+ <source>You had been using a deprecated version of the wallet. Your wallet file format is being upgraded now.
+</source>
+ <translation>Vous avez utilisé une version obsolète du portefeuille. Le format de votre fichier portefeuille est en cours de mise à jour.
+</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1489"/>
+ <source>failed to load wallet: </source>
+ <translation>échec du chargement du portefeuille : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1497"/>
+ <source>Use &quot;help&quot; command to see the list of available commands.
+</source>
+ <translation>Utilisez la commande &quot;help&quot; pour voir la liste des commandes disponibles.
+</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1541"/>
+ <source>Wallet data saved</source>
+ <translation>Données du portefeuille sauvegardées</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1613"/>
+ <source>Mining started in daemon</source>
+ <translation>L&apos;extraction minière dans le démon a démarré</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1615"/>
+ <source>mining has NOT been started: </source>
+ <translation>l&apos;extraction minière n&apos;a PAS démarré : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1634"/>
+ <source>Mining stopped in daemon</source>
+ <translation>L&apos;extraction minière dans le démon a été stoppée</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1636"/>
+ <source>mining has NOT been stopped: </source>
+ <translation>l&apos;extraction minière n&apos;a PAS été stoppée : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1655"/>
+ <source>Blockchain saved</source>
+ <translation>Chaîne de blocs sauvegardée</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1670"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1687"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1699"/>
+ <source>Height </source>
+ <translation>Hauteur </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1671"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1688"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1700"/>
+ <source>transaction </source>
+ <translation>transaction </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1672"/>
+ <source>received </source>
+ <translation>reçu </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1689"/>
+ <source>spent </source>
+ <translation>dépensé </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1701"/>
+ <source>unsupported transaction format</source>
+ <translation>format de transaction non supporté</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1718"/>
+ <source>Starting refresh...</source>
+ <translation>Démarrage du rafraîchissement...</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1731"/>
+ <source>Refresh done, blocks received: </source>
+ <translation>Rafraîchissement effectué, blocs reçus : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2186"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2701"/>
+ <source>payment id has invalid format, expected 16 or 64 character hex string: </source>
+ <translation>format d&apos;identifiant de paiement invalide, 16 ou 64 caractères hexadécimaux attendus : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2201"/>
+ <source>bad locked_blocks parameter:</source>
+ <translation>mauvais paramètre locked_blocks :</translation>
+ </message>
+ <message>
+ <source>Locked blocks too high, max 1000000 (˜4 yrs)</source>
+ <translation type="vanished" variants="yes">
+ <lengthvariant>Blocs vérrouillés trop élevé, 1000000 maximum (Ë</lengthvariant>
+ <lengthvariant>4 ans)</lengthvariant>
+ </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2228"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2726"/>
+ <source>a single transaction cannot use more than one payment id: </source>
+ <translation>une unique transaction ne peut pas utiliser plus d&apos;un ID de paiement : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2237"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2735"/>
+ <source>failed to set up payment id, though it was decoded correctly</source>
+ <translation>échec de la définition de l&apos;ID de paiement, bien qu&apos;il ait été décodé correctement</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2262"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2355"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2533"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2749"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2794"/>
+ <source>transaction cancelled.</source>
+ <translation>transaction annulée.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2323"/>
+ <source>Sending %s. </source>
+ <translation>Envoi de %s. </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2326"/>
+ <source>Your transaction needs to be split into %llu transactions. This will result in a transaction fee being applied to each transaction, for a total fee of %s</source>
+ <translation>Votre transaction doit être scindée en %llu transactions. Il en résulte que des frais de transaction doivent être appliqués à chaque transaction, pour un total de %s</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2332"/>
+ <source>The transaction fee is %s</source>
+ <translation>Les frais de transaction sont de %s</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2335"/>
+ <source>, of which %s is dust from change</source>
+ <translation>, dont %s est de la poussière de monnaie rendue</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2336"/>
+ <source>.</source>
+ <translation>.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2336"/>
+ <source>A total of %s from dust change will be sent to dust address</source>
+ <translation>Un total de %s de poussière de monnaie rendue sera envoyé à une adresse de poussière</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2341"/>
+ <source>.
+This transaction will unlock on block %llu, in approximately %s days (assuming 2 minutes per block)</source>
+ <translation>.
+Cette transaction sera déverrouillée au bloc %llu, dans approximativement %s jours (en supposant 2 minutes par bloc)</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2367"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2544"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2805"/>
+ <source>Failed to write transaction(s) to file</source>
+ <translation>Échec de l&apos;écriture de(s) transaction(s) dans le fichier</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2371"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2548"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2809"/>
+ <source>Unsigned transaction(s) successfully written to file: </source>
+ <translation>Transaction(s) non signée(s) écrite(s) dans le fichier avec succès : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2406"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2583"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2844"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3157"/>
+ <source>Not enough money in unlocked balance</source>
+ <translation>Pas assez de fonds dans le solde débloqué</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2415"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2592"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2853"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3166"/>
+ <source>Failed to find a way to create transactions. This is usually due to dust which is so small it cannot pay for itself in fees, or trying to send more money than the unlocked balance, or not leaving enough for fees</source>
+ <translation>Échec de la recherche d&apos;une façon de créer les transactions. Ceci est généralement dû à de la poussière si petite qu&apos;elle de peut pas payer ses propre frais, à une tentative d&apos;envoi d&apos;un montant supérieur au solde débloqué, ou parce qu&apos;il n&apos;en reste pas assez pour les frais de transaction</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2435"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2612"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2873"/>
+ <source>Reason: </source>
+ <translation>Raison : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2447"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2624"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2885"/>
+ <source>failed to find a suitable way to split transactions</source>
+ <translation>échec de la recherche d&apos;une façon adéquate de scinder les transactions</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2503"/>
+ <source>No unmixable outputs found</source>
+ <translation>Aucune sortie non mélangeable trouvée</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2709"/>
+ <source>No address given</source>
+ <translation>Aucune adresse fournie</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2921"/>
+ <source>missing amount threshold</source>
+ <translation>montant seuil manquant</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2926"/>
+ <source>invalid amount threshold</source>
+ <translation>montant seuil invalide</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3008"/>
+ <source>Claimed change does not go to a paid address</source>
+ <translation>La monnaie réclamée ne va pas à une adresse payée</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3013"/>
+ <source>Claimed change is larger than payment to the change address</source>
+ <translation>La monnaie réclamée est supérieure au paiement à l&apos;adresse de monnaie</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3035"/>
+ <source>sending %s to %s</source>
+ <translation>envoi de %s à %s</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3041"/>
+ <source>with no destinations</source>
+ <translation>sans destination</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3088"/>
+ <source>Failed to sign transaction</source>
+ <translation>Échec de signature de transaction</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3094"/>
+ <source>Failed to sign transaction: </source>
+ <translation>Échec de signature de transaction : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3120"/>
+ <source>Failed to load transaction from file</source>
+ <translation>Échec du chargement de la transaction du fichier</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3137"/>
+ <source>daemon is busy. Please try later</source>
+ <translation>le démon est occupé. Veuillez réessayer plus tard</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1745"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1995"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2395"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2572"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2833"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3146"/>
+ <source>RPC error: </source>
+ <translation>Erreur RPC : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="312"/>
+ <source>wallet is watch-only and has no spend key</source>
+ <translation>c&apos;est un portefeuille d&apos;audit et il n&apos;a pas de clé de dépense</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="390"/>
+ <source>Your original password was incorrect.</source>
+ <translation>Votre mot de passe original est incorrect.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="404"/>
+ <source>Error with wallet rewrite: </source>
+ <translation>Erreur avec la réécriture du portefeuille : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="513"/>
+ <source>priority must be 0, 1, 2, 3, or 4 </source>
+ <translation>la priorité doit être 0, 1, 2, 3 ou 4 </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="525"/>
+ <source>priority must be 0, 1, 2, 3,or 4</source>
+ <translation>la priorité doit être 0, 1, 2, 3 ou 4</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="540"/>
+ <source>priority must be 0, 1, 2 3,or 4</source>
+ <translation>la priorité doit être 0, 1, 2, 3 ou 4</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="623"/>
+ <source>invalid unit</source>
+ <translation>unité invalide</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="641"/>
+ <source>invalid count: must be an unsigned integer</source>
+ <translation>nombre invalide : un entier non signé est attendu</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="659"/>
+ <source>invalid value</source>
+ <translation>valeur invalide</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="705"/>
+ <source>Same as transfer, but using an older transaction building algorithm</source>
+ <translation>Comme transfer, mais utilise an algorithme de construction de transaction plus ancien</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="709"/>
+ <source>sweep_all [mixin] address [payment_id] - Send all unlocked balance to an address</source>
+ <translation>sweep_all [mixin] adresse [ID_paiement] - Envoyer tout le solde débloqué à une adresse</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="711"/>
+ <source>donate [&lt;mixin_count&gt;] &lt;amount&gt; [payment_id] - Donate &lt;amount&gt; to the development team (donate.getmonero.org)</source>
+ <translation>donate [&lt;mixin&gt;] &lt;montant&gt; [ID_paiement] - Donner &lt;montant&gt; à l&apos;équipe de développement (donate.getmonero.org)</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="714"/>
+ <source>set_log &lt;level&gt;|&lt;categories&gt; - Change current log detail (level must be &lt;0-4&gt;)</source>
+ <translation>set_log &lt;niveau&gt;|&lt;catégories&gt; - Changer les détails du journal (niveau entre &lt;0-4&gt;)</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="717"/>
+ <source>address_book [(add (&lt;address&gt; [pid &lt;long or short payment id&gt;])|&lt;integrated address&gt; [&lt;description possibly with whitespaces&gt;])|(delete &lt;index&gt;)] - Print all entries in the address book, optionally adding/deleting an entry to/from it</source>
+ <translation>address_book [(add (&lt;adresse&gt; [pid &lt;ID de paiement long ou court&gt;])|&lt;adresse integrée&gt; [&lt;description avec des espaces possible&gt;])|(delete &lt;index&gt;)] - Afficher toutes les entrées du carnet d&apos;adresses, éventuellement en y ajoutant/supprimant une entrée</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="729"/>
+ <source>show_transfers [in|out|pending|failed|pool] [&lt;min_height&gt; [&lt;max_height&gt;]] - Show incoming/outgoing transfers within an optional height range</source>
+ <translation>show_transfers [in|out|pending|failed|pool] [&lt;hauteur_minimum&gt; [&lt;hauteur_maximum&gt;]] - Afficher les transferts entrants/sortants en précisant éventuellement un intervalle de hauteurs</translation>
+ </message>
+ <message>
+ <source>unspent_outputs [&lt;min_amount&gt; &lt;max_amount&gt;] - Show unspent outputs within an optional amount range)</source>
+ <translation type="obsolete">unspent_outputs [&lt;montant_minimum&gt; &lt;montant_maximum&gt;] - Afficher les sorties non dépensées en précisant éventuellement un intervalle de montants</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="741"/>
+ <source>Show information about a transfer to/from this address</source>
+ <translation>Afficher les informations à propos d&apos;un transfert vers/de cette adresse</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="742"/>
+ <source>Change wallet password</source>
+ <translation>Changer le mot de passe du portefeuille</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="820"/>
+ <source>usage: set_log &lt;log_level_number_0-4&gt; | &lt;categories&gt;</source>
+ <translation>usage : set_log &lt;niveau_de_journalisation_0-4&gt; | &lt;catégories&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="886"/>
+ <source>(Y/Yes/N/No): </source>
+ <translation>(Y/Yes/Oui/N/No/Non) : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1157"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1184"/>
+ <source>bad m_restore_height parameter: </source>
+ <translation>mauvais paramètre m_restore_height : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1162"/>
+ <source>date format must be YYYY-MM-DD</source>
+ <translation>le format de date doit être AAAA-MM-JJ</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1175"/>
+ <source>Restore height is: </source>
+ <translation>La hauteur de restauration est : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1176"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2348"/>
+ <source>Is this okay? (Y/Yes/N/No): </source>
+ <translation>Est-ce correct ? (Y/Yes/Oui/N/No/Non) : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1212"/>
+ <source>Daemon is local, assuming trusted</source>
+ <translation>Le démon est local, supposons qu&apos;il est de confiance</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1553"/>
+ <source>Password for new watch-only wallet</source>
+ <translation>Mot de passe pour le nouveau portefeuille d&apos;audit</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1604"/>
+ <source>invalid arguments. Please use start_mining [&lt;number_of_threads&gt;] [do_bg_mining] [ignore_battery], &lt;number_of_threads&gt; should be from 1 to </source>
+ <translation>arguments invalides. Veuillez utiliser start_mining [&lt;nombre_de_threads&gt;] [mine_en_arrière_plan] [ignorer_batterie], &lt;nombre_de_threads&gt; devrait être entre 1 et </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1755"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2457"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2634"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2895"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3205"/>
+ <source>internal error: </source>
+ <translation>erreur interne : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1760"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2000"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2462"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2639"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2900"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3210"/>
+ <source>unexpected error: </source>
+ <translation>erreur inattendue : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1765"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2005"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2467"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2644"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2905"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3215"/>
+ <source>unknown error</source>
+ <translation>erreur inconnue</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1770"/>
+ <source>refresh failed: </source>
+ <translation>échec du rafraîchissement : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1770"/>
+ <source>Blocks received: </source>
+ <translation>Blocs reçus : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1795"/>
+ <source>unlocked balance: </source>
+ <translation>solde débloqué : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="808"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/>
+ <source>amount</source>
+ <translation>montant</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/>
+ <source>spent</source>
+ <translation>dépensé</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/>
+ <source>global index</source>
+ <translation>index global</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/>
+ <source>tx id</source>
+ <translation>ID de transaction</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1868"/>
+ <source>No incoming transfers</source>
+ <translation>Aucun transfert entrant</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1872"/>
+ <source>No incoming available transfers</source>
+ <translation>Aucun transfert entrant disponible</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1876"/>
+ <source>No incoming unavailable transfers</source>
+ <translation>Aucun transfert entrant non disponible</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1887"/>
+ <source>expected at least one payment_id</source>
+ <translation>au moins un ID de paiement attendu</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/>
+ <source>payment</source>
+ <translation>paiement</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/>
+ <source>transaction</source>
+ <translation>transaction</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/>
+ <source>height</source>
+ <translation>hauteur</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/>
+ <source>unlock time</source>
+ <translation>durée de déverrouillage</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1908"/>
+ <source>No payments with id </source>
+ <translation>Aucun paiement avec l&apos;ID </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1960"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2026"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2280"/>
+ <source>failed to get blockchain height: </source>
+ <translation>échec de la récupération de la hauteur de la chaîne de blocs : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2016"/>
+ <source>failed to connect to the daemon</source>
+ <translation>échec de la connexion au démon</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2034"/>
+ <source>
+Transaction %llu/%llu: txid=%s</source>
+ <translation>
+Transaction %llu/%llu : ID=%s</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2044"/>
+ <source>
+Input %llu/%llu: amount=%s</source>
+ <translation>
+Entrée %llu/%llu : montant=%s</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2060"/>
+ <source>failed to get output: </source>
+ <translation>échec de la récupération de la sortie : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2068"/>
+ <source>output key&apos;s originating block height shouldn&apos;t be higher than the blockchain height</source>
+ <translation>la hauteur du bloc d&apos;origine de la clé de la sortie ne devrait pas être supérieure à celle de la chaîne de blocs</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2072"/>
+ <source>
+Originating block heights: </source>
+ <translation>
+Hauteurs des blocs d&apos;origine : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2087"/>
+ <source>
+|</source>
+ <translation>
+|</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2087"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3915"/>
+ <source>|
+</source>
+ <translation>|
+</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2104"/>
+ <source>
+Warning: Some input keys being spent are from </source>
+ <translation>
+Attention : Certaines clés d&apos;entrées étant dépensées sont issues de </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2106"/>
+ <source>, which can break the anonymity of ring signature. Make sure this is intentional!</source>
+ <translation>, ce qui peut casser l&apos;anonymat du cercle de signature. Assurez-vous que c&apos;est intentionnel !</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2152"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2937"/>
+ <source>wrong number of arguments</source>
+ <translation>mauvais nombre d&apos;arguments</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2257"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2744"/>
+ <source>No payment id is included with this transaction. Is this okay? (Y/Yes/N/No): </source>
+ <translation>Aucun ID de paiement n&apos;est inclus dans cette transaction. Est-ce correct ? (Y/Yes/Oui/N/No/Non) : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2298"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2762"/>
+ <source>No outputs found, or daemon is not ready</source>
+ <translation>Aucune sortie trouvée, ou le démon n&apos;est pas prêt</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2399"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2576"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2837"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3150"/>
+ <source>failed to get random outputs to mix: </source>
+ <translation>échec de la récupération de sorties aléatoires à mélanger : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2518"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2779"/>
+ <source>Sweeping %s in %llu transactions for a total fee of %s. Is this okay? (Y/Yes/N/No): </source>
+ <translation>Balayage de %s dans %llu transactions pour des frais totaux de %s. Est-ce correct ? (Y/Yes/Oui/N/No/Non) : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2524"/>
+ <source>Sweeping %s for a total fee of %s. Is this okay? (Y/Yes/N/No): </source>
+ <translation>Balayage de %s pour des frais totaux de %s. Est-ce correct ? (Y/Yes/Oui/N/No/Non) : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2969"/>
+ <source>Donating </source>
+ <translation>Don de </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3053"/>
+ <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min mixin %lu. %sIs this okay? (Y/Yes/N/No): </source>
+ <translation>Chargement de %lu transactions, pour %s, %s de frais, %s. %s, avec mixin minimum de %lu. %sEst-ce correct ? (Y/Yes/Oui/N/No/Non) : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3077"/>
+ <source>This is a watch only wallet</source>
+ <translation>Ceci est un portefeuille d&apos;audit</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4443"/>
+ <source>usage: show_transfer &lt;txid&gt;</source>
+ <translation>usage : show_transfer &lt;ID_de_transaction&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4557"/>
+ <source>Transaction ID not found</source>
+ <translation>ID de transaction non trouvé</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="237"/>
+ <source>true</source>
+ <translation>vrai</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="266"/>
+ <source>failed to parse refresh type</source>
+ <translation>échec de l&apos;analyse du type de rafraîchissement</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="330"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="362"/>
+ <source>wallet is watch-only and has no seed</source>
+ <translation>c&apos;est un portefeuille d&apos;audit et il n&apos;a pas de graine</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="353"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="367"/>
+ <source>wallet is non-deterministic and has no seed</source>
+ <translation>c&apos;est un portefeuille non déterministe et il n&apos;a pas de graine</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="450"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="467"/>
+ <source>wallet is watch-only and cannot transfer</source>
+ <translation>c&apos;est un portefeuille d&apos;audit et il ne peut pas transférer</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="474"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="480"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="496"/>
+ <source>mixin must be an integer &gt;= 2</source>
+ <translation>mixin doit être un entier &gt;= 2</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="501"/>
+ <source>could not change default mixin</source>
+ <translation>échec du changement du mixin par défaut</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="545"/>
+ <source>could not change default priority</source>
+ <translation>échec du changement de la priorité par défaut</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="700"/>
+ <source>Synchronize transactions and balance</source>
+ <translation>Synchroniser les transactions et le solde</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="702"/>
+ <source>incoming_transfers [available|unavailable] - Show incoming transfers, all or filtered by availability</source>
+ <translation>incoming_transfers [available|unavailable] - Afficher les transferts entrants, soit tous soit filtrés par disponibilité</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="703"/>
+ <source>payments &lt;PID_1&gt; [&lt;PID_2&gt; ... &lt;PID_N&gt;] - Show payments for given payment ID[s]</source>
+ <translation>payments &lt;PID_1&gt; [&lt;PID_2&gt; ... &lt;PID_N&gt;] - Affichier les paiements pour certains ID de paiement donnés</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="706"/>
+ <source>transfer [&lt;priority&gt;] [&lt;mixin_count&gt;] &lt;address&gt; &lt;amount&gt; [&lt;payment_id&gt;] - Transfer &lt;amount&gt; to &lt;address&gt;. &lt;priority&gt; is the priority of the transaction. The higher the priority, the higher the fee of the transaction. Valid values in priority order (from lowest to highest) are: unimportant, normal, elevated, priority. If omitted, the default value (see the command &quot;set priority&quot;) is used. &lt;mixin_count&gt; is the number of extra inputs to include for untraceability. Multiple payments can be made at once by adding &lt;address_2&gt; &lt;amount_2&gt; etcetera (before the payment ID, if it&apos;s included)</source>
+ <translation>transfer [&lt;priorité&gt;] [&lt;mixin&gt;] &lt;adresse&gt; &lt;montant&gt; [&lt;ID_paiement&gt;] - Transférer &lt;montant&gt; à &lt;adresse&gt;. &lt;priorité&gt; est la priorité de la transaction. Plus la priorité est élevée, plues les frais de transaction seront élévés. Les valeurs de priorité valies sont dans l&apos;ordre (de la plus basse à la plus élevée) : unimportant, normal, elevated, priority. Si ce paramètre est omis, la valeur par défaut (voir la commande &quot;set priority&quot;) est utilisée. &lt;mixin&gt; est le nombre d&apos;entrées supplémentaires à inclure pour l&apos;intraçabilité. De multiples paiements peuvent être effectués d&apos;un coup en ajoutant &lt;adresse_2&gt; &lt;montant_2&gt; et cetera (avant l&apos;ID de paiement, s&apos;il est inclus)</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="707"/>
+ <source>locked_transfer [&lt;mixin_count&gt;] &lt;addr&gt; &lt;amount&gt; &lt;lockblocks&gt;(Number of blocks to lock the transaction for, max 1000000) [&lt;payment_id&gt;]</source>
+ <translation>locked_transfer [&lt;mixin&gt;] &lt;adresse&gt; &lt;montant&gt; &lt;blocs_vérrous&gt;(Nombre de blocs pendant lequel vérrouiller la transaction, maximum 1000000) [&lt;ID_paiement&gt;]</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="708"/>
+ <source>Send all unmixable outputs to yourself with mixin 0</source>
+ <translation>Envoyer toutes les sorties non méleangeables à vous-même avec un mixin de 0</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="712"/>
+ <source>Sign a transaction from a file</source>
+ <translation>Signer une transaction d&apos;un fichier</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="713"/>
+ <source>Submit a signed transaction from a file</source>
+ <translation>Soumettre une transaction signée d&apos;un fichier</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="716"/>
+ <source>integrated_address [PID] - Encode a payment ID into an integrated address for the current wallet public address (no argument uses a random payment ID), or decode an integrated address to standard address and payment ID</source>
+ <translation>integrated_address [PID] - Encoder un ID de paiement dans une adresse intégrée pour l&apos;adresse publique du portefeuille actuel (sans argument un ID de paiement aléatoire est utilisé), ou décoder une adresse intégrée en une adresse standard et un ID de paiement</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="718"/>
+ <source>Save wallet data</source>
+ <translation>Sauvegarder les données du portefeuille</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="719"/>
+ <source>Save a watch-only keys file</source>
+ <translation>Sauvegarder un fichier de clés d&apos;audit</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="720"/>
+ <source>Display private view key</source>
+ <translation>Afficher la clé privée d&apos;audit</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="721"/>
+ <source>Display private spend key</source>
+ <translation>Afficher la clé privée de dépense</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="722"/>
+ <source>Display Electrum-style mnemonic seed</source>
+ <translation>Afficher la graine mnémonique de style Electrum</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="723"/>
+ <source>Available options: seed language - set wallet seed language; always-confirm-transfers &lt;1|0&gt; - whether to confirm unsplit txes; print-ring-members &lt;1|0&gt; - whether to print detailed information about ring members during confirmation; store-tx-info &lt;1|0&gt; - whether to store outgoing tx info (destination address, payment ID, tx secret key) for future reference; default-mixin &lt;n&gt; - set default mixin (default is 4); auto-refresh &lt;1|0&gt; - whether to automatically sync new blocks from the daemon; refresh-type &lt;full|optimize-coinbase|no-coinbase|default&gt; - set wallet refresh behaviour; priority [0|1|2|3|4] - default/unimportant/normal/elevated/priority fee; confirm-missing-payment-id &lt;1|0&gt;; ask-password &lt;1|0&gt;; unit &lt;monero|millinero|micronero|nanonero|piconero&gt; - set default monero (sub-)unit; min-outputs-count [n] - try to keep at least that many outputs of value at least min-outputs-value; min-outputs-value [n] - try to keep at least min-outputs-count outputs of at least that value; merge-destinations &lt;1|0&gt; - whether to merge multiple payments to the same destination address</source>
+ <translation>Options disponibles : seed language - définir la langue de la graine du portefeuille; always-confirm-transfers &lt;1|0&gt; - confirmer ou non les transactions non scindées; print-ring-members &lt;1|0&gt; - afficher ou non des informations détaillées sur les membres du cercle pendant la confirmation; store-tx-info &lt;1|0&gt; - sauvegarder ou non les informations des transactions sortantes (adresse de destination, ID de paiement, clé secrète de transaction) pour référence future; default-mixin &lt;n&gt; - définir le mixin par défaut (4 par défaut); auto-refresh &lt;1|0&gt; - synchroniser automatiquement ou non les nouveau blocs du démon; refresh-type &lt;full|optimize-coinbase|no-coinbase|default&gt; - définir le comportement du rafraîchissement du portefeuille; priority [0|1|2|3|4] - frais de transaction par défault/peu important/normal/élevé/prioritaire; confirm-missing-payment-id &lt;1|0&gt;; ask-password &lt;1|0&gt;; unit &lt;monero|millinero|micronero|nanonero|piconero&gt; - définir la (sous-)unité monero par défaut; min-outputs-count [n] - essayer de garder au moins ce nombre de sortie d&apos;une valeur d&apos;au moins min-outputs-value; min-outputs-value [n] - essayer de garder au moins min-outputs-count sorties d&apos;une valeur d&apos;au moins ce montant; merge-destinations &lt;1|0&gt; - fusionner ou non de multiples paiements à une même adresse de destination</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="724"/>
+ <source>Rescan blockchain for spent outputs</source>
+ <translation>Réexaminer la chaîne de blocs pour trouver les sorties dépensées</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="725"/>
+ <source>Get transaction key (r) for a given &lt;txid&gt;</source>
+ <translation>Obtenir la clé de transaction (r) pour un &lt;ID_de_transaction&gt; donné</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="726"/>
+ <source>Check amount going to &lt;address&gt; in &lt;txid&gt;</source>
+ <translation>Vérifier le montant allant à &lt;adresse&gt; dans &lt;ID_de_transaction&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="727"/>
+ <source>Generate a signature to prove payment to &lt;address&gt; in &lt;txid&gt; using the transaction secret key (r) without revealing it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="728"/>
+ <source>Check tx proof for payment going to &lt;address&gt; in &lt;txid&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="730"/>
+ <source>unspent_outputs [&lt;min_amount&gt; &lt;max_amount&gt;] - Show unspent outputs within an optional amount range</source>
+ <translation>unspent_outputs [&lt;montant_minimum&gt; &lt;montant_maximum&gt;] - Afficher les sorties non dépensées en précisant éventuellement un intervalle de montants</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="731"/>
+ <source>Rescan blockchain from scratch</source>
+ <translation>Réexaminer la chaîne de blocs depuis le début</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="732"/>
+ <source>Set an arbitrary string note for a txid</source>
+ <translation>Définir une note arbitraire pour un ID de transaction</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="733"/>
+ <source>Get a string note for a txid</source>
+ <translation>Obtenir une note pour un ID de transaction</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="734"/>
+ <source>Show wallet status information</source>
+ <translation>Afficher les informations sur le statut du portefuille</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="735"/>
+ <source>Sign the contents of a file</source>
+ <translation>Signer le contenu d&apos;un fichier</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="736"/>
+ <source>Verify a signature on the contents of a file</source>
+ <translation>Vérifier une signature du contenu d&apos;un fichier</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="737"/>
+ <source>Export a signed set of key images</source>
+ <translation>Exporter un ensemble signé d&apos;images de clé</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="738"/>
+ <source>Import signed key images list and verify their spent status</source>
+ <translation>Importer un ensemble signé d&apos;images de clé et vérifier leurs statuts de dépense</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="739"/>
+ <source>Export a set of outputs owned by this wallet</source>
+ <translation>Exporter un ensemble de sorties possédées par ce portefeuille</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="740"/>
+ <source>Import set of outputs owned by this wallet</source>
+ <translation>Importer un ensemble de sorties possédées par ce portefeuille</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="802"/>
+ <source>full (slowest, no assumptions); optimize-coinbase (fast, assumes the whole coinbase is paid to a single address); no-coinbase (fastest, assumes we receive no coinbase transaction), default (same as optimize-coinbase)</source>
+ <translation>full (le plus lent, aucune supposition); optimize-coinbase (rapide, suppose que la récompense de bloc est payée à une unique adresse); no-coinbase (le plus rapide, suppose que l&apos;on ne reçoit aucune récompense de bloc), default (comme optimize-coinbase)</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="806"/>
+ <source>monero, millinero, micronero, nanonero, piconero</source>
+ <translation>monero, millinero, micronero, nanonero, piconero</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="851"/>
+ <source>Wallet name not valid. Please try again or use Ctrl-C to quit.</source>
+ <translation>Nom de portefeuille non valide. Veuillez réessayer ou utilisez Ctrl-C pour quitter.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="868"/>
+ <source>Wallet and key files found, loading...</source>
+ <translation>Fichier portefeuille et fichier de clés trouvés, chargement...</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="874"/>
+ <source>Key file found but not wallet file. Regenerating...</source>
+ <translation>Fichier de clés trouvé mais pas le fichier portefeuille. Régénération...</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="880"/>
+ <source>Key file not found. Failed to open wallet: </source>
+ <translation>Fichier de clés non trouvé. Échec de l&apos;ouverture du portefeuille : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="894"/>
+ <source>Generating new wallet...</source>
+ <translation>Génération du nouveau portefeuille...</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="937"/>
+ <source>can&apos;t specify more than one of --generate-new-wallet=&quot;wallet_name&quot;, --wallet-file=&quot;wallet_name&quot;, --generate-from-view-key=&quot;wallet_name&quot;, --generate-from-json=&quot;jsonfilename&quot; and --generate-from-keys=&quot;wallet_name&quot;</source>
+ <translation>impossible de spécifier plus d&apos;une option parmis --generate-new-wallet=&quot;nom_du_portefeuille&quot;, --wallet-file=&quot;nom_du_portefeuille&quot;, --generate-from-view-key=&quot;nom_du_portefeuille&quot;, --generate-from-json=&quot;nom_du_fichier_json&quot; et --generate-from-keys=&quot;nom_du_portefeuille&quot;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="953"/>
+ <source>can&apos;t specify both --restore-deterministic-wallet and --non-deterministic</source>
+ <translation>impossible de spécifier à la fois --restore-deterministic-wallet et --non-deterministic</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="982"/>
+ <source>Electrum-style word list failed verification</source>
+ <translation>Échec de la vérification de la liste de mots de style Electrum</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="994"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1011"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1046"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1063"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1079"/>
+ <source>No data supplied, cancelled</source>
+ <translation>Pas de données fournies, annulation</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1002"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1054"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2220"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2718"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3276"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3378"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3530"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4048"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4239"/>
+ <source>failed to parse address</source>
+ <translation>échec de l&apos;analyse de l&apos;adresse</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1017"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1085"/>
+ <source>failed to parse view key secret key</source>
+ <translation>échec de l&apos;analyse de la clé secrète d&apos;audit</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1027"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1103"/>
+ <source>failed to verify view key secret key</source>
+ <translation>échec de la vérification de la clé secrète d&apos;audit</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1031"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1107"/>
+ <source>view key does not match standard address</source>
+ <translation>la clé d&apos;audit ne correspond pas à l&apos;adresse standard</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1036"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1111"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1128"/>
+ <source>account creation failed</source>
+ <translation>échec de la création du compte</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1069"/>
+ <source>failed to parse spend key secret key</source>
+ <translation>échec de l&apos;analyse de la clé secrète de dépense</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1095"/>
+ <source>failed to verify spend key secret key</source>
+ <translation>échec de la vérification de la clé secrète de dépense</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1099"/>
+ <source>spend key does not match standard address</source>
+ <translation>la clé de dépense ne correspond pas à l&apos;adresse standard</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1199"/>
+ <source>failed to open account</source>
+ <translation>échec de l&apos;ouverture du compte</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1203"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1579"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1626"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1647"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3348"/>
+ <source>wallet is null</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1262"/>
+ <source>Daemon either is not started or wrong port was passed. Please make sure daemon is running or restart the wallet with the correct daemon address.</source>
+ <translation>Le démon n&apos;est pas démarré ou un mauvais port a été passé. Veuillez vous assurer que le démon fonctionne ou redémarrez le portefeuille avec l&apos;adresse de démon correcte.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1306"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1311"/>
+ <source>invalid language choice passed. Please try again.
+</source>
+ <translation>choix de langue passé invalide. Veuillez réessayer.
+</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1370"/>
+ <source>View key: </source>
+ <translation>Clé d&apos;audit : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1385"/>
+ <source>Your wallet has been generated!
+To start synchronizing with the daemon, use &quot;refresh&quot; command.
+Use &quot;help&quot; command to see the list of available commands.
+Always use &quot;exit&quot; command when closing monero-wallet-cli to save your
+current session&apos;s state. Otherwise, you might need to synchronize
+your wallet again (your wallet keys are NOT at risk in any case).
+</source>
+ <translation>Votre portefeuille a été généré !
+Pour commencer la synchronisation avec le démon, utilisez la commande &quot;refresh&quot;.
+Utilisez la commande &quot;help&quot; pour voir la liste des commandes disponibles.
+Utilisez toujours la commande &quot;exit&quot; pour fermer monero-wallet-cli afin de sauvegarder
+l&apos;état actuel de votre session. Sinon vous pourriez avoir besoin de synchroniser
+votre portefeuille à nouveau (mais les clés de votre portefeuille ne risquent rien).
+</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1492"/>
+ <source>You may want to remove the file &quot;%s&quot; and try again</source>
+ <translation>Vous pourriez vouloir supprimer le fichier &quot;%s&quot; et réessayer</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1518"/>
+ <source>failed to deinitialize wallet</source>
+ <translation>échec de la désinitialisation du portefeuille</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1570"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1968"/>
+ <source>this command requires a trusted daemon. Enable with --trusted-daemon</source>
+ <translation>cette commande requiert un démon de confiance. Activer avec --trusted-daemon</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1657"/>
+ <source>blockchain can&apos;t be saved: </source>
+ <translation>la chaîne de blocs ne peut pas être sauvegardée : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1736"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1982"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2386"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2563"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2824"/>
+ <source>daemon is busy. Please try again later.</source>
+ <translation>le démon est occupé. Veuillez réessayer plus tard.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1740"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1986"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2390"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2567"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2828"/>
+ <source>no connection to daemon. Please make sure daemon is running.</source>
+ <translation>pas de connexion au démon. Veuillez vous assurer que le démon fonctionne.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1750"/>
+ <source>refresh error: </source>
+ <translation>erreur du rafraîchissement : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1794"/>
+ <source>Balance: </source>
+ <translation>Solde : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1845"/>
+ <source>pubkey</source>
+ <translation>clé publique</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1845"/>
+ <source>key image</source>
+ <translation>image de clé</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1856"/>
+ <source>unlocked</source>
+ <translation>déverrouillé</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/>
+ <source>ringct</source>
+ <translation>ringct</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1855"/>
+ <source>T</source>
+ <translation>V</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1855"/>
+ <source>F</source>
+ <translation>F</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1856"/>
+ <source>locked</source>
+ <translation>vérrouillé</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1857"/>
+ <source>RingCT</source>
+ <translation>RingCT</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1857"/>
+ <source>-</source>
+ <translation>-</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1929"/>
+ <source>payment ID has invalid format, expected 16 or 64 character hex string: </source>
+ <translation>format d&apos;identifiant de paiement invalide, 16 ou 64 caractères hexadécimaux attendus : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1990"/>
+ <source>failed to get spent status</source>
+ <translation>échec de la récupération du statut de dépense</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2105"/>
+ <source>the same transaction</source>
+ <translation>la même transaction</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2105"/>
+ <source>blocks that are temporally very close</source>
+ <translation>blocs très proches dans le temps</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2206"/>
+ <source>Locked blocks too high, max 1000000 (˜4 yrs)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3258"/>
+ <source>usage: get_tx_proof &lt;txid&gt; &lt;dest_address&gt; [&lt;tx_key&gt;]</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3289"/>
+ <source>failed to parse tx_key</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3298"/>
+ <source>Tx secret key was found for the given txid, but you&apos;ve also provided another tx secret key which doesn&apos;t match the found one.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3306"/>
+ <source>Tx secret key wasn&apos;t found in the wallet file. Provide it as the optional third parameter if you have it elsewhere.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3330"/>
+ <source>Signature: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3508"/>
+ <source>usage: check_tx_proof &lt;txid&gt; &lt;address&gt; &lt;signature&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3539"/>
+ <source>Signature header check error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3550"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3555"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3560"/>
+ <source>Signature decoding error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3602"/>
+ <source>Tx pubkey was not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3609"/>
+ <source>Good signature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3613"/>
+ <source>Bad signature</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3621"/>
+ <source>failed to generate key derivation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3994"/>
+ <source>usage: integrated_address [payment ID]</source>
+ <translation>usage : integrated_address [ID paiement]</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4017"/>
+ <source>Integrated address: account %s, payment ID %s</source>
+ <translation>Adresse intégrée : compte %s, ID de paiement %s</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4022"/>
+ <source>Standard address: </source>
+ <translation>Adresse standard : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4027"/>
+ <source>failed to parse payment ID or address</source>
+ <translation>échec de l&apos;analyse de l&apos;ID de paiement ou de l&apos;adresse</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4038"/>
+ <source>usage: address_book [(add (&lt;address&gt; [pid &lt;long or short payment id&gt;])|&lt;integrated address&gt; [&lt;description possibly with whitespaces&gt;])|(delete &lt;index&gt;)]</source>
+ <translation>usage : address_book [(add (&lt;adresse&gt; [pid &lt;ID de paiement long ou court&gt;])|&lt;adresse integrée&gt; [&lt;description avec des espaces possible&gt;])|(delete &lt;index&gt;)]</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4070"/>
+ <source>failed to parse payment ID</source>
+ <translation>échec de l&apos;analyse de l&apos;ID de paiement</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4088"/>
+ <source>failed to parse index</source>
+ <translation>échec de l&apos;analyse de l&apos;index</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4096"/>
+ <source>Address book is empty.</source>
+ <translation>Le carnet d&apos;adresses est vide.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4102"/>
+ <source>Index: </source>
+ <translation>Index : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4103"/>
+ <source>Address: </source>
+ <translation>Adresse : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4104"/>
+ <source>Payment ID: </source>
+ <translation>ID de paiement : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4105"/>
+ <source>Description: </source>
+ <translation>Description : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4115"/>
+ <source>usage: set_tx_note [txid] free text note</source>
+ <translation>usage : set_tx_note [ID transaction] note de texte libre</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4143"/>
+ <source>usage: get_tx_note [txid]</source>
+ <translation>usage : get_tx_note [ID transaction]</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4193"/>
+ <source>usage: sign &lt;filename&gt;</source>
+ <translation>usage : sign &lt;fichier&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4198"/>
+ <source>wallet is watch-only and cannot sign</source>
+ <translation>c&apos;est un portefeuille d&apos;audit et il ne peut pas signer</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4207"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4230"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4374"/>
+ <source>failed to read file </source>
+ <translation>échec de la lecture du fichier </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4219"/>
+ <source>usage: verify &lt;filename&gt; &lt;address&gt; &lt;signature&gt;</source>
+ <translation>usage : verify &lt;fichier&gt; &lt;adresse&gt; &lt;signature&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4246"/>
+ <source>Bad signature from </source>
+ <translation>Mauvaise signature de </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4250"/>
+ <source>Good signature from </source>
+ <translation>Bonne signature de </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4259"/>
+ <source>usage: export_key_images &lt;filename&gt;</source>
+ <translation>usage : export_key_images &lt;fichier&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4264"/>
+ <source>wallet is watch-only and cannot export key images</source>
+ <translation>c&apos;est un portefeuille d&apos;audit et il ne peut pas exporter les images de clé</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4274"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4346"/>
+ <source>failed to save file </source>
+ <translation>échec de l&apos;enregistrement du fichier </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4285"/>
+ <source>Signed key images exported to </source>
+ <translation>Images de clé signées exportées vers </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4293"/>
+ <source>usage: import_key_images &lt;filename&gt;</source>
+ <translation>usage : import_key_images &lt;fichier&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4323"/>
+ <source>usage: export_outputs &lt;filename&gt;</source>
+ <translation>usage : export_outputs &lt;fichier&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4357"/>
+ <source>Outputs exported to </source>
+ <translation>Sorties exportées vers </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4365"/>
+ <source>usage: import_outputs &lt;filename&gt;</source>
+ <translation>usage : import_outputs &lt;fichier&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2246"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3818"/>
+ <source>amount is wrong: </source>
+ <translation>montant erroné : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2247"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3819"/>
+ <source>expected number from 0 to </source>
+ <translation>attend un nombre de 0 à </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2378"/>
+ <source>Money successfully sent, transaction </source>
+ <translation>Fonds envoyés avec succès, transaction </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3141"/>
+ <source>no connection to daemon. Please, make sure daemon is running.</source>
+ <translation>pas de connexion au démon. Veuillez vous assurer que le démon fonctionne.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2420"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2597"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2858"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3171"/>
+ <source>not enough outputs for specified mixin_count</source>
+ <translation>pas assez de sorties pour le mixin spécifié</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2423"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2600"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2861"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3174"/>
+ <source>output amount</source>
+ <translation>montant de la sortie</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2423"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2600"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2861"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3174"/>
+ <source>found outputs to mix</source>
+ <translation>sorties à mélanger trouvées</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2428"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2605"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2866"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3179"/>
+ <source>transaction was not constructed</source>
+ <translation>la transaction n&apos;a pas été construite</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2432"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2609"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2870"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3183"/>
+ <source>transaction %s was rejected by daemon with status: </source>
+ <translation>la transaction %s a été rejetée par le démon avec le statut : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2443"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2620"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2881"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3191"/>
+ <source>one of destinations is zero</source>
+ <translation>une des destinations est zéro</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3195"/>
+ <source>Failed to find a suitable way to split transactions</source>
+ <translation>Échec de la recherche d&apos;une façon adéquate de scinder les transactions</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2452"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2629"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2890"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3200"/>
+ <source>unknown transfer error: </source>
+ <translation>erreur de transfert inconnue : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2516"/>
+ <source>Sweeping </source>
+ <translation>Balayage de </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2785"/>
+ <source>Sweeping %s for a total fee of %s. Is this okay? (Y/Yes/N/No)</source>
+ <translation>Balayage de %s pour des frais totaux de %s. Est-ce correct ? (Y/Yes/Oui/N/No/Non)</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2555"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2816"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3129"/>
+ <source>Money successfully sent, transaction: </source>
+ <translation>Fonds envoyés avec succès, transaction : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3022"/>
+ <source>Change goes to more than one address</source>
+ <translation>La monnaie rendue va à plus d&apos;une adresse</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3047"/>
+ <source>%s change to %s</source>
+ <translation>%s de monnaie rendue à %s</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3050"/>
+ <source>no change</source>
+ <translation>sans monnaie rendue</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3105"/>
+ <source>Transaction successfully signed to file </source>
+ <translation>Transaction signée avec succès dans le fichier </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3226"/>
+ <source>usage: get_tx_key &lt;txid&gt;</source>
+ <translation>usage : get_tx_key &lt;ID transaction&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3234"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3266"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3354"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3519"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4122"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4150"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4450"/>
+ <source>failed to parse txid</source>
+ <translation>échec de l&apos;analyse de l&apos;ID de transaction</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3245"/>
+ <source>Tx key: </source>
+ <translation>Clé de transaction : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3250"/>
+ <source>no tx keys found for this txid</source>
+ <translation>aucune clé de transaction trouvée pour cet ID de transaction</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3339"/>
+ <source>usage: check_tx_key &lt;txid&gt; &lt;txkey&gt; &lt;address&gt;</source>
+ <translation>usage : check_tx_key &lt;ID transaction&gt; &lt;clé transaction&gt; &lt;adresse&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3361"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3368"/>
+ <source>failed to parse tx key</source>
+ <translation>échec de l&apos;analyse de la clé de transaction</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3573"/>
+ <source>failed to get transaction from daemon</source>
+ <translation>échec de la récupération de la transaction du démon</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3411"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3584"/>
+ <source>failed to parse transaction from daemon</source>
+ <translation>échec de l&apos;analyse de la transaction du démon</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3418"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3591"/>
+ <source>failed to validate transaction from daemon</source>
+ <translation>échec de la validation de la transaction du démon</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3423"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3596"/>
+ <source>failed to get the right transaction from daemon</source>
+ <translation>échec de la récupération de la bonne transaction du démon</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3385"/>
+ <source>failed to generate key derivation from supplied parameters</source>
+ <translation>échec de la génération de la dérivation de clé à partir des paramètres fournis</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3471"/>
+ <source>error: </source>
+ <translation>erreur : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3477"/>
+ <source>received</source>
+ <translation>a reçu</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3477"/>
+ <source>in txid</source>
+ <translation>dans la transaction</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3481"/>
+ <source>received nothing in txid</source>
+ <translation>n&apos;a rien reçu dans la transaction</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3485"/>
+ <source>WARNING: this transaction is not yet included in the blockchain!</source>
+ <translation>ATTENTION : cette transaction n&apos;est pas encore inclue dans la chaîne de blocs !</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3494"/>
+ <source>This transaction has %u confirmations</source>
+ <translation>Cette transaction a %u confirmations</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3498"/>
+ <source>WARNING: failed to determine number of confirmations!</source>
+ <translation>ATTENTION : échec de la détermination du nombre de confirmations !</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3661"/>
+ <source>usage: show_transfers [in|out|all|pending|failed] [&lt;min_height&gt; [&lt;max_height&gt;]]</source>
+ <translation>usage : show_transfers [in|out|all|pending|failed] [&lt;hauteur_minimum&gt; [&lt;hauteur_maximum&gt;]]</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3700"/>
+ <source>bad min_height parameter:</source>
+ <translation>mauvais paramètre hauteur_minimum :</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3712"/>
+ <source>bad max_height parameter:</source>
+ <translation>mauvais paramètre hauteur_maximum :</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3760"/>
+ <source>in</source>
+ <translation>reçu</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3760"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3798"/>
+ <source>out</source>
+ <translation>payé</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3798"/>
+ <source>failed</source>
+ <translation>échoué</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3798"/>
+ <source>pending</source>
+ <translation>en attente</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3809"/>
+ <source>usage: unspent_outputs [&lt;min_amount&gt; &lt;max_amount&gt;]</source>
+ <translation>usage : unspent_outputs [&lt;montant_minimum&gt; &lt;montant_maximum&gt;]</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3824"/>
+ <source>&lt;min_amount&gt; should be smaller than &lt;max_amount&gt;</source>
+ <translation>&lt;montant_minimum&gt; doit être inférieur à &lt;montant_maximum&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3856"/>
+ <source>
+Amount: </source>
+ <translation>
+Montant : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3856"/>
+ <source>, number of keys: </source>
+ <translation>, nombre de clés : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3861"/>
+ <source> </source>
+ <translation> </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3866"/>
+ <source>
+Min block height: </source>
+ <translation>
+Hauteur de bloc minimum : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3867"/>
+ <source>
+Max block height: </source>
+ <translation>
+Hauteur de bloc maximum : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3868"/>
+ <source>
+Min amount found: </source>
+ <translation>
+Montant minimum trouvé : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3869"/>
+ <source>
+Max amount found: </source>
+ <translation>
+Montant maximum trouvé : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3870"/>
+ <source>
+Total count: </source>
+ <translation>
+Compte total : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3910"/>
+ <source>
+Bin size: </source>
+ <translation>
+Taille de classe : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3911"/>
+ <source>
+Outputs per *: </source>
+ <translation>
+Sorties par * : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3913"/>
+ <source>count
+ ^
+</source>
+ <translation>compte
+ ^
+</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3915"/>
+ <source> |</source>
+ <translation> |</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3917"/>
+ <source> +</source>
+ <translation> +</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3917"/>
+ <source>+--&gt; block height
+</source>
+ <translation>+--&gt; hauteur de bloc
+</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3918"/>
+ <source> ^</source>
+ <translation> ^</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3918"/>
+ <source>^
+</source>
+ <translation>^
+</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3919"/>
+ <source> </source>
+ <translation> </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3969"/>
+ <source>wallet</source>
+ <translation>portefeuille</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="420"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4000"/>
+ <source>Random payment ID: </source>
+ <translation>ID de paiement aléatoire : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4001"/>
+ <source>Matching integrated address: </source>
+ <translation>Adresse intégrée correspondante : </translation>
+ </message>
+</context>
+<context>
+ <name>sw</name>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="116"/>
+ <source>Generate new wallet and save it to &lt;arg&gt;</source>
+ <translation>Générer un nouveau portefeuille et le sauvegarder dans &lt;arg&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="117"/>
+ <source>Generate incoming-only wallet from view key</source>
+ <translation>Générer un portefeuille d&apos;audit à partir d&apos;une clé d&apos;audit</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="118"/>
+ <source>Generate wallet from private keys</source>
+ <translation>Générer un portefeuille à partir de clés privées</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="120"/>
+ <source>Specify Electrum seed for wallet recovery/creation</source>
+ <translation>Spécifier la graine Electrum pour la récupération/création d&apos;un portefeuille</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="121"/>
+ <source>Recover wallet using Electrum-style mnemonic seed</source>
+ <translation>Récupérer un portefeuille en utilisant une graine mnémonique de style Electrum</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="122"/>
+ <source>Create non-deterministic view and spend keys</source>
+ <translation>Créer des clés d&apos;audit et de dépense non déterministes</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="123"/>
+ <source>Enable commands which rely on a trusted daemon</source>
+ <translation>Activer les commandes qui dépendent d&apos;un démon de confiance</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="124"/>
+ <source>Allow communicating with a daemon that uses a different RPC version</source>
+ <translation>Autoriser la communication avec un démon utilisant une version de RPC différente</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="125"/>
+ <source>Restore from specific blockchain height</source>
+ <translation>Restaurer à partir d&apos;une hauteur de bloc spécifique</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="136"/>
+ <source>daemon is busy. Please try again later.</source>
+ <translation>le démon est occupé. Veuillez réessayer plus tard.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="145"/>
+ <source>possibly lost connection to daemon</source>
+ <translation>connexion avec le démon peut-être perdue</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="226"/>
+ <source>Error: </source>
+ <translation>Erreur : </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4614"/>
+ <source>Failed to initialize wallet</source>
+ <translation>Échec de l&apos;initialisation du portefeuille</translation>
+ </message>
+</context>
+<context>
+ <name>tools::dns_utils</name>
+ <message>
+ <location filename="../src/common/dns_utils.cpp" line="430"/>
+ <source>DNSSEC validation passed</source>
+ <translation>validation DNSSEC réussie</translation>
+ </message>
+ <message>
+ <location filename="../src/common/dns_utils.cpp" line="434"/>
+ <source>WARNING: DNSSEC validation was unsuccessful, this address may not be correct!</source>
+ <translation>ATTENTION : validation DNSSEC échouée, cette adresse pourrait ne pas être correcte !</translation>
+ </message>
+ <message>
+ <location filename="../src/common/dns_utils.cpp" line="437"/>
+ <source>For URL: </source>
+ <translation>Pour l&apos;URL : </translation>
+ </message>
+ <message>
+ <location filename="../src/common/dns_utils.cpp" line="439"/>
+ <source> Monero Address = </source>
+ <translation> Adresse Monero = </translation>
+ </message>
+ <message>
+ <location filename="../src/common/dns_utils.cpp" line="441"/>
+ <source>Is this OK? (Y/n) </source>
+ <translation>Est-ce correct ? (Y/n) </translation>
+ </message>
+ <message>
+ <location filename="../src/common/dns_utils.cpp" line="451"/>
+ <source>you have cancelled the transfer request</source>
+ <translation>vous avez annulé la requête de transfert</translation>
+ </message>
+</context>
+<context>
+ <name>tools::wallet2</name>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="106"/>
+ <source>Use daemon instance at &lt;host&gt;:&lt;port&gt;</source>
+ <translation>Utiliser l&apos;instance de démon située à &lt;hôte&gt;:&lt;port&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="107"/>
+ <source>Use daemon instance at host &lt;arg&gt; instead of localhost</source>
+ <translation>Utiliser l&apos;instance de démon située à l&apos;hôte &lt;arg&gt; au lieu de localhost</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="460"/>
+ <source>Wallet password</source>
+ <translation>Mot de passe du portefeuille</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="109"/>
+ <source>Wallet password file</source>
+ <translation>Fichier mot de passe du portefeuille</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="110"/>
+ <source>Use daemon instance at port &lt;arg&gt; instead of 18081</source>
+ <translation>Utiliser l&apos;instance de démon située au port &lt;arg&gt; au lieu de 18081</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="112"/>
+ <source>For testnet. Daemon must also be launched with --testnet flag</source>
+ <translation>Pour testnet, le démon doit aussi être lancé avec l&apos;option --testnet</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="113"/>
+ <source>Restricts to view-only commands</source>
+ <translation>Restreindre aux commandes en lecture-seule</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="152"/>
+ <source>can&apos;t specify daemon host or port more than once</source>
+ <translation>impossible de spécifier l&apos;hôte ou le port du démon plus d&apos;une fois</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="188"/>
+ <source>can&apos;t specify more than one of --password and --password-file</source>
+ <translation>impossible de spécifier plus d&apos;une option parmis --password et --password-file</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="204"/>
+ <source>the password file specified could not be read</source>
+ <translation>le fichier mot de passe spécifié n&apos;a pas pu être lu</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="460"/>
+ <source>Enter new wallet password</source>
+ <translation>Entrez le mot de passe du portefeuille</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="464"/>
+ <source>failed to read wallet password</source>
+ <translation>échec de la lecture du mot de passe du portefeuille</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="227"/>
+ <source>Failed to load file </source>
+ <translation>Échec du chargement du fichier </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="108"/>
+ <source>Wallet password (escape/quote as needed)</source>
+ <translation>Mot de passe du portefeuille (échapper/citer si nécessaire)</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="111"/>
+ <source>Specify username[:password] for daemon RPC client</source>
+ <translation>Spécifier le nom_utilisateur:[mot_de_passe] pour le client RPC du démon</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="233"/>
+ <source>Failed to parse JSON</source>
+ <translation>Échec de l&apos;analyse JSON</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="240"/>
+ <source>Version %u too new, we can only grok up to %u</source>
+ <translation>Version %u trop récente, on comprend au mieux %u</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="258"/>
+ <source>failed to parse view key secret key</source>
+ <translation>échec de l&apos;analyse de la clé secrète d&apos;audit</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="264"/>
+ <location filename="../src/wallet/wallet2.cpp" line="331"/>
+ <location filename="../src/wallet/wallet2.cpp" line="373"/>
+ <source>failed to verify view key secret key</source>
+ <translation>échec de la vérification de la clé secrète d&apos;audit</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="276"/>
+ <source>failed to parse spend key secret key</source>
+ <translation>échec de l&apos;analyse de la clé secrète de dépense</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="282"/>
+ <location filename="../src/wallet/wallet2.cpp" line="343"/>
+ <location filename="../src/wallet/wallet2.cpp" line="394"/>
+ <source>failed to verify spend key secret key</source>
+ <translation>échec de la vérification de la clé secrète de dépense</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="295"/>
+ <source>Electrum-style word list failed verification</source>
+ <translation>Échec de la vérification de la liste de mots de style Electrum</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="306"/>
+ <source>At least one of Electrum-style word list and private view key must be specified</source>
+ <translation>Au moins une des listes de mots de style Electrum ou clé privée d&apos;audit doit être spécifiée</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="311"/>
+ <source>Both Electrum-style word list and private key(s) specified</source>
+ <translation>Liste de mots de style Electrum et clé privée spécifiées en même temps</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="324"/>
+ <source>invalid address</source>
+ <translation>adresse invalide</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="335"/>
+ <source>view key does not match standard address</source>
+ <translation>la clé d&apos;audit ne correspond pas à l&apos;adresse standard</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="347"/>
+ <source>spend key does not match standard address</source>
+ <translation>la clé de dépense ne correspond pas à l&apos;adresse standard</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="356"/>
+ <source>Cannot create deprecated wallets from JSON</source>
+ <translation>Impossible de créer un portefeuille obsolète à partir de JSON</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="403"/>
+ <source>failed to generate new wallet: </source>
+ <translation>échec de la génération du nouveau portefeuille : </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="5205"/>
+ <source>failed to read file </source>
+ <translation>échec de la lecture du fichier </translation>
+ </message>
+</context>
+<context>
+ <name>tools::wallet_rpc_server</name>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="151"/>
+ <source>Daemon is local, assuming trusted</source>
+ <translation>Le démon est local, supposons qu&apos;il est de confiance</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="171"/>
+ <source>Cannot specify --</source>
+ <translation>Impossible de spécifier --</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="171"/>
+ <source> and --</source>
+ <translation> et --</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="198"/>
+ <source>Failed to create file </source>
+ <translation>Échec de la création du fichier </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="198"/>
+ <source>. Check permissions or remove file</source>
+ <translation>. Vérifiez les permissions ou supprimez le fichier</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="209"/>
+ <source>Error writing to file </source>
+ <translation>Erreur d&apos;écriture dans le fichier </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="212"/>
+ <source>RPC username/password is stored in file </source>
+ <translation>nom_utilisateur/mot_de_passe RPC sauvegardé dans le fichier </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1748"/>
+ <source>Can&apos;t specify more than one of --wallet-file and --generate-from-json</source>
+ <translation>Impossible de spécifier plus d&apos;une option parmis --wallet-file et --generate-from-json</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1760"/>
+ <source>Must specify --wallet-file or --generate-from-json or --wallet-dir</source>
+ <translation>--wallet-file, --generate-from-json ou --wallet-dir doit être spécifié</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1764"/>
+ <source>Loading wallet...</source>
+ <translation>Chargement du portefeuille...</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1789"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1814"/>
+ <source>Storing wallet...</source>
+ <translation>Sauvegarde du portefeuille...</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1791"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1816"/>
+ <source>Stored ok</source>
+ <translation>Sauvegarde OK</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1794"/>
+ <source>Loaded ok</source>
+ <translation>Chargement OK</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1798"/>
+ <source>Wallet initialization failed: </source>
+ <translation>Échec de l&apos;initialisation du portefeuille : </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1805"/>
+ <source>Failed to initialize wallet rpc server</source>
+ <translation>Échec de l&apos;initialisation du serveur RPC du portefeuille</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1809"/>
+ <source>Starting wallet rpc server</source>
+ <translation>Démarrage du serveur RPC du portefeuille</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1811"/>
+ <source>Stopped wallet rpc server</source>
+ <translation>Arrêt du serveur RPC du portefeuille</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1820"/>
+ <source>Failed to store wallet: </source>
+ <translation>Échec de la sauvegarde du portefeuille : </translation>
+ </message>
+</context>
+<context>
+ <name>wallet_args</name>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1715"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4580"/>
+ <source>Wallet options</source>
+ <translation>Options du portefeuille</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_args.cpp" line="59"/>
+ <source>Generate wallet from JSON format file</source>
+ <translation>Générer un portefeuille à partir d&apos;un fichier au format JSON</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_args.cpp" line="63"/>
+ <source>Use wallet &lt;arg&gt;</source>
+ <translation>Utiliser le portefeuille &lt;arg&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_args.cpp" line="87"/>
+ <source>Max number of threads to use for a parallel job</source>
+ <translation>Nombre maximum de threads à utiliser pour les travaux en parallèle</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_args.cpp" line="88"/>
+ <source>Specify log file</source>
+ <translation>Spécifier le fichier journal</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_args.cpp" line="89"/>
+ <source>Config file</source>
+ <translation>Fichier de configuration</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_args.cpp" line="98"/>
+ <source>General options</source>
+ <translation>Options générales</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_args.cpp" line="128"/>
+ <source>Can&apos;t find config file </source>
+ <translation>Impossible de trouver le fichier de configuration </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_args.cpp" line="172"/>
+ <source>Logging to: </source>
+ <translation>Journalisation dans : </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_args.cpp" line="173"/>
+ <source>Logging to %s</source>
+ <translation>Journalisation dans %s</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_args.cpp" line="153"/>
+ <source>Usage:</source>
+ <translation>Usage :</translation>
+ </message>
+</context>
+</TS>
diff --git a/translations/monero_it.ts b/translations/monero_it.ts
new file mode 100644
index 000000000..c30413219
--- /dev/null
+++ b/translations/monero_it.ts
@@ -0,0 +1,2761 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="it" sourcelanguage="en">
+<context>
+ <name>Monero::AddressBookImpl</name>
+ <message>
+ <location filename="../src/wallet/api/address_book.cpp" line="55"/>
+ <source>Invalid destination address</source>
+ <translation>Indirizzo destinatario invalido</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/address_book.cpp" line="65"/>
+ <source>Invalid payment ID. Short payment ID should only be used in an integrated address</source>
+ <translation>ID pagamento invalido. Il pagamento id corto dovrebbe essere usato solo in un indirizzo integrato</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/address_book.cpp" line="72"/>
+ <source>Invalid payment ID</source>
+ <translation>ID pagamento invalido</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/address_book.cpp" line="79"/>
+ <source>Integrated address and long payment id can&apos;t be used at the same time</source>
+ <translation>Indirizzo integrato e ID pagamento lungo non possono essere usati nello stesso momento</translation>
+ </message>
+</context>
+<context>
+ <name>Monero::PendingTransactionImpl</name>
+ <message>
+ <location filename="../src/wallet/api/pending_transaction.cpp" line="90"/>
+ <source>Attempting to save transaction to file, but specified file(s) exist. Exiting to not risk overwriting. File:</source>
+ <translation>Sto tentando di salvare la transazione nel file, ma il file specificato esiste già. Sto uscendo per non rischiare di sovrascriverlo. File:</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/pending_transaction.cpp" line="97"/>
+ <source>Failed to write transaction(s) to file</source>
+ <translation>Impossibile scrivere transazione/i su file</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/pending_transaction.cpp" line="114"/>
+ <source>daemon is busy. Please try again later.</source>
+ <translation>Il daemon è impegnato. Prova più tardi.</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/pending_transaction.cpp" line="117"/>
+ <source>no connection to daemon. Please make sure daemon is running.</source>
+ <translation>Nessuna connessione con il daemon. Controlla che sia operativo.</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/pending_transaction.cpp" line="121"/>
+ <source>transaction %s was rejected by daemon with status: </source>
+ <translation>La transazione %s è stata respinta dal daemon con status: </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/pending_transaction.cpp" line="126"/>
+ <source>. Reason: </source>
+ <translation>Motivo: </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/pending_transaction.cpp" line="128"/>
+ <source>Unknown exception: </source>
+ <translation>Eccezione sconosciuta: </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/pending_transaction.cpp" line="131"/>
+ <source>Unhandled exception</source>
+ <translation>Eccezione non gestita</translation>
+ </message>
+</context>
+<context>
+ <name>Monero::UnsignedTransactionImpl</name>
+ <message>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="75"/>
+ <source>This is a watch only wallet</source>
+ <translation>Questo è un portafoglio solo-vista</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="85"/>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="92"/>
+ <source>Failed to sign transaction</source>
+ <translation>Firma transazione fallita</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="135"/>
+ <source>Claimed change does not go to a paid address</source>
+ <translation>Il cambiamento richiesto non porta a un indirizzo pagato</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="141"/>
+ <source>Claimed change is larger than payment to the change address</source>
+ <translation>Il cambiamento richiesto è più largo del pagamento all&apos;indirizzo di cambio</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="151"/>
+ <source>Change goes to more than one address</source>
+ <translation>Il cambiamento ha effetto su più di un in indirizzo</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="164"/>
+ <source>sending %s to %s</source>
+ <translation>Inviando %s a %s</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="170"/>
+ <source>with no destinations</source>
+ <translation>senza destinazioni</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="176"/>
+ <source>%s change to %s</source>
+ <translation>%s cambia in %s</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="179"/>
+ <source>no change</source>
+ <translation>nessun cambiamento</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/unsigned_transaction.cpp" line="181"/>
+ <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min mixin %lu. %s</source>
+ <translation>Caricato %lu transazioni, per %s, tassa %s, %s, %s, %s, con mixin %lu. %s</translation>
+ </message>
+</context>
+<context>
+ <name>Monero::WalletImpl</name>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="942"/>
+ <source>payment id has invalid format, expected 16 or 64 character hex string: </source>
+ <translation>L&apos;id pagamento è in un formato invalido, dovrebbe essere una stringa hex di 16 o 64 caratteri: </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="952"/>
+ <source>Failed to add short payment id: </source>
+ <translation>Impossibile aggiungere id pagamento corto</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="978"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1072"/>
+ <source>daemon is busy. Please try again later.</source>
+ <translation>il daemon è impegnato. Prova più tardi</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="981"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1075"/>
+ <source>no connection to daemon. Please make sure daemon is running.</source>
+ <translation>nessuna connessione con il daemon. Accertati che sia operativo</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="984"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1078"/>
+ <source>RPC error: </source>
+ <translation>errore RPC: </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1081"/>
+ <source>failed to get random outputs to mix</source>
+ <translation>Impossibile raccogliere outputs random da mixare</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="994"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1088"/>
+ <source>not enough money to transfer, available only %s, sent amount %s</source>
+ <translation>non hai abbastanza soldi da trasferire, sono disponibili solo %s, ammontare inviato %s</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="403"/>
+ <source>failed to parse address</source>
+ <translation>Analisi(parse) indirizzo fallita</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="415"/>
+ <source>failed to parse secret spend key</source>
+ <translation>Impossibile analizzare(parse) la chiave segreta spendibile</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="425"/>
+ <source>No view key supplied, cancelled</source>
+ <translation>Non è stata fornita nessuna chiave per visualizzazione</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="432"/>
+ <source>failed to parse secret view key</source>
+ <translation>Impossibile analizzare(parse) la chiave segreta per visualizzazione</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="442"/>
+ <source>failed to verify secret spend key</source>
+ <translation>impossibile verificare chiave segreta spendibile</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="447"/>
+ <source>spend key does not match address</source>
+ <translation>la chiave spendibile non corrisponde all&apos;indirizzo</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="453"/>
+ <source>failed to verify secret view key</source>
+ <translation>verifica chiave segreta per visualizzazione fallita</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="458"/>
+ <source>view key does not match address</source>
+ <translation>La chiave per visualizzazione non corrisponde all&apos;indirizzo</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="477"/>
+ <source>failed to generate new wallet: </source>
+ <translation>impossibile generare nuovo portafoglio: </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="799"/>
+ <source>Failed to load unsigned transactions</source>
+ <translation>Caricamento transazioni non firmate fallito</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="820"/>
+ <source>Failed to load transaction from file</source>
+ <translation>Caricamento transazione da file fallito</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="838"/>
+ <source>Wallet is view only</source>
+ <translation>Il portafoglio è di tipo solo visualizzazione</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="847"/>
+ <source>failed to save file </source>
+ <translation>impossibile salvare il file </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="874"/>
+ <source>Failed to import key images: </source>
+ <translation>Impossibile importare immagini chiave: </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="987"/>
+ <source>failed to get random outputs to mix: %s</source>
+ <translation>impossibile recuperare outputs casuali da mixare: %s</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1003"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1097"/>
+ <source>not enough money to transfer, available only %s, transaction amount %s = %s + %s (fee)</source>
+ <translation>Non hai abbastanza ssoldi da trasferire, disponibili solo %s, ammontare transazione %s = %s + %s (tassa)</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1012"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1106"/>
+ <source>not enough outputs for specified mixin_count</source>
+ <translation>outputs insufficienti per il numero di mixaggi specificato </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1014"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1108"/>
+ <source>output amount</source>
+ <translation>ammontare output</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1014"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1108"/>
+ <source>found outputs to mix</source>
+ <translation>trovati outputs da mixare</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1019"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1113"/>
+ <source>transaction was not constructed</source>
+ <translation>transazione non costruita</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1023"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1117"/>
+ <source>transaction %s was rejected by daemon with status: </source>
+ <translation>la transazione %s è stata rifiutata dal daemon con status: </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1030"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1124"/>
+ <source>one of destinations is zero</source>
+ <translation>una delle destinazioni è zero</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1033"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1127"/>
+ <source>failed to find a suitable way to split transactions</source>
+ <translation>impossibile trovare un modo per dividere le transazioni</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1036"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1130"/>
+ <source>unknown transfer error: </source>
+ <translation>errore trasferimento sconosciuto: </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1039"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1133"/>
+ <source>internal error: </source>
+ <translation>errore interno: </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1042"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1136"/>
+ <source>unexpected error: </source>
+ <translation>errore insaspettato: </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1045"/>
+ <location filename="../src/wallet/api/wallet.cpp" line="1139"/>
+ <source>unknown error</source>
+ <translation>errore sconosciuto</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="1419"/>
+ <source>Rescan spent can only be used with a trusted daemon</source>
+ <translation>&quot;riscannerizza spesi&quot; può essere utilizzato solo da un daemon fidato</translation>
+ </message>
+</context>
+<context>
+ <name>Monero::WalletManagerImpl</name>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="192"/>
+ <source>failed to parse txid</source>
+ <translation>analisi(parse) txid fallita</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="199"/>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="206"/>
+ <source>failed to parse tx key</source>
+ <translation>analisi(parse) chiave tx fallita</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="217"/>
+ <source>failed to parse address</source>
+ <translation>analisi(parse) indirizzo fallita</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="227"/>
+ <source>failed to get transaction from daemon</source>
+ <translation>impossibile recuperare transazione da daemon</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="238"/>
+ <source>failed to parse transaction from daemon</source>
+ <translation>impossibile analizzare(parse) transazione dal daemon</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="245"/>
+ <source>failed to validate transaction from daemon</source>
+ <translation>convalida transazione da daemon fallita</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="250"/>
+ <source>failed to get the right transaction from daemon</source>
+ <translation>Impossibile recuperare la giusta transazione dal daemon</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="257"/>
+ <source>failed to generate key derivation from supplied parameters</source>
+ <translation>impossibile generare derivazione chiave dai parametri forniti</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="313"/>
+ <source>error: </source>
+ <translation>errore: </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="319"/>
+ <source>received</source>
+ <translation>ricevuto</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="319"/>
+ <source>in txid</source>
+ <translation>in txid</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet_manager.cpp" line="323"/>
+ <source>received nothing in txid</source>
+ <translation>ricevuto nulla in txid</translation>
+ </message>
+</context>
+<context>
+ <name>Wallet</name>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="212"/>
+ <source>Failed to parse address</source>
+ <translation>Analisi(parse) indirizzo fallita</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="219"/>
+ <source>Failed to parse key</source>
+ <translation>Analisi(parse) key fallita</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="227"/>
+ <source>failed to verify key</source>
+ <translation>verifica key fallita</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/api/wallet.cpp" line="237"/>
+ <source>key does not match address</source>
+ <translation>la chiave non corrisponde all&apos;indirizzo</translation>
+ </message>
+</context>
+<context>
+ <name>command_line</name>
+ <message>
+ <location filename="../src/common/command_line.cpp" line="76"/>
+ <source>yes</source>
+ <translation>sì</translation>
+ </message>
+</context>
+<context>
+ <name>cryptonote::rpc_args</name>
+ <message>
+ <location filename="../src/rpc/rpc_args.cpp" line="38"/>
+ <source>Specify ip to bind rpc server</source>
+ <translation>Specificare ip da associare al server rpc</translation>
+ </message>
+ <message>
+ <location filename="../src/rpc/rpc_args.cpp" line="39"/>
+ <source>Specify username[:password] required for RPC server</source>
+ <translation>Specifica username[:password] richiesta per server RPC</translation>
+ </message>
+ <message>
+ <location filename="../src/rpc/rpc_args.cpp" line="40"/>
+ <source>Confirm rpc-bind-ip value is NOT a loopback (local) IP</source>
+ <translation>Conferma valore rpc-bind-ip NON è un loopback IP (locale)</translation>
+ </message>
+ <message>
+ <location filename="../src/rpc/rpc_args.cpp" line="66"/>
+ <source>Invalid IP address given for --</source>
+ <translation>Invalido indirizzo IP dato per --</translation>
+ </message>
+ <message>
+ <location filename="../src/rpc/rpc_args.cpp" line="74"/>
+ <source> permits inbound unencrypted external connections. Consider SSH tunnel or SSL proxy instead. Override with --</source>
+ <translation>permette connessioni esterne non criptate in entrata. Considera in alternativa un tunnel SSH o un proxy SSL. Sovrascrivi con --</translation>
+ </message>
+ <message>
+ <location filename="../src/rpc/rpc_args.cpp" line="89"/>
+ <source>Username specified with --</source>
+ <translation>Nome utente specificato con --</translation>
+ </message>
+ <message>
+ <location filename="../src/rpc/rpc_args.cpp" line="89"/>
+ <source> cannot be empty</source>
+ <translation> non puoò essere vuoto</translation>
+ </message>
+</context>
+<context>
+ <name>cryptonote::simple_wallet</name>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="290"/>
+ <source>Commands: </source>
+ <translation>Comandi: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1557"/>
+ <source>failed to read wallet password</source>
+ <translation>impossibile leggere password portafoglio</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1325"/>
+ <source>invalid password</source>
+ <translation>password non valida</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="697"/>
+ <source>start_mining [&lt;number_of_threads&gt;] - Start mining in daemon</source>
+ <translation>inizia a minare [&lt;number_of_threads&gt;] - Inizia a minare nel daemon</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="698"/>
+ <source>Stop mining in daemon</source>
+ <translation>interrompi mining nel daemon</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="699"/>
+ <source>Save current blockchain data</source>
+ <translation>Salva dati correnti blockchain</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="701"/>
+ <source>Show current wallet balance</source>
+ <translation>Mostra bilancio portafoglio attuale</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="704"/>
+ <source>Show blockchain height</source>
+ <translation>Mostra &quot;altezza&quot; blockchain</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="715"/>
+ <source>Show current wallet public address</source>
+ <translation>Mostra indirizzo pubblico del corrente portafoglio</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="744"/>
+ <source>Show this help</source>
+ <translation>Mostra questo aiuto</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="788"/>
+ <source>set seed: needs an argument. available options: language</source>
+ <translation>imposta seme: richiede una definizione. opzioni disponibili: lingua</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="811"/>
+ <source>set: unrecognized argument(s)</source>
+ <translation>imposta: definizione/i non riconosciuta/e</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1442"/>
+ <source>wallet file path not valid: </source>
+ <translation>percorso file portafoglio non valido: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="863"/>
+ <source>Attempting to generate or restore wallet, but specified file(s) exist. Exiting to not risk overwriting.</source>
+ <translation>Sto tentando di generare o ripristinare il portafoglio, ma i(l) file specificato/i esiste/esistono già. Sto uscendo per non rischiare di sovrascrivere.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="416"/>
+ <source>usage: payment_id</source>
+ <translation>uso: payment_id</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="710"/>
+ <source>sweep_below &lt;amount_threshold&gt; [mixin] address [payment_id] - Send all unlocked outputs below the threshold to an address</source>
+ <translation>sweep_below &lt;amount_threshold&gt; [mixin] address [payment_id] - Invia tutti gli outputs sbloccati sotto la soglia specificata a un indirizzo</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="727"/>
+ <source>Generate a signature to prove payment to &lt;address&gt; in &lt;txid&gt; using the transaction secret key (r) without revealing it</source>
+ <translation>Genera una firma per provare un pagamento a &lt;address&gt; in &lt;txid&gt; usando la chiave di transazione (r) senza rivelarla</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="728"/>
+ <source>Check tx proof for payment going to &lt;address&gt; in &lt;txid&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="743"/>
+ <source>Generate a new random full size payment id - these will be unencrypted on the blockchain, see integrated_address for encrypted short payment ids</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="774"/>
+ <source>needs an argument</source>
+ <translation>ha bisogno di un argomento</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="797"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="798"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="799"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="801"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="804"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="805"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="809"/>
+ <source>0 or 1</source>
+ <translation>0 o 1</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="800"/>
+ <source>integer &gt;= 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="803"/>
+ <source>0, 1, 2, 3, or 4</source>
+ <translation>0, 1, 2, 3, o 4</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="807"/>
+ <source>unsigned integer</source>
+ <translation>integrale non firmato</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="912"/>
+ <source>PLEASE NOTE: the following 25 words can be used to recover access to your wallet. Please write them down and store them somewhere safe and secure. Please do not store them in your email or on file storage services outside of your immediate control.
+</source>
+ <translation>ATTENZIONE: le seguenti 25 parole possono essere usate per ripristinare il tuo portafoglio. Scrivile e conservale da qualche parte al sicuro.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="973"/>
+ <source>specify a recovery parameter with the --electrum-seed=&quot;words list here&quot;</source>
+ <translation>Specificare un parametro di ripristino con --electrum-seed=&quot;lista parole qui&quot;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1261"/>
+ <source>wallet failed to connect to daemon: </source>
+ <translation>impossibile connettere portafoglio a daemon: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1269"/>
+ <source>Daemon uses a different RPC major version (%u) than the wallet (%u): %s. Either update one of them, or use --allow-mismatched-daemon-version.</source>
+ <translation>Il daemon usa una versione principale RPC (%u) diversa da quella del portafoglio (%u): %s. Aggiorna una delle due, o usa --allow-mismatched-daemon-version.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1288"/>
+ <source>List of available languages for your wallet&apos;s seed:</source>
+ <translation>Lista delle lingue disponibili per il seme del tuo portafoglio:</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1297"/>
+ <source>Enter the number corresponding to the language of your choice: </source>
+ <translation>Inserisci il numero corrispondente al linguaggio da te scelto: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1354"/>
+ <source>You had been using a deprecated version of the wallet. Please use the new seed that we provide.
+</source>
+ <translation>Hai usato una versione obsoleta del portafoglio. Per favore usa il nuovo seme che ti abbiamo fornito.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1368"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1425"/>
+ <source>Generated new wallet: </source>
+ <translation>Nuovo portafoglio generato: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1374"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1430"/>
+ <source>failed to generate new wallet: </source>
+ <translation>impossibile generare nuovo portafoglio: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1457"/>
+ <source>Opened watch-only wallet</source>
+ <translation>Portafoglio solo-vista aperto</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1457"/>
+ <source>Opened wallet</source>
+ <translation>Portafoglio aperto</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1466"/>
+ <source>You had been using a deprecated version of the wallet. Please proceed to upgrade your wallet.
+</source>
+ <translation>Stai utilizzando una versione disapprovata del portafoglio. Per favore procedi nell&apos;upgrade del portafoglio.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1481"/>
+ <source>You had been using a deprecated version of the wallet. Your wallet file format is being upgraded now.
+</source>
+ <translation>Stai utilizzando una versione disapprovata del portafoglio. Il formato del tuo portafoglio sta venendo aggiornato adesso.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1489"/>
+ <source>failed to load wallet: </source>
+ <translation>impossibile caricare portafoglio: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1497"/>
+ <source>Use &quot;help&quot; command to see the list of available commands.
+</source>
+ <translation>Usa il comando &quot;help&quot; per visualizzare la lista dei comandi disponibili.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1541"/>
+ <source>Wallet data saved</source>
+ <translation>Dati del portafoglio salvati</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1613"/>
+ <source>Mining started in daemon</source>
+ <translation>Mining partito nel daemon</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1615"/>
+ <source>mining has NOT been started: </source>
+ <translation>il mining NON è partito: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1634"/>
+ <source>Mining stopped in daemon</source>
+ <translation>Mining nel daemon interrotto</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1636"/>
+ <source>mining has NOT been stopped: </source>
+ <translation>Il mining NON è stato interrotto: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1655"/>
+ <source>Blockchain saved</source>
+ <translation>Blockchain salvata</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1670"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1687"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1699"/>
+ <source>Height </source>
+ <translation>Blocco </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1671"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1688"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1700"/>
+ <source>transaction </source>
+ <translation>transazione </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1672"/>
+ <source>received </source>
+ <translation>ricevuto/i </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1689"/>
+ <source>spent </source>
+ <translation>speso/i</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1701"/>
+ <source>unsupported transaction format</source>
+ <translation>formato transazione non supportato</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1718"/>
+ <source>Starting refresh...</source>
+ <translation>Iniziando refresh...</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1731"/>
+ <source>Refresh done, blocks received: </source>
+ <translation>Refresh finito, blocchi ricevuti: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2186"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2701"/>
+ <source>payment id has invalid format, expected 16 or 64 character hex string: </source>
+ <translation>l&apos;id pagamento ha un formato invalido, dovrebbe essere una stringa hex di 16 o 64 caratteri: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2201"/>
+ <source>bad locked_blocks parameter:</source>
+ <translation>parametro locked_blocks difettoso:</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2228"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2726"/>
+ <source>a single transaction cannot use more than one payment id: </source>
+ <translation>una singola transazione non può usare più di un id pagamento: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2237"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2735"/>
+ <source>failed to set up payment id, though it was decoded correctly</source>
+ <translation>impossibile impostare id pagamento, anche se è stato decodificado correttamente</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2262"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2355"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2533"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2749"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2794"/>
+ <source>transaction cancelled.</source>
+ <translation>transazione cancellata.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2323"/>
+ <source>Sending %s. </source>
+ <translation>Inviando %s. </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2326"/>
+ <source>Your transaction needs to be split into %llu transactions. This will result in a transaction fee being applied to each transaction, for a total fee of %s</source>
+ <translation>La tua transazione deve essere divisa in %llu transazioni. Una tassa verrà applicata per ogni transazione, per un totale di %s tasse</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2332"/>
+ <source>The transaction fee is %s</source>
+ <translation>la tassa per la transazione è %s</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2335"/>
+ <source>, of which %s is dust from change</source>
+ <translation>, della quale %s è polvere dovuta allo scambio</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2336"/>
+ <source>.</source>
+ <translation>.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2336"/>
+ <source>A total of %s from dust change will be sent to dust address</source>
+ <translation>Un totale di %s in polvere verrà inviato all&apos;indirizzo della polvere</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2341"/>
+ <source>.
+This transaction will unlock on block %llu, in approximately %s days (assuming 2 minutes per block)</source>
+ <translation>Questa transazione verrà sbloccata al blocco %llu, in approssimativamente %s giorni (supponendo 2 minuti per blocco)</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2367"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2544"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2805"/>
+ <source>Failed to write transaction(s) to file</source>
+ <translation>Impossibile scrivere transazione/i su file</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2371"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2548"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2809"/>
+ <source>Unsigned transaction(s) successfully written to file: </source>
+ <translation>Transazioni/e non firmata/e scritte/a con successo su file: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2406"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2583"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2844"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3157"/>
+ <source>Not enough money in unlocked balance</source>
+ <translation>Non hai abbastanza fondi nel bilancio sbloccato</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2415"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2592"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2853"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3166"/>
+ <source>Failed to find a way to create transactions. This is usually due to dust which is so small it cannot pay for itself in fees, or trying to send more money than the unlocked balance, or not leaving enough for fees</source>
+ <translation>Impossibile creare transazioni. Questo succede di solito perchè l&apos;ammontare di polvere è così piccolo da non poter pagare le proprie tasse, oppure stai provando a mandare più soldi di quelli che possiedi nel bilancio sbloccato, o non hai aggiunto abbastanza tasse</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2435"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2612"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2873"/>
+ <source>Reason: </source>
+ <translation>Motivo: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2447"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2624"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2885"/>
+ <source>failed to find a suitable way to split transactions</source>
+ <translation>Impossibile trovare un modo adatto per dividere le transazioni</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2503"/>
+ <source>No unmixable outputs found</source>
+ <translation>Nessun output non-mixabile trovato</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2709"/>
+ <source>No address given</source>
+ <translation>Non è stato fornito nessun indirizzo</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3008"/>
+ <source>Claimed change does not go to a paid address</source>
+ <translation>Il cambiamento richiesto non porta a un indirizzo pagato</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3013"/>
+ <source>Claimed change is larger than payment to the change address</source>
+ <translation>Il cambiamento richiesto è più largo del pagamento all&apos;indirizzo di cambio</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3035"/>
+ <source>sending %s to %s</source>
+ <translation>mandando %s a %s</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3041"/>
+ <source>with no destinations</source>
+ <translation>senza destinazioni</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3088"/>
+ <source>Failed to sign transaction</source>
+ <translation>Impossibile firmare transazione</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3094"/>
+ <source>Failed to sign transaction: </source>
+ <translation>Impossibile firmare transazione: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3120"/>
+ <source>Failed to load transaction from file</source>
+ <translation>caricamento transazione da file fallito</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3137"/>
+ <source>daemon is busy. Please try later</source>
+ <translation>il daemon è occupato. Prova più tardi</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1745"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1995"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2395"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2572"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2833"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3146"/>
+ <source>RPC error: </source>
+ <translation>errore RPC: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="312"/>
+ <source>wallet is watch-only and has no spend key</source>
+ <translation>il portafoglio è solo-vista e non ha una chiave spendibile</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="390"/>
+ <source>Your original password was incorrect.</source>
+ <translation>La tua password originale era scorretta</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="404"/>
+ <source>Error with wallet rewrite: </source>
+ <translation>Errore riscrittura wallet: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="513"/>
+ <source>priority must be 0, 1, 2, 3, or 4 </source>
+ <translation>la priorità deve essere 0, 1, 2, 3, or 4 </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="525"/>
+ <source>priority must be 0, 1, 2, 3,or 4</source>
+ <translation>la priorità deve essere 0, 1, 2, 3,or 4</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="540"/>
+ <source>priority must be 0, 1, 2 3,or 4</source>
+ <translation>la priorità deve essere 0, 1, 2 3, or 4</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="623"/>
+ <source>invalid unit</source>
+ <translation>unità invalida</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="641"/>
+ <source>invalid count: must be an unsigned integer</source>
+ <translation>conteggio invalido: deve essere un integrale non firmato</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="659"/>
+ <source>invalid value</source>
+ <translation>valore invalido</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="705"/>
+ <source>Same as transfer, but using an older transaction building algorithm</source>
+ <translation>Lo stesso di transfer, ma usando un vecchio algoritmo per costruire la transazione</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="709"/>
+ <source>sweep_all [mixin] address [payment_id] - Send all unlocked balance to an address</source>
+ <translation>sweep_all [mixin] address [payment_id] - Manda tutto il bilancio sbloccato ad un indirizzo</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="711"/>
+ <source>donate [&lt;mixin_count&gt;] &lt;amount&gt; [payment_id] - Donate &lt;amount&gt; to the development team (donate.getmonero.org)</source>
+ <translation>donate [&lt;mixin_count&gt;] &lt;amount&gt; [payment_id] - Dona &lt;amount&gt; al team di sviluppo (donate.getmonero.org)</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="714"/>
+ <source>set_log &lt;level&gt;|&lt;categories&gt; - Change current log detail (level must be &lt;0-4&gt;)</source>
+ <translation>set_log &lt;level&gt;|&lt;categories&gt; - Cambia livello dettaglio log (il livello deve essere &lt;0-4&gt;)</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="717"/>
+ <source>address_book [(add (&lt;address&gt; [pid &lt;long or short payment id&gt;])|&lt;integrated address&gt; [&lt;description possibly with whitespaces&gt;])|(delete &lt;index&gt;)] - Print all entries in the address book, optionally adding/deleting an entry to/from it</source>
+ <translation>address_book [(add (&lt;address&gt; [pid &lt;long or short payment id&gt;])|&lt;integrated address&gt; [&lt;description possibly with whitespaces&gt;])|(delete &lt;index&gt;)] - Mostra tutte le voci nella rubrica, hai l&apos;opzione di aggiungere/eliminare delle voci</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="729"/>
+ <source>show_transfers [in|out|pending|failed|pool] [&lt;min_height&gt; [&lt;max_height&gt;]] - Show incoming/outgoing transfers within an optional height range</source>
+ <translation>show_transfers [in|out|pending|failed|pool] [&lt;min_height&gt; [&lt;max_height&gt;]] - Mostra trasferimenti in entrata/uscita entro un altezza del blocco opzionale</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="741"/>
+ <source>Show information about a transfer to/from this address</source>
+ <translation>Mostra informazioni riguardo un trasferimento da/per questo indirizzo</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="742"/>
+ <source>Change wallet password</source>
+ <translation>Cambia password portafoglio</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="820"/>
+ <source>usage: set_log &lt;log_level_number_0-4&gt; | &lt;categories&gt;</source>
+ <translation>uso: set_log &lt;log_level_number_0-4&gt; | &lt;categories&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="886"/>
+ <source>(Y/Yes/N/No): </source>
+ <translation>(S/Sì/N/No): </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1157"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1184"/>
+ <source>bad m_restore_height parameter: </source>
+ <translation>parametro m_restore_height scorretto: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1162"/>
+ <source>date format must be YYYY-MM-DD</source>
+ <translation>il formato della data deve essere YYYY-MM-DD</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1175"/>
+ <source>Restore height is: </source>
+ <translation>ripristina altezza è: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1176"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2348"/>
+ <source>Is this okay? (Y/Yes/N/No): </source>
+ <translation>va bene? (S/Sì/N/No): </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1212"/>
+ <source>Daemon is local, assuming trusted</source>
+ <translation>Il daemon è locale, assunto per fidato</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1553"/>
+ <source>Password for new watch-only wallet</source>
+ <translation>Password per il nuovo portafoglio solo-vista</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1604"/>
+ <source>invalid arguments. Please use start_mining [&lt;number_of_threads&gt;] [do_bg_mining] [ignore_battery], &lt;number_of_threads&gt; should be from 1 to </source>
+ <translation>argomenti invalidi. Usa start_mining [&lt;number_of_threads&gt;] [do_bg_mining] [ignore_battery], &lt;number_of_threads&gt; dovrebbe risultare da 1 a </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1755"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2457"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2634"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2895"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3205"/>
+ <source>internal error: </source>
+ <translation>errore interno: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1760"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2000"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2462"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2639"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2900"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3210"/>
+ <source>unexpected error: </source>
+ <translation>errore inaspettato: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1765"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2005"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2467"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2644"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2905"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3215"/>
+ <source>unknown error</source>
+ <translation>errore sconosciuto</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1770"/>
+ <source>refresh failed: </source>
+ <translation>refresh fallito: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1770"/>
+ <source>Blocks received: </source>
+ <translation>Blocchi ricevuti: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1795"/>
+ <source>unlocked balance: </source>
+ <translation>bilancio sbloccato: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="808"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/>
+ <source>amount</source>
+ <translation>ammontare</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/>
+ <source>spent</source>
+ <translation>spesi</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/>
+ <source>global index</source>
+ <translation>indice globale</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/>
+ <source>tx id</source>
+ <translation>tx id</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1868"/>
+ <source>No incoming transfers</source>
+ <translation>nessun trasferimento in entrata</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1872"/>
+ <source>No incoming available transfers</source>
+ <translation>nessun trasferimento in entrata disponibile</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1876"/>
+ <source>No incoming unavailable transfers</source>
+ <translation>Nessun trasferimento indisponibile in entrata</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1887"/>
+ <source>expected at least one payment_id</source>
+ <translation>deve esserci almeno un payment_id</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/>
+ <source>payment</source>
+ <translation>pagamento</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/>
+ <source>transaction</source>
+ <translation>transazione</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/>
+ <source>height</source>
+ <translation>blocco</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/>
+ <source>unlock time</source>
+ <translation>tempo sbloccato</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1908"/>
+ <source>No payments with id </source>
+ <translation>nessun pagamento con id </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1960"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2026"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2280"/>
+ <source>failed to get blockchain height: </source>
+ <translation>impossibile recuperare dalla </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2016"/>
+ <source>failed to connect to the daemon</source>
+ <translation>impossibile connettersi al daemon</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2034"/>
+ <source>
+Transaction %llu/%llu: txid=%s</source>
+ <translation>Transazione %llu/%llu: txid=%s</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2044"/>
+ <source>
+Input %llu/%llu: amount=%s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2060"/>
+ <source>failed to get output: </source>
+ <translation>impossibile recuperare output: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2068"/>
+ <source>output key&apos;s originating block height shouldn&apos;t be higher than the blockchain height</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2072"/>
+ <source>
+Originating block heights: </source>
+ <translation>Originando blocchi: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2087"/>
+ <source>
+|</source>
+ <translation>
+|</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2087"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3915"/>
+ <source>|
+</source>
+ <translation>|
+</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2104"/>
+ <source>
+Warning: Some input keys being spent are from </source>
+ <translation>Avvertimento: alcune chiavi di input spese vengono da </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2106"/>
+ <source>, which can break the anonymity of ring signature. Make sure this is intentional!</source>
+ <translation>, che potrebbe rempere l&apos;anonimità delle firme ad anello. Assicurati di farlo intenzionalmente!</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2152"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2937"/>
+ <source>wrong number of arguments</source>
+ <translation>errato numero di argomenti</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2257"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2744"/>
+ <source>No payment id is included with this transaction. Is this okay? (Y/Yes/N/No): </source>
+ <translation>Nessun id pagamento incluso in questa transazione. Questo è corretto? (S/Sì/N/No): </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2298"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2762"/>
+ <source>No outputs found, or daemon is not ready</source>
+ <translation>Nessun output trovato, o il daemon non è pronto</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2399"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2576"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2837"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3150"/>
+ <source>failed to get random outputs to mix: </source>
+ <translation>impossibile recuperare output casuali da mixare: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2518"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2779"/>
+ <source>Sweeping %s in %llu transactions for a total fee of %s. Is this okay? (Y/Yes/N/No): </source>
+ <translation>Eseguendo lo sweep di %s nelle transazioni %llu per un totale di tasse di %s. Va bene? (S/Sì/N/No): </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2524"/>
+ <source>Sweeping %s for a total fee of %s. Is this okay? (Y/Yes/N/No): </source>
+ <translation>Eseguendo lo sweep di %s per un totale di tasse di %s. Va bene? (S/Sì/N/No): </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2969"/>
+ <source>Donating </source>
+ <translation>Donando </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3053"/>
+ <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min mixin %lu. %sIs this okay? (Y/Yes/N/No): </source>
+ <translation>Caricate %lu transazioni, per %s, tasse %s, %s, %s, con mixaggio %lu. %sQuesto è corretto? (S/Sì/N/No): </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3077"/>
+ <source>This is a watch only wallet</source>
+ <translation>questo è un portafoglio solo-vista</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4443"/>
+ <source>usage: show_transfer &lt;txid&gt;</source>
+ <translation>uso: show_transfer &lt;txid&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4557"/>
+ <source>Transaction ID not found</source>
+ <translation>ID transazione non trovato</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="237"/>
+ <source>true</source>
+ <translation>vero</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="266"/>
+ <source>failed to parse refresh type</source>
+ <translation>impossibile analizzare (parse) tipo di refresh</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="330"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="362"/>
+ <source>wallet is watch-only and has no seed</source>
+ <translation>il portafoglio è solo-vista e non possiede un seme</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="353"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="367"/>
+ <source>wallet is non-deterministic and has no seed</source>
+ <translation>il portafoglio è non-deterministico e non possiede un seme</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="450"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="467"/>
+ <source>wallet is watch-only and cannot transfer</source>
+ <translation>il portafoglio è solo-vista e non può eseguire trasferimenti</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="474"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="480"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="496"/>
+ <source>mixin must be an integer &gt;= 2</source>
+ <translation>mixin deve essere un integrale &gt;= 2</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="501"/>
+ <source>could not change default mixin</source>
+ <translation>impossibile cambiare mixxaggio standard</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="545"/>
+ <source>could not change default priority</source>
+ <translation>impossibile cambiare priorità standard</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="700"/>
+ <source>Synchronize transactions and balance</source>
+ <translation>Sincronizzare transazioni e bilancio</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="702"/>
+ <source>incoming_transfers [available|unavailable] - Show incoming transfers, all or filtered by availability</source>
+ <translation>incoming_transfers [available|unavailable] - Mostra trasferimenti in entrata, tutti o filtrati per disponibilità</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="703"/>
+ <source>payments &lt;PID_1&gt; [&lt;PID_2&gt; ... &lt;PID_N&gt;] - Show payments for given payment ID[s]</source>
+ <translation>payments &lt;PID_1&gt; [&lt;PID_2&gt; ... &lt;PID_N&gt;] - Mostra pagamenti per gli/l&apos; ID fornito/i</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="706"/>
+ <source>transfer [&lt;priority&gt;] [&lt;mixin_count&gt;] &lt;address&gt; &lt;amount&gt; [&lt;payment_id&gt;] - Transfer &lt;amount&gt; to &lt;address&gt;. &lt;priority&gt; is the priority of the transaction. The higher the priority, the higher the fee of the transaction. Valid values in priority order (from lowest to highest) are: unimportant, normal, elevated, priority. If omitted, the default value (see the command &quot;set priority&quot;) is used. &lt;mixin_count&gt; is the number of extra inputs to include for untraceability. Multiple payments can be made at once by adding &lt;address_2&gt; &lt;amount_2&gt; etcetera (before the payment ID, if it&apos;s included)</source>
+ <translation>transfer [&lt;priority&gt;] [&lt;mixin_count&gt;] &lt;address&gt; &lt;amount&gt; [&lt;payment_id&gt;] - Transfer &lt;amount&gt; to &lt;address&gt;. &lt;priority&gt; è la priorità della transazione. Maggiore è la priorità, maggiori saranno le tasse per la transazione. Valori validi in ordini di priorità (dal più basso al più alto) sono:unimportant, normal, elevated, priority. se omesso, verrà usato il valore standard (vedi il comando &quot;set priority&quot;). &lt;mixin_count&gt; è il numero di inputs extra da inludere per intracciabilità. Puoi eseguire pagamenti multipli in una volta aggiungendo &lt;address_2&gt; &lt;amount_2&gt; etcetera (prima dell&apos; ID pagamento, se incluso)</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="707"/>
+ <source>locked_transfer [&lt;mixin_count&gt;] &lt;addr&gt; &lt;amount&gt; &lt;lockblocks&gt;(Number of blocks to lock the transaction for, max 1000000) [&lt;payment_id&gt;]</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="708"/>
+ <source>Send all unmixable outputs to yourself with mixin 0</source>
+ <translation>Manda tutti gli outputs non spendibili a te stesso con mixaggio 0</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="712"/>
+ <source>Sign a transaction from a file</source>
+ <translation>Firma una transazione da file</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="713"/>
+ <source>Submit a signed transaction from a file</source>
+ <translation>Invia una transazione dirmata da file</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="716"/>
+ <source>integrated_address [PID] - Encode a payment ID into an integrated address for the current wallet public address (no argument uses a random payment ID), or decode an integrated address to standard address and payment ID</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="718"/>
+ <source>Save wallet data</source>
+ <translation>Salva i dati del portafoglio</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="719"/>
+ <source>Save a watch-only keys file</source>
+ <translation>Salva una chiave solo-vista</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="720"/>
+ <source>Display private view key</source>
+ <translation>Visualizza chiave di visualizzazione privata</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="721"/>
+ <source>Display private spend key</source>
+ <translation>Visualizza chiave privata spendibile</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="722"/>
+ <source>Display Electrum-style mnemonic seed</source>
+ <translation>Visualizza il seme mnemonico in stile Electrum</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="723"/>
+ <source>Available options: seed language - set wallet seed language; always-confirm-transfers &lt;1|0&gt; - whether to confirm unsplit txes; print-ring-members &lt;1|0&gt; - whether to print detailed information about ring members during confirmation; store-tx-info &lt;1|0&gt; - whether to store outgoing tx info (destination address, payment ID, tx secret key) for future reference; default-mixin &lt;n&gt; - set default mixin (default is 4); auto-refresh &lt;1|0&gt; - whether to automatically sync new blocks from the daemon; refresh-type &lt;full|optimize-coinbase|no-coinbase|default&gt; - set wallet refresh behaviour; priority [0|1|2|3|4] - default/unimportant/normal/elevated/priority fee; confirm-missing-payment-id &lt;1|0&gt;; ask-password &lt;1|0&gt;; unit &lt;monero|millinero|micronero|nanonero|piconero&gt; - set default monero (sub-)unit; min-outputs-count [n] - try to keep at least that many outputs of value at least min-outputs-value; min-outputs-value [n] - try to keep at least min-outputs-count outputs of at least that value; merge-destinations &lt;1|0&gt; - whether to merge multiple payments to the same destination address</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="724"/>
+ <source>Rescan blockchain for spent outputs</source>
+ <translation>Riscannerizza blockchain in cerca di outputs non spesi</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="725"/>
+ <source>Get transaction key (r) for a given &lt;txid&gt;</source>
+ <translation>Ricevi una chiave transazione (r) per ogni &lt;txid&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="726"/>
+ <source>Check amount going to &lt;address&gt; in &lt;txid&gt;</source>
+ <translation>Controlla l&apos;ammontare che va da &lt;address&gt; a &lt;txid&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="730"/>
+ <source>unspent_outputs [&lt;min_amount&gt; &lt;max_amount&gt;] - Show unspent outputs within an optional amount range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="731"/>
+ <source>Rescan blockchain from scratch</source>
+ <translation>Riscannerizza blockchain dal principio</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="732"/>
+ <source>Set an arbitrary string note for a txid</source>
+ <translation>Imposta una stringa arbitraria per un txid</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="733"/>
+ <source>Get a string note for a txid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="734"/>
+ <source>Show wallet status information</source>
+ <translation>Visualizza informazioni sulla stato del portafoglio</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="735"/>
+ <source>Sign the contents of a file</source>
+ <translation>Firma il contenuto di un file</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="736"/>
+ <source>Verify a signature on the contents of a file</source>
+ <translation>Verifica firma sul contesto del file</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="737"/>
+ <source>Export a signed set of key images</source>
+ <translation>Esporta un set di chiavi firmate</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="738"/>
+ <source>Import signed key images list and verify their spent status</source>
+ <translation>Importa immagine firmata della lista chiavi e verifica lo status degli spesi</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="739"/>
+ <source>Export a set of outputs owned by this wallet</source>
+ <translation>Esporta un set di outputs posseduti da questo portafoglio</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="740"/>
+ <source>Import set of outputs owned by this wallet</source>
+ <translation>Importa un set di outputs posseduti da questo portafoglio</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="802"/>
+ <source>full (slowest, no assumptions); optimize-coinbase (fast, assumes the whole coinbase is paid to a single address); no-coinbase (fastest, assumes we receive no coinbase transaction), default (same as optimize-coinbase)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="806"/>
+ <source>monero, millinero, micronero, nanonero, piconero</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="851"/>
+ <source>Wallet name not valid. Please try again or use Ctrl-C to quit.</source>
+ <translation>Nome del portafoglio non valido. Prova di nuovo o usa Ctrl-C per uscire</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="868"/>
+ <source>Wallet and key files found, loading...</source>
+ <translation>Portafoglio e chiavi trovatr, sto caricando...</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="874"/>
+ <source>Key file found but not wallet file. Regenerating...</source>
+ <translation>Ho trovato la chiave ma non il portafoglio. Rigenerando...</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="880"/>
+ <source>Key file not found. Failed to open wallet: </source>
+ <translation>Chiave non trovata. Impossibile aprire portafoglio: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="894"/>
+ <source>Generating new wallet...</source>
+ <translation>Sto generando un nuovo portafoglio...</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="937"/>
+ <source>can&apos;t specify more than one of --generate-new-wallet=&quot;wallet_name&quot;, --wallet-file=&quot;wallet_name&quot;, --generate-from-view-key=&quot;wallet_name&quot;, --generate-from-json=&quot;jsonfilename&quot; and --generate-from-keys=&quot;wallet_name&quot;</source>
+ <translation>non puoi specificare più di un --generate-new-wallet=&quot;wallet_name&quot;, --wallet-file=&quot;wallet_name&quot;, --generate-from-view-key=&quot;wallet_name&quot;, --generate-from-json=&quot;jsonfilename&quot; e --generate-from-keys=&quot;wallet_name&quot;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="953"/>
+ <source>can&apos;t specify both --restore-deterministic-wallet and --non-deterministic</source>
+ <translation>impossibile specificare sia --restore-deterministic-wallet che --non-deterministic</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="958"/>
+ <source>--restore-deterministic-wallet uses --generate-new-wallet, not --wallet-file</source>
+ <translation>--restore-deterministic-wallet usa --generate-new-wallet, non --wallet-file</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="982"/>
+ <source>Electrum-style word list failed verification</source>
+ <translation>La lista di parole stile Electrum ha fallito la verifica</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="994"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1011"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1046"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1063"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1079"/>
+ <source>No data supplied, cancelled</source>
+ <translation>Nessun dato fornito, cancellato</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1002"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1054"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2220"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2718"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3276"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3378"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3530"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4048"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4239"/>
+ <source>failed to parse address</source>
+ <translation>impossibile analizzare(parse) indirizzo</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1017"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1085"/>
+ <source>failed to parse view key secret key</source>
+ <translation>impossibile analizzare(parse) chiave per visualizzazione chiave segreta</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1027"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1103"/>
+ <source>failed to verify view key secret key</source>
+ <translation>impossibile verificare chiave segreta vista</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1031"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1107"/>
+ <source>view key does not match standard address</source>
+ <translation>la chiave per visualizzazione non corrisponde all&apos;indirizzo standard</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1036"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1111"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1128"/>
+ <source>account creation failed</source>
+ <translation>creazione dell&apos;account fallita</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1069"/>
+ <source>failed to parse spend key secret key</source>
+ <translation>impossibile analizzare (parse) chiave spendibile chiave segreta</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1095"/>
+ <source>failed to verify spend key secret key</source>
+ <translation>impossibile verificare chiave spendibile chiave segreta</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1099"/>
+ <source>spend key does not match standard address</source>
+ <translation>la chiave spendibile non corrisponde all&apos;indirizzo standard</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1123"/>
+ <source>specify a wallet path with --generate-new-wallet (not --wallet-file)</source>
+ <translation>specifica un nuovo percorso per il portafoglio con --generate-new-wallet (non --wallet-file)</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1199"/>
+ <source>failed to open account</source>
+ <translation>impossibile aprire account</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1203"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1579"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1626"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1647"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3348"/>
+ <source>wallet is null</source>
+ <translation>il portafoglio è nullo</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1262"/>
+ <source>Daemon either is not started or wrong port was passed. Please make sure daemon is running or restart the wallet with the correct daemon address.</source>
+ <translation>Il daemon non è partito o è settato con la porta sbagliata. Assicurati che il daemon stia funzionando o fai ripartire il wallet con l&apos;indirizzo corretto del daemon</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1306"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1311"/>
+ <source>invalid language choice passed. Please try again.
+</source>
+ <translation>linguaggio selezionato scorretto. Prova di nuovo.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1370"/>
+ <source>View key: </source>
+ <translation>Chiave per visualizzazione: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1385"/>
+ <source>Your wallet has been generated!
+To start synchronizing with the daemon, use &quot;refresh&quot; command.
+Use &quot;help&quot; command to see the list of available commands.
+Always use &quot;exit&quot; command when closing monero-wallet-cli to save your
+current session&apos;s state. Otherwise, you might need to synchronize
+your wallet again (your wallet keys are NOT at risk in any case).
+</source>
+ <translation>Il tuo portafoglio è stato generato!
+Per iniziare a sincronizzarlo con il daemon, usa il comando &quot;refresh&quot;.
+Usa il comando &quot;help&quot; per vedere la lista dei comandi disponibili.
+Usa sempre il comando &quot;exit&quot; quando chiudi monero-wallet-cli per salvare
+lo stato della tua sessione &apos;s corrente. Altrimenti potresti dover sincronizzare
+di nuovo il tuo portafoglio (le chiavi del tuo portafoglio NON sono a rischio in sessun caso).</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1492"/>
+ <source>You may want to remove the file &quot;%s&quot; and try again</source>
+ <translation>Potresti voler rimuovere il file &quot;%s&quot; e provare di nuovo</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1518"/>
+ <source>failed to deinitialize wallet</source>
+ <translation>deinizializzazione portafoglio fallita</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1570"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1968"/>
+ <source>this command requires a trusted daemon. Enable with --trusted-daemon</source>
+ <translation>questo comando richiede un daemon fidato. Abilita questa opzione con --trusted-daemon</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1657"/>
+ <source>blockchain can&apos;t be saved: </source>
+ <translation>impossibile salvare blockchain: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1736"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1982"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2386"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2563"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2824"/>
+ <source>daemon is busy. Please try again later.</source>
+ <translation>il daemon è impegnato. Prova più tardi</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1740"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1986"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2390"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2567"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2828"/>
+ <source>no connection to daemon. Please make sure daemon is running.</source>
+ <translation>nessuna connessione con il daemon. Assicurati che sia in funzione</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1750"/>
+ <source>refresh error: </source>
+ <translation>refresh errore: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1794"/>
+ <source>Balance: </source>
+ <translation>Bilancio: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1845"/>
+ <source>pubkey</source>
+ <translation>pubkey</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1845"/>
+ <source>key image</source>
+ <translation>immagine chiave</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1856"/>
+ <source>unlocked</source>
+ <translation>sbloccato</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/>
+ <source>ringct</source>
+ <translation>ringct</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1855"/>
+ <source>T</source>
+ <translation>T</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1855"/>
+ <source>F</source>
+ <translation>F</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1856"/>
+ <source>locked</source>
+ <translation>bloccato</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1857"/>
+ <source>RingCT</source>
+ <translation>RingCT</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1857"/>
+ <source>-</source>
+ <translation>-</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1929"/>
+ <source>payment ID has invalid format, expected 16 or 64 character hex string: </source>
+ <translation>l&apos;id pagamento è in un formato invalido, dovrebbe essere una stringa hex di 16 o 64 caratteri</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="1990"/>
+ <source>failed to get spent status</source>
+ <translation>impossibile recuperare status spesi</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2105"/>
+ <source>the same transaction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2105"/>
+ <source>blocks that are temporally very close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2206"/>
+ <source>Locked blocks too high, max 1000000 (˜4 yrs)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2921"/>
+ <source>missing amount threshold</source>
+ <translation>manca la soglia massima dell&apos;ammontare</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2926"/>
+ <source>invalid amount threshold</source>
+ <translation>ammontare soglia invalido</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3022"/>
+ <source>Change goes to more than one address</source>
+ <translation>Il cambiamento va a più di un indirizzo</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3258"/>
+ <source>usage: get_tx_proof &lt;txid&gt; &lt;dest_address&gt; [&lt;tx_key&gt;]</source>
+ <translation>uso: get_tx_proof &lt;txid&gt; &lt;dest_address&gt; [&lt;tx_key&gt;]</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3289"/>
+ <source>failed to parse tx_key</source>
+ <translation>impossibile analizzare (parse) tx_key</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3298"/>
+ <source>Tx secret key was found for the given txid, but you&apos;ve also provided another tx secret key which doesn&apos;t match the found one.</source>
+ <translation>Una chiave tx segreta è stata trovata per il txid fornito, ma hai anche fornito un&apos;altra chiave segreta tx che non corrsisponde a quella trovata.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3306"/>
+ <source>Tx secret key wasn&apos;t found in the wallet file. Provide it as the optional third parameter if you have it elsewhere.</source>
+ <translation>Chiave segreta tx non trovata nel file del portafoglio. Forniscila come terzo parametro opzionale se la conservi da qualche altra parte.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3330"/>
+ <source>Signature: </source>
+ <translation>Firma: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3508"/>
+ <source>usage: check_tx_proof &lt;txid&gt; &lt;address&gt; &lt;signature&gt;</source>
+ <translation>uso: check_tx_proof &lt;txid&gt; &lt;address&gt; &lt;signature&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3539"/>
+ <source>Signature header check error</source>
+ <translation>errore controllo firma intestazione</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3550"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3555"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3560"/>
+ <source>Signature decoding error</source>
+ <translation>Errore decodificazione firma</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3602"/>
+ <source>Tx pubkey was not found</source>
+ <translation>Chiave pubblica tx non trovata</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3609"/>
+ <source>Good signature</source>
+ <translation>Firma valida</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3613"/>
+ <source>Bad signature</source>
+ <translation>Firma invalida</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3621"/>
+ <source>failed to generate key derivation</source>
+ <translation>generazione derivazione chiave fallita</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3994"/>
+ <source>usage: integrated_address [payment ID]</source>
+ <translation>uso: integrated_address [ID pagamento]</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4017"/>
+ <source>Integrated address: account %s, payment ID %s</source>
+ <translation>Indirizzo integrato: account %s, ID pagamento %s</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4022"/>
+ <source>Standard address: </source>
+ <translation>Indirizzo standard: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4027"/>
+ <source>failed to parse payment ID or address</source>
+ <translation>impossibile analizzare (parse) ID pagamento o indirizzo</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4038"/>
+ <source>usage: address_book [(add (&lt;address&gt; [pid &lt;long or short payment id&gt;])|&lt;integrated address&gt; [&lt;description possibly with whitespaces&gt;])|(delete &lt;index&gt;)]</source>
+ <translation>uso: address_book [(add (&lt;address&gt; [pid &lt;long or short payment id&gt;])|&lt;integrated address&gt; [&lt;description possibly with whitespaces&gt;])|(delete &lt;index&gt;)]</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4070"/>
+ <source>failed to parse payment ID</source>
+ <translation>impossibile analizzare (parse) ID pagamento</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4088"/>
+ <source>failed to parse index</source>
+ <translation>impossibile analizzare (parse) indice</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4096"/>
+ <source>Address book is empty.</source>
+ <translation>La rubrica è vuota.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4102"/>
+ <source>Index: </source>
+ <translation>Indice: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4103"/>
+ <source>Address: </source>
+ <translation>Indirizzo: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4104"/>
+ <source>Payment ID: </source>
+ <translation>ID Pagamento: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4105"/>
+ <source>Description: </source>
+ <translation>Descrizione: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4115"/>
+ <source>usage: set_tx_note [txid] free text note</source>
+ <translation>uso: set_tx_note [txid] free text note</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4143"/>
+ <source>usage: get_tx_note [txid]</source>
+ <translation>uso: get_tx_note [txid]</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4193"/>
+ <source>usage: sign &lt;filename&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4198"/>
+ <source>wallet is watch-only and cannot sign</source>
+ <translation>il portafoglio è solo-vista e non può firmare</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4207"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4230"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4374"/>
+ <source>failed to read file </source>
+ <translation>impossibile leggere file </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4219"/>
+ <source>usage: verify &lt;filename&gt; &lt;address&gt; &lt;signature&gt;</source>
+ <translation>uso: verify &lt;filename&gt; &lt;address&gt; &lt;signature&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4246"/>
+ <source>Bad signature from </source>
+ <translation>Firma invalida da </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4250"/>
+ <source>Good signature from </source>
+ <translation>Firma valida da </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4259"/>
+ <source>usage: export_key_images &lt;filename&gt;</source>
+ <translation>uso: export_key_images &lt;filename&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4264"/>
+ <source>wallet is watch-only and cannot export key images</source>
+ <translation>il portafoglio è solo-vista e non può esportare immagini chiave</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4274"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4346"/>
+ <source>failed to save file </source>
+ <translation>impossibile salvare file </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4285"/>
+ <source>Signed key images exported to </source>
+ <translation>Chiave immagine firmata esportata in </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4293"/>
+ <source>usage: import_key_images &lt;filename&gt;</source>
+ <translation>uso: import_key_images &lt;filename&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4323"/>
+ <source>usage: export_outputs &lt;filename&gt;</source>
+ <translation>usage: export_outputs &lt;filename&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4357"/>
+ <source>Outputs exported to </source>
+ <translation>Outputs esportati in </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4365"/>
+ <source>usage: import_outputs &lt;filename&gt;</source>
+ <translation>uso: import_outputs &lt;filename&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2246"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3818"/>
+ <source>amount is wrong: </source>
+ <translation>l&apos;ammontare è scorretto: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2247"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3819"/>
+ <source>expected number from 0 to </source>
+ <translation>deve essere un numero da 0 a </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2378"/>
+ <source>Money successfully sent, transaction </source>
+ <translation>Fondi inviati con successo, transazione </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3141"/>
+ <source>no connection to daemon. Please, make sure daemon is running.</source>
+ <translation>nessuna connessione con il daemon, assicurati che stia funzionando.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2420"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2597"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2858"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3171"/>
+ <source>not enough outputs for specified mixin_count</source>
+ <translation>non ci sono abbastanza output per lo specificato mixin_count</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2423"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2600"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2861"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3174"/>
+ <source>output amount</source>
+ <translation>ammontare output</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2423"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2600"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2861"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3174"/>
+ <source>found outputs to mix</source>
+ <translation>trovati outputs da mixare</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2428"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2605"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2866"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3179"/>
+ <source>transaction was not constructed</source>
+ <translation>la transazione non è stata costruita</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2432"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2609"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2870"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3183"/>
+ <source>transaction %s was rejected by daemon with status: </source>
+ <translation>la transazione %s è stata respinta dal daemon con status: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2443"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2620"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2881"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3191"/>
+ <source>one of destinations is zero</source>
+ <translation>una delle destinazioni è zero</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3195"/>
+ <source>Failed to find a suitable way to split transactions</source>
+ <translation>Impossibile trovare un modo corretto per dividere transazioni</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2452"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2629"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2890"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3200"/>
+ <source>unknown transfer error: </source>
+ <translation>errore trasferimento sconosciuto: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2516"/>
+ <source>Sweeping </source>
+ <translation>Pulendo (sweeping) </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2785"/>
+ <source>Sweeping %s for a total fee of %s. Is this okay? (Y/Yes/N/No)</source>
+ <translation>Eseguendo lo sweeping di %s per un totale di tasse di %s. Va bene? (S/Sì/N/No)</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2555"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="2816"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3129"/>
+ <source>Money successfully sent, transaction: </source>
+ <translation>Soldi inviati con successo, transazione: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3047"/>
+ <source>%s change to %s</source>
+ <translation>%s cambia in %s</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3050"/>
+ <source>no change</source>
+ <translation>nessun cambiamento</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3105"/>
+ <source>Transaction successfully signed to file </source>
+ <translation>Transazione firmata con successo nel file </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3226"/>
+ <source>usage: get_tx_key &lt;txid&gt;</source>
+ <translation>uso: get_tx_key &lt;txid&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3234"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3266"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3354"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3519"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4122"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4150"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4450"/>
+ <source>failed to parse txid</source>
+ <translation>analisi(parse) txid fallita</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3245"/>
+ <source>Tx key: </source>
+ <translation>Chiave Tx: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3250"/>
+ <source>no tx keys found for this txid</source>
+ <translation>nessuna chiave tx trovata per questo txid</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3339"/>
+ <source>usage: check_tx_key &lt;txid&gt; &lt;txkey&gt; &lt;address&gt;</source>
+ <translation>uso: check_tx_key &lt;txid&gt; &lt;txkey&gt; &lt;address&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3361"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3368"/>
+ <source>failed to parse tx key</source>
+ <translation>impossibile analizzare (parse) chiave tx</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3573"/>
+ <source>failed to get transaction from daemon</source>
+ <translation>impossibil recuperare transazione dal daemon</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3411"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3584"/>
+ <source>failed to parse transaction from daemon</source>
+ <translation>impossibile analizzare (parse) la transazione dal daemon</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3418"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3591"/>
+ <source>failed to validate transaction from daemon</source>
+ <translation>convalida transazione dal daemon fallita</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3423"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3596"/>
+ <source>failed to get the right transaction from daemon</source>
+ <translation>impossibile recuperare la corretta transazione dal daemon</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3385"/>
+ <source>failed to generate key derivation from supplied parameters</source>
+ <translation>impossibile generare chiave derivazione dai parametri forniti</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3471"/>
+ <source>error: </source>
+ <translation>errore: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3477"/>
+ <source>received</source>
+ <translation>ricevuto/i</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3477"/>
+ <source>in txid</source>
+ <translation>in txid</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3481"/>
+ <source>received nothing in txid</source>
+ <translation>ricevuto niente in txid</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3485"/>
+ <source>WARNING: this transaction is not yet included in the blockchain!</source>
+ <translation>AVVERTIMENTO: questa transazione non è ancora inclusa nella blockchain!</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3494"/>
+ <source>This transaction has %u confirmations</source>
+ <translation>Questa transazione ha %u conferme</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3498"/>
+ <source>WARNING: failed to determine number of confirmations!</source>
+ <translation>AVVERTIMENTO: impossibile determinare numero di conferme!</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3661"/>
+ <source>usage: show_transfers [in|out|all|pending|failed] [&lt;min_height&gt; [&lt;max_height&gt;]]</source>
+ <translation>uso: show_transfers [in|out|all|pending|failed] [&lt;min_height&gt; [&lt;max_height&gt;]]</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3700"/>
+ <source>bad min_height parameter:</source>
+ <translation>parametro min_height scorretto:</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3712"/>
+ <source>bad max_height parameter:</source>
+ <translation>parametro max_height scorretto:</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3760"/>
+ <source>in</source>
+ <translation>in</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3760"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3798"/>
+ <source>out</source>
+ <translation>out</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3798"/>
+ <source>failed</source>
+ <translation>fallito</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3798"/>
+ <source>pending</source>
+ <translation>in attesa</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3809"/>
+ <source>usage: unspent_outputs [&lt;min_amount&gt; &lt;max_amount&gt;]</source>
+ <translation>uso: unspent_outputs [&lt;min_amount&gt; &lt;max_amount&gt;]</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3824"/>
+ <source>&lt;min_amount&gt; should be smaller than &lt;max_amount&gt;</source>
+ <translation>&lt;min_amount&gt; dovrebbe essere più piccolo di &lt;max_amount&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3856"/>
+ <source>
+Amount: </source>
+ <translation>Ammontare: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3856"/>
+ <source>, number of keys: </source>
+ <translation>, numero di chiavi: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3861"/>
+ <source> </source>
+ <translation> </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3866"/>
+ <source>
+Min block height: </source>
+ <translation>Altezza minima blocco: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3867"/>
+ <source>
+Max block height: </source>
+ <translation>Altezza massima blocco: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3868"/>
+ <source>
+Min amount found: </source>
+ <translation>Ammontare minimo trovato: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3869"/>
+ <source>
+Max amount found: </source>
+ <translation>Ammontare massimo trovato: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3870"/>
+ <source>
+Total count: </source>
+ <translation>Conto totale: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3910"/>
+ <source>
+Bin size: </source>
+ <translation>Dimensione Bin</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3911"/>
+ <source>
+Outputs per *: </source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3913"/>
+ <source>count
+ ^
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3915"/>
+ <source> |</source>
+ <translation> |</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3917"/>
+ <source> +</source>
+ <translation> +</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3917"/>
+ <source>+--&gt; block height
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3918"/>
+ <source> ^</source>
+ <translation> ^</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3918"/>
+ <source>^
+</source>
+ <translation>^
+</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3919"/>
+ <source> </source>
+ <translation> </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="3969"/>
+ <source>wallet</source>
+ <translation>portafoglio</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="420"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4000"/>
+ <source>Random payment ID: </source>
+ <translation>ID pagamento casuale: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4001"/>
+ <source>Matching integrated address: </source>
+ <translation>Indirizzo integrato corrispondente: </translation>
+ </message>
+</context>
+<context>
+ <name>sw</name>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="116"/>
+ <source>Generate new wallet and save it to &lt;arg&gt;</source>
+ <translation>Genera un nuovo portafoglio e salvalo in &lt;arg&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="117"/>
+ <source>Generate incoming-only wallet from view key</source>
+ <translation>Genera un portafoglio solo-ricezione da chiave per visualizzazione</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="118"/>
+ <source>Generate wallet from private keys</source>
+ <translation>Genera portafoglio da chiavi private</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="120"/>
+ <source>Specify Electrum seed for wallet recovery/creation</source>
+ <translation>Specifica il seme stile Electrum per recuperare/creare il portafoglio</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="121"/>
+ <source>Recover wallet using Electrum-style mnemonic seed</source>
+ <translation>Recupera portafoglio usando il seme mnemonico stile-Electrum</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="122"/>
+ <source>Create non-deterministic view and spend keys</source>
+ <translation>Crea chiavi per visualizzione e chiavi spendibili non-deterministiche</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="123"/>
+ <source>Enable commands which rely on a trusted daemon</source>
+ <translation>Abilita comandi dipendenti da un daemon fidato</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="124"/>
+ <source>Allow communicating with a daemon that uses a different RPC version</source>
+ <translation>Permetti comunicazioni con un daemon che usa una versione RPC differente</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="125"/>
+ <source>Restore from specific blockchain height</source>
+ <translation>Ripristina da specifico blocco</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="136"/>
+ <source>daemon is busy. Please try again later.</source>
+ <translation>il daemon è occupato. Prova più tardi.</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="145"/>
+ <source>possibly lost connection to daemon</source>
+ <translation>possibile perdita di connessione con il daemon</translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="226"/>
+ <source>Error: </source>
+ <translation>Errore: </translation>
+ </message>
+ <message>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4614"/>
+ <source>Failed to initialize wallet</source>
+ <translation>Inizializzazione wallet fallita</translation>
+ </message>
+</context>
+<context>
+ <name>tools::dns_utils</name>
+ <message>
+ <location filename="../src/common/dns_utils.cpp" line="430"/>
+ <source>DNSSEC validation passed</source>
+ <translation>Convalida DNSSEC passata</translation>
+ </message>
+ <message>
+ <location filename="../src/common/dns_utils.cpp" line="434"/>
+ <source>WARNING: DNSSEC validation was unsuccessful, this address may not be correct!</source>
+ <translation>AVVERTIMENTO: convalida DNSSEC fallita, questo indirizzo potrebbe non essere corretto!</translation>
+ </message>
+ <message>
+ <location filename="../src/common/dns_utils.cpp" line="437"/>
+ <source>For URL: </source>
+ <translation>Per URL: </translation>
+ </message>
+ <message>
+ <location filename="../src/common/dns_utils.cpp" line="439"/>
+ <source> Monero Address = </source>
+ <translation>Indirizzo Monero = </translation>
+ </message>
+ <message>
+ <location filename="../src/common/dns_utils.cpp" line="441"/>
+ <source>Is this OK? (Y/n) </source>
+ <translation>Va bene? (S/n) </translation>
+ </message>
+ <message>
+ <location filename="../src/common/dns_utils.cpp" line="451"/>
+ <source>you have cancelled the transfer request</source>
+ <translation>hai cancelliato la richiesta di transferimento</translation>
+ </message>
+</context>
+<context>
+ <name>tools::wallet2</name>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="106"/>
+ <source>Use daemon instance at &lt;host&gt;:&lt;port&gt;</source>
+ <translation>Usa instanza daemon in &lt;host&gt;:&lt;port&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="107"/>
+ <source>Use daemon instance at host &lt;arg&gt; instead of localhost</source>
+ <translation>Usa istanza daemon all&apos;host &lt;arg&gt; invece che localhost</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="460"/>
+ <source>Wallet password</source>
+ <translation>Password portafoglio</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="109"/>
+ <source>Wallet password file</source>
+ <translation>File password portafoglio</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="110"/>
+ <source>Use daemon instance at port &lt;arg&gt; instead of 18081</source>
+ <translation>Usa istanza daemon alla porta &lt;arg&gt; invece che alla 18081</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="112"/>
+ <source>For testnet. Daemon must also be launched with --testnet flag</source>
+ <translation>Per testnet. Il Daemon può anche essere lanciato con la flag --testnet</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="113"/>
+ <source>Restricts to view-only commands</source>
+ <translation>Restringi i comandi a solo-vista</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="152"/>
+ <source>can&apos;t specify daemon host or port more than once</source>
+ <translation>non puoi specificare la porta o l&apos;host del daemon più di una volta</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="188"/>
+ <source>can&apos;t specify more than one of --password and --password-file</source>
+ <translation>non puoi specificare più di un --password e --password-file</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="204"/>
+ <source>the password file specified could not be read</source>
+ <translation>il file password specificato non può essere letto</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="460"/>
+ <source>Enter new wallet password</source>
+ <translation>Inserisci una nuova password per il portafoglio</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="464"/>
+ <source>failed to read wallet password</source>
+ <translation>impossibile leggere password portafoglio</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="227"/>
+ <source>Failed to load file </source>
+ <translation>Impossibile caricare file </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="108"/>
+ <source>Wallet password (escape/quote as needed)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="111"/>
+ <source>Specify username[:password] for daemon RPC client</source>
+ <translation>Specificare username[:password] per client del daemon RPC</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="233"/>
+ <source>Failed to parse JSON</source>
+ <translation>Impossibile analizzare (parse) JSON</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="240"/>
+ <source>Version %u too new, we can only grok up to %u</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="258"/>
+ <source>failed to parse view key secret key</source>
+ <translation>impossibile analizzare (parse) chiave per visualizzazione chiave segreta</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="264"/>
+ <location filename="../src/wallet/wallet2.cpp" line="331"/>
+ <location filename="../src/wallet/wallet2.cpp" line="373"/>
+ <source>failed to verify view key secret key</source>
+ <translation>impossibile verificare chiave per visualizzazione chiave segreta</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="276"/>
+ <source>failed to parse spend key secret key</source>
+ <translation>impossibile analizzare (parse) chiave spendibile chiave segreta</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="282"/>
+ <location filename="../src/wallet/wallet2.cpp" line="343"/>
+ <location filename="../src/wallet/wallet2.cpp" line="394"/>
+ <source>failed to verify spend key secret key</source>
+ <translation>impossibile verificare chiave spendibile chiave segreta</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="295"/>
+ <source>Electrum-style word list failed verification</source>
+ <translation>verifica lista di parole stile-Electrum fallita</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="306"/>
+ <source>At least one of Electrum-style word list and private view key must be specified</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="311"/>
+ <source>Both Electrum-style word list and private key(s) specified</source>
+ <translation>Specificate entrambe lista parole stile-Electrum e chiave/i privata/e </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="324"/>
+ <source>invalid address</source>
+ <translation>indirizzo invalido</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="335"/>
+ <source>view key does not match standard address</source>
+ <translation>la chiave per visualizzazione non corrisponde all&apos;indirizzo standard</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="347"/>
+ <source>spend key does not match standard address</source>
+ <translation>la chiave spendibile non corrisponde all&apos;indirizzo standard</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="356"/>
+ <source>Cannot create deprecated wallets from JSON</source>
+ <translation>Impossibile creare portafogli disapprovati da JSON</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="403"/>
+ <source>failed to generate new wallet: </source>
+ <translation>impossibile generare nuovo portafoglio: </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet2.cpp" line="5205"/>
+ <source>failed to read file </source>
+ <translation>lettura file fallita</translation>
+ </message>
+</context>
+<context>
+ <name>tools::wallet_rpc_server</name>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="151"/>
+ <source>Daemon is local, assuming trusted</source>
+ <translation>Il daemon è locale, assunto per fidato</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="171"/>
+ <source>Cannot specify --</source>
+ <translation>Impossibile specificare --</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="171"/>
+ <source> and --</source>
+ <translation> e --</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="198"/>
+ <source>Failed to create file </source>
+ <translation>Impossibile creare file </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="198"/>
+ <source>. Check permissions or remove file</source>
+ <translation>. Controlla permessi o rimuovi il file</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="209"/>
+ <source>Error writing to file </source>
+ <translation>Errore durante scrittura su file </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="212"/>
+ <source>RPC username/password is stored in file </source>
+ <translation>Username/password RPC conservate nel file </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1748"/>
+ <source>Can&apos;t specify more than one of --wallet-file and --generate-from-json</source>
+ <translation>Non puoi specificare più di un --wallet-file e --generate-from-json</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1760"/>
+ <source>Must specify --wallet-file or --generate-from-json or --wallet-dir</source>
+ <translation>Devi specificare --wallet-file o --generate-from-json o --wallet-dir</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1764"/>
+ <source>Loading wallet...</source>
+ <translation>Caricando il portafoglio...</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1789"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1814"/>
+ <source>Storing wallet...</source>
+ <translation>Conservando il portafoglio...</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1791"/>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1816"/>
+ <source>Stored ok</source>
+ <translation>Conservato con successo</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1794"/>
+ <source>Loaded ok</source>
+ <translation>Caricato con successo</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1798"/>
+ <source>Wallet initialization failed: </source>
+ <translation>Inizializzazione portafoglio fallita: </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1805"/>
+ <source>Failed to initialize wallet rpc server</source>
+ <translation>Inizializzazione server rpc portafoglio fallita</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1809"/>
+ <source>Starting wallet rpc server</source>
+ <translation>Server RPC portafoglio in partenza</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1811"/>
+ <source>Stopped wallet rpc server</source>
+ <translation>Server RPC portafoglio arrestato</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1820"/>
+ <source>Failed to store wallet: </source>
+ <translation>Impossibile conservare portafoglio: </translation>
+ </message>
+</context>
+<context>
+ <name>wallet_args</name>
+ <message>
+ <location filename="../src/wallet/wallet_rpc_server.cpp" line="1715"/>
+ <location filename="../src/simplewallet/simplewallet.cpp" line="4580"/>
+ <source>Wallet options</source>
+ <translation>Opzioni portafoglio</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_args.cpp" line="59"/>
+ <source>Generate wallet from JSON format file</source>
+ <translation>Genera portafoglio da file JSON</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_args.cpp" line="63"/>
+ <source>Use wallet &lt;arg&gt;</source>
+ <translation>Usa portafoglio &lt;arg&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_args.cpp" line="87"/>
+ <source>Max number of threads to use for a parallel job</source>
+ <translation>Numero massimo di threads da utilizzare per un lavoro parallelo</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_args.cpp" line="88"/>
+ <source>Specify log file</source>
+ <translation>Specificare log file</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_args.cpp" line="89"/>
+ <source>Config file</source>
+ <translation>File configurazione</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_args.cpp" line="98"/>
+ <source>General options</source>
+ <translation>Opzioni generali</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_args.cpp" line="128"/>
+ <source>Can&apos;t find config file </source>
+ <translation>Impossibile trovare file configurazione </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_args.cpp" line="172"/>
+ <source>Logging to: </source>
+ <translation>Loggando in: </translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_args.cpp" line="173"/>
+ <source>Logging to %s</source>
+ <translation>Loggando in %s</translation>
+ </message>
+ <message>
+ <location filename="../src/wallet/wallet_args.cpp" line="153"/>
+ <source>Usage:</source>
+ <translation>Uso:</translation>
+ </message>
+</context>
+</TS>
diff --git a/utils/systemd/monerod.service b/utils/systemd/monerod.service
index 182878ebb..12395eb8c 100644
--- a/utils/systemd/monerod.service
+++ b/utils/systemd/monerod.service
@@ -8,15 +8,10 @@ Group=monero
WorkingDirectory=~
Type=forking
-ExecStart=/usr/bin/monerod --config-file /etc/monerod.conf --detach
+PIDFile=/var/run/monerod.pid
-# This is necessary because monerod does not yet support
-# writing a PID file, which means systemd tries to guess the PID
-# by default, but it guesses wrong (sometimes, depending on
-# random timing of events), because the daemon forks twice.
-# The ultimate fix is for the daemon to write a PID file, and
-# a workaround is to disable the guessing feature in systemd.
-GuessMainPID=no
+ExecStart=/usr/bin/monerod --config-file /etc/monerod.conf \
+ --detach --pidfile /var/run/monerod.pid
[Install]
WantedBy=multi-user.target