diff options
141 files changed, 12962 insertions, 8646 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 543e58eca..c19c9dba7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -878,6 +878,7 @@ set(OLD_LIB_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) if(STATIC) if(MINGW) set(CMAKE_FIND_LIBRARY_SUFFIXES .a) + set(Boost_NO_BOOST_CMAKE ON) endif() set(Boost_USE_STATIC_LIBS ON) @@ -1028,3 +1029,5 @@ option(INSTALL_VENDORED_LIBUNBOUND "Install libunbound binary built from source CHECK_C_COMPILER_FLAG(-std=c11 HAVE_C11) + +find_package(PythonInterp) @@ -30,10 +30,10 @@ Our researchers are available on IRC in [#monero-research-lab on Freenode](https - You can subscribe to an [announcement listserv](https://lists.getmonero.org) to get critical announcements from the Monero core team. The announcement list can be very helpful for knowing when software updates are needed. ## Translations -The CLI wallet is available in different languages. If you want to help translate it, join Pootle, our self-hosted localization platform: [translate.getmonero.org](https://translate.getmonero.org). Every translation *must* be uploaded on Pootle, pull requests directly editing the code on this repository will be closed. +The CLI wallet is available in different languages. If you want to help translate it, see our self-hosted localization platform, Pootle, on [translate.getmonero.org](https://translate.getmonero.org/projects/CLI/). Every translation *must* be uploaded on the platform, pull requests directly editing the code in this repository will be closed. If you need help with Pootle, you can find a guide with screenshots [here](https://github.com/monero-ecosystem/monero-translations/blob/master/pootle.md). -If you need help/support/info, contact the localization workgroup. You can do so in various ways: by email (translate[at]getmonero[dot]org), on the official chat (#monero-translations). A complete list of contacts can be found on the repository of the workgroup: [monero-ecosystem/monero-translations](https://github.com/monero-ecosystem/monero-translations#contacts). +If you need help/support/info about translations, contact the localization workgroup. You can find the complete list of contacts on the repository of the workgroup: [monero-translations](https://github.com/monero-ecosystem/monero-translations#contacts). ## Build @@ -127,8 +127,9 @@ Dates are provided in the format YYYY-MM-DD. | 1546000 | 2018-04-06 | v7 | v0.12.0.0 | v0.12.3.0 | Cryptonight variant 1, ringsize >= 7, sorted inputs | 1685555 | 2018-10-18 | v8 | v0.13.0.0 | v0.13.0.4 | max transaction size at half the penalty free block size, bulletproofs enabled, cryptonight variant 2, fixed ringsize [11](https://youtu.be/KOO5S4vxi0o) | 1686275 | 2018-10-19 | v9 | v0.13.0.0 | v0.13.0.4 | bulletproofs required -| 1788000 | 2019-03-09 | v10 | v0.14.0.0 | v0.14.0.2 | Cryptonight-R PoW, new block weight algorithm, slightly more efficient RingCT format +| 1788000 | 2019-03-09 | v10 | v0.14.0.0 | v0.14.0.2 | New PoW based on Cryptonight-R, new block weight algorithm, slightly more efficient RingCT format | 1788720 | 2019-03-10 | v11 | v0.14.0.0 | v0.14.0.2 | forbid old RingCT transaction format +| XXXXXXX | 2019-10-XX | XX | XXXXXXXXX | XXXXXXXXX | X X's indicate that these details have not been determined as of commit date. @@ -175,9 +176,13 @@ library archives (`.a`). build the library binary manually. This can be done with the following command ```sudo apt-get install libgtest-dev && cd /usr/src/gtest && sudo cmake . && sudo make && sudo mv libg* /usr/lib/ ``` [2] libnorm-dev is needed if your zmq library was built with libnorm, and not needed otherwise -Debian / Ubuntu one liner for all dependencies +Install all dependencies at once on Debian/Ubuntu: + ``` sudo apt update && sudo apt install build-essential cmake pkg-config libboost-all-dev libssl-dev libzmq3-dev libunbound-dev libsodium-dev libunwind8-dev liblzma-dev libreadline6-dev libldns-dev libexpat1-dev doxygen graphviz libpgm-dev``` +Install all dependencies at once on macOS with the provided Brewfile: +``` brew update && brew bundle --file=contrib/brew/Brewfile ``` + FreeBSD one liner for required to build dependencies ```pkg install git gmake cmake pkgconf boost-libs cppzmq libsodium``` @@ -363,7 +368,7 @@ application. cd monero -* If you would like a specific [version/tag](https://github.com/monero-project/monero/tags), do a git checkout for that version. eg. 'v0.14.1.0'. If you dont care about the version and just want binaries from master, skip this step: +* If you would like a specific [version/tag](https://github.com/monero-project/monero/tags), do a git checkout for that version. eg. 'v0.14.1.0'. If you don't care about the version and just want binaries from master, skip this step: git checkout v0.14.1.0 @@ -671,7 +676,7 @@ allow inbound connections. Full example: ## Debugging -This section contains general instructions for debugging failed installs or problems encountered with Monero. First ensure you are running the latest version built from the Github repo. +This section contains general instructions for debugging failed installs or problems encountered with Monero. First, ensure you are running the latest version built from the Github repo. ### Obtaining stack traces and core dumps on Unix systems diff --git a/cmake/FindBacktrace.cmake b/cmake/FindBacktrace.cmake new file mode 100644 index 000000000..89bbad07c --- /dev/null +++ b/cmake/FindBacktrace.cmake @@ -0,0 +1,90 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#.rst: +# FindBacktrace +# ------------- +# +# Find provider for backtrace(3). +# +# Checks if OS supports backtrace(3) via either libc or custom library. +# This module defines the following variables: +# +# ``Backtrace_HEADER`` +# The header file needed for backtrace(3). Cached. +# Could be forcibly set by user. +# ``Backtrace_INCLUDE_DIRS`` +# The include directories needed to use backtrace(3) header. +# ``Backtrace_LIBRARIES`` +# The libraries (linker flags) needed to use backtrace(3), if any. +# ``Backtrace_FOUND`` +# Is set if and only if backtrace(3) support detected. +# +# The following cache variables are also available to set or use: +# +# ``Backtrace_LIBRARY`` +# The external library providing backtrace, if any. +# ``Backtrace_INCLUDE_DIR`` +# The directory holding the backtrace(3) header. +# +# Typical usage is to generate of header file using configure_file() with the +# contents like the following:: +# +# #cmakedefine01 Backtrace_FOUND +# #if Backtrace_FOUND +# # include <${Backtrace_HEADER}> +# #endif +# +# And then reference that generated header file in actual source. + +include(CMakePushCheckState) +include(CheckSymbolExists) +include(FindPackageHandleStandardArgs) + +# List of variables to be provided to find_package_handle_standard_args() +set(_Backtrace_STD_ARGS Backtrace_INCLUDE_DIR) + +if(Backtrace_HEADER) + set(_Backtrace_HEADER_TRY "${Backtrace_HEADER}") +else(Backtrace_HEADER) + set(_Backtrace_HEADER_TRY "execinfo.h") +endif(Backtrace_HEADER) + +find_path(Backtrace_INCLUDE_DIR "${_Backtrace_HEADER_TRY}") +set(Backtrace_INCLUDE_DIRS ${Backtrace_INCLUDE_DIR}) + +if (NOT DEFINED Backtrace_LIBRARY) + # First, check if we already have backtrace(), e.g., in libc + cmake_push_check_state(RESET) + set(CMAKE_REQUIRED_INCLUDES ${Backtrace_INCLUDE_DIRS}) + set(CMAKE_REQUIRED_QUIET ${Backtrace_FIND_QUIETLY}) + check_symbol_exists("backtrace" "${_Backtrace_HEADER_TRY}" _Backtrace_SYM_FOUND) + cmake_pop_check_state() +endif() + +if(_Backtrace_SYM_FOUND) + # Avoid repeating the message() call below each time CMake is run. + if(NOT Backtrace_FIND_QUIETLY AND NOT DEFINED Backtrace_LIBRARY) + message(STATUS "backtrace facility detected in default set of libraries") + endif() + set(Backtrace_LIBRARY "" CACHE FILEPATH "Library providing backtrace(3), empty for default set of libraries") +else() + # Check for external library, for non-glibc systems + if(Backtrace_INCLUDE_DIR) + # OpenBSD has libbacktrace renamed to libexecinfo + find_library(Backtrace_LIBRARY "execinfo") + elseif() # respect user wishes + set(_Backtrace_HEADER_TRY "backtrace.h") + find_path(Backtrace_INCLUDE_DIR ${_Backtrace_HEADER_TRY}) + find_library(Backtrace_LIBRARY "backtrace") + endif() + + # Prepend list with library path as it's more common practice + set(_Backtrace_STD_ARGS Backtrace_LIBRARY ${_Backtrace_STD_ARGS}) +endif() + +set(Backtrace_LIBRARIES ${Backtrace_LIBRARY}) +set(Backtrace_HEADER "${_Backtrace_HEADER_TRY}" CACHE STRING "Header providing backtrace(3) facility") + +find_package_handle_standard_args(Backtrace FOUND_VAR Backtrace_FOUND REQUIRED_VARS ${_Backtrace_STD_ARGS}) +mark_as_advanced(Backtrace_HEADER Backtrace_INCLUDE_DIR Backtrace_LIBRARY) diff --git a/cmake/FindLibUSB.cmake b/cmake/FindLibUSB.cmake index 7e3bf156e..c7e09d4c0 100644 --- a/cmake/FindLibUSB.cmake +++ b/cmake/FindLibUSB.cmake @@ -99,9 +99,18 @@ if ( LibUSB_FOUND ) check_library_exists ( "${LibUSB_LIBRARIES}" libusb_get_device_list "" LibUSB_VERSION_1.0 ) check_library_exists ( "${LibUSB_LIBRARIES}" libusb_get_port_numbers "" LibUSB_VERSION_1.0.16 ) + if((STATIC AND UNIX AND NOT APPLE) OR (DEPENDS AND CMAKE_SYSTEM_NAME STREQUAL "Linux")) + find_library(LIBUDEV_LIBRARY udev) + if(LIBUDEV_LIBRARY) + set(LibUSB_LIBRARIES "${LibUSB_LIBRARIES};${LIBUDEV_LIBRARY}") + else() + message(WARNING "libudev library not found, binaries may fail to link.") + endif() + endif() + # Library 1.0.16+ compilation test. # The check_library_exists does not work well on Apple with shared libs. - if (APPLE OR LibUSB_VERSION_1.0.16) + if (APPLE OR LibUSB_VERSION_1.0.16 OR STATIC) if (APPLE) if(DEPENDS) list(APPEND TEST_COMPILE_EXTRA_LIBRARIES "-framework Foundation -framework IOKit") diff --git a/contrib/brew/Brewfile b/contrib/brew/Brewfile new file mode 100644 index 000000000..1fdf45cfe --- /dev/null +++ b/contrib/brew/Brewfile @@ -0,0 +1,34 @@ +# Brewfile for Monero +# A homebrew Brewfile installs all required dependencies in one shot +# see https://coderwall.com/p/afmnbq/homebrew-s-new-feature-brewfiles +# https://github.com/Homebrew/homebrew-bundle +# execute brew bundle in the directory containing the Brewfile + +tap "homebrew/bundle" +tap "homebrew/cask" +tap "homebrew/cask-versions" +tap "homebrew/core" + +brew "autoconf" +brew "autogen" +brew "automake" +brew "binutils" +brew "coreutils" +brew "cmake" +brew "pkg-config" +brew "boost" +brew "openssl" +brew "hidapi" +brew "zmq" +brew "libpgm" +brew "unbound" +brew "libsodium" +brew "miniupnpc" +brew "readline" +brew "ldns" +brew "expat" +brew "doxygen" +brew "graphviz" +brew "libunwind-headers" +brew "xz" +brew "protobuf" diff --git a/contrib/epee/include/math_helper.h b/contrib/epee/include/math_helper.h index 35b649972..ddc1f7f4b 100644 --- a/contrib/epee/include/math_helper.h +++ b/contrib/epee/include/math_helper.h @@ -32,7 +32,7 @@ #include <list> #include <numeric> -#include <boost/timer.hpp> +#include <boost/timer/timer.hpp> #include <boost/uuid/uuid.hpp> #include <boost/uuid/random_generator.hpp> diff --git a/contrib/epee/include/net/abstract_tcp_server2.h b/contrib/epee/include/net/abstract_tcp_server2.h index ec08c0f4b..374a28a2e 100644 --- a/contrib/epee/include/net/abstract_tcp_server2.h +++ b/contrib/epee/include/net/abstract_tcp_server2.h @@ -90,28 +90,27 @@ namespace net_utils public: typedef typename t_protocol_handler::connection_context t_connection_context; - struct shared_state : socket_stats + struct shared_state : connection_basic_shared_state { shared_state() - : socket_stats(), pfilter(nullptr), config() + : connection_basic_shared_state(), pfilter(nullptr), config(), stop_signal_sent(false) {} i_connection_filter* pfilter; typename t_protocol_handler::config_type config; + bool stop_signal_sent; }; /// Construct a connection with the given io_service. explicit connection( boost::asio::io_service& io_service, boost::shared_ptr<shared_state> state, t_connection_type connection_type, - epee::net_utils::ssl_support_t ssl_support, - ssl_context_t &ssl_context); + epee::net_utils::ssl_support_t ssl_support); explicit connection( boost::asio::ip::tcp::socket&& sock, boost::shared_ptr<shared_state> state, t_connection_type connection_type, - epee::net_utils::ssl_support_t ssl_support, - ssl_context_t &ssl_context); + epee::net_utils::ssl_support_t ssl_support); @@ -228,8 +227,8 @@ namespace net_utils std::map<std::string, t_connection_type> server_type_map; void create_server_type_map(); - bool init_server(uint32_t port, const std::string address = "0.0.0.0", epee::net_utils::ssl_support_t ssl_support = epee::net_utils::ssl_support_t::e_ssl_support_autodetect, const std::pair<std::string, std::string> &private_key_and_certificate_path = std::make_pair(std::string(), std::string()), const std::list<std::string> &allowed_certificates = {}, const std::vector<std::vector<uint8_t>> &allowed_fingerprints = {}, bool allow_any_cert = false); - bool init_server(const std::string port, const std::string& address = "0.0.0.0", epee::net_utils::ssl_support_t ssl_support = epee::net_utils::ssl_support_t::e_ssl_support_autodetect, const std::pair<std::string, std::string> &private_key_and_certificate_path = std::make_pair(std::string(), std::string()), const std::list<std::string> &allowed_certificates = {}, const std::vector<std::vector<uint8_t>> &allowed_fingerprints = {}, bool allow_any_cert = false); + bool init_server(uint32_t port, const std::string address = "0.0.0.0", ssl_options_t ssl_options = ssl_support_t::e_ssl_support_autodetect); + bool init_server(const std::string port, const std::string& address = "0.0.0.0", ssl_options_t ssl_options = ssl_support_t::e_ssl_support_autodetect); /// Run the server's io_service loop. bool run_server(size_t threads_count, bool wait = true, const boost::thread::attributes& attrs = boost::thread::attributes()); @@ -380,10 +379,6 @@ namespace net_utils boost::mutex connections_mutex; std::set<connection_ptr> connections_; - - ssl_context_t m_ssl_context; - std::list<std::string> m_allowed_certificates; - }; // class <>boosted_tcp_server diff --git a/contrib/epee/include/net/abstract_tcp_server2.inl b/contrib/epee/include/net/abstract_tcp_server2.inl index 67c63cca5..821594355 100644 --- a/contrib/epee/include/net/abstract_tcp_server2.inl +++ b/contrib/epee/include/net/abstract_tcp_server2.inl @@ -80,10 +80,9 @@ PRAGMA_WARNING_DISABLE_VS(4355) connection<t_protocol_handler>::connection( boost::asio::io_service& io_service, boost::shared_ptr<shared_state> state, t_connection_type connection_type, - epee::net_utils::ssl_support_t ssl_support, - ssl_context_t &ssl_context + ssl_support_t ssl_support ) - : connection(boost::asio::ip::tcp::socket{io_service}, std::move(state), connection_type, ssl_support, ssl_context) + : connection(boost::asio::ip::tcp::socket{io_service}, std::move(state), connection_type, ssl_support) { } @@ -91,12 +90,12 @@ PRAGMA_WARNING_DISABLE_VS(4355) connection<t_protocol_handler>::connection( boost::asio::ip::tcp::socket&& sock, boost::shared_ptr<shared_state> state, t_connection_type connection_type, - epee::net_utils::ssl_support_t ssl_support, - ssl_context_t &ssl_context + ssl_support_t ssl_support ) : - connection_basic(std::move(sock), state, ssl_support, ssl_context), + connection_basic(std::move(sock), state, ssl_support), m_protocol_handler(this, check_and_get(state).config, context), + buffer_ssl_init_fill(0), m_connection_type( connection_type ), m_throttle_speed_in("speed_in", "throttle_speed_in"), m_throttle_speed_out("speed_out", "throttle_speed_out"), @@ -176,9 +175,9 @@ PRAGMA_WARNING_DISABLE_VS(4355) _dbg3("[sock " << socket_.native_handle() << "] new connection from " << print_connection_context_short(context) << " to " << local_ep.address().to_string() << ':' << local_ep.port() << - ", total sockets objects " << get_stats().sock_count); + ", total sockets objects " << get_state().sock_count); - if(static_cast<shared_state&>(get_stats()).pfilter && !static_cast<shared_state&>(get_stats()).pfilter->is_remote_host_allowed(context.m_remote_address)) + if(static_cast<shared_state&>(get_state()).pfilter && !static_cast<shared_state&>(get_state()).pfilter->is_remote_host_allowed(context.m_remote_address)) { _dbg2("[sock " << socket().native_handle() << "] host denied " << context.m_remote_address.host_str() << ", shutdowning connection"); close(); @@ -763,7 +762,11 @@ PRAGMA_WARNING_DISABLE_VS(4355) m_timer.cancel(); boost::system::error_code ignored_ec; if (m_ssl_support == epee::net_utils::ssl_support_t::e_ssl_support_enabled) - socket_.shutdown(ignored_ec); + { + const shared_state &state = static_cast<const shared_state&>(get_state()); + if (!state.stop_signal_sent) + socket_.shutdown(ignored_ec); + } socket().shutdown(boost::asio::ip::tcp::socket::shutdown_both, ignored_ec); if (!m_host.empty()) { @@ -901,8 +904,7 @@ PRAGMA_WARNING_DISABLE_VS(4355) m_threads_count(0), m_thread_index(0), m_connection_type( connection_type ), - new_connection_(), - m_ssl_context({boost::asio::ssl::context(boost::asio::ssl::context::tlsv12), {}}) + new_connection_() { create_server_type_map(); m_thread_name_prefix = "NET"; @@ -918,8 +920,7 @@ PRAGMA_WARNING_DISABLE_VS(4355) m_threads_count(0), m_thread_index(0), m_connection_type(connection_type), - new_connection_(), - m_ssl_context({boost::asio::ssl::context(boost::asio::ssl::context::sslv23), {}}) + new_connection_() { create_server_type_map(); m_thread_name_prefix = "NET"; @@ -941,14 +942,14 @@ PRAGMA_WARNING_DISABLE_VS(4355) } //--------------------------------------------------------------------------------- template<class t_protocol_handler> - bool boosted_tcp_server<t_protocol_handler>::init_server(uint32_t port, const std::string address, epee::net_utils::ssl_support_t ssl_support, const std::pair<std::string, std::string> &private_key_and_certificate_path, const std::list<std::string> &allowed_certificates, const std::vector<std::vector<uint8_t>> &allowed_fingerprints, bool allow_any_cert) + bool boosted_tcp_server<t_protocol_handler>::init_server(uint32_t port, const std::string address, ssl_options_t ssl_options) { TRY_ENTRY(); m_stop_signal_sent = false; m_port = port; m_address = address; - if (ssl_support != epee::net_utils::ssl_support_t::e_ssl_support_disabled) - m_ssl_context = create_ssl_context(private_key_and_certificate_path, allowed_certificates, allowed_fingerprints, allow_any_cert); + if (ssl_options) + m_state->configure_ssl(std::move(ssl_options)); // Open the acceptor with the option to reuse the address (i.e. SO_REUSEADDR). boost::asio::ip::tcp::resolver resolver(io_service_); boost::asio::ip::tcp::resolver::query query(address, boost::lexical_cast<std::string>(port), boost::asio::ip::tcp::resolver::query::canonical_name); @@ -960,7 +961,7 @@ PRAGMA_WARNING_DISABLE_VS(4355) boost::asio::ip::tcp::endpoint binded_endpoint = acceptor_.local_endpoint(); m_port = binded_endpoint.port(); MDEBUG("start accept"); - new_connection_.reset(new connection<t_protocol_handler>(io_service_, m_state, m_connection_type, ssl_support, m_ssl_context)); + new_connection_.reset(new connection<t_protocol_handler>(io_service_, m_state, m_connection_type, m_state->ssl_options().support)); acceptor_.async_accept(new_connection_->socket(), boost::bind(&boosted_tcp_server<t_protocol_handler>::handle_accept, this, boost::asio::placeholders::error)); @@ -982,7 +983,7 @@ PRAGMA_WARNING_DISABLE_VS(4355) PUSH_WARNINGS DISABLE_GCC_WARNING(maybe-uninitialized) template<class t_protocol_handler> - bool boosted_tcp_server<t_protocol_handler>::init_server(const std::string port, const std::string& address, epee::net_utils::ssl_support_t ssl_support, const std::pair<std::string, std::string> &private_key_and_certificate_path, const std::list<std::string> &allowed_certificates, const std::vector<std::vector<uint8_t>> &allowed_fingerprints, bool allow_any_cert) + bool boosted_tcp_server<t_protocol_handler>::init_server(const std::string port, const std::string& address, ssl_options_t ssl_options) { uint32_t p = 0; @@ -990,7 +991,7 @@ DISABLE_GCC_WARNING(maybe-uninitialized) MERROR("Failed to convert port no = " << port); return false; } - return this->init_server(p, address, ssl_support, private_key_and_certificate_path, allowed_certificates, allowed_fingerprints, allow_any_cert); + return this->init_server(p, address, std::move(ssl_options)); } POP_WARNINGS //--------------------------------------------------------------------------------- @@ -1133,6 +1134,8 @@ POP_WARNINGS void boosted_tcp_server<t_protocol_handler>::send_stop_signal() { m_stop_signal_sent = true; + typename connection<t_protocol_handler>::shared_state *state = static_cast<typename connection<t_protocol_handler>::shared_state*>(m_state.get()); + state->stop_signal_sent = true; TRY_ENTRY(); connections_mutex.lock(); for (auto &c: connections_) @@ -1165,7 +1168,7 @@ POP_WARNINGS new_connection_->setRpcStation(); // hopefully this is not needed actually } connection_ptr conn(std::move(new_connection_)); - new_connection_.reset(new connection<t_protocol_handler>(io_service_, m_state, m_connection_type, conn->get_ssl_support(), m_ssl_context)); + new_connection_.reset(new connection<t_protocol_handler>(io_service_, m_state, m_connection_type, conn->get_ssl_support())); acceptor_.async_accept(new_connection_->socket(), boost::bind(&boosted_tcp_server<t_protocol_handler>::handle_accept, this, boost::asio::placeholders::error)); @@ -1200,7 +1203,7 @@ POP_WARNINGS assert(m_state != nullptr); // always set in constructor _erro("Some problems at accept: " << e.message() << ", connections_count = " << m_state->sock_count); misc_utils::sleep_no_w(100); - new_connection_.reset(new connection<t_protocol_handler>(io_service_, m_state, m_connection_type, new_connection_->get_ssl_support(), m_ssl_context)); + new_connection_.reset(new connection<t_protocol_handler>(io_service_, m_state, m_connection_type, new_connection_->get_ssl_support())); acceptor_.async_accept(new_connection_->socket(), boost::bind(&boosted_tcp_server<t_protocol_handler>::handle_accept, this, boost::asio::placeholders::error)); @@ -1211,7 +1214,7 @@ POP_WARNINGS { if(std::addressof(get_io_service()) == std::addressof(GET_IO_SERVICE(sock))) { - connection_ptr conn(new connection<t_protocol_handler>(std::move(sock), m_state, m_connection_type, ssl_support, m_ssl_context)); + connection_ptr conn(new connection<t_protocol_handler>(std::move(sock), m_state, m_connection_type, ssl_support)); if(conn->start(false, 1 < m_threads_count, std::move(real_remote))) { conn->get_context(out); @@ -1298,7 +1301,7 @@ POP_WARNINGS _dbg3("Connected success to " << adr << ':' << port); - const epee::net_utils::ssl_support_t ssl_support = new_connection_l->get_ssl_support(); + const ssl_support_t ssl_support = new_connection_l->get_ssl_support(); if (ssl_support == epee::net_utils::ssl_support_t::e_ssl_support_enabled || ssl_support == epee::net_utils::ssl_support_t::e_ssl_support_autodetect) { // Handshake @@ -1329,7 +1332,7 @@ POP_WARNINGS { TRY_ENTRY(); - connection_ptr new_connection_l(new connection<t_protocol_handler>(io_service_, m_state, m_connection_type, ssl_support, m_ssl_context) ); + connection_ptr new_connection_l(new connection<t_protocol_handler>(io_service_, m_state, m_connection_type, ssl_support) ); connections_mutex.lock(); connections_.insert(new_connection_l); MDEBUG("connections_ size now " << connections_.size()); @@ -1393,7 +1396,7 @@ POP_WARNINGS bool boosted_tcp_server<t_protocol_handler>::connect_async(const std::string& adr, const std::string& port, uint32_t conn_timeout, const t_callback &cb, const std::string& bind_ip, epee::net_utils::ssl_support_t ssl_support) { TRY_ENTRY(); - connection_ptr new_connection_l(new connection<t_protocol_handler>(io_service_, m_state, m_connection_type, ssl_support, m_ssl_context) ); + connection_ptr new_connection_l(new connection<t_protocol_handler>(io_service_, m_state, m_connection_type, ssl_support) ); connections_mutex.lock(); connections_.insert(new_connection_l); MDEBUG("connections_ size now " << connections_.size()); diff --git a/contrib/epee/include/net/connection_basic.hpp b/contrib/epee/include/net/connection_basic.hpp index feedc6895..d3f5f4f24 100644 --- a/contrib/epee/include/net/connection_basic.hpp +++ b/contrib/epee/include/net/connection_basic.hpp @@ -57,15 +57,30 @@ namespace epee { namespace net_utils { - struct socket_stats - { - socket_stats() - : sock_count(0), sock_number(0) - {} - - std::atomic<long> sock_count; - std::atomic<long> sock_number; - }; + + class connection_basic_shared_state + { + ssl_options_t ssl_options_; + public: + boost::asio::ssl::context ssl_context; + std::atomic<long> sock_count; + std::atomic<long> sock_number; + + connection_basic_shared_state() + : ssl_options_(ssl_support_t::e_ssl_support_disabled), + ssl_context(boost::asio::ssl::context::tlsv12), + sock_count(0), + sock_number(0) + {} + + void configure_ssl(ssl_options_t src) + { + ssl_options_ = std::move(src); + ssl_context = ssl_options_.create_context(); + } + + const ssl_options_t& ssl_options() const noexcept { return ssl_options_; } + }; /************************************************************************/ /* */ @@ -83,9 +98,10 @@ class connection_basic_pimpl; // PIMPL for this class std::string to_string(t_connection_type type); class connection_basic { // not-templated base class for rapid developmet of some code parts - // beware of removing const, net_utils::connection is sketchily doing a cast to prevent storing ptr twice - const boost::shared_ptr<socket_stats> m_stats; + // beware of removing const, net_utils::connection is sketchily doing a cast to prevent storing ptr twice + const boost::shared_ptr<connection_basic_shared_state> m_state; public: + std::unique_ptr< connection_basic_pimpl > mI; // my Implementation // moved here from orginal connecton<> - common member variables that do not depend on template in connection<> @@ -97,20 +113,19 @@ class connection_basic { // not-templated base class for rapid developmet of som /// Strand to ensure the connection's handlers are not called concurrently. boost::asio::io_service::strand strand_; /// Socket for the connection. - ssl_context_t &m_ssl_context; - ssl_support_t m_ssl_support; boost::asio::ssl::stream<boost::asio::ip::tcp::socket> socket_; + ssl_support_t m_ssl_support; public: // first counter is the ++/-- count of current sockets, the other socket_number is only-increasing ++ number generator - connection_basic(boost::asio::ip::tcp::socket&& socket, boost::shared_ptr<socket_stats> stats, ssl_support_t ssl_support, ssl_context_t &ssl_context); - connection_basic(boost::asio::io_service &io_service, boost::shared_ptr<socket_stats> stats, ssl_support_t ssl_support, ssl_context_t &ssl_context); + connection_basic(boost::asio::ip::tcp::socket&& socket, boost::shared_ptr<connection_basic_shared_state> state, ssl_support_t ssl_support); + connection_basic(boost::asio::io_service &io_service, boost::shared_ptr<connection_basic_shared_state> state, ssl_support_t ssl_support); virtual ~connection_basic() noexcept(false); - //! \return `socket_stats` object passed in construction (ptr never changes). - socket_stats& get_stats() noexcept { return *m_stats; /* verified in constructor */ } - connection_basic(boost::asio::io_service& io_service, std::atomic<long> &ref_sock_count, std::atomic<long> &sock_number, ssl_support_t ssl, ssl_context_t &ssl_context); + //! \return `shared_state` object passed in construction (ptr never changes). + connection_basic_shared_state& get_state() noexcept { return *m_state; /* verified in constructor */ } + connection_basic(boost::asio::io_service& io_service, std::atomic<long> &ref_sock_count, std::atomic<long> &sock_number, ssl_support_t ssl); boost::asio::ip::tcp::socket& socket() { return socket_.next_layer(); } ssl_support_t get_ssl_support() const { return m_ssl_support; } @@ -118,7 +133,8 @@ class connection_basic { // not-templated base class for rapid developmet of som bool handshake(boost::asio::ssl::stream_base::handshake_type type) { - return ssl_handshake(socket_, type, m_ssl_context); + //m_state != nullptr verified in constructor + return m_state->ssl_options().handshake(socket_, type); } template<typename MutableBufferSequence, typename ReadHandler> diff --git a/contrib/epee/include/net/http_client.h b/contrib/epee/include/net/http_client.h index 1864c77ad..588d5f0e3 100644 --- a/contrib/epee/include/net/http_client.h +++ b/contrib/epee/include/net/http_client.h @@ -274,12 +274,8 @@ namespace net_utils reciev_machine_state m_state; chunked_state m_chunked_state; std::string m_chunked_cache; + bool m_auto_connect; critical_section m_lock; - epee::net_utils::ssl_support_t m_ssl_support; - std::pair<std::string, std::string> m_ssl_private_key_and_certificate_path; - std::list<std::string> m_ssl_allowed_certificates; - std::vector<std::vector<uint8_t>> m_ssl_allowed_fingerprints; - bool m_ssl_allow_any_cert; public: explicit http_simple_client_template() @@ -296,35 +292,35 @@ namespace net_utils , m_state() , m_chunked_state() , m_chunked_cache() + , m_auto_connect(true) , m_lock() - , m_ssl_support(epee::net_utils::ssl_support_t::e_ssl_support_autodetect) {} const std::string &get_host() const { return m_host_buff; }; const std::string &get_port() const { return m_port; }; - bool set_server(const std::string& address, boost::optional<login> user, epee::net_utils::ssl_support_t ssl_support = epee::net_utils::ssl_support_t::e_ssl_support_autodetect, const std::pair<std::string, std::string> &private_key_and_certificate_path = {}, const std::list<std::string> &allowed_ssl_certificates = {}, const std::vector<std::vector<uint8_t>> &allowed_ssl_fingerprints = {}, bool allow_any_cert = false) + bool set_server(const std::string& address, boost::optional<login> user, ssl_options_t ssl_options = ssl_support_t::e_ssl_support_autodetect) { http::url_content parsed{}; const bool r = parse_url(address, parsed); CHECK_AND_ASSERT_MES(r, false, "failed to parse url: " << address); - set_server(std::move(parsed.host), std::to_string(parsed.port), std::move(user), ssl_support, private_key_and_certificate_path, allowed_ssl_certificates, allowed_ssl_fingerprints, allow_any_cert); + set_server(std::move(parsed.host), std::to_string(parsed.port), std::move(user), std::move(ssl_options)); return true; } - void set_server(std::string host, std::string port, boost::optional<login> user, epee::net_utils::ssl_support_t ssl_support = epee::net_utils::ssl_support_t::e_ssl_support_autodetect, const std::pair<std::string, std::string> &private_key_and_certificate_path = {}, const std::list<std::string> &allowed_ssl_certificates = {}, const std::vector<std::vector<uint8_t>> &allowed_ssl_fingerprints = {}, bool allow_any_cert = false) + void set_server(std::string host, std::string port, boost::optional<login> user, ssl_options_t ssl_options = ssl_support_t::e_ssl_support_autodetect) { CRITICAL_REGION_LOCAL(m_lock); disconnect(); m_host_buff = std::move(host); m_port = std::move(port); m_auth = user ? http_client_auth{std::move(*user)} : http_client_auth{}; - m_ssl_support = ssl_support; - m_ssl_private_key_and_certificate_path = private_key_and_certificate_path; - m_ssl_allowed_certificates = allowed_ssl_certificates; - m_ssl_allowed_fingerprints = allowed_ssl_fingerprints; - m_ssl_allow_any_cert = allow_any_cert; - m_net_client.set_ssl(m_ssl_support, m_ssl_private_key_and_certificate_path, m_ssl_allowed_certificates, m_ssl_allowed_fingerprints, m_ssl_allow_any_cert); + m_net_client.set_ssl(std::move(ssl_options)); + } + + void set_auto_connect(bool auto_connect) + { + m_auto_connect = auto_connect; } template<typename F> @@ -378,6 +374,11 @@ namespace net_utils CRITICAL_REGION_LOCAL(m_lock); if(!is_connected()) { + if (!m_auto_connect) + { + MWARNING("Auto connect attempt to " << m_host_buff << ":" << m_port << " disabled"); + return false; + } MDEBUG("Reconnecting..."); if(!connect(timeout)) { @@ -455,6 +456,16 @@ namespace net_utils return handle_reciev(timeout); } //--------------------------------------------------------------------------- + uint64_t get_bytes_sent() const + { + return m_net_client.get_bytes_sent(); + } + //--------------------------------------------------------------------------- + uint64_t get_bytes_received() const + { + return m_net_client.get_bytes_received(); + } + //--------------------------------------------------------------------------- private: //--------------------------------------------------------------------------- inline bool handle_reciev(std::chrono::milliseconds timeout) diff --git a/contrib/epee/include/net/http_server_impl_base.h b/contrib/epee/include/net/http_server_impl_base.h index 0922f21f2..fc2dcbf67 100644 --- a/contrib/epee/include/net/http_server_impl_base.h +++ b/contrib/epee/include/net/http_server_impl_base.h @@ -59,11 +59,7 @@ namespace epee bool init(std::function<void(size_t, uint8_t*)> rng, const std::string& bind_port = "0", const std::string& bind_ip = "0.0.0.0", std::vector<std::string> access_control_origins = std::vector<std::string>(), boost::optional<net_utils::http::login> user = boost::none, - epee::net_utils::ssl_support_t ssl_support = epee::net_utils::ssl_support_t::e_ssl_support_autodetect, - const std::pair<std::string, std::string> &private_key_and_certificate_path = {}, - std::list<std::string> allowed_certificates = {}, - std::vector<std::vector<uint8_t>> allowed_fingerprints = {}, - bool allow_any_cert = false) + net_utils::ssl_options_t ssl_options = net_utils::ssl_support_t::e_ssl_support_autodetect) { //set self as callback handler @@ -80,7 +76,7 @@ namespace epee m_net_server.get_config_object().m_user = std::move(user); MGINFO("Binding on " << bind_ip << ":" << bind_port); - bool res = m_net_server.init_server(bind_port, bind_ip, ssl_support, private_key_and_certificate_path, std::move(allowed_certificates), std::move(allowed_fingerprints), allow_any_cert); + bool res = m_net_server.init_server(bind_port, bind_ip, std::move(ssl_options)); if(!res) { LOG_ERROR("Failed to bind server"); diff --git a/contrib/epee/include/net/levin_protocol_handler_async.h b/contrib/epee/include/net/levin_protocol_handler_async.h index a1ea3e680..116b3ace1 100644 --- a/contrib/epee/include/net/levin_protocol_handler_async.h +++ b/contrib/epee/include/net/levin_protocol_handler_async.h @@ -266,7 +266,7 @@ public: m_pservice_endpoint(psnd_hndlr), m_config(config), m_connection_context(conn_context), - m_cache_in_buffer(256 * 1024), + m_cache_in_buffer(4 * 1024), m_state(stream_state_head) { m_close_called = 0; diff --git a/contrib/epee/include/net/net_helper.h b/contrib/epee/include/net/net_helper.h index aa3df7160..6387c4c34 100644 --- a/contrib/epee/include/net/net_helper.h +++ b/contrib/epee/include/net/net_helper.h @@ -101,14 +101,16 @@ namespace net_utils inline blocked_mode_client() : m_io_service(), - m_ctx({boost::asio::ssl::context(boost::asio::ssl::context::tlsv12), {}}), + m_ctx(boost::asio::ssl::context::tlsv12), m_connector(direct_connect{}), - m_ssl_socket(new boost::asio::ssl::stream<boost::asio::ip::tcp::socket>(m_io_service, m_ctx.context)), - m_ssl_support(epee::net_utils::ssl_support_t::e_ssl_support_autodetect), + m_ssl_socket(new boost::asio::ssl::stream<boost::asio::ip::tcp::socket>(m_io_service, m_ctx)), + m_ssl_options(epee::net_utils::ssl_support_t::e_ssl_support_autodetect), m_initialized(true), m_connected(false), m_deadline(m_io_service), - m_shutdowned(0) + m_shutdowned(0), + m_bytes_sent(0), + m_bytes_received(0) { } @@ -136,13 +138,13 @@ namespace net_utils catch(...) { /* ignore */ } } - inline void set_ssl(epee::net_utils::ssl_support_t ssl_support = epee::net_utils::ssl_support_t::e_ssl_support_autodetect, const std::pair<std::string, std::string> &private_key_and_certificate_path = {}, std::list<std::string> allowed_certificates = {}, std::vector<std::vector<uint8_t>> allowed_fingerprints = {}, bool allow_any_cert = false) + inline void set_ssl(ssl_options_t ssl_options) { - if (ssl_support == epee::net_utils::ssl_support_t::e_ssl_support_disabled) - m_ctx = {boost::asio::ssl::context(boost::asio::ssl::context::tlsv12), {}, {}}; + if (ssl_options) + m_ctx = ssl_options.create_context(); else - m_ctx = create_ssl_context(private_key_and_certificate_path, std::move(allowed_certificates), std::move(allowed_fingerprints), allow_any_cert); - m_ssl_support = ssl_support; + m_ctx = boost::asio::ssl::context(boost::asio::ssl::context::tlsv12); + m_ssl_options = std::move(ssl_options); } inline @@ -174,7 +176,7 @@ namespace net_utils // SSL Options if (ssl_support == epee::net_utils::ssl_support_t::e_ssl_support_enabled || ssl_support == epee::net_utils::ssl_support_t::e_ssl_support_autodetect) { - if (!ssl_handshake(*m_ssl_socket, boost::asio::ssl::stream_base::client, m_ctx)) + if (!m_ssl_options.handshake(*m_ssl_socket, boost::asio::ssl::stream_base::client, addr)) { if (ssl_support == epee::net_utils::ssl_support_t::e_ssl_support_autodetect) { @@ -191,7 +193,7 @@ namespace net_utils return CONNECT_FAILURE; } } - m_ssl_support = epee::net_utils::ssl_support_t::e_ssl_support_enabled; + m_ssl_options.support = ssl_support_t::e_ssl_support_enabled; } return CONNECT_SUCCESS; }else @@ -212,23 +214,21 @@ namespace net_utils // Set SSL options // disable sslv2 - m_ctx.context.set_options(boost::asio::ssl::context::default_workarounds | boost::asio::ssl::context::no_sslv2); - m_ctx.context.set_default_verify_paths(); - m_ssl_socket.reset(new boost::asio::ssl::stream<boost::asio::ip::tcp::socket>(m_io_service, m_ctx.context)); + m_ssl_socket.reset(new boost::asio::ssl::stream<boost::asio::ip::tcp::socket>(m_io_service, m_ctx)); // Get a list of endpoints corresponding to the server name. - try_connect_result_t try_connect_result = try_connect(addr, port, timeout, m_ssl_support); + try_connect_result_t try_connect_result = try_connect(addr, port, timeout, m_ssl_options.support); if (try_connect_result == CONNECT_FAILURE) return false; - if (m_ssl_support == epee::net_utils::ssl_support_t::e_ssl_support_autodetect) + if (m_ssl_options.support == epee::net_utils::ssl_support_t::e_ssl_support_autodetect) { - m_ssl_support = epee::net_utils::ssl_support_t::e_ssl_support_enabled; + m_ssl_options.support = epee::net_utils::ssl_support_t::e_ssl_support_enabled; if (try_connect_result == CONNECT_NO_SSL) { MERROR("SSL handshake failed on an autodetect connection, reconnecting without SSL"); - m_ssl_support = epee::net_utils::ssl_support_t::e_ssl_support_disabled; - if (try_connect(addr, port, timeout, m_ssl_support) != CONNECT_SUCCESS) + m_ssl_options.support = epee::net_utils::ssl_support_t::e_ssl_support_disabled; + if (try_connect(addr, port, timeout, m_ssl_options.support) != CONNECT_SUCCESS) return false; } } @@ -260,7 +260,7 @@ namespace net_utils if(m_connected) { m_connected = false; - if(m_ssl_support != epee::net_utils::ssl_support_t::e_ssl_support_disabled) + if(m_ssl_options) shutdown_ssl(); m_ssl_socket->next_layer().shutdown(boost::asio::ip::tcp::socket::shutdown_both); } @@ -315,6 +315,7 @@ namespace net_utils }else { m_deadline.expires_at(std::chrono::steady_clock::time_point::max()); + m_bytes_sent += buff.size(); } } @@ -371,6 +372,7 @@ namespace net_utils }else { m_deadline.expires_at(std::chrono::steady_clock::time_point::max()); + m_bytes_sent += sz; } } @@ -394,7 +396,7 @@ namespace net_utils if (!m_connected || !m_ssl_socket->next_layer().is_open()) return false; if (ssl) - *ssl = m_ssl_support == epee::net_utils::ssl_support_t::e_ssl_support_enabled; + *ssl = m_ssl_options.support == ssl_support_t::e_ssl_support_enabled; return true; } @@ -426,9 +428,10 @@ namespace net_utils handler_obj hndlr(ec, bytes_transfered); - char local_buff[10000] = {0}; + static const size_t max_size = 16384; + buff.resize(max_size); - async_read(local_buff, sizeof(local_buff), boost::asio::transfer_at_least(1), hndlr); + async_read(&buff[0], max_size, boost::asio::transfer_at_least(1), hndlr); // Block until the asynchronous operation has completed. while (ec == boost::asio::error::would_block && !boost::interprocess::ipcdetail::atomic_read32(&m_shutdowned)) @@ -445,6 +448,7 @@ namespace net_utils { MTRACE("Connection err_code eof."); //connection closed there, empty + buff.clear(); return true; } @@ -460,7 +464,8 @@ namespace net_utils /*if(!bytes_transfered) return false;*/ - buff.assign(local_buff, bytes_transfered); + m_bytes_received += bytes_transfered; + buff.resize(bytes_transfered); return true; } @@ -528,6 +533,7 @@ namespace net_utils m_deadline.expires_at(std::chrono::steady_clock::time_point::max()); } + m_bytes_received += bytes_transfered; if(bytes_transfered != buff.size()) { LOG_ERROR("Transferred mismatch with transfer_at_least value: m_bytes_transferred=" << bytes_transfered << " at_least value=" << buff.size()); @@ -558,7 +564,7 @@ namespace net_utils { m_deadline.cancel(); boost::system::error_code ec; - if(m_ssl_support != epee::net_utils::ssl_support_t::e_ssl_support_disabled) + if(m_ssl_options.support != ssl_support_t::e_ssl_support_disabled) shutdown_ssl(); m_ssl_socket->next_layer().cancel(ec); if(ec) @@ -583,7 +589,17 @@ namespace net_utils { return m_ssl_socket->next_layer(); } - + + uint64_t get_bytes_sent() const + { + return m_bytes_sent; + } + + uint64_t get_bytes_received() const + { + return m_bytes_received; + } + private: void check_deadline() @@ -635,7 +651,7 @@ namespace net_utils bool write(const void* data, size_t sz, boost::system::error_code& ec) { bool success; - if(m_ssl_support == epee::net_utils::ssl_support_t::e_ssl_support_enabled) + if(m_ssl_options.support == ssl_support_t::e_ssl_support_enabled) success = boost::asio::write(*m_ssl_socket, boost::asio::buffer(data, sz), ec); else success = boost::asio::write(m_ssl_socket->next_layer(), boost::asio::buffer(data, sz), ec); @@ -644,7 +660,7 @@ namespace net_utils void async_write(const void* data, size_t sz, boost::system::error_code& ec) { - if(m_ssl_support == epee::net_utils::ssl_support_t::e_ssl_support_enabled) + if(m_ssl_options.support == ssl_support_t::e_ssl_support_enabled) boost::asio::async_write(*m_ssl_socket, boost::asio::buffer(data, sz), boost::lambda::var(ec) = boost::lambda::_1); else boost::asio::async_write(m_ssl_socket->next_layer(), boost::asio::buffer(data, sz), boost::lambda::var(ec) = boost::lambda::_1); @@ -652,7 +668,7 @@ namespace net_utils void async_read(char* buff, size_t sz, boost::asio::detail::transfer_at_least_t transfer_at_least, handler_obj& hndlr) { - if(m_ssl_support != epee::net_utils::ssl_support_t::e_ssl_support_enabled) + if(m_ssl_options.support != ssl_support_t::e_ssl_support_enabled) boost::asio::async_read(m_ssl_socket->next_layer(), boost::asio::buffer(buff, sz), transfer_at_least, hndlr); else boost::asio::async_read(*m_ssl_socket, boost::asio::buffer(buff, sz), transfer_at_least, hndlr); @@ -661,14 +677,16 @@ namespace net_utils protected: boost::asio::io_service m_io_service; - epee::net_utils::ssl_context_t m_ctx; + boost::asio::ssl::context m_ctx; std::shared_ptr<boost::asio::ssl::stream<boost::asio::ip::tcp::socket>> m_ssl_socket; std::function<connect_func> m_connector; - epee::net_utils::ssl_support_t m_ssl_support; + ssl_options_t m_ssl_options; bool m_initialized; bool m_connected; boost::asio::steady_timer m_deadline; volatile uint32_t m_shutdowned; + std::atomic<uint64_t> m_bytes_sent; + std::atomic<uint64_t> m_bytes_received; }; diff --git a/contrib/epee/include/net/net_ssl.h b/contrib/epee/include/net/net_ssl.h index f7b102164..5ef2ff59d 100644 --- a/contrib/epee/include/net/net_ssl.h +++ b/contrib/epee/include/net/net_ssl.h @@ -31,10 +31,13 @@ #include <stdint.h> #include <string> -#include <list> +#include <vector> #include <boost/utility/string_ref.hpp> #include <boost/asio/ip/tcp.hpp> #include <boost/asio/ssl.hpp> +#include <boost/system/error_code.hpp> + +#define SSL_FINGERPRINT_SIZE 32 namespace epee { @@ -45,23 +48,93 @@ namespace net_utils e_ssl_support_enabled, e_ssl_support_autodetect, }; - - struct ssl_context_t - { - boost::asio::ssl::context context; - std::list<std::string> allowed_certificates; - std::vector<std::vector<uint8_t>> allowed_fingerprints; - bool allow_any_cert; - }; + + enum class ssl_verification_t : uint8_t + { + none = 0, //!< Do not verify peer. + system_ca, //!< Verify peer via system ca only (do not inspect user certificates) + user_certificates,//!< Verify peer via specific (non-chain) certificate(s) only. + user_ca //!< Verify peer via specific (possibly chain) certificate(s) only. + }; + + struct ssl_authentication_t + { + std::string private_key_path; //!< Private key used for authentication + std::string certificate_path; //!< Certificate used for authentication to peer. + + //! Load `private_key_path` and `certificate_path` into `ssl_context`. + void use_ssl_certificate(boost::asio::ssl::context &ssl_context) const; + }; + + /*! + \note `verification != disabled && support == disabled` is currently + "allowed" via public interface but obviously invalid configuation. + */ + class ssl_options_t + { + // force sorted behavior in private + std::vector<std::vector<std::uint8_t>> fingerprints_; + + public: + std::string ca_path; + ssl_authentication_t auth; + ssl_support_t support; + ssl_verification_t verification; + + //! Verification is set to system ca unless SSL is disabled. + ssl_options_t(ssl_support_t support) + : fingerprints_(), + ca_path(), + auth(), + support(support), + verification(support == ssl_support_t::e_ssl_support_disabled ? ssl_verification_t::none : ssl_verification_t::system_ca) + {} + + //! Provide user fingerprints and/or ca path. Enables SSL and user_certificate verification + ssl_options_t(std::vector<std::vector<std::uint8_t>> fingerprints, std::string ca_path); + + ssl_options_t(const ssl_options_t&) = default; + ssl_options_t(ssl_options_t&&) = default; + + ssl_options_t& operator=(const ssl_options_t&) = default; + ssl_options_t& operator=(ssl_options_t&&) = default; + + //! \return False iff ssl is disabled, otherwise true. + explicit operator bool() const noexcept { return support != ssl_support_t::e_ssl_support_disabled; } + + //! \retrurn True if `host` can be verified using `this` configuration WITHOUT system "root" CAs. + bool has_strong_verification(boost::string_ref host) const noexcept; + + //! Search against internal fingerprints. Always false if `behavior() != user_certificate_check`. + bool has_fingerprint(boost::asio::ssl::verify_context &ctx) const; + + boost::asio::ssl::context create_context() const; + + /*! \note If `this->support == autodetect && this->verification != none`, + then the handshake will not fail when peer verification fails. The + assumption is that a re-connect will be attempted, so a warning is + logged instead of failure. + + \note It is strongly encouraged that clients using `system_ca` + verification provide a non-empty `host` for rfc2818 verification. + + \param socket Used in SSL handshake and verification + \param type Client or server + \param host This parameter is only used when + `type == client && !host.empty()`. The value is sent to the server for + situations where multiple hostnames are being handled by a server. If + `verification == system_ca` the client also does a rfc2818 check to + ensure that the server certificate is to the provided hostname. + + \return True if the SSL handshake completes with peer verification + settings. */ + bool handshake(boost::asio::ssl::stream<boost::asio::ip::tcp::socket> &socket, boost::asio::ssl::stream_base::handshake_type type, const std::string& host = {}) const; + }; // https://security.stackexchange.com/questions/34780/checking-client-hello-for-https-classification constexpr size_t get_ssl_magic_size() { return 9; } bool is_ssl(const unsigned char *data, size_t len); - ssl_context_t create_ssl_context(const std::pair<std::string, std::string> &private_key_and_certificate_path, std::list<std::string> allowed_certificates, std::vector<std::vector<uint8_t>> allowed_fingerprints, bool allow_any_cert); - void use_ssl_certificate(ssl_context_t &ssl_context, const std::pair<std::string, std::string> &private_key_and_certificate_path); - bool is_certificate_allowed(boost::asio::ssl::verify_context &ctx, const ssl_context_t &ssl_context); - bool ssl_handshake(boost::asio::ssl::stream<boost::asio::ip::tcp::socket> &socket, boost::asio::ssl::stream_base::handshake_type type, const epee::net_utils::ssl_context_t &ssl_context); - bool ssl_support_from_string(ssl_support_t &ssl, boost::string_ref s); + bool ssl_support_from_string(ssl_support_t &ssl, boost::string_ref s); } } diff --git a/contrib/epee/include/serialization/keyvalue_serialization.h b/contrib/epee/include/serialization/keyvalue_serialization.h index fc5a21851..5459c8409 100644 --- a/contrib/epee/include/serialization/keyvalue_serialization.h +++ b/contrib/epee/include/serialization/keyvalue_serialization.h @@ -32,6 +32,9 @@ #include "enableable.h" #include "keyvalue_serialization_overloads.h" +#undef MONERO_DEFAULT_LOG_CATEGORY +#define MONERO_DEFAULT_LOG_CATEGORY "serialization" + namespace epee { /************************************************************************/ diff --git a/contrib/epee/include/serialization/keyvalue_serialization_overloads.h b/contrib/epee/include/serialization/keyvalue_serialization_overloads.h index 15c95f07a..fc8b90a2c 100644 --- a/contrib/epee/include/serialization/keyvalue_serialization_overloads.h +++ b/contrib/epee/include/serialization/keyvalue_serialization_overloads.h @@ -33,6 +33,9 @@ #include <boost/mpl/vector.hpp> #include <boost/mpl/contains_fwd.hpp> +#undef MONERO_DEFAULT_LOG_CATEGORY +#define MONERO_DEFAULT_LOG_CATEGORY "serialization" + namespace epee { namespace diff --git a/contrib/epee/src/connection_basic.cpp b/contrib/epee/src/connection_basic.cpp index cafc08ead..19f2c7b02 100644 --- a/contrib/epee/src/connection_basic.cpp +++ b/contrib/epee/src/connection_basic.cpp @@ -65,6 +65,15 @@ namespace epee namespace net_utils { +namespace +{ + boost::asio::ssl::context& get_context(connection_basic_shared_state* state) + { + CHECK_AND_ASSERT_THROW_MES(state != nullptr, "state shared_ptr cannot be null"); + return state->ssl_context; + } +} + std::string to_string(t_connection_type type) { if (type == e_connection_type_NET) @@ -119,56 +128,54 @@ connection_basic_pimpl::connection_basic_pimpl(const std::string &name) : m_thro int connection_basic_pimpl::m_default_tos; // methods: -connection_basic::connection_basic(boost::asio::ip::tcp::socket&& sock, boost::shared_ptr<socket_stats> stats, ssl_support_t ssl_support, ssl_context_t &ssl_context) +connection_basic::connection_basic(boost::asio::ip::tcp::socket&& sock, boost::shared_ptr<connection_basic_shared_state> state, ssl_support_t ssl_support) : - m_stats(std::move(stats)), + m_state(std::move(state)), mI( new connection_basic_pimpl("peer") ), strand_(GET_IO_SERVICE(sock)), - socket_(GET_IO_SERVICE(sock), ssl_context.context), + socket_(GET_IO_SERVICE(sock), get_context(m_state.get())), m_want_close_connection(false), m_was_shutdown(false), - m_ssl_support(ssl_support), - m_ssl_context(ssl_context) + m_ssl_support(ssl_support) { // add nullptr checks if removed - CHECK_AND_ASSERT_THROW_MES(bool(m_stats), "stats shared_ptr cannot be null"); + assert(m_state != nullptr); // release runtime check in get_context socket_.next_layer() = std::move(sock); - ++(m_stats->sock_count); // increase the global counter - mI->m_peer_number = m_stats->sock_number.fetch_add(1); // use, and increase the generated number + ++(m_state->sock_count); // increase the global counter + mI->m_peer_number = m_state->sock_number.fetch_add(1); // use, and increase the generated number std::string remote_addr_str = "?"; try { boost::system::error_code e; remote_addr_str = socket().remote_endpoint(e).address().to_string(); } catch(...){} ; - _note("Spawned connection #"<<mI->m_peer_number<<" to " << remote_addr_str << " currently we have sockets count:" << m_stats->sock_count); + _note("Spawned connection #"<<mI->m_peer_number<<" to " << remote_addr_str << " currently we have sockets count:" << m_state->sock_count); } -connection_basic::connection_basic(boost::asio::io_service &io_service, boost::shared_ptr<socket_stats> stats, ssl_support_t ssl_support, ssl_context_t &ssl_context) +connection_basic::connection_basic(boost::asio::io_service &io_service, boost::shared_ptr<connection_basic_shared_state> state, ssl_support_t ssl_support) : - m_stats(std::move(stats)), + m_state(std::move(state)), mI( new connection_basic_pimpl("peer") ), strand_(io_service), - socket_(io_service, ssl_context.context), - m_want_close_connection(false), + socket_(io_service, get_context(m_state.get())), + m_want_close_connection(false), m_was_shutdown(false), - m_ssl_support(ssl_support), - m_ssl_context(ssl_context) + m_ssl_support(ssl_support) { // add nullptr checks if removed - CHECK_AND_ASSERT_THROW_MES(bool(m_stats), "stats shared_ptr cannot be null"); + assert(m_state != nullptr); // release runtime check in get_context - ++(m_stats->sock_count); // increase the global counter - mI->m_peer_number = m_stats->sock_number.fetch_add(1); // use, and increase the generated number + ++(m_state->sock_count); // increase the global counter + mI->m_peer_number = m_state->sock_number.fetch_add(1); // use, and increase the generated number std::string remote_addr_str = "?"; try { boost::system::error_code e; remote_addr_str = socket().remote_endpoint(e).address().to_string(); } catch(...){} ; - _note("Spawned connection #"<<mI->m_peer_number<<" to " << remote_addr_str << " currently we have sockets count:" << m_stats->sock_count); + _note("Spawned connection #"<<mI->m_peer_number<<" to " << remote_addr_str << " currently we have sockets count:" << m_state->sock_count); } connection_basic::~connection_basic() noexcept(false) { - --(m_stats->sock_count); + --(m_state->sock_count); std::string remote_addr_str = "?"; try { boost::system::error_code e; remote_addr_str = socket().remote_endpoint(e).address().to_string(); } catch(...){} ; diff --git a/contrib/epee/src/mlog.cpp b/contrib/epee/src/mlog.cpp index 9b6b832d1..a8bfd114d 100644 --- a/contrib/epee/src/mlog.cpp +++ b/contrib/epee/src/mlog.cpp @@ -100,7 +100,7 @@ static const char *get_default_categories(int level) switch (level) { case 0: - categories = "*:WARNING,net:FATAL,net.http:FATAL,net.p2p:FATAL,net.cn:FATAL,global:INFO,verify:FATAL,stacktrace:INFO,logging:INFO,msgwriter:INFO"; + categories = "*:WARNING,net:FATAL,net.http:FATAL,net.p2p:FATAL,net.cn:FATAL,global:INFO,verify:FATAL,serialization:FATAL,stacktrace:INFO,logging:INFO,msgwriter:INFO"; break; case 1: categories = "*:INFO,global:INFO,stacktrace:INFO,logging:INFO,msgwriter:INFO,perf.*:DEBUG"; diff --git a/contrib/epee/src/net_ssl.cpp b/contrib/epee/src/net_ssl.cpp index cb65121bd..c17d86eca 100644 --- a/contrib/epee/src/net_ssl.cpp +++ b/contrib/epee/src/net_ssl.cpp @@ -77,6 +77,21 @@ namespace } }; using openssl_bignum = std::unique_ptr<BIGNUM, openssl_bignum_free>; + + boost::system::error_code load_ca_file(boost::asio::ssl::context& ctx, const std::string& path) + { + SSL_CTX* const ssl_ctx = ctx.native_handle(); // could be moved from context + if (ssl_ctx == nullptr) + return {boost::asio::error::invalid_argument}; + + if (!SSL_CTX_load_verify_locations(ssl_ctx, path.c_str(), nullptr)) + { + return boost::system::error_code{ + int(::ERR_get_error()), boost::asio::error::get_ssl_category() + }; + } + return boost::system::error_code{}; + } } namespace epee @@ -84,6 +99,7 @@ namespace epee namespace net_utils { + // https://stackoverflow.com/questions/256405/programmatically-create-x509-certificate-using-openssl bool create_ssl_certificate(EVP_PKEY *&pkey, X509 *&cert) { @@ -155,22 +171,34 @@ bool create_ssl_certificate(EVP_PKEY *&pkey, X509 *&cert) return true; } -ssl_context_t create_ssl_context(const std::pair<std::string, std::string> &private_key_and_certificate_path, std::list<std::string> allowed_certificates, std::vector<std::vector<uint8_t>> allowed_fingerprints, bool allow_any_cert) +ssl_options_t::ssl_options_t(std::vector<std::vector<std::uint8_t>> fingerprints, std::string ca_path) + : fingerprints_(std::move(fingerprints)), + ca_path(std::move(ca_path)), + auth(), + support(ssl_support_t::e_ssl_support_enabled), + verification(ssl_verification_t::user_certificates) +{ + std::sort(fingerprints_.begin(), fingerprints_.end()); +} + +boost::asio::ssl::context ssl_options_t::create_context() const { - ssl_context_t ssl_context{boost::asio::ssl::context(boost::asio::ssl::context::tlsv12), std::move(allowed_certificates), std::move(allowed_fingerprints)}; + boost::asio::ssl::context ssl_context{boost::asio::ssl::context::tlsv12}; + if (!bool(*this)) + return ssl_context; // only allow tls v1.2 and up - ssl_context.context.set_options(boost::asio::ssl::context::default_workarounds); - ssl_context.context.set_options(boost::asio::ssl::context::no_sslv2); - ssl_context.context.set_options(boost::asio::ssl::context::no_sslv3); - ssl_context.context.set_options(boost::asio::ssl::context::no_tlsv1); - ssl_context.context.set_options(boost::asio::ssl::context::no_tlsv1_1); + ssl_context.set_options(boost::asio::ssl::context::default_workarounds); + ssl_context.set_options(boost::asio::ssl::context::no_sslv2); + ssl_context.set_options(boost::asio::ssl::context::no_sslv3); + ssl_context.set_options(boost::asio::ssl::context::no_tlsv1); + ssl_context.set_options(boost::asio::ssl::context::no_tlsv1_1); // only allow a select handful of tls v1.3 and v1.2 ciphers to be used - SSL_CTX_set_cipher_list(ssl_context.context.native_handle(), "ECDHE-ECDSA-CHACHA20-POLY1305-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-CHACHA20-POLY1305"); + SSL_CTX_set_cipher_list(ssl_context.native_handle(), "ECDHE-ECDSA-CHACHA20-POLY1305-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-CHACHA20-POLY1305"); // set options on the SSL context for added security - SSL_CTX *ctx = ssl_context.context.native_handle(); + SSL_CTX *ctx = ssl_context.native_handle(); CHECK_AND_ASSERT_THROW_MES(ctx, "Failed to get SSL context"); SSL_CTX_clear_options(ctx, SSL_OP_LEGACY_SERVER_CONNECT); // SSL_CTX_SET_OPTIONS(3) SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF); // https://stackoverflow.com/questions/22378442 @@ -186,10 +214,29 @@ ssl_context_t create_ssl_context(const std::pair<std::string, std::string> &priv #ifdef SSL_OP_NO_COMPRESSION SSL_CTX_set_options(ctx, SSL_OP_NO_COMPRESSION); #endif - ssl_context.context.set_default_verify_paths(); - CHECK_AND_ASSERT_THROW_MES(private_key_and_certificate_path.first.empty() == private_key_and_certificate_path.second.empty(), "private key and certificate must be either both given or both empty"); - if (private_key_and_certificate_path.second.empty()) + switch (verification) + { + case ssl_verification_t::system_ca: + ssl_context.set_default_verify_paths(); + break; + case ssl_verification_t::user_certificates: + ssl_context.set_verify_depth(0); + /* fallthrough */ + case ssl_verification_t::user_ca: + if (!ca_path.empty()) + { + const boost::system::error_code err = load_ca_file(ssl_context, ca_path); + if (err) + throw boost::system::system_error{err, "Failed to load user CA file at " + ca_path}; + } + break; + default: + break; + } + + CHECK_AND_ASSERT_THROW_MES(auth.private_key_path.empty() == auth.certificate_path.empty(), "private key and certificate must be either both given or both empty"); + if (auth.private_key_path.empty()) { EVP_PKEY *pkey; X509 *cert; @@ -200,19 +247,15 @@ ssl_context_t create_ssl_context(const std::pair<std::string, std::string> &priv EVP_PKEY_free(pkey); } else - { - ssl_context.context.use_private_key_file(private_key_and_certificate_path.first, boost::asio::ssl::context::pem); - ssl_context.context.use_certificate_file(private_key_and_certificate_path.second, boost::asio::ssl::context::pem); - } - ssl_context.allow_any_cert = allow_any_cert; + auth.use_ssl_certificate(ssl_context); return ssl_context; } -void use_ssl_certificate(ssl_context_t &ssl_context, const std::pair<std::string, std::string> &private_key_and_certificate_path) +void ssl_authentication_t::use_ssl_certificate(boost::asio::ssl::context &ssl_context) const { - ssl_context.context.use_private_key_file(private_key_and_certificate_path.first, boost::asio::ssl::context::pem); - ssl_context.context.use_certificate_file(private_key_and_certificate_path.second, boost::asio::ssl::context::pem); + ssl_context.use_private_key_file(private_key_path, boost::asio::ssl::context::pem); + ssl_context.use_certificate_chain_file(certificate_path); } bool is_ssl(const unsigned char *data, size_t len) @@ -235,29 +278,50 @@ bool is_ssl(const unsigned char *data, size_t len) return false; } -bool is_certificate_allowed(boost::asio::ssl::verify_context &ctx, const ssl_context_t &ssl_context) +bool ssl_options_t::has_strong_verification(boost::string_ref host) const noexcept { - X509_STORE_CTX *sctx = ctx.native_handle(); - if (!sctx) - { - MERROR("Error getting verify_context handle"); - return false; - } - X509 *cert =X509_STORE_CTX_get_current_cert(sctx); - if (!cert) + // onion and i2p addresses contain information about the server cert + // which both authenticates and encrypts + if (host.ends_with(".onion") || host.ends_with(".i2p")) + return true; + switch (verification) { - MERROR("No certificate found in verify_context"); - return false; + default: + case ssl_verification_t::none: + case ssl_verification_t::system_ca: + return false; + case ssl_verification_t::user_certificates: + case ssl_verification_t::user_ca: + break; } + return true; +} +bool ssl_options_t::has_fingerprint(boost::asio::ssl::verify_context &ctx) const +{ // can we check the certificate against a list of fingerprints? - if (!ssl_context.allowed_fingerprints.empty()) { + if (!fingerprints_.empty()) { + X509_STORE_CTX *sctx = ctx.native_handle(); + if (!sctx) + { + MERROR("Error getting verify_context handle"); + return false; + } + + X509* cert = nullptr; + const STACK_OF(X509)* chain = X509_STORE_CTX_get_chain(sctx); + if (!chain || sk_X509_num(chain) < 1 || !(cert = sk_X509_value(chain, 0))) + { + MERROR("No certificate found in verify_context"); + return false; + } + // buffer for the certificate digest and the size of the result std::vector<uint8_t> digest(EVP_MAX_MD_SIZE); unsigned int size{ 0 }; // create the digest from the certificate - if (!X509_digest(cert, EVP_sha1(), digest.data(), &size)) { + if (!X509_digest(cert, EVP_sha256(), digest.data(), &size)) { MERROR("Failed to create certificate fingerprint"); return false; } @@ -265,74 +329,63 @@ bool is_certificate_allowed(boost::asio::ssl::verify_context &ctx, const ssl_con // strip unnecessary bytes from the digest digest.resize(size); - // is the certificate fingerprint inside the list of allowed fingerprints? - if (std::find(ssl_context.allowed_fingerprints.begin(), ssl_context.allowed_fingerprints.end(), digest) != ssl_context.allowed_fingerprints.end()) - return true; + return std::binary_search(fingerprints_.begin(), fingerprints_.end(), digest); } - if (!ssl_context.allowed_certificates.empty()) { - BIO *bio_cert = BIO_new(BIO_s_mem()); - bool success = PEM_write_bio_X509(bio_cert, cert); - if (!success) - { - BIO_free(bio_cert); - MERROR("Failed to print certificate"); - return false; - } - BUF_MEM *buf = NULL; - BIO_get_mem_ptr(bio_cert, &buf); - if (!buf || !buf->data || !buf->length) - { - BIO_free(bio_cert); - MERROR("Failed to write certificate: " << ERR_get_error()); - return false; - } - std::string certificate(std::string(buf->data, buf->length)); - BIO_free(bio_cert); - if (std::find(ssl_context.allowed_certificates.begin(), ssl_context.allowed_certificates.end(), certificate) != ssl_context.allowed_certificates.end()) - return true; - } - - // if either checklist is non-empty we must have failed it - return ssl_context.allowed_fingerprints.empty() && ssl_context.allowed_certificates.empty(); + return false; } -bool ssl_handshake(boost::asio::ssl::stream<boost::asio::ip::tcp::socket> &socket, boost::asio::ssl::stream_base::handshake_type type, const epee::net_utils::ssl_context_t &ssl_context) +bool ssl_options_t::handshake(boost::asio::ssl::stream<boost::asio::ip::tcp::socket> &socket, boost::asio::ssl::stream_base::handshake_type type, const std::string& host) const { - bool verified = false; socket.next_layer().set_option(boost::asio::ip::tcp::no_delay(true)); - socket.set_verify_mode(boost::asio::ssl::verify_peer); - socket.set_verify_callback([&](bool preverified, boost::asio::ssl::verify_context &ctx) + + /* Using system-wide CA store for client verification is funky - there is + no expected hostname for server to verify against. If server doesn't have + specific whitelisted certificates for client, don't require client to + send certificate at all. */ + const bool no_verification = verification == ssl_verification_t::none || + (type == boost::asio::ssl::stream_base::server && fingerprints_.empty() && ca_path.empty()); + + /* According to OpenSSL documentation (and SSL specifications), server must + always send certificate unless "anonymous" cipher mode is used which are + disabled by default. Either way, the certificate is never inspected. */ + if (no_verification) + socket.set_verify_mode(boost::asio::ssl::verify_none); + else { - if (!preverified) + socket.set_verify_mode(boost::asio::ssl::verify_peer | boost::asio::ssl::verify_fail_if_no_peer_cert); + + // in case server is doing "virtual" domains, set hostname + SSL* const ssl_ctx = socket.native_handle(); + if (type == boost::asio::ssl::stream_base::client && !host.empty() && ssl_ctx) + SSL_set_tlsext_host_name(ssl_ctx, host.c_str()); + + socket.set_verify_callback([&](const bool preverified, boost::asio::ssl::verify_context &ctx) { - const int err = X509_STORE_CTX_get_error(ctx.native_handle()); - const int depth = X509_STORE_CTX_get_error_depth(ctx.native_handle()); - if (err != X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT || depth != 0) + // preverified means it passed system or user CA check. System CA is never loaded + // when fingerprints are whitelisted. + const bool verified = preverified && + (verification != ssl_verification_t::system_ca || host.empty() || boost::asio::ssl::rfc2818_verification(host)(preverified, ctx)); + + if (!verified && !has_fingerprint(ctx)) { - MERROR("Invalid SSL certificate, error " << err << " at depth " << depth << ", connection dropped"); - return false; + // autodetect will reconnect without SSL - warn and keep connection encrypted + if (support != ssl_support_t::e_ssl_support_autodetect) + { + MERROR("SSL certificate is not in the allowed list, connection droppped"); + return false; + } + MWARNING("SSL peer has not been verified"); } - } - if (!ssl_context.allow_any_cert && !is_certificate_allowed(ctx, ssl_context)) - { - MERROR("Certificate is not in the allowed list, connection droppped"); - return false; - } - verified = true; - return true; - }); + return true; + }); + } boost::system::error_code ec; socket.handshake(type, ec); if (ec) { - MERROR("handshake failed, connection dropped: " << ec.message()); - return false; - } - if (!ssl_context.allow_any_cert && !verified) - { - MERROR("Peer did not provide a certificate in the allowed list, connection dropped"); + MERROR("SSL handshake failed, connection dropped: " << ec.message()); return false; } MDEBUG("SSL handshake success"); diff --git a/contrib/gitian/gitian-linux.yml b/contrib/gitian/gitian-linux.yml index 3bb25c314..67f174fec 100644 --- a/contrib/gitian/gitian-linux.yml +++ b/contrib/gitian/gitian-linux.yml @@ -137,7 +137,7 @@ script: | if [ -d "$EXTRA_INCLUDES" ]; then export HOST_ID_SALT="$EXTRA_INCLUDES" fi - make ${MAKEOPTS} -C ${BASEPREFIX} HOST="${i}" -j 4 V=1 + make ${MAKEOPTS} -C ${BASEPREFIX} HOST="${i}" V=1 unset HOST_ID_SALT done diff --git a/contrib/gitian/gitian-win.yml b/contrib/gitian/gitian-win.yml index fef5567f9..1eb558300 100644 --- a/contrib/gitian/gitian-win.yml +++ b/contrib/gitian/gitian-win.yml @@ -108,7 +108,7 @@ script: | if [ -d "$EXTRA_INCLUDES" ]; then export HOST_ID_SALT="$EXTRA_INCLUDES" fi - make ${MAKEOPTS} -C ${BASEPREFIX} HOST="${i}" -j 4 V=1 + make ${MAKEOPTS} -C ${BASEPREFIX} HOST="${i}" V=1 unset HOST_ID_SALT done diff --git a/external/db_drivers/liblmdb/mdb.c b/external/db_drivers/liblmdb/mdb.c index 8e67d5981..ba1315401 100644 --- a/external/db_drivers/liblmdb/mdb.c +++ b/external/db_drivers/liblmdb/mdb.c @@ -1742,6 +1742,8 @@ mdb_strerror(int err) NULL, err, 0, ptr, MSGSIZE, (va_list *)buf+MSGSIZE); return ptr; #else + if (err < 0) + return "Invalid error code"; return strerror(err); #endif } diff --git a/external/easylogging++/CMakeLists.txt b/external/easylogging++/CMakeLists.txt index 8287024c2..35fb86552 100644 --- a/external/easylogging++/CMakeLists.txt +++ b/external/easylogging++/CMakeLists.txt @@ -33,6 +33,7 @@ project(easylogging CXX) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") find_package(Threads) +find_package(Backtrace) add_library(easylogging easylogging++.cc) @@ -41,7 +42,8 @@ include_directories("${CMAKE_CURRENT_SOURCE_DIR}") include_directories("${CMAKE_CURRENT_BINARY_DIR}") target_link_libraries(easylogging PRIVATE - ${CMAKE_THREAD_LIBS_INIT}) + ${CMAKE_THREAD_LIBS_INIT} + ${Backtrace_LIBRARIES}) # GUI/libwallet install target if (BUILD_GUI_DEPS) diff --git a/external/easylogging++/easylogging++.cc b/external/easylogging++/easylogging++.cc index f5f7481f8..5a806dc69 100644 --- a/external/easylogging++/easylogging++.cc +++ b/external/easylogging++/easylogging++.cc @@ -1,17 +1,16 @@ // // Bismillah ar-Rahmaan ar-Raheem // -// Easylogging++ v9.96.5 +// Easylogging++ v9.96.7 // Cross-platform logging library for C++ applications // -// Copyright (c) 2012-2018 Muflihun Labs +// Copyright (c) 2012-2018 Zuhd Web Services // Copyright (c) 2012-2018 @abumusamq // // This library is released under the MIT Licence. -// https://github.com/muflihun/easyloggingpp/blob/master/LICENSE +// https://github.com/zuhd-org/easyloggingpp/blob/master/LICENSE // -// https://github.com/muflihun/easyloggingpp -// https://muflihun.github.io/easyloggingpp +// https://zuhd.org // http://muflihun.com // @@ -962,7 +961,7 @@ void Str::replaceFirstWithEscape(base::type::string_t& str, const base::type::st std::size_t foundAt = base::type::string_t::npos; while ((foundAt = str.find(replaceWhat, foundAt + 1)) != base::type::string_t::npos) { if (foundAt > 0 && str[foundAt - 1] == base::consts::kFormatSpecifierChar) { - str.erase(foundAt > 0 ? foundAt - 1 : 0, 1); + str.erase(foundAt - 1, 1); ++foundAt; } else { str.replace(foundAt, replaceWhat.length(), replaceWith); @@ -1531,7 +1530,7 @@ void LogFormat::parseFromFormat(const base::type::string_t& userFormat) { if (hasFlag(flag)) { // If we already have flag we remove the escape chars so that '%%' is turned to '%' // even after specifier resolution - this is because we only replaceFirst specifier - formatCopy.erase(foundAt > 0 ? foundAt - 1 : 0, 1); + formatCopy.erase(foundAt - 1, 1); ++foundAt; } } else { @@ -2206,20 +2205,26 @@ Storage::Storage(const LogBuilderPtr& defaultLogBuilder) : m_registeredLoggers(new base::RegisteredLoggers(defaultLogBuilder)), m_flags(ELPP_DEFAULT_LOGGING_FLAGS), m_vRegistry(new base::VRegistry(0, &m_flags)), + #if ELPP_ASYNC_LOGGING m_asyncLogQueue(new base::AsyncLogQueue()), m_asyncDispatchWorker(asyncDispatchWorker), #endif // ELPP_ASYNC_LOGGING + m_preRollOutCallback(base::defaultPreRollOutCallback) { // Register default logger m_registeredLoggers->get(std::string(base::consts::kDefaultLoggerId)); // We register default logger anyway (worse case it's not going to register) just in case m_registeredLoggers->get("default"); + +#if defined(ELPP_FEATURE_ALL) || defined(ELPP_FEATURE_PERFORMANCE_TRACKING) // Register performance logger and reconfigure format Logger* performanceLogger = m_registeredLoggers->get(std::string(base::consts::kPerformanceLoggerId)); m_registeredLoggers->get("performance"); performanceLogger->configurations()->setGlobally(ConfigurationType::Format, std::string("%datetime %level %msg")); performanceLogger->reconfigure(); +#endif // defined(ELPP_FEATURE_ALL) || defined(ELPP_FEATURE_PERFORMANCE_TRACKING) + #if defined(ELPP_SYSLOG) // Register syslog logger and reconfigure format Logger* sysLogLogger = m_registeredLoggers->get(std::string(base::consts::kSysLogLoggerId)); @@ -2337,6 +2342,19 @@ base::threading::Mutex& LogDispatchCallback::fileHandle(const LogDispatchData* d namespace base { // DefaultLogDispatchCallback +const char* convertToChar(Level level) { + // Do not use switch over strongly typed enums because Intel C++ compilers dont support them yet. + if (level == Level::Global) return "G"; + if (level == Level::Debug) return "D"; + if (level == Level::Info) return "I"; + if (level == Level::Warning) return "W"; + if (level == Level::Error) return "E"; + if (level == Level::Fatal) return "F"; + if (level == Level::Verbose) return "V"; + if (level == Level::Trace) return "T"; + return "?"; +} + void DefaultLogDispatchCallback::handle(const LogDispatchData* data) { #if defined(ELPP_THREAD_SAFE) #if 0 @@ -2345,11 +2363,15 @@ void DefaultLogDispatchCallback::handle(const LogDispatchData* data) { #endif #endif m_data = data; - dispatch(m_data->logMessage()->logger()->logBuilder()->build(m_data->logMessage(), + base::TypedConfigurations* tc = m_data->logMessage()->logger()->typedConfigurations(); + const base::LogFormat* logFormat = &tc->logFormat(m_data->logMessage()->level()); + dispatch(base::utils::DateTime::getDateTime(logFormat->dateTimeFormat().c_str(), &tc->subsecondPrecision(m_data->logMessage()->level())) + + "\t" + convertToChar(m_data->logMessage()->level()) + " " + m_data->logMessage()->message() + "\n", + m_data->logMessage()->logger()->logBuilder()->build(m_data->logMessage(), m_data->dispatchAction() == base::DispatchAction::NormalLog || m_data->dispatchAction() == base::DispatchAction::FileOnlyLog)); } -void DefaultLogDispatchCallback::dispatch(base::type::string_t&& logLine) { +void DefaultLogDispatchCallback::dispatch(base::type::string_t&& rawLine, base::type::string_t&& logLine) { if (m_data->dispatchAction() == base::DispatchAction::NormalLog || m_data->dispatchAction() == base::DispatchAction::FileOnlyLog) { if (m_data->logMessage()->logger()->m_typedConfigurations->toFile(m_data->logMessage()->level())) { base::type::fstream_t* fs = m_data->logMessage()->logger()->m_typedConfigurations->fileStream( @@ -2376,8 +2398,8 @@ void DefaultLogDispatchCallback::dispatch(base::type::string_t&& logLine) { if (m_data->dispatchAction() != base::DispatchAction::FileOnlyLog) { if (m_data->logMessage()->logger()->m_typedConfigurations->toStandardOutput(m_data->logMessage()->level())) { if (ELPP->hasFlag(LoggingFlag::ColoredTerminalOutput)) - m_data->logMessage()->logger()->logBuilder()->convertToColoredOutput(&logLine, m_data->logMessage()->level()); - ELPP_COUT << ELPP_COUT_LINE(logLine); + m_data->logMessage()->logger()->logBuilder()->convertToColoredOutput(&rawLine, m_data->logMessage()->level()); + ELPP_COUT << ELPP_COUT_LINE(rawLine); } } } @@ -3279,11 +3301,11 @@ const std::string &Loggers::getFilenameCommonPrefix() { // VersionInfo const std::string VersionInfo::version(void) { - return std::string("9.96.5"); + return std::string("9.96.7"); } /// @brief Release date of current version const std::string VersionInfo::releaseDate(void) { - return std::string("07-09-2018 0950hrs"); + return std::string("24-11-2018 0728hrs"); } } // namespace el diff --git a/external/easylogging++/easylogging++.h b/external/easylogging++/easylogging++.h index d9a2dc3d1..f0d8d5df7 100644 --- a/external/easylogging++/easylogging++.h +++ b/external/easylogging++/easylogging++.h @@ -1,17 +1,16 @@ // // Bismillah ar-Rahmaan ar-Raheem // -// Easylogging++ v9.96.5 +// Easylogging++ v9.96.7 // Single-header only, cross-platform logging library for C++ applications // -// Copyright (c) 2012-2018 Muflihun Labs +// Copyright (c) 2012-2018 Zuhd Web Services // Copyright (c) 2012-2018 @abumusamq // // This library is released under the MIT Licence. -// https://github.com/muflihun/easyloggingpp/blob/master/LICENSE +// https://github.com/zuhd-org/easyloggingpp/blob/master/LICENSE // -// https://github.com/muflihun/easyloggingpp -// https://muflihun.github.io/easyloggingpp +// https://zuhd.org // http://muflihun.com // @@ -758,10 +757,12 @@ static const char* kDefaultLoggerId = ELPP_DEFAULT_L static const char* kDefaultLoggerId = "default"; #endif +#if defined(ELPP_FEATURE_ALL) || defined(ELPP_FEATURE_PERFORMANCE_TRACKING) #ifdef ELPP_DEFAULT_PERFORMANCE_LOGGER static const char* kPerformanceLoggerId = ELPP_DEFAULT_PERFORMANCE_LOGGER; #else static const char* kPerformanceLoggerId = "performance"; +#endif // ELPP_DEFAULT_PERFORMANCE_LOGGER #endif #if defined(ELPP_SYSLOG) @@ -2776,7 +2777,7 @@ class DefaultLogDispatchCallback : public LogDispatchCallback { void handle(const LogDispatchData* data); private: const LogDispatchData* m_data; - void dispatch(base::type::string_t&& logLine); + void dispatch(base::type::string_t&& rawLine, base::type::string_t&& logLine); }; #if ELPP_ASYNC_LOGGING class AsyncLogDispatchCallback : public LogDispatchCallback { @@ -3836,7 +3837,7 @@ class Helpers : base::StaticClass { return ELPP->hasCustomFormatSpecifier(formatSpecifier); } static inline void validateFileRolling(Logger* logger, Level level) { - if (logger == nullptr) return; + if (ELPP == nullptr || logger == nullptr) return; logger->m_typedConfigurations->validateFileRolling(level, ELPP->preRollOutCallback()); } }; diff --git a/src/blockchain_db/berkeleydb/db_bdb.cpp b/src/blockchain_db/berkeleydb/db_bdb.cpp index 3eb24494f..d138a1e7e 100644 --- a/src/blockchain_db/berkeleydb/db_bdb.cpp +++ b/src/blockchain_db/berkeleydb/db_bdb.cpp @@ -1654,36 +1654,6 @@ tx_out_index BlockchainBDB::get_output_tx_and_index(const uint64_t& amount, cons return indices[0]; } -std::vector<uint64_t> BlockchainBDB::get_tx_output_indices(const crypto::hash& h) const -{ - LOG_PRINT_L3("BlockchainBDB::" << __func__); - check_open(); - std::vector<uint64_t> index_vec; - - bdb_cur cur(DB_DEFAULT_TX, m_tx_outputs); - - Dbt_copy<crypto::hash> k(h); - Dbt_copy<uint32_t> v; - auto result = cur->get(&k, &v, DB_SET); - if (result == DB_NOTFOUND) - throw1(OUTPUT_DNE("Attempting to get an output by tx hash and tx index, but output not found")); - else if (result) - throw0(DB_ERROR("DB error attempting to get an output")); - - db_recno_t num_elems = 0; - cur->count(&num_elems, 0); - - for (uint64_t i = 0; i < num_elems; ++i) - { - index_vec.push_back(v); - cur->get(&k, &v, DB_NEXT_DUP); - } - - cur.close(); - - return index_vec; -} - std::vector<uint64_t> BlockchainBDB::get_tx_amount_output_indices(const crypto::hash& h) const { LOG_PRINT_L3("BlockchainBDB::" << __func__); diff --git a/src/blockchain_db/berkeleydb/db_bdb.h b/src/blockchain_db/berkeleydb/db_bdb.h index 04a33d7c6..3ae90efe1 100644 --- a/src/blockchain_db/berkeleydb/db_bdb.h +++ b/src/blockchain_db/berkeleydb/db_bdb.h @@ -312,7 +312,6 @@ public: virtual tx_out_index get_output_tx_and_index(const uint64_t& amount, const uint64_t& index); virtual void get_output_tx_and_index(const uint64_t& amount, const std::vector<uint64_t> &offsets, std::vector<tx_out_index> &indices); - virtual std::vector<uint64_t> get_tx_output_indices(const crypto::hash& h) const; virtual std::vector<uint64_t> get_tx_amount_output_indices(const crypto::hash& h) const; virtual bool has_key_image(const crypto::key_image& img) const; diff --git a/src/blockchain_db/blockchain_db.cpp b/src/blockchain_db/blockchain_db.cpp index d772bf4bb..2b039f557 100644 --- a/src/blockchain_db/blockchain_db.cpp +++ b/src/blockchain_db/blockchain_db.cpp @@ -211,8 +211,6 @@ uint64_t BlockchainDB::add_block( const std::pair<block, blobdata>& blck if (blk.tx_hashes.size() != txs.size()) throw std::runtime_error("Inconsistent tx/hashes sizes"); - block_txn_start(false); - TIME_MEASURE_START(time1); crypto::hash blk_hash = get_block_hash(blk); TIME_MEASURE_FINISH(time1); @@ -252,8 +250,6 @@ uint64_t BlockchainDB::add_block( const std::pair<block, blobdata>& blck m_hardfork->add(blk, prev_height); - block_txn_stop(); - ++num_calls; return prev_height; diff --git a/src/blockchain_db/blockchain_db.h b/src/blockchain_db/blockchain_db.h index d2fe39fc2..567be6a65 100644 --- a/src/blockchain_db/blockchain_db.h +++ b/src/blockchain_db/blockchain_db.h @@ -770,9 +770,12 @@ public: */ virtual void set_batch_transactions(bool) = 0; - virtual void block_txn_start(bool readonly=false) = 0; - virtual void block_txn_stop() = 0; - virtual void block_txn_abort() = 0; + virtual void block_wtxn_start() = 0; + virtual void block_wtxn_stop() = 0; + virtual void block_wtxn_abort() = 0; + virtual bool block_rtxn_start() const = 0; + virtual void block_rtxn_stop() const = 0; + virtual void block_rtxn_abort() const = 0; virtual void set_hard_fork(HardFork* hf); @@ -1514,6 +1517,20 @@ public: virtual bool check_pruning() = 0; /** + * @brief get the max block size + */ + virtual uint64_t get_max_block_size() = 0; + + /** + * @brief add a new max block size + * + * The max block size will be the maximum of sz and the current block size + * + * @param: sz the block size + */ + + virtual void add_max_block_size(uint64_t sz) = 0; + /** * @brief runs a function over all txpool transactions * * The subclass should run the passed function for each txpool tx it has @@ -1685,6 +1702,52 @@ public: }; // class BlockchainDB +class db_txn_guard +{ +public: + db_txn_guard(BlockchainDB *db, bool readonly): db(db), readonly(readonly), active(false) + { + if (readonly) + { + active = db->block_rtxn_start(); + } + else + { + db->block_wtxn_start(); + active = true; + } + } + virtual ~db_txn_guard() + { + if (active) + stop(); + } + void stop() + { + if (readonly) + db->block_rtxn_stop(); + else + db->block_wtxn_stop(); + active = false; + } + void abort() + { + if (readonly) + db->block_rtxn_abort(); + else + db->block_wtxn_abort(); + active = false; + } + +private: + BlockchainDB *db; + bool readonly; + bool active; +}; + +class db_rtxn_guard: public db_txn_guard { public: db_rtxn_guard(BlockchainDB *db): db_txn_guard(db, true) {} }; +class db_wtxn_guard: public db_txn_guard { public: db_wtxn_guard(BlockchainDB *db): db_txn_guard(db, false) {} }; + BlockchainDB *new_db(const std::string& db_type); } // namespace cryptonote diff --git a/src/blockchain_db/lmdb/db_lmdb.cpp b/src/blockchain_db/lmdb/db_lmdb.cpp index 9f71fd068..340434888 100644 --- a/src/blockchain_db/lmdb/db_lmdb.cpp +++ b/src/blockchain_db/lmdb/db_lmdb.cpp @@ -2513,6 +2513,58 @@ std::vector<uint64_t> BlockchainLMDB::get_block_info_64bit_fields(uint64_t start return ret; } +uint64_t BlockchainLMDB::get_max_block_size() +{ + LOG_PRINT_L3("BlockchainLMDB::" << __func__); + check_open(); + + TXN_PREFIX_RDONLY(); + RCURSOR(properties) + MDB_val_str(k, "max_block_size"); + MDB_val v; + int result = mdb_cursor_get(m_cur_properties, &k, &v, MDB_SET); + if (result == MDB_NOTFOUND) + return std::numeric_limits<uint64_t>::max(); + if (result) + throw0(DB_ERROR(lmdb_error("Failed to retrieve max block size: ", result).c_str())); + if (v.mv_size != sizeof(uint64_t)) + throw0(DB_ERROR("Failed to retrieve or create max block size: unexpected value size")); + uint64_t max_block_size; + memcpy(&max_block_size, v.mv_data, sizeof(max_block_size)); + TXN_POSTFIX_RDONLY(); + return max_block_size; +} + +void BlockchainLMDB::add_max_block_size(uint64_t sz) +{ + LOG_PRINT_L3("BlockchainLMDB::" << __func__); + check_open(); + mdb_txn_cursors *m_cursors = &m_wcursors; + + CURSOR(properties) + + MDB_val_str(k, "max_block_size"); + MDB_val v; + int result = mdb_cursor_get(m_cur_properties, &k, &v, MDB_SET); + if (result && result != MDB_NOTFOUND) + throw0(DB_ERROR(lmdb_error("Failed to retrieve max block size: ", result).c_str())); + uint64_t max_block_size = 0; + if (result == 0) + { + if (v.mv_size != sizeof(uint64_t)) + throw0(DB_ERROR("Failed to retrieve or create max block size: unexpected value size")); + memcpy(&max_block_size, v.mv_data, sizeof(max_block_size)); + } + if (sz > max_block_size) + max_block_size = sz; + v.mv_data = (void*)&max_block_size; + v.mv_size = sizeof(max_block_size); + result = mdb_cursor_put(m_cur_properties, &k, &v, 0); + if (result) + throw0(DB_ERROR(lmdb_error("Failed to set max_block_size: ", result).c_str())); +} + + std::vector<uint64_t> BlockchainLMDB::get_block_weights(uint64_t start_height, size_t count) const { return get_block_info_64bit_fields(start_height, count, offsetof(mdb_block_info, bi_weight)); @@ -3559,16 +3611,15 @@ void BlockchainLMDB::block_rtxn_stop() const memset(&m_tinfo->m_ti_rflags, 0, sizeof(m_tinfo->m_ti_rflags)); } -void BlockchainLMDB::block_txn_start(bool readonly) +bool BlockchainLMDB::block_rtxn_start() const { - if (readonly) - { - MDB_txn *mtxn; - mdb_txn_cursors *mcur; - block_rtxn_start(&mtxn, &mcur); - return; - } + MDB_txn *mtxn; + mdb_txn_cursors *mcur; + return block_rtxn_start(&mtxn, &mcur); +} +void BlockchainLMDB::block_wtxn_start() +{ LOG_PRINT_L3("BlockchainLMDB::" << __func__); // Distinguish the exceptions here from exceptions that would be thrown while // using the txn and committing it. @@ -3600,10 +3651,13 @@ void BlockchainLMDB::block_txn_start(bool readonly) throw0(DB_ERROR_TXN_START((std::string("Attempted to start new write txn when batch txn already exists in ")+__FUNCTION__).c_str())); } -void BlockchainLMDB::block_txn_stop() +void BlockchainLMDB::block_wtxn_stop() { LOG_PRINT_L3("BlockchainLMDB::" << __func__); - if (m_write_txn && m_writer == boost::this_thread::get_id()) + if (!m_write_txn) + throw0(DB_ERROR_TXN_START((std::string("Attempted to stop write txn when no such txn exists in ")+__FUNCTION__).c_str())); + if (m_writer != boost::this_thread::get_id()) + throw0(DB_ERROR_TXN_START((std::string("Attempted to stop write txn from the wrong thread in ")+__FUNCTION__).c_str())); { if (! m_batch_active) { @@ -3617,40 +3671,31 @@ void BlockchainLMDB::block_txn_stop() memset(&m_wcursors, 0, sizeof(m_wcursors)); } } - else if (m_tinfo->m_ti_rtxn) - { - mdb_txn_reset(m_tinfo->m_ti_rtxn); - memset(&m_tinfo->m_ti_rflags, 0, sizeof(m_tinfo->m_ti_rflags)); - } } -void BlockchainLMDB::block_txn_abort() +void BlockchainLMDB::block_wtxn_abort() { LOG_PRINT_L3("BlockchainLMDB::" << __func__); - if (m_write_txn && m_writer == boost::this_thread::get_id()) - { - if (! m_batch_active) - { - delete m_write_txn; - m_write_txn = nullptr; - memset(&m_wcursors, 0, sizeof(m_wcursors)); - } - } - else if (m_tinfo->m_ti_rtxn) - { - mdb_txn_reset(m_tinfo->m_ti_rtxn); - memset(&m_tinfo->m_ti_rflags, 0, sizeof(m_tinfo->m_ti_rflags)); - } - else + if (!m_write_txn) + throw0(DB_ERROR_TXN_START((std::string("Attempted to abort write txn when no such txn exists in ")+__FUNCTION__).c_str())); + if (m_writer != boost::this_thread::get_id()) + throw0(DB_ERROR_TXN_START((std::string("Attempted to abort write txn from the wrong thread in ")+__FUNCTION__).c_str())); + + if (! m_batch_active) { - // This would probably mean an earlier exception was caught, but then we - // proceeded further than we should have. - throw0(DB_ERROR((std::string("BlockchainLMDB::") + __func__ + - std::string(": block-level DB transaction abort called when write txn doesn't exist") - ).c_str())); + delete m_write_txn; + m_write_txn = nullptr; + memset(&m_wcursors, 0, sizeof(m_wcursors)); } } +void BlockchainLMDB::block_rtxn_abort() const +{ + LOG_PRINT_L3("BlockchainLMDB::" << __func__); + mdb_txn_reset(m_tinfo->m_ti_rtxn); + memset(&m_tinfo->m_ti_rflags, 0, sizeof(m_tinfo->m_ti_rflags)); +} + uint64_t BlockchainLMDB::add_block(const std::pair<block, blobdata>& blk, size_t block_weight, uint64_t long_term_block_weight, const difficulty_type& cumulative_difficulty, const uint64_t& coins_generated, const std::vector<std::pair<transaction, blobdata>>& txs) { @@ -3676,11 +3721,6 @@ uint64_t BlockchainLMDB::add_block(const std::pair<block, blobdata>& blk, size_t { throw; } - catch (...) - { - block_txn_abort(); - throw; - } return ++m_height; } @@ -3690,16 +3730,16 @@ void BlockchainLMDB::pop_block(block& blk, std::vector<transaction>& txs) LOG_PRINT_L3("BlockchainLMDB::" << __func__); check_open(); - block_txn_start(false); + block_wtxn_start(); try { BlockchainDB::pop_block(blk, txs); - block_txn_stop(); + block_wtxn_stop(); } catch (...) { - block_txn_abort(); + block_wtxn_abort(); throw; } } diff --git a/src/blockchain_db/lmdb/db_lmdb.h b/src/blockchain_db/lmdb/db_lmdb.h index 2f89b77ac..4b46f081e 100644 --- a/src/blockchain_db/lmdb/db_lmdb.h +++ b/src/blockchain_db/lmdb/db_lmdb.h @@ -310,11 +310,14 @@ public: virtual void batch_stop(); virtual void batch_abort(); - virtual void block_txn_start(bool readonly); - virtual void block_txn_stop(); - virtual void block_txn_abort(); - virtual bool block_rtxn_start(MDB_txn **mtxn, mdb_txn_cursors **mcur) const; + virtual void block_wtxn_start(); + virtual void block_wtxn_stop(); + virtual void block_wtxn_abort(); + virtual bool block_rtxn_start() const; virtual void block_rtxn_stop() const; + virtual void block_rtxn_abort() const; + + bool block_rtxn_start(MDB_txn **mtxn, mdb_txn_cursors **mcur) const; virtual void pop_block(block& blk, std::vector<transaction>& txs); @@ -400,6 +403,9 @@ private: std::vector<uint64_t> get_block_info_64bit_fields(uint64_t start_height, size_t count, off_t offset) const; + uint64_t get_max_block_size(); + void add_max_block_size(uint64_t sz); + // fix up anything that may be wrong due to past bugs virtual void fixup(); diff --git a/src/blockchain_db/testdb.h b/src/blockchain_db/testdb.h index 7916364c5..6c97713d5 100644 --- a/src/blockchain_db/testdb.h +++ b/src/blockchain_db/testdb.h @@ -42,94 +42,97 @@ namespace cryptonote class BaseTestDB: public cryptonote::BlockchainDB { public: BaseTestDB() {} - virtual void open(const std::string& filename, const int db_flags = 0) { } - virtual void close() {} - virtual void sync() {} - virtual void safesyncmode(const bool onoff) {} - virtual void reset() {} - virtual std::vector<std::string> get_filenames() const { return std::vector<std::string>(); } - virtual bool remove_data_file(const std::string& folder) const { return true; } - virtual std::string get_db_name() const { return std::string(); } - virtual bool lock() { return true; } - virtual void unlock() { } - virtual bool batch_start(uint64_t batch_num_blocks=0, uint64_t batch_bytes=0) { return true; } - virtual void batch_stop() {} - virtual void set_batch_transactions(bool) {} - virtual void block_txn_start(bool readonly=false) {} - virtual void block_txn_stop() {} - virtual void block_txn_abort() {} - virtual void drop_hard_fork_info() {} - virtual bool block_exists(const crypto::hash& h, uint64_t *height) const { return false; } - virtual cryptonote::blobdata get_block_blob_from_height(const uint64_t& height) const { return cryptonote::t_serializable_object_to_blob(get_block_from_height(height)); } - virtual cryptonote::blobdata get_block_blob(const crypto::hash& h) const { return cryptonote::blobdata(); } - virtual bool get_tx_blob(const crypto::hash& h, cryptonote::blobdata &tx) const { return false; } - virtual bool get_pruned_tx_blob(const crypto::hash& h, cryptonote::blobdata &tx) const { return false; } - virtual bool get_prunable_tx_blob(const crypto::hash& h, cryptonote::blobdata &tx) const { return false; } - virtual bool get_prunable_tx_hash(const crypto::hash& tx_hash, crypto::hash &prunable_hash) const { return false; } - virtual uint64_t get_block_height(const crypto::hash& h) const { return 0; } - virtual cryptonote::block_header get_block_header(const crypto::hash& h) const { return cryptonote::block_header(); } - virtual uint64_t get_block_timestamp(const uint64_t& height) const { return 0; } - virtual std::vector<uint64_t> get_block_cumulative_rct_outputs(const std::vector<uint64_t> &heights) const { return {}; } - virtual uint64_t get_top_block_timestamp() const { return 0; } - virtual size_t get_block_weight(const uint64_t& height) const { return 128; } - virtual std::vector<uint64_t> get_block_weights(uint64_t start_height, size_t count) const { return {}; } - virtual cryptonote::difficulty_type get_block_cumulative_difficulty(const uint64_t& height) const { return 10; } - virtual cryptonote::difficulty_type get_block_difficulty(const uint64_t& height) const { return 0; } - virtual uint64_t get_block_already_generated_coins(const uint64_t& height) const { return 10000000000; } - virtual uint64_t get_block_long_term_weight(const uint64_t& height) const { return 128; } - virtual std::vector<uint64_t> get_long_term_block_weights(uint64_t start_height, size_t count) const { return {}; } - virtual crypto::hash get_block_hash_from_height(const uint64_t& height) const { return crypto::hash(); } - virtual std::vector<cryptonote::block> get_blocks_range(const uint64_t& h1, const uint64_t& h2) const { return std::vector<cryptonote::block>(); } - virtual std::vector<crypto::hash> get_hashes_range(const uint64_t& h1, const uint64_t& h2) const { return std::vector<crypto::hash>(); } - virtual crypto::hash top_block_hash(uint64_t *block_height = NULL) const { if (block_height) *block_height = 0; return crypto::hash(); } - virtual cryptonote::block get_top_block() const { return cryptonote::block(); } - virtual uint64_t height() const { return 1; } - virtual bool tx_exists(const crypto::hash& h) const { return false; } - virtual bool tx_exists(const crypto::hash& h, uint64_t& tx_index) const { return false; } - virtual uint64_t get_tx_unlock_time(const crypto::hash& h) const { return 0; } - virtual cryptonote::transaction get_tx(const crypto::hash& h) const { return cryptonote::transaction(); } - virtual bool get_tx(const crypto::hash& h, cryptonote::transaction &tx) const { return false; } - virtual uint64_t get_tx_count() const { return 0; } - virtual std::vector<cryptonote::transaction> get_tx_list(const std::vector<crypto::hash>& hlist) const { return std::vector<cryptonote::transaction>(); } - virtual uint64_t get_tx_block_height(const crypto::hash& h) const { return 0; } - virtual uint64_t get_num_outputs(const uint64_t& amount) const { return 1; } - virtual uint64_t get_indexing_base() const { return 0; } - virtual cryptonote::output_data_t get_output_key(const uint64_t& amount, const uint64_t& index, bool include_commitmemt) const { return cryptonote::output_data_t(); } - virtual cryptonote::tx_out_index get_output_tx_and_index_from_global(const uint64_t& index) const { return cryptonote::tx_out_index(); } - virtual cryptonote::tx_out_index get_output_tx_and_index(const uint64_t& amount, const uint64_t& index) const { return cryptonote::tx_out_index(); } - virtual void get_output_tx_and_index(const uint64_t& amount, const std::vector<uint64_t> &offsets, std::vector<cryptonote::tx_out_index> &indices) const {} - virtual void get_output_key(const epee::span<const uint64_t> &amounts, const std::vector<uint64_t> &offsets, std::vector<cryptonote::output_data_t> &outputs, bool allow_partial = false) const {} - virtual bool can_thread_bulk_indices() const { return false; } - virtual std::vector<uint64_t> get_tx_output_indices(const crypto::hash& h) const { return std::vector<uint64_t>(); } - virtual std::vector<std::vector<uint64_t>> get_tx_amount_output_indices(const uint64_t tx_index, size_t n_txes) const { return std::vector<std::vector<uint64_t>>(); } - virtual bool has_key_image(const crypto::key_image& img) const { return false; } - virtual void remove_block() { } - virtual uint64_t add_transaction_data(const crypto::hash& blk_hash, const std::pair<cryptonote::transaction, cryptonote::blobdata>& tx, const crypto::hash& tx_hash, const crypto::hash& tx_prunable_hash) {return 0;} - virtual void remove_transaction_data(const crypto::hash& tx_hash, const cryptonote::transaction& tx) {} - virtual uint64_t add_output(const crypto::hash& tx_hash, const cryptonote::tx_out& tx_output, const uint64_t& local_index, const uint64_t unlock_time, const rct::key *commitment) {return 0;} - virtual void add_tx_amount_output_indices(const uint64_t tx_index, const std::vector<uint64_t>& amount_output_indices) {} - virtual void add_spent_key(const crypto::key_image& k_image) {} - virtual void remove_spent_key(const crypto::key_image& k_image) {} + virtual void open(const std::string& filename, const int db_flags = 0) override { } + virtual void close() override {} + virtual void sync() override {} + virtual void safesyncmode(const bool onoff) override {} + virtual void reset() override {} + virtual std::vector<std::string> get_filenames() const override { return std::vector<std::string>(); } + virtual bool remove_data_file(const std::string& folder) const override { return true; } + virtual std::string get_db_name() const override { return std::string(); } + virtual bool lock() override { return true; } + virtual void unlock() override { } + virtual bool batch_start(uint64_t batch_num_blocks=0, uint64_t batch_bytes=0) override { return true; } + virtual void batch_stop() override {} + virtual void set_batch_transactions(bool) override {} + virtual void block_wtxn_start() override {} + virtual void block_wtxn_stop() override {} + virtual void block_wtxn_abort() override {} + virtual bool block_rtxn_start() const override { return true; } + virtual void block_rtxn_stop() const override {} + virtual void block_rtxn_abort() const override {} - virtual bool for_all_key_images(std::function<bool(const crypto::key_image&)>) const { return true; } - virtual bool for_blocks_range(const uint64_t&, const uint64_t&, std::function<bool(uint64_t, const crypto::hash&, const cryptonote::block&)>) const { return true; } - virtual bool for_all_transactions(std::function<bool(const crypto::hash&, const cryptonote::transaction&)>, bool pruned) const { return true; } - virtual bool for_all_outputs(std::function<bool(uint64_t amount, const crypto::hash &tx_hash, uint64_t height, size_t tx_idx)> f) const { return true; } - virtual bool for_all_outputs(uint64_t amount, const std::function<bool(uint64_t height)> &f) const { return true; } - virtual bool is_read_only() const { return false; } - virtual std::map<uint64_t, std::tuple<uint64_t, uint64_t, uint64_t>> get_output_histogram(const std::vector<uint64_t> &amounts, bool unlocked, uint64_t recent_cutoff, uint64_t min_count) const { return std::map<uint64_t, std::tuple<uint64_t, uint64_t, uint64_t>>(); } - virtual bool get_output_distribution(uint64_t amount, uint64_t from_height, uint64_t to_height, std::vector<uint64_t> &distribution, uint64_t &base) const { return false; } + virtual void drop_hard_fork_info() override {} + virtual bool block_exists(const crypto::hash& h, uint64_t *height) const override { return false; } + virtual cryptonote::blobdata get_block_blob_from_height(const uint64_t& height) const override { return cryptonote::t_serializable_object_to_blob(get_block_from_height(height)); } + virtual cryptonote::blobdata get_block_blob(const crypto::hash& h) const override { return cryptonote::blobdata(); } + virtual bool get_tx_blob(const crypto::hash& h, cryptonote::blobdata &tx) const override { return false; } + virtual bool get_pruned_tx_blob(const crypto::hash& h, cryptonote::blobdata &tx) const override { return false; } + virtual bool get_prunable_tx_blob(const crypto::hash& h, cryptonote::blobdata &tx) const override { return false; } + virtual bool get_prunable_tx_hash(const crypto::hash& tx_hash, crypto::hash &prunable_hash) const override { return false; } + virtual uint64_t get_block_height(const crypto::hash& h) const override { return 0; } + virtual cryptonote::block_header get_block_header(const crypto::hash& h) const override { return cryptonote::block_header(); } + virtual uint64_t get_block_timestamp(const uint64_t& height) const override { return 0; } + virtual std::vector<uint64_t> get_block_cumulative_rct_outputs(const std::vector<uint64_t> &heights) const override { return {}; } + virtual uint64_t get_top_block_timestamp() const override { return 0; } + virtual size_t get_block_weight(const uint64_t& height) const override { return 128; } + virtual std::vector<uint64_t> get_block_weights(uint64_t start_height, size_t count) const override { return {}; } + virtual cryptonote::difficulty_type get_block_cumulative_difficulty(const uint64_t& height) const override { return 10; } + virtual cryptonote::difficulty_type get_block_difficulty(const uint64_t& height) const override { return 0; } + virtual uint64_t get_block_already_generated_coins(const uint64_t& height) const override { return 10000000000; } + virtual uint64_t get_block_long_term_weight(const uint64_t& height) const override { return 128; } + virtual std::vector<uint64_t> get_long_term_block_weights(uint64_t start_height, size_t count) const override { return {}; } + virtual crypto::hash get_block_hash_from_height(const uint64_t& height) const override { return crypto::hash(); } + virtual std::vector<cryptonote::block> get_blocks_range(const uint64_t& h1, const uint64_t& h2) const override { return std::vector<cryptonote::block>(); } + virtual std::vector<crypto::hash> get_hashes_range(const uint64_t& h1, const uint64_t& h2) const override { return std::vector<crypto::hash>(); } + virtual crypto::hash top_block_hash(uint64_t *block_height = NULL) const override { if (block_height) *block_height = 0; return crypto::hash(); } + virtual cryptonote::block get_top_block() const override { return cryptonote::block(); } + virtual uint64_t height() const override { return 1; } + virtual bool tx_exists(const crypto::hash& h) const override { return false; } + virtual bool tx_exists(const crypto::hash& h, uint64_t& tx_index) const override { return false; } + virtual uint64_t get_tx_unlock_time(const crypto::hash& h) const override { return 0; } + virtual cryptonote::transaction get_tx(const crypto::hash& h) const override { return cryptonote::transaction(); } + virtual bool get_tx(const crypto::hash& h, cryptonote::transaction &tx) const override { return false; } + virtual uint64_t get_tx_count() const override { return 0; } + virtual std::vector<cryptonote::transaction> get_tx_list(const std::vector<crypto::hash>& hlist) const override { return std::vector<cryptonote::transaction>(); } + virtual uint64_t get_tx_block_height(const crypto::hash& h) const override { return 0; } + virtual uint64_t get_num_outputs(const uint64_t& amount) const override { return 1; } + virtual uint64_t get_indexing_base() const override { return 0; } + virtual cryptonote::output_data_t get_output_key(const uint64_t& amount, const uint64_t& index, bool include_commitmemt) const override { return cryptonote::output_data_t(); } + virtual cryptonote::tx_out_index get_output_tx_and_index_from_global(const uint64_t& index) const override { return cryptonote::tx_out_index(); } + virtual cryptonote::tx_out_index get_output_tx_and_index(const uint64_t& amount, const uint64_t& index) const override { return cryptonote::tx_out_index(); } + virtual void get_output_tx_and_index(const uint64_t& amount, const std::vector<uint64_t> &offsets, std::vector<cryptonote::tx_out_index> &indices) const override {} + virtual void get_output_key(const epee::span<const uint64_t> &amounts, const std::vector<uint64_t> &offsets, std::vector<cryptonote::output_data_t> &outputs, bool allow_partial = false) const override {} + virtual bool can_thread_bulk_indices() const override { return false; } + virtual std::vector<std::vector<uint64_t>> get_tx_amount_output_indices(const uint64_t tx_index, size_t n_txes) const override { return std::vector<std::vector<uint64_t>>(); } + virtual bool has_key_image(const crypto::key_image& img) const override { return false; } + virtual void remove_block() override { } + virtual uint64_t add_transaction_data(const crypto::hash& blk_hash, const std::pair<cryptonote::transaction, cryptonote::blobdata>& tx, const crypto::hash& tx_hash, const crypto::hash& tx_prunable_hash) override {return 0;} + virtual void remove_transaction_data(const crypto::hash& tx_hash, const cryptonote::transaction& tx) override {} + virtual uint64_t add_output(const crypto::hash& tx_hash, const cryptonote::tx_out& tx_output, const uint64_t& local_index, const uint64_t unlock_time, const rct::key *commitment) override {return 0;} + virtual void add_tx_amount_output_indices(const uint64_t tx_index, const std::vector<uint64_t>& amount_output_indices) override {} + virtual void add_spent_key(const crypto::key_image& k_image) override {} + virtual void remove_spent_key(const crypto::key_image& k_image) override {} - virtual void add_txpool_tx(const crypto::hash &txid, const cryptonote::blobdata &blob, const cryptonote::txpool_tx_meta_t& details) {} - virtual void update_txpool_tx(const crypto::hash &txid, const cryptonote::txpool_tx_meta_t& details) {} - virtual uint64_t get_txpool_tx_count(bool include_unrelayed_txes = true) const { return 0; } - virtual bool txpool_has_tx(const crypto::hash &txid) const { return false; } - virtual void remove_txpool_tx(const crypto::hash& txid) {} - virtual bool get_txpool_tx_meta(const crypto::hash& txid, cryptonote::txpool_tx_meta_t &meta) const { return false; } - virtual bool get_txpool_tx_blob(const crypto::hash& txid, cryptonote::blobdata &bd) const { return false; } - virtual uint64_t get_database_size() const { return 0; } - virtual cryptonote::blobdata get_txpool_tx_blob(const crypto::hash& txid) const { return ""; } - virtual bool for_all_txpool_txes(std::function<bool(const crypto::hash&, const cryptonote::txpool_tx_meta_t&, const cryptonote::blobdata*)>, bool include_blob = false, bool include_unrelayed_txes = false) const { return false; } + virtual bool for_all_key_images(std::function<bool(const crypto::key_image&)>) const override { return true; } + virtual bool for_blocks_range(const uint64_t&, const uint64_t&, std::function<bool(uint64_t, const crypto::hash&, const cryptonote::block&)>) const override { return true; } + virtual bool for_all_transactions(std::function<bool(const crypto::hash&, const cryptonote::transaction&)>, bool pruned) const override { return true; } + virtual bool for_all_outputs(std::function<bool(uint64_t amount, const crypto::hash &tx_hash, uint64_t height, size_t tx_idx)> f) const override { return true; } + virtual bool for_all_outputs(uint64_t amount, const std::function<bool(uint64_t height)> &f) const override { return true; } + virtual bool is_read_only() const override { return false; } + virtual std::map<uint64_t, std::tuple<uint64_t, uint64_t, uint64_t>> get_output_histogram(const std::vector<uint64_t> &amounts, bool unlocked, uint64_t recent_cutoff, uint64_t min_count) const override { return std::map<uint64_t, std::tuple<uint64_t, uint64_t, uint64_t>>(); } + virtual bool get_output_distribution(uint64_t amount, uint64_t from_height, uint64_t to_height, std::vector<uint64_t> &distribution, uint64_t &base) const override { return false; } + + virtual void add_txpool_tx(const crypto::hash &txid, const cryptonote::blobdata &blob, const cryptonote::txpool_tx_meta_t& details) override {} + virtual void update_txpool_tx(const crypto::hash &txid, const cryptonote::txpool_tx_meta_t& details) override {} + virtual uint64_t get_txpool_tx_count(bool include_unrelayed_txes = true) const override { return 0; } + virtual bool txpool_has_tx(const crypto::hash &txid) const override { return false; } + virtual void remove_txpool_tx(const crypto::hash& txid) override {} + virtual bool get_txpool_tx_meta(const crypto::hash& txid, cryptonote::txpool_tx_meta_t &meta) const override { return false; } + virtual bool get_txpool_tx_blob(const crypto::hash& txid, cryptonote::blobdata &bd) const override { return false; } + virtual uint64_t get_database_size() const override { return 0; } + virtual cryptonote::blobdata get_txpool_tx_blob(const crypto::hash& txid) const override { return ""; } + virtual bool for_all_txpool_txes(std::function<bool(const crypto::hash&, const cryptonote::txpool_tx_meta_t&, const cryptonote::blobdata*)>, bool include_blob = false, bool include_unrelayed_txes = false) const override { return false; } virtual void add_block( const cryptonote::block& blk , size_t block_weight @@ -138,17 +141,20 @@ public: , const uint64_t& coins_generated , uint64_t num_rct_outs , const crypto::hash& blk_hash - ) { } - virtual cryptonote::block get_block_from_height(const uint64_t& height) const { return cryptonote::block(); } - virtual void set_hard_fork_version(uint64_t height, uint8_t version) {} - virtual uint8_t get_hard_fork_version(uint64_t height) const { return 0; } - virtual void check_hard_fork_info() {} + ) override { } + virtual cryptonote::block get_block_from_height(const uint64_t& height) const override { return cryptonote::block(); } + virtual void set_hard_fork_version(uint64_t height, uint8_t version) override {} + virtual uint8_t get_hard_fork_version(uint64_t height) const override { return 0; } + virtual void check_hard_fork_info() override {} + + virtual uint32_t get_blockchain_pruning_seed() const override { return 0; } + virtual bool prune_blockchain(uint32_t pruning_seed = 0) override { return true; } + virtual bool update_pruning() override { return true; } + virtual bool check_pruning() override { return true; } + virtual void prune_outputs(uint64_t amount) override {} - virtual uint32_t get_blockchain_pruning_seed() const { return 0; } - virtual bool prune_blockchain(uint32_t pruning_seed = 0) { return true; } - virtual bool update_pruning() { return true; } - virtual bool check_pruning() { return true; } - virtual void prune_outputs(uint64_t amount) {} + virtual uint64_t get_max_block_size() override { return 100000000; } + virtual void add_max_block_size(uint64_t sz) override { } }; } diff --git a/src/blockchain_utilities/blockchain_import.cpp b/src/blockchain_utilities/blockchain_import.cpp index 8454595ac..cb9154f29 100644 --- a/src/blockchain_utilities/blockchain_import.cpp +++ b/src/blockchain_utilities/blockchain_import.cpp @@ -194,7 +194,11 @@ int check_flush(cryptonote::core &core, std::vector<block_complete_entry> &block core.prevalidate_block_hashes(core.get_blockchain_storage().get_db().height(), hashes); std::vector<block> pblocks; - core.prepare_handle_incoming_blocks(blocks, pblocks); + if (!core.prepare_handle_incoming_blocks(blocks, pblocks)) + { + MERROR("Failed to prepare to add blocks"); + return 1; + } if (!pblocks.empty() && pblocks.size() != blocks.size()) { MERROR("Unexpected parsed blocks size"); diff --git a/src/blockchain_utilities/blockchain_prune.cpp b/src/blockchain_utilities/blockchain_prune.cpp index 36080aade..8e13f2c04 100644 --- a/src/blockchain_utilities/blockchain_prune.cpp +++ b/src/blockchain_utilities/blockchain_prune.cpp @@ -611,24 +611,6 @@ int main(int argc, char* argv[]) } already_pruned = true; } - if (n == 0) - { - const uint64_t blockchain_height = core_storage[0]->get_current_blockchain_height(); - const crypto::hash hash = core_storage[0]->get_block_id_by_height(blockchain_height - 1); - cryptonote::block block; - if (core_storage[0]->get_block_by_hash(hash, block)) - { - if (block.major_version < 10) - { - time_t now = time(NULL); - if (now < 1555286400) // 15 april 2019 - { - MERROR("Pruning before v10 will confuse peers. Wait for v10 first"); - return 1; - } - } - } - } } core_storage[0]->deinit(); core_storage[0].reset(NULL); diff --git a/src/blockchain_utilities/blockchain_stats.cpp b/src/blockchain_utilities/blockchain_stats.cpp index 4cc84bf4a..33c26277e 100644 --- a/src/blockchain_utilities/blockchain_stats.cpp +++ b/src/blockchain_utilities/blockchain_stats.cpp @@ -205,7 +205,7 @@ plot 'stats.csv' index "DATA" using (timecolumn(1,"%Y-%m-%d")):4 with lines, '' char buf[8]; unsigned int i; for (i=0; i<24; i++) { - sprintf(buf, "\t%02d:00", i); + sprintf(buf, "\t%02u:00", i); std::cout << buf; } } diff --git a/src/common/combinator.h b/src/common/combinator.h index 72c6800d5..ba851bd81 100644 --- a/src/common/combinator.h +++ b/src/common/combinator.h @@ -32,6 +32,7 @@ #include <iostream> #include <vector> +#include <stdexcept> namespace tools { diff --git a/src/common/dns_utils.cpp b/src/common/dns_utils.cpp index 1a1155c7c..5e03bf897 100644 --- a/src/common/dns_utils.cpp +++ b/src/common/dns_utils.cpp @@ -33,7 +33,7 @@ #include <stdlib.h> #include "include_base_utils.h" #include "common/threadpool.h" -#include <random> +#include "crypto/crypto.h" #include <boost/thread/mutex.hpp> #include <boost/algorithm/string/join.hpp> #include <boost/optional.hpp> @@ -517,10 +517,7 @@ bool load_txt_records_from_dns(std::vector<std::string> &good_records, const std std::vector<std::vector<std::string> > records; records.resize(dns_urls.size()); - std::random_device rd; - std::mt19937 gen(rd()); - std::uniform_int_distribution<int> dis(0, dns_urls.size() - 1); - size_t first_index = dis(gen); + size_t first_index = crypto::rand_idx(dns_urls.size()); // send all requests in parallel std::deque<bool> avail(dns_urls.size(), false), valid(dns_urls.size(), false); diff --git a/src/common/util.cpp b/src/common/util.cpp index 728efc294..db5aa3052 100644 --- a/src/common/util.cpp +++ b/src/common/util.cpp @@ -69,6 +69,9 @@ using namespace epee; #include "net/http_client.h" // epee::net_utils::... #ifdef WIN32 +#ifndef STRSAFE_NO_DEPRECATE +#define STRSAFE_NO_DEPRECATE +#endif #include <windows.h> #include <shlobj.h> #include <strsafe.h> @@ -641,16 +644,16 @@ std::string get_nix_version_display_string() return res; } - std::error_code replace_file(const std::string& replacement_name, const std::string& replaced_name) + std::error_code replace_file(const std::string& old_name, const std::string& new_name) { int code; #if defined(WIN32) // Maximizing chances for success std::wstring wide_replacement_name; - try { wide_replacement_name = string_tools::utf8_to_utf16(replacement_name); } + try { wide_replacement_name = string_tools::utf8_to_utf16(old_name); } catch (...) { return std::error_code(GetLastError(), std::system_category()); } std::wstring wide_replaced_name; - try { wide_replaced_name = string_tools::utf8_to_utf16(replaced_name); } + try { wide_replaced_name = string_tools::utf8_to_utf16(new_name); } catch (...) { return std::error_code(GetLastError(), std::system_category()); } DWORD attributes = ::GetFileAttributesW(wide_replaced_name.c_str()); @@ -662,7 +665,7 @@ std::string get_nix_version_display_string() bool ok = 0 != ::MoveFileExW(wide_replacement_name.c_str(), wide_replaced_name.c_str(), MOVEFILE_REPLACE_EXISTING); code = ok ? 0 : static_cast<int>(::GetLastError()); #else - bool ok = 0 == std::rename(replacement_name.c_str(), replaced_name.c_str()); + bool ok = 0 == std::rename(old_name.c_str(), new_name.c_str()); code = ok ? 0 : errno; #endif return std::error_code(code, std::system_category()); diff --git a/src/common/util.h b/src/common/util.h index 77a5a9af6..f6d5c9b1f 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -145,7 +145,7 @@ namespace tools bool create_directories_if_necessary(const std::string& path); /*! \brief std::rename wrapper for nix and something strange for windows. */ - std::error_code replace_file(const std::string& replacement_name, const std::string& replaced_name); + std::error_code replace_file(const std::string& old_name, const std::string& new_name); bool sanitize_locale(); diff --git a/src/crypto/crypto.h b/src/crypto/crypto.h index 22b182ab0..bac456f60 100644 --- a/src/crypto/crypto.h +++ b/src/crypto/crypto.h @@ -35,6 +35,7 @@ #include <boost/optional.hpp> #include <type_traits> #include <vector> +#include <random> #include "common/pod-class.h" #include "memwipe.h" @@ -162,6 +163,32 @@ namespace crypto { return res; } + /* UniformRandomBitGenerator using crypto::rand<uint64_t>() + */ + struct random_device + { + typedef uint64_t result_type; + static constexpr result_type min() { return 0; } + static constexpr result_type max() { return result_type(-1); } + result_type operator()() const { return crypto::rand<result_type>(); } + }; + + /* Generate a random value between range_min and range_max + */ + template<typename T> + typename std::enable_if<std::is_integral<T>::value, T>::type rand_range(T range_min, T range_max) { + crypto::random_device rd; + std::uniform_int_distribution<T> dis(range_min, range_max); + return dis(rd); + } + + /* Generate a random index between 0 and sz-1 + */ + template<typename T> + typename std::enable_if<std::is_unsigned<T>::value, T>::type rand_idx(T sz) { + return crypto::rand_range<T>(0, sz-1); + } + /* Generate a new key pair */ inline secret_key generate_keys(public_key &pub, secret_key &sec, const secret_key& recovery_key = secret_key(), bool recover = false) { diff --git a/src/cryptonote_basic/cryptonote_basic.h b/src/cryptonote_basic/cryptonote_basic.h index 03caafbb0..20d92bdf1 100644 --- a/src/cryptonote_basic/cryptonote_basic.h +++ b/src/cryptonote_basic/cryptonote_basic.h @@ -422,6 +422,8 @@ namespace cryptonote FIELDS(*static_cast<block_header *>(this)) FIELD(miner_tx) FIELD(tx_hashes) + if (tx_hashes.size() > CRYPTONOTE_MAX_TX_PER_BLOCK) + return false; END_SERIALIZE() }; diff --git a/src/cryptonote_basic/cryptonote_basic_impl.cpp b/src/cryptonote_basic/cryptonote_basic_impl.cpp index e336cc1d1..d8de65b81 100644 --- a/src/cryptonote_basic/cryptonote_basic_impl.cpp +++ b/src/cryptonote_basic/cryptonote_basic_impl.cpp @@ -76,11 +76,6 @@ namespace cryptonote { return CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE_V5; } //----------------------------------------------------------------------------------------------- - size_t get_max_block_size() - { - return CRYPTONOTE_MAX_BLOCK_SIZE; - } - //----------------------------------------------------------------------------------------------- size_t get_max_tx_size() { return CRYPTONOTE_MAX_TX_SIZE; diff --git a/src/cryptonote_basic/cryptonote_basic_impl.h b/src/cryptonote_basic/cryptonote_basic_impl.h index 036273f0e..c7198a16f 100644 --- a/src/cryptonote_basic/cryptonote_basic_impl.h +++ b/src/cryptonote_basic/cryptonote_basic_impl.h @@ -87,7 +87,6 @@ namespace cryptonote { /* Cryptonote helper functions */ /************************************************************************/ size_t get_min_block_weight(uint8_t version); - size_t get_max_block_size(); size_t get_max_tx_size(); bool get_block_reward(size_t median_weight, size_t current_block_weight, uint64_t already_generated_coins, uint64_t &reward, uint8_t version); uint8_t get_account_address_checksum(const public_address_outer_blob& bl); diff --git a/src/cryptonote_basic/cryptonote_format_utils.cpp b/src/cryptonote_basic/cryptonote_format_utils.cpp index fecd67729..566622c1a 100644 --- a/src/cryptonote_basic/cryptonote_format_utils.cpp +++ b/src/cryptonote_basic/cryptonote_format_utils.cpp @@ -1065,8 +1065,6 @@ namespace cryptonote // prefix get_transaction_prefix_hash(t, hashes[0]); - transaction &tt = const_cast<transaction&>(t); - const blobdata blob = tx_to_blob(t); const unsigned int unprunable_size = t.unprunable_size; const unsigned int prefix_size = t.prefix_size; diff --git a/src/cryptonote_basic/cryptonote_format_utils.h b/src/cryptonote_basic/cryptonote_format_utils.h index 3f8eef076..c9de2a56e 100644 --- a/src/cryptonote_basic/cryptonote_format_utils.h +++ b/src/cryptonote_basic/cryptonote_format_utils.h @@ -142,6 +142,16 @@ namespace cryptonote std::string print_money(uint64_t amount, unsigned int decimal_point = -1); //--------------------------------------------------------------- template<class t_object> + bool t_serializable_object_from_blob(t_object& to, const blobdata& b_blob) + { + std::stringstream ss; + ss << b_blob; + binary_archive<false> ba(ss); + bool r = ::serialization::serialize(ba, to); + return r; + } + //--------------------------------------------------------------- + template<class t_object> bool t_serializable_object_to_blob(const t_object& to, blobdata& b_blob) { std::stringstream ss; diff --git a/src/cryptonote_basic/difficulty.cpp b/src/cryptonote_basic/difficulty.cpp index 5162e53e6..859173aa5 100644 --- a/src/cryptonote_basic/difficulty.cpp +++ b/src/cryptonote_basic/difficulty.cpp @@ -239,4 +239,19 @@ namespace cryptonote { return res.convert_to<difficulty_type>(); } + std::string hex(difficulty_type v) + { + static const char chars[] = "0123456789abcdef"; + std::string s; + while (v > 0) + { + s.push_back(chars[(v & 0xf).convert_to<unsigned>()]); + v >>= 4; + } + if (s.empty()) + s += "0"; + std::reverse(s.begin(), s.end()); + return "0x" + s; + } + } diff --git a/src/cryptonote_basic/difficulty.h b/src/cryptonote_basic/difficulty.h index f7a9376fb..02ed89e5a 100644 --- a/src/cryptonote_basic/difficulty.h +++ b/src/cryptonote_basic/difficulty.h @@ -32,6 +32,7 @@ #include <cstdint> #include <vector> +#include <string> #include <boost/multiprecision/cpp_int.hpp> #include "crypto/hash.h" @@ -58,4 +59,6 @@ namespace cryptonote bool check_hash_128(const crypto::hash &hash, difficulty_type difficulty); bool check_hash(const crypto::hash &hash, difficulty_type difficulty); difficulty_type next_difficulty(std::vector<std::uint64_t> timestamps, std::vector<difficulty_type> cumulative_difficulties, size_t target_seconds); + + std::string hex(difficulty_type v); } diff --git a/src/cryptonote_basic/hardfork.cpp b/src/cryptonote_basic/hardfork.cpp index 89bca2f09..98158a513 100644 --- a/src/cryptonote_basic/hardfork.cpp +++ b/src/cryptonote_basic/hardfork.cpp @@ -185,26 +185,8 @@ void HardFork::init() else height = 1; - bool populate = false; - try - { - db.get_hard_fork_version(0); - } - catch (...) { populate = true; } - if (populate) { - MINFO("The DB has no hard fork info, reparsing from start"); - height = 1; - } - MDEBUG("reorganizing from " << height); - if (populate) { - reorganize_from_chain_height(height); - // reorg will not touch the genesis block, use this as a flag for populating done - db.set_hard_fork_version(0, original_version); - } - else { - rescan_from_chain_height(height); - } - MDEBUG("reorganization done"); + rescan_from_chain_height(height); + MDEBUG("init done"); } uint8_t HardFork::get_block_version(uint64_t height) const @@ -266,11 +248,9 @@ bool HardFork::reorganize_from_chain_height(uint64_t height) bool HardFork::rescan_from_block_height(uint64_t height) { CRITICAL_REGION_LOCAL(lock); - db.block_txn_start(true); - if (height >= db.height()) { - db.block_txn_stop(); + db_rtxn_guard rtxn_guard(&db); + if (height >= db.height()) return false; - } versions.clear(); @@ -293,8 +273,6 @@ bool HardFork::rescan_from_block_height(uint64_t height) current_fork_index = voted; } - db.block_txn_stop(); - return true; } @@ -314,8 +292,7 @@ void HardFork::on_block_popped(uint64_t nblocks) const uint64_t new_chain_height = db.height(); const uint64_t old_chain_height = new_chain_height + nblocks; uint8_t version; - uint64_t height; - for (height = old_chain_height - 1; height >= new_chain_height; --height) + for (uint64_t height = old_chain_height - 1; height >= new_chain_height; --height) { version = versions.back(); last_versions[version]--; @@ -327,7 +304,7 @@ void HardFork::on_block_popped(uint64_t nblocks) // does not take voting into account for (current_fork_index = heights.size() - 1; current_fork_index > 0; --current_fork_index) - if (height >= heights[current_fork_index].height) + if (new_chain_height >= heights[current_fork_index].height) break; } diff --git a/src/cryptonote_basic/miner.cpp b/src/cryptonote_basic/miner.cpp index 4e2edc20f..173679e21 100644 --- a/src/cryptonote_basic/miner.cpp +++ b/src/cryptonote_basic/miner.cpp @@ -106,6 +106,7 @@ namespace cryptonote m_thread_index(0), m_phandler(phandler), m_height(0), + m_threads_active(0), m_pausers_count(0), m_threads_total(0), m_starter_nonce(0), @@ -264,8 +265,8 @@ namespace cryptonote { CRITICAL_REGION_LOCAL(m_threads_lock); boost::interprocess::ipcdetail::atomic_write32(&m_stop, 1); - for(boost::thread& th: m_threads) - th.join(); + while (m_threads_active > 0) + misc_utils::sleep_no_w(100); m_threads.clear(); } boost::interprocess::ipcdetail::atomic_write32(&m_stop, 0); @@ -447,15 +448,17 @@ namespace cryptonote // In case background mining was active and the miner threads are waiting // on the background miner to signal start. - m_is_background_mining_started_cond.notify_all(); - - for(boost::thread& th: m_threads) - th.join(); + while (m_threads_active > 0) + { + m_is_background_mining_started_cond.notify_all(); + misc_utils::sleep_no_w(100); + } // The background mining thread could be sleeping for a long time, so we // interrupt it just in case m_background_mining_thread.interrupt(); m_background_mining_thread.join(); + m_is_background_mining_enabled = false; MINFO("Mining has been stopped, " << m_threads.size() << " finished" ); m_threads.clear(); @@ -525,6 +528,7 @@ namespace cryptonote uint32_t local_template_ver = 0; block b; slow_hash_allocate_state(); + ++m_threads_active; while(!m_stop) { if(m_pausers_count)//anti split workaround @@ -573,7 +577,8 @@ namespace cryptonote //we lucky! ++m_config.current_extra_message_index; MGINFO_GREEN("Found block " << get_block_hash(b) << " at height " << height << " for difficulty: " << local_diff); - if(!m_phandler->handle_block_found(b)) + cryptonote::block_verification_context bvc; + if(!m_phandler->handle_block_found(b, bvc) || !bvc.m_added_to_main_chain) { --m_config.current_extra_message_index; }else @@ -589,6 +594,7 @@ namespace cryptonote } slow_hash_free_state(); MGINFO("Miner thread stopped ["<< th_local_index << "]"); + --m_threads_active; return true; } //----------------------------------------------------------------------------------------------------- @@ -747,10 +753,10 @@ namespace cryptonote uint8_t idle_percentage = get_percent_of_total(idle_diff, total_diff); uint8_t process_percentage = get_percent_of_total(process_diff, total_diff); - MGINFO("idle percentage is " << unsigned(idle_percentage) << "\%, miner percentage is " << unsigned(process_percentage) << "\%, ac power : " << on_ac_power); + MDEBUG("idle percentage is " << unsigned(idle_percentage) << "\%, miner percentage is " << unsigned(process_percentage) << "\%, ac power : " << on_ac_power); if( idle_percentage + process_percentage < get_idle_threshold() || !on_ac_power ) { - MGINFO("cpu is " << unsigned(idle_percentage) << "% idle, idle threshold is " << unsigned(get_idle_threshold()) << "\%, ac power : " << on_ac_power << ", background mining stopping, thanks for your contribution!"); + MINFO("cpu is " << unsigned(idle_percentage) << "% idle, idle threshold is " << unsigned(get_idle_threshold()) << "\%, ac power : " << on_ac_power << ", background mining stopping, thanks for your contribution!"); m_is_background_mining_started = false; // reset process times @@ -788,10 +794,10 @@ namespace cryptonote uint64_t idle_diff = (current_idle_time - prev_idle_time); uint8_t idle_percentage = get_percent_of_total(idle_diff, total_diff); - MGINFO("idle percentage is " << unsigned(idle_percentage)); + MDEBUG("idle percentage is " << unsigned(idle_percentage)); if( idle_percentage >= get_idle_threshold() && on_ac_power ) { - MGINFO("cpu is " << unsigned(idle_percentage) << "% idle, idle threshold is " << unsigned(get_idle_threshold()) << "\%, ac power : " << on_ac_power << ", background mining started, good luck!"); + MINFO("cpu is " << unsigned(idle_percentage) << "% idle, idle threshold is " << unsigned(get_idle_threshold()) << "\%, ac power : " << on_ac_power << ", background mining started, good luck!"); m_is_background_mining_started = true; m_is_background_mining_started_cond.notify_all(); @@ -1049,7 +1055,12 @@ namespace cryptonote if (boost::logic::indeterminate(on_battery)) { - LOG_ERROR("couldn't query power status from " << power_supply_class_path); + static bool error_shown = false; + if (!error_shown) + { + LOG_ERROR("couldn't query power status from " << power_supply_class_path); + error_shown = true; + } } return on_battery; diff --git a/src/cryptonote_basic/miner.h b/src/cryptonote_basic/miner.h index 08b1bd7f1..285075f51 100644 --- a/src/cryptonote_basic/miner.h +++ b/src/cryptonote_basic/miner.h @@ -34,6 +34,7 @@ #include <boost/logic/tribool_fwd.hpp> #include <atomic> #include "cryptonote_basic.h" +#include "verification_context.h" #include "difficulty.h" #include "math_helper.h" #ifdef _WIN32 @@ -45,7 +46,7 @@ namespace cryptonote struct i_miner_handler { - virtual bool handle_block_found(block& b) = 0; + virtual bool handle_block_found(block& b, block_verification_context &bvc) = 0; virtual bool get_block_template(block& b, const account_public_address& adr, difficulty_type& diffic, uint64_t& height, uint64_t& expected_reward, const blobdata& ex_nonce) = 0; protected: ~i_miner_handler(){}; @@ -125,6 +126,7 @@ namespace cryptonote uint64_t m_height; volatile uint32_t m_thread_index; volatile uint32_t m_threads_total; + std::atomic<uint32_t> m_threads_active; std::atomic<int32_t> m_pausers_count; epee::critical_section m_miners_count_lock; diff --git a/src/cryptonote_config.h b/src/cryptonote_config.h index b6087de22..56b6a63b7 100644 --- a/src/cryptonote_config.h +++ b/src/cryptonote_config.h @@ -37,9 +37,9 @@ #define CRYPTONOTE_DNS_TIMEOUT_MS 20000 #define CRYPTONOTE_MAX_BLOCK_NUMBER 500000000 -#define CRYPTONOTE_MAX_BLOCK_SIZE 500000000 // block header blob limit, never used! #define CRYPTONOTE_GETBLOCKTEMPLATE_MAX_BLOCK_SIZE 196608 //size of block (bytes) that is the maximum that miners will produce -#define CRYPTONOTE_MAX_TX_SIZE 1000000000 +#define CRYPTONOTE_MAX_TX_SIZE 1000000 +#define CRYPTONOTE_MAX_TX_PER_BLOCK 0x10000000 #define CRYPTONOTE_PUBLIC_ADDRESS_TEXTBLOB_VER 0 #define CRYPTONOTE_MINED_MONEY_UNLOCK_WINDOW 60 #define CURRENT_TRANSACTION_VERSION 2 diff --git a/src/cryptonote_core/CMakeLists.txt b/src/cryptonote_core/CMakeLists.txt index fb96de226..2cbe89b01 100644 --- a/src/cryptonote_core/CMakeLists.txt +++ b/src/cryptonote_core/CMakeLists.txt @@ -30,6 +30,7 @@ set(cryptonote_core_sources blockchain.cpp cryptonote_core.cpp tx_pool.cpp + tx_sanity_check.cpp cryptonote_tx_utils.cpp) set(cryptonote_core_headers) @@ -39,6 +40,7 @@ set(cryptonote_core_private_headers blockchain.h cryptonote_core.h tx_pool.h + tx_sanity_check.h cryptonote_tx_utils.h) monero_private_headers(cryptonote_core diff --git a/src/cryptonote_core/blockchain.cpp b/src/cryptonote_core/blockchain.cpp index 73c60760b..f733efb2f 100644 --- a/src/cryptonote_core/blockchain.cpp +++ b/src/cryptonote_core/blockchain.cpp @@ -428,6 +428,7 @@ bool Blockchain::init(BlockchainDB* db, const network_type nettype, bool offline block bl; block_verification_context bvc = boost::value_initialized<block_verification_context>(); generate_genesis_block(bl, get_config(m_nettype).GENESIS_TX, get_config(m_nettype).GENESIS_NONCE); + db_wtxn_guard wtxn_guard(m_db); add_new_block(bl, bvc); CHECK_AND_ASSERT_MES(!bvc.m_verifivation_failed, false, "Failed to add genesis block to blockchain"); } @@ -443,7 +444,8 @@ bool Blockchain::init(BlockchainDB* db, const network_type nettype, bool offline m_db->fixup(); } - m_db->block_txn_start(true); + db_rtxn_guard rtxn_guard(m_db); + // check how far behind we are uint64_t top_block_timestamp = m_db->get_top_block_timestamp(); uint64_t timestamp_diff = time(NULL) - top_block_timestamp; @@ -464,7 +466,8 @@ bool Blockchain::init(BlockchainDB* db, const network_type nettype, bool offline #endif MINFO("Blockchain initialized. last block: " << m_db->height() - 1 << ", " << epee::misc_utils::get_time_interval_string(timestamp_diff) << " time ago, current difficulty: " << get_difficulty_for_next_block()); - m_db->block_txn_stop(); + + rtxn_guard.stop(); uint64_t num_popped_blocks = 0; while (!m_db->is_read_only()) @@ -518,8 +521,11 @@ bool Blockchain::init(BlockchainDB* db, const network_type nettype, bool offline if (test_options && test_options->long_term_block_weight_window) m_long_term_block_weights_window = test_options->long_term_block_weight_window; - if (!update_next_cumulative_weight_limit()) - return false; + { + db_txn_guard txn_guard(m_db, m_db->is_read_only()); + if (!update_next_cumulative_weight_limit()) + return false; + } return true; } //------------------------------------------------------------------ @@ -725,6 +731,7 @@ bool Blockchain::reset_and_set_genesis_block(const block& b) m_db->reset(); m_hardfork->init(); + db_wtxn_guard wtxn_guard(m_db); block_verification_context bvc = boost::value_initialized<block_verification_context>(); add_new_block(b, bvc); if (!update_next_cumulative_weight_limit()) @@ -772,7 +779,7 @@ bool Blockchain::get_short_chain_history(std::list<crypto::hash>& ids) const if(!sz) return true; - m_db->block_txn_start(true); + db_rtxn_guard rtxn_guard(m_db); bool genesis_included = false; uint64_t current_back_offset = 1; while(current_back_offset < sz) @@ -799,7 +806,6 @@ bool Blockchain::get_short_chain_history(std::list<crypto::hash>& ids) const { ids.push_back(m_db->get_block_hash_from_height(0)); } - m_db->block_txn_stop(); return true; } @@ -1008,7 +1014,7 @@ bool Blockchain::rollback_blockchain_switching(std::list<block>& original_chain, //------------------------------------------------------------------ // This function attempts to switch to an alternate chain, returning // boolean based on success therein. -bool Blockchain::switch_to_alternative_blockchain(std::list<blocks_ext_by_hash::iterator>& alt_chain, bool discard_disconnected_chain) +bool Blockchain::switch_to_alternative_blockchain(std::list<blocks_ext_by_hash::const_iterator>& alt_chain, bool discard_disconnected_chain) { LOG_PRINT_L3("Blockchain::" << __func__); CRITICAL_REGION_LOCAL(m_blockchain_lock); @@ -1109,7 +1115,7 @@ bool Blockchain::switch_to_alternative_blockchain(std::list<blocks_ext_by_hash:: //------------------------------------------------------------------ // This function calculates the difficulty target for the block being added to // an alternate chain. -difficulty_type Blockchain::get_next_difficulty_for_alternative_chain(const std::list<blocks_ext_by_hash::iterator>& alt_chain, block_extended_info& bei) const +difficulty_type Blockchain::get_next_difficulty_for_alternative_chain(const std::list<blocks_ext_by_hash::const_iterator>& alt_chain, block_extended_info& bei) const { if (m_fixed_difficulty) { @@ -1351,7 +1357,7 @@ uint64_t Blockchain::get_current_cumulative_block_weight_median() const // in a lot of places. That flag is not referenced in any of the code // nor any of the makefiles, howeve. Need to look into whether or not it's // necessary at all. -bool Blockchain::create_block_template(block& b, const account_public_address& miner_address, difficulty_type& diffic, uint64_t& height, uint64_t& expected_reward, const blobdata& ex_nonce) +bool Blockchain::create_block_template(block& b, const crypto::hash *from_block, const account_public_address& miner_address, difficulty_type& diffic, uint64_t& height, uint64_t& expected_reward, const blobdata& ex_nonce) { LOG_PRINT_L3("Blockchain::" << __func__); size_t median_weight; @@ -1361,8 +1367,7 @@ bool Blockchain::create_block_template(block& b, const account_public_address& m m_tx_pool.lock(); const auto unlock_guard = epee::misc_utils::create_scope_leave_handler([&]() { m_tx_pool.unlock(); }); CRITICAL_REGION_LOCAL(m_blockchain_lock); - height = m_db->height(); - if (m_btc_valid) { + if (m_btc_valid && !from_block) { // The pool cookie is atomic. The lack of locking is OK, as if it changes // just as we compare it, we'll just use a slightly old template, but // this would be the case anyway if we'd lock, and the change happened @@ -1372,16 +1377,79 @@ bool Blockchain::create_block_template(block& b, const account_public_address& m m_btc.timestamp = time(NULL); // update timestamp unconditionally b = m_btc; diffic = m_btc_difficulty; + height = m_btc_height; expected_reward = m_btc_expected_reward; return true; } - MDEBUG("Not using cached template: address " << (!memcmp(&miner_address, &m_btc_address, sizeof(cryptonote::account_public_address))) << ", nonce " << (m_btc_nonce == ex_nonce) << ", cookie " << (m_btc_pool_cookie == m_tx_pool.cookie())); + MDEBUG("Not using cached template: address " << (!memcmp(&miner_address, &m_btc_address, sizeof(cryptonote::account_public_address))) << ", nonce " << (m_btc_nonce == ex_nonce) << ", cookie " << (m_btc_pool_cookie == m_tx_pool.cookie()) << ", from_block " << (!!from_block)); invalidate_block_template_cache(); } - b.major_version = m_hardfork->get_current_version(); - b.minor_version = m_hardfork->get_ideal_version(); - b.prev_id = get_tail_id(); + if (from_block) + { + //build alternative subchain, front -> mainchain, back -> alternative head + //block is not related with head of main chain + //first of all - look in alternative chains container + auto it_prev = m_alternative_chains.find(*from_block); + bool parent_in_main = m_db->block_exists(*from_block); + if(it_prev == m_alternative_chains.end() && !parent_in_main) + { + MERROR("Unknown from block"); + return false; + } + + //we have new block in alternative chain + std::list<blocks_ext_by_hash::const_iterator> alt_chain; + block_verification_context bvc = boost::value_initialized<block_verification_context>(); + std::vector<uint64_t> timestamps; + if (!build_alt_chain(*from_block, alt_chain, timestamps, bvc)) + return false; + + if (parent_in_main) + { + cryptonote::block prev_block; + CHECK_AND_ASSERT_MES(get_block_by_hash(*from_block, prev_block), false, "From block not found"); // TODO + uint64_t from_block_height = cryptonote::get_block_height(prev_block); + height = from_block_height + 1; + } + else + { + height = alt_chain.back()->second.height + 1; + } + b.major_version = m_hardfork->get_ideal_version(height); + b.minor_version = m_hardfork->get_ideal_version(); + b.prev_id = *from_block; + + // cheat and use the weight of the block we start from, virtually certain to be acceptable + // and use 1.9 times rather than 2 times so we're even more sure + if (parent_in_main) + { + median_weight = m_db->get_block_weight(height - 1); + already_generated_coins = m_db->get_block_already_generated_coins(height - 1); + } + else + { + median_weight = it_prev->second.block_cumulative_weight - it_prev->second.block_cumulative_weight / 20; + already_generated_coins = alt_chain.back()->second.already_generated_coins; + } + + // FIXME: consider moving away from block_extended_info at some point + block_extended_info bei = boost::value_initialized<block_extended_info>(); + bei.bl = b; + bei.height = alt_chain.size() ? it_prev->second.height + 1 : m_db->get_block_height(*from_block) + 1; + + diffic = get_next_difficulty_for_alternative_chain(alt_chain, bei); + } + else + { + height = m_db->height(); + b.major_version = m_hardfork->get_current_version(); + b.minor_version = m_hardfork->get_ideal_version(); + b.prev_id = get_tail_id(); + median_weight = m_current_block_cumul_weight_limit / 2; + diffic = get_difficulty_for_next_block(); + already_generated_coins = m_db->get_block_already_generated_coins(height - 1); + } b.timestamp = time(NULL); uint64_t median_ts; @@ -1390,15 +1458,11 @@ bool Blockchain::create_block_template(block& b, const account_public_address& m b.timestamp = median_ts; } - diffic = get_difficulty_for_next_block(); CHECK_AND_ASSERT_MES(diffic, false, "difficulty overhead."); - median_weight = m_current_block_cumul_weight_limit / 2; - already_generated_coins = m_db->get_block_already_generated_coins(height - 1); - size_t txs_weight; uint64_t fee; - if (!m_tx_pool.fill_block_template(b, median_weight, already_generated_coins, txs_weight, fee, expected_reward, m_hardfork->get_current_version())) + if (!m_tx_pool.fill_block_template(b, median_weight, already_generated_coins, txs_weight, fee, expected_reward, b.major_version)) { return false; } @@ -1461,7 +1525,7 @@ bool Blockchain::create_block_template(block& b, const account_public_address& m block weight, so first miner transaction generated with fake amount of money, and with phase we know think we know expected block weight */ //make blocks coin-base tx looks close to real coinbase tx to get truthful blob weight - uint8_t hf_version = m_hardfork->get_current_version(); + uint8_t hf_version = b.major_version; size_t max_outs = hf_version >= 4 ? 1 : 11; bool r = construct_miner_tx(height, median_weight, already_generated_coins, txs_weight, fee, miner_address, b.miner_tx, ex_nonce, max_outs, hf_version); CHECK_AND_ASSERT_MES(r, false, "Failed to construct miner tx, first chance"); @@ -1516,16 +1580,22 @@ bool Blockchain::create_block_template(block& b, const account_public_address& m ", cumulative weight " << cumulative_weight << " is now good"); #endif - cache_block_template(b, miner_address, ex_nonce, diffic, expected_reward, pool_cookie); + if (!from_block) + cache_block_template(b, miner_address, ex_nonce, diffic, height, expected_reward, pool_cookie); return true; } LOG_ERROR("Failed to create_block_template with " << 10 << " tries"); return false; } //------------------------------------------------------------------ +bool Blockchain::create_block_template(block& b, const account_public_address& miner_address, difficulty_type& diffic, uint64_t& height, uint64_t& expected_reward, const blobdata& ex_nonce) +{ + return create_block_template(b, NULL, miner_address, diffic, height, expected_reward, ex_nonce); +} +//------------------------------------------------------------------ // for an alternate chain, get the timestamps from the main chain to complete // the needed number of timestamps for the BLOCKCHAIN_TIMESTAMP_CHECK_WINDOW. -bool Blockchain::complete_timestamps_vector(uint64_t start_top_height, std::vector<uint64_t>& timestamps) +bool Blockchain::complete_timestamps_vector(uint64_t start_top_height, std::vector<uint64_t>& timestamps) const { LOG_PRINT_L3("Blockchain::" << __func__); @@ -1545,6 +1615,52 @@ bool Blockchain::complete_timestamps_vector(uint64_t start_top_height, std::vect return true; } //------------------------------------------------------------------ +bool Blockchain::build_alt_chain(const crypto::hash &prev_id, std::list<blocks_ext_by_hash::const_iterator>& alt_chain, std::vector<uint64_t> ×tamps, block_verification_context& bvc) const +{ + //build alternative subchain, front -> mainchain, back -> alternative head + blocks_ext_by_hash::const_iterator alt_it = m_alternative_chains.find(prev_id); + timestamps.clear(); + while(alt_it != m_alternative_chains.end()) + { + alt_chain.push_front(alt_it); + timestamps.push_back(alt_it->second.bl.timestamp); + alt_it = m_alternative_chains.find(alt_it->second.bl.prev_id); + } + + // if block to be added connects to known blocks that aren't part of the + // main chain -- that is, if we're adding on to an alternate chain + if(!alt_chain.empty()) + { + // make sure alt chain doesn't somehow start past the end of the main chain + CHECK_AND_ASSERT_MES(m_db->height() > alt_chain.front()->second.height, false, "main blockchain wrong height"); + + // make sure that the blockchain contains the block that should connect + // this alternate chain with it. + if (!m_db->block_exists(alt_chain.front()->second.bl.prev_id)) + { + MERROR("alternate chain does not appear to connect to main chain..."); + return false; + } + + // make sure block connects correctly to the main chain + auto h = m_db->get_block_hash_from_height(alt_chain.front()->second.height - 1); + CHECK_AND_ASSERT_MES(h == alt_chain.front()->second.bl.prev_id, false, "alternative chain has wrong connection to main chain"); + complete_timestamps_vector(m_db->get_block_height(alt_chain.front()->second.bl.prev_id), timestamps); + } + // if block not associated with known alternate chain + else + { + // if block parent is not part of main chain or an alternate chain, + // we ignore it + bool parent_in_main = m_db->block_exists(prev_id); + CHECK_AND_ASSERT_MES(parent_in_main, false, "internal error: broken imperative condition: parent_in_main"); + + complete_timestamps_vector(m_db->get_block_height(prev_id), timestamps); + } + + return true; +} +//------------------------------------------------------------------ // If a block is to be added and its parent block is not the current // main chain top block, then we need to see if we know about its parent block. // If its parent block is part of a known forked chain, then we need to see @@ -1589,47 +1705,18 @@ bool Blockchain::handle_alternative_block(const block& b, const crypto::hash& id if(it_prev != m_alternative_chains.end() || parent_in_main) { //we have new block in alternative chain - - //build alternative subchain, front -> mainchain, back -> alternative head - blocks_ext_by_hash::iterator alt_it = it_prev; //m_alternative_chains.find() - std::list<blocks_ext_by_hash::iterator> alt_chain; + std::list<blocks_ext_by_hash::const_iterator> alt_chain; std::vector<uint64_t> timestamps; - while(alt_it != m_alternative_chains.end()) - { - alt_chain.push_front(alt_it); - timestamps.push_back(alt_it->second.bl.timestamp); - alt_it = m_alternative_chains.find(alt_it->second.bl.prev_id); - } - - // if block to be added connects to known blocks that aren't part of the - // main chain -- that is, if we're adding on to an alternate chain - if(!alt_chain.empty()) - { - // make sure alt chain doesn't somehow start past the end of the main chain - CHECK_AND_ASSERT_MES(m_db->height() > alt_chain.front()->second.height, false, "main blockchain wrong height"); - - // make sure that the blockchain contains the block that should connect - // this alternate chain with it. - if (!m_db->block_exists(alt_chain.front()->second.bl.prev_id)) - { - MERROR("alternate chain does not appear to connect to main chain..."); - return false; - } - - // make sure block connects correctly to the main chain - auto h = m_db->get_block_hash_from_height(alt_chain.front()->second.height - 1); - CHECK_AND_ASSERT_MES(h == alt_chain.front()->second.bl.prev_id, false, "alternative chain has wrong connection to main chain"); - complete_timestamps_vector(m_db->get_block_height(alt_chain.front()->second.bl.prev_id), timestamps); - } - // if block not associated with known alternate chain - else - { - // if block parent is not part of main chain or an alternate chain, - // we ignore it - CHECK_AND_ASSERT_MES(parent_in_main, false, "internal error: broken imperative condition: parent_in_main"); + if (!build_alt_chain(b.prev_id, alt_chain, timestamps, bvc)) + return false; - complete_timestamps_vector(m_db->get_block_height(b.prev_id), timestamps); - } + // FIXME: consider moving away from block_extended_info at some point + block_extended_info bei = boost::value_initialized<block_extended_info>(); + bei.bl = b; + const uint64_t prev_height = alt_chain.size() ? it_prev->second.height : m_db->get_block_height(b.prev_id); + bei.height = prev_height + 1; + uint64_t block_reward = get_outs_money_amount(b.miner_tx); + bei.already_generated_coins = block_reward + (alt_chain.size() ? it_prev->second.already_generated_coins : m_db->get_block_already_generated_coins(prev_height)); // verify that the block's timestamp is within the acceptable range // (not earlier than the median of the last X blocks) @@ -1640,11 +1727,6 @@ bool Blockchain::handle_alternative_block(const block& b, const crypto::hash& id return false; } - // FIXME: consider moving away from block_extended_info at some point - block_extended_info bei = boost::value_initialized<block_extended_info>(); - bei.bl = b; - bei.height = alt_chain.size() ? it_prev->second.height + 1 : m_db->get_block_height(b.prev_id) + 1; - bool is_a_checkpoint; if(!m_checkpoints.check_block(bei.height, id, is_a_checkpoint)) { @@ -1790,7 +1872,7 @@ bool Blockchain::handle_get_objects(NOTIFY_REQUEST_GET_OBJECTS::request& arg, NO { LOG_PRINT_L3("Blockchain::" << __func__); CRITICAL_REGION_LOCAL(m_blockchain_lock); - m_db->block_txn_start(true); + db_rtxn_guard rtxn_guard (m_db); rsp.current_blockchain_height = get_current_blockchain_height(); std::vector<std::pair<cryptonote::blobdata,block>> blocks; get_blocks(arg.blocks, blocks, rsp.missed_ids); @@ -1817,7 +1899,6 @@ bool Blockchain::handle_get_objects(NOTIFY_REQUEST_GET_OBJECTS::request& arg, NO // as done below if any standalone transactions were requested // and missed. rsp.missed_ids.insert(rsp.missed_ids.end(), missed_tx_ids.begin(), missed_tx_ids.end()); - m_db->block_txn_stop(); return false; } @@ -1827,7 +1908,6 @@ bool Blockchain::handle_get_objects(NOTIFY_REQUEST_GET_OBJECTS::request& arg, NO //get and pack other transactions, if needed get_transactions_blobs(arg.txs, rsp.txs, rsp.missed_ids); - m_db->block_txn_stop(); return true; } //------------------------------------------------------------------ @@ -1999,14 +2079,13 @@ bool Blockchain::find_blockchain_supplement(const std::list<crypto::hash>& qbloc return false; } - m_db->block_txn_start(true); + db_rtxn_guard rtxn_guard(m_db); // make sure that the last block in the request's block list matches // the genesis block auto gen_hash = m_db->get_block_hash_from_height(0); if(qblock_ids.back() != gen_hash) { MCERROR("net.p2p", "Client sent wrong NOTIFY_REQUEST_CHAIN: genesis block mismatch: " << std::endl << "id: " << qblock_ids.back() << ", " << std::endl << "expected: " << gen_hash << "," << std::endl << " dropping connection"); - m_db->block_txn_abort(); return false; } @@ -2024,11 +2103,9 @@ bool Blockchain::find_blockchain_supplement(const std::list<crypto::hash>& qbloc catch (const std::exception& e) { MWARNING("Non-critical error trying to find block by hash in BlockchainDB, hash: " << *bl_it); - m_db->block_txn_abort(); return false; } } - m_db->block_txn_stop(); // this should be impossible, as we checked that we share the genesis block, // but just in case... @@ -2208,7 +2285,7 @@ bool Blockchain::get_transactions(const t_ids_container& txs_ids, t_tx_container // Find the split point between us and foreign blockchain and return // (by reference) the most recent common block hash along with up to // BLOCKS_IDS_SYNCHRONIZING_DEFAULT_COUNT additional (more recent) hashes. -bool Blockchain::find_blockchain_supplement(const std::list<crypto::hash>& qblock_ids, std::vector<crypto::hash>& hashes, uint64_t& start_height, uint64_t& current_height) const +bool Blockchain::find_blockchain_supplement(const std::list<crypto::hash>& qblock_ids, std::vector<crypto::hash>& hashes, uint64_t& start_height, uint64_t& current_height, bool clip_pruned) const { LOG_PRINT_L3("Blockchain::" << __func__); CRITICAL_REGION_LOCAL(m_blockchain_lock); @@ -2219,11 +2296,15 @@ bool Blockchain::find_blockchain_supplement(const std::list<crypto::hash>& qbloc return false; } - m_db->block_txn_start(true); + db_rtxn_guard rtxn_guard(m_db); current_height = get_current_blockchain_height(); - const uint32_t pruning_seed = get_blockchain_pruning_seed(); - start_height = tools::get_next_unpruned_block_height(start_height, current_height, pruning_seed); - uint64_t stop_height = tools::get_next_pruned_block_height(start_height, current_height, pruning_seed); + uint64_t stop_height = current_height; + if (clip_pruned) + { + const uint32_t pruning_seed = get_blockchain_pruning_seed(); + start_height = tools::get_next_unpruned_block_height(start_height, current_height, pruning_seed); + stop_height = tools::get_next_pruned_block_height(start_height, current_height, pruning_seed); + } size_t count = 0; hashes.reserve(std::min((size_t)(stop_height - start_height), (size_t)BLOCKS_IDS_SYNCHRONIZING_DEFAULT_COUNT)); for(size_t i = start_height; i < stop_height && count < BLOCKS_IDS_SYNCHRONIZING_DEFAULT_COUNT; i++, count++) @@ -2231,7 +2312,6 @@ bool Blockchain::find_blockchain_supplement(const std::list<crypto::hash>& qbloc hashes.push_back(m_db->get_block_hash_from_height(i)); } - m_db->block_txn_stop(); return true; } @@ -2240,7 +2320,7 @@ bool Blockchain::find_blockchain_supplement(const std::list<crypto::hash>& qbloc LOG_PRINT_L3("Blockchain::" << __func__); CRITICAL_REGION_LOCAL(m_blockchain_lock); - bool result = find_blockchain_supplement(qblock_ids, resp.m_block_ids, resp.start_height, resp.total_height); + bool result = find_blockchain_supplement(qblock_ids, resp.m_block_ids, resp.start_height, resp.total_height, true); if (result) { cryptonote::difficulty_type wide_cumulative_difficulty = m_db->get_block_cumulative_difficulty(resp.total_height - 1); @@ -2278,7 +2358,7 @@ bool Blockchain::find_blockchain_supplement(const uint64_t req_start_block, cons } } - m_db->block_txn_start(true); + db_rtxn_guard rtxn_guard(m_db); total_height = get_current_blockchain_height(); size_t count = 0, size = 0; blocks.reserve(std::min(std::min(max_count, (size_t)10000), (size_t)(total_height - start_height))); @@ -2304,7 +2384,6 @@ bool Blockchain::find_blockchain_supplement(const uint64_t req_start_block, cons blocks.back().second.push_back(std::make_pair(b.tx_hashes[i], std::move(txs[i]))); } } - m_db->block_txn_stop(); return true; } //------------------------------------------------------------------ @@ -3459,7 +3538,7 @@ bool Blockchain::handle_block_to_main_chain(const block& bl, const crypto::hash& static bool seen_future_version = false; - m_db->block_txn_start(true); + db_rtxn_guard rtxn_guard(m_db); uint64_t blockchain_height; const crypto::hash top_hash = get_tail_id(blockchain_height); ++blockchain_height; // block height to chain height @@ -3468,7 +3547,6 @@ bool Blockchain::handle_block_to_main_chain(const block& bl, const crypto::hash& MERROR_VER("Block with id: " << id << std::endl << "has wrong prev_id: " << bl.prev_id << std::endl << "expected: " << top_hash); bvc.m_verifivation_failed = true; leave: - m_db->block_txn_stop(); return false; } @@ -3689,6 +3767,8 @@ leave: //TODO: why is this done? make sure that keeping invalid blocks makes sense. add_block_as_invalid(bl, id); MERROR_VER("Block with id " << id << " added as invalid because of wrong inputs in transactions"); + MERROR_VER("tx_index " << tx_index << ", m_blocks_txs_check " << m_blocks_txs_check.size() << ":"); + for (const auto &h: m_blocks_txs_check) MERROR_VER(" " << h); bvc.m_verifivation_failed = true; return_tx_to_pool(txs); goto leave; @@ -3749,7 +3829,7 @@ leave: if(precomputed) block_processing_time += m_fake_pow_calc_time; - m_db->block_txn_stop(); + rtxn_guard.stop(); TIME_MEASURE_START(addblock); uint64_t new_height = 0; if (!bvc.m_verifivation_failed) @@ -3818,12 +3898,10 @@ leave: //------------------------------------------------------------------ bool Blockchain::prune_blockchain(uint32_t pruning_seed) { - uint8_t hf_version = m_hardfork->get_current_version(); - if (hf_version < 10) - { - MERROR("Most of the network will only be ready for pruned blockchains from v10, not pruning"); - return false; - } + m_tx_pool.lock(); + epee::misc_utils::auto_scope_leave_caller unlocker = epee::misc_utils::create_scope_leave_handler([&](){m_tx_pool.unlock();}); + CRITICAL_REGION_LOCAL(m_blockchain_lock); + return m_db->prune_blockchain(pruning_seed); } //------------------------------------------------------------------ @@ -3916,7 +3994,6 @@ bool Blockchain::update_next_cumulative_weight_limit(uint64_t *long_term_effecti new_weights[0] = long_term_block_weight; long_term_median = epee::misc_utils::median(new_weights); m_long_term_effective_median_block_weight = std::max<uint64_t>(CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE_V5, long_term_median); - short_term_constraint = m_long_term_effective_median_block_weight + m_long_term_effective_median_block_weight * 2 / 5; weights.clear(); get_last_n_blocks_weights(weights, CRYPTONOTE_REWARD_BLOCKS_WINDOW); @@ -3935,6 +4012,9 @@ bool Blockchain::update_next_cumulative_weight_limit(uint64_t *long_term_effecti if (long_term_effective_median_block_weight) *long_term_effective_median_block_weight = m_long_term_effective_median_block_weight; + if (!m_db->is_read_only()) + m_db->add_max_block_size(m_current_block_cumul_weight_limit); + return true; } //------------------------------------------------------------------ @@ -3944,12 +4024,11 @@ bool Blockchain::add_new_block(const block& bl, block_verification_context& bvc) crypto::hash id = get_block_hash(bl); CRITICAL_REGION_LOCAL(m_tx_pool);//to avoid deadlock lets lock tx_pool for whole add/reorganize process CRITICAL_REGION_LOCAL1(m_blockchain_lock); - m_db->block_txn_start(true); + db_rtxn_guard rtxn_guard(m_db); if(have_block(id)) { LOG_PRINT_L3("block with id = " << id << " already exists"); bvc.m_already_exists = true; - m_db->block_txn_stop(); m_blocks_txs_check.clear(); return false; } @@ -3959,14 +4038,14 @@ bool Blockchain::add_new_block(const block& bl, block_verification_context& bvc) { //chain switching or wrong block bvc.m_added_to_main_chain = false; - m_db->block_txn_stop(); + rtxn_guard.stop(); bool r = handle_alternative_block(bl, id, bvc); m_blocks_txs_check.clear(); return r; //never relay alternative blocks } - m_db->block_txn_stop(); + rtxn_guard.stop(); return handle_block_to_main_chain(bl, id, bvc); } //------------------------------------------------------------------ @@ -4891,13 +4970,14 @@ void Blockchain::invalidate_block_template_cache() m_btc_valid = false; } -void Blockchain::cache_block_template(const block &b, const cryptonote::account_public_address &address, const blobdata &nonce, const difficulty_type &diff, uint64_t expected_reward, uint64_t pool_cookie) +void Blockchain::cache_block_template(const block &b, const cryptonote::account_public_address &address, const blobdata &nonce, const difficulty_type &diff, uint64_t height, uint64_t expected_reward, uint64_t pool_cookie) { MDEBUG("Setting block template cache"); m_btc = b; m_btc_address = address; m_btc_nonce = nonce; m_btc_difficulty = diff; + m_btc_height = height; m_btc_expected_reward = expected_reward; m_btc_pool_cookie = pool_cookie; m_btc_valid = true; diff --git a/src/cryptonote_core/blockchain.h b/src/cryptonote_core/blockchain.h index 2cd4dc31b..244e2a89a 100644 --- a/src/cryptonote_core/blockchain.h +++ b/src/cryptonote_core/blockchain.h @@ -336,6 +336,7 @@ namespace cryptonote * @brief creates a new block to mine against * * @param b return-by-reference block to be filled in + * @param from_block optional block hash to start mining from (main chain tip if NULL) * @param miner_address address new coins for the block will go to * @param di return-by-reference tells the miner what the difficulty target is * @param height return-by-reference tells the miner what height it's mining against @@ -345,6 +346,7 @@ namespace cryptonote * @return true if block template filled in successfully, else false */ bool create_block_template(block& b, const account_public_address& miner_address, difficulty_type& di, uint64_t& height, uint64_t& expected_reward, const blobdata& ex_nonce); + bool create_block_template(block& b, const crypto::hash *from_block, const account_public_address& miner_address, difficulty_type& di, uint64_t& height, uint64_t& expected_reward, const blobdata& ex_nonce); /** * @brief checks if a block is known about with a given hash @@ -392,10 +394,11 @@ namespace cryptonote * @param hashes the hashes to be returned, return-by-reference * @param start_height the start height, return-by-reference * @param current_height the current blockchain height, return-by-reference + * @param clip_pruned whether to constrain results to unpruned data * * @return true if a block found in common, else false */ - bool find_blockchain_supplement(const std::list<crypto::hash>& qblock_ids, std::vector<crypto::hash>& hashes, uint64_t& start_height, uint64_t& current_height) const; + bool find_blockchain_supplement(const std::list<crypto::hash>& qblock_ids, std::vector<crypto::hash>& hashes, uint64_t& start_height, uint64_t& current_height, bool clip_pruned) const; /** * @brief get recent block hashes for a foreign chain @@ -1094,6 +1097,7 @@ namespace cryptonote account_public_address m_btc_address; blobdata m_btc_nonce; difficulty_type m_btc_difficulty; + uint64_t m_btc_height; uint64_t m_btc_pool_cookie; uint64_t m_btc_expected_reward; bool m_btc_valid; @@ -1179,7 +1183,7 @@ namespace cryptonote * * @return false if the reorganization fails, otherwise true */ - bool switch_to_alternative_blockchain(std::list<blocks_ext_by_hash::iterator>& alt_chain, bool discard_disconnected_chain); + bool switch_to_alternative_blockchain(std::list<blocks_ext_by_hash::const_iterator>& alt_chain, bool discard_disconnected_chain); /** * @brief removes the most recent block from the blockchain @@ -1233,6 +1237,18 @@ namespace cryptonote bool handle_alternative_block(const block& b, const crypto::hash& id, block_verification_context& bvc); /** + * @brief builds a list of blocks connecting a block to the main chain + * + * @param prev_id the block hash of the tip of the alt chain + * @param alt_chain the chain to be added to + * @param timestamps returns the timestamps of previous blocks + * @param bvc the block verification context for error return + * + * @return true on success, false otherwise + */ + bool build_alt_chain(const crypto::hash &prev_id, std::list<blocks_ext_by_hash::const_iterator>& alt_chain, std::vector<uint64_t> ×tamps, block_verification_context& bvc) const; + + /** * @brief gets the difficulty requirement for a new block on an alternate chain * * @param alt_chain the chain to be added to @@ -1240,7 +1256,7 @@ namespace cryptonote * * @return the difficulty requirement */ - difficulty_type get_next_difficulty_for_alternative_chain(const std::list<blocks_ext_by_hash::iterator>& alt_chain, block_extended_info& bei) const; + difficulty_type get_next_difficulty_for_alternative_chain(const std::list<blocks_ext_by_hash::const_iterator>& alt_chain, block_extended_info& bei) const; /** * @brief sanity checks a miner transaction before validating an entire block @@ -1400,7 +1416,7 @@ namespace cryptonote * * @return true unless start_height is greater than the current blockchain height */ - bool complete_timestamps_vector(uint64_t start_height, std::vector<uint64_t>& timestamps); + bool complete_timestamps_vector(uint64_t start_height, std::vector<uint64_t>& timestamps) const; /** * @brief calculate the block weight limit for the next block to be added @@ -1464,6 +1480,6 @@ namespace cryptonote * * At some point, may be used to push an update to miners */ - void cache_block_template(const block &b, const cryptonote::account_public_address &address, const blobdata &nonce, const difficulty_type &diff, uint64_t expected_reward, uint64_t pool_cookie); + void cache_block_template(const block &b, const cryptonote::account_public_address &address, const blobdata &nonce, const difficulty_type &diff, uint64_t height, uint64_t expected_reward, uint64_t pool_cookie); }; } // namespace cryptonote diff --git a/src/cryptonote_core/cryptonote_core.cpp b/src/cryptonote_core/cryptonote_core.cpp index 8ab7d174c..be1ea5a17 100644 --- a/src/cryptonote_core/cryptonote_core.cpp +++ b/src/cryptonote_core/cryptonote_core.cpp @@ -62,6 +62,9 @@ DISABLE_VS_WARNINGS(4355) #define BAD_SEMANTICS_TXES_MAX_SIZE 100 +// basically at least how many bytes the block itself serializes to without the miner tx +#define BLOCK_SIZE_SANITY_LEEWAY 100 + namespace cryptonote { const command_line::arg_descriptor<bool, false> arg_testnet_on = { @@ -1265,6 +1268,11 @@ namespace cryptonote return m_blockchain_storage.create_block_template(b, adr, diffic, height, expected_reward, ex_nonce); } //----------------------------------------------------------------------------------------------- + bool core::get_block_template(block& b, const crypto::hash *prev_block, const account_public_address& adr, difficulty_type& diffic, uint64_t& height, uint64_t& expected_reward, const blobdata& ex_nonce) + { + return m_blockchain_storage.create_block_template(b, prev_block, adr, diffic, height, expected_reward, ex_nonce); + } + //----------------------------------------------------------------------------------------------- bool core::find_blockchain_supplement(const std::list<crypto::hash>& qblock_ids, NOTIFY_RESPONSE_CHAIN_ENTRY::request& resp) const { return m_blockchain_storage.find_blockchain_supplement(qblock_ids, resp); @@ -1318,9 +1326,9 @@ namespace cryptonote return bce; } //----------------------------------------------------------------------------------------------- - bool core::handle_block_found(block& b) + bool core::handle_block_found(block& b, block_verification_context &bvc) { - block_verification_context bvc = boost::value_initialized<block_verification_context>(); + bvc = boost::value_initialized<block_verification_context>(); m_miner.pause(); std::vector<block_complete_entry> blocks; try @@ -1370,7 +1378,7 @@ namespace cryptonote m_pprotocol->relay_block(arg, exclude_context); } - return bvc.m_added_to_main_chain; + return true; } //----------------------------------------------------------------------------------------------- void core::on_synchronized() @@ -1417,18 +1425,21 @@ namespace cryptonote { TRY_ENTRY(); - // load json & DNS checkpoints every 10min/hour respectively, - // 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."); - bvc = boost::value_initialized<block_verification_context>(); - if(block_blob.size() > get_max_block_size()) + + if (!check_incoming_block_size(block_blob)) { - LOG_PRINT_L1("WRONG BLOCK BLOB, too big size " << block_blob.size() << ", rejected"); bvc.m_verifivation_failed = true; return false; } + if (((size_t)-1) <= 0xffffffff && block_blob.size() >= 0x3fffffff) + MWARNING("This block's size is " << block_blob.size() << ", closing on the 32 bit limit"); + + // load json & DNS checkpoints every 10min/hour respectively, + // 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."); + block lb; if (!b) { @@ -1453,9 +1464,13 @@ namespace cryptonote // block_blob bool core::check_incoming_block_size(const blobdata& block_blob) const { - if(block_blob.size() > get_max_block_size()) + // note: we assume block weight is always >= block blob size, so we check incoming + // blob size against the block weight limit, which acts as a sanity check without + // having to parse/weigh first; in fact, since the block blob is the block header + // plus the tx hashes, the weight will typically be much larger than the blob size + if(block_blob.size() > m_blockchain_storage.get_current_cumulative_block_weight_limit() + BLOCK_SIZE_SANITY_LEEWAY) { - LOG_PRINT_L1("WRONG BLOCK BLOB, too big size " << block_blob.size() << ", rejected"); + LOG_PRINT_L1("WRONG BLOCK BLOB, sanity check failed on size " << block_blob.size() << ", rejected"); return false; } return true; @@ -1594,6 +1609,9 @@ namespace cryptonote //----------------------------------------------------------------------------------------------- bool core::check_fork_time() { + if (m_nettype == FAKECHAIN) + return true; + HardFork::State state = m_blockchain_storage.get_hard_fork_state(); const el::Level level = el::Level::Warning; switch (state) { @@ -1809,7 +1827,7 @@ namespace cryptonote //----------------------------------------------------------------------------------------------- bool core::check_block_rate() { - if (m_offline || m_target_blockchain_height > get_current_blockchain_height()) + if (m_offline || m_nettype == FAKECHAIN || m_target_blockchain_height > get_current_blockchain_height()) { MDEBUG("Not checking block rate, offline or syncing"); return true; diff --git a/src/cryptonote_core/cryptonote_core.h b/src/cryptonote_core/cryptonote_core.h index 356265dd6..2fcf26a17 100644 --- a/src/cryptonote_core/cryptonote_core.h +++ b/src/cryptonote_core/cryptonote_core.h @@ -195,10 +195,11 @@ namespace cryptonote * the network. * * @param b the block found + * @param bvc returns the block verification flags * * @return true if the block was added to the main chain, otherwise false */ - virtual bool handle_block_found( block& b); + virtual bool handle_block_found(block& b, block_verification_context &bvc); /** * @copydoc Blockchain::create_block_template @@ -206,6 +207,7 @@ namespace cryptonote * @note see Blockchain::create_block_template */ virtual bool get_block_template(block& b, const account_public_address& adr, difficulty_type& diffic, uint64_t& height, uint64_t& expected_reward, const blobdata& ex_nonce); + virtual bool get_block_template(block& b, const crypto::hash *prev_block, const account_public_address& adr, difficulty_type& diffic, uint64_t& height, uint64_t& expected_reward, const blobdata& ex_nonce); /** * @brief called when a transaction is relayed diff --git a/src/cryptonote_core/tx_sanity_check.cpp b/src/cryptonote_core/tx_sanity_check.cpp new file mode 100644 index 000000000..10198a3d3 --- /dev/null +++ b/src/cryptonote_core/tx_sanity_check.cpp @@ -0,0 +1,100 @@ +// Copyright (c) 2019, 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 <stdint.h> +#include <vector> +#include "cryptonote_basic/cryptonote_basic_impl.h" +#include "cryptonote_basic/cryptonote_format_utils.h" +#include "blockchain.h" +#include "tx_sanity_check.h" + +#undef MONERO_DEFAULT_LOG_CATEGORY +#define MONERO_DEFAULT_LOG_CATEGORY "verify" + +namespace cryptonote +{ + +bool tx_sanity_check(Blockchain &blockchain, const cryptonote::blobdata &tx_blob) +{ + cryptonote::transaction tx; + + if (!cryptonote::parse_and_validate_tx_from_blob(tx_blob, tx)) + { + MERROR("Failed to parse transaction"); + return false; + } + + if (cryptonote::is_coinbase(tx)) + { + MERROR("Transaction is coinbase"); + return false; + } + std::set<uint64_t> rct_indices; + size_t n_indices = 0; + + for (const auto &txin : tx.vin) + { + if (txin.type() != typeid(cryptonote::txin_to_key)) + continue; + const cryptonote::txin_to_key &in_to_key = boost::get<cryptonote::txin_to_key>(txin); + if (in_to_key.amount != 0) + continue; + const std::vector<uint64_t> absolute = cryptonote::relative_output_offsets_to_absolute(in_to_key.key_offsets); + for (uint64_t offset: absolute) + rct_indices.insert(offset); + n_indices += in_to_key.key_offsets.size(); + } + + if (n_indices <= 10) + { + MERROR("n_indices is only " << n_indices); + return true; + } + + uint64_t n_available = blockchain.get_num_mature_outputs(0); + if (n_available < 10000) + return true; + + if (rct_indices.size() < n_indices * 8 / 10) + { + MERROR("unique indices is only " << rct_indices.size() << "/" << n_indices); + return false; + } + + std::vector<uint64_t> offsets(rct_indices.begin(), rct_indices.end()); + uint64_t median = epee::misc_utils::median(offsets); + if (median < n_available * 9 / 10) + { + MERROR("median is " << median << "/" << n_available); + return false; + } + + return true; +} + +} diff --git a/src/cryptonote_core/tx_sanity_check.h b/src/cryptonote_core/tx_sanity_check.h new file mode 100644 index 000000000..c12d1b0b1 --- /dev/null +++ b/src/cryptonote_core/tx_sanity_check.h @@ -0,0 +1,36 @@ +// Copyright (c) 2019, 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 "cryptonote_basic/blobdatatype.h" + +namespace cryptonote +{ + class Blockchain; + + bool tx_sanity_check(Blockchain &blockchain, const cryptonote::blobdata &tx_blob); +} diff --git a/src/cryptonote_protocol/cryptonote_protocol_handler.inl b/src/cryptonote_protocol/cryptonote_protocol_handler.inl index b7a50783a..7adca3158 100644 --- a/src/cryptonote_protocol/cryptonote_protocol_handler.inl +++ b/src/cryptonote_protocol/cryptonote_protocol_handler.inl @@ -2366,6 +2366,8 @@ skip: { MINFO("Target height decreasing from " << previous_target << " to " << target); m_core.set_target_blockchain_height(target); + if (target == 0 && context.m_state > cryptonote_connection_context::state_before_handshake && !m_stopping) + MCWARNING("global", "monerod is now disconnected from the network"); } m_block_queue.flush_spans(context.m_connection_id, false); diff --git a/src/daemon/main.cpp b/src/daemon/main.cpp index c3ac24b70..dbbb2308c 100644 --- a/src/daemon/main.cpp +++ b/src/daemon/main.cpp @@ -257,7 +257,8 @@ int main(int argc, char const * argv[]) bf::path log_file_path {data_dir / std::string(CRYPTONOTE_NAME ".log")}; if (!command_line::is_arg_defaulted(vm, daemon_args::arg_log_file)) log_file_path = command_line::get_arg(vm, daemon_args::arg_log_file); - log_file_path = bf::absolute(log_file_path, relative_path_base); + if (!log_file_path.has_parent_path()) + log_file_path = bf::absolute(log_file_path, relative_path_base); mlog_configure(log_file_path.string(), true, command_line::get_arg(vm, daemon_args::arg_max_log_file_size), command_line::get_arg(vm, daemon_args::arg_max_log_files)); // Set log level diff --git a/src/daemon/rpc_command_executor.cpp b/src/daemon/rpc_command_executor.cpp index c9ec5109e..186296dc9 100644 --- a/src/daemon/rpc_command_executor.cpp +++ b/src/daemon/rpc_command_executor.cpp @@ -551,11 +551,12 @@ bool t_rpc_command_executor::mining_status() { tools::msg_writer() << " Ignore battery: " << (mres.bg_ignore_battery ? "yes" : "no"); } - if (!mining_busy && mres.active) + if (!mining_busy && mres.active && mres.speed > 0 && mres.block_target > 0 && mres.difficulty > 0) { - uint64_t daily = 86400ull / mres.block_target * mres.block_reward; - uint64_t monthly = 86400ull / mres.block_target * 30.5 * mres.block_reward; - uint64_t yearly = 86400ull / mres.block_target * 356 * mres.block_reward; + double ratio = mres.speed * mres.block_target / (double)mres.difficulty; + uint64_t daily = 86400ull / mres.block_target * mres.block_reward * ratio; + uint64_t monthly = 86400ull / mres.block_target * 30.5 * mres.block_reward * ratio; + uint64_t yearly = 86400ull / mres.block_target * 356 * mres.block_reward * ratio; tools::msg_writer() << "Expected: " << cryptonote::print_money(daily) << " monero daily, " << cryptonote::print_money(monthly) << " monero monthly, " << cryptonote::print_money(yearly) << " yearly"; } @@ -2204,7 +2205,7 @@ bool t_rpc_command_executor::prune_blockchain() } } - tools::success_msg_writer() << "Blockchain pruned: seed " << epee::string_tools::to_string_hex(res.pruning_seed); + tools::success_msg_writer() << "Blockchain pruned"; return true; } @@ -2235,7 +2236,7 @@ bool t_rpc_command_executor::check_blockchain_pruning() if (res.pruning_seed) { - tools::success_msg_writer() << "Blockchain pruning checked"; + tools::success_msg_writer() << "Blockchain is pruned"; } else { diff --git a/src/daemonizer/windows_daemonizer.inl b/src/daemonizer/windows_daemonizer.inl index 701c098f6..c6cd474fd 100644 --- a/src/daemonizer/windows_daemonizer.inl +++ b/src/daemonizer/windows_daemonizer.inl @@ -61,6 +61,10 @@ namespace daemonizer "run-as-service" , "Hidden -- true if running as windows service" }; + const command_line::arg_descriptor<bool> arg_non_interactive = { + "non-interactive" + , "Run non-interactive" + }; std::string get_argument_string(int argc, char const * argv[]) { @@ -83,6 +87,7 @@ namespace daemonizer command_line::add_arg(normal_options, arg_start_service); command_line::add_arg(normal_options, arg_stop_service); command_line::add_arg(hidden_options, arg_is_service); + command_line::add_arg(hidden_options, arg_non_interactive); } inline boost::filesystem::path get_default_data_dir() @@ -177,7 +182,10 @@ namespace daemonizer else // interactive { //LOG_PRINT_L0("Monero '" << MONERO_RELEASE_NAME << "' (v" << MONERO_VERSION_FULL); - return executor.run_interactive(vm); + if (command_line::has_arg(vm, arg_non_interactive)) + return executor.run_non_interactive(vm); + else + return executor.run_interactive(vm); } return false; diff --git a/src/device/device.hpp b/src/device/device.hpp index 2e485b1d6..866e2c676 100644 --- a/src/device/device.hpp +++ b/src/device/device.hpp @@ -76,6 +76,7 @@ namespace hw { class i_device_callback { public: virtual void on_button_request(uint64_t code=0) {} + virtual void on_button_pressed() {} virtual boost::optional<epee::wipeable_string> on_pin_request() { return boost::none; } virtual boost::optional<epee::wipeable_string> on_passphrase_request(bool on_device) { return boost::none; } virtual void on_progress(const device_progress& event) {} diff --git a/src/device/device_io_hid.cpp b/src/device/device_io_hid.cpp index f07e0eaae..721bed9ca 100644 --- a/src/device/device_io_hid.cpp +++ b/src/device/device_io_hid.cpp @@ -85,7 +85,18 @@ namespace hw { void device_io_hid::connect(void *params) { hid_conn_params *p = (struct hid_conn_params*)params; - this->connect(p->vid, p->pid, p->interface_number, p->usage_page); + if (!this->connect(p->vid, p->pid, p->interface_number, p->usage_page)) { + ASSERT_X(false, "No device found"); + } + } + + void device_io_hid::connect(const std::vector<hid_conn_params> &hcpV) { + for (auto p: hcpV) { + if (this->connect(p.vid, p.pid, p.interface_number, p.usage_page)) { + return; + } + } + ASSERT_X(false, "No device found"); } hid_device_info *device_io_hid::find_device(hid_device_info *devices_list, boost::optional<int> interface_number, boost::optional<unsigned short> usage_page) { @@ -124,14 +135,17 @@ namespace hw { return result; } - void device_io_hid::connect(unsigned int vid, unsigned int pid, boost::optional<int> interface_number, boost::optional<unsigned short> usage_page) { + hid_device *device_io_hid::connect(unsigned int vid, unsigned int pid, boost::optional<int> interface_number, boost::optional<unsigned short> usage_page) { hid_device_info *hwdev_info_list; hid_device *hwdev; this->disconnect(); hwdev_info_list = hid_enumerate(vid, pid); - ASSERT_X(hwdev_info_list, "Unable to enumerate device "+std::to_string(vid)+":"+std::to_string(vid)+ ": "+ safe_hid_error(this->usb_device)); + if (!hwdev_info_list) { + MDEBUG("Unable to enumerate device "+std::to_string(vid)+":"+std::to_string(vid)+ ": "+ safe_hid_error(this->usb_device)); + return NULL; + } hwdev = NULL; if (hid_device_info *device = find_device(hwdev_info_list, interface_number, usage_page)) { hwdev = hid_open_path(device->path); @@ -141,6 +155,7 @@ namespace hw { this->usb_vid = vid; this->usb_pid = pid; this->usb_device = hwdev; + return hwdev; } diff --git a/src/device/device_io_hid.hpp b/src/device/device_io_hid.hpp index ed22058d6..96cb8d993 100644 --- a/src/device/device_io_hid.hpp +++ b/src/device/device_io_hid.hpp @@ -98,7 +98,8 @@ namespace hw { void init(); void connect(void *params); - void connect(unsigned int vid, unsigned int pid, boost::optional<int> interface_number, boost::optional<unsigned short> usage_page); + void connect(const std::vector<hid_conn_params> &conn); + hid_device *connect(unsigned int vid, unsigned int pid, boost::optional<int> interface_number, boost::optional<unsigned short> usage_page); bool connected() const; int exchange(unsigned char *command, unsigned int cmd_len, unsigned char *response, unsigned int max_resp_len, bool user_input); void disconnect(); diff --git a/src/device/device_ledger.cpp b/src/device/device_ledger.cpp index d6033e189..200370564 100644 --- a/src/device/device_ledger.cpp +++ b/src/device/device_ledger.cpp @@ -389,10 +389,15 @@ namespace hw { MDEBUG( "Device "<<this->id <<" HIDUSB inited"); return true; } + + static const std::vector<hw::io::hid_conn_params> known_devices { + {0x2c97, 0x0001, 0, 0xffa0}, + {0x2c97, 0x0004, 0, 0xffa0}, + }; bool device_ledger::connect(void) { this->disconnect(); - hw_device.connect(0x2c97, 0x0001, 0, 0xffa0); + hw_device.connect(known_devices); this->reset(); #ifdef DEBUG_HWDEVICE cryptonote::account_public_address pubkey; diff --git a/src/device_trezor/device_trezor.cpp b/src/device_trezor/device_trezor.cpp index b4a80cf2c..b1022dd9c 100644 --- a/src/device_trezor/device_trezor.cpp +++ b/src/device_trezor/device_trezor.cpp @@ -137,7 +137,7 @@ namespace trezor { } auto current_time = std::chrono::steady_clock::now(); - if (current_time - m_last_live_refresh_time <= std::chrono::seconds(20)) + if (current_time - m_last_live_refresh_time <= std::chrono::minutes(5)) { continue; } diff --git a/src/device_trezor/device_trezor_base.cpp b/src/device_trezor/device_trezor_base.cpp index f3d15c5e2..b7adf433d 100644 --- a/src/device_trezor/device_trezor_base.cpp +++ b/src/device_trezor/device_trezor_base.cpp @@ -43,7 +43,7 @@ namespace trezor { const uint32_t device_trezor_base::DEFAULT_BIP44_PATH[] = {0x8000002c, 0x80000080}; - device_trezor_base::device_trezor_base(): m_callback(nullptr) { + device_trezor_base::device_trezor_base(): m_callback(nullptr), m_last_msg_type(messages::MessageType_Success) { #ifdef WITH_TREZOR_DEBUGGING m_debug = false; #endif @@ -115,10 +115,14 @@ namespace trezor { MDEBUG("Enumerating Trezor devices..."); enumerate(trans); + sort_transports_by_env(trans); - MDEBUG("Enumeration yielded " << trans.size() << " devices"); + MDEBUG("Enumeration yielded " << trans.size() << " Trezor devices"); for (auto &cur : trans) { MDEBUG(" device: " << *(cur.get())); + } + + for (auto &cur : trans) { std::string cur_path = cur->get_path(); if (boost::starts_with(cur_path, this->name)) { MDEBUG("Device Match: " << cur_path); @@ -275,6 +279,12 @@ namespace trezor { // Later if needed this generic message handler can be replaced by a pointer to // a protocol message handler which by default points to the device class which implements // the default handler. + + if (m_last_msg_type == messages::MessageType_ButtonRequest){ + on_button_pressed(); + } + m_last_msg_type = input.m_type; + switch(input.m_type){ case messages::MessageType_ButtonRequest: on_button_request(input, dynamic_cast<const messages::common::ButtonRequest*>(input.m_msg.get())); @@ -406,13 +416,19 @@ namespace trezor { CHECK_AND_ASSERT_THROW_MES(msg, "Empty message"); MDEBUG("on_button_request, code: " << msg->code()); + TREZOR_CALLBACK(on_button_request, msg->code()); + messages::common::ButtonAck ack; write_raw(&ack); - TREZOR_CALLBACK(on_button_request, msg->code()); resp = read_raw(); } + void device_trezor_base::on_button_pressed() + { + TREZOR_CALLBACK(on_button_pressed); + } + void device_trezor_base::on_pin_request(GenericMessage & resp, const messages::common::PinMatrixRequest * msg) { MDEBUG("on_pin_request"); diff --git a/src/device_trezor/device_trezor_base.hpp b/src/device_trezor/device_trezor_base.hpp index 8c3c14b29..c106d2099 100644 --- a/src/device_trezor/device_trezor_base.hpp +++ b/src/device_trezor/device_trezor_base.hpp @@ -98,6 +98,7 @@ namespace trezor { std::shared_ptr<messages::management::Features> m_features; // features from the last device reset boost::optional<epee::wipeable_string> m_pin; boost::optional<epee::wipeable_string> m_passphrase; + messages::MessageType m_last_msg_type; cryptonote::network_type network_type; @@ -311,6 +312,7 @@ namespace trezor { // Protocol callbacks void on_button_request(GenericMessage & resp, const messages::common::ButtonRequest * msg); + void on_button_pressed(); void on_pin_request(GenericMessage & resp, const messages::common::PinMatrixRequest * msg); void on_passphrase_request(GenericMessage & resp, const messages::common::PassphraseRequest * msg); void on_passphrase_state_request(GenericMessage & resp, const messages::common::PassphraseStateRequest * msg); diff --git a/src/device_trezor/trezor/transport.cpp b/src/device_trezor/trezor/transport.cpp index 991ba3395..59b281f13 100644 --- a/src/device_trezor/trezor/transport.cpp +++ b/src/device_trezor/trezor/transport.cpp @@ -31,11 +31,13 @@ #include <libusb.h> #endif +#include <algorithm> #include <boost/endian/conversion.hpp> #include <boost/asio/io_service.hpp> #include <boost/asio/ip/udp.hpp> #include <boost/date_time/posix_time/posix_time_types.hpp> #include <boost/format.hpp> +#include "common/apply_permutation.h" #include "transport.hpp" #include "messages/messages-common.pb.h" @@ -95,6 +97,47 @@ namespace trezor{ return patch | (((uint64_t)minor) << bits_2) | (((uint64_t)major) << (bits_1 + bits_2)); } + typedef struct { + uint16_t trezor_type; + uint16_t id_vendor; + uint16_t id_product; + } trezor_usb_desc_t; + + static trezor_usb_desc_t TREZOR_DESC_T1 = {1, 0x534C, 0x0001}; + static trezor_usb_desc_t TREZOR_DESC_T2 = {2, 0x1209, 0x53C1}; + static trezor_usb_desc_t TREZOR_DESC_T2_BL = {3, 0x1209, 0x53C0}; + + static trezor_usb_desc_t TREZOR_DESCS[] = { + TREZOR_DESC_T1, + TREZOR_DESC_T2, + TREZOR_DESC_T2_BL, + }; + + static size_t TREZOR_DESCS_LEN = sizeof(TREZOR_DESCS)/sizeof(TREZOR_DESCS[0]); + + static ssize_t get_device_idx(uint16_t id_vendor, uint16_t id_product){ + for(size_t i = 0; i < TREZOR_DESCS_LEN; ++i){ + if (TREZOR_DESCS[i].id_vendor == id_vendor && TREZOR_DESCS[i].id_product == id_product){ + return i; + } + } + + return -1; + } + + static bool is_device_supported(ssize_t device_idx){ + CHECK_AND_ASSERT_THROW_MES(device_idx < (ssize_t)TREZOR_DESCS_LEN, "Device desc idx too big"); + if (device_idx < 0){ + return false; + } + +#ifdef TREZOR_1_SUPPORTED + return true; +#else + return TREZOR_DESCS[device_idx].trezor_type != 1; +#endif + } + // // Helpers // @@ -223,6 +266,11 @@ namespace trezor{ msg = msg_wrap; } + static void assert_port_number(uint32_t port) + { + CHECK_AND_ASSERT_THROW_MES(port >= 1024 && port < 65535, "Invalid port number: " << port); + } + Transport::Transport(): m_open_counter(0) { } @@ -263,6 +311,29 @@ namespace trezor{ const char * BridgeTransport::PATH_PREFIX = "bridge:"; + BridgeTransport::BridgeTransport( + boost::optional<std::string> device_path, + boost::optional<std::string> bridge_host): + m_device_path(device_path), + m_bridge_host(bridge_host ? bridge_host.get() : DEFAULT_BRIDGE), + m_response(boost::none), + m_session(boost::none), + m_device_info(boost::none) + { + const char *env_bridge_port = nullptr; + if (!bridge_host && (env_bridge_port = getenv("TREZOR_BRIDGE_PORT")) != nullptr) + { + uint16_t bridge_port; + CHECK_AND_ASSERT_THROW_MES(epee::string_tools::get_xtype_from_string(bridge_port, env_bridge_port), "Invalid bridge port: " << env_bridge_port); + assert_port_number(bridge_port); + + m_bridge_host = std::string("127.0.0.1:") + boost::lexical_cast<std::string>(env_bridge_port); + MDEBUG("Bridge host: " << m_bridge_host); + } + + m_http_client.set_server(m_bridge_host, boost::none, epee::net_utils::ssl_support_t::e_ssl_support_disabled); + } + std::string BridgeTransport::get_path() const { if (!m_device_path){ return ""; @@ -284,6 +355,24 @@ namespace trezor{ for(rapidjson::Value::ConstValueIterator itr = bridge_res.Begin(); itr != bridge_res.End(); ++itr){ auto element = itr->GetObject(); auto t = std::make_shared<BridgeTransport>(boost::make_optional(json_get_string(element["path"]))); + + auto itr_vendor = element.FindMember("vendor"); + auto itr_product = element.FindMember("product"); + if (itr_vendor != element.MemberEnd() && itr_product != element.MemberEnd() + && itr_vendor->value.IsNumber() && itr_product->value.IsNumber()){ + try { + const auto id_vendor = (uint16_t) itr_vendor->value.GetUint64(); + const auto id_product = (uint16_t) itr_product->value.GetUint64(); + const auto device_idx = get_device_idx(id_vendor, id_product); + if (!is_device_supported(device_idx)){ + MDEBUG("Device with idx " << device_idx << " is not supported. Vendor: " << id_vendor << ", product: " << id_product); + continue; + } + } catch(const std::exception &e){ + MERROR("Could not detect vendor & product: " << e.what()); + } + } + t->m_device_info.emplace(); t->m_device_info->CopyFrom(*itr, t->m_device_info->GetAllocator()); res.push_back(t); @@ -401,28 +490,40 @@ namespace trezor{ const char * UdpTransport::DEFAULT_HOST = "127.0.0.1"; const int UdpTransport::DEFAULT_PORT = 21324; + static void parse_udp_path(std::string &host, int &port, std::string path) + { + if (boost::starts_with(path, UdpTransport::PATH_PREFIX)) + { + path = path.substr(strlen(UdpTransport::PATH_PREFIX)); + } + + auto delim = path.find(':'); + if (delim == std::string::npos) { + host = path; + } else { + host = path.substr(0, delim); + port = std::stoi(path.substr(delim + 1)); + } + } + UdpTransport::UdpTransport(boost::optional<std::string> device_path, boost::optional<std::shared_ptr<Protocol>> proto) : m_io_service(), m_deadline(m_io_service) { + m_device_host = DEFAULT_HOST; m_device_port = DEFAULT_PORT; + const char *env_trezor_path = nullptr; + if (device_path) { - const std::string device_str = device_path.get(); - auto delim = device_str.find(':'); - if (delim == std::string::npos) { - m_device_host = device_str; - } else { - m_device_host = device_str.substr(0, delim); - m_device_port = std::stoi(device_str.substr(delim + 1)); - } + parse_udp_path(m_device_host, m_device_port, device_path.get()); + } else if ((env_trezor_path = getenv("TREZOR_PATH")) != nullptr && boost::starts_with(env_trezor_path, UdpTransport::PATH_PREFIX)){ + parse_udp_path(m_device_host, m_device_port, std::string(env_trezor_path)); + MDEBUG("Applied TREZOR_PATH: " << m_device_host << ":" << m_device_port); } else { m_device_host = DEFAULT_HOST; } - if (m_device_port <= 1024 || m_device_port > 65535){ - throw std::invalid_argument("Port number invalid"); - } - + assert_port_number((uint32_t)m_device_port); if (m_device_host != "localhost" && m_device_host != DEFAULT_HOST){ throw std::invalid_argument("Local endpoint allowed only"); } @@ -670,24 +771,20 @@ namespace trezor{ #ifdef WITH_DEVICE_TREZOR_WEBUSB static bool is_trezor1(libusb_device_descriptor * info){ - return info->idVendor == 0x534C && info->idProduct == 0x0001; + return info->idVendor == TREZOR_DESC_T1.id_vendor && info->idProduct == TREZOR_DESC_T1.id_product; } static bool is_trezor2(libusb_device_descriptor * info){ - return info->idVendor == 0x1209 && info->idProduct == 0x53C1; + return info->idVendor == TREZOR_DESC_T2.id_vendor && info->idProduct == TREZOR_DESC_T2.id_product; } static bool is_trezor2_bl(libusb_device_descriptor * info){ - return info->idVendor == 0x1209 && info->idProduct == 0x53C0; + return info->idVendor == TREZOR_DESC_T2_BL.id_vendor && info->idProduct == TREZOR_DESC_T2_BL.id_product; } - static uint8_t get_trezor_dev_mask(libusb_device_descriptor * info){ - uint8_t mask = 0; + static ssize_t get_trezor_dev_id(libusb_device_descriptor *info){ CHECK_AND_ASSERT_THROW_MES(info, "Empty device descriptor"); - mask |= is_trezor1(info) ? 1 : 0; - mask |= is_trezor2(info) ? 2 : 0; - mask |= is_trezor2_bl(info) ? 4 : 0; - return mask; + return get_device_idx(info->idVendor, info->idProduct); } static void set_libusb_log(libusb_context *ctx){ @@ -804,12 +901,12 @@ namespace trezor{ continue; } - const auto trezor_mask = get_trezor_dev_mask(&desc); - if (!trezor_mask){ + const auto trezor_dev_idx = get_trezor_dev_id(&desc); + if (!is_device_supported(trezor_dev_idx)){ continue; } - MTRACE("Found Trezor device: " << desc.idVendor << ":" << desc.idProduct << " mask " << (int)trezor_mask); + MTRACE("Found Trezor device: " << desc.idVendor << ":" << desc.idProduct << " dev_idx " << (int)trezor_dev_idx); auto t = std::make_shared<WebUsbTransport>(boost::make_optional(&desc)); t->m_bus_id = libusb_get_bus_number(devs[i]); @@ -869,8 +966,8 @@ namespace trezor{ continue; } - const auto trezor_mask = get_trezor_dev_mask(&desc); - if (!trezor_mask) { + const auto trezor_dev_idx = get_trezor_dev_id(&desc); + if (!is_device_supported(trezor_dev_idx)){ continue; } @@ -881,7 +978,7 @@ namespace trezor{ get_libusb_ports(devs[i], path); MTRACE("Found Trezor device: " << desc.idVendor << ":" << desc.idProduct - << ", mask: " << (int)trezor_mask + << ", dev_idx: " << (int)trezor_dev_idx << ". path: " << get_usb_path(bus_id, path)); if (bus_id == m_bus_id && path == m_port_numbers) { @@ -1070,6 +1167,39 @@ namespace trezor{ #endif } + void sort_transports_by_env(t_transport_vect & res){ + const char *env_trezor_path = getenv("TREZOR_PATH"); + if (!env_trezor_path){ + return; + } + + // Sort transports by the longest matching prefix with TREZOR_PATH + std::string trezor_path(env_trezor_path); + std::vector<size_t> match_idx(res.size()); + std::vector<size_t> path_permutation(res.size()); + + for(size_t i = 0; i < res.size(); ++i){ + auto cpath = res[i]->get_path(); + std::string * s1 = &trezor_path; + std::string * s2 = &cpath; + + // first has to be shorter in std::mismatch(). Returns first non-matching iterators. + if (s1->size() >= s2->size()){ + std::swap(s1, s2); + } + + const auto mism = std::mismatch(s1->begin(), s1->end(), s2->begin()); + match_idx[i] = mism.first - s1->begin(); + path_permutation[i] = i; + } + + std::sort(path_permutation.begin(), path_permutation.end(), [&](const size_t i0, const size_t i1) { + return match_idx[i0] > match_idx[i1]; + }); + + tools::apply_permutation(path_permutation, res); + } + std::shared_ptr<Transport> transport(const std::string & path){ if (boost::starts_with(path, BridgeTransport::PATH_PREFIX)){ return std::make_shared<BridgeTransport>(path.substr(strlen(BridgeTransport::PATH_PREFIX))); diff --git a/src/device_trezor/trezor/transport.hpp b/src/device_trezor/trezor/transport.hpp index 2945b3184..affd91553 100644 --- a/src/device_trezor/trezor/transport.hpp +++ b/src/device_trezor/trezor/transport.hpp @@ -163,15 +163,7 @@ namespace trezor { public: BridgeTransport( boost::optional<std::string> device_path = boost::none, - boost::optional<std::string> bridge_host = boost::none): - m_device_path(device_path), - m_bridge_host(bridge_host ? bridge_host.get() : DEFAULT_BRIDGE), - m_response(boost::none), - m_session(boost::none), - m_device_info(boost::none) - { - m_http_client.set_server(m_bridge_host, boost::none, epee::net_utils::ssl_support_t::e_ssl_support_disabled); - } + boost::optional<std::string> bridge_host = boost::none); virtual ~BridgeTransport() = default; @@ -311,6 +303,11 @@ namespace trezor { void enumerate(t_transport_vect & res); /** + * Sorts found transports by TREZOR_PATH environment variable. + */ + void sort_transports_by_env(t_transport_vect & res); + + /** * Transforms path to the transport */ std::shared_ptr<Transport> transport(const std::string & path); diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl index f0aef384f..be97edbe5 100644 --- a/src/p2p/net_node.inl +++ b/src/p2p/net_node.inl @@ -176,8 +176,15 @@ namespace nodetool if(!addr.is_blockable()) return false; + const time_t now = time(nullptr); + CRITICAL_REGION_LOCAL(m_blocked_hosts_lock); - m_blocked_hosts[addr.host_str()] = time(nullptr) + seconds; + time_t limit; + if (now > std::numeric_limits<time_t>::max() - seconds) + limit = std::numeric_limits<time_t>::max(); + else + limit = now + seconds; + m_blocked_hosts[addr.host_str()] = limit; // drop any connection to that address. This should only have to look into // the zone related to the connection, but really make sure everything is @@ -1259,7 +1266,7 @@ namespace nodetool } } else - random_index = crypto::rand<size_t>() % filtered.size(); + random_index = crypto::rand_idx(filtered.size()); CHECK_AND_ASSERT_MES(random_index < filtered.size(), false, "random_index < filtered.size() failed!!"); random_index = filtered[random_index]; @@ -1313,7 +1320,7 @@ namespace nodetool return true; size_t try_count = 0; - size_t current_index = crypto::rand<size_t>()%m_seed_nodes.size(); + size_t current_index = crypto::rand_idx(m_seed_nodes.size()); const net_server& server = m_network_zones.at(epee::net_utils::zone::public_).m_net_server; while(true) { diff --git a/src/p2p/net_peerlist.h b/src/p2p/net_peerlist.h index ebe0268d8..52814af94 100644 --- a/src/p2p/net_peerlist.h +++ b/src/p2p/net_peerlist.h @@ -398,7 +398,7 @@ namespace nodetool return false; } - size_t random_index = crypto::rand<size_t>() % m_peers_gray.size(); + size_t random_index = crypto::rand_idx(m_peers_gray.size()); peers_indexed::index<by_time>::type& by_time_index = m_peers_gray.get<by_time>(); pe = *epee::misc_utils::move_it_backward(--by_time_index.end(), random_index); diff --git a/src/ringct/bulletproofs.cc b/src/ringct/bulletproofs.cc index e394ef088..6270d4d14 100644 --- a/src/ringct/bulletproofs.cc +++ b/src/ringct/bulletproofs.cc @@ -48,12 +48,12 @@ extern "C" //#define DEBUG_BP -#if 1 +#if 0 #define PERF_TIMER_START_BP(x) PERF_TIMER_START_UNIT(x, 1000000) #define PERF_TIMER_STOP_BP(x) PERF_TIMER_STOP(x) #else -#define PERF_TIMER_START_BP(x) ((void*)0) -#define PERF_TIMER_STOP_BP(x) ((void*)0) +#define PERF_TIMER_START_BP(x) ((void)0) +#define PERF_TIMER_STOP_BP(x) ((void)0) #endif #define STRAUS_SIZE_LIMIT 232 @@ -439,35 +439,35 @@ static epee::span<const rct::key> slice(const rct::keyV &a, size_t start, size_t static rct::key hash_cache_mash(rct::key &hash_cache, const rct::key &mash0, const rct::key &mash1) { - rct::keyV data; - data.reserve(3); - data.push_back(hash_cache); - data.push_back(mash0); - data.push_back(mash1); - return hash_cache = rct::hash_to_scalar(data); + rct::key data[3]; + data[0] = hash_cache; + data[1] = mash0; + data[2] = mash1; + rct::hash_to_scalar(hash_cache, data, sizeof(data)); + return hash_cache; } static rct::key hash_cache_mash(rct::key &hash_cache, const rct::key &mash0, const rct::key &mash1, const rct::key &mash2) { - rct::keyV data; - data.reserve(4); - data.push_back(hash_cache); - data.push_back(mash0); - data.push_back(mash1); - data.push_back(mash2); - return hash_cache = rct::hash_to_scalar(data); + rct::key data[4]; + data[0] = hash_cache; + data[1] = mash0; + data[2] = mash1; + data[3] = mash2; + rct::hash_to_scalar(hash_cache, data, sizeof(data)); + return hash_cache; } static rct::key hash_cache_mash(rct::key &hash_cache, const rct::key &mash0, const rct::key &mash1, const rct::key &mash2, const rct::key &mash3) { - rct::keyV data; - data.reserve(5); - data.push_back(hash_cache); - data.push_back(mash0); - data.push_back(mash1); - data.push_back(mash2); - data.push_back(mash3); - return hash_cache = rct::hash_to_scalar(data); + rct::key data[5]; + data[0] = hash_cache; + data[1] = mash0; + data[2] = mash1; + data[3] = mash2; + data[4] = mash3; + rct::hash_to_scalar(hash_cache, data, sizeof(data)); + return hash_cache; } /* Given a value v (0..2^N-1) and a mask gamma, construct a range proof */ @@ -825,6 +825,7 @@ bool bulletproof_VERIFY(const std::vector<const Bulletproof*> &proofs) size_t inv_offset = 0; std::vector<rct::key> to_invert; to_invert.reserve(11 * sizeof(proofs)); + size_t max_logM = 0; for (const Bulletproof *p: proofs) { const Bulletproof &proof = *p; @@ -861,6 +862,7 @@ bool bulletproof_VERIFY(const std::vector<const Bulletproof*> &proofs) size_t M; for (pd.logM = 0; (M = 1<<pd.logM) <= maxM && M < proof.V.size(); ++pd.logM); CHECK_AND_ASSERT_MES(proof.L.size() == 6+pd.logM, false, "Proof is not the expected size"); + max_logM = std::max(pd.logM, max_logM); const size_t rounds = pd.logM+logN; CHECK_AND_ASSERT_MES(rounds > 0, false, "Zero rounds"); @@ -888,7 +890,7 @@ bool bulletproof_VERIFY(const std::vector<const Bulletproof*> &proofs) rct::key tmp; std::vector<MultiexpData> multiexp_data; - multiexp_data.reserve(nV + (2 * (10/*logM*/ + logN) + 4) * proofs.size() + 2 * maxMN); + multiexp_data.reserve(nV + (2 * (max_logM + logN) + 4) * proofs.size() + 2 * maxMN); multiexp_data.resize(2 * maxMN); PERF_TIMER_START_BP(VERIFY_line_24_25_invert); @@ -901,6 +903,8 @@ bool bulletproof_VERIFY(const std::vector<const Bulletproof*> &proofs) rct::keyV m_z4(maxMN, rct::zero()), m_z5(maxMN, rct::zero()); rct::key m_y0 = rct::zero(), y1 = rct::zero(); int proof_data_index = 0; + rct::keyV w_cache; + rct::keyV proof8_V, proof8_L, proof8_R; for (const Bulletproof *p: proofs) { const Bulletproof &proof = *p; @@ -913,9 +917,9 @@ bool bulletproof_VERIFY(const std::vector<const Bulletproof*> &proofs) const rct::key weight_z = rct::skGen(); // pre-multiply some points by 8 - rct::keyV proof8_V = proof.V; for (rct::key &k: proof8_V) k = rct::scalarmult8(k); - rct::keyV proof8_L = proof.L; for (rct::key &k: proof8_L) k = rct::scalarmult8(k); - rct::keyV proof8_R = proof.R; for (rct::key &k: proof8_R) k = rct::scalarmult8(k); + proof8_V.resize(proof.V.size()); for (size_t i = 0; i < proof.V.size(); ++i) proof8_V[i] = rct::scalarmult8(proof.V[i]); + proof8_L.resize(proof.L.size()); for (size_t i = 0; i < proof.L.size(); ++i) proof8_L[i] = rct::scalarmult8(proof.L[i]); + proof8_R.resize(proof.R.size()); for (size_t i = 0; i < proof.R.size(); ++i) proof8_R[i] = rct::scalarmult8(proof.R[i]); rct::key proof8_T1 = rct::scalarmult8(proof.T1); rct::key proof8_T2 = rct::scalarmult8(proof.T2); rct::key proof8_S = rct::scalarmult8(proof.S); @@ -976,7 +980,7 @@ bool bulletproof_VERIFY(const std::vector<const Bulletproof*> &proofs) // precalc PERF_TIMER_START_BP(VERIFY_line_24_25_precalc); - rct::keyV w_cache(1<<rounds); + w_cache.resize(1<<rounds); w_cache[0] = winv[0]; w_cache[1] = pd.w[0]; for (size_t j = 1; j < rounds; ++j) diff --git a/src/ringct/rctSigs.cpp b/src/ringct/rctSigs.cpp index e877c13ce..ff2a81d43 100644 --- a/src/ringct/rctSigs.cpp +++ b/src/ringct/rctSigs.cpp @@ -695,6 +695,7 @@ namespace rct { CHECK_AND_ASSERT_THROW_MES(mixRing[n].size() == inSk.size(), "Bad mixRing size"); } CHECK_AND_ASSERT_THROW_MES((kLRki && msout) || (!kLRki && !msout), "Only one of kLRki/msout is present"); + CHECK_AND_ASSERT_THROW_MES(inSk.size() < 2, "genRct is not suitable for 2+ rings"); rctSig rv; rv.type = RCTTypeFull; diff --git a/src/ringct/rctTypes.h b/src/ringct/rctTypes.h index 50d0f4d91..e5413f1dc 100644 --- a/src/ringct/rctTypes.h +++ b/src/ringct/rctTypes.h @@ -191,6 +191,8 @@ namespace rct { Bulletproof(const rct::keyV &V, const rct::key &A, const rct::key &S, const rct::key &T1, const rct::key &T2, const rct::key &taux, const rct::key &mu, const rct::keyV &L, const rct::keyV &R, const rct::key &a, const rct::key &b, const rct::key &t): V(V), A(A), S(S), T1(T1), T2(T2), taux(taux), mu(mu), L(L), R(R), a(a), b(b), t(t) {} + bool operator==(const Bulletproof &other) const { return V == other.V && A == other.A && S == other.S && T1 == other.T1 && T2 == other.T2 && taux == other.taux && mu == other.mu && L == other.L && R == other.R && a == other.a && b == other.b && t == other.t; } + BEGIN_SERIALIZE_OBJECT() // Commitments aren't saved, they're restored via outPk // FIELD(V) diff --git a/src/rpc/core_rpc_server.cpp b/src/rpc/core_rpc_server.cpp index 3e580a0fb..97e9b482e 100644 --- a/src/rpc/core_rpc_server.cpp +++ b/src/rpc/core_rpc_server.cpp @@ -28,6 +28,7 @@ // // Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers +#include <boost/preprocessor/stringize.hpp> #include "include_base_utils.h" #include "string_tools.h" using namespace epee; @@ -41,6 +42,7 @@ using namespace epee; #include "cryptonote_basic/cryptonote_format_utils.h" #include "cryptonote_basic/account.h" #include "cryptonote_basic/cryptonote_basic_impl.h" +#include "cryptonote_core/tx_sanity_check.h" #include "misc_language.h" #include "net/parse.h" #include "storages/http_abstract_invoke.h" @@ -74,7 +76,7 @@ namespace void store_difficulty(cryptonote::difficulty_type difficulty, uint64_t &sdiff, std::string &swdiff, uint64_t &stop64) { sdiff = (difficulty << 64 >> 64).convert_to<uint64_t>(); - swdiff = difficulty.convert_to<std::string>(); + swdiff = cryptonote::hex(difficulty); stop64 = (difficulty >> 64).convert_to<uint64_t>(); } } @@ -91,7 +93,7 @@ namespace cryptonote command_line::add_arg(desc, arg_rpc_ssl); command_line::add_arg(desc, arg_rpc_ssl_private_key); command_line::add_arg(desc, arg_rpc_ssl_certificate); - command_line::add_arg(desc, arg_rpc_ssl_allowed_certificates); + command_line::add_arg(desc, arg_rpc_ssl_ca_certificates); command_line::add_arg(desc, arg_rpc_ssl_allowed_fingerprints); command_line::add_arg(desc, arg_rpc_ssl_allow_any_cert); command_line::add_arg(desc, arg_bootstrap_daemon_address); @@ -149,36 +151,46 @@ namespace cryptonote if (rpc_config->login) http_login.emplace(std::move(rpc_config->login->username), std::move(rpc_config->login->password).password()); - epee::net_utils::ssl_support_t ssl_support; - const std::string ssl = command_line::get_arg(vm, arg_rpc_ssl); - if (!epee::net_utils::ssl_support_from_string(ssl_support, ssl)) + epee::net_utils::ssl_options_t ssl_options = epee::net_utils::ssl_support_t::e_ssl_support_autodetect; + if (command_line::get_arg(vm, arg_rpc_ssl_allow_any_cert)) + ssl_options.verification = epee::net_utils::ssl_verification_t::none; + else { - MFATAL("Invalid RPC SSL support: " << ssl); - return false; + std::string ssl_ca_path = command_line::get_arg(vm, arg_rpc_ssl_ca_certificates); + const std::vector<std::string> ssl_allowed_fingerprint_strings = command_line::get_arg(vm, arg_rpc_ssl_allowed_fingerprints); + std::vector<std::vector<uint8_t>> ssl_allowed_fingerprints{ ssl_allowed_fingerprint_strings.size() }; + std::transform(ssl_allowed_fingerprint_strings.begin(), ssl_allowed_fingerprint_strings.end(), ssl_allowed_fingerprints.begin(), epee::from_hex::vector); + for (const auto &fpr: ssl_allowed_fingerprints) + { + if (fpr.size() != SSL_FINGERPRINT_SIZE) + { + MERROR("SHA-256 fingerprint should be " BOOST_PP_STRINGIZE(SSL_FINGERPRINT_SIZE) " bytes long."); + return false; + } + } + + if (!ssl_ca_path.empty() || !ssl_allowed_fingerprints.empty()) + ssl_options = epee::net_utils::ssl_options_t{std::move(ssl_allowed_fingerprints), std::move(ssl_ca_path)}; } - const std::string ssl_private_key = command_line::get_arg(vm, arg_rpc_ssl_private_key); - const std::string ssl_certificate = command_line::get_arg(vm, arg_rpc_ssl_certificate); - const std::vector<std::string> ssl_allowed_certificate_paths = command_line::get_arg(vm, arg_rpc_ssl_allowed_certificates); - std::list<std::string> ssl_allowed_certificates; - for (const std::string &path: ssl_allowed_certificate_paths) + + ssl_options.auth = epee::net_utils::ssl_authentication_t{ + command_line::get_arg(vm, arg_rpc_ssl_private_key), command_line::get_arg(vm, arg_rpc_ssl_certificate) + }; + + // user specified CA file or fingeprints implies enabled SSL by default + if (ssl_options.verification != epee::net_utils::ssl_verification_t::user_certificates || !command_line::is_arg_defaulted(vm, arg_rpc_ssl)) { - ssl_allowed_certificates.push_back({}); - if (!epee::file_io_utils::load_file_to_string(path, ssl_allowed_certificates.back())) + const std::string ssl = command_line::get_arg(vm, arg_rpc_ssl); + if (!epee::net_utils::ssl_support_from_string(ssl_options.support, ssl)) { - MERROR("Failed to load certificate: " << path); - ssl_allowed_certificates.back() = std::string(); + MFATAL("Invalid RPC SSL support: " << ssl); + return false; } } - const std::vector<std::string> ssl_allowed_fingerprint_strings = command_line::get_arg(vm, arg_rpc_ssl_allowed_fingerprints); - std::vector<std::vector<uint8_t>> ssl_allowed_fingerprints{ ssl_allowed_fingerprint_strings.size() }; - std::transform(ssl_allowed_fingerprint_strings.begin(), ssl_allowed_fingerprint_strings.end(), ssl_allowed_fingerprints.begin(), epee::from_hex::vector); - const bool ssl_allow_any_cert = command_line::get_arg(vm, arg_rpc_ssl_allow_any_cert); - auto rng = [](size_t len, uint8_t *ptr){ return crypto::rand(len, ptr); }; return epee::http_server_impl_base<core_rpc_server, connection_context>::init( - rng, std::move(port), std::move(rpc_config->bind_ip), std::move(rpc_config->access_control_origins), std::move(http_login), - ssl_support, std::make_pair(ssl_private_key, ssl_certificate), std::move(ssl_allowed_certificates), std::move(ssl_allowed_fingerprints), ssl_allow_any_cert + rng, std::move(port), std::move(rpc_config->bind_ip), std::move(rpc_config->access_control_origins), std::move(http_login), std::move(ssl_options) ); } //------------------------------------------------------------------------------------------------------------------------------ @@ -200,7 +212,10 @@ namespace cryptonote if (use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_HEIGHT>(invoke_http_mode::JON, "/getheight", req, res, r)) return r; - res.height = m_core.get_current_blockchain_height(); + crypto::hash hash; + m_core.get_blockchain_top(res.height, hash); + ++res.height; // block height to chain height + res.hash = string_tools::pod_to_hex(hash); res.status = CORE_RPC_STATUS_OK; return true; } @@ -427,17 +442,12 @@ namespace cryptonote if (use_bootstrap_daemon_if_necessary<COMMAND_RPC_GET_HASHES_FAST>(invoke_http_mode::BIN, "/gethashes.bin", req, res, r)) return r; - NOTIFY_RESPONSE_CHAIN_ENTRY::request resp; - - resp.start_height = req.start_height; - if(!m_core.find_blockchain_supplement(req.block_ids, resp)) + res.start_height = req.start_height; + if(!m_core.get_blockchain_storage().find_blockchain_supplement(req.block_ids, res.m_block_ids, res.start_height, res.current_height, false)) { res.status = "Failed"; return false; } - res.current_height = resp.total_height; - res.start_height = resp.start_height; - res.m_block_ids = std::move(resp.m_block_ids); res.status = CORE_RPC_STATUS_OK; return true; @@ -492,6 +502,7 @@ namespace cryptonote cryptonote::COMMAND_RPC_GET_OUTPUTS_BIN::request req_bin; req_bin.outputs = req.outputs; + req_bin.get_txid = req.get_txid; cryptonote::COMMAND_RPC_GET_OUTPUTS_BIN::response res_bin; if(!m_core.get_outs(req_bin, res_bin)) { @@ -568,7 +579,7 @@ namespace cryptonote // try the pool for any missing txes size_t found_in_pool = 0; std::unordered_set<crypto::hash> pool_tx_hashes; - std::unordered_map<crypto::hash, bool> double_spend_seen; + std::unordered_map<crypto::hash, tx_info> per_tx_pool_tx_info; if (!missed_txs.empty()) { std::vector<tx_info> pool_tx_info; @@ -623,7 +634,7 @@ namespace cryptonote { if (ti.id_hash == hash_string) { - double_spend_seen.insert(std::make_pair(h, ti.double_spend_seen)); + per_tx_pool_tx_info.insert(std::make_pair(h, ti)); break; } } @@ -709,14 +720,17 @@ namespace cryptonote if (e.in_pool) { e.block_height = e.block_timestamp = std::numeric_limits<uint64_t>::max(); - if (double_spend_seen.find(tx_hash) != double_spend_seen.end()) + auto it = per_tx_pool_tx_info.find(tx_hash); + if (it != per_tx_pool_tx_info.end()) { - e.double_spend_seen = double_spend_seen[tx_hash]; + e.double_spend_seen = it->second.double_spend_seen; + e.relayed = it->second.relayed; } else { - MERROR("Failed to determine double spend status for " << tx_hash); + MERROR("Failed to determine pool info for " << tx_hash); e.double_spend_seen = false; + e.relayed = false; } } else @@ -724,6 +738,7 @@ namespace cryptonote e.block_height = m_core.get_blockchain_storage().get_db().get_tx_block_height(tx_hash); e.block_timestamp = m_core.get_blockchain_storage().get_db().get_block_timestamp(e.block_height); e.double_spend_seen = false; + e.relayed = false; } // fill up old style responses too, in case an old wallet asks @@ -839,6 +854,14 @@ namespace cryptonote return true; } + if (req.do_sanity_checks && !cryptonote::tx_sanity_check(m_core.get_blockchain_storage(), tx_blob)) + { + res.status = "Failed"; + res.reason = "Sanity check failed"; + res.sanity_check_failed = true; + return true; + } + cryptonote_connection_context fake_context = AUTO_VAL_INIT(fake_context); tx_verification_context tvc = AUTO_VAL_INIT(tvc); if(!m_core.handle_incoming_tx(tx_blob, tvc, false, false, req.do_not_relay) || tvc.m_verifivation_failed) @@ -971,6 +994,7 @@ namespace cryptonote const miner& lMiner = m_core.get_miner(); res.active = lMiner.is_mining(); res.is_background_mining_enabled = lMiner.get_is_background_mining_enabled(); + store_difficulty(m_core.get_blockchain_storage().get_difficulty_for_next_block(), res.difficulty, res.wide_difficulty, res.difficulty_top64); res.block_target = m_core.get_blockchain_storage().get_current_hard_fork_version() < 2 ? DIFFICULTY_TARGET_V1 : DIFFICULTY_TARGET_V2; if ( lMiner.is_mining() ) { @@ -1254,7 +1278,17 @@ namespace cryptonote cryptonote::blobdata blob_reserve; blob_reserve.resize(req.reserve_size, 0); cryptonote::difficulty_type wdiff; - if(!m_core.get_block_template(b, info.address, wdiff, res.height, res.expected_reward, blob_reserve)) + crypto::hash prev_block; + if (!req.prev_block.empty()) + { + if (!epee::string_tools::hex_to_pod(req.prev_block, prev_block)) + { + error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR; + error_resp.message = "Invalid prev_block"; + return false; + } + } + if(!m_core.get_block_template(b, req.prev_block.empty() ? NULL : &prev_block, info.address, wdiff, res.height, res.expected_reward, blob_reserve)) { error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR; error_resp.message = "Internal error: failed to create block template"; @@ -1279,7 +1313,10 @@ namespace cryptonote LOG_ERROR("Failed to find tx pub key in blockblob"); return false; } - res.reserved_offset += sizeof(tx_pub_key) + 2; //2 bytes: tag for TX_EXTRA_NONCE(1 byte), counter in TX_EXTRA_NONCE(1 byte) + if (req.reserve_size) + res.reserved_offset += sizeof(tx_pub_key) + 2; //2 bytes: tag for TX_EXTRA_NONCE(1 byte), counter in TX_EXTRA_NONCE(1 byte) + else + res.reserved_offset = 0; if(res.reserved_offset + req.reserve_size > block_blob.size()) { error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR; @@ -1340,7 +1377,8 @@ namespace cryptonote return false; } - if(!m_core.handle_block_found(b)) + block_verification_context bvc; + if(!m_core.handle_block_found(b, bvc)) { error_resp.code = CORE_RPC_ERROR_CODE_BLOCK_NOT_ACCEPTED; error_resp.message = "Block not accepted"; @@ -1372,15 +1410,15 @@ namespace cryptonote template_req.reserve_size = 1; template_req.wallet_address = req.wallet_address; + template_req.prev_block = req.prev_block; submit_req.push_back(boost::value_initialized<std::string>()); res.height = m_core.get_blockchain_storage().get_current_blockchain_height(); - bool r; - for(size_t i = 0; i < req.amount_of_blocks; i++) { - r = on_getblocktemplate(template_req, template_res, error_resp, ctx); + bool r = on_getblocktemplate(template_req, template_res, error_resp, ctx); res.status = template_res.status; + template_req.prev_block.clear(); if (!r) return false; @@ -1398,6 +1436,7 @@ namespace cryptonote error_resp.message = "Wrong block blob"; return false; } + b.nonce = req.starting_nonce; miner::find_nonce_for_given_block(b, template_res.difficulty, template_res.height); submit_req.front() = string_tools::buff_to_hex_nodelimer(block_to_blob(b)); @@ -1406,6 +1445,8 @@ namespace cryptonote if (!r) return false; + res.blocks.push_back(epee::string_tools::pod_to_hex(get_block_hash(b))); + template_req.prev_block = res.blocks.back(); res.height = template_res.height; } @@ -2350,6 +2391,7 @@ namespace cryptonote return false; } res.pruning_seed = m_core.get_blockchain_pruning_seed(); + res.pruned = res.pruning_seed != 0; } catch (const std::exception &e) { @@ -2408,9 +2450,9 @@ namespace cryptonote , "" }; - const command_line::arg_descriptor<std::vector<std::string>> core_rpc_server::arg_rpc_ssl_allowed_certificates = { - "rpc-ssl-allowed-certificates" - , "List of paths to PEM format certificates of allowed peers (all allowed if empty)" + const command_line::arg_descriptor<std::string> core_rpc_server::arg_rpc_ssl_ca_certificates = { + "rpc-ssl-ca-certificates" + , "Path to file containing concatenated PEM format certificate(s) to replace system CA(s)." }; const command_line::arg_descriptor<std::vector<std::string>> core_rpc_server::arg_rpc_ssl_allowed_fingerprints = { @@ -2420,7 +2462,7 @@ namespace cryptonote const command_line::arg_descriptor<bool> core_rpc_server::arg_rpc_ssl_allow_any_cert = { "rpc-ssl-allow-any-cert" - , "Allow any peer certificate, rather than just those on the allowed list" + , "Allow any peer certificate" , false }; diff --git a/src/rpc/core_rpc_server.h b/src/rpc/core_rpc_server.h index 8f5d83f1b..e4683bbe2 100644 --- a/src/rpc/core_rpc_server.h +++ b/src/rpc/core_rpc_server.h @@ -40,6 +40,9 @@ #include "p2p/net_node.h" #include "cryptonote_protocol/cryptonote_protocol_handler.h" +#undef MONERO_DEFAULT_LOG_CATEGORY +#define MONERO_DEFAULT_LOG_CATEGORY "daemon.rpc" + // yes, epee doesn't properly use its full namespace when calling its // functions from macros. *sigh* using namespace epee; @@ -60,7 +63,7 @@ namespace cryptonote static const command_line::arg_descriptor<std::string> arg_rpc_ssl; static const command_line::arg_descriptor<std::string> arg_rpc_ssl_private_key; static const command_line::arg_descriptor<std::string> arg_rpc_ssl_certificate; - static const command_line::arg_descriptor<std::vector<std::string>> arg_rpc_ssl_allowed_certificates; + static const command_line::arg_descriptor<std::string> arg_rpc_ssl_ca_certificates; static const command_line::arg_descriptor<std::vector<std::string>> arg_rpc_ssl_allowed_fingerprints; static const command_line::arg_descriptor<bool> arg_rpc_ssl_allow_any_cert; static const command_line::arg_descriptor<std::string> arg_bootstrap_daemon_address; diff --git a/src/rpc/core_rpc_server_commands_defs.h b/src/rpc/core_rpc_server_commands_defs.h index 1f14267f6..cfe4bbf23 100644 --- a/src/rpc/core_rpc_server_commands_defs.h +++ b/src/rpc/core_rpc_server_commands_defs.h @@ -84,7 +84,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 2 -#define CORE_RPC_VERSION_MINOR 5 +#define CORE_RPC_VERSION_MINOR 6 #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) @@ -102,11 +102,13 @@ namespace cryptonote uint64_t height; std::string status; bool untrusted; + std::string hash; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(height) KV_SERIALIZE(status) KV_SERIALIZE(untrusted) + KV_SERIALIZE(hash) END_KV_SERIALIZE_MAP() }; typedef epee::misc_utils::struct_init<response_t> response; @@ -362,6 +364,7 @@ namespace cryptonote uint64_t block_height; uint64_t block_timestamp; std::vector<uint64_t> output_indices; + bool relayed; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(tx_hash) @@ -372,9 +375,16 @@ namespace cryptonote KV_SERIALIZE(as_json) KV_SERIALIZE(in_pool) KV_SERIALIZE(double_spend_seen) - KV_SERIALIZE(block_height) - KV_SERIALIZE(block_timestamp) - KV_SERIALIZE(output_indices) + if (!this_ref.in_pool) + { + KV_SERIALIZE(block_height) + KV_SERIALIZE(block_timestamp) + KV_SERIALIZE(output_indices) + } + else + { + KV_SERIALIZE(relayed) + } END_KV_SERIALIZE_MAP() }; @@ -528,9 +538,11 @@ namespace cryptonote struct request_t { std::vector<get_outputs_out> outputs; + bool get_txid; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(outputs) + KV_SERIALIZE(get_txid) END_KV_SERIALIZE_MAP() }; typedef epee::misc_utils::struct_init<request_t> request; @@ -573,10 +585,12 @@ namespace cryptonote { std::string tx_as_hex; bool do_not_relay; + bool do_sanity_checks; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(tx_as_hex) KV_SERIALIZE_OPT(do_not_relay, false) + KV_SERIALIZE_OPT(do_sanity_checks, true) END_KV_SERIALIZE_MAP() }; typedef epee::misc_utils::struct_init<request_t> request; @@ -595,6 +609,7 @@ namespace cryptonote bool overspend; bool fee_too_low; bool not_rct; + bool sanity_check_failed; bool untrusted; BEGIN_KV_SERIALIZE_MAP() @@ -609,6 +624,7 @@ namespace cryptonote KV_SERIALIZE(overspend) KV_SERIALIZE(fee_too_low) KV_SERIALIZE(not_rct) + KV_SERIALIZE(sanity_check_failed) KV_SERIALIZE(untrusted) END_KV_SERIALIZE_MAP() }; @@ -821,6 +837,9 @@ namespace cryptonote uint8_t bg_target; uint32_t block_target; uint64_t block_reward; + uint64_t difficulty; + std::string wide_difficulty; + uint64_t difficulty_top64; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(status) @@ -836,6 +855,9 @@ namespace cryptonote KV_SERIALIZE(bg_target) KV_SERIALIZE(block_target) KV_SERIALIZE(block_reward) + KV_SERIALIZE(difficulty) + KV_SERIALIZE(wide_difficulty) + KV_SERIALIZE(difficulty_top64) END_KV_SERIALIZE_MAP() }; typedef epee::misc_utils::struct_init<response_t> response; @@ -896,10 +918,12 @@ namespace cryptonote { uint64_t reserve_size; //max 255 bytes std::string wallet_address; + std::string prev_block; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(reserve_size) KV_SERIALIZE(wallet_address) + KV_SERIALIZE(prev_block) END_KV_SERIALIZE_MAP() }; typedef epee::misc_utils::struct_init<request_t> request; @@ -956,10 +980,14 @@ namespace cryptonote { uint64_t amount_of_blocks; std::string wallet_address; + std::string prev_block; + uint32_t starting_nonce; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(amount_of_blocks) KV_SERIALIZE(wallet_address) + KV_SERIALIZE(prev_block) + KV_SERIALIZE_OPT(starting_nonce, (uint32_t)0) END_KV_SERIALIZE_MAP() }; typedef epee::misc_utils::struct_init<request_t> request; @@ -967,10 +995,12 @@ namespace cryptonote struct response_t { uint64_t height; + std::vector<std::string> blocks; std::string status; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(height) + KV_SERIALIZE(blocks) KV_SERIALIZE(status) END_KV_SERIALIZE_MAP() }; @@ -2290,11 +2320,13 @@ namespace cryptonote struct response_t { + bool pruned; uint32_t pruning_seed; std::string status; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(status) + KV_SERIALIZE(pruned) KV_SERIALIZE(pruning_seed) END_KV_SERIALIZE_MAP() }; diff --git a/src/rpc/daemon_handler.cpp b/src/rpc/daemon_handler.cpp index 540afe6b9..7c8953930 100644 --- a/src/rpc/daemon_handler.cpp +++ b/src/rpc/daemon_handler.cpp @@ -141,7 +141,7 @@ namespace rpc auto& chain = m_core.get_blockchain_storage(); - if (!chain.find_blockchain_supplement(req.known_hashes, res.hashes, res.start_height, res.current_height)) + if (!chain.find_blockchain_supplement(req.known_hashes, res.hashes, res.start_height, res.current_height, false)) { res.status = Message::STATUS_FAILED; res.error_details = "Blockchain::find_blockchain_supplement() returned false"; diff --git a/src/simplewallet/simplewallet.cpp b/src/simplewallet/simplewallet.cpp index 9f7cc9c3b..1640fa990 100644 --- a/src/simplewallet/simplewallet.cpp +++ b/src/simplewallet/simplewallet.cpp @@ -118,7 +118,7 @@ typedef cryptonote::simple_wallet sw; if (!m_long_payment_id_support) { \ fail_msg_writer() << tr("Warning: Long payment IDs are obsolete."); \ fail_msg_writer() << tr("Long payment IDs are not encrypted on the blockchain, and will harm your privacy."); \ - fail_msg_writer() << tr("Use --long-payment-id-support if you really must use one, and warn the recipient they are using an obsolete feature that will disappear in the future."); \ + fail_msg_writer() << tr("Use --long-payment-id-support-bad-for-privacy if you really must use one, and warn the recipient they are using an obsolete feature that will disappear in the future."); \ return true; \ } \ } while(0) @@ -235,6 +235,7 @@ namespace const char* USAGE_MMS_AUTO_CONFIG("mms auto_config <auto_config_token>"); const char* USAGE_PRINT_RING("print_ring <key_image> | <txid>"); const char* USAGE_SET_RING("set_ring <filename> | ( <key_image> absolute|relative <index> [<index>...] )"); + const char* USAGE_UNSET_RING("unset_ring <txid> | ( <key_image> [<key_image>...] )"); const char* USAGE_SAVE_KNOWN_RINGS("save_known_rings"); const char* USAGE_MARK_OUTPUT_SPENT("mark_output_spent <amount>/<offset> | <filename> [add]"); const char* USAGE_MARK_OUTPUT_UNSPENT("mark_output_unspent <amount>/<offset>"); @@ -242,6 +243,8 @@ namespace const char* USAGE_FREEZE("freeze <key_image>"); const char* USAGE_THAW("thaw <key_image>"); const char* USAGE_FROZEN("frozen <key_image>"); + const char* USAGE_NET_STATS("net_stats"); + const char* USAGE_WELCOME("welcome"); const char* USAGE_VERSION("version"); const char* USAGE_HELP("help [<command>]"); @@ -1870,6 +1873,38 @@ bool simple_wallet::set_ring(const std::vector<std::string> &args) return true; } +bool simple_wallet::unset_ring(const std::vector<std::string> &args) +{ + crypto::hash txid; + std::vector<crypto::key_image> key_images; + + if (args.size() < 1) + { + PRINT_USAGE(USAGE_UNSET_RING); + return true; + } + + key_images.resize(args.size()); + for (size_t i = 0; i < args.size(); ++i) + { + if (!epee::string_tools::hex_to_pod(args[i], key_images[i])) + { + fail_msg_writer() << tr("Invalid key image or txid"); + return true; + } + } + static_assert(sizeof(crypto::hash) == sizeof(crypto::key_image), "hash and key_image must have the same size"); + memcpy(&txid, &key_images[0], sizeof(txid)); + + if (!m_wallet->unset_ring(key_images) && !m_wallet->unset_ring(txid)) + { + fail_msg_writer() << tr("failed to unset ring"); + return true; + } + + return true; +} + bool simple_wallet::blackball(const std::vector<std::string> &args) { uint64_t amount = std::numeric_limits<uint64_t>::max(), offset, num_offsets; @@ -2098,6 +2133,31 @@ bool simple_wallet::frozen(const std::vector<std::string> &args) return true; } +bool simple_wallet::net_stats(const std::vector<std::string> &args) +{ + message_writer() << std::to_string(m_wallet->get_bytes_sent()) + tr(" bytes sent"); + message_writer() << std::to_string(m_wallet->get_bytes_received()) + tr(" bytes received"); + return true; +} + +bool simple_wallet::welcome(const std::vector<std::string> &args) +{ + message_writer() << tr("Welcome to Monero, the private cryptocurrency."); + message_writer() << ""; + message_writer() << tr("Monero, like Bitcoin, is a cryptocurrency. That is, it is digital money."); + message_writer() << tr("Unlike Bitcoin, your Monero transactions and balance stay private, and not visible to the world by default."); + message_writer() << tr("However, you have the option of making those available to select parties, if you choose to."); + message_writer() << ""; + message_writer() << tr("Monero protects your privacy on the blockchain, and while Monero strives to improve all the time,"); + message_writer() << tr("no privacy technology can be 100% perfect, Monero included."); + message_writer() << tr("Monero cannot protect you from malware, and it may not be as effective as we hope against powerful adversaries."); + message_writer() << tr("Flaws in Monero may be discovered in the future, and attacks may be developed to peek under some"); + message_writer() << tr("of the layers of privacy Monero provides. Be safe and practice defense in depth."); + message_writer() << ""; + message_writer() << tr("Welcome to Monero and financial privacy. For more information, see https://getmonero.org/"); + return true; +} + bool simple_wallet::version(const std::vector<std::string> &args) { message_writer() << "Monero '" << MONERO_RELEASE_NAME << "' (v" << MONERO_VERSION_FULL << ")"; @@ -2592,6 +2652,31 @@ bool simple_wallet::set_track_uses(const std::vector<std::string> &args/* = std: return true; } +bool simple_wallet::set_setup_background_mining(const std::vector<std::string> &args/* = std::vector<std::string>()*/) +{ + const auto pwd_container = get_and_verify_password(); + if (pwd_container) + { + tools::wallet2::BackgroundMiningSetupType setup = tools::wallet2::BackgroundMiningMaybe; + if (args[1] == "yes" || args[1] == "1") + setup = tools::wallet2::BackgroundMiningYes; + else if (args[1] == "no" || args[1] == "0") + setup = tools::wallet2::BackgroundMiningNo; + else + { + fail_msg_writer() << tr("invalid argument: must be either 1/yes or 0/no"); + return true; + } + m_wallet->setup_background_mining(setup); + m_wallet->rewrite(m_wallet_file, pwd_container->password()); + if (setup == tools::wallet2::BackgroundMiningYes) + start_background_mining(); + else + stop_background_mining(); + } + return true; +} + bool simple_wallet::set_device_name(const std::vector<std::string> &args/* = std::vector<std::string>()*/) { const auto pwd_container = get_and_verify_password(); @@ -3069,6 +3154,10 @@ simple_wallet::simple_wallet() boost::bind(&simple_wallet::set_ring, this, _1), tr(USAGE_SET_RING), tr("Set the ring used for a given key image, so it can be reused in a fork")); + m_cmd_binder.set_handler("unset_ring", + boost::bind(&simple_wallet::unset_ring, this, _1), + tr(USAGE_UNSET_RING), + tr("Unsets the ring used for a given key image or transaction")); m_cmd_binder.set_handler("save_known_rings", boost::bind(&simple_wallet::save_known_rings, this, _1), tr(USAGE_SAVE_KNOWN_RINGS), @@ -3097,6 +3186,14 @@ simple_wallet::simple_wallet() boost::bind(&simple_wallet::frozen, this, _1), tr(USAGE_FROZEN), tr("Checks whether a given output is currently frozen by key image")); + m_cmd_binder.set_handler("net_stats", + boost::bind(&simple_wallet::net_stats, this, _1), + tr(USAGE_NET_STATS), + tr("Prints simple network stats")); + m_cmd_binder.set_handler("welcome", + boost::bind(&simple_wallet::welcome, this, _1), + tr(USAGE_WELCOME), + tr("Prints basic info about Monero for first time users")); m_cmd_binder.set_handler("version", boost::bind(&simple_wallet::version, this, _1), tr(USAGE_VERSION), @@ -3125,6 +3222,13 @@ bool simple_wallet::set_variable(const std::vector<std::string> &args) case tools::wallet2::AskPasswordOnAction: ask_password_string = "action"; break; case tools::wallet2::AskPasswordToDecrypt: ask_password_string = "decrypt"; break; } + std::string setup_background_mining_string = "invalid"; + switch (m_wallet->setup_background_mining()) + { + case tools::wallet2::BackgroundMiningMaybe: setup_background_mining_string = "maybe"; break; + case tools::wallet2::BackgroundMiningYes: setup_background_mining_string = "yes"; break; + case tools::wallet2::BackgroundMiningNo: setup_background_mining_string = "no"; break; + } success_msg_writer() << "seed = " << seed_language; success_msg_writer() << "always-confirm-transfers = " << m_wallet->always_confirm_transfers(); success_msg_writer() << "print-ring-members = " << m_wallet->print_ring_members(); @@ -3151,6 +3255,7 @@ bool simple_wallet::set_variable(const std::vector<std::string> &args) success_msg_writer() << "segregation-height = " << m_wallet->segregation_height(); success_msg_writer() << "ignore-fractional-outputs = " << m_wallet->ignore_fractional_outputs(); success_msg_writer() << "track-uses = " << m_wallet->track_uses(); + success_msg_writer() << "setup-background-mining = " << setup_background_mining_string + tr(" (set this to support the network and to get a chance to receive new monero)"); success_msg_writer() << "device_name = " << m_wallet->device_name(); return true; } @@ -3208,6 +3313,7 @@ bool simple_wallet::set_variable(const std::vector<std::string> &args) CHECK_SIMPLE_VARIABLE("segregation-height", set_segregation_height, tr("unsigned integer")); CHECK_SIMPLE_VARIABLE("ignore-fractional-outputs", set_ignore_fractional_outputs, tr("0 or 1")); CHECK_SIMPLE_VARIABLE("track-uses", set_track_uses, tr("0 or 1")); + CHECK_SIMPLE_VARIABLE("setup-background-mining", set_setup_background_mining, tr("1/yes or 0/no")); CHECK_SIMPLE_VARIABLE("device-name", set_device_name, tr("<device_name[:device_spec]>")); } fail_msg_writer() << tr("set: unrecognized argument(s)"); @@ -3403,10 +3509,13 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm) const network_type nettype = testnet ? TESTNET : stagenet ? STAGENET : MAINNET; epee::wipeable_string multisig_keys; + epee::wipeable_string password; if (!handle_command_line(vm)) return false; + bool welcome = false; + if((!m_generate_new.empty()) + (!m_wallet_file.empty()) + (!m_generate_from_device.empty()) + (!m_generate_from_view_key.empty()) + (!m_generate_from_spend_key.empty()) + (!m_generate_from_keys.empty()) + (!m_generate_from_multisig_keys.empty()) + (!m_generate_from_json.empty()) > 1) { fail_msg_writer() << tr("can't specify more than one of --generate-new-wallet=\"wallet_name\", --wallet-file=\"wallet_name\", --generate-from-view-key=\"wallet_name\", --generate-from-spend-key=\"wallet_name\", --generate-from-keys=\"wallet_name\", --generate-from-multisig-keys=\"wallet_name\", --generate-from-json=\"jsonfilename\" and --generate-from-device=\"wallet_name\""); @@ -3510,7 +3619,6 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm) m_recovery_key = cryptonote::decrypt_key(m_recovery_key, seed_pass); } } - epee::wipeable_string password; if (!m_generate_from_view_key.empty()) { m_wallet_file = m_generate_from_view_key; @@ -3565,6 +3673,7 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm) auto r = new_wallet(vm, info.address, boost::none, viewkey); CHECK_AND_ASSERT_MES(r, false, tr("account creation failed")); password = *r; + welcome = true; } else if (!m_generate_from_spend_key.empty()) { @@ -3585,6 +3694,7 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm) auto r = new_wallet(vm, m_recovery_key, true, false, ""); CHECK_AND_ASSERT_MES(r, false, tr("account creation failed")); password = *r; + welcome = true; } else if (!m_generate_from_keys.empty()) { @@ -3662,6 +3772,7 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm) auto r = new_wallet(vm, info.address, spendkey, viewkey); CHECK_AND_ASSERT_MES(r, false, tr("account creation failed")); password = *r; + welcome = true; } // Asks user for all the data required to merge secret keys from multisig wallets into one master wallet, which then gets full control of the multisig wallet. The resulting wallet will be the same as any other regular wallet. @@ -3795,6 +3906,7 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm) auto r = new_wallet(vm, info.address, spendkey, viewkey); CHECK_AND_ASSERT_MES(r, false, tr("account creation failed")); password = *r; + welcome = true; } else if (!m_generate_from_json.empty()) @@ -3821,6 +3933,7 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm) auto r = new_wallet(vm); CHECK_AND_ASSERT_MES(r, false, tr("account creation failed")); password = *r; + welcome = true; // if no block_height is specified, assume its a new account and start it "now" if(m_wallet->get_refresh_from_block_height() == 0) { { @@ -3852,6 +3965,7 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm) 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")); password = *r; + welcome = true; } if (m_restoring && m_generate_from_json.empty() && m_generate_from_device.empty()) @@ -3955,8 +4069,9 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm) fail_msg_writer() << tr("can't specify --subaddress-lookahead and --wallet-file at the same time"); return false; } - bool r = open_wallet(vm); + auto r = open_wallet(vm); CHECK_AND_ASSERT_MES(r, false, tr("failed to open account")); + password = *r; } if (!m_wallet) { @@ -3972,6 +4087,19 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm) m_wallet->callback(this); + check_background_mining(password); + + if (welcome) + message_writer(console_color_yellow, true) << tr("If you are new to Monero, type \"welcome\" for a brief overview."); + + if (m_long_payment_id_support) + { + message_writer(console_color_red, false) << + tr("WARNING: obsolete long payment IDs are enabled. Sending transactions with those payment IDs are bad for your privacy."); + message_writer(console_color_red, false) << + tr("It is recommended that you do not use them, and ask recipients who ask for one to not endanger your privacy."); + } + return true; } //---------------------------------------------------------------------------------------------------- @@ -4341,12 +4469,12 @@ boost::optional<epee::wipeable_string> simple_wallet::new_wallet(const boost::pr return std::move(password); } //---------------------------------------------------------------------------------------------------- -bool simple_wallet::open_wallet(const boost::program_options::variables_map& vm) +boost::optional<epee::wipeable_string> simple_wallet::open_wallet(const boost::program_options::variables_map& vm) { if (!tools::wallet2::wallet_valid_path_format(m_wallet_file)) { fail_msg_writer() << tr("wallet file path not valid: ") << m_wallet_file; - return false; + return {}; } bool keys_file_exists; @@ -4356,7 +4484,7 @@ bool simple_wallet::open_wallet(const boost::program_options::variables_map& vm) if(!keys_file_exists) { fail_msg_writer() << tr("Key file not found. Failed to open wallet"); - return false; + return {}; } epee::wipeable_string password; @@ -4367,7 +4495,7 @@ bool simple_wallet::open_wallet(const boost::program_options::variables_map& vm) password = std::move(std::move(rc.second).password()); if (!m_wallet) { - return false; + return {}; } m_wallet->callback(this); @@ -4393,7 +4521,7 @@ bool simple_wallet::open_wallet(const boost::program_options::variables_map& vm) { bool is_deterministic; { - SCOPED_WALLET_UNLOCK(); + SCOPED_WALLET_UNLOCK_ON_BAD_PASSWORD(return {};); is_deterministic = m_wallet->is_deterministic(); } if (is_deterministic) @@ -4402,7 +4530,7 @@ bool simple_wallet::open_wallet(const boost::program_options::variables_map& vm) "a deprecated version of the wallet. Please proceed to upgrade your wallet.\n"); std::string mnemonic_language = get_mnemonic_language(); if (mnemonic_language.empty()) - return false; + return {}; m_wallet->set_seed_language(mnemonic_language); m_wallet->rewrite(m_wallet_file, password); @@ -4434,14 +4562,14 @@ bool simple_wallet::open_wallet(const boost::program_options::variables_map& vm) if (password_is_correct) fail_msg_writer() << boost::format(tr("You may want to remove the file \"%s\" and try again")) % m_wallet_file; } - return false; + return {}; } success_msg_writer() << "**********************************************************************\n" << tr("Use the \"help\" command to see the list of available commands.\n") << tr("Use \"help <command>\" to see a command's documentation.\n") << "**********************************************************************"; - return true; + return std::move(password); } //---------------------------------------------------------------------------------------------------- bool simple_wallet::close_wallet() @@ -4522,7 +4650,118 @@ bool simple_wallet::save_watch_only(const std::vector<std::string> &args/* = std } return true; } +//---------------------------------------------------------------------------------------------------- +void simple_wallet::start_background_mining() +{ + COMMAND_RPC_MINING_STATUS::request reqq; + COMMAND_RPC_MINING_STATUS::response resq; + bool r = m_wallet->invoke_http_json("/mining_status", reqq, resq); + std::string err = interpret_rpc_response(r, resq.status); + if (!r) + return; + if (!err.empty()) + { + fail_msg_writer() << tr("Failed to query mining status: ") << err; + return; + } + if (!resq.is_background_mining_enabled) + { + COMMAND_RPC_START_MINING::request req; + COMMAND_RPC_START_MINING::response res; + req.miner_address = m_wallet->get_account().get_public_address_str(m_wallet->nettype()); + req.threads_count = 1; + req.do_background_mining = true; + req.ignore_battery = false; + bool r = m_wallet->invoke_http_json("/start_mining", req, res); + std::string err = interpret_rpc_response(r, res.status); + if (!err.empty()) + { + fail_msg_writer() << tr("Failed to setup background mining: ") << err; + return; + } + } + success_msg_writer() << tr("Background mining enabled. Thank you for supporting the Monero network."); +} +//---------------------------------------------------------------------------------------------------- +void simple_wallet::stop_background_mining() +{ + COMMAND_RPC_MINING_STATUS::request reqq; + COMMAND_RPC_MINING_STATUS::response resq; + bool r = m_wallet->invoke_http_json("/mining_status", reqq, resq); + if (!r) + return; + std::string err = interpret_rpc_response(r, resq.status); + if (!err.empty()) + { + fail_msg_writer() << tr("Failed to query mining status: ") << err; + return; + } + if (resq.is_background_mining_enabled) + { + COMMAND_RPC_STOP_MINING::request req; + COMMAND_RPC_STOP_MINING::response res; + bool r = m_wallet->invoke_http_json("/stop_mining", req, res); + std::string err = interpret_rpc_response(r, res.status); + if (!err.empty()) + { + fail_msg_writer() << tr("Failed to setup background mining: ") << err; + return; + } + } + message_writer(console_color_red, false) << tr("Background mining not enabled. Run \"set setup-background-mining 1\" to change."); +} +//---------------------------------------------------------------------------------------------------- +void simple_wallet::check_background_mining(const epee::wipeable_string &password) +{ + tools::wallet2::BackgroundMiningSetupType setup = m_wallet->setup_background_mining(); + if (setup == tools::wallet2::BackgroundMiningNo) + { + message_writer(console_color_red, false) << tr("Background mining not enabled. Run \"set setup-background-mining 1\" to change."); + return; + } + + if (!m_wallet->is_trusted_daemon()) + { + message_writer() << tr("Using an untrusted daemon, skipping background mining check"); + return; + } + + COMMAND_RPC_MINING_STATUS::request req; + COMMAND_RPC_MINING_STATUS::response res; + bool r = m_wallet->invoke_http_json("/mining_status", req, res); + std::string err = interpret_rpc_response(r, res.status); + bool is_background_mining_enabled = false; + if (err.empty()) + is_background_mining_enabled = res.is_background_mining_enabled; + + if (is_background_mining_enabled) + { + // already active, nice + m_wallet->setup_background_mining(tools::wallet2::BackgroundMiningYes); + m_wallet->rewrite(m_wallet_file, password); + start_background_mining(); + return; + } + if (res.active) + return; + if (setup == tools::wallet2::BackgroundMiningMaybe) + { + message_writer() << tr("The daemon is not set up to background mine."); + message_writer() << tr("With background mining enabled, the daemon will mine when idle and not on batttery."); + message_writer() << tr("Enabling this supports the network you are using, and makes you eligible for receiving new monero"); + std::string accepted = input_line(tr("Do you want to do it now? (Y/Yes/N/No): ")); + if (std::cin.eof() || !command_line::is_yes(accepted)) { + m_wallet->setup_background_mining(tools::wallet2::BackgroundMiningNo); + m_wallet->rewrite(m_wallet_file, password); + message_writer(console_color_red, false) << tr("Background mining not enabled. Set setup-background-mining to 1 to change."); + return; + } + m_wallet->setup_background_mining(tools::wallet2::BackgroundMiningYes); + m_wallet->rewrite(m_wallet_file, password); + start_background_mining(); + } +} //---------------------------------------------------------------------------------------------------- bool simple_wallet::start_mining(const std::vector<std::string>& args) { @@ -4834,8 +5073,7 @@ bool simple_wallet::refresh_main(uint64_t start_height, enum ResetType reset, bo LOCK_IDLE_SCOPE(); crypto::hash transfer_hash_pre{}; - uint64_t height_pre, height_post; - + uint64_t height_pre = 0, height_post; if (reset != ResetNone) { if (reset == ResetSoftKeepKI) @@ -4948,10 +5186,15 @@ bool simple_wallet::show_balance_unlocked(bool detailed) success_msg_writer() << tr("Currently selected account: [") << m_current_subaddress_account << tr("] ") << m_wallet->get_subaddress_label({m_current_subaddress_account, 0}); const std::string tag = m_wallet->get_account_tags().second[m_current_subaddress_account]; success_msg_writer() << tr("Tag: ") << (tag.empty() ? std::string{tr("(No tag assigned)")} : tag); + uint64_t blocks_to_unlock; + uint64_t unlocked_balance = m_wallet->unlocked_balance(m_current_subaddress_account, &blocks_to_unlock); + std::string unlock_time_message; + if (blocks_to_unlock > 0) + unlock_time_message = (boost::format(" (%lu block(s) to unlock)") % blocks_to_unlock).str(); success_msg_writer() << tr("Balance: ") << print_money(m_wallet->balance(m_current_subaddress_account)) << ", " - << tr("unlocked balance: ") << print_money(m_wallet->unlocked_balance(m_current_subaddress_account)) << extra; + << tr("unlocked balance: ") << print_money(unlocked_balance) << unlock_time_message << extra; std::map<uint32_t, uint64_t> balance_per_subaddress = m_wallet->balance_per_subaddress(m_current_subaddress_account); - std::map<uint32_t, uint64_t> unlocked_balance_per_subaddress = m_wallet->unlocked_balance_per_subaddress(m_current_subaddress_account); + std::map<uint32_t, std::pair<uint64_t, uint64_t>> unlocked_balance_per_subaddress = m_wallet->unlocked_balance_per_subaddress(m_current_subaddress_account); if (!detailed || balance_per_subaddress.empty()) return true; success_msg_writer() << tr("Balance per address:"); @@ -4963,7 +5206,7 @@ bool simple_wallet::show_balance_unlocked(bool detailed) cryptonote::subaddress_index subaddr_index = {m_current_subaddress_account, i.first}; std::string address_str = m_wallet->get_subaddress_as_str(subaddr_index).substr(0, 6); uint64_t num_unspent_outputs = std::count_if(transfers.begin(), transfers.end(), [&subaddr_index](const tools::wallet2::transfer_details& td) { return !td.m_spent && td.m_subaddr_index == subaddr_index; }); - success_msg_writer() << boost::format(tr("%8u %6s %21s %21s %7u %21s")) % i.first % address_str % print_money(i.second) % print_money(unlocked_balance_per_subaddress[i.first]) % num_unspent_outputs % m_wallet->get_subaddress_label(subaddr_index); + success_msg_writer() << boost::format(tr("%8u %6s %21s %21s %7u %21s")) % i.first % address_str % print_money(i.second) % print_money(unlocked_balance_per_subaddress[i.first].first) % num_unspent_outputs % m_wallet->get_subaddress_label(subaddr_index); } return true; } @@ -5297,7 +5540,7 @@ bool simple_wallet::print_ring_members(const std::vector<tools::wallet2::pending } const cryptonote::tx_source_entry& source = *sptr; - ostr << boost::format(tr("\nInput %llu/%llu: amount=%s")) % (i + 1) % tx.vin.size() % print_money(source.amount); + ostr << boost::format(tr("\nInput %llu/%llu (%s): amount=%s")) % (i + 1) % tx.vin.size() % epee::string_tools::pod_to_hex(in_key.k_image) % print_money(source.amount); // convert relative offsets of ring member keys into absolute offsets (indices) associated with the amount std::vector<uint64_t> absolute_offsets = cryptonote::relative_output_offsets_to_absolute(in_key.key_offsets); // get block heights from which those ring member keys originated @@ -5336,7 +5579,7 @@ bool simple_wallet::print_ring_members(const std::vector<tools::wallet2::pending if (j == source.real_output) highlight_height = heights[j]; } - std::pair<std::string, std::string> ring_str = show_outputs_line(heights, highlight_height); + std::pair<std::string, std::string> ring_str = show_outputs_line(heights, blockchain_height, highlight_height); ostr << ring_str.first << tr("\n|") << ring_str.second << tr("|\n"); } // warn if rings contain keys originating from the same tx or temporally very close block heights @@ -5671,12 +5914,14 @@ bool simple_wallet::transfer_main(int transfer_type, const std::vector<std::stri uint64_t total_fee = 0; uint64_t dust_not_in_fee = 0; uint64_t dust_in_fee = 0; + uint64_t change = 0; for (size_t n = 0; n < ptx_vector.size(); ++n) { total_fee += ptx_vector[n].fee; for (auto i: ptx_vector[n].selected_transfers) total_sent += m_wallet->get_transfer_details(i).amount(); total_sent -= ptx_vector[n].change_dts.amount + ptx_vector[n].fee; + change += ptx_vector[n].change_dts.amount; if (ptx_vector[n].dust_added_to_fee) dust_in_fee += ptx_vector[n].dust; @@ -5714,7 +5959,7 @@ bool simple_wallet::transfer_main(int transfer_type, const std::vector<std::stri if (transfer_type == TransferLocked) { float days = locked_blocks / 720.0f; - prompt << boost::format(tr(".\nThis transaction will unlock on block %llu, in approximately %s days (assuming 2 minutes per block)")) % ((unsigned long long)unlock_block) % days; + prompt << boost::format(tr(".\nThis transaction (including %s change) will unlock on block %llu, in approximately %s days (assuming 2 minutes per block)")) % cryptonote::print_money(change) % ((unsigned long long)unlock_block) % days; } if (m_wallet->print_ring_members()) { diff --git a/src/simplewallet/simplewallet.h b/src/simplewallet/simplewallet.h index c9a5c55e8..76d446ba5 100644 --- a/src/simplewallet/simplewallet.h +++ b/src/simplewallet/simplewallet.h @@ -102,7 +102,7 @@ namespace cryptonote boost::optional<epee::wipeable_string> new_wallet(const boost::program_options::variables_map& vm, const epee::wipeable_string &multisig_keys, const std::string &old_language); boost::optional<epee::wipeable_string> new_wallet(const boost::program_options::variables_map& vm); - bool open_wallet(const boost::program_options::variables_map& vm); + boost::optional<epee::wipeable_string> open_wallet(const boost::program_options::variables_map& vm); bool close_wallet(); bool viewkey(const std::vector<std::string> &args = std::vector<std::string>()); @@ -143,6 +143,7 @@ namespace cryptonote bool set_segregation_height(const std::vector<std::string> &args = std::vector<std::string>()); bool set_ignore_fractional_outputs(const std::vector<std::string> &args = std::vector<std::string>()); bool set_track_uses(const std::vector<std::string> &args = std::vector<std::string>()); + bool set_setup_background_mining(const std::vector<std::string> &args = std::vector<std::string>()); bool set_device_name(const std::vector<std::string> &args = std::vector<std::string>()); bool help(const std::vector<std::string> &args = std::vector<std::string>()); bool start_mining(const std::vector<std::string> &args); @@ -234,6 +235,7 @@ namespace cryptonote bool mms(const std::vector<std::string>& args); bool print_ring(const std::vector<std::string>& args); bool set_ring(const std::vector<std::string>& args); + bool unset_ring(const std::vector<std::string>& args); bool save_known_rings(const std::vector<std::string>& args); bool blackball(const std::vector<std::string>& args); bool unblackball(const std::vector<std::string>& args); @@ -241,6 +243,8 @@ namespace cryptonote bool freeze(const std::vector<std::string>& args); bool thaw(const std::vector<std::string>& args); bool frozen(const std::vector<std::string>& args); + bool net_stats(const std::vector<std::string>& args); + bool welcome(const std::vector<std::string>& args); bool version(const std::vector<std::string>& args); bool cold_sign_tx(const std::vector<tools::wallet2::pending_tx>& ptx_vector, tools::wallet2::signed_tx_set &exported_txs, std::vector<cryptonote::address_parse_info> &dsts_info, std::function<bool(const tools::wallet2::signed_tx_set &)> accept_func); @@ -297,6 +301,13 @@ namespace cryptonote */ void commit_or_save(std::vector<tools::wallet2::pending_tx>& ptx_vector, bool do_not_relay); + /*! + * \brief checks whether background mining is enabled, and asks to configure it if not + */ + void check_background_mining(const epee::wipeable_string &password); + void start_background_mining(); + void stop_background_mining(); + //----------------- i_wallet2_callback --------------------- virtual void on_new_block(uint64_t height, const cryptonote::block& block); virtual void on_money_received(uint64_t height, const crypto::hash &txid, const cryptonote::transaction& tx, uint64_t amount, const cryptonote::subaddress_index& subaddr_index); diff --git a/src/wallet/api/wallet.cpp b/src/wallet/api/wallet.cpp index c1303c225..032b873d6 100644 --- a/src/wallet/api/wallet.cpp +++ b/src/wallet/api/wallet.cpp @@ -249,6 +249,13 @@ struct Wallet2CallbackImpl : public tools::i_wallet2_callback } } + virtual void on_device_button_pressed() + { + if (m_listener) { + m_listener->onDeviceButtonPressed(); + } + } + virtual boost::optional<epee::wipeable_string> on_device_pin_request() { if (m_listener) { @@ -449,6 +456,11 @@ WalletImpl::~WalletImpl() close(false); // do not store wallet as part of the closing activities // Stop refresh thread stopRefresh(); + + if (m_wallet2Callback->getListener()) { + m_wallet2Callback->getListener()->onSetWallet(nullptr); + } + LOG_PRINT_L1(__FUNCTION__ << " finished"); } diff --git a/src/wallet/api/wallet2_api.h b/src/wallet/api/wallet2_api.h index ee1d6ae79..0af3b1867 100644 --- a/src/wallet/api/wallet2_api.h +++ b/src/wallet/api/wallet2_api.h @@ -37,6 +37,7 @@ #include <set> #include <ctime> #include <iostream> +#include <stdexcept> // Public interface for libwallet library namespace Monero { @@ -337,6 +338,7 @@ protected: bool m_indeterminate; }; +struct Wallet; struct WalletListener { virtual ~WalletListener() = 0; @@ -381,7 +383,12 @@ struct WalletListener /** * @brief called by device if the action is required */ - virtual void onDeviceButtonRequest(uint64_t code) {} + virtual void onDeviceButtonRequest(uint64_t code) { (void)code; } + + /** + * @brief called by device if the button was pressed + */ + virtual void onDeviceButtonPressed() { } /** * @brief called by device when PIN is needed @@ -401,7 +408,12 @@ struct WalletListener /** * @brief Signalizes device operation progress */ - virtual void onDeviceProgress(const DeviceProgress & event) {}; + virtual void onDeviceProgress(const DeviceProgress & event) { (void)event; }; + + /** + * @brief If the listener is created before the wallet this enables to set created wallet object + */ + virtual void onSetWallet(Wallet * wallet) { (void)wallet; }; }; @@ -440,8 +452,8 @@ struct Wallet //! returns both error and error string atomically. suggested to use in instead of status() and errorString() virtual void statusWithErrorString(int& status, std::string& errorString) const = 0; virtual bool setPassword(const std::string &password) = 0; - virtual bool setDevicePin(const std::string &password) { return false; }; - virtual bool setDevicePassphrase(const std::string &password) { return false; }; + virtual bool setDevicePin(const std::string &pin) { (void)pin; return false; }; + virtual bool setDevicePassphrase(const std::string &passphrase) { (void)passphrase; return false; }; virtual std::string address(uint32_t accountIndex = 0, uint32_t addressIndex = 0) const = 0; std::string mainAddress() const { return address(0, 0); } virtual std::string path() const = 0; @@ -1020,9 +1032,10 @@ struct WalletManager * \param password Password of wallet file * \param nettype Network type * \param kdf_rounds Number of rounds for key derivation function + * \param listener Wallet listener to set to the wallet after creation * \return Wallet instance (Wallet::status() needs to be called to check if opened successfully) */ - virtual Wallet * openWallet(const std::string &path, const std::string &password, NetworkType nettype, uint64_t kdf_rounds = 1) = 0; + virtual Wallet * openWallet(const std::string &path, const std::string &password, NetworkType nettype, uint64_t kdf_rounds = 1, WalletListener * listener = nullptr) = 0; Wallet * openWallet(const std::string &path, const std::string &password, bool testnet = false) // deprecated { return openWallet(path, password, testnet ? TESTNET : MAINNET); @@ -1134,6 +1147,7 @@ struct WalletManager * \param restoreHeight restore from start height (0 sets to current height) * \param subaddressLookahead Size of subaddress lookahead (empty sets to some default low value) * \param kdf_rounds Number of rounds for key derivation function + * \param listener Wallet listener to set to the wallet after creation * \return Wallet instance (Wallet::status() needs to be called to check if recovered successfully) */ virtual Wallet * createWalletFromDevice(const std::string &path, @@ -1142,7 +1156,8 @@ struct WalletManager const std::string &deviceName, uint64_t restoreHeight = 0, const std::string &subaddressLookahead = "", - uint64_t kdf_rounds = 1) = 0; + uint64_t kdf_rounds = 1, + WalletListener * listener = nullptr) = 0; /*! * \brief Closes wallet. In case operation succeeded, wallet object deleted. in case operation failed, wallet object not deleted diff --git a/src/wallet/api/wallet_manager.cpp b/src/wallet/api/wallet_manager.cpp index f584e88ac..ef2ed2015 100644 --- a/src/wallet/api/wallet_manager.cpp +++ b/src/wallet/api/wallet_manager.cpp @@ -57,9 +57,14 @@ Wallet *WalletManagerImpl::createWallet(const std::string &path, const std::stri return wallet; } -Wallet *WalletManagerImpl::openWallet(const std::string &path, const std::string &password, NetworkType nettype, uint64_t kdf_rounds) +Wallet *WalletManagerImpl::openWallet(const std::string &path, const std::string &password, NetworkType nettype, uint64_t kdf_rounds, WalletListener * listener) { WalletImpl * wallet = new WalletImpl(nettype, kdf_rounds); + wallet->setListener(listener); + if (listener){ + listener->onSetWallet(wallet); + } + wallet->open(path, password); //Refresh addressBook wallet->addressBook()->refresh(); @@ -122,9 +127,15 @@ Wallet *WalletManagerImpl::createWalletFromDevice(const std::string &path, const std::string &deviceName, uint64_t restoreHeight, const std::string &subaddressLookahead, - uint64_t kdf_rounds) + uint64_t kdf_rounds, + WalletListener * listener) { WalletImpl * wallet = new WalletImpl(nettype, kdf_rounds); + wallet->setListener(listener); + if (listener){ + listener->onSetWallet(wallet); + } + if(restoreHeight > 0){ wallet->setRefreshFromBlockHeight(restoreHeight); } else { diff --git a/src/wallet/api/wallet_manager.h b/src/wallet/api/wallet_manager.h index 0c83d794f..235f96e17 100644 --- a/src/wallet/api/wallet_manager.h +++ b/src/wallet/api/wallet_manager.h @@ -40,7 +40,7 @@ class WalletManagerImpl : public WalletManager public: Wallet * createWallet(const std::string &path, const std::string &password, const std::string &language, NetworkType nettype, uint64_t kdf_rounds = 1) override; - Wallet * openWallet(const std::string &path, const std::string &password, NetworkType nettype, uint64_t kdf_rounds = 1) override; + Wallet * openWallet(const std::string &path, const std::string &password, NetworkType nettype, uint64_t kdf_rounds = 1, WalletListener * listener = nullptr) override; virtual Wallet * recoveryWallet(const std::string &path, const std::string &password, const std::string &mnemonic, @@ -72,7 +72,8 @@ public: const std::string &deviceName, uint64_t restoreHeight = 0, const std::string &subaddressLookahead = "", - uint64_t kdf_rounds = 1) override; + uint64_t kdf_rounds = 1, + WalletListener * listener = nullptr) override; virtual bool closeWallet(Wallet *wallet, bool store = true) override; bool walletExists(const std::string &path) override; bool verifyWalletPassword(const std::string &keys_file_name, const std::string &password, bool no_spend_key, uint64_t kdf_rounds = 1) const override; diff --git a/src/wallet/node_rpc_proxy.cpp b/src/wallet/node_rpc_proxy.cpp index f5f3c0e1b..1d5078a11 100644 --- a/src/wallet/node_rpc_proxy.cpp +++ b/src/wallet/node_rpc_proxy.cpp @@ -37,9 +37,10 @@ namespace tools static const std::chrono::seconds rpc_timeout = std::chrono::minutes(3) + std::chrono::seconds(30); -NodeRPCProxy::NodeRPCProxy(epee::net_utils::http::http_simple_client &http_client, boost::mutex &mutex) +NodeRPCProxy::NodeRPCProxy(epee::net_utils::http::http_simple_client &http_client, boost::recursive_mutex &mutex) : m_http_client(http_client) , m_daemon_rpc_mutex(mutex) + , m_offline(false) { invalidate(); } @@ -61,6 +62,8 @@ void NodeRPCProxy::invalidate() boost::optional<std::string> NodeRPCProxy::get_rpc_version(uint32_t &rpc_version) const { + if (m_offline) + return boost::optional<std::string>("offline"); if (m_rpc_version == 0) { cryptonote::COMMAND_RPC_GET_VERSION::request req_t = AUTO_VAL_INIT(req_t); @@ -84,6 +87,8 @@ void NodeRPCProxy::set_height(uint64_t h) boost::optional<std::string> NodeRPCProxy::get_info() const { + if (m_offline) + return boost::optional<std::string>("offline"); const time_t now = time(NULL); if (now >= m_get_info_time + 30) // re-cache every 30 seconds { @@ -134,6 +139,8 @@ boost::optional<std::string> NodeRPCProxy::get_block_weight_limit(uint64_t &bloc boost::optional<std::string> NodeRPCProxy::get_earliest_height(uint8_t version, uint64_t &earliest_height) const { + if (m_offline) + return boost::optional<std::string>("offline"); if (m_earliest_height[version] == 0) { cryptonote::COMMAND_RPC_HARD_FORK_INFO::request req_t = AUTO_VAL_INIT(req_t); @@ -161,6 +168,8 @@ boost::optional<std::string> NodeRPCProxy::get_dynamic_base_fee_estimate(uint64_ if (result) return result; + if (m_offline) + return boost::optional<std::string>("offline"); if (m_dynamic_base_fee_estimate_cached_height != height || m_dynamic_base_fee_estimate_grace_blocks != grace_blocks) { cryptonote::COMMAND_RPC_GET_BASE_FEE_ESTIMATE::request req_t = AUTO_VAL_INIT(req_t); @@ -191,6 +200,8 @@ boost::optional<std::string> NodeRPCProxy::get_fee_quantization_mask(uint64_t &f if (result) return result; + if (m_offline) + return boost::optional<std::string>("offline"); if (m_dynamic_base_fee_estimate_cached_height != height) { cryptonote::COMMAND_RPC_GET_BASE_FEE_ESTIMATE::request req_t = AUTO_VAL_INIT(req_t); diff --git a/src/wallet/node_rpc_proxy.h b/src/wallet/node_rpc_proxy.h index 3630aec08..3b75c8b94 100644 --- a/src/wallet/node_rpc_proxy.h +++ b/src/wallet/node_rpc_proxy.h @@ -39,9 +39,10 @@ namespace tools class NodeRPCProxy { public: - NodeRPCProxy(epee::net_utils::http::http_simple_client &http_client, boost::mutex &mutex); + NodeRPCProxy(epee::net_utils::http::http_simple_client &http_client, boost::recursive_mutex &mutex); void invalidate(); + void set_offline(bool offline) { m_offline = offline; } boost::optional<std::string> get_rpc_version(uint32_t &version) const; boost::optional<std::string> get_height(uint64_t &height) const; @@ -56,7 +57,8 @@ private: boost::optional<std::string> get_info() const; epee::net_utils::http::http_simple_client &m_http_client; - boost::mutex &m_daemon_rpc_mutex; + boost::recursive_mutex &m_daemon_rpc_mutex; + bool m_offline; mutable uint64_t m_height; mutable uint64_t m_earliest_height[256]; diff --git a/src/wallet/ringdb.cpp b/src/wallet/ringdb.cpp index b69022af4..8da95de7b 100644 --- a/src/wallet/ringdb.cpp +++ b/src/wallet/ringdb.cpp @@ -281,7 +281,7 @@ bool ringdb::add_rings(const crypto::chacha_key &chacha_key, const cryptonote::t return true; } -bool ringdb::remove_rings(const crypto::chacha_key &chacha_key, const cryptonote::transaction_prefix &tx) +bool ringdb::remove_rings(const crypto::chacha_key &chacha_key, const std::vector<crypto::key_image> &key_images) { MDB_txn *txn; int dbr; @@ -294,17 +294,10 @@ bool ringdb::remove_rings(const crypto::chacha_key &chacha_key, const cryptonote epee::misc_utils::auto_scope_leave_caller txn_dtor = epee::misc_utils::create_scope_leave_handler([&](){if (tx_active) mdb_txn_abort(txn);}); tx_active = true; - for (const auto &in: tx.vin) + for (const crypto::key_image &key_image: key_images) { - if (in.type() != typeid(cryptonote::txin_to_key)) - continue; - const auto &txin = boost::get<cryptonote::txin_to_key>(in); - const uint32_t ring_size = txin.key_offsets.size(); - if (ring_size == 1) - continue; - MDB_val key, data; - std::string key_ciphertext = encrypt(txin.k_image, chacha_key); + std::string key_ciphertext = encrypt(key_image, chacha_key); key.mv_data = (void*)key_ciphertext.data(); key.mv_size = key_ciphertext.size(); @@ -314,7 +307,7 @@ bool ringdb::remove_rings(const crypto::chacha_key &chacha_key, const cryptonote continue; THROW_WALLET_EXCEPTION_IF(data.mv_size <= 0, tools::error::wallet_internal_error, "Invalid ring data size"); - MDEBUG("Removing ring data for key image " << txin.k_image); + MDEBUG("Removing ring data for key image " << key_image); dbr = mdb_del(txn, dbi_rings, &key, NULL); THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to remove ring to database: " + std::string(mdb_strerror(dbr))); } @@ -325,6 +318,23 @@ bool ringdb::remove_rings(const crypto::chacha_key &chacha_key, const cryptonote return true; } +bool ringdb::remove_rings(const crypto::chacha_key &chacha_key, const cryptonote::transaction_prefix &tx) +{ + std::vector<crypto::key_image> key_images; + key_images.reserve(tx.vin.size()); + for (const auto &in: tx.vin) + { + if (in.type() != typeid(cryptonote::txin_to_key)) + continue; + const auto &txin = boost::get<cryptonote::txin_to_key>(in); + const uint32_t ring_size = txin.key_offsets.size(); + if (ring_size == 1) + continue; + key_images.push_back(txin.k_image); + } + return remove_rings(chacha_key, key_images); +} + bool ringdb::get_ring(const crypto::chacha_key &chacha_key, const crypto::key_image &key_image, std::vector<uint64_t> &outs) { MDB_txn *txn; diff --git a/src/wallet/ringdb.h b/src/wallet/ringdb.h index 7b448b0d7..9c7e624bc 100644 --- a/src/wallet/ringdb.h +++ b/src/wallet/ringdb.h @@ -45,6 +45,7 @@ namespace tools ~ringdb(); bool add_rings(const crypto::chacha_key &chacha_key, const cryptonote::transaction_prefix &tx); + bool remove_rings(const crypto::chacha_key &chacha_key, const std::vector<crypto::key_image> &key_images); bool remove_rings(const crypto::chacha_key &chacha_key, const cryptonote::transaction_prefix &tx); bool get_ring(const crypto::chacha_key &chacha_key, const crypto::key_image &key_image, std::vector<uint64_t> &outs); bool set_ring(const crypto::chacha_key &chacha_key, const crypto::key_image &key_image, const std::vector<uint64_t> &outs, bool relative); diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 54fbd9ca8..f5b492771 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -29,7 +29,6 @@ // Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers #include <numeric> -#include <random> #include <tuple> #include <boost/format.hpp> #include <boost/optional/optional.hpp> @@ -40,6 +39,7 @@ #include <boost/algorithm/string/join.hpp> #include <boost/asio/ip/address.hpp> #include <boost/range/adaptor/transformed.hpp> +#include <boost/preprocessor/stringize.hpp> #include "include_base_utils.h" using namespace epee; @@ -129,7 +129,11 @@ using namespace cryptonote; #define FIRST_REFRESH_GRANULARITY 1024 -#define GAMMA_PICK_HALF_WINDOW 5 +#define GAMMA_SHAPE 19.28 +#define GAMMA_SCALE (1/1.61) + +#define DEFAULT_MIN_OUTPUT_COUNT 5 +#define DEFAULT_MIN_OUTPUT_VALUE (2*COIN) static const std::string MULTISIG_SIGNATURE_MAGIC = "SigMultisigPkV1"; static const std::string MULTISIG_EXTRA_INFO_MAGIC = "MultisigxV1"; @@ -221,6 +225,8 @@ namespace add_reason(reason, "fee too low"); if (res.not_rct) add_reason(reason, "tx is not ringct"); + if (res.sanity_check_failed) + add_reason(reason, "tx sanity check failed"); if (res.not_relayed) add_reason(reason, "tx was not relayed"); return reason; @@ -243,9 +249,10 @@ struct options { const command_line::arg_descriptor<std::string> daemon_ssl = {"daemon-ssl", tools::wallet2::tr("Enable SSL on daemon RPC connections: enabled|disabled|autodetect"), "autodetect"}; const command_line::arg_descriptor<std::string> daemon_ssl_private_key = {"daemon-ssl-private-key", tools::wallet2::tr("Path to a PEM format private key"), ""}; const command_line::arg_descriptor<std::string> daemon_ssl_certificate = {"daemon-ssl-certificate", tools::wallet2::tr("Path to a PEM format certificate"), ""}; - const command_line::arg_descriptor<std::vector<std::string>> daemon_ssl_allowed_certificates = {"daemon-ssl-allowed-certificates", tools::wallet2::tr("List of paths to PEM format certificates of allowed RPC servers")}; + const command_line::arg_descriptor<std::string> daemon_ssl_ca_certificates = {"daemon-ssl-ca-certificates", tools::wallet2::tr("Path to file containing concatenated PEM format certificate(s) to replace system CA(s).")}; const command_line::arg_descriptor<std::vector<std::string>> daemon_ssl_allowed_fingerprints = {"daemon-ssl-allowed-fingerprints", tools::wallet2::tr("List of valid fingerprints of allowed RPC servers")}; const command_line::arg_descriptor<bool> daemon_ssl_allow_any_cert = {"daemon-ssl-allow-any-cert", tools::wallet2::tr("Allow any SSL certificate from the daemon"), false}; + const command_line::arg_descriptor<bool> daemon_ssl_allow_chained = {"daemon-ssl-allow-chained", tools::wallet2::tr("Allow user (via --daemon-ssl-ca-certificates) chain certificates"), false}; const command_line::arg_descriptor<bool> testnet = {"testnet", tools::wallet2::tr("For testnet. Daemon must also be launched with --testnet flag"), false}; const command_line::arg_descriptor<bool> stagenet = {"stagenet", tools::wallet2::tr("For stagenet. Daemon must also be launched with --stagenet flag"), false}; const command_line::arg_descriptor<std::string, false, true, 2> shared_ringdb_dir = { @@ -264,6 +271,8 @@ struct options { const command_line::arg_descriptor<std::string> hw_device = {"hw-device", tools::wallet2::tr("HW device to use"), ""}; const command_line::arg_descriptor<std::string> hw_device_derivation_path = {"hw-device-deriv-path", tools::wallet2::tr("HW device wallet derivation path (e.g., SLIP-10)"), ""}; const command_line::arg_descriptor<std::string> tx_notify = { "tx-notify" , "Run a program for each new incoming transaction, '%s' will be replaced by the transaction hash" , "" }; + const command_line::arg_descriptor<bool> no_dns = {"no-dns", tools::wallet2::tr("Do not use DNS"), false}; + const command_line::arg_descriptor<bool> offline = {"offline", tools::wallet2::tr("Do not connect to a daemon, nor use DNS"), false}; }; void do_prepare_file_names(const std::string& file_path, std::string& keys_file, std::string& wallet_file, std::string &mms_file) @@ -314,6 +323,7 @@ std::unique_ptr<tools::wallet2> make_basic(const boost::program_options::variabl const uint64_t kdf_rounds = command_line::get_arg(vm, opts.kdf_rounds); THROW_WALLET_EXCEPTION_IF(kdf_rounds == 0, tools::error::wallet_internal_error, "KDF rounds must not be 0"); + const bool use_proxy = command_line::has_arg(vm, opts.proxy); auto daemon_address = command_line::get_arg(vm, opts.daemon_address); auto daemon_host = command_line::get_arg(vm, opts.daemon_host); auto daemon_port = command_line::get_arg(vm, opts.daemon_port); @@ -321,13 +331,42 @@ std::unique_ptr<tools::wallet2> make_basic(const boost::program_options::variabl auto device_derivation_path = command_line::get_arg(vm, opts.hw_device_derivation_path); auto daemon_ssl_private_key = command_line::get_arg(vm, opts.daemon_ssl_private_key); auto daemon_ssl_certificate = command_line::get_arg(vm, opts.daemon_ssl_certificate); - auto daemon_ssl_allowed_certificates = command_line::get_arg(vm, opts.daemon_ssl_allowed_certificates); + auto daemon_ssl_ca_file = command_line::get_arg(vm, opts.daemon_ssl_ca_certificates); auto daemon_ssl_allowed_fingerprints = command_line::get_arg(vm, opts.daemon_ssl_allowed_fingerprints); auto daemon_ssl_allow_any_cert = command_line::get_arg(vm, opts.daemon_ssl_allow_any_cert); auto daemon_ssl = command_line::get_arg(vm, opts.daemon_ssl); - epee::net_utils::ssl_support_t ssl_support; - THROW_WALLET_EXCEPTION_IF(!epee::net_utils::ssl_support_from_string(ssl_support, daemon_ssl), tools::error::wallet_internal_error, - tools::wallet2::tr("Invalid argument for ") + std::string(opts.daemon_ssl.name)); + + // user specified CA file or fingeprints implies enabled SSL by default + epee::net_utils::ssl_options_t ssl_options = epee::net_utils::ssl_support_t::e_ssl_support_enabled; + if (command_line::get_arg(vm, opts.daemon_ssl_allow_any_cert)) + ssl_options.verification = epee::net_utils::ssl_verification_t::none; + else if (!daemon_ssl_ca_file.empty() || !daemon_ssl_allowed_fingerprints.empty()) + { + std::vector<std::vector<uint8_t>> ssl_allowed_fingerprints{ daemon_ssl_allowed_fingerprints.size() }; + std::transform(daemon_ssl_allowed_fingerprints.begin(), daemon_ssl_allowed_fingerprints.end(), ssl_allowed_fingerprints.begin(), epee::from_hex::vector); + for (const auto &fpr: daemon_ssl_allowed_fingerprints) + { + THROW_WALLET_EXCEPTION_IF(fpr.size() != SSL_FINGERPRINT_SIZE, tools::error::wallet_internal_error, + "SHA-256 fingerprint should be " BOOST_PP_STRINGIZE(SSL_FINGERPRINT_SIZE) " bytes long."); + } + + ssl_options = epee::net_utils::ssl_options_t{ + std::move(ssl_allowed_fingerprints), std::move(daemon_ssl_ca_file) + }; + + if (command_line::get_arg(vm, opts.daemon_ssl_allow_chained)) + ssl_options.verification = epee::net_utils::ssl_verification_t::user_ca; + } + + if (ssl_options.verification != epee::net_utils::ssl_verification_t::user_certificates || !command_line::is_arg_defaulted(vm, opts.daemon_ssl)) + { + THROW_WALLET_EXCEPTION_IF(!epee::net_utils::ssl_support_from_string(ssl_options.support, daemon_ssl), tools::error::wallet_internal_error, + tools::wallet2::tr("Invalid argument for ") + std::string(opts.daemon_ssl.name)); + } + + ssl_options.auth = epee::net_utils::ssl_authentication_t{ + std::move(daemon_ssl_private_key), std::move(daemon_ssl_certificate) + }; THROW_WALLET_EXCEPTION_IF(!daemon_address.empty() && !daemon_host.empty() && 0 != daemon_port, tools::error::wallet_internal_error, tools::wallet2::tr("can't specify daemon host or port more than once")); @@ -357,22 +396,24 @@ std::unique_ptr<tools::wallet2> make_basic(const boost::program_options::variabl if (daemon_address.empty()) daemon_address = std::string("http://") + daemon_host + ":" + std::to_string(daemon_port); - boost::asio::ip::tcp::endpoint proxy{}; - if (command_line::has_arg(vm, opts.proxy)) { - namespace ip = boost::asio::ip; const boost::string_ref real_daemon = boost::string_ref{daemon_address}.substr(0, daemon_address.rfind(':')); - // onion and i2p addresses contain information about the server cert - // which both authenticates and encrypts - const bool unencrypted_proxy = - !real_daemon.ends_with(".onion") && !real_daemon.ends_with(".i2p") && - daemon_ssl_allowed_certificates.empty() && daemon_ssl_allowed_fingerprints.empty(); + const bool verification_required = + ssl_options.support == epee::net_utils::ssl_support_t::e_ssl_support_enabled || use_proxy; + THROW_WALLET_EXCEPTION_IF( - unencrypted_proxy, + verification_required && !ssl_options.has_strong_verification(real_daemon), tools::error::wallet_internal_error, - std::string{"Use of --"} + opts.proxy.name + " requires --" + opts.daemon_ssl_allowed_certificates.name + " or --" + opts.daemon_ssl_allowed_fingerprints.name + " or use of a .onion/.i2p domain" + tools::wallet2::tr("Enabling --") + std::string{use_proxy ? opts.proxy.name : opts.daemon_ssl.name} + tools::wallet2::tr(" requires --") + + opts.daemon_ssl_ca_certificates.name + tools::wallet2::tr(" or --") + opts.daemon_ssl_allowed_fingerprints.name + tools::wallet2::tr(" or use of a .onion/.i2p domain") ); + } + + boost::asio::ip::tcp::endpoint proxy{}; + if (use_proxy) + { + namespace ip = boost::asio::ip; const auto proxy_address = command_line::get_arg(vm, opts.proxy); @@ -416,28 +457,20 @@ std::unique_ptr<tools::wallet2> make_basic(const boost::program_options::variabl catch (const std::exception &e) { } } - std::list<std::string> ssl_allowed_certificates; - for (const std::string &path: daemon_ssl_allowed_certificates) - { - ssl_allowed_certificates.push_back({}); - if (!epee::file_io_utils::load_file_to_string(path, ssl_allowed_certificates.back())) - { - MERROR("Failed to load certificate: " << path); - ssl_allowed_certificates.back() = std::string(); - } - } - - std::vector<std::vector<uint8_t>> ssl_allowed_fingerprints{ daemon_ssl_allowed_fingerprints.size() }; - std::transform(daemon_ssl_allowed_fingerprints.begin(), daemon_ssl_allowed_fingerprints.end(), ssl_allowed_fingerprints.begin(), epee::from_hex::vector); - std::unique_ptr<tools::wallet2> wallet(new tools::wallet2(nettype, kdf_rounds, unattended)); - wallet->init(std::move(daemon_address), std::move(login), std::move(proxy), 0, *trusted_daemon, ssl_support, std::make_pair(daemon_ssl_private_key, daemon_ssl_certificate), ssl_allowed_certificates, ssl_allowed_fingerprints, daemon_ssl_allow_any_cert); + wallet->init(std::move(daemon_address), std::move(login), std::move(proxy), 0, *trusted_daemon, std::move(ssl_options)); boost::filesystem::path ringdb_path = command_line::get_arg(vm, opts.shared_ringdb_dir); wallet->set_ring_database(ringdb_path.string()); wallet->get_message_store().set_options(vm); wallet->device_name(device_name); wallet->device_derivation_path(device_derivation_path); + if (command_line::get_arg(vm, opts.no_dns)) + wallet->enable_dns(false); + + if (command_line::get_arg(vm, opts.offline)) + wallet->set_offline(); + try { if (!command_line::is_arg_defaulted(vm, opts.tx_notify)) @@ -774,7 +807,7 @@ size_t estimate_rct_tx_size(int n_inputs, int mixin, int n_outputs, size_t extra // pseudoOuts size += 32 * n_inputs; // ecdhInfo - size += 2 * 32 * n_outputs; + size += 8 * n_outputs; // outPk - only commitment is saved size += 32 * n_outputs; // txnFee @@ -936,6 +969,44 @@ const size_t MAX_SPLIT_ATTEMPTS = 30; constexpr const std::chrono::seconds wallet2::rpc_timeout; const char* wallet2::tr(const char* str) { return i18n_translate(str, "tools::wallet2"); } +gamma_picker::gamma_picker(const std::vector<uint64_t> &rct_offsets, double shape, double scale): + rct_offsets(rct_offsets) +{ + gamma = std::gamma_distribution<double>(shape, scale); + THROW_WALLET_EXCEPTION_IF(rct_offsets.size() <= CRYPTONOTE_DEFAULT_TX_SPENDABLE_AGE, error::wallet_internal_error, "Bad offset calculation"); + const size_t blocks_in_a_year = 86400 * 365 / DIFFICULTY_TARGET_V2; + const size_t blocks_to_consider = std::min<size_t>(rct_offsets.size(), blocks_in_a_year); + const size_t outputs_to_consider = rct_offsets.back() - (blocks_to_consider < rct_offsets.size() ? rct_offsets[rct_offsets.size() - blocks_to_consider - 1] : 0); + begin = rct_offsets.data(); + end = rct_offsets.data() + rct_offsets.size() - CRYPTONOTE_DEFAULT_TX_SPENDABLE_AGE; + num_rct_outputs = *(end - 1); + THROW_WALLET_EXCEPTION_IF(num_rct_outputs == 0, error::wallet_internal_error, "No rct outputs"); + average_output_time = DIFFICULTY_TARGET_V2 * blocks_to_consider / outputs_to_consider; // this assumes constant target over the whole rct range +}; + +gamma_picker::gamma_picker(const std::vector<uint64_t> &rct_offsets): gamma_picker(rct_offsets, GAMMA_SHAPE, GAMMA_SCALE) {} + +uint64_t gamma_picker::pick() +{ + double x = gamma(engine); + x = exp(x); + uint64_t output_index = x / average_output_time; + if (output_index >= num_rct_outputs) + return std::numeric_limits<uint64_t>::max(); // bad pick + output_index = num_rct_outputs - 1 - output_index; + + const uint64_t *it = std::lower_bound(begin, end, output_index); + THROW_WALLET_EXCEPTION_IF(it == end, error::wallet_internal_error, "output_index not found"); + uint64_t index = std::distance(begin, it); + + const uint64_t first_rct = index == 0 ? 0 : rct_offsets[index - 1]; + const uint64_t n_rct = rct_offsets[index] - first_rct; + if (n_rct == 0) + return std::numeric_limits<uint64_t>::max(); // bad pick + MDEBUG("Picking 1/" << n_rct << " in block " << index); + return first_rct + crypto::rand_idx(n_rct); +}; + wallet_keys_unlocker::wallet_keys_unlocker(wallet2 &w, const boost::optional<tools::password_container> &password): w(w), locked(password != boost::none) @@ -978,6 +1049,12 @@ void wallet_device_callback::on_button_request(uint64_t code) wallet->on_device_button_request(code); } +void wallet_device_callback::on_button_pressed() +{ + if (wallet) + wallet->on_device_button_pressed(); +} + boost::optional<epee::wipeable_string> wallet_device_callback::on_pin_request() { if (wallet) @@ -1032,6 +1109,7 @@ wallet2::wallet2(network_type nettype, uint64_t kdf_rounds, bool unattended): m_segregation_height(0), m_ignore_fractional_outputs(true), m_track_uses(false), + m_setup_background_mining(BackgroundMiningMaybe), m_is_initialized(false), m_kdf_rounds(kdf_rounds), is_old_file_format(false), @@ -1057,7 +1135,9 @@ wallet2::wallet2(network_type nettype, uint64_t kdf_rounds, bool unattended): m_encrypt_keys_after_refresh(boost::none), m_unattended(unattended), m_devices_registered(false), - m_device_last_key_image_sync(0) + m_device_last_key_image_sync(0), + m_use_dns(true), + m_offline(false) { } @@ -1100,9 +1180,10 @@ void wallet2::init_options(boost::program_options::options_description& desc_par command_line::add_arg(desc_params, opts.daemon_ssl); command_line::add_arg(desc_params, opts.daemon_ssl_private_key); command_line::add_arg(desc_params, opts.daemon_ssl_certificate); - command_line::add_arg(desc_params, opts.daemon_ssl_allowed_certificates); + command_line::add_arg(desc_params, opts.daemon_ssl_ca_certificates); command_line::add_arg(desc_params, opts.daemon_ssl_allowed_fingerprints); command_line::add_arg(desc_params, opts.daemon_ssl_allow_any_cert); + command_line::add_arg(desc_params, opts.daemon_ssl_allow_chained); command_line::add_arg(desc_params, opts.testnet); command_line::add_arg(desc_params, opts.stagenet); command_line::add_arg(desc_params, opts.shared_ringdb_dir); @@ -1111,6 +1192,8 @@ void wallet2::init_options(boost::program_options::options_description& desc_par command_line::add_arg(desc_params, opts.hw_device); command_line::add_arg(desc_params, opts.hw_device_derivation_path); command_line::add_arg(desc_params, opts.tx_notify); + command_line::add_arg(desc_params, opts.no_dns); + command_line::add_arg(desc_params, opts.offline); } std::pair<std::unique_ptr<wallet2>, tools::password_container> wallet2::make_from_json(const boost::program_options::variables_map& vm, bool unattended, const std::string& json_file, const std::function<boost::optional<tools::password_container>(const char *, bool)> &password_prompter) @@ -1154,11 +1237,10 @@ std::unique_ptr<wallet2> wallet2::make_dummy(const boost::program_options::varia } //---------------------------------------------------------------------------------------------------- -bool wallet2::set_daemon(std::string daemon_address, boost::optional<epee::net_utils::http::login> daemon_login, bool trusted_daemon, - epee::net_utils::ssl_support_t ssl_support, const std::pair<std::string, std::string> &private_key_and_certificate_path, - const std::list<std::string> &allowed_certificates, const std::vector<std::vector<uint8_t>> &allowed_fingerprints, - bool allow_any_cert) +bool wallet2::set_daemon(std::string daemon_address, boost::optional<epee::net_utils::http::login> daemon_login, bool trusted_daemon, epee::net_utils::ssl_options_t ssl_options) { + boost::lock_guard<boost::recursive_mutex> lock(m_daemon_rpc_mutex); + if(m_http_client.is_connected()) m_http_client.disconnect(); m_daemon_address = std::move(daemon_address); @@ -1166,17 +1248,17 @@ bool wallet2::set_daemon(std::string daemon_address, boost::optional<epee::net_u m_trusted_daemon = trusted_daemon; MINFO("setting daemon to " << get_daemon_address()); - return m_http_client.set_server(get_daemon_address(), get_daemon_login(), ssl_support, private_key_and_certificate_path, allowed_certificates, allowed_fingerprints, allow_any_cert); + return m_http_client.set_server(get_daemon_address(), get_daemon_login(), std::move(ssl_options)); } //---------------------------------------------------------------------------------------------------- -bool wallet2::init(std::string daemon_address, boost::optional<epee::net_utils::http::login> daemon_login, boost::asio::ip::tcp::endpoint proxy, uint64_t upper_transaction_weight_limit, bool trusted_daemon, epee::net_utils::ssl_support_t ssl_support, const std::pair<std::string, std::string> &private_key_and_certificate_path, const std::list<std::string> &allowed_certificates, const std::vector<std::vector<uint8_t>> &allowed_fingerprints, bool allow_any_cert) +bool wallet2::init(std::string daemon_address, boost::optional<epee::net_utils::http::login> daemon_login, boost::asio::ip::tcp::endpoint proxy, uint64_t upper_transaction_weight_limit, bool trusted_daemon, epee::net_utils::ssl_options_t ssl_options) { m_checkpoints.init_default_checkpoints(m_nettype); m_is_initialized = true; m_upper_transaction_weight_limit = upper_transaction_weight_limit; if (proxy != boost::asio::ip::tcp::endpoint{}) m_http_client.set_connector(net::socks::connector{std::move(proxy)}); - return set_daemon(daemon_address, daemon_login, trusted_daemon, ssl_support, private_key_and_certificate_path, allowed_certificates, allowed_fingerprints, allow_any_cert); + return set_daemon(daemon_address, daemon_login, trusted_daemon, std::move(ssl_options)); } //---------------------------------------------------------------------------------------------------- bool wallet2::is_deterministic() const @@ -2367,7 +2449,7 @@ void wallet2::pull_blocks(uint64_t start_height, uint64_t &blocks_start_height, req.start_height = start_height; req.no_miner_tx = m_refresh_type == RefreshNoCoinbase; m_daemon_rpc_mutex.lock(); - bool r = net_utils::invoke_http_bin("/getblocks.bin", req, res, m_http_client, rpc_timeout); + bool r = invoke_http_bin("/getblocks.bin", req, res, rpc_timeout); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "getblocks.bin"); THROW_WALLET_EXCEPTION_IF(res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "getblocks.bin"); @@ -2389,7 +2471,7 @@ void wallet2::pull_hashes(uint64_t start_height, uint64_t &blocks_start_height, req.start_height = start_height; m_daemon_rpc_mutex.lock(); - bool r = net_utils::invoke_http_bin("/gethashes.bin", req, res, m_http_client, rpc_timeout); + bool r = invoke_http_bin("/gethashes.bin", req, res, rpc_timeout); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "gethashes.bin"); THROW_WALLET_EXCEPTION_IF(res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "gethashes.bin"); @@ -2666,7 +2748,7 @@ void wallet2::update_pool_state(bool refreshed) cryptonote::COMMAND_RPC_GET_TRANSACTION_POOL_HASHES_BIN::request req; cryptonote::COMMAND_RPC_GET_TRANSACTION_POOL_HASHES_BIN::response res; m_daemon_rpc_mutex.lock(); - bool r = epee::net_utils::invoke_http_json("/get_transaction_pool_hashes.bin", req, res, m_http_client, rpc_timeout); + bool r = invoke_http_json("/get_transaction_pool_hashes.bin", req, res, rpc_timeout); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "get_transaction_pool_hashes.bin"); THROW_WALLET_EXCEPTION_IF(res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "get_transaction_pool_hashes.bin"); @@ -2813,7 +2895,7 @@ void wallet2::update_pool_state(bool refreshed) req.decode_as_json = false; req.prune = true; m_daemon_rpc_mutex.lock(); - bool r = epee::net_utils::invoke_http_json("/gettransactions", req, res, m_http_client, rpc_timeout); + bool r = invoke_http_json("/gettransactions", req, res, rpc_timeout); m_daemon_rpc_mutex.unlock(); MDEBUG("Got " << r << " and " << res.status); if (r && res.status == CORE_RPC_STATUS_OK) @@ -2974,6 +3056,13 @@ std::shared_ptr<std::map<std::pair<uint64_t, uint64_t>, size_t>> wallet2::create //---------------------------------------------------------------------------------------------------- void wallet2::refresh(bool trusted_daemon, uint64_t start_height, uint64_t & blocks_fetched, bool& received_money, bool check_pool) { + if (m_offline) + { + blocks_fetched = 0; + received_money = 0; + return; + } + if(m_light_wallet) { // MyMonero get_address_info needs to be called occasionally to trigger wallet sync. @@ -3051,6 +3140,7 @@ void wallet2::refresh(bool trusted_daemon, uint64_t start_height, uint64_t & blo } }); + auto scope_exit_handler_hwdev = epee::misc_utils::create_scope_leave_handler([&](){hwdev.computing_key_images(false);}); bool first = true; while(m_run.load(std::memory_order_relaxed)) { @@ -3176,7 +3266,6 @@ void wallet2::refresh(bool trusted_daemon, uint64_t start_height, uint64_t & blo LOG_PRINT_L1("Failed to check pending transactions"); } - hwdev.computing_key_images(false); m_first_refresh_done = true; LOG_PRINT_L1("Refresh done, blocks received: " << blocks_fetched << ", balance (all accounts): " << print_money(balance_all()) << ", unlocked: " << print_money(unlocked_balance_all())); @@ -3233,7 +3322,7 @@ bool wallet2::get_rct_distribution(uint64_t &start_height, std::vector<uint64_t> req.binary = true; req.compress = true; m_daemon_rpc_mutex.lock(); - bool r = net_utils::invoke_http_bin("/get_output_distribution.bin", req, res, m_http_client, rpc_timeout); + bool r = invoke_http_bin("/get_output_distribution.bin", req, res, rpc_timeout); m_daemon_rpc_mutex.unlock(); if (!r) { @@ -3540,6 +3629,9 @@ bool wallet2::store_keys(const std::string& keys_file_name, const epee::wipeable value2.SetInt(m_track_uses ? 1 : 0); json.AddMember("track_uses", value2, json.GetAllocator()); + value2.SetInt(m_setup_background_mining); + json.AddMember("setup_background_mining", value2, json.GetAllocator()); + value2.SetUint(m_subaddress_lookahead_major); json.AddMember("subaddress_lookahead_major", value2, json.GetAllocator()); @@ -3691,6 +3783,7 @@ bool wallet2::load_keys(const std::string& keys_file_name, const epee::wipeable_ m_segregation_height = 0; m_ignore_fractional_outputs = true; m_track_uses = false; + m_setup_background_mining = BackgroundMiningMaybe; m_subaddress_lookahead_major = SUBADDRESS_LOOKAHEAD_MAJOR; m_subaddress_lookahead_minor = SUBADDRESS_LOOKAHEAD_MINOR; m_original_keys_available = false; @@ -3845,6 +3938,8 @@ bool wallet2::load_keys(const std::string& keys_file_name, const epee::wipeable_ m_ignore_fractional_outputs = field_ignore_fractional_outputs; GET_FIELD_FROM_JSON_RETURN_ON_ERROR(json, track_uses, int, Int, false, false); m_track_uses = field_track_uses; + GET_FIELD_FROM_JSON_RETURN_ON_ERROR(json, setup_background_mining, BackgroundMiningSetupType, Int, false, BackgroundMiningMaybe); + m_setup_background_mining = field_setup_background_mining; GET_FIELD_FROM_JSON_RETURN_ON_ERROR(json, subaddress_lookahead_major, uint32_t, Uint, false, SUBADDRESS_LOOKAHEAD_MAJOR); m_subaddress_lookahead_major = field_subaddress_lookahead_major; GET_FIELD_FROM_JSON_RETURN_ON_ERROR(json, subaddress_lookahead_minor, uint32_t, Uint, false, SUBADDRESS_LOOKAHEAD_MINOR); @@ -5057,7 +5152,14 @@ bool wallet2::check_connection(uint32_t *version, bool *ssl, uint32_t timeout) { THROW_WALLET_EXCEPTION_IF(!m_is_initialized, error::wallet_not_initialized); - boost::lock_guard<boost::mutex> lock(m_daemon_rpc_mutex); + if (m_offline) + { + if (version) + *version = 0; + if (ssl) + *ssl = false; + return false; + } // TODO: Add light wallet version check. if(m_light_wallet) { @@ -5068,20 +5170,23 @@ bool wallet2::check_connection(uint32_t *version, bool *ssl, uint32_t timeout) return m_light_wallet_connected; } - if(!m_http_client.is_connected(ssl)) { - m_node_rpc_proxy.invalidate(); - if (!m_http_client.connect(std::chrono::milliseconds(timeout))) - return false; + boost::lock_guard<boost::recursive_mutex> lock(m_daemon_rpc_mutex); if(!m_http_client.is_connected(ssl)) - return false; + { + m_node_rpc_proxy.invalidate(); + if (!m_http_client.connect(std::chrono::milliseconds(timeout))) + return false; + if(!m_http_client.is_connected(ssl)) + return false; + } } if (version) { cryptonote::COMMAND_RPC_GET_VERSION::request req_t = AUTO_VAL_INIT(req_t); cryptonote::COMMAND_RPC_GET_VERSION::response resp_t = AUTO_VAL_INIT(resp_t); - bool r = net_utils::invoke_http_json_rpc("/json_rpc", "get_version", req_t, resp_t, m_http_client); + bool r = invoke_http_json_rpc("/json_rpc", "get_version", req_t, resp_t); if(!r) { *version = 0; return false; @@ -5095,6 +5200,18 @@ bool wallet2::check_connection(uint32_t *version, bool *ssl, uint32_t timeout) return true; } //---------------------------------------------------------------------------------------------------- +void wallet2::set_offline(bool offline) +{ + m_offline = offline; + m_http_client.set_auto_connect(!offline); + if (offline) + { + boost::lock_guard<boost::recursive_mutex> lock(m_daemon_rpc_mutex); + if(m_http_client.is_connected()) + m_http_client.disconnect(); + } +} +//---------------------------------------------------------------------------------------------------- bool wallet2::generate_chacha_key_from_secret_keys(crypto::chacha_key &key) const { hw::device &hwdev = m_account.get_device(); @@ -5273,7 +5390,7 @@ void wallet2::trim_hashchain() cryptonote::COMMAND_RPC_GET_BLOCK_HEADER_BY_HEIGHT::response res = AUTO_VAL_INIT(res); m_daemon_rpc_mutex.lock(); req.height = m_blockchain.size() - 1; - bool r = net_utils::invoke_http_json_rpc("/json_rpc", "getblockheaderbyheight", req, res, m_http_client, rpc_timeout); + bool r = invoke_http_json_rpc("/json_rpc", "getblockheaderbyheight", req, res, rpc_timeout); m_daemon_rpc_mutex.unlock(); if (r && res.status == CORE_RPC_STATUS_OK) { @@ -5445,13 +5562,19 @@ uint64_t wallet2::balance(uint32_t index_major) const return amount; } //---------------------------------------------------------------------------------------------------- -uint64_t wallet2::unlocked_balance(uint32_t index_major) const +uint64_t wallet2::unlocked_balance(uint32_t index_major, uint64_t *blocks_to_unlock) const { uint64_t amount = 0; + if (blocks_to_unlock) + *blocks_to_unlock = 0; if(m_light_wallet) return m_light_wallet_balance; for (const auto& i : unlocked_balance_per_subaddress(index_major)) - amount += i.second; + { + amount += i.second.first; + if (blocks_to_unlock && i.second.second > *blocks_to_unlock) + *blocks_to_unlock = i.second.second; + } return amount; } //---------------------------------------------------------------------------------------------------- @@ -5484,18 +5607,36 @@ std::map<uint32_t, uint64_t> wallet2::balance_per_subaddress(uint32_t index_majo return amount_per_subaddr; } //---------------------------------------------------------------------------------------------------- -std::map<uint32_t, uint64_t> wallet2::unlocked_balance_per_subaddress(uint32_t index_major) const +std::map<uint32_t, std::pair<uint64_t, uint64_t>> wallet2::unlocked_balance_per_subaddress(uint32_t index_major) const { - std::map<uint32_t, uint64_t> amount_per_subaddr; + std::map<uint32_t, std::pair<uint64_t, uint64_t>> amount_per_subaddr; + const uint64_t blockchain_height = get_blockchain_current_height(); for(const transfer_details& td: m_transfers) { - if(td.m_subaddr_index.major == index_major && !td.m_spent && !td.m_frozen && is_transfer_unlocked(td)) + if(td.m_subaddr_index.major == index_major && !td.m_spent && !td.m_frozen) { + uint64_t amount = 0, blocks_to_unlock = 0; + if (is_transfer_unlocked(td)) + { + amount = td.amount(); + blocks_to_unlock = 0; + } + else + { + uint64_t unlock_height = td.m_block_height + std::max<uint64_t>(CRYPTONOTE_DEFAULT_TX_SPENDABLE_AGE, CRYPTONOTE_LOCKED_TX_ALLOWED_DELTA_BLOCKS); + if (td.m_tx.unlock_time < CRYPTONOTE_MAX_BLOCK_NUMBER && td.m_tx.unlock_time > unlock_height) + unlock_height = td.m_tx.unlock_time; + blocks_to_unlock = unlock_height > blockchain_height ? unlock_height - blockchain_height : 0; + amount = 0; + } auto found = amount_per_subaddr.find(td.m_subaddr_index.minor); if (found == amount_per_subaddr.end()) - amount_per_subaddr[td.m_subaddr_index.minor] = td.amount(); + amount_per_subaddr[td.m_subaddr_index.minor] = std::make_pair(amount, blocks_to_unlock); else - found->second += td.amount(); + { + found->second.first += amount; + found->second.second = std::max(found->second.second, blocks_to_unlock); + } } } return amount_per_subaddr; @@ -5509,11 +5650,18 @@ uint64_t wallet2::balance_all() const return r; } //---------------------------------------------------------------------------------------------------- -uint64_t wallet2::unlocked_balance_all() const +uint64_t wallet2::unlocked_balance_all(uint64_t *blocks_to_unlock) const { uint64_t r = 0; + if (blocks_to_unlock) + *blocks_to_unlock = 0; for (uint32_t index_major = 0; index_major < get_num_subaddress_accounts(); ++index_major) - r += unlocked_balance(index_major); + { + uint64_t local_blocks_to_unlock; + r += unlocked_balance(index_major, blocks_to_unlock ? &local_blocks_to_unlock : NULL); + if (blocks_to_unlock) + *blocks_to_unlock = std::max(*blocks_to_unlock, local_blocks_to_unlock); + } return r; } //---------------------------------------------------------------------------------------------------- @@ -5598,7 +5746,7 @@ void wallet2::rescan_spent() for (size_t n = start_offset; n < start_offset + n_outputs; ++n) req.key_images.push_back(string_tools::pod_to_hex(m_transfers[n].m_key_image)); m_daemon_rpc_mutex.lock(); - bool r = epee::net_utils::invoke_http_json("/is_key_image_spent", req, daemon_resp, m_http_client, rpc_timeout); + bool r = invoke_http_json("/is_key_image_spent", req, daemon_resp, rpc_timeout); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "is_key_image_spent"); THROW_WALLET_EXCEPTION_IF(daemon_resp.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "is_key_image_spent"); @@ -5723,7 +5871,7 @@ namespace { CHECK_AND_ASSERT_MES(!vec.empty(), T(), "Vector must be non-empty"); - size_t idx = crypto::rand<size_t>() % vec.size(); + size_t idx = crypto::rand_idx(vec.size()); return pop_index (vec, idx); } @@ -5826,7 +5974,7 @@ size_t wallet2::pop_best_value_from(const transfer_container &transfers, std::ve } else { - idx = crypto::rand<size_t>() % candidates.size(); + idx = crypto::rand_idx(candidates.size()); } return pop_index (unused_indices, candidates[idx]); } @@ -5926,7 +6074,7 @@ void wallet2::commit_tx(pending_tx& ptx) oreq.view_key = string_tools::pod_to_hex(get_account().get_keys().m_view_secret_key); oreq.tx = epee::string_tools::buff_to_hex_nodelimer(tx_to_blob(ptx.tx)); m_daemon_rpc_mutex.lock(); - bool r = epee::net_utils::invoke_http_json("/submit_raw_tx", oreq, ores, m_http_client, rpc_timeout, "POST"); + bool r = invoke_http_json("/submit_raw_tx", oreq, ores, rpc_timeout, "POST"); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "submit_raw_tx"); // MyMonero and OpenMonero use different status strings @@ -5938,9 +6086,10 @@ void wallet2::commit_tx(pending_tx& ptx) COMMAND_RPC_SEND_RAW_TX::request req; req.tx_as_hex = epee::string_tools::buff_to_hex_nodelimer(tx_to_blob(ptx.tx)); req.do_not_relay = false; + req.do_sanity_checks = true; COMMAND_RPC_SEND_RAW_TX::response daemon_send_resp; m_daemon_rpc_mutex.lock(); - bool r = epee::net_utils::invoke_http_json("/sendrawtransaction", req, daemon_send_resp, m_http_client, rpc_timeout); + bool r = invoke_http_json("/sendrawtransaction", req, daemon_send_resp, rpc_timeout); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "sendrawtransaction"); THROW_WALLET_EXCEPTION_IF(daemon_send_resp.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "sendrawtransaction"); @@ -6893,7 +7042,7 @@ uint32_t wallet2::adjust_priority(uint32_t priority) m_daemon_rpc_mutex.lock(); getbh_req.start_height = m_blockchain.size() - N; getbh_req.end_height = m_blockchain.size() - 1; - bool r = net_utils::invoke_http_json_rpc("/json_rpc", "getblockheadersrange", getbh_req, getbh_res, m_http_client, rpc_timeout); + bool r = invoke_http_json_rpc("/json_rpc", "getblockheadersrange", getbh_req, getbh_res, rpc_timeout); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "getblockheadersrange"); THROW_WALLET_EXCEPTION_IF(getbh_res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "getblockheadersrange"); @@ -7044,6 +7193,43 @@ bool wallet2::set_ring(const crypto::key_image &key_image, const std::vector<uin catch (const std::exception &e) { return false; } } +bool wallet2::unset_ring(const std::vector<crypto::key_image> &key_images) +{ + if (!m_ringdb) + return false; + + try { return m_ringdb->remove_rings(get_ringdb_key(), key_images); } + catch (const std::exception &e) { return false; } +} + +bool wallet2::unset_ring(const crypto::hash &txid) +{ + if (!m_ringdb) + return false; + + COMMAND_RPC_GET_TRANSACTIONS::request req; + COMMAND_RPC_GET_TRANSACTIONS::response res; + req.txs_hashes.push_back(epee::string_tools::pod_to_hex(txid)); + req.decode_as_json = false; + req.prune = true; + m_daemon_rpc_mutex.lock(); + bool ok = invoke_http_json("/gettransactions", req, res, rpc_timeout); + m_daemon_rpc_mutex.unlock(); + THROW_WALLET_EXCEPTION_IF(!ok, error::wallet_internal_error, "Failed to get transaction from daemon"); + if (res.txs.empty()) + return false; + THROW_WALLET_EXCEPTION_IF(res.txs.size(), error::wallet_internal_error, "Failed to get transaction from daemon"); + + cryptonote::transaction tx; + crypto::hash tx_hash; + if (!get_pruned_tx(res.txs.front(), tx, tx_hash)) + return false; + THROW_WALLET_EXCEPTION_IF(tx_hash != txid, error::wallet_internal_error, "Failed to get the right transaction from daemon"); + + try { return m_ringdb->remove_rings(get_ringdb_key(), tx); } + catch (const std::exception &e) { return false; } +} + bool wallet2::find_and_save_rings(bool force) { if (!force && m_ring_history_saved) @@ -7081,8 +7267,8 @@ bool wallet2::find_and_save_rings(bool force) req.txs_hashes.push_back(epee::string_tools::pod_to_hex(txs_hashes[s])); bool r; { - const boost::lock_guard<boost::mutex> lock{m_daemon_rpc_mutex}; - r = epee::net_utils::invoke_http_json("/gettransactions", req, res, m_http_client, rpc_timeout); + const boost::lock_guard<boost::recursive_mutex> lock{m_daemon_rpc_mutex}; + r = invoke_http_json("/gettransactions", req, res, rpc_timeout); } THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "gettransactions"); THROW_WALLET_EXCEPTION_IF(res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "gettransactions"); @@ -7223,7 +7409,7 @@ void wallet2::light_wallet_get_outs(std::vector<std::vector<tools::wallet2::get_ oreq.count = light_wallet_requested_outputs_count; m_daemon_rpc_mutex.lock(); - bool r = epee::net_utils::invoke_http_json("/get_random_outs", oreq, ores, m_http_client, rpc_timeout, "POST"); + bool r = invoke_http_json("/get_random_outs", oreq, ores, rpc_timeout, "POST"); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "get_random_outs"); THROW_WALLET_EXCEPTION_IF(ores.amount_outs.empty() , error::wallet_internal_error, "No outputs received from light wallet node. Error: " + ores.Error); @@ -7363,7 +7549,7 @@ void wallet2::get_outs(std::vector<std::vector<tools::wallet2::get_outs_entry>> req_t.unlocked = true; req_t.recent_cutoff = time(NULL) - RECENT_OUTPUT_ZONE; m_daemon_rpc_mutex.lock(); - bool r = net_utils::invoke_http_json_rpc("/json_rpc", "get_output_histogram", req_t, resp_t, m_http_client, rpc_timeout); + bool r = invoke_http_json_rpc("/json_rpc", "get_output_histogram", req_t, resp_t, rpc_timeout); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "transfer_selected"); THROW_WALLET_EXCEPTION_IF(resp_t.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "get_output_histogram"); @@ -7386,7 +7572,7 @@ void wallet2::get_outs(std::vector<std::vector<tools::wallet2::get_outs_entry>> req_t.cumulative = true; req_t.binary = true; m_daemon_rpc_mutex.lock(); - bool r = net_utils::invoke_http_json_rpc("/json_rpc", "get_output_distribution", req_t, resp_t, m_http_client, rpc_timeout * 1000); + bool r = invoke_http_json_rpc("/json_rpc", "get_output_distribution", req_t, resp_t, rpc_timeout * 1000); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "transfer_selected"); THROW_WALLET_EXCEPTION_IF(resp_t.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "get_output_distribution"); @@ -7425,61 +7611,9 @@ void wallet2::get_outs(std::vector<std::vector<tools::wallet2::get_outs_entry>> COMMAND_RPC_GET_OUTPUTS_BIN::request req = AUTO_VAL_INIT(req); COMMAND_RPC_GET_OUTPUTS_BIN::response daemon_resp = AUTO_VAL_INIT(daemon_resp); - struct gamma_engine - { - typedef uint64_t result_type; - static constexpr result_type min() { return 0; } - static constexpr result_type max() { return std::numeric_limits<result_type>::max(); } - result_type operator()() { return crypto::rand<result_type>(); } - } engine; - static const double shape = 19.28/*16.94*/; - //static const double shape = m_testnet ? 17.02 : 17.28; - static const double scale = 1/1.61; - std::gamma_distribution<double> gamma(shape, scale); - THROW_WALLET_EXCEPTION_IF(rct_offsets.size() <= CRYPTONOTE_DEFAULT_TX_SPENDABLE_AGE, error::wallet_internal_error, "Bad offset calculation"); - uint64_t last_usable_block = rct_offsets.size() - 1; - auto pick_gamma = [&]() - { - double x = gamma(engine); - x = exp(x); - uint64_t block_offset = x / DIFFICULTY_TARGET_V2; // this assumes constant target over the whole rct range - if (block_offset > last_usable_block - CRYPTONOTE_DEFAULT_TX_SPENDABLE_AGE) - return std::numeric_limits<uint64_t>::max(); // bad pick - block_offset = last_usable_block - block_offset; - THROW_WALLET_EXCEPTION_IF(block_offset > last_usable_block, error::wallet_internal_error, "Bad offset calculation"); - THROW_WALLET_EXCEPTION_IF(block_offset > 0 && rct_offsets[block_offset] < rct_offsets[block_offset - 1], - error::get_output_distribution, "Decreasing offsets in rct distribution: " + - std::to_string(block_offset - 1) + ": " + std::to_string(rct_offsets[block_offset - 1]) + ", " + - std::to_string(block_offset) + ": " + std::to_string(rct_offsets[block_offset])); - uint64_t first_block_offset = block_offset, last_block_offset = block_offset; - for (size_t half_window = 0; half_window <= GAMMA_PICK_HALF_WINDOW; ++half_window) - { - // end when we have a non empty block - uint64_t cum0 = first_block_offset > 0 ? rct_offsets[first_block_offset] - rct_offsets[first_block_offset - 1] : rct_offsets[0]; - if (cum0 > 1) - break; - uint64_t cum1 = last_block_offset > 0 ? rct_offsets[last_block_offset] - rct_offsets[last_block_offset - 1] : rct_offsets[0]; - if (cum1 > 1) - break; - if (first_block_offset == 0 && last_block_offset >= last_usable_block) - break; - // expand up to bounds - if (first_block_offset > 0) - --first_block_offset; - else - return std::numeric_limits<uint64_t>::max(); // bad pick - if (last_block_offset < last_usable_block - CRYPTONOTE_DEFAULT_TX_SPENDABLE_AGE) - ++last_block_offset; - else - return std::numeric_limits<uint64_t>::max(); // bad pick - } - const uint64_t first_rct = first_block_offset == 0 ? 0 : rct_offsets[first_block_offset - 1]; - const uint64_t n_rct = rct_offsets[last_block_offset] - first_rct; - if (n_rct == 0) - return rct_offsets[block_offset] ? rct_offsets[block_offset] - 1 : 0; - MDEBUG("Picking 1/" << n_rct << " in " << (last_block_offset - first_block_offset + 1) << " blocks centered around " << block_offset + rct_start_height); - return first_rct + crypto::rand<uint64_t>() % n_rct; - }; + std::unique_ptr<gamma_picker> gamma; + if (has_rct_distribution) + gamma.reset(new gamma_picker(rct_offsets)); size_t num_selected_transfers = 0; for(size_t idx: selected_transfers) @@ -7677,20 +7811,21 @@ void wallet2::get_outs(std::vector<std::vector<tools::wallet2::get_outs_entry>> const char *type = ""; if (amount == 0 && has_rct_distribution) { + THROW_WALLET_EXCEPTION_IF(!gamma, error::wallet_internal_error, "No gamma picker"); // gamma distribution if (num_found -1 < recent_outputs_count + pre_fork_outputs_count) { - do i = pick_gamma(); while (i >= segregation_limit[amount].first); + do i = gamma->pick(); while (i >= segregation_limit[amount].first); type = "pre-fork gamma"; } else if (num_found -1 < recent_outputs_count + pre_fork_outputs_count + post_fork_outputs_count) { - do i = pick_gamma(); while (i < segregation_limit[amount].first || i >= num_outs); + do i = gamma->pick(); while (i < segregation_limit[amount].first || i >= num_outs); type = "post-fork gamma"; } else { - do i = pick_gamma(); while (i >= num_outs); + do i = gamma->pick(); while (i >= num_outs); type = "gamma"; } } @@ -7785,7 +7920,7 @@ void wallet2::get_outs(std::vector<std::vector<tools::wallet2::get_outs_entry>> // get the keys for those req.get_txid = false; m_daemon_rpc_mutex.lock(); - bool r = epee::net_utils::invoke_http_bin("/get_outs.bin", req, daemon_resp, m_http_client, rpc_timeout); + bool r = invoke_http_bin("/get_outs.bin", req, daemon_resp, rpc_timeout); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "get_outs.bin"); THROW_WALLET_EXCEPTION_IF(daemon_resp.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "get_outs.bin"); @@ -8497,7 +8632,7 @@ bool wallet2::light_wallet_login(bool &new_address) // Always create account if it doesn't exist. request.create_account = true; m_daemon_rpc_mutex.lock(); - bool connected = epee::net_utils::invoke_http_json("/login", request, response, m_http_client, rpc_timeout, "POST"); + bool connected = invoke_http_json("/login", request, response, rpc_timeout, "POST"); m_daemon_rpc_mutex.unlock(); // MyMonero doesn't send any status message. OpenMonero does. m_light_wallet_connected = connected && (response.status.empty() || response.status == "success"); @@ -8522,7 +8657,7 @@ bool wallet2::light_wallet_import_wallet_request(tools::COMMAND_RPC_IMPORT_WALLE oreq.address = get_account().get_public_address_str(m_nettype); oreq.view_key = string_tools::pod_to_hex(get_account().get_keys().m_view_secret_key); m_daemon_rpc_mutex.lock(); - bool r = epee::net_utils::invoke_http_json("/import_wallet_request", oreq, response, m_http_client, rpc_timeout, "POST"); + bool r = invoke_http_json("/import_wallet_request", oreq, response, rpc_timeout, "POST"); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "import_wallet_request"); @@ -8548,7 +8683,7 @@ void wallet2::light_wallet_get_unspent_outs() m_daemon_rpc_mutex.lock(); - bool r = epee::net_utils::invoke_http_json("/get_unspent_outs", oreq, ores, m_http_client, rpc_timeout, "POST"); + bool r = invoke_http_json("/get_unspent_outs", oreq, ores, rpc_timeout, "POST"); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "get_unspent_outs"); THROW_WALLET_EXCEPTION_IF(ores.status == "error", error::wallet_internal_error, ores.reason); @@ -8693,7 +8828,7 @@ bool wallet2::light_wallet_get_address_info(tools::COMMAND_RPC_GET_ADDRESS_INFO: request.address = get_account().get_public_address_str(m_nettype); request.view_key = string_tools::pod_to_hex(get_account().get_keys().m_view_secret_key); m_daemon_rpc_mutex.lock(); - bool r = epee::net_utils::invoke_http_json("/get_address_info", request, response, m_http_client, rpc_timeout, "POST"); + bool r = invoke_http_json("/get_address_info", request, response, rpc_timeout, "POST"); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "get_address_info"); // TODO: Validate result @@ -8710,7 +8845,7 @@ void wallet2::light_wallet_get_address_txs() ireq.address = get_account().get_public_address_str(m_nettype); ireq.view_key = string_tools::pod_to_hex(get_account().get_keys().m_view_secret_key); m_daemon_rpc_mutex.lock(); - bool r = epee::net_utils::invoke_http_json("/get_address_txs", ireq, ires, m_http_client, rpc_timeout, "POST"); + bool r = invoke_http_json("/get_address_txs", ireq, ires, rpc_timeout, "POST"); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "get_address_txs"); //OpenMonero sends status=success, Mymonero doesn't. @@ -9059,7 +9194,7 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_2(std::vector<cryp // throw if attempting a transaction with no money THROW_WALLET_EXCEPTION_IF(needed_money == 0, error::zero_destination); - std::map<uint32_t, uint64_t> unlocked_balance_per_subaddr = unlocked_balance_per_subaddress(subaddr_account); + std::map<uint32_t, std::pair<uint64_t, uint64_t>> unlocked_balance_per_subaddr = unlocked_balance_per_subaddress(subaddr_account); std::map<uint32_t, uint64_t> balance_per_subaddr = balance_per_subaddress(subaddr_account); if (subaddr_indices.empty()) // "index=<N1>[,<N2>,...]" wasn't specified -> use all the indices with non-zero unlocked balance @@ -9077,7 +9212,7 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_2(std::vector<cryp for (uint32_t index_minor : subaddr_indices) { balance_subtotal += balance_per_subaddr[index_minor]; - unlocked_balance_subtotal += unlocked_balance_per_subaddr[index_minor]; + unlocked_balance_subtotal += unlocked_balance_per_subaddr[index_minor].first; } THROW_WALLET_EXCEPTION_IF(needed_money + min_fee > balance_subtotal, error::not_enough_money, balance_subtotal, needed_money, 0); @@ -9143,7 +9278,7 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_2(std::vector<cryp { auto sort_predicate = [&unlocked_balance_per_subaddr] (const std::pair<uint32_t, std::vector<size_t>>& x, const std::pair<uint32_t, std::vector<size_t>>& y) { - return unlocked_balance_per_subaddr[x.first] > unlocked_balance_per_subaddr[y.first]; + return unlocked_balance_per_subaddr[x.first].first > unlocked_balance_per_subaddr[y.first].first; }; std::sort(unused_transfers_indices_per_subaddr.begin(), unused_transfers_indices_per_subaddr.end(), sort_predicate); std::sort(unused_dust_indices_per_subaddr.begin(), unused_dust_indices_per_subaddr.end(), sort_predicate); @@ -9249,9 +9384,16 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_2(std::vector<cryp idx = pop_best_value(indices, tx.selected_transfers, true); // we might not want to add it if it's a large output and we don't have many left - if (m_transfers[idx].amount() >= m_min_output_value) { - if (get_count_above(m_transfers, *unused_transfers_indices, m_min_output_value) < m_min_output_count) { - LOG_PRINT_L2("Second output was not strictly needed, and we're running out of outputs above " << print_money(m_min_output_value) << ", not adding"); + uint64_t min_output_value = m_min_output_value; + uint32_t min_output_count = m_min_output_count; + if (min_output_value == 0 && min_output_count == 0) + { + min_output_value = DEFAULT_MIN_OUTPUT_VALUE; + min_output_count = DEFAULT_MIN_OUTPUT_COUNT; + } + if (m_transfers[idx].amount() >= min_output_value) { + if (get_count_above(m_transfers, *unused_transfers_indices, min_output_value) < min_output_count) { + LOG_PRINT_L2("Second output was not strictly needed, and we're running out of outputs above " << print_money(min_output_value) << ", not adding"); break; } } @@ -9410,7 +9552,7 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_2(std::vector<cryp tx.ptx = test_ptx; tx.weight = get_transaction_weight(test_tx, txBlob.size()); tx.outs = outs; - tx.needed_fee = needed_fee; + tx.needed_fee = test_ptx.fee; accumulated_fee += test_ptx.fee; accumulated_change += test_ptx.change_dts.amount; adding_fee = false; @@ -9534,14 +9676,16 @@ bool wallet2::sanity_check(const std::vector<wallet2::pending_tx> &ptx_vector, s change -= r.second.first; MDEBUG("Adding " << cryptonote::print_money(change) << " expected change"); + // for all txes that have actual change, check change is coming back to the sending wallet for (const pending_tx &ptx: ptx_vector) - THROW_WALLET_EXCEPTION_IF(ptx.change_dts.addr != ptx_vector[0].change_dts.addr, error::wallet_internal_error, - "Change goes to several different addresses"); - const auto it = m_subaddresses.find(ptx_vector[0].change_dts.addr.m_spend_public_key); - THROW_WALLET_EXCEPTION_IF(change > 0 && it == m_subaddresses.end(), error::wallet_internal_error, "Change address is not ours"); - - required[ptx_vector[0].change_dts.addr].first += change; - required[ptx_vector[0].change_dts.addr].second = ptx_vector[0].change_dts.is_subaddress; + { + if (ptx.change_dts.amount == 0) + continue; + THROW_WALLET_EXCEPTION_IF(m_subaddresses.find(ptx.change_dts.addr.m_spend_public_key) == m_subaddresses.end(), + error::wallet_internal_error, "Change address is not ours"); + required[ptx.change_dts.addr].first += ptx.change_dts.amount; + required[ptx.change_dts.addr].second = ptx.change_dts.is_subaddress; + } for (const auto &r: required) { @@ -9607,7 +9751,7 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_all(uint64_t below if (unused_transfer_dust_indices_per_subaddr.count(0) == 1 && unused_transfer_dust_indices_per_subaddr.size() > 1) unused_transfer_dust_indices_per_subaddr.erase(0); auto i = unused_transfer_dust_indices_per_subaddr.begin(); - std::advance(i, crypto::rand<size_t>() % unused_transfer_dust_indices_per_subaddr.size()); + std::advance(i, crypto::rand_idx(unused_transfer_dust_indices_per_subaddr.size())); unused_transfers_indices = i->second.first; unused_dust_indices = i->second.second; LOG_PRINT_L2("Spending from subaddress index " << i->first); @@ -9806,7 +9950,7 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_from(const crypton tx.ptx = test_ptx; tx.weight = get_transaction_weight(test_tx, txBlob.size()); tx.outs = outs; - tx.needed_fee = needed_fee; + tx.needed_fee = test_ptx.fee; accumulated_fee += test_ptx.fee; accumulated_change += test_ptx.change_dts.amount; if (!unused_transfers_indices.empty() || !unused_dust_indices.empty()) @@ -10012,7 +10156,7 @@ std::vector<size_t> wallet2::select_available_outputs_from_histogram(uint64_t co req_t.max_count = 0; req_t.unlocked = unlocked; req_t.recent_cutoff = 0; - bool r = net_utils::invoke_http_json_rpc("/json_rpc", "get_output_histogram", req_t, resp_t, m_http_client, rpc_timeout); + bool r = invoke_http_json_rpc("/json_rpc", "get_output_histogram", req_t, resp_t, rpc_timeout); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "select_available_outputs_from_histogram"); THROW_WALLET_EXCEPTION_IF(resp_t.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "get_output_histogram"); @@ -10050,7 +10194,7 @@ uint64_t wallet2::get_num_rct_outputs() req_t.max_count = 0; req_t.unlocked = true; req_t.recent_cutoff = 0; - bool r = net_utils::invoke_http_json_rpc("/json_rpc", "get_output_histogram", req_t, resp_t, m_http_client, rpc_timeout); + bool r = invoke_http_json_rpc("/json_rpc", "get_output_histogram", req_t, resp_t, rpc_timeout); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "get_num_rct_outputs"); THROW_WALLET_EXCEPTION_IF(resp_t.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "get_output_histogram"); @@ -10175,7 +10319,7 @@ bool wallet2::get_tx_key(const crypto::hash &txid, crypto::secret_key &tx_key, s req.decode_as_json = false; req.prune = true; m_daemon_rpc_mutex.lock(); - bool ok = epee::net_utils::invoke_http_json("/gettransactions", req, res, m_http_client); + bool ok = invoke_http_json("/gettransactions", req, res, rpc_timeout); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!ok || (res.txs.size() != 1 && res.txs_as_hex.size() != 1), error::wallet_internal_error, "Failed to get transaction from daemon"); @@ -10218,8 +10362,8 @@ void wallet2::set_tx_key(const crypto::hash &txid, const crypto::secret_key &tx_ COMMAND_RPC_GET_TRANSACTIONS::response res = AUTO_VAL_INIT(res); bool r; { - const boost::lock_guard<boost::mutex> lock{m_daemon_rpc_mutex}; - r = epee::net_utils::invoke_http_json("/gettransactions", req, res, m_http_client, rpc_timeout); + const boost::lock_guard<boost::recursive_mutex> lock{m_daemon_rpc_mutex}; + r = invoke_http_json("/gettransactions", req, res, rpc_timeout); } THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "gettransactions"); THROW_WALLET_EXCEPTION_IF(res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "gettransactions"); @@ -10268,8 +10412,8 @@ std::string wallet2::get_spend_proof(const crypto::hash &txid, const std::string COMMAND_RPC_GET_TRANSACTIONS::response res = AUTO_VAL_INIT(res); bool r; { - const boost::lock_guard<boost::mutex> lock{m_daemon_rpc_mutex}; - r = epee::net_utils::invoke_http_json("/gettransactions", req, res, m_http_client, rpc_timeout); + const boost::lock_guard<boost::recursive_mutex> lock{m_daemon_rpc_mutex}; + r = invoke_http_json("/gettransactions", req, res, rpc_timeout); } THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "gettransactions"); THROW_WALLET_EXCEPTION_IF(res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "gettransactions"); @@ -10330,8 +10474,8 @@ std::string wallet2::get_spend_proof(const crypto::hash &txid, const std::string COMMAND_RPC_GET_OUTPUTS_BIN::response res = AUTO_VAL_INIT(res); bool r; { - const boost::lock_guard<boost::mutex> lock{m_daemon_rpc_mutex}; - r = epee::net_utils::invoke_http_bin("/get_outs.bin", req, res, m_http_client, rpc_timeout); + const boost::lock_guard<boost::recursive_mutex> lock{m_daemon_rpc_mutex}; + r = invoke_http_bin("/get_outs.bin", req, res, rpc_timeout); } THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "get_outs.bin"); THROW_WALLET_EXCEPTION_IF(res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "get_outs.bin"); @@ -10386,8 +10530,8 @@ bool wallet2::check_spend_proof(const crypto::hash &txid, const std::string &mes COMMAND_RPC_GET_TRANSACTIONS::response res = AUTO_VAL_INIT(res); bool r; { - const boost::lock_guard<boost::mutex> lock{m_daemon_rpc_mutex}; - r = epee::net_utils::invoke_http_json("/gettransactions", req, res, m_http_client, rpc_timeout); + const boost::lock_guard<boost::recursive_mutex> lock{m_daemon_rpc_mutex}; + r = invoke_http_json("/gettransactions", req, res, rpc_timeout); } THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "gettransactions"); THROW_WALLET_EXCEPTION_IF(res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "gettransactions"); @@ -10459,8 +10603,8 @@ bool wallet2::check_spend_proof(const crypto::hash &txid, const std::string &mes COMMAND_RPC_GET_OUTPUTS_BIN::response res = AUTO_VAL_INIT(res); bool r; { - const boost::lock_guard<boost::mutex> lock{m_daemon_rpc_mutex}; - r = epee::net_utils::invoke_http_bin("/get_outs.bin", req, res, m_http_client, rpc_timeout); + const boost::lock_guard<boost::recursive_mutex> lock{m_daemon_rpc_mutex}; + r = invoke_http_bin("/get_outs.bin", req, res, rpc_timeout); } THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "get_outs.bin"); THROW_WALLET_EXCEPTION_IF(res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "get_outs.bin"); @@ -10558,7 +10702,7 @@ void wallet2::check_tx_key_helper(const crypto::hash &txid, const crypto::key_de req.decode_as_json = false; req.prune = true; m_daemon_rpc_mutex.lock(); - bool ok = epee::net_utils::invoke_http_json("/gettransactions", req, res, m_http_client); + bool ok = invoke_http_json("/gettransactions", req, res, rpc_timeout); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!ok || (res.txs.size() != 1 && res.txs_as_hex.size() != 1), error::wallet_internal_error, "Failed to get transaction from daemon"); @@ -10607,7 +10751,7 @@ std::string wallet2::get_tx_proof(const crypto::hash &txid, const cryptonote::ac req.decode_as_json = false; req.prune = true; m_daemon_rpc_mutex.lock(); - bool ok = net_utils::invoke_http_json("/gettransactions", req, res, m_http_client); + bool ok = invoke_http_json("/gettransactions", req, res, rpc_timeout); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!ok || (res.txs.size() != 1 && res.txs_as_hex.size() != 1), error::wallet_internal_error, "Failed to get transaction from daemon"); @@ -10762,7 +10906,7 @@ bool wallet2::check_tx_proof(const crypto::hash &txid, const cryptonote::account req.decode_as_json = false; req.prune = true; m_daemon_rpc_mutex.lock(); - bool ok = net_utils::invoke_http_json("/gettransactions", req, res, m_http_client); + bool ok = invoke_http_json("/gettransactions", req, res, rpc_timeout); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!ok || (res.txs.size() != 1 && res.txs_as_hex.size() != 1), error::wallet_internal_error, "Failed to get transaction from daemon"); @@ -11054,7 +11198,7 @@ bool wallet2::check_reserve_proof(const cryptonote::account_public_address &addr gettx_req.decode_as_json = false; gettx_req.prune = true; m_daemon_rpc_mutex.lock(); - bool ok = net_utils::invoke_http_json("/gettransactions", gettx_req, gettx_res, m_http_client); + bool ok = invoke_http_json("/gettransactions", gettx_req, gettx_res, rpc_timeout); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!ok || gettx_res.txs.size() != proofs.size(), error::wallet_internal_error, "Failed to get transaction from daemon"); @@ -11065,7 +11209,7 @@ bool wallet2::check_reserve_proof(const cryptonote::account_public_address &addr for (size_t i = 0; i < proofs.size(); ++i) kispent_req.key_images.push_back(epee::string_tools::pod_to_hex(proofs[i].key_image)); m_daemon_rpc_mutex.lock(); - ok = epee::net_utils::invoke_http_json("/is_key_image_spent", kispent_req, kispent_res, m_http_client, rpc_timeout); + ok = invoke_http_json("/is_key_image_spent", kispent_req, kispent_res, rpc_timeout); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!ok || kispent_res.spent_status.size() != proofs.size(), error::wallet_internal_error, "Failed to get key image spent status from daemon"); @@ -11617,7 +11761,7 @@ uint64_t wallet2::import_key_images(const std::vector<std::pair<crypto::key_imag { PERF_TIMER(import_key_images_RPC); m_daemon_rpc_mutex.lock(); - bool r = epee::net_utils::invoke_http_json("/is_key_image_spent", req, daemon_resp, m_http_client, rpc_timeout); + bool r = invoke_http_json("/is_key_image_spent", req, daemon_resp, rpc_timeout); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "is_key_image_spent"); THROW_WALLET_EXCEPTION_IF(daemon_resp.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "is_key_image_spent"); @@ -11703,7 +11847,7 @@ uint64_t wallet2::import_key_images(const std::vector<std::pair<crypto::key_imag PERF_TIMER_START(import_key_images_E); m_daemon_rpc_mutex.lock(); - bool r = epee::net_utils::invoke_http_json("/gettransactions", gettxs_req, gettxs_res, m_http_client, rpc_timeout); + bool r = invoke_http_json("/gettransactions", gettxs_req, gettxs_res, rpc_timeout); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "gettransactions"); THROW_WALLET_EXCEPTION_IF(gettxs_res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "gettransactions"); @@ -11931,14 +12075,15 @@ void wallet2::import_blockchain(const std::tuple<size_t, crypto::hash, std::vect m_last_block_reward = cryptonote::get_outs_money_amount(genesis.miner_tx); } //---------------------------------------------------------------------------------------------------- -std::pair<size_t, std::vector<tools::wallet2::transfer_details>> wallet2::export_outputs() const +std::pair<size_t, std::vector<tools::wallet2::transfer_details>> wallet2::export_outputs(bool all) const { PERF_TIMER(export_outputs); std::vector<tools::wallet2::transfer_details> outs; size_t offset = 0; - while (offset < m_transfers.size() && (m_transfers[offset].m_key_image_known && !m_transfers[offset].m_key_image_request)) - ++offset; + if (!all) + while (offset < m_transfers.size() && (m_transfers[offset].m_key_image_known && !m_transfers[offset].m_key_image_request)) + ++offset; outs.reserve(m_transfers.size() - offset); for (size_t n = offset; n < m_transfers.size(); ++n) @@ -11951,13 +12096,13 @@ std::pair<size_t, std::vector<tools::wallet2::transfer_details>> wallet2::export return std::make_pair(offset, outs); } //---------------------------------------------------------------------------------------------------- -std::string wallet2::export_outputs_to_str() const +std::string wallet2::export_outputs_to_str(bool all) const { PERF_TIMER(export_outputs_to_str); std::stringstream oss; boost::archive::portable_binary_oarchive ar(oss); - const auto& outputs = export_outputs(); + const auto& outputs = export_outputs(all); ar << outputs; std::string magic(OUTPUT_EXPORT_FILE_MAGIC, strlen(OUTPUT_EXPORT_FILE_MAGIC)); @@ -12638,7 +12783,7 @@ uint64_t wallet2::get_blockchain_height_by_date(uint16_t year, uint8_t month, ui height_mid, height_max }; - bool r = net_utils::invoke_http_bin("/getblocks_by_height.bin", req, res, m_http_client, rpc_timeout); + bool r = invoke_http_bin("/getblocks_by_height.bin", req, res, rpc_timeout); if (!r || res.status != CORE_RPC_STATUS_OK) { std::ostringstream oss; @@ -12708,7 +12853,7 @@ std::vector<std::pair<uint64_t, uint64_t>> wallet2::estimate_backlog(const std:: cryptonote::COMMAND_RPC_GET_TRANSACTION_POOL_BACKLOG::request req = AUTO_VAL_INIT(req); cryptonote::COMMAND_RPC_GET_TRANSACTION_POOL_BACKLOG::response res = AUTO_VAL_INIT(res); m_daemon_rpc_mutex.lock(); - bool r = net_utils::invoke_http_json_rpc("/json_rpc", "get_txpool_backlog", req, res, m_http_client, rpc_timeout); + bool r = invoke_http_json_rpc("/json_rpc", "get_txpool_backlog", req, res, rpc_timeout); m_daemon_rpc_mutex.unlock(); THROW_WALLET_EXCEPTION_IF(!r, error::no_connection_to_daemon, "Failed to connect to daemon"); THROW_WALLET_EXCEPTION_IF(res.status == CORE_RPC_STATUS_BUSY, error::daemon_busy, "get_txpool_backlog"); @@ -12778,8 +12923,7 @@ uint64_t wallet2::get_segregation_fork_height() const if (m_segregation_height > 0) return m_segregation_height; - static const bool use_dns = true; - if (use_dns) + if (m_use_dns && !m_offline) { // All four MoneroPulse domains have DNSSEC on and valid static const std::vector<std::string> dns_urls = { @@ -12859,6 +13003,12 @@ void wallet2::on_device_button_request(uint64_t code) m_callback->on_device_button_request(code); } //---------------------------------------------------------------------------------------------------- +void wallet2::on_device_button_pressed() +{ + if (nullptr != m_callback) + m_callback->on_device_button_pressed(); +} +//---------------------------------------------------------------------------------------------------- boost::optional<epee::wipeable_string> wallet2::on_device_pin_request() { if (nullptr != m_callback) @@ -12957,4 +13107,14 @@ void wallet2::finish_rescan_bc_keep_key_images(uint64_t transfer_height, const c m_transfers[it->second].m_key_image_known = true; } } +//---------------------------------------------------------------------------------------------------- +uint64_t wallet2::get_bytes_sent() const +{ + return m_http_client.get_bytes_sent(); +} +//---------------------------------------------------------------------------------------------------- +uint64_t wallet2::get_bytes_received() const +{ + return m_http_client.get_bytes_received(); +} } diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index a24127800..d101e87f5 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -39,6 +39,7 @@ #include <boost/serialization/deque.hpp> #include <boost/thread/lock_guard.hpp> #include <atomic> +#include <random> #include "include_base_utils.h" #include "cryptonote_basic/account.h" @@ -76,6 +77,30 @@ namespace tools class wallet2; class Notify; + class gamma_picker + { + public: + uint64_t pick(); + gamma_picker(const std::vector<uint64_t> &rct_offsets); + gamma_picker(const std::vector<uint64_t> &rct_offsets, double shape, double scale); + + private: + struct gamma_engine + { + typedef uint64_t result_type; + static constexpr result_type min() { return 0; } + static constexpr result_type max() { return std::numeric_limits<result_type>::max(); } + result_type operator()() { return crypto::rand<result_type>(); } + } engine; + +private: + std::gamma_distribution<double> gamma; + const std::vector<uint64_t> &rct_offsets; + const uint64_t *begin, *end; + uint64_t num_rct_outputs; + double average_output_time; + }; + class wallet_keys_unlocker { public: @@ -105,6 +130,7 @@ namespace tools virtual void on_lw_money_spent(uint64_t height, const crypto::hash &txid, uint64_t amount) {} // Device callbacks virtual void on_device_button_request(uint64_t code) {} + virtual void on_device_button_pressed() {} virtual boost::optional<epee::wipeable_string> on_device_pin_request() { return boost::none; } virtual boost::optional<epee::wipeable_string> on_device_passphrase_request(bool on_device) { return boost::none; } virtual void on_device_progress(const hw::device_progress& event) {}; @@ -118,6 +144,7 @@ namespace tools public: wallet_device_callback(wallet2 * wallet): wallet(wallet) {}; void on_button_request(uint64_t code=0) override; + void on_button_pressed() override; boost::optional<epee::wipeable_string> on_pin_request() override; boost::optional<epee::wipeable_string> on_passphrase_request(bool on_device) override; void on_progress(const hw::device_progress& event) override; @@ -194,6 +221,12 @@ namespace tools AskPasswordToDecrypt = 2, }; + enum BackgroundMiningSetupType { + BackgroundMiningMaybe = 0, + BackgroundMiningYes = 1, + BackgroundMiningNo = 2, + }; + static const char* tr(const char* str); static bool has_testnet_option(const boost::program_options::variables_map& vm); @@ -689,16 +722,10 @@ namespace tools boost::asio::ip::tcp::endpoint proxy = {}, uint64_t upper_transaction_weight_limit = 0, bool trusted_daemon = true, - epee::net_utils::ssl_support_t ssl_support = epee::net_utils::ssl_support_t::e_ssl_support_autodetect, - const std::pair<std::string, std::string> &private_key_and_certificate_path = {}, - const std::list<std::string> &allowed_certificates = {}, const std::vector<std::vector<uint8_t>> &allowed_fingerprints = {}, - bool allow_any_cert = false); + epee::net_utils::ssl_options_t ssl_options = epee::net_utils::ssl_support_t::e_ssl_support_autodetect); bool set_daemon(std::string daemon_address = "http://localhost:8080", boost::optional<epee::net_utils::http::login> daemon_login = boost::none, bool trusted_daemon = true, - epee::net_utils::ssl_support_t ssl_support = epee::net_utils::ssl_support_t::e_ssl_support_autodetect, - const std::pair<std::string, std::string> &private_key_and_certificate_path = {}, - const std::list<std::string> &allowed_certificates = {}, const std::vector<std::vector<uint8_t>> &allowed_fingerprints = {}, - bool allow_any_cert = false); + epee::net_utils::ssl_options_t ssl_options = epee::net_utils::ssl_support_t::e_ssl_support_autodetect); void stop() { m_run.store(false, std::memory_order_relaxed); m_message_store.stop(); } @@ -773,13 +800,13 @@ namespace tools // locked & unlocked balance of given or current subaddress account uint64_t balance(uint32_t subaddr_index_major) const; - uint64_t unlocked_balance(uint32_t subaddr_index_major) const; + uint64_t unlocked_balance(uint32_t subaddr_index_major, uint64_t *blocks_to_unlock = NULL) const; // locked & unlocked balance per subaddress of given or current subaddress account std::map<uint32_t, uint64_t> balance_per_subaddress(uint32_t subaddr_index_major) const; - std::map<uint32_t, uint64_t> unlocked_balance_per_subaddress(uint32_t subaddr_index_major) const; + std::map<uint32_t, std::pair<uint64_t, uint64_t>> unlocked_balance_per_subaddress(uint32_t subaddr_index_major) const; // all locked & unlocked balances of all subaddress accounts uint64_t balance_all() const; - uint64_t unlocked_balance_all() const; + uint64_t unlocked_balance_all(uint64_t *blocks_to_unlock = NULL) const; template<typename T> void transfer_selected(const std::vector<cryptonote::tx_destination_entry>& dsts, const std::vector<size_t>& selected_transfers, size_t fake_outputs_count, std::vector<std::vector<tools::wallet2::get_outs_entry>> &outs, @@ -1016,6 +1043,8 @@ namespace tools void confirm_non_default_ring_size(bool always) { m_confirm_non_default_ring_size = always; } bool track_uses() const { return m_track_uses; } void track_uses(bool value) { m_track_uses = value; } + BackgroundMiningSetupType setup_background_mining() const { return m_setup_background_mining; } + void setup_background_mining(BackgroundMiningSetupType value) { m_setup_background_mining = value; } const std::string & device_name() const { return m_device_name; } void device_name(const std::string & device_name) { m_device_name = device_name; } const std::string & device_derivation_path() const { return m_device_derivation_path; } @@ -1135,8 +1164,8 @@ namespace tools bool verify_with_public_key(const std::string &data, const crypto::public_key &public_key, const std::string &signature) const; // Import/Export wallet data - std::pair<size_t, std::vector<tools::wallet2::transfer_details>> export_outputs() const; - std::string export_outputs_to_str() const; + std::pair<size_t, std::vector<tools::wallet2::transfer_details>> export_outputs(bool all = false) const; + std::string export_outputs_to_str(bool all = false) const; size_t import_outputs(const std::pair<size_t, std::vector<tools::wallet2::transfer_details>> &outputs); size_t import_outputs_from_str(const std::string &outputs_st); payment_container export_payments() const; @@ -1228,19 +1257,22 @@ namespace tools template<class t_request, class t_response> inline bool invoke_http_json(const boost::string_ref uri, const t_request& req, t_response& res, std::chrono::milliseconds timeout = std::chrono::seconds(15), const boost::string_ref http_method = "GET") { - boost::lock_guard<boost::mutex> lock(m_daemon_rpc_mutex); + if (m_offline) return false; + boost::lock_guard<boost::recursive_mutex> lock(m_daemon_rpc_mutex); return epee::net_utils::invoke_http_json(uri, req, res, m_http_client, timeout, http_method); } template<class t_request, class t_response> inline bool invoke_http_bin(const boost::string_ref uri, const t_request& req, t_response& res, std::chrono::milliseconds timeout = std::chrono::seconds(15), const boost::string_ref http_method = "GET") { - boost::lock_guard<boost::mutex> lock(m_daemon_rpc_mutex); + if (m_offline) return false; + boost::lock_guard<boost::recursive_mutex> lock(m_daemon_rpc_mutex); return epee::net_utils::invoke_http_bin(uri, req, res, m_http_client, timeout, http_method); } template<class t_request, class t_response> inline bool invoke_http_json_rpc(const boost::string_ref uri, const std::string& method_name, const t_request& req, t_response& res, std::chrono::milliseconds timeout = std::chrono::seconds(15), const boost::string_ref http_method = "GET", const std::string& req_id = "0") { - boost::lock_guard<boost::mutex> lock(m_daemon_rpc_mutex); + if (m_offline) return false; + boost::lock_guard<boost::recursive_mutex> lock(m_daemon_rpc_mutex); return epee::net_utils::invoke_http_json_rpc(uri, method_name, req, res, m_http_client, timeout, http_method, req_id); } @@ -1249,6 +1281,8 @@ namespace tools bool get_ring(const crypto::key_image &key_image, std::vector<uint64_t> &outs); bool get_rings(const crypto::hash &txid, std::vector<std::pair<crypto::key_image, std::vector<uint64_t>>> &outs); bool set_ring(const crypto::key_image &key_image, const std::vector<uint64_t> &outs, bool relative); + bool unset_ring(const std::vector<crypto::key_image> &key_images); + bool unset_ring(const crypto::hash &txid); bool find_and_save_rings(bool force = true); bool blackball_output(const std::pair<uint64_t, uint64_t> &output); @@ -1264,6 +1298,9 @@ namespace tools bool frozen(const crypto::key_image &ki) const; bool frozen(const transfer_details &td) const; + uint64_t get_bytes_sent() const; + uint64_t get_bytes_received() const; + // MMS ------------------------------------------------------------------------------------------------- mms::message_store& get_message_store() { return m_message_store; }; const mms::message_store& get_message_store() const { return m_message_store; }; @@ -1281,6 +1318,8 @@ namespace tools void hash_m_transfer(const transfer_details & transfer, crypto::hash &hash) const; uint64_t hash_m_transfers(int64_t transfer_height, crypto::hash &hash) const; void finish_rescan_bc_keep_key_images(uint64_t transfer_height, const crypto::hash &hash); + void enable_dns(bool enable) { m_use_dns = enable; } + void set_offline(bool offline = true); private: /*! @@ -1371,6 +1410,7 @@ namespace tools wallet_device_callback * get_device_callback(); void on_device_button_request(uint64_t code); + void on_device_button_pressed(); boost::optional<epee::wipeable_string> on_device_pin_request(); boost::optional<epee::wipeable_string> on_device_passphrase_request(bool on_device); void on_device_progress(const hw::device_progress& event); @@ -1411,7 +1451,7 @@ namespace tools std::atomic<bool> m_run; - boost::mutex m_daemon_rpc_mutex; + boost::recursive_mutex m_daemon_rpc_mutex; bool m_trusted_daemon; i_wallet2_callback* m_callback; @@ -1454,6 +1494,7 @@ namespace tools uint64_t m_segregation_height; bool m_ignore_fractional_outputs; bool m_track_uses; + BackgroundMiningSetupType m_setup_background_mining; bool m_is_initialized; NodeRPCProxy m_node_rpc_proxy; std::unordered_set<crypto::hash> m_scanned_pool_txs[2]; @@ -1461,6 +1502,8 @@ namespace tools std::string m_device_name; std::string m_device_derivation_path; uint64_t m_device_last_key_image_sync; + bool m_use_dns; + bool m_offline; // Aux transaction data from device std::unordered_map<crypto::hash, std::string> m_tx_device; diff --git a/src/wallet/wallet_rpc_server.cpp b/src/wallet/wallet_rpc_server.cpp index 92265d954..22eaffa6f 100644 --- a/src/wallet/wallet_rpc_server.cpp +++ b/src/wallet/wallet_rpc_server.cpp @@ -31,6 +31,7 @@ #include <boost/asio/ip/address.hpp> #include <boost/filesystem/operations.hpp> #include <boost/algorithm/string.hpp> +#include <boost/preprocessor/stringize.hpp> #include <cstdint> #include "include_base_utils.h" using namespace epee; @@ -68,7 +69,7 @@ namespace const command_line::arg_descriptor<std::string> arg_rpc_ssl = {"rpc-ssl", tools::wallet2::tr("Enable SSL on wallet RPC connections: enabled|disabled|autodetect"), "autodetect"}; const command_line::arg_descriptor<std::string> arg_rpc_ssl_private_key = {"rpc-ssl-private-key", tools::wallet2::tr("Path to a PEM format private key"), ""}; const command_line::arg_descriptor<std::string> arg_rpc_ssl_certificate = {"rpc-ssl-certificate", tools::wallet2::tr("Path to a PEM format certificate"), ""}; - const command_line::arg_descriptor<std::vector<std::string>> arg_rpc_ssl_allowed_certificates = {"rpc-ssl-allowed-certificates", tools::wallet2::tr("List of paths to PEM format certificates of allowed RPC servers (all allowed if empty)")}; + const command_line::arg_descriptor<std::string> arg_rpc_ssl_ca_certificates = {"rpc-ssl-ca-certificates", tools::wallet2::tr("Path to file containing concatenated PEM format certificate(s) to replace system CA(s).")}; const command_line::arg_descriptor<std::vector<std::string>> arg_rpc_ssl_allowed_fingerprints = {"rpc-ssl-allowed-fingerprints", tools::wallet2::tr("List of certificate fingerprints to allow")}; constexpr const char default_rpc_username[] = "monero"; @@ -86,12 +87,10 @@ namespace void set_confirmations(tools::wallet_rpc::transfer_entry &entry, uint64_t blockchain_height, uint64_t block_reward) { if (entry.height >= blockchain_height || (entry.height == 0 && (!strcmp(entry.type.c_str(), "pending") || !strcmp(entry.type.c_str(), "pool")))) - { entry.confirmations = 0; - entry.suggested_confirmations_threshold = 0; - return; - } - entry.confirmations = blockchain_height - entry.height; + else + entry.confirmations = blockchain_height - entry.height; + if (block_reward == 0) entry.suggested_confirmations_threshold = 0; else @@ -247,40 +246,110 @@ namespace tools auto rpc_ssl_private_key = command_line::get_arg(vm, arg_rpc_ssl_private_key); auto rpc_ssl_certificate = command_line::get_arg(vm, arg_rpc_ssl_certificate); - auto rpc_ssl_allowed_certificates = command_line::get_arg(vm, arg_rpc_ssl_allowed_certificates); + auto rpc_ssl_ca_file = command_line::get_arg(vm, arg_rpc_ssl_ca_certificates); auto rpc_ssl_allowed_fingerprints = command_line::get_arg(vm, arg_rpc_ssl_allowed_fingerprints); auto rpc_ssl = command_line::get_arg(vm, arg_rpc_ssl); - epee::net_utils::ssl_support_t rpc_ssl_support; - if (!epee::net_utils::ssl_support_from_string(rpc_ssl_support, rpc_ssl)) - { - MERROR("Invalid argument for " << std::string(arg_rpc_ssl.name)); - return false; - } - std::list<std::string> allowed_certificates; - for (const std::string &path: rpc_ssl_allowed_certificates) + epee::net_utils::ssl_options_t rpc_ssl_options = epee::net_utils::ssl_support_t::e_ssl_support_enabled; + + if (!rpc_ssl_ca_file.empty() || !rpc_ssl_allowed_fingerprints.empty()) { - allowed_certificates.push_back({}); - if (!epee::file_io_utils::load_file_to_string(path, allowed_certificates.back())) + std::vector<std::vector<uint8_t>> allowed_fingerprints{ rpc_ssl_allowed_fingerprints.size() }; + std::transform(rpc_ssl_allowed_fingerprints.begin(), rpc_ssl_allowed_fingerprints.end(), allowed_fingerprints.begin(), epee::from_hex::vector); + for (const auto &fpr: rpc_ssl_allowed_fingerprints) + { + if (fpr.size() != SSL_FINGERPRINT_SIZE) { - MERROR("Failed to load certificate: " << path); - allowed_certificates.back() = std::string(); + MERROR("SHA-256 fingerprint should be " BOOST_PP_STRINGIZE(SSL_FINGERPRINT_SIZE) " bytes long."); + return false; } + } + + rpc_ssl_options = epee::net_utils::ssl_options_t{ + std::move(allowed_fingerprints), std::move(rpc_ssl_ca_file) + }; } - std::vector<std::vector<uint8_t>> allowed_fingerprints{ rpc_ssl_allowed_fingerprints.size() }; - std::transform(rpc_ssl_allowed_fingerprints.begin(), rpc_ssl_allowed_fingerprints.end(), allowed_fingerprints.begin(), epee::from_hex::vector); + // user specified CA file or fingeprints implies enabled SSL by default + if (rpc_ssl_options.verification != epee::net_utils::ssl_verification_t::user_certificates || !command_line::is_arg_defaulted(vm, arg_rpc_ssl)) + { + if (!epee::net_utils::ssl_support_from_string(rpc_ssl_options.support, rpc_ssl)) + { + MERROR("Invalid argument for " << std::string(arg_rpc_ssl.name)); + return false; + } + } + + rpc_ssl_options.auth = epee::net_utils::ssl_authentication_t{ + std::move(rpc_ssl_private_key), std::move(rpc_ssl_certificate) + }; m_auto_refresh_period = DEFAULT_AUTO_REFRESH_PERIOD; m_last_auto_refresh_time = boost::posix_time::min_date_time; + check_background_mining(); + m_net_server.set_threads_prefix("RPC"); auto rng = [](size_t len, uint8_t *ptr) { return crypto::rand(len, ptr); }; return epee::http_server_impl_base<wallet_rpc_server, connection_context>::init( rng, std::move(bind_port), std::move(rpc_config->bind_ip), std::move(rpc_config->access_control_origins), std::move(http_login), - rpc_ssl_support, std::make_pair(rpc_ssl_private_key, rpc_ssl_certificate), std::move(allowed_certificates), std::move(allowed_fingerprints) + std::move(rpc_ssl_options) ); } //------------------------------------------------------------------------------------------------------------------------------ + void wallet_rpc_server::check_background_mining() + { + if (!m_wallet) + return; + + tools::wallet2::BackgroundMiningSetupType setup = m_wallet->setup_background_mining(); + if (setup == tools::wallet2::BackgroundMiningNo) + { + MLOG_RED(el::Level::Warning, "Background mining not enabled. Run \"set setup-background-mining 1\" in monero-wallet-cli to change."); + return; + } + + if (!m_wallet->is_trusted_daemon()) + { + MDEBUG("Using an untrusted daemon, skipping background mining check"); + return; + } + + cryptonote::COMMAND_RPC_MINING_STATUS::request req; + cryptonote::COMMAND_RPC_MINING_STATUS::response res; + bool r = m_wallet->invoke_http_json("/mining_status", req, res); + if (!r || res.status != CORE_RPC_STATUS_OK) + { + MERROR("Failed to query mining status: " << (r ? res.status : "No connection to daemon")); + return; + } + if (res.active || res.is_background_mining_enabled) + return; + + if (setup == tools::wallet2::BackgroundMiningMaybe) + { + MINFO("The daemon is not set up to background mine."); + MINFO("With background mining enabled, the daemon will mine when idle and not on batttery."); + MINFO("Enabling this supports the network you are using, and makes you eligible for receiving new monero"); + MINFO("Set setup-background-mining to 1 in monero-wallet-cli to change."); + return; + } + + cryptonote::COMMAND_RPC_START_MINING::request req2; + cryptonote::COMMAND_RPC_START_MINING::response res2; + req2.miner_address = m_wallet->get_account().get_public_address_str(m_wallet->nettype()); + req2.threads_count = 1; + req2.do_background_mining = true; + req2.ignore_battery = false; + r = m_wallet->invoke_http_json("/start_mining", req2, res); + if (!r || res2.status != CORE_RPC_STATUS_OK) + { + MERROR("Failed to setup background mining: " << (r ? res.status : "No connection to daemon")); + return; + } + + MINFO("Background mining enabled. The daemon will mine when idle and not on batttery."); + } + //------------------------------------------------------------------------------------------------------------------------------ bool wallet_rpc_server::not_open(epee::json_rpc::error& er) { er.code = WALLET_RPC_ERROR_CODE_NOT_OPEN; @@ -385,10 +454,10 @@ namespace tools try { res.balance = req.all_accounts ? m_wallet->balance_all() : m_wallet->balance(req.account_index); - res.unlocked_balance = req.all_accounts ? m_wallet->unlocked_balance_all() : m_wallet->unlocked_balance(req.account_index); + res.unlocked_balance = req.all_accounts ? m_wallet->unlocked_balance_all(&res.blocks_to_unlock) : m_wallet->unlocked_balance(req.account_index, &res.blocks_to_unlock); res.multisig_import_needed = m_wallet->multisig() && m_wallet->has_multisig_partial_key_images(); std::map<uint32_t, std::map<uint32_t, uint64_t>> balance_per_subaddress_per_account; - std::map<uint32_t, std::map<uint32_t, uint64_t>> unlocked_balance_per_subaddress_per_account; + std::map<uint32_t, std::map<uint32_t, std::pair<uint64_t, uint64_t>>> unlocked_balance_per_subaddress_per_account; if (req.all_accounts) { for (uint32_t account_index = 0; account_index < m_wallet->get_num_subaddress_accounts(); ++account_index) @@ -408,7 +477,7 @@ namespace tools { uint32_t account_index = p.first; std::map<uint32_t, uint64_t> balance_per_subaddress = p.second; - std::map<uint32_t, uint64_t> unlocked_balance_per_subaddress = unlocked_balance_per_subaddress_per_account[account_index]; + std::map<uint32_t, std::pair<uint64_t, uint64_t>> unlocked_balance_per_subaddress = unlocked_balance_per_subaddress_per_account[account_index]; std::set<uint32_t> address_indices; if (!req.all_accounts && !req.address_indices.empty()) { @@ -427,7 +496,8 @@ namespace tools cryptonote::subaddress_index index = {info.account_index, info.address_index}; info.address = m_wallet->get_subaddress_as_str(index); info.balance = balance_per_subaddress[i]; - info.unlocked_balance = unlocked_balance_per_subaddress[i]; + info.unlocked_balance = unlocked_balance_per_subaddress[i].first; + info.blocks_to_unlock = unlocked_balance_per_subaddress[i].second; info.label = m_wallet->get_subaddress_label(index); info.num_unspent_outputs = std::count_if(transfers.begin(), transfers.end(), [&](const tools::wallet2::transfer_details& td) { return !td.m_spent && td.m_subaddr_index == index; }); res.per_subaddress.emplace_back(std::move(info)); @@ -1779,11 +1849,7 @@ namespace tools { if (req.account_index != td.m_subaddr_index.major || (!req.subaddr_indices.empty() && req.subaddr_indices.count(td.m_subaddr_index.minor) == 0)) continue; - if (!transfers_found) - { - transfers_found = true; - } - auto txBlob = t_serializable_object_to_blob(td.m_tx); + transfers_found = true; wallet_rpc::transfer_details rpc_transfers; rpc_transfers.amount = td.amount(); rpc_transfers.spent = td.m_spent; @@ -1791,6 +1857,9 @@ namespace tools rpc_transfers.tx_hash = epee::string_tools::pod_to_hex(td.m_txid); rpc_transfers.subaddr_index = {td.m_subaddr_index.major, td.m_subaddr_index.minor}; rpc_transfers.key_image = td.m_key_image_known ? epee::string_tools::pod_to_hex(td.m_key_image) : ""; + rpc_transfers.block_height = td.m_block_height; + rpc_transfers.frozen = td.m_frozen; + rpc_transfers.unlocked = m_wallet->is_transfer_unlocked(td); res.transfers.push_back(rpc_transfers); } } @@ -2518,7 +2587,7 @@ namespace tools try { - res.outputs_data_hex = epee::string_tools::buff_to_hex_nodelimer(m_wallet->export_outputs_to_str()); + res.outputs_data_hex = epee::string_tools::buff_to_hex_nodelimer(m_wallet->export_outputs_to_str(req.all)); } catch (const std::exception &e) { @@ -3048,6 +3117,18 @@ namespace tools er.message = "Invalid filename"; return false; } + if (m_wallet && req.autosave_current) + { + try + { + m_wallet->store(); + } + catch (const std::exception& e) + { + handle_rpc_exception(std::current_exception(), er, WALLET_RPC_ERROR_CODE_UNKNOWN_ERROR); + return false; + } + } std::string wallet_file = m_wallet_dir + "/" + req.filename; { po::options_description desc("dummy"); @@ -3078,18 +3159,7 @@ namespace tools } if (m_wallet) - { - try - { - m_wallet->store(); - } - catch (const std::exception& e) - { - handle_rpc_exception(std::current_exception(), er, WALLET_RPC_ERROR_CODE_UNKNOWN_ERROR); - return false; - } delete m_wallet; - } m_wallet = wal.release(); return true; } @@ -3098,14 +3168,17 @@ namespace tools { if (!m_wallet) return not_open(er); - try + if (req.autosave_current) { - m_wallet->store(); - } - catch (const std::exception& e) - { - handle_rpc_exception(std::current_exception(), er, WALLET_RPC_ERROR_CODE_UNKNOWN_ERROR); - return false; + try + { + m_wallet->store(); + } + catch (const std::exception& e) + { + handle_rpc_exception(std::current_exception(), er, WALLET_RPC_ERROR_CODE_UNKNOWN_ERROR); + return false; + } } delete m_wallet; m_wallet = NULL; @@ -3322,6 +3395,20 @@ namespace tools return false; } + if (m_wallet && req.autosave_current) + { + try + { + if (!wallet_file.empty()) + m_wallet->store(); + } + catch (const std::exception &e) + { + handle_rpc_exception(std::current_exception(), er, WALLET_RPC_ERROR_CODE_UNKNOWN_ERROR); + return false; + } + } + try { if (!req.spendkey.empty()) @@ -3370,19 +3457,7 @@ namespace tools } if (m_wallet) - { - try - { - if (!wallet_file.empty()) - m_wallet->store(); - } - catch (const std::exception &e) - { - handle_rpc_exception(std::current_exception(), er, WALLET_RPC_ERROR_CODE_UNKNOWN_ERROR); - return false; - } delete m_wallet; - } m_wallet = wal.release(); res.address = m_wallet->get_account().get_public_address_str(m_wallet->nettype()); return true; @@ -3448,6 +3523,18 @@ namespace tools return false; } } + if (m_wallet && req.autosave_current) + { + try + { + m_wallet->store(); + } + catch (const std::exception &e) + { + handle_rpc_exception(std::current_exception(), er, WALLET_RPC_ERROR_CODE_UNKNOWN_ERROR); + return false; + } + } // process seed_offset if given { @@ -3558,18 +3645,7 @@ namespace tools } if (m_wallet) - { - try - { - m_wallet->store(); - } - catch (const std::exception &e) - { - handle_rpc_exception(std::current_exception(), er, WALLET_RPC_ERROR_CODE_UNKNOWN_ERROR); - return false; - } delete m_wallet; - } m_wallet = wal.release(); res.address = m_wallet->get_account().get_public_address_str(m_wallet->nettype()); res.info = "Wallet has been restored successfully."; @@ -4002,9 +4078,10 @@ namespace tools { cryptonote::TESTNET, "testnet" }, { cryptonote::STAGENET, "stagenet" }, }; + if (!req.any_net_type && !m_wallet) return not_open(er); for (const auto &net_type: net_types) { - if (!req.any_net_type && net_type.type != m_wallet->nettype()) + if (!req.any_net_type && (!m_wallet || net_type.type != m_wallet->nettype())) continue; if (req.allow_openalias) { @@ -4054,13 +4131,7 @@ namespace tools er.message = "Command unavailable in restricted mode."; return false; } - epee::net_utils::ssl_support_t ssl_support; - if (!epee::net_utils::ssl_support_from_string(ssl_support, req.ssl_support)) - { - er.code = WALLET_RPC_ERROR_CODE_NO_DAEMON_CONNECTION; - er.message = std::string("Invalid ssl support mode"); - return false; - } + std::vector<std::vector<uint8_t>> ssl_allowed_fingerprints; ssl_allowed_fingerprints.reserve(req.ssl_allowed_fingerprints.size()); for (const std::string &fp: req.ssl_allowed_fingerprints) @@ -4070,7 +4141,32 @@ namespace tools for (auto c: fp) v.push_back(c); } - if (!m_wallet->set_daemon(req.address, boost::none, req.trusted, ssl_support, std::make_pair(req.ssl_private_key_path, req.ssl_certificate_path), req.ssl_allowed_certificates, ssl_allowed_fingerprints, req.ssl_allow_any_cert)) + + epee::net_utils::ssl_options_t ssl_options = epee::net_utils::ssl_support_t::e_ssl_support_enabled; + if (req.ssl_allow_any_cert) + ssl_options.verification = epee::net_utils::ssl_verification_t::none; + else if (!ssl_allowed_fingerprints.empty() || !req.ssl_ca_file.empty()) + ssl_options = epee::net_utils::ssl_options_t{std::move(ssl_allowed_fingerprints), std::move(req.ssl_ca_file)}; + + if (!epee::net_utils::ssl_support_from_string(ssl_options.support, req.ssl_support)) + { + er.code = WALLET_RPC_ERROR_CODE_NO_DAEMON_CONNECTION; + er.message = std::string("Invalid ssl support mode"); + return false; + } + + ssl_options.auth = epee::net_utils::ssl_authentication_t{ + std::move(req.ssl_private_key_path), std::move(req.ssl_certificate_path) + }; + + if (ssl_options.support == epee::net_utils::ssl_support_t::e_ssl_support_enabled && !ssl_options.has_strong_verification(boost::string_ref{})) + { + er.code = WALLET_RPC_ERROR_CODE_NO_DAEMON_CONNECTION; + er.message = "SSL is enabled but no user certificate or fingerprints were provided"; + return false; + } + + if (!m_wallet->set_daemon(req.address, boost::none, req.trusted, std::move(ssl_options))) { er.code = WALLET_RPC_ERROR_CODE_NO_DAEMON_CONNECTION; er.message = std::string("Unable to set daemon"); @@ -4079,6 +4175,39 @@ namespace tools return true; } //------------------------------------------------------------------------------------------------------------------------------ + bool wallet_rpc_server::on_set_log_level(const wallet_rpc::COMMAND_RPC_SET_LOG_LEVEL::request& req, wallet_rpc::COMMAND_RPC_SET_LOG_LEVEL::response& res, epee::json_rpc::error& er, const connection_context *ctx) + { + if (m_restricted) + { + er.code = WALLET_RPC_ERROR_CODE_DENIED; + er.message = "Command unavailable in restricted mode."; + return false; + } + + if (req.level < 0 || req.level > 4) + { + er.code = WALLET_RPC_ERROR_CODE_INVALID_LOG_LEVEL; + er.message = "Error: log level not valid"; + return false; + } + mlog_set_log_level(req.level); + return true; + } + //------------------------------------------------------------------------------------------------------------------------------ + bool wallet_rpc_server::on_set_log_categories(const wallet_rpc::COMMAND_RPC_SET_LOG_CATEGORIES::request& req, wallet_rpc::COMMAND_RPC_SET_LOG_CATEGORIES::response& res, epee::json_rpc::error& er, const connection_context *ctx) + { + if (m_restricted) + { + er.code = WALLET_RPC_ERROR_CODE_DENIED; + er.message = "Command unavailable in restricted mode."; + return false; + } + + mlog_set_log(req.categories.c_str()); + res.categories = mlog_get_categories(); + return true; + } + //------------------------------------------------------------------------------------------------------------------------------ bool wallet_rpc_server::on_get_version(const wallet_rpc::COMMAND_RPC_GET_VERSION::request& req, wallet_rpc::COMMAND_RPC_GET_VERSION::response& res, epee::json_rpc::error& er, const connection_context *ctx) { res.version = WALLET_RPC_VERSION; @@ -4278,7 +4407,7 @@ int main(int argc, char** argv) { command_line::add_arg(desc_params, arg_rpc_ssl); command_line::add_arg(desc_params, arg_rpc_ssl_private_key); command_line::add_arg(desc_params, arg_rpc_ssl_certificate); - command_line::add_arg(desc_params, arg_rpc_ssl_allowed_certificates); + command_line::add_arg(desc_params, arg_rpc_ssl_ca_certificates); command_line::add_arg(desc_params, arg_rpc_ssl_allowed_fingerprints); daemonizer::init_options(hidden_options, desc_params); diff --git a/src/wallet/wallet_rpc_server.h b/src/wallet/wallet_rpc_server.h index fb0c48a80..a327ed908 100644 --- a/src/wallet/wallet_rpc_server.h +++ b/src/wallet/wallet_rpc_server.h @@ -151,6 +151,8 @@ namespace tools MAP_JON_RPC_WE("submit_multisig", on_submit_multisig, wallet_rpc::COMMAND_RPC_SUBMIT_MULTISIG) MAP_JON_RPC_WE("validate_address", on_validate_address, wallet_rpc::COMMAND_RPC_VALIDATE_ADDRESS) MAP_JON_RPC_WE("set_daemon", on_set_daemon, wallet_rpc::COMMAND_RPC_SET_DAEMON) + MAP_JON_RPC_WE("set_log_level", on_set_log_level, wallet_rpc::COMMAND_RPC_SET_LOG_LEVEL) + MAP_JON_RPC_WE("set_log_categories", on_set_log_categories, wallet_rpc::COMMAND_RPC_SET_LOG_CATEGORIES) MAP_JON_RPC_WE("get_version", on_get_version, wallet_rpc::COMMAND_RPC_GET_VERSION) END_JSON_RPC_MAP() END_URI_MAP2() @@ -234,6 +236,8 @@ namespace tools bool on_submit_multisig(const wallet_rpc::COMMAND_RPC_SUBMIT_MULTISIG::request& req, wallet_rpc::COMMAND_RPC_SUBMIT_MULTISIG::response& res, epee::json_rpc::error& er, const connection_context *ctx = NULL); bool on_validate_address(const wallet_rpc::COMMAND_RPC_VALIDATE_ADDRESS::request& req, wallet_rpc::COMMAND_RPC_VALIDATE_ADDRESS::response& res, epee::json_rpc::error& er, const connection_context *ctx = NULL); bool on_set_daemon(const wallet_rpc::COMMAND_RPC_SET_DAEMON::request& req, wallet_rpc::COMMAND_RPC_SET_DAEMON::response& res, epee::json_rpc::error& er, const connection_context *ctx = NULL); + bool on_set_log_level(const wallet_rpc::COMMAND_RPC_SET_LOG_LEVEL::request& req, wallet_rpc::COMMAND_RPC_SET_LOG_LEVEL::response& res, epee::json_rpc::error& er, const connection_context *ctx = NULL); + bool on_set_log_categories(const wallet_rpc::COMMAND_RPC_SET_LOG_CATEGORIES::request& req, wallet_rpc::COMMAND_RPC_SET_LOG_CATEGORIES::response& res, epee::json_rpc::error& er, const connection_context *ctx = NULL); bool on_get_version(const wallet_rpc::COMMAND_RPC_GET_VERSION::request& req, wallet_rpc::COMMAND_RPC_GET_VERSION::response& res, epee::json_rpc::error& er, const connection_context *ctx = NULL); //json rpc v2 @@ -254,6 +258,8 @@ namespace tools bool validate_transfer(const std::list<wallet_rpc::transfer_destination>& destinations, const std::string& payment_id, std::vector<cryptonote::tx_destination_entry>& dsts, std::vector<uint8_t>& extra, bool at_least_one_destination, epee::json_rpc::error& er); + void check_background_mining(); + wallet2 *m_wallet; std::string m_wallet_dir; tools::private_file rpc_login_file; diff --git a/src/wallet/wallet_rpc_server_commands_defs.h b/src/wallet/wallet_rpc_server_commands_defs.h index 7984f6584..4504ac752 100644 --- a/src/wallet/wallet_rpc_server_commands_defs.h +++ b/src/wallet/wallet_rpc_server_commands_defs.h @@ -47,7 +47,7 @@ // advance which version they will stop working with // Don't go over 32767 for any of these #define WALLET_RPC_VERSION_MAJOR 1 -#define WALLET_RPC_VERSION_MINOR 9 +#define WALLET_RPC_VERSION_MINOR 13 #define MAKE_WALLET_RPC_VERSION(major,minor) (((major)<<16)|(minor)) #define WALLET_RPC_VERSION MAKE_WALLET_RPC_VERSION(WALLET_RPC_VERSION_MAJOR, WALLET_RPC_VERSION_MINOR) namespace tools @@ -81,6 +81,7 @@ namespace wallet_rpc uint64_t unlocked_balance; std::string label; uint64_t num_unspent_outputs; + uint64_t blocks_to_unlock; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(account_index) @@ -90,6 +91,7 @@ namespace wallet_rpc KV_SERIALIZE(unlocked_balance) KV_SERIALIZE(label) KV_SERIALIZE(num_unspent_outputs) + KV_SERIALIZE(blocks_to_unlock) END_KV_SERIALIZE_MAP() }; @@ -99,12 +101,14 @@ namespace wallet_rpc uint64_t unlocked_balance; bool multisig_import_needed; std::vector<per_subaddress_info> per_subaddress; + uint64_t blocks_to_unlock; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(balance) KV_SERIALIZE(unlocked_balance) KV_SERIALIZE(multisig_import_needed) KV_SERIALIZE(per_subaddress) + KV_SERIALIZE(blocks_to_unlock) END_KV_SERIALIZE_MAP() }; typedef epee::misc_utils::struct_init<response_t> response; @@ -978,6 +982,9 @@ namespace wallet_rpc std::string tx_hash; cryptonote::subaddress_index subaddr_index; std::string key_image; + uint64_t block_height; + bool frozen; + bool unlocked; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(amount) @@ -986,6 +993,9 @@ namespace wallet_rpc KV_SERIALIZE(tx_hash) KV_SERIALIZE(subaddr_index) KV_SERIALIZE(key_image) + KV_SERIALIZE(block_height) + KV_SERIALIZE(frozen) + KV_SERIALIZE(unlocked) END_KV_SERIALIZE_MAP() }; @@ -1622,7 +1632,10 @@ namespace wallet_rpc { struct request_t { + bool all; + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE(all) END_KV_SERIALIZE_MAP() }; typedef epee::misc_utils::struct_init<request_t> request; @@ -2039,10 +2052,12 @@ namespace wallet_rpc { std::string filename; std::string password; + bool autosave_current; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(filename) KV_SERIALIZE(password) + KV_SERIALIZE_OPT(autosave_current, true) END_KV_SERIALIZE_MAP() }; typedef epee::misc_utils::struct_init<request_t> request; @@ -2059,7 +2074,10 @@ namespace wallet_rpc { struct request_t { + bool autosave_current; + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE_OPT(autosave_current, true) END_KV_SERIALIZE_MAP() }; typedef epee::misc_utils::struct_init<request_t> request; @@ -2104,6 +2122,7 @@ namespace wallet_rpc std::string spendkey; std::string viewkey; std::string password; + bool autosave_current; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE_OPT(restore_height, (uint64_t)0) @@ -2112,6 +2131,7 @@ namespace wallet_rpc KV_SERIALIZE(spendkey) KV_SERIALIZE(viewkey) KV_SERIALIZE(password) + KV_SERIALIZE_OPT(autosave_current, true) END_KV_SERIALIZE_MAP() }; @@ -2137,6 +2157,7 @@ namespace wallet_rpc std::string seed_offset; std::string password; std::string language; + bool autosave_current; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE_OPT(restore_height, (uint64_t)0) @@ -2145,6 +2166,7 @@ namespace wallet_rpc KV_SERIALIZE(seed_offset) KV_SERIALIZE(password) KV_SERIALIZE(language) + KV_SERIALIZE_OPT(autosave_current, true) END_KV_SERIALIZE_MAP() }; typedef epee::misc_utils::struct_init<request_t> request; @@ -2448,7 +2470,7 @@ namespace wallet_rpc std::string ssl_support; // disabled, enabled, autodetect std::string ssl_private_key_path; std::string ssl_certificate_path; - std::list<std::string> ssl_allowed_certificates; + std::string ssl_ca_file; std::vector<std::string> ssl_allowed_fingerprints; bool ssl_allow_any_cert; @@ -2458,7 +2480,7 @@ namespace wallet_rpc KV_SERIALIZE_OPT(ssl_support, (std::string)"autodetect") KV_SERIALIZE(ssl_private_key_path) KV_SERIALIZE(ssl_certificate_path) - KV_SERIALIZE(ssl_allowed_certificates) + KV_SERIALIZE(ssl_ca_file) KV_SERIALIZE(ssl_allowed_fingerprints) KV_SERIALIZE_OPT(ssl_allow_any_cert, false) END_KV_SERIALIZE_MAP() @@ -2473,5 +2495,48 @@ namespace wallet_rpc typedef epee::misc_utils::struct_init<response_t> response; }; + struct COMMAND_RPC_SET_LOG_LEVEL + { + struct request_t + { + int8_t level; + + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE(level) + END_KV_SERIALIZE_MAP() + }; + typedef epee::misc_utils::struct_init<request_t> request; + + struct response_t + { + BEGIN_KV_SERIALIZE_MAP() + END_KV_SERIALIZE_MAP() + }; + typedef epee::misc_utils::struct_init<response_t> response; + }; + + struct COMMAND_RPC_SET_LOG_CATEGORIES + { + struct request_t + { + std::string categories; + + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE(categories) + END_KV_SERIALIZE_MAP() + }; + typedef epee::misc_utils::struct_init<request_t> request; + + struct response_t + { + std::string categories; + + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE(categories) + END_KV_SERIALIZE_MAP() + }; + typedef epee::misc_utils::struct_init<response_t> response; + }; + } } diff --git a/src/wallet/wallet_rpc_server_error_codes.h b/src/wallet/wallet_rpc_server_error_codes.h index 440a58a47..011d146d4 100644 --- a/src/wallet/wallet_rpc_server_error_codes.h +++ b/src/wallet/wallet_rpc_server_error_codes.h @@ -74,3 +74,4 @@ #define WALLET_RPC_ERROR_CODE_SIGNED_SUBMISSION -41 #define WALLET_RPC_ERROR_CODE_SIGN_UNSIGNED -42 #define WALLET_RPC_ERROR_CODE_NON_DETERMINISTIC -43 +#define WALLET_RPC_ERROR_CODE_INVALID_LOG_LEVEL -44 diff --git a/tests/block_weight/block_weight.cpp b/tests/block_weight/block_weight.cpp index 7b3fdfe57..f193133da 100644 --- a/tests/block_weight/block_weight.cpp +++ b/tests/block_weight/block_weight.cpp @@ -195,8 +195,10 @@ static void test(test_t t, uint64_t blocks) int main() { + TRY_ENTRY(); test(test_max, 2 * LONG_TERM_BLOCK_WEIGHT_WINDOW); test(test_lcg, 9 * LONG_TERM_BLOCK_WEIGHT_WINDOW); test(test_min, 1 * LONG_TERM_BLOCK_WEIGHT_WINDOW); return 0; + CATCH_ENTRY_L0("main", 1); } diff --git a/tests/block_weight/block_weight.py b/tests/block_weight/block_weight.py index ba533c53c..b23da3d77 100755 --- a/tests/block_weight/block_weight.py +++ b/tests/block_weight/block_weight.py @@ -9,7 +9,6 @@ import math MEDIAN_WINDOW_SMALL = 100 # number of recent blocks for median computation MEDIAN_WINDOW_BIG = 5000 -MULTIPLIER_SMALL = 1.4 # multipliers for determining weights MULTIPLIER_BIG = 50.0 MEDIAN_THRESHOLD = 300*1000 # initial value for median (scaled kB -> B) lcg_seed = 0 @@ -24,9 +23,9 @@ def get_median(vec): #temp = vec temp = sorted(vec) if len(temp) % 2 == 1: - return temp[len(temp)/2] + return temp[len(temp)//2] else: - return int((temp[len(temp)/2]+temp[len(temp)/2-1])/2) + return int((temp[len(temp)//2]+temp[len(temp)//2-1])//2) def LCG(): global lcg_seed diff --git a/tests/core_tests/bulletproofs.h b/tests/core_tests/bulletproofs.h index efc751df7..83f160d71 100644 --- a/tests/core_tests/bulletproofs.h +++ b/tests/core_tests/bulletproofs.h @@ -49,7 +49,7 @@ struct gen_bp_tx_validation_base : public test_chain_unit_base return !tvc.m_verifivation_failed && tx_added; } - bool check_tx_verification_context(const std::vector<cryptonote::tx_verification_context>& tvcs, size_t tx_added, size_t event_idx, const std::vector<cryptonote::transaction>& /*txs*/) + bool check_tx_verification_context_array(const std::vector<cryptonote::tx_verification_context>& tvcs, size_t tx_added, size_t event_idx, const std::vector<cryptonote::transaction>& /*txs*/) { size_t failed = 0; for (const cryptonote::tx_verification_context &tvc: tvcs) @@ -97,7 +97,7 @@ template<> struct get_test_options<gen_bp_tx_validation_base> { const std::pair<uint8_t, uint64_t> hard_forks[4] = {std::make_pair(1, 0), std::make_pair(2, 1), std::make_pair(10, 73), std::make_pair(0, 0)}; const cryptonote::test_options test_options = { - hard_forks + hard_forks, 0 }; }; diff --git a/tests/core_tests/chaingen.cpp b/tests/core_tests/chaingen.cpp index 09bc10ea8..614585349 100644 --- a/tests/core_tests/chaingen.cpp +++ b/tests/core_tests/chaingen.cpp @@ -1146,3 +1146,21 @@ bool test_chain_unit_base::verify(const std::string& cb_name, cryptonote::core& } return cb_it->second(c, ev_index, events); } + +bool test_chain_unit_base::check_block_verification_context(const cryptonote::block_verification_context& bvc, size_t event_idx, const cryptonote::block& /*blk*/) +{ + return !bvc.m_verifivation_failed; +} + +bool test_chain_unit_base::check_tx_verification_context(const cryptonote::tx_verification_context& tvc, bool /*tx_added*/, size_t /*event_index*/, const cryptonote::transaction& /*tx*/) +{ + return !tvc.m_verifivation_failed; +} + +bool test_chain_unit_base::check_tx_verification_context_array(const std::vector<cryptonote::tx_verification_context>& tvcs, size_t /*tx_added*/, size_t /*event_index*/, const std::vector<cryptonote::transaction>& /*txs*/) +{ + for (const cryptonote::tx_verification_context &tvc: tvcs) + if (tvc.m_verifivation_failed) + return false; + return true; +} diff --git a/tests/core_tests/chaingen.h b/tests/core_tests/chaingen.h index f2bcb7787..c0d31bb8a 100644 --- a/tests/core_tests/chaingen.h +++ b/tests/core_tests/chaingen.h @@ -169,6 +169,10 @@ public: void register_callback(const std::string& cb_name, verify_callback cb); bool verify(const std::string& cb_name, cryptonote::core& c, size_t ev_index, const std::vector<test_event_entry> &events); + bool check_block_verification_context(const cryptonote::block_verification_context& bvc, size_t event_idx, const cryptonote::block& /*blk*/); + bool check_tx_verification_context(const cryptonote::tx_verification_context& tvc, bool /*tx_added*/, size_t /*event_index*/, const cryptonote::transaction& /*tx*/); + bool check_tx_verification_context_array(const std::vector<cryptonote::tx_verification_context>& tvcs, size_t /*tx_added*/, size_t /*event_index*/, const std::vector<cryptonote::transaction>& /*txs*/); + private: callbacks_map m_callbacks; }; @@ -487,77 +491,6 @@ uint64_t get_balance(const cryptonote::account_base& addr, const std::vector<cry bool extract_hard_forks(const std::vector<test_event_entry>& events, v_hardforks_t& hard_forks); -//-------------------------------------------------------------------------- -template<class t_test_class> -auto do_check_tx_verification_context(const cryptonote::tx_verification_context& tvc, bool tx_added, size_t event_index, const cryptonote::transaction& tx, t_test_class& validator, int) - -> decltype(validator.check_tx_verification_context(tvc, tx_added, event_index, tx)) -{ - return validator.check_tx_verification_context(tvc, tx_added, event_index, tx); -} -//-------------------------------------------------------------------------- -template<class t_test_class> -bool do_check_tx_verification_context(const cryptonote::tx_verification_context& tvc, bool tx_added, size_t /*event_index*/, const cryptonote::transaction& /*tx*/, t_test_class&, long) -{ - // Default block verification context check - if (tvc.m_verifivation_failed) - throw std::runtime_error("Transaction verification failed"); - return true; -} -//-------------------------------------------------------------------------- -template<class t_test_class> -bool check_tx_verification_context(const cryptonote::tx_verification_context& tvc, bool tx_added, size_t event_index, const cryptonote::transaction& tx, t_test_class& validator) -{ - // SFINAE in action - return do_check_tx_verification_context(tvc, tx_added, event_index, tx, validator, 0); -} -//-------------------------------------------------------------------------- -template<class t_test_class> -auto do_check_tx_verification_context(const std::vector<cryptonote::tx_verification_context>& tvcs, size_t tx_added, size_t event_index, const std::vector<cryptonote::transaction>& txs, t_test_class& validator, int) - -> decltype(validator.check_tx_verification_context(tvcs, tx_added, event_index, txs)) -{ - return validator.check_tx_verification_context(tvcs, tx_added, event_index, txs); -} -//-------------------------------------------------------------------------- -template<class t_test_class> -bool do_check_tx_verification_context(const std::vector<cryptonote::tx_verification_context>& tvcs, size_t tx_added, size_t /*event_index*/, const std::vector<cryptonote::transaction>& /*txs*/, t_test_class&, long) -{ - // Default block verification context check - for (const cryptonote::tx_verification_context &tvc: tvcs) - if (tvc.m_verifivation_failed) - throw std::runtime_error("Transaction verification failed"); - return true; -} -//-------------------------------------------------------------------------- -template<class t_test_class> -bool check_tx_verification_context(const std::vector<cryptonote::tx_verification_context>& tvcs, size_t tx_added, size_t event_index, const std::vector<cryptonote::transaction>& txs, t_test_class& validator) -{ - // SFINAE in action - return do_check_tx_verification_context(tvcs, tx_added, event_index, txs, validator, 0); -} -//-------------------------------------------------------------------------- -template<class t_test_class> -auto do_check_block_verification_context(const cryptonote::block_verification_context& bvc, size_t event_index, const cryptonote::block& blk, t_test_class& validator, int) - -> decltype(validator.check_block_verification_context(bvc, event_index, blk)) -{ - return validator.check_block_verification_context(bvc, event_index, blk); -} -//-------------------------------------------------------------------------- -template<class t_test_class> -bool do_check_block_verification_context(const cryptonote::block_verification_context& bvc, size_t /*event_index*/, const cryptonote::block& /*blk*/, t_test_class&, long) -{ - // Default block verification context check - if (bvc.m_verifivation_failed) - throw std::runtime_error("Block verification failed"); - return true; -} -//-------------------------------------------------------------------------- -template<class t_test_class> -bool check_block_verification_context(const cryptonote::block_verification_context& bvc, size_t event_index, const cryptonote::block& blk, t_test_class& validator) -{ - // SFINAE in action - return do_check_block_verification_context(bvc, event_index, blk, validator, 0); -} - /************************************************************************/ /* */ /************************************************************************/ @@ -613,7 +546,7 @@ public: size_t pool_size = m_c.get_pool_transactions_count(); m_c.handle_incoming_tx(t_serializable_object_to_blob(tx), tvc, m_txs_keeped_by_block, false, false); bool tx_added = pool_size + 1 == m_c.get_pool_transactions_count(); - bool r = check_tx_verification_context(tvc, tx_added, m_ev_index, tx, m_validator); + bool r = m_validator.check_tx_verification_context(tvc, tx_added, m_ev_index, tx); CHECK_AND_NO_ASSERT_MES(r, false, "tx verification context check failed"); return true; } @@ -633,7 +566,7 @@ public: size_t pool_size = m_c.get_pool_transactions_count(); m_c.handle_incoming_txs(tx_blobs, tvcs, m_txs_keeped_by_block, false, false); size_t tx_added = m_c.get_pool_transactions_count() - pool_size; - bool r = check_tx_verification_context(tvcs, tx_added, m_ev_index, txs, m_validator); + bool r = m_validator.check_tx_verification_context_array(tvcs, tx_added, m_ev_index, txs); CHECK_AND_NO_ASSERT_MES(r, false, "tx verification context check failed"); return true; } @@ -643,8 +576,16 @@ public: log_event("cryptonote::block"); cryptonote::block_verification_context bvc = AUTO_VAL_INIT(bvc); - m_c.handle_incoming_block(t_serializable_object_to_blob(b), &b, bvc); - bool r = check_block_verification_context(bvc, m_ev_index, b, m_validator); + cryptonote::blobdata bd = t_serializable_object_to_blob(b); + std::vector<cryptonote::block> pblocks; + if (m_c.prepare_handle_incoming_blocks(std::vector<cryptonote::block_complete_entry>(1, {bd, {}}), pblocks)) + { + m_c.handle_incoming_block(bd, &b, bvc); + m_c.cleanup_handle_incoming_blocks(); + } + else + bvc.m_verifivation_failed = true; + bool r = m_validator.check_block_verification_context(bvc, m_ev_index, b); CHECK_AND_NO_ASSERT_MES(r, false, "block verification context check failed"); return r; } @@ -666,7 +607,14 @@ public: log_event("serialized_block"); cryptonote::block_verification_context bvc = AUTO_VAL_INIT(bvc); - m_c.handle_incoming_block(sr_block.data, NULL, bvc); + std::vector<cryptonote::block> pblocks; + if (m_c.prepare_handle_incoming_blocks(std::vector<cryptonote::block_complete_entry>(1, {sr_block.data, {}}), pblocks)) + { + m_c.handle_incoming_block(sr_block.data, NULL, bvc); + m_c.cleanup_handle_incoming_blocks(); + } + else + bvc.m_verifivation_failed = true; cryptonote::block blk; std::stringstream ss; @@ -677,7 +625,7 @@ public: { blk = cryptonote::block(); } - bool r = check_block_verification_context(bvc, m_ev_index, blk, m_validator); + bool r = m_validator.check_block_verification_context(bvc, m_ev_index, blk); CHECK_AND_NO_ASSERT_MES(r, false, "block verification context check failed"); return true; } @@ -701,7 +649,7 @@ public: tx = cryptonote::transaction(); } - bool r = check_tx_verification_context(tvc, tx_added, m_ev_index, tx, m_validator); + bool r = m_validator.check_tx_verification_context(tvc, tx_added, m_ev_index, tx); CHECK_AND_NO_ASSERT_MES(r, false, "transaction verification context check failed"); return true; } @@ -748,7 +696,7 @@ template<typename t_test_class> struct get_test_options { const std::pair<uint8_t, uint64_t> hard_forks[2]; const cryptonote::test_options test_options = { - hard_forks + hard_forks, 0 }; get_test_options():hard_forks{std::make_pair((uint8_t)1, (uint64_t)0), std::make_pair((uint8_t)0, (uint64_t)0)}{} }; @@ -776,7 +724,7 @@ inline bool do_replay_events_get_core(std::vector<test_event_entry>& events, cry // Hardforks can be specified in events. v_hardforks_t hardforks; - cryptonote::test_options test_options_tmp{}; + cryptonote::test_options test_options_tmp{nullptr, 0}; const cryptonote::test_options * test_options_ = >o.test_options; if (extract_hard_forks(events, hardforks)){ hardforks.push_back(std::make_pair((uint8_t)0, (uint64_t)0)); // terminator diff --git a/tests/core_tests/multisig.h b/tests/core_tests/multisig.h index 1e8226d26..10fe6ffe8 100644 --- a/tests/core_tests/multisig.h +++ b/tests/core_tests/multisig.h @@ -84,7 +84,7 @@ template<> struct get_test_options<gen_multisig_tx_validation_base> { const std::pair<uint8_t, uint64_t> hard_forks[3] = {std::make_pair(1, 0), std::make_pair(4, 1), std::make_pair(0, 0)}; const cryptonote::test_options test_options = { - hard_forks + hard_forks, 0 }; }; diff --git a/tests/core_tests/rct.h b/tests/core_tests/rct.h index 72460d98e..00a2bd88c 100644 --- a/tests/core_tests/rct.h +++ b/tests/core_tests/rct.h @@ -83,7 +83,7 @@ template<> struct get_test_options<gen_rct_tx_validation_base> { const std::pair<uint8_t, uint64_t> hard_forks[4] = {std::make_pair(1, 0), std::make_pair(2, 1), std::make_pair(4, 65), std::make_pair(0, 0)}; const cryptonote::test_options test_options = { - hard_forks + hard_forks, 0 }; }; diff --git a/tests/core_tests/wallet_tools.cpp b/tests/core_tests/wallet_tools.cpp index 616774d18..d9cee34c1 100644 --- a/tests/core_tests/wallet_tools.cpp +++ b/tests/core_tests/wallet_tools.cpp @@ -135,7 +135,7 @@ bool wallet_tools::fill_tx_sources(tools::wallet2 * wallet, std::vector<cryptono } } - MINFO("Selected " << i << " from tx: " << dump_keys(td.m_txid.data) + MDEBUG("Selected " << i << " from tx: " << dump_keys(td.m_txid.data) << " ki: " << dump_keys(td.m_key_image.data) << " amnt: " << td.amount() << " rct: " << td.is_rct() diff --git a/tests/difficulty/difficulty.cpp b/tests/difficulty/difficulty.cpp index 9985b8710..11ce0bd73 100644 --- a/tests/difficulty/difficulty.cpp +++ b/tests/difficulty/difficulty.cpp @@ -36,6 +36,7 @@ #include <algorithm> #include <stdexcept> +#include "misc_log_ex.h" #include "cryptonote_config.h" #include "cryptonote_basic/difficulty.h" @@ -82,6 +83,8 @@ static int test_wide_difficulty(const char *filename) } int main(int argc, char *argv[]) { + TRY_ENTRY(); + if (argc < 2) { cerr << "Wrong arguments" << endl; return 1; @@ -136,4 +139,6 @@ int main(int argc, char *argv[]) { data.clear(fstream::badbit); } return 0; + + CATCH_ENTRY_L0("main", 1); } diff --git a/tests/functional_tests/CMakeLists.txt b/tests/functional_tests/CMakeLists.txt index 60060f56f..fd49ba623 100644 --- a/tests/functional_tests/CMakeLists.txt +++ b/tests/functional_tests/CMakeLists.txt @@ -50,6 +50,12 @@ target_link_libraries(functional_tests ${CMAKE_THREAD_LIBS_INIT} ${EXTRA_LIBRARIES}) -add_test( - NAME functional_tests_rpc - COMMAND ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/functional_tests_rpc.py" "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" all) +execute_process(COMMAND ${PYTHON_EXECUTABLE} "-c" "import requests; print('OK')" OUTPUT_VARIABLE REQUESTS_OUTPUT OUTPUT_STRIP_TRAILING_WHITESPACE) +if (REQUESTS_OUTPUT STREQUAL "OK") + add_test( + NAME functional_tests_rpc + COMMAND ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/functional_tests_rpc.py" "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" all) +else() + message(WARNING "functional_tests_rpc skipped, needs the 'requests' python module") + set(CTEST_CUSTOM_TESTS_IGNORE ${CTEST_CUSTOM_TESTS_IGNORE} functional_tests_rpc) +endif() diff --git a/tests/functional_tests/bans.py b/tests/functional_tests/bans.py new file mode 100755 index 000000000..bb3051a6a --- /dev/null +++ b/tests/functional_tests/bans.py @@ -0,0 +1,117 @@ +#!/usr/bin/env python3 + +# Copyright (c) 2019 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. + +import time + +"""Test peer baning RPC calls + +Test the following RPCs: + - set_bans + - get_bans + +""" + +from framework.daemon import Daemon + +class BanTest(): + def run_test(self): + print 'Testing bans' + + daemon = Daemon() + res = daemon.get_bans() + assert 'bans' not in res or len(res.bans) == 0 + + daemon.set_bans([{'host': '1.2.3.4', 'ban': True, 'seconds': 100}]) + res = daemon.get_bans() + assert len(res.bans) == 1 + assert res.bans[0].host == '1.2.3.4' + assert res.bans[0].seconds >= 98 and res.bans[0].seconds <= 100 # allow for slow RPC + + daemon.set_bans([{'host': '5.6.7.8', 'ban': True, 'seconds': 100}]) + res = daemon.get_bans() + assert len(res.bans) == 2 + for i in range(2): + assert res.bans[i].host == '1.2.3.4' or res.bans[i].host == '5.6.7.8' + assert res.bans[i].seconds >= 7 and res.bans[0].seconds <= 100 # allow for slow RPC + + daemon.set_bans([{'host': '1.2.3.4', 'ban': False}]) + res = daemon.get_bans() + assert len(res.bans) == 1 + assert res.bans[0].host == '5.6.7.8' + assert res.bans[0].seconds >= 98 and res.bans[0].seconds <= 100 # allow for slow RPC + + time.sleep(2) + + res = daemon.get_bans() + assert len(res.bans) == 1 + assert res.bans[0].host == '5.6.7.8' + assert res.bans[0].seconds >= 96 and res.bans[0].seconds <= 98 # allow for slow RPC + + daemon.set_bans([{'host': '3.4.5.6', 'ban': False}]) + res = daemon.get_bans() + assert len(res.bans) == 1 + assert res.bans[0].host == '5.6.7.8' + assert res.bans[0].seconds >= 96 and res.bans[0].seconds <= 98 # allow for slow RPC + + daemon.set_bans([{'host': '3.4.5.6', 'ban': True, 'seconds': 2}]) + res = daemon.get_bans() + assert len(res.bans) == 2 + for i in range(2): + assert res.bans[i].host == '5.6.7.8' or res.bans[i].host == '3.4.5.6' + if res.bans[i].host == '5.6.7.8': + assert res.bans[i].seconds >= 96 and res.bans[0].seconds <= 98 # allow for slow RPC + else: + assert res.bans[i].seconds >= 1 and res.bans[0].seconds <= 2 # allow for slow RPC + + time.sleep(2) + res = daemon.get_bans() + assert len(res.bans) == 1 + assert res.bans[0].host == '5.6.7.8' + assert res.bans[0].seconds >= 94 and res.bans[0].seconds <= 96 # allow for slow RPC + + daemon.set_bans([{'host': '5.6.7.8', 'ban': True, 'seconds': 20}]) + res = daemon.get_bans() + assert len(res.bans) == 1 + assert res.bans[0].host == '5.6.7.8' + assert res.bans[0].seconds >= 18 and res.bans[0].seconds <= 20 # allow for slow RPC + + daemon.set_bans([{'host': '5.6.7.8', 'ban': True, 'seconds': 200}]) + res = daemon.get_bans() + assert len(res.bans) == 1 + assert res.bans[0].host == '5.6.7.8' + assert res.bans[0].seconds >= 198 and res.bans[0].seconds <= 200 # allow for slow RPC + + daemon.set_bans([{'host': '5.6.7.8', 'ban': False}]) + res = daemon.get_bans() + assert 'bans' not in res or len(res.bans) == 0 + + +if __name__ == '__main__': + BanTest().run_test() diff --git a/tests/functional_tests/blockchain.py b/tests/functional_tests/blockchain.py index d805fccda..6376b86d0 100755 --- a/tests/functional_tests/blockchain.py +++ b/tests/functional_tests/blockchain.py @@ -45,7 +45,15 @@ from framework.daemon import Daemon class BlockchainTest(): def run_test(self): + self.reset() self._test_generateblocks(5) + self._test_alt_chains() + + def reset(self): + print 'Resetting blockchain' + daemon = Daemon() + daemon.pop_blocks(1000) + daemon.flush_txpool() def _test_generateblocks(self, blocks): assert blocks >= 2 @@ -60,8 +68,8 @@ class BlockchainTest(): prev_block = res_info.top_block_hash res_height = daemon.get_height() assert res_height.height == height - assert int(res_info.wide_cumulative_difficulty) == (res_info.cumulative_difficulty_top64 << 64) + res_info.cumulative_difficulty - cumulative_difficulty = int(res_info.wide_cumulative_difficulty) + assert int(res_info.wide_cumulative_difficulty, 16) == (res_info.cumulative_difficulty_top64 << 64) + res_info.cumulative_difficulty + cumulative_difficulty = int(res_info.wide_cumulative_difficulty, 16) # we should not see a block at height ok = False @@ -90,11 +98,11 @@ class BlockchainTest(): assert block_header.orphan_status == False assert block_header.depth == blocks - n - 1 assert block_header.prev_hash == prev_block, prev_block - assert int(block_header.wide_difficulty) == (block_header.difficulty_top64 << 64) + block_header.difficulty - assert int(block_header.wide_cumulative_difficulty) == (block_header.cumulative_difficulty_top64 << 64) + block_header.cumulative_difficulty + assert int(block_header.wide_difficulty, 16) == (block_header.difficulty_top64 << 64) + block_header.difficulty + assert int(block_header.wide_cumulative_difficulty, 16) == (block_header.cumulative_difficulty_top64 << 64) + block_header.cumulative_difficulty assert block_header.reward >= 600000000000 # tail emission - cumulative_difficulty += int(block_header.wide_difficulty) - assert cumulative_difficulty == int(block_header.wide_cumulative_difficulty) + cumulative_difficulty += int(block_header.wide_difficulty, 16) + assert cumulative_difficulty == int(block_header.wide_cumulative_difficulty, 16) assert block_header.block_size > 0 assert block_header.block_weight >= block_header.block_size assert block_header.long_term_weight > 0 @@ -122,7 +130,7 @@ class BlockchainTest(): assert res_getblocktemplate.expected_reward >= 600000000000 assert len(res_getblocktemplate.blocktemplate_blob) > 0 assert len(res_getblocktemplate.blockhashing_blob) > 0 - assert int(res_getblocktemplate.wide_difficulty) == (res_getblocktemplate.difficulty_top64 << 64) + res_getblocktemplate.difficulty + assert int(res_getblocktemplate.wide_difficulty, 16) == (res_getblocktemplate.difficulty_top64 << 64) + res_getblocktemplate.difficulty # diff etc should be the same assert res_getblocktemplate.prev_hash == res_info.top_block_hash @@ -152,6 +160,163 @@ class BlockchainTest(): except: ok = True assert ok + # get transactions + res = daemon.get_info() + assert res.height == height + blocks - 1 + nblocks = height + blocks - 1 + res = daemon.getblockheadersrange(0, nblocks - 1) + assert len(res.headers) == nblocks + assert res.headers[-1] == block_header + txids = [x.miner_tx_hash for x in res.headers] + res = daemon.get_transactions(txs_hashes = txids) + assert len(res.txs) == nblocks + assert not 'missed_txs' in res or len(res.missed_txs) == 0 + running_output_index = 0 + for i in range(len(txids)): + tx = res.txs[i] + assert tx.tx_hash == txids[i] + assert not tx.double_spend_seen + assert not tx.in_pool + assert tx.block_height == i + if i > 0: + for idx in tx.output_indices: + assert idx == running_output_index + running_output_index += 1 + res_out = daemon.get_outs([{'amount': 0, 'index': i} for i in tx.output_indices], get_txid = True) + assert len(res_out.outs) == len(tx.output_indices) + for out in res_out.outs: + assert len(out.key) == 64 + assert len(out.mask) == 64 + assert not out.unlocked + assert out.height == i + 1 + assert out.txid == txids[i + 1] + + for i in range(height + nblocks - 1): + res_sum = daemon.get_coinbase_tx_sum(i, 1) + res_header = daemon.getblockheaderbyheight(i) + assert res_sum.emission_amount == res_header.block_header.reward + + res = daemon.get_coinbase_tx_sum(0, 1) + assert res.emission_amount == 17592186044415 + assert res.fee_amount == 0 + sum_blocks = height + nblocks - 1 + res = daemon.get_coinbase_tx_sum(0, sum_blocks) + extrapolated = 17592186044415 + 17592186044415 * 2 * (sum_blocks - 1) + assert res.emission_amount < extrapolated and res.emission_amount > extrapolated - 1e12 + assert res.fee_amount == 0 + sum_blocks_emission = res.emission_amount + res = daemon.get_coinbase_tx_sum(1, sum_blocks) + assert res.emission_amount == sum_blocks_emission - 17592186044415 + assert res.fee_amount == 0 + + res = daemon.get_output_distribution([0, 1, 17592186044415], 0, 0) + assert len(res.distributions) == 3 + for a in range(3): + assert res.distributions[a].amount == [0, 1, 17592186044415][a] + assert res.distributions[a].start_height == 0 + assert res.distributions[a].base == 0 + assert len(res.distributions[a].distribution) == height + nblocks - 1 + assert res.distributions[a].binary == False + for i in range(height + nblocks - 1): + assert res.distributions[a].distribution[i] == (1 if i > 0 and a == 0 else 1 if a == 2 and i == 0 else 0) + + res = daemon.get_output_histogram([], min_count = 0, max_count = 0) + assert len(res.histogram) == 2 + for i in range(2): + assert res.histogram[i].amount in [0, 17592186044415] + assert res.histogram[i].total_instances in [height + nblocks - 2, 1] + assert res.histogram[i].unlocked_instances == 0 + assert res.histogram[i].recent_instances == 0 + + def _test_alt_chains(self): + print('Testing alt chains') + daemon = Daemon() + res = daemon.get_alt_blocks_hashes() + starting_alt_blocks = res.blks_hashes if 'blks_hashes' in res else [] + res = daemon.get_info() + root_block_hash = res.top_block_hash + height = res.height + prev_hash = res.top_block_hash + res_template = daemon.getblocktemplate('42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm') + nonce = 0 + + # 5 siblings + alt_blocks = [None] * 5 + for i in range(len(alt_blocks)): + res = daemon.generateblocks('42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm', 1, prev_block = prev_hash, starting_nonce = nonce) + assert res.height == height + assert len(res.blocks) == 1 + txid = res.blocks[0] + res = daemon.getblockheaderbyhash(txid) + nonce = res.block_header.nonce + print('mined ' + ('alt' if res.block_header.orphan_status else 'tip') + ' block ' + str(height) + ', nonce ' + str(nonce)) + assert res.block_header.prev_hash == prev_hash + assert res.block_header.orphan_status == (i > 0) + alt_blocks[i] = txid + nonce += 1 + + print 'mining 3 on 1' + # three more on [1] + chain1 = [] + res = daemon.generateblocks('42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm', 3, prev_block = alt_blocks[1], starting_nonce = nonce) + assert res.height == height + 3 + assert len(res.blocks) == 3 + blk_hash = res.blocks[2] + res = daemon.getblockheaderbyhash(blk_hash) + nonce = res.block_header.nonce + assert not res.block_header.orphan_status + nonce += 1 + chain1.append(blk_hash) + chain1.append(res.block_header.prev_hash) + + print('Checking alt blocks match') + res = daemon.get_alt_blocks_hashes() + assert len(res.blks_hashes) == len(starting_alt_blocks) + 4 + for txid in alt_blocks: + assert txid in res.blks_hashes or txid == alt_blocks[1] + + print 'mining 4 on 3' + # 4 more on [3], the chain will reorg when we mine the 4th + top_block_hash = blk_hash + prev_block = alt_blocks[3] + for i in range(4): + res = daemon.generateblocks('42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm', 1, prev_block = prev_block) + assert res.height == height + 1 + i + assert len(res.blocks) == 1 + prev_block = res.blocks[-1] + res = daemon.getblockheaderbyhash(res.blocks[-1]) + assert res.block_header.orphan_status == (i < 3) + + res = daemon.get_info() + assert res.height == ((height + 4) if i < 3 else height + 5) + assert res.top_block_hash == (top_block_hash if i < 3 else prev_block) + + res = daemon.get_info() + assert res.height == height + 5 + assert res.top_block_hash == prev_block + + print('Checking alt blocks match') + res = daemon.get_alt_blocks_hashes() + blks_hashes = res.blks_hashes + assert len(blks_hashes) == len(starting_alt_blocks) + 7 + for txid in alt_blocks: + assert txid in blks_hashes or txid == alt_blocks[3] + for txid in chain1: + assert txid in blks_hashes + + res = daemon.get_alternate_chains() + assert len(res.chains) == 4 + tips = [chain.block_hash for chain in res.chains] + for txid in tips: + assert txid in blks_hashes + for chain in res.chains: + assert chain.length in [1, 4] + assert chain.length == len(chain.block_hashes) + assert chain.height == height + chain.length - 1 # all happen start at the same height + assert chain.main_chain_parent_block == root_block_hash + for txid in [alt_blocks[0], alt_blocks[2], alt_blocks[4]]: + assert len([chain for chain in res.chains if chain.block_hash == txid]) == 1 + if __name__ == '__main__': BlockchainTest().run_test() diff --git a/tests/functional_tests/cold_signing.py b/tests/functional_tests/cold_signing.py index 6895aec60..59a879e0a 100755 --- a/tests/functional_tests/cold_signing.py +++ b/tests/functional_tests/cold_signing.py @@ -38,10 +38,17 @@ from framework.wallet import Wallet class ColdSigningTest(): def run_test(self): + self.reset() self.create(0) self.mine() self.transfer() + def reset(self): + print 'Resetting blockchain' + daemon = Daemon() + daemon.pop_blocks(1000) + daemon.flush_txpool() + def create(self, idx): print 'Creating hot and cold wallet' @@ -89,6 +96,12 @@ class ColdSigningTest(): dst = {'address': '42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm', 'amount': 1000000000000} payment_id = '1234500000012345abcde00000abcdeff1234500000012345abcde00000abcde' + self.hot_wallet.refresh() + res = self.hot_wallet.export_outputs() + self.cold_wallet.import_outputs(res.outputs_data_hex) + res = self.cold_wallet.export_key_images(True) + self.hot_wallet.import_key_images(res.signed_key_images, offset = res.offset) + res = self.hot_wallet.transfer([dst], ring_size = 11, payment_id = payment_id, get_tx_key = False) assert len(res.tx_hash) == 32*2 txid = res.tx_hash @@ -104,6 +117,22 @@ class ColdSigningTest(): unsigned_txset = res.unsigned_txset print 'Signing transaction with cold wallet' + res = self.cold_wallet.describe_transfer(unsigned_txset = unsigned_txset) + assert len(res.desc) == 1 + desc = res.desc[0] + assert desc.amount_in >= amount + fee + assert desc.amount_out == desc.amount_in - fee + assert desc.ring_size == 11 + assert desc.unlock_time == 0 + assert desc.payment_id == payment_id + assert desc.change_amount == desc.amount_in - 1000000000000 - fee + assert desc.change_address == '42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm' + assert desc.fee == fee + assert len(desc.recipients) == 1 + rec = desc.recipients[0] + assert rec.address == '42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm' + assert rec.amount == 1000000000000 + res = self.cold_wallet.sign_transfer(unsigned_txset) assert len(res.signed_txset) > 0 signed_txset = res.signed_txset diff --git a/tests/functional_tests/functional_tests_rpc.py b/tests/functional_tests/functional_tests_rpc.py index f2fef7e95..e754b4e33 100755 --- a/tests/functional_tests/functional_tests_rpc.py +++ b/tests/functional_tests/functional_tests_rpc.py @@ -98,6 +98,7 @@ FAIL = [] for test in tests: try: print('[TEST STARTED] ' + test) + sys.stdout.flush() cmd = [python, srcdir + '/' + test + ".py"] subprocess.check_call(cmd) PASS.append(test) @@ -133,3 +134,5 @@ if len(FAIL) == 0: print('Done, ' + str(len(PASS)) + '/' + str(len(tests)) + ' tests passed') else: print('Done, ' + str(len(FAIL)) + '/' + str(len(tests)) + ' tests failed: ' + string.join(FAIL, ', ')) + +sys.exit(0 if len(FAIL) == 0 else 1) diff --git a/tests/functional_tests/mining.py b/tests/functional_tests/mining.py index 1b189beb2..78dc68640 100755 --- a/tests/functional_tests/mining.py +++ b/tests/functional_tests/mining.py @@ -43,9 +43,16 @@ from framework.wallet import Wallet class MiningTest(): def run_test(self): + self.reset() self.create() self.mine() + def reset(self): + print 'Resetting blockchain' + daemon = Daemon() + daemon.pop_blocks(1000) + daemon.flush_txpool() + def create(self): print 'Creating wallet' wallet = Wallet() diff --git a/tests/functional_tests/multisig.py b/tests/functional_tests/multisig.py index a0e8551cd..476e3a02d 100755 --- a/tests/functional_tests/multisig.py +++ b/tests/functional_tests/multisig.py @@ -38,6 +38,7 @@ from framework.wallet import Wallet class MultisigTest(): def run_test(self): + self.reset() self.mine('493DsrfJPqiN3Suv9RcRDoZEbQtKZX1sNcGPA3GhkKYEEmivk8kjQrTdRdVc4ZbmzWJuE157z9NNUKmF2VDfdYDR3CziGMk', 5) self.mine('42jSRGmmKN96V2j3B8X2DbiNThBXW1tSi1rW1uwkqbyURenq3eC3yosNm8HEMdHuWwKMFGzMUB3RCTvcTaW9kHpdRPP7p5y', 5) self.mine('47fF32AdrmXG84FcPY697uZdd42pMMGiH5UpiTRTt3YX2pZC7t7wkzEMStEicxbQGRfrYvAAYxH6Fe8rnD56EaNwUgxRd53', 5) @@ -68,6 +69,12 @@ class MultisigTest(): self.import_multisig_info([0, 1, 2, 3], 6) self.check_transaction(txid) + def reset(self): + print 'Resetting blockchain' + daemon = Daemon() + daemon.pop_blocks(1000) + daemon.flush_txpool() + def mine(self, address, blocks): print("Mining some blocks") daemon = Daemon() @@ -129,6 +136,7 @@ class MultisigTest(): addresses.append(res.address) for i in range(N_total): assert addresses[i] == expected_address + self.wallet_address = expected_address for i in range(N_total): res = self.wallet[i].is_multisig() @@ -181,6 +189,22 @@ class MultisigTest(): for i in range(len(signers[1:])): print('Signing multisig transaction with wallet ' + str(signers[i+1])) + res = self.wallet[signers[i+1]].describe_transfer(multisig_txset = multisig_txset) + assert len(res.desc) == 1 + desc = res.desc[0] + assert desc.amount_in >= amount + fee + assert desc.amount_out == desc.amount_in - fee + assert desc.ring_size == 11 + assert desc.unlock_time == 0 + assert desc.payment_id == '0000000000000000' + assert desc.change_amount == desc.amount_in - 1000000000000 - fee + assert desc.change_address == self.wallet_address + assert desc.fee == fee + assert len(desc.recipients) == 1 + rec = desc.recipients[0] + assert rec.address == '42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm' + assert rec.amount == 1000000000000 + res = self.wallet[signers[i+1]].sign_multisig(multisig_txset) multisig_txset = res.tx_data_hex assert len(res.tx_hash_list if 'tx_hash_list' in res else []) == (i == len(signers[1:]) - 1) diff --git a/tests/functional_tests/proofs.py b/tests/functional_tests/proofs.py index 0a0b6304d..844131095 100755 --- a/tests/functional_tests/proofs.py +++ b/tests/functional_tests/proofs.py @@ -38,6 +38,7 @@ from framework.wallet import Wallet class ProofsTest(): def run_test(self): + self.reset() self.mine('42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm', 80) self.create_wallets() txid, tx_key, amount = self.transfer() @@ -45,6 +46,12 @@ class ProofsTest(): self.check_tx_proof(txid, amount) self.check_reserve_proof() + def reset(self): + print 'Resetting blockchain' + daemon = Daemon() + daemon.pop_blocks(1000) + daemon.flush_txpool() + def mine(self, address, blocks): print("Mining some blocks") daemon = Daemon() diff --git a/tests/functional_tests/transfer.py b/tests/functional_tests/transfer.py index b7a85f1d6..1ff641d1f 100755 --- a/tests/functional_tests/transfer.py +++ b/tests/functional_tests/transfer.py @@ -29,6 +29,7 @@ # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. import time +import json """Test simple transfers """ @@ -38,10 +39,19 @@ from framework.wallet import Wallet class TransferTest(): def run_test(self): + self.reset() self.create() self.mine() self.transfer() self.check_get_bulk_payments() + self.check_double_spend_detection() + self.sweep_single() + + def reset(self): + print 'Resetting blockchain' + daemon = Daemon() + daemon.pop_blocks(1000) + daemon.flush_txpool() def create(self): print 'Creating wallets' @@ -62,9 +72,14 @@ class TransferTest(): print("Mining some blocks") daemon = Daemon() + res = daemon.get_info() + height = res.height + daemon.generateblocks('42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm', 80) for i in range(len(self.wallet)): self.wallet[i].refresh() + res = self.wallet[i].get_height() + assert res.height == height + 80 def transfer(self): daemon = Daemon() @@ -169,6 +184,27 @@ class TransferTest(): assert e.double_spend_seen == False assert e.confirmations == 1 + res = self.wallet[0].get_height() + wallet_height = res.height + res = self.wallet[0].get_transfer_by_txid(txid) + assert len(res.transfers) == 1 + assert res.transfers[0] == res.transfer + t = res.transfer + assert t.txid == txid + assert t.payment_id == payment_id + assert t.height == wallet_height - 1 + assert t.timestamp > 0 + assert t.amount == 0 # to self, so it's just "pay a fee" really + assert t.fee == fee + assert t.note == '' + assert len(t.destinations) == 1 + assert t.destinations[0] == {'address': '42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm', 'amount': 1000000000000} + assert t.type == 'out' + assert t.unlock_time == 0 + assert t.address == '42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm' + assert t.double_spend_seen == False + assert t.confirmations == 1 + res = self.wallet[0].get_balance() assert res.balance == running_balances[0] assert res.unlocked_balance <= res.balance @@ -483,5 +519,113 @@ class TransferTest(): res = self.wallet[2].get_bulk_payments(payment_ids = ['1'*64, '1234500000012345abcde00000abcdeff1234500000012345abcde00000abcde', '2'*64]) assert len(res.payments) >= 1 # one tx was sent + def check_double_spend_detection(self): + print('Checking double spend detection') + txes = [[None, None], [None, None]] + for i in range(2): + self.wallet[0].restore_deterministic_wallet(seed = 'velvet lymph giddy number token physics poetry unquoted nibs useful sabotage limits benches lifestyle eden nitrogen anvil fewest avoid batch vials washing fences goat unquoted') + self.wallet[0].refresh() + res = self.wallet[0].get_balance() + unlocked_balance = res.unlocked_balance + res = self.wallet[0].sweep_all(address = '44Kbx4sJ7JDRDV5aAhLJzQCjDz2ViLRduE3ijDZu3osWKBjMGkV1XPk4pfDUMqt1Aiezvephdqm6YD19GKFD9ZcXVUTp6BW', do_not_relay = True, get_tx_hex = True) + assert len(res.tx_hash_list) == 1 + assert len(res.tx_hash_list[0]) == 32*2 + txes[i][0] = res.tx_hash_list[0] + assert len(res.fee_list) == 1 + assert res.fee_list[0] > 0 + assert len(res.amount_list) == 1 + assert res.amount_list[0] == unlocked_balance - res.fee_list[0] + assert len(res.tx_blob_list) > 0 + assert len(res.tx_blob_list[0]) > 0 + assert not 'tx_metadata_list' in res or len(res.tx_metadata_list) == 0 + assert not 'multisig_txset' in res or len(res.multisig_txset) == 0 + assert not 'unsigned_txset' in res or len(res.unsigned_txset) == 0 + assert len(res.tx_blob_list) == 1 + txes[i][1] = res.tx_blob_list[0] + + daemon = Daemon() + res = daemon.send_raw_transaction(txes[0][1]) + assert res.not_relayed == False + assert res.low_mixin == False + assert res.double_spend == False + assert res.invalid_input == False + assert res.invalid_output == False + assert res.too_big == False + assert res.overspend == False + assert res.fee_too_low == False + assert res.not_rct == False + + res = daemon.get_transactions([txes[0][0]]) + assert len(res.txs) >= 1 + tx = [tx for tx in res.txs if tx.tx_hash == txes[0][0]][0] + assert tx.in_pool + assert not tx.double_spend_seen + + res = daemon.send_raw_transaction(txes[1][1]) + assert res.not_relayed == False + assert res.low_mixin == False + assert res.double_spend == True + assert res.invalid_input == False + assert res.invalid_output == False + assert res.too_big == False + assert res.overspend == False + assert res.fee_too_low == False + assert res.not_rct == False + + res = daemon.get_transactions([txes[0][0]]) + assert len(res.txs) >= 1 + tx = [tx for tx in res.txs if tx.tx_hash == txes[0][0]][0] + assert tx.in_pool + assert tx.double_spend_seen + + def sweep_single(self): + daemon = Daemon() + + print("Sending single output") + + daemon.generateblocks('42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm', 1) + self.wallet[0].refresh() + res = self.wallet[0].incoming_transfers(transfer_type = 'available') + for t in res.transfers: + assert not t.spent + assert len(res.transfers) > 8 # we mined a lot + index = 8 + assert not res.transfers[index].spent + assert res.transfers[index].amount > 0 + ki = res.transfers[index].key_image + amount = res.transfers[index].amount + daemon.generateblocks('42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm', 10) # ensure unlocked + self.wallet[0].refresh() + res = self.wallet[0].get_balance() + balance = res.balance + res = self.wallet[0].incoming_transfers(transfer_type = 'all') + res = self.wallet[0].sweep_single('44Kbx4sJ7JDRDV5aAhLJzQCjDz2ViLRduE3ijDZu3osWKBjMGkV1XPk4pfDUMqt1Aiezvephdqm6YD19GKFD9ZcXVUTp6BW', key_image = ki) + assert len(res.tx_hash) == 64 + tx_hash = res.tx_hash + daemon.generateblocks('44Kbx4sJ7JDRDV5aAhLJzQCjDz2ViLRduE3ijDZu3osWKBjMGkV1XPk4pfDUMqt1Aiezvephdqm6YD19GKFD9ZcXVUTp6BW', 1) + self.wallet[0].refresh() + res = self.wallet[0].get_balance() + new_balance = res.balance + res = daemon.get_transactions([tx_hash], decode_as_json = True) + assert len(res.txs) == 1 + tx = res.txs[0] + assert tx.tx_hash == tx_hash + assert not tx.in_pool + assert len(tx.as_json) > 0 + try: + j = json.loads(tx.as_json) + except: + j = None + assert j + assert new_balance == balance - amount + assert len(j['vin']) == 1 + assert j['vin'][0]['key']['k_image'] == ki + self.wallet[0].refresh() + res = self.wallet[0].incoming_transfers(transfer_type = 'available') + assert len([t for t in res.transfers if t.key_image == ki]) == 0 + res = self.wallet[0].incoming_transfers(transfer_type = 'unavailable') + assert len([t for t in res.transfers if t.key_image == ki]) == 1 + + if __name__ == '__main__': TransferTest().run_test() diff --git a/tests/functional_tests/txpool.py b/tests/functional_tests/txpool.py index 71109c9e5..d74395f10 100755 --- a/tests/functional_tests/txpool.py +++ b/tests/functional_tests/txpool.py @@ -38,10 +38,17 @@ from framework.wallet import Wallet class TransferTest(): def run_test(self): + self.reset() self.create() self.mine() self.check_txpool() + def reset(self): + print 'Resetting blockchain' + daemon = Daemon() + daemon.pop_blocks(1000) + daemon.flush_txpool() + def create(self): print 'Creating wallet' wallet = Wallet() diff --git a/tests/functional_tests/wallet_address.py b/tests/functional_tests/wallet_address.py index 66a1633ca..8a55521c6 100755 --- a/tests/functional_tests/wallet_address.py +++ b/tests/functional_tests/wallet_address.py @@ -1,4 +1,5 @@ #!/usr/bin/env python3 +#encoding=utf-8 # Copyright (c) 2019 The Monero Project # @@ -38,13 +39,23 @@ Test the following RPCs: """ from framework.wallet import Wallet +from framework.daemon import Daemon class WalletAddressTest(): def run_test(self): + self.reset() self.create() self.check_main_address() self.check_keys() self.create_subaddresses() + self.open_close() + self.languages() + + def reset(self): + print 'Resetting blockchain' + daemon = Daemon() + daemon.pop_blocks(1000) + daemon.flush_txpool() def create(self): print 'Creating wallet' @@ -148,5 +159,52 @@ class WalletAddressTest(): res = wallet.get_address_index('82pP87g1Vkd3LUMssBCumk3MfyEsFqLAaGDf6oxddu61EgSFzt8gCwUD4tr3kp9TUfdPs2CnpD7xLZzyC1Ei9UsW3oyCWDf') assert res.index == {'major': 1, 'minor': 0} + def open_close(self): + print 'Testing open/close' + wallet = Wallet() + + res = wallet.get_address() + assert res.address == '42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm' + + wallet.close_wallet() + ok = False + try: res = wallet.get_address() + except: ok = True + assert ok + + wallet.restore_deterministic_wallet(seed = 'peeled mixture ionic radar utopia puddle buying illness nuns gadget river spout cavernous bounced paradise drunk looking cottage jump tequila melting went winter adjust spout') + res = wallet.get_address() + assert res.address == '44Kbx4sJ7JDRDV5aAhLJzQCjDz2ViLRduE3ijDZu3osWKBjMGkV1XPk4pfDUMqt1Aiezvephdqm6YD19GKFD9ZcXVUTp6BW' + + wallet.close_wallet() + ok = False + try: wallet.get_address() + except: ok = True + assert ok + + wallet.restore_deterministic_wallet(seed = 'velvet lymph giddy number token physics poetry unquoted nibs useful sabotage limits benches lifestyle eden nitrogen anvil fewest avoid batch vials washing fences goat unquoted') + res = wallet.get_address() + assert res.address == '42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm' + + def languages(self): + print('Testing languages') + wallet = Wallet() + res = wallet.get_languages() + assert 'English' in res.languages + assert 'English' in res.languages_local + assert 'Dutch' in res.languages + assert 'Nederlands' in res.languages_local + assert 'Japanese' in res.languages + assert u'日本語' in res.languages_local + try: wallet.close_wallet() + except: pass + languages = res.languages + for language in languages: + print 'Creating ' + str(language) + ' wallet' + wallet.create_wallet(filename = '', language = language) + res = wallet.query_key('mnemonic') + wallet.close_wallet() + + if __name__ == '__main__': WalletAddressTest().run_test() diff --git a/tests/hash-target.cpp b/tests/hash-target.cpp index 12acc5a67..1e988c302 100644 --- a/tests/hash-target.cpp +++ b/tests/hash-target.cpp @@ -32,6 +32,7 @@ #include <cstdlib> #include <cstring> #include <limits> +#include "misc_log_ex.h" #include "crypto/hash.h" #include "cryptonote_basic/difficulty.h" @@ -39,6 +40,7 @@ using namespace std; using cryptonote::check_hash; int main(int argc, char *argv[]) { + TRY_ENTRY(); crypto::hash h; for (cryptonote::difficulty_type diff = 1;; diff += 1 + (diff >> 8)) { for (uint16_t b = 0; b < 256; b++) { @@ -83,4 +85,5 @@ int main(int argc, char *argv[]) { } } return 0; + CATCH_ENTRY_L0("main", 1); } diff --git a/tests/hash/main.cpp b/tests/hash/main.cpp index adf1bd9c4..d62098a60 100644 --- a/tests/hash/main.cpp +++ b/tests/hash/main.cpp @@ -35,6 +35,7 @@ #include <string> #include <cfenv> +#include "misc_log_ex.h" #include "warnings.h" #include "crypto/hash.h" #include "crypto/variant2_int_sqrt.h" @@ -89,6 +90,8 @@ int test_variant2_int_sqrt(); int test_variant2_int_sqrt_ref(); int main(int argc, char *argv[]) { + TRY_ENTRY(); + hash_f *f; hash_func *hf; fstream input; @@ -183,6 +186,7 @@ int main(int argc, char *argv[]) { } } return error ? 1 : 0; + CATCH_ENTRY_L0("main", 1); } #if defined(__x86_64__) || (defined(_MSC_VER) && defined(_WIN64)) diff --git a/tests/libwallet_api_tests/main.cpp b/tests/libwallet_api_tests/main.cpp index 02faae50d..c34da04b7 100644 --- a/tests/libwallet_api_tests/main.cpp +++ b/tests/libwallet_api_tests/main.cpp @@ -1139,6 +1139,8 @@ TEST_F(WalletManagerMainnetTest, RecoverAndRefreshWalletMainNetAsync) int main(int argc, char** argv) { + TRY_ENTRY(); + tools::on_startup(); // we can override default values for "TESTNET_DAEMON_ADDRESS" and "WALLETS_ROOT_DIR" @@ -1173,4 +1175,5 @@ int main(int argc, char** argv) ::testing::InitGoogleTest(&argc, argv); Monero::WalletManagerFactory::setLogLevel(Monero::WalletManagerFactory::LogLevel_Max); return RUN_ALL_TESTS(); + CATCH_ENTRY_L0("main", 1); } diff --git a/tests/trezor/daemon.cpp b/tests/trezor/daemon.cpp index 5e987793a..41af93f3f 100644 --- a/tests/trezor/daemon.cpp +++ b/tests/trezor/daemon.cpp @@ -101,6 +101,9 @@ void mock_daemon::load_params(boost::program_options::variables_map const & vm) mock_daemon::~mock_daemon() { + if(m_http_client.is_connected()) + m_http_client.disconnect(); + if (!m_terminated) { try @@ -134,11 +137,14 @@ void mock_daemon::init() if(m_http_client.is_connected()) m_http_client.disconnect(); - CHECK_AND_ASSERT_THROW_MES(m_http_client.set_server(rpc_addr(), boost::none), "RPC client init fail"); + CHECK_AND_ASSERT_THROW_MES(m_http_client.set_server(rpc_addr(), boost::none, epee::net_utils::ssl_support_t::e_ssl_support_disabled), "RPC client init fail"); } void mock_daemon::deinit() { + if(m_http_client.is_connected()) + m_http_client.disconnect(); + try { m_rpc_server.deinit(); diff --git a/tests/trezor/trezor_tests.cpp b/tests/trezor/trezor_tests.cpp index 8d5540328..a867a4047 100644 --- a/tests/trezor/trezor_tests.cpp +++ b/tests/trezor/trezor_tests.cpp @@ -60,13 +60,14 @@ namespace #define HW_TREZOR_NAME "Trezor" #define TREZOR_ACCOUNT_ORDERING &m_miner_account, &m_alice_account, &m_bob_account, &m_eve_account -#define TREZOR_COMMON_TEST_CASE(genclass, CORE, BASE) \ +#define TREZOR_COMMON_TEST_CASE(genclass, CORE, BASE) do { \ rollback_chain(CORE, BASE.head_block()); \ { \ genclass ctest; \ BASE.fork(ctest); \ GENERATE_AND_PLAY_INSTANCE(genclass, ctest, *(CORE)); \ - } + } \ +} while(0) #define TREZOR_SETUP_CHAIN(NAME) do { \ ++tests_count; \ @@ -83,6 +84,11 @@ static device_trezor_test *ensure_trezor_test_device(); static void rollback_chain(cryptonote::core * core, const cryptonote::block & head); static void setup_chain(cryptonote::core * core, gen_trezor_base & trezor_base, std::string chain_path, bool fix_chain, const po::variables_map & vm_core); +static long get_env_long(const char * flag_name, boost::optional<long> def = boost::none){ + const char *env_data = getenv(flag_name); + return env_data ? atol(env_data) : (def ? def.get() : 0); +} + int main(int argc, char* argv[]) { TRY_ENTRY(); @@ -127,12 +133,13 @@ int main(int argc, char* argv[]) const bool heavy_tests = command_line::get_arg(vm, arg_heavy_tests); const bool fix_chain = command_line::get_arg(vm, arg_fix_chain); - hw::register_device(HW_TREZOR_NAME, ensure_trezor_test_device()); - // hw::trezor::register_all(); // We use our shim instead. + hw::register_device(HW_TREZOR_NAME, ensure_trezor_test_device()); // shim device for call tracking // Bootstrapping common chain & accounts - const uint8_t initial_hf = 9; - const uint8_t max_hf = 10; + const uint8_t initial_hf = (uint8_t)get_env_long("TEST_MIN_HF", 11); + const uint8_t max_hf = (uint8_t)get_env_long("TEST_MAX_HF", 11); + MINFO("Test versions " << MONERO_RELEASE_NAME << "' (v" << MONERO_VERSION_FULL << ")"); + MINFO("Testing hardforks [" << (int)initial_hf << ", " << (int)max_hf << "]"); cryptonote::core core_obj(nullptr); cryptonote::core * const core = &core_obj; @@ -150,16 +157,20 @@ int main(int argc, char* argv[]) mock_daemon::default_options(vm_core); // Transaction tests - for(uint8_t hf=initial_hf; hf <= max_hf; ++hf) + for(uint8_t hf=initial_hf; hf <= max_hf + 1; ++hf) { - MDEBUG("Transaction tests for HF " << (int)hf); - if (hf > initial_hf) + if (hf > initial_hf || hf > max_hf) { daemon->stop_and_deinit(); daemon = nullptr; trezor_base.daemon(nullptr); + if (hf > max_hf) + { + break; + } } + MDEBUG("Transaction tests for HF " << (int)hf); trezor_base.set_hard_fork(hf); TREZOR_SETUP_CHAIN(std::string("HF") + std::to_string((int)hf)); @@ -196,7 +207,6 @@ int main(int argc, char* argv[]) TREZOR_COMMON_TEST_CASE(gen_trezor_many_utxo, core, trezor_base); } - daemon->stop(); core->deinit(); el::Level level = (failed_tests.empty() ? el::Level::Info : el::Level::Error); MLOG(level, "\nREPORT:"); @@ -225,6 +235,7 @@ static void rollback_chain(cryptonote::core * core, const cryptonote::block & he crypto::hash head_hash = get_block_hash(head), cur_hash{}; uint64_t height = get_block_height(head), cur_height=0; + MDEBUG("Rollbacking to " << height << " to hash " << head_hash); do { core->get_blockchain_top(cur_height, cur_hash); @@ -293,7 +304,7 @@ static bool init_core_replay_events(std::vector<test_event_entry>& events, crypt // Hardforks can be specified in events. v_hardforks_t hardforks; - cryptonote::test_options test_options_tmp{}; + cryptonote::test_options test_options_tmp{nullptr, 0}; const cryptonote::test_options * test_options_ = >o.test_options; if (extract_hard_forks(events, hardforks)){ hardforks.push_back(std::make_pair((uint8_t)0, (uint64_t)0)); // terminator @@ -593,7 +604,7 @@ gen_trezor_base::gen_trezor_base(){ gen_trezor_base::gen_trezor_base(const gen_trezor_base &other): m_generator(other.m_generator), m_bt(other.m_bt), m_miner_account(other.m_miner_account), m_bob_account(other.m_bob_account), m_alice_account(other.m_alice_account), m_eve_account(other.m_eve_account), - m_hard_forks(other.m_hard_forks), m_trezor(other.m_trezor), m_rct_config(other.m_rct_config), + m_hard_forks(other.m_hard_forks), m_trezor(other.m_trezor), m_rct_config(other.m_rct_config), m_top_hard_fork(other.m_top_hard_fork), m_heavy_tests(other.m_heavy_tests), m_test_get_tx_key(other.m_test_get_tx_key), m_live_refresh_enabled(other.m_live_refresh_enabled), m_network_type(other.m_network_type), m_daemon(other.m_daemon) { @@ -625,6 +636,7 @@ void gen_trezor_base::fork(gen_trezor_base & other) other.m_events = m_events; other.m_head = m_head; other.m_hard_forks = m_hard_forks; + other.m_top_hard_fork = m_top_hard_fork; other.m_trezor_path = m_trezor_path; other.m_heavy_tests = m_heavy_tests; other.m_rct_config = m_rct_config; @@ -806,8 +818,6 @@ bool gen_trezor_base::generate(std::vector<test_event_entry>& events) // RCT transactions, wallets have to be used wallet_tools::process_transactions(m_wl_alice.get(), events, blk_5r, m_bt); wallet_tools::process_transactions(m_wl_bob.get(), events, blk_5r, m_bt); - MDEBUG("Available funds on Alice: " << get_available_funds(m_wl_alice.get())); - MDEBUG("Available funds on Bob: " << get_available_funds(m_wl_bob.get())); // Send Alice -> Bob, manually constructed. Simple TX test, precondition. cryptonote::transaction tx_1; @@ -827,7 +837,12 @@ bool gen_trezor_base::generate(std::vector<test_event_entry>& events) CHECK_AND_ASSERT_THROW_MES(resx, "tx_1 semantics failed"); CHECK_AND_ASSERT_THROW_MES(resy, "tx_1 non-semantics failed"); - REWIND_BLOCKS_HF(events, blk_6r, blk_6, m_miner_account, CUR_HF); + REWIND_BLOCKS_N_HF(events, blk_6r, blk_6, m_miner_account, 10, CUR_HF); + wallet_tools::process_transactions(m_wl_alice.get(), events, blk_6, m_bt); + wallet_tools::process_transactions(m_wl_bob.get(), events, blk_6, m_bt); + MDEBUG("Available funds on Alice: " << get_available_funds(m_wl_alice.get())); + MDEBUG("Available funds on Bob: " << get_available_funds(m_wl_bob.get())); + m_head = blk_6r; m_events = events; return true; @@ -889,15 +904,44 @@ void gen_trezor_base::load(std::vector<test_event_entry>& events) MDEBUG("Available funds on Bob: " << get_available_funds(m_wl_bob.get())); } +void gen_trezor_base::rewind_blocks(std::vector<test_event_entry>& events, size_t rewind_n, uint8_t hf) +{ + auto & generator = m_generator; // macro shortcut + REWIND_BLOCKS_N_HF(events, blk_new, m_head, m_miner_account, rewind_n, hf); + m_head = blk_new; + m_events = events; + MDEBUG("Blocks rewound: " << rewind_n << ", #blocks: " << num_blocks(events) << ", #events: " << events.size()); + + wallet_tools::process_transactions(m_wl_alice.get(), events, m_head, m_bt); + wallet_tools::process_transactions(m_wl_bob.get(), events, m_head, m_bt); +} + void gen_trezor_base::fix_hf(std::vector<test_event_entry>& events) { // If current test requires higher hard-fork, move it up const auto current_hf = m_hard_forks.back().first; - if (m_rct_config.bp_version == 2 && current_hf < 10){ + + if (current_hf > m_top_hard_fork) + { + throw std::runtime_error("Generated chain hardfork is higher than desired maximum"); + } + + if (m_rct_config.bp_version == 2 && m_top_hard_fork < 10) + { + throw std::runtime_error("Desired maximum is too low for BPv2"); + } + + if (current_hf < m_top_hard_fork) + { auto hardfork_height = num_blocks(events); - ADD_HARDFORK(m_hard_forks, 10, hardfork_height); + ADD_HARDFORK(m_hard_forks, m_top_hard_fork, hardfork_height); add_top_hfork(events, m_hard_forks); - MDEBUG("Hardfork height: " << hardfork_height); + MDEBUG("Hardfork added at height: " << hardfork_height << ", from " << (int)current_hf << " to " << (int)m_top_hard_fork); + + if (current_hf < 10) + { // buffer blocks, add 10 to apply v10 rules + rewind_blocks(events, 10, m_top_hard_fork); + } } } @@ -934,10 +978,9 @@ void gen_trezor_base::add_transactions_to_events( { // If current test requires higher hard-fork, move it up const auto current_hf = m_hard_forks.back().first; - const uint8_t tx_hf = m_rct_config.bp_version == 2 ? 10 : 9; - if (tx_hf > current_hf){ - throw std::runtime_error("Too late for HF change"); - } + const uint8_t tx_hf = m_top_hard_fork; + CHECK_AND_ASSERT_THROW_MES(tx_hf <= current_hf, "Too late for HF change: " << (int)tx_hf << " current: " << (int)current_hf); + CHECK_AND_ASSERT_THROW_MES(m_rct_config.bp_version < 2 || tx_hf >= 10, "HF too low for BPv2: " << (int)tx_hf); std::list<cryptonote::transaction> tx_list; for(const auto & tx : txs) @@ -1808,7 +1851,7 @@ bool wallet_api_tests::generate(std::vector<test_event_entry>& events) CHECK_AND_ASSERT_THROW_MES(w->init(daemon()->rpc_addr(), 0), "Wallet init fail"); CHECK_AND_ASSERT_THROW_MES(w->refresh(), "Refresh fail"); uint64_t balance = w->balance(0); - MINFO("Balance: " << balance); + MDEBUG("Balance: " << balance); CHECK_AND_ASSERT_THROW_MES(w->status() == Monero::PendingTransaction::Status_Ok, "Status nok"); auto addr = get_address(m_eve_account); diff --git a/tests/trezor/trezor_tests.h b/tests/trezor/trezor_tests.h index bed49fec4..46eb5e6a5 100644 --- a/tests/trezor/trezor_tests.h +++ b/tests/trezor/trezor_tests.h @@ -84,6 +84,8 @@ public: virtual void mine_and_test(std::vector<test_event_entry>& events); + virtual void rewind_blocks(std::vector<test_event_entry>& events, size_t rewind_n, uint8_t hf); + virtual void set_hard_fork(uint8_t hf); crypto::hash head_hash() const { return get_block_hash(m_head); } diff --git a/tests/unit_tests/ban.cpp b/tests/unit_tests/ban.cpp index eb1ee8932..0b267172f 100644 --- a/tests/unit_tests/ban.cpp +++ b/tests/unit_tests/ban.cpp @@ -192,5 +192,21 @@ TEST(ban, add) ASSERT_TRUE(t >= 4); } +TEST(ban, limit) +{ + test_core pr_core; + cryptonote::t_cryptonote_protocol_handler<test_core> cprotocol(pr_core, NULL); + Server server(cprotocol); + cprotocol.set_p2p_endpoint(&server); + + // starts empty + ASSERT_TRUE(server.get_blocked_hosts().empty()); + ASSERT_FALSE(is_blocked(server,MAKE_IPV4_ADDRESS(1,2,3,4))); + ASSERT_TRUE(server.block_host(MAKE_IPV4_ADDRESS(1,2,3,4), std::numeric_limits<time_t>::max() - 1)); + ASSERT_TRUE(is_blocked(server,MAKE_IPV4_ADDRESS(1,2,3,4))); + ASSERT_TRUE(server.block_host(MAKE_IPV4_ADDRESS(1,2,3,4), 1)); + ASSERT_TRUE(is_blocked(server,MAKE_IPV4_ADDRESS(1,2,3,4))); +} + namespace nodetool { template class node_server<cryptonote::t_cryptonote_protocol_handler<test_core>>; } namespace cryptonote { template class t_cryptonote_protocol_handler<test_core>; } diff --git a/tests/unit_tests/blockchain_db.cpp b/tests/unit_tests/blockchain_db.cpp index 4fbc21ddc..f302d7946 100644 --- a/tests/unit_tests/blockchain_db.cpp +++ b/tests/unit_tests/blockchain_db.cpp @@ -271,6 +271,8 @@ TYPED_TEST(BlockchainDBTest, AddBlock) this->get_filenames(); this->init_hard_fork(); + db_wtxn_guard guard(this->m_db); + // adding a block with no parent in the blockchain should throw. // note: this shouldn't be possible, but is a good (and cheap) failsafe. // @@ -317,6 +319,8 @@ TYPED_TEST(BlockchainDBTest, RetrieveBlockData) this->get_filenames(); this->init_hard_fork(); + db_wtxn_guard guard(this->m_db); + ASSERT_NO_THROW(this->m_db->add_block(this->m_blocks[0], t_sizes[0], t_sizes[0], t_diffs[0], t_coins[0], this->m_txs[0])); ASSERT_EQ(t_sizes[0], this->m_db->get_block_weight(0)); diff --git a/tests/unit_tests/hardfork.cpp b/tests/unit_tests/hardfork.cpp index bb26b5533..1d1e8e9c0 100644 --- a/tests/unit_tests/hardfork.cpp +++ b/tests/unit_tests/hardfork.cpp @@ -46,7 +46,7 @@ namespace class TestDB: public cryptonote::BaseTestDB { public: - virtual uint64_t height() const { return blocks.size(); } + virtual uint64_t height() const override { return blocks.size(); } virtual void add_block( const block& blk , size_t block_weight , uint64_t long_term_block_weight @@ -54,19 +54,19 @@ public: , const uint64_t& coins_generated , uint64_t num_rct_outs , const crypto::hash& blk_hash - ) { + ) override { blocks.push_back(blk); } - virtual void remove_block() { blocks.pop_back(); } - virtual block get_block_from_height(const uint64_t& height) const { + virtual void remove_block() override { blocks.pop_back(); } + virtual block get_block_from_height(const uint64_t& height) const override { return blocks.at(height); } - virtual void set_hard_fork_version(uint64_t height, uint8_t version) { + virtual void set_hard_fork_version(uint64_t height, uint8_t version) override { if (versions.size() <= height) versions.resize(height+1); versions[height] = version; } - virtual uint8_t get_hard_fork_version(uint64_t height) const { + virtual uint8_t get_hard_fork_version(uint64_t height) const override { return versions.at(height); } diff --git a/tests/unit_tests/logging.cpp b/tests/unit_tests/logging.cpp index 12d49e2fb..056eae604 100644 --- a/tests/unit_tests/logging.cpp +++ b/tests/unit_tests/logging.cpp @@ -44,7 +44,10 @@ static void init() static void cleanup() { + // windows does not let files be deleted if still in use, so leave droppings there +#ifndef _WIN32 boost::filesystem::remove(log_filename); +#endif } static size_t nlines(const std::string &str) diff --git a/tests/unit_tests/long_term_block_weight.cpp b/tests/unit_tests/long_term_block_weight.cpp index bf1368618..b7713c63a 100644 --- a/tests/unit_tests/long_term_block_weight.cpp +++ b/tests/unit_tests/long_term_block_weight.cpp @@ -198,9 +198,10 @@ TEST(long_term_block_weight, multi_pop) const uint64_t effective_median = bc->get_current_cumulative_block_weight_median(); const uint64_t effective_limit = bc->get_current_cumulative_block_weight_limit(); - for (uint64_t h = 0; h < 4; ++h) + const uint64_t num_pop = 4; + for (uint64_t h = 0; h < num_pop; ++h) { - size_t w = h < TEST_LONG_TERM_BLOCK_WEIGHT_WINDOW ? CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE_V5 : bc->get_current_cumulative_block_weight_limit(); + size_t w = bc->get_current_cumulative_block_weight_limit(); uint64_t ltw = bc->get_next_long_term_block_weight(w); bc->get_db().add_block(std::make_pair(cryptonote::block(), ""), w, ltw, h, h, {}); ASSERT_TRUE(bc->update_next_cumulative_weight_limit()); @@ -208,10 +209,8 @@ TEST(long_term_block_weight, multi_pop) cryptonote::block b; std::vector<cryptonote::transaction> txs; - bc->get_db().pop_block(b, txs); - bc->get_db().pop_block(b, txs); - bc->get_db().pop_block(b, txs); - bc->get_db().pop_block(b, txs); + for (uint64_t h = 0; h < num_pop; ++h) + bc->get_db().pop_block(b, txs); ASSERT_TRUE(bc->update_next_cumulative_weight_limit()); ASSERT_EQ(effective_median, bc->get_current_cumulative_block_weight_median()); @@ -294,9 +293,11 @@ TEST(long_term_block_weight, pop_invariant_random) { PREFIX(10); - for (uint64_t h = 1; h < TEST_LONG_TERM_BLOCK_WEIGHT_WINDOW - 10; ++h) + for (uint64_t h = 1; h < 2 * TEST_LONG_TERM_BLOCK_WEIGHT_WINDOW - 10; ++h) { - size_t w = bc->get_db().height() < TEST_LONG_TERM_BLOCK_WEIGHT_WINDOW ? CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE_V5 : bc->get_current_cumulative_block_weight_limit(); + lcg_seed = bc->get_db().height(); + uint32_t r = lcg(); + size_t w = bc->get_db().height() < TEST_LONG_TERM_BLOCK_WEIGHT_WINDOW ? CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE_V5 : (r % bc->get_current_cumulative_block_weight_limit()); uint64_t ltw = bc->get_next_long_term_block_weight(w); bc->get_db().add_block(std::make_pair(cryptonote::block(), ""), w, ltw, h, h, {}); ASSERT_TRUE(bc->update_next_cumulative_weight_limit()); diff --git a/tests/unit_tests/net.cpp b/tests/unit_tests/net.cpp index 77fb71d96..326e63db8 100644 --- a/tests/unit_tests/net.cpp +++ b/tests/unit_tests/net.cpp @@ -546,7 +546,7 @@ namespace connected(false) { acceptor.open(boost::asio::ip::tcp::v4()); - acceptor.bind(stream_type::endpoint{boost::asio::ip::tcp::v4(), 0}); + acceptor.bind(stream_type::endpoint{boost::asio::ip::address_v4::loopback(), 0}); acceptor.listen(); acceptor.async_accept(server, [this] (boost::system::error_code error) { this->connected = true; @@ -621,7 +621,8 @@ TEST(socks_client, connect_command) ASSERT_TRUE(test_client->set_connect_command("example.com", 8080)); EXPECT_FALSE(test_client->buffer().empty()); ASSERT_TRUE(net::socks::client::connect_and_send(std::move(test_client), io.acceptor.local_endpoint())); - while (!io.connected); + while (!io.connected) + ASSERT_FALSE(called); const std::uint8_t expected_bytes[] = { 4, 1, 0x1f, 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, @@ -657,7 +658,8 @@ TEST(socks_client, connect_command_failed) ); EXPECT_FALSE(test_client->buffer().empty()); ASSERT_TRUE(net::socks::client::connect_and_send(std::move(test_client), io.acceptor.local_endpoint())); - while (!io.connected); + while (!io.connected) + ASSERT_FALSE(called); const std::uint8_t expected_bytes[] = { 4, 1, 0x0b, 0xb8, 0x00, 0x00, 0x13, 0x88, 0x00 @@ -713,7 +715,8 @@ TEST(socks_client, resolve_command) ASSERT_TRUE(test_client->set_resolve_command("example.com")); EXPECT_FALSE(test_client->buffer().empty()); ASSERT_TRUE(net::socks::client::connect_and_send(test_client, io.acceptor.local_endpoint())); - while (!io.connected); + while (!io.connected) + ASSERT_EQ(0u, test_client->called_); const std::uint8_t expected_bytes[] = { 4, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, @@ -753,7 +756,8 @@ TEST(socks_connector, host) boost::unique_future<boost::asio::ip::tcp::socket> sock = net::socks::connector{io.acceptor.local_endpoint()}("example.com", "8080", timeout); - while (!io.connected); + while (!io.connected) + ASSERT_FALSE(sock.is_ready()); const std::uint8_t expected_bytes[] = { 4, 1, 0x1f, 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 'e', 'x', 'a', 'm', 'p', 'l', 'e', '.', 'c', 'o', 'm', 0x00 @@ -779,7 +783,8 @@ TEST(socks_connector, ipv4) boost::unique_future<boost::asio::ip::tcp::socket> sock = net::socks::connector{io.acceptor.local_endpoint()}("250.88.125.99", "8080", timeout); - while (!io.connected); + while (!io.connected) + ASSERT_FALSE(sock.is_ready()); const std::uint8_t expected_bytes[] = { 4, 1, 0x1f, 0x90, 0xfa, 0x58, 0x7d, 0x63, 0x00 }; @@ -804,7 +809,8 @@ TEST(socks_connector, error) boost::unique_future<boost::asio::ip::tcp::socket> sock = net::socks::connector{io.acceptor.local_endpoint()}("250.88.125.99", "8080", timeout); - while (!io.connected); + while (!io.connected) + ASSERT_FALSE(sock.is_ready()); const std::uint8_t expected_bytes[] = { 4, 1, 0x1f, 0x90, 0xfa, 0x58, 0x7d, 0x63, 0x00 }; diff --git a/tests/unit_tests/output_distribution.cpp b/tests/unit_tests/output_distribution.cpp index 45f2c135b..2f3c78642 100644 --- a/tests/unit_tests/output_distribution.cpp +++ b/tests/unit_tests/output_distribution.cpp @@ -62,6 +62,13 @@ public: return d; } + std::vector<uint64_t> get_block_weights(uint64_t start_offset, size_t count) const override + { + std::vector<uint64_t> weights; + while (count--) weights.push_back(1); + return weights; + } + uint64_t blockchain_height; }; diff --git a/tests/unit_tests/output_selection.cpp b/tests/unit_tests/output_selection.cpp index a528679e4..0094fc765 100644 --- a/tests/unit_tests/output_selection.cpp +++ b/tests/unit_tests/output_selection.cpp @@ -101,3 +101,120 @@ TEST(select_outputs, order) PICK(1); // then the one that's on the same height } +#define MKOFFSETS(N, n) \ + offsets.resize(N); \ + size_t n_outs = 0; \ + for (auto &offset: offsets) \ + { \ + offset = n_outs += (n); \ + } + +TEST(select_outputs, gamma) +{ + std::vector<uint64_t> offsets; + + MKOFFSETS(300000, 1); + tools::gamma_picker picker(offsets); + std::vector<double> ages(100000); + double age_scale = 120. * (offsets.size() / (double)n_outs); + for (size_t i = 0; i < ages.size(); ) + { + uint64_t o = picker.pick(); + if (o >= n_outs) + continue; + ages[i] = (n_outs - 1 - o) * age_scale; + ASSERT_GE(ages[i], 0); + ASSERT_LE(ages[i], offsets.size() * 120); + ++i; + } + double median = epee::misc_utils::median(ages); + MDEBUG("median age: " << median / 86400. << " days"); + ASSERT_GE(median, 1.3 * 86400); + ASSERT_LE(median, 1.4 * 86400); +} + +TEST(select_outputs, density) +{ + static const size_t NPICKS = 1000000; + std::vector<uint64_t> offsets; + + MKOFFSETS(300000, 1 + (rand() & 0x1f)); + tools::gamma_picker picker(offsets); + + std::vector<int> picks(/*n_outs*/offsets.size(), 0); + for (int i = 0; i < NPICKS; ) + { + uint64_t o = picker.pick(); + if (o >= n_outs) + continue; + auto it = std::lower_bound(offsets.begin(), offsets.end(), o); + auto idx = std::distance(offsets.begin(), it); + ASSERT_LT(idx, picks.size()); + ++picks[idx]; + ++i; + } + + for (int d = 1; d < 0x20; ++d) + { + // count the number of times an output in a block of d outputs was selected + // count how many outputs are in a block of d outputs + size_t count_selected = 0, count_chain = 0; + for (size_t i = 0; i < offsets.size(); ++i) + { + size_t n_outputs = offsets[i] - (i == 0 ? 0 : offsets[i - 1]); + if (n_outputs == d) + { + count_selected += picks[i]; + count_chain += d; + } + } + float selected_ratio = count_selected / (float)NPICKS; + float chain_ratio = count_chain / (float)n_outs; + MDEBUG(count_selected << "/" << NPICKS << " outputs selected in blocks of density " << d << ", " << 100.0f * selected_ratio << "%"); + MDEBUG(count_chain << "/" << offsets.size() << " outputs in blocks of density " << d << ", " << 100.0f * chain_ratio << "%"); + ASSERT_LT(fabsf(selected_ratio - chain_ratio), 0.02f); + } +} + +TEST(select_outputs, same_distribution) +{ + static const size_t NPICKS = 1000000; + std::vector<uint64_t> offsets; + + MKOFFSETS(300000, 1 + (rand() & 0x1f)); + tools::gamma_picker picker(offsets); + + std::vector<int> chain_picks(offsets.size(), 0); + std::vector<int> output_picks(n_outs, 0); + for (int i = 0; i < NPICKS; ) + { + uint64_t o = picker.pick(); + if (o >= n_outs) + continue; + auto it = std::lower_bound(offsets.begin(), offsets.end(), o); + auto idx = std::distance(offsets.begin(), it); + ASSERT_LT(idx, chain_picks.size()); + ++chain_picks[idx]; + ++output_picks[o]; + ++i; + } + + // scale them both to 0-100 + std::vector<int> chain_norm(100, 0), output_norm(100, 0); + for (size_t i = 0; i < output_picks.size(); ++i) + output_norm[i * 100 / output_picks.size()] += output_picks[i]; + for (size_t i = 0; i < chain_picks.size(); ++i) + chain_norm[i * 100 / chain_picks.size()] += chain_picks[i]; + + double max_dev = 0.0, avg_dev = 0.0; + for (size_t i = 0; i < 100; ++i) + { + const double diff = (double)output_norm[i] - (double)chain_norm[i]; + double dev = fabs(2.0 * diff / (output_norm[i] + chain_norm[i])); + ASSERT_LT(dev, 0.1); + avg_dev += dev; + } + avg_dev /= 100; + MDEBUG("avg_dev: " << avg_dev); + ASSERT_LT(avg_dev, 0.015); +} diff --git a/tests/unit_tests/ringct.cpp b/tests/unit_tests/ringct.cpp index e239154cf..4d51ec434 100644 --- a/tests/unit_tests/ringct.cpp +++ b/tests/unit_tests/ringct.cpp @@ -143,13 +143,16 @@ TEST(ringct, range_proofs) //ct range proofs ctkeyV sc, pc; ctkey sctmp, pctmp; - //add fake input 5000 - tie(sctmp, pctmp) = ctskpkGen(6000); + std::vector<uint64_t> inamounts; + //add fake input 6000 + inamounts.push_back(6000); + tie(sctmp, pctmp) = ctskpkGen(inamounts.back()); sc.push_back(sctmp); pc.push_back(pctmp); - tie(sctmp, pctmp) = ctskpkGen(7000); + inamounts.push_back(7000); + tie(sctmp, pctmp) = ctskpkGen(inamounts.back()); sc.push_back(sctmp); pc.push_back(pctmp); vector<xmr_amount >amounts; @@ -173,14 +176,20 @@ TEST(ringct, range_proofs) const rct::RCTConfig rct_config { RangeProofBorromean, 0 }; - //compute rct data with mixin 500 - rctSig s = genRct(rct::zero(), sc, pc, destinations, amounts, amount_keys, NULL, NULL, 3, rct_config, hw::get_device("default")); + //compute rct data with mixin 3 - should fail since full type with > 1 input + bool ok = false; + try { genRct(rct::zero(), sc, pc, destinations, amounts, amount_keys, NULL, NULL, 3, rct_config, hw::get_device("default")); } + catch(...) { ok = true; } + ASSERT_TRUE(ok); + + //compute rct data with mixin 3 + rctSig s = genRctSimple(rct::zero(), sc, pc, destinations, inamounts, amounts, amount_keys, NULL, NULL, 0, 3, rct_config, hw::get_device("default")); //verify rct data - ASSERT_TRUE(verRct(s)); + ASSERT_TRUE(verRctSimple(s)); //decode received amount - decodeRct(s, amount_keys[1], 1, mask, hw::get_device("default")); + decodeRctSimple(s, amount_keys[1], 1, mask, hw::get_device("default")); // Ring CT with failing MG sig part should not verify! // Since sum of inputs != outputs @@ -190,14 +199,14 @@ TEST(ringct, range_proofs) destinations[1] = Pk; - //compute rct data with mixin 500 - s = genRct(rct::zero(), sc, pc, destinations, amounts, amount_keys, NULL, NULL, 3, rct_config, hw::get_device("default")); + //compute rct data with mixin 3 + s = genRctSimple(rct::zero(), sc, pc, destinations, inamounts, amounts, amount_keys, NULL, NULL, 0, 3, rct_config, hw::get_device("default")); //verify rct data - ASSERT_FALSE(verRct(s)); + ASSERT_FALSE(verRctSimple(s)); //decode received amount - decodeRct(s, amount_keys[1], 1, mask, hw::get_device("default")); + decodeRctSimple(s, amount_keys[1], 1, mask, hw::get_device("default")); } TEST(ringct, range_proofs_with_fee) @@ -206,13 +215,16 @@ TEST(ringct, range_proofs_with_fee) //ct range proofs ctkeyV sc, pc; ctkey sctmp, pctmp; - //add fake input 5000 - tie(sctmp, pctmp) = ctskpkGen(6001); + std::vector<uint64_t> inamounts; + //add fake input 6001 + inamounts.push_back(6001); + tie(sctmp, pctmp) = ctskpkGen(inamounts.back()); sc.push_back(sctmp); pc.push_back(pctmp); - tie(sctmp, pctmp) = ctskpkGen(7000); + inamounts.push_back(7000); + tie(sctmp, pctmp) = ctskpkGen(inamounts.back()); sc.push_back(sctmp); pc.push_back(pctmp); vector<xmr_amount >amounts; @@ -227,10 +239,6 @@ TEST(ringct, range_proofs_with_fee) skpkGen(Sk, Pk); destinations.push_back(Pk); - //add txn fee for 1 - //has no corresponding destination.. - amounts.push_back(1); - //add output for 12500 amounts.push_back(12500); amount_keys.push_back(hash_to_scalar(zero())); @@ -239,14 +247,14 @@ TEST(ringct, range_proofs_with_fee) const rct::RCTConfig rct_config { RangeProofBorromean, 0 }; - //compute rct data with mixin 500 - rctSig s = genRct(rct::zero(), sc, pc, destinations, amounts, amount_keys, NULL, NULL, 3, rct_config, hw::get_device("default")); + //compute rct data with mixin 3 + rctSig s = genRctSimple(rct::zero(), sc, pc, destinations, inamounts, amounts, amount_keys, NULL, NULL, 1, 3, rct_config, hw::get_device("default")); //verify rct data - ASSERT_TRUE(verRct(s)); + ASSERT_TRUE(verRctSimple(s)); //decode received amount - decodeRct(s, amount_keys[1], 1, mask, hw::get_device("default")); + decodeRctSimple(s, amount_keys[1], 1, mask, hw::get_device("default")); // Ring CT with failing MG sig part should not verify! // Since sum of inputs != outputs @@ -256,14 +264,14 @@ TEST(ringct, range_proofs_with_fee) destinations[1] = Pk; - //compute rct data with mixin 500 - s = genRct(rct::zero(), sc, pc, destinations, amounts, amount_keys, NULL, NULL, 3, rct_config, hw::get_device("default")); + //compute rct data with mixin 3 + s = genRctSimple(rct::zero(), sc, pc, destinations, inamounts, amounts, amount_keys, NULL, NULL, 500, 3, rct_config, hw::get_device("default")); //verify rct data - ASSERT_FALSE(verRct(s)); + ASSERT_FALSE(verRctSimple(s)); //decode received amount - decodeRct(s, amount_keys[1], 1, mask, hw::get_device("default")); + decodeRctSimple(s, amount_keys[1], 1, mask, hw::get_device("default")); } TEST(ringct, simple) @@ -538,10 +546,10 @@ TEST(ringct, range_proofs_accept_zero_out_middle_simple) EXPECT_TRUE(range_proof_test(true, NELTS(inputs), inputs, NELTS(outputs), outputs, false, true)); } -TEST(ringct, range_proofs_accept_zero_in_first) +TEST(ringct, range_proofs_accept_zero) { - const uint64_t inputs[] = {0, 5000}; - const uint64_t outputs[] = {5000}; + const uint64_t inputs[] = {0}; + const uint64_t outputs[] = {0}; EXPECT_TRUE(range_proof_test(true, NELTS(inputs), inputs, NELTS(outputs), outputs, false, false)); } @@ -552,13 +560,6 @@ TEST(ringct, range_proofs_accept_zero_in_first_simple) EXPECT_TRUE(range_proof_test(true, NELTS(inputs), inputs, NELTS(outputs), outputs, false, true)); } -TEST(ringct, range_proofs_accept_zero_in_last) -{ - const uint64_t inputs[] = {5000, 0}; - const uint64_t outputs[] = {5000}; - EXPECT_TRUE(range_proof_test(true, NELTS(inputs), inputs, NELTS(outputs), outputs, false, false)); -} - TEST(ringct, range_proofs_accept_zero_in_last_simple) { const uint64_t inputs[] = {5000, 0}; @@ -566,13 +567,6 @@ TEST(ringct, range_proofs_accept_zero_in_last_simple) EXPECT_TRUE(range_proof_test(true, NELTS(inputs), inputs, NELTS(outputs), outputs, false, true)); } -TEST(ringct, range_proofs_accept_zero_in_middle) -{ - const uint64_t inputs[] = {2500, 0, 2500}; - const uint64_t outputs[] = {5000}; - EXPECT_TRUE(range_proof_test(true, NELTS(inputs), inputs, NELTS(outputs), outputs, false, false)); -} - TEST(ringct, range_proofs_accept_zero_in_middle_simple) { const uint64_t inputs[] = {2500, 0, 2500}; @@ -762,13 +756,6 @@ TEST(ringct, range_proofs_accept_1_to_N_simple) EXPECT_TRUE(range_proof_test(true, NELTS(inputs), inputs, NELTS(outputs), outputs, false,true)); } -TEST(ringct, range_proofs_accept_N_to_1) -{ - const uint64_t inputs[] = {1000, 1000, 1000, 1000, 1000}; - const uint64_t outputs[] = {5000}; - EXPECT_TRUE(range_proof_test(true, NELTS(inputs), inputs, NELTS(outputs), outputs, false, false)); -} - TEST(ringct, range_proofs_accept_N_to_1_simple) { const uint64_t inputs[] = {1000, 1000, 1000, 1000, 1000}; @@ -776,13 +763,6 @@ TEST(ringct, range_proofs_accept_N_to_1_simple) EXPECT_TRUE(range_proof_test(true, NELTS(inputs), inputs, NELTS(outputs), outputs, false, true)); } -TEST(ringct, range_proofs_accept_N_to_N) -{ - const uint64_t inputs[] = {1000, 1000, 1000, 1000, 1000}; - const uint64_t outputs[] = {1000, 1000, 1000, 1000, 1000}; - EXPECT_TRUE(range_proof_test(true, NELTS(inputs), inputs, NELTS(outputs), outputs, false, false)); -} - TEST(ringct, range_proofs_accept_N_to_N_simple) { const uint64_t inputs[] = {1000, 1000, 1000, 1000, 1000}; @@ -790,20 +770,6 @@ TEST(ringct, range_proofs_accept_N_to_N_simple) EXPECT_TRUE(range_proof_test(true, NELTS(inputs), inputs, NELTS(outputs), outputs, false, true)); } -TEST(ringct, range_proofs_accept_very_long) -{ - const size_t N=12; - uint64_t inputs[N]; - uint64_t outputs[N]; - for (size_t n = 0; n < N; ++n) { - inputs[n] = n; - outputs[n] = n; - } - std::random_shuffle(inputs, inputs + N); - std::random_shuffle(outputs, outputs + N); - EXPECT_TRUE(range_proof_test(true, NELTS(inputs), inputs, NELTS(outputs), outputs, false, false)); -} - TEST(ringct, range_proofs_accept_very_long_simple) { const size_t N=12; @@ -861,7 +827,7 @@ TEST(ringct, prooveRange_is_non_deterministic) TEST(ringct, fee_0_valid) { - const uint64_t inputs[] = {1000, 1000}; + const uint64_t inputs[] = {2000}; const uint64_t outputs[] = {2000, 0}; EXPECT_TRUE(range_proof_test(true, NELTS(inputs), inputs, NELTS(outputs), outputs, true, false)); } @@ -875,7 +841,7 @@ TEST(ringct, fee_0_valid_simple) TEST(ringct, fee_non_0_valid) { - const uint64_t inputs[] = {1000, 1000}; + const uint64_t inputs[] = {2000}; const uint64_t outputs[] = {1900, 100}; EXPECT_TRUE(range_proof_test(true, NELTS(inputs), inputs, NELTS(outputs), outputs, true, false)); } @@ -917,7 +883,7 @@ TEST(ringct, fee_non_0_invalid_lower_simple) TEST(ringct, fee_burn_valid_one_out) { - const uint64_t inputs[] = {1000, 1000}; + const uint64_t inputs[] = {2000}; const uint64_t outputs[] = {0, 2000}; EXPECT_TRUE(range_proof_test(true, NELTS(inputs), inputs, NELTS(outputs), outputs, true, false)); } @@ -931,7 +897,7 @@ TEST(ringct, fee_burn_valid_one_out_simple) TEST(ringct, fee_burn_valid_zero_out) { - const uint64_t inputs[] = {1000, 1000}; + const uint64_t inputs[] = {2000}; const uint64_t outputs[] = {2000}; EXPECT_TRUE(range_proof_test(true, NELTS(inputs), inputs, NELTS(outputs), outputs, true, false)); } @@ -945,7 +911,7 @@ TEST(ringct, fee_burn_valid_zero_out_simple) static rctSig make_sig() { - static const uint64_t inputs[] = {1000, 1000}; + static const uint64_t inputs[] = {2000}; static const uint64_t outputs[] = {1000, 1000}; static rct::rctSig sig = make_sample_rct_sig(NELTS(inputs), inputs, NELTS(outputs), outputs, true); return sig; @@ -1044,7 +1010,7 @@ TEST(ringct, reject_gen_simple_ver_non_simple) TEST(ringct, reject_gen_non_simple_ver_simple) { - const uint64_t inputs[] = {1000, 1000}; + const uint64_t inputs[] = {2000}; const uint64_t outputs[] = {1000, 1000}; rct::rctSig sig = make_sample_rct_sig(NELTS(inputs), inputs, NELTS(outputs), outputs, true); ASSERT_FALSE(rct::verRctSimple(sig)); diff --git a/tests/unit_tests/serialization.cpp b/tests/unit_tests/serialization.cpp index 27b14ffff..23f028464 100644 --- a/tests/unit_tests/serialization.cpp +++ b/tests/unit_tests/serialization.cpp @@ -477,7 +477,7 @@ TEST(Serialization, serializes_ringct_types) rct::ecdhTuple ecdh0, ecdh1; rct::boroSig boro0, boro1; rct::mgSig mg0, mg1; - rct::rangeSig rg0, rg1; + rct::Bulletproof bp0, bp1; rct::rctSig s0, s1; cryptonote::transaction tx0, tx1; @@ -566,12 +566,15 @@ TEST(Serialization, serializes_ringct_types) ASSERT_TRUE(!memcmp(&boro0, &boro1, sizeof(boro0))); // create a full rct signature to use its innards + vector<uint64_t> inamounts; rct::ctkeyV sc, pc; rct::ctkey sctmp, pctmp; - tie(sctmp, pctmp) = rct::ctskpkGen(6000); + inamounts.push_back(6000); + tie(sctmp, pctmp) = rct::ctskpkGen(inamounts.back()); sc.push_back(sctmp); pc.push_back(pctmp); - tie(sctmp, pctmp) = rct::ctskpkGen(7000); + inamounts.push_back(7000); + tie(sctmp, pctmp) = rct::ctskpkGen(inamounts.back()); sc.push_back(sctmp); pc.push_back(pctmp); vector<uint64_t> amounts; @@ -588,9 +591,9 @@ TEST(Serialization, serializes_ringct_types) amount_keys.push_back(rct::hash_to_scalar(rct::zero())); rct::skpkGen(Sk, Pk); destinations.push_back(Pk); - //compute rct data with mixin 500 + //compute rct data with mixin 3 const rct::RCTConfig rct_config{ rct::RangeProofPaddedBulletproof, 0 }; - s0 = rct::genRct(rct::zero(), sc, pc, destinations, amounts, amount_keys, NULL, NULL, 3, rct_config, hw::get_device("default")); + s0 = rct::genRctSimple(rct::zero(), sc, pc, destinations, inamounts, amounts, amount_keys, NULL, NULL, 0, 3, rct_config, hw::get_device("default")); mg0 = s0.p.MGs[0]; ASSERT_TRUE(serialization::dump_binary(mg0, blob)); @@ -605,66 +608,12 @@ TEST(Serialization, serializes_ringct_types) // mixRing and II are not serialized, they are meant to be reconstructed ASSERT_TRUE(mg1.II.empty()); - rg0 = s0.p.rangeSigs.front(); - ASSERT_TRUE(serialization::dump_binary(rg0, blob)); - ASSERT_TRUE(serialization::parse_binary(blob, rg1)); - ASSERT_TRUE(!memcmp(&rg0, &rg1, sizeof(rg0))); - -#if 0 - ASSERT_TRUE(serialization::dump_binary(s0, blob)); - ASSERT_TRUE(serialization::parse_binary(blob, s1)); - ASSERT_TRUE(s0.type == s1.type); - ASSERT_TRUE(s0.p.rangeSigs.size() == s1.p.rangeSigs.size()); - for (size_t n = 0; n < s0.p.rangeSigs.size(); ++n) - { - ASSERT_TRUE(!memcmp(&s0.p.rangeSigs[n], &s1.p.rangeSigs[n], sizeof(s0.p.rangeSigs[n]))); - } - ASSERT_TRUE(s0.p.MGs.size() == s1.p.MGs.size()); - ASSERT_TRUE(s0.p.MGs[0].ss.size() == s1.p.MGs[0].ss.size()); - for (size_t n = 0; n < s0.p.MGs[0].ss.size(); ++n) - { - ASSERT_TRUE(s0.p.MGs[0].ss[n] == s1.p.MGs[0].ss[n]); - } - ASSERT_TRUE(s0.p.MGs[0].cc == s1.p.MGs[0].cc); - // mixRing and II are not serialized, they are meant to be reconstructed - ASSERT_TRUE(s1.p.MGs[0].II.empty()); - - // mixRing and II are not serialized, they are meant to be reconstructed - ASSERT_TRUE(s1.mixRing.size() == 0); - - ASSERT_TRUE(s0.ecdhInfo.size() == s1.ecdhInfo.size()); - for (size_t n = 0; n < s0.ecdhInfo.size(); ++n) - { - ASSERT_TRUE(!memcmp(&s0.ecdhInfo[n], &s1.ecdhInfo[n], sizeof(s0.ecdhInfo[n]))); - } - ASSERT_TRUE(s0.outPk.size() == s1.outPk.size()); - for (size_t n = 0; n < s0.outPk.size(); ++n) - { - // serialization only does the mask - ASSERT_TRUE(!memcmp(&s0.outPk[n].mask, &s1.outPk[n].mask, sizeof(s0.outPk[n].mask))); - } -#endif - - tx0.set_null(); - tx0.version = 2; - cryptonote::txin_to_key txin_to_key1{}; - txin_to_key1.amount = 100; - txin_to_key1.key_offsets.resize(4); - cryptonote::txin_to_key txin_to_key2{}; - txin_to_key2.amount = 200; - txin_to_key2.key_offsets.resize(4); - tx0.vin.push_back(txin_to_key1); - tx0.vin.push_back(txin_to_key2); - tx0.vout.push_back(cryptonote::tx_out()); - tx0.vout.push_back(cryptonote::tx_out()); - tx0.rct_signatures = s0; - ASSERT_EQ(tx0.rct_signatures.p.rangeSigs.size(), 2); - ASSERT_TRUE(serialization::dump_binary(tx0, blob)); - ASSERT_TRUE(serialization::parse_binary(blob, tx1)); - ASSERT_EQ(tx1.rct_signatures.p.rangeSigs.size(), 2); - std::string blob2; - ASSERT_TRUE(serialization::dump_binary(tx1, blob2)); - ASSERT_TRUE(blob == blob2); + ASSERT_FALSE(s0.p.bulletproofs.empty()); + bp0 = s0.p.bulletproofs.front(); + ASSERT_TRUE(serialization::dump_binary(bp0, blob)); + ASSERT_TRUE(serialization::parse_binary(blob, bp1)); + bp1.V = bp0.V; // this is not saved, as it is reconstructed from other tx data + ASSERT_EQ(bp0, bp1); } TEST(Serialization, portability_wallet) diff --git a/translations/monero.ts b/translations/monero.ts index 45d85abbd..45a77007d 100644 --- a/translations/monero.ts +++ b/translations/monero.ts @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> -<TS version="2.0"> +<TS version="2.1"> <context> <name>Monero::AddressBookImpl</name> <message> @@ -37,42 +37,42 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="121"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="138"/> <source>daemon is busy. Please try again later.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="124"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="141"/> <source>no connection to daemon. Please make sure daemon is running.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="128"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="145"/> <source>transaction %s was rejected by daemon with status: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="133"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="150"/> <source>. Reason: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="135"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="152"/> <source>Unknown exception: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="138"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="155"/> <source>Unhandled exception</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="211"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="228"/> <source>Couldn't multisig sign data: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="233"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="250"/> <source>Couldn't sign multisig transaction: </source> <translation type="unfinished"></translation> </message> @@ -134,384 +134,384 @@ <context> <name>Monero::WalletImpl</name> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1383"/> + <location filename="../src/wallet/api/wallet.cpp" line="1459"/> <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="1392"/> + <location filename="../src/wallet/api/wallet.cpp" line="1468"/> <source>Failed to add short payment id: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1428"/> <location filename="../src/wallet/api/wallet.cpp" line="1510"/> + <location filename="../src/wallet/api/wallet.cpp" line="1592"/> <source>daemon is busy. Please try again later.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1430"/> <location filename="../src/wallet/api/wallet.cpp" line="1512"/> + <location filename="../src/wallet/api/wallet.cpp" line="1594"/> <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="1432"/> <location filename="../src/wallet/api/wallet.cpp" line="1514"/> + <location filename="../src/wallet/api/wallet.cpp" line="1596"/> <source>RPC error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1434"/> + <location filename="../src/wallet/api/wallet.cpp" line="1516"/> <source>failed to get outputs to mix: %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1460"/> - <location filename="../src/wallet/api/wallet.cpp" line="1545"/> + <location filename="../src/wallet/api/wallet.cpp" line="1542"/> + <location filename="../src/wallet/api/wallet.cpp" line="1627"/> <source>not enough outputs for specified ring size</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1462"/> - <location filename="../src/wallet/api/wallet.cpp" line="1547"/> + <location filename="../src/wallet/api/wallet.cpp" line="1544"/> + <location filename="../src/wallet/api/wallet.cpp" line="1629"/> <source>found outputs to use</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1464"/> + <location filename="../src/wallet/api/wallet.cpp" line="1546"/> <source>Please sweep unmixable outputs.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1438"/> - <location filename="../src/wallet/api/wallet.cpp" line="1521"/> + <location filename="../src/wallet/api/wallet.cpp" line="1520"/> + <location filename="../src/wallet/api/wallet.cpp" line="1603"/> <source>not enough money to transfer, available only %s, sent amount %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="541"/> + <location filename="../src/wallet/api/wallet.cpp" line="589"/> <source>failed to parse address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="552"/> + <location filename="../src/wallet/api/wallet.cpp" line="600"/> <source>failed to parse secret spend key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="567"/> + <location filename="../src/wallet/api/wallet.cpp" line="615"/> <source>Neither view key nor spend key supplied, cancelled</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="575"/> + <location filename="../src/wallet/api/wallet.cpp" line="623"/> <source>failed to parse secret view key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="584"/> + <location filename="../src/wallet/api/wallet.cpp" line="632"/> <source>failed to verify secret spend key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="588"/> + <location filename="../src/wallet/api/wallet.cpp" line="636"/> <source>spend key does not match address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="594"/> + <location filename="../src/wallet/api/wallet.cpp" line="642"/> <source>failed to verify secret view key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="598"/> + <location filename="../src/wallet/api/wallet.cpp" line="646"/> <source>view key does not match address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="621"/> - <location filename="../src/wallet/api/wallet.cpp" line="638"/> + <location filename="../src/wallet/api/wallet.cpp" line="669"/> + <location filename="../src/wallet/api/wallet.cpp" line="686"/> <source>failed to generate new wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="686"/> + <location filename="../src/wallet/api/wallet.cpp" line="734"/> <source>Electrum seed is empty</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="695"/> + <location filename="../src/wallet/api/wallet.cpp" line="743"/> <source>Electrum-style word list failed verification</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="885"/> + <location filename="../src/wallet/api/wallet.cpp" line="955"/> <source>Failed to send import wallet request</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1049"/> + <location filename="../src/wallet/api/wallet.cpp" line="1125"/> <source>Failed to load unsigned transactions</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1068"/> + <location filename="../src/wallet/api/wallet.cpp" line="1144"/> <source>Failed to load transaction from file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1084"/> + <location filename="../src/wallet/api/wallet.cpp" line="1160"/> <source>Wallet is view only</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1092"/> + <location filename="../src/wallet/api/wallet.cpp" line="1168"/> <source>failed to save file </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1108"/> + <location filename="../src/wallet/api/wallet.cpp" line="1184"/> <source>Key images can only be imported with a trusted daemon</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1121"/> + <location filename="../src/wallet/api/wallet.cpp" line="1197"/> <source>Failed to import key images: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1153"/> + <location filename="../src/wallet/api/wallet.cpp" line="1229"/> <source>Failed to get subaddress label: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1166"/> + <location filename="../src/wallet/api/wallet.cpp" line="1242"/> <source>Failed to set subaddress label: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1183"/> + <location filename="../src/wallet/api/wallet.cpp" line="1259"/> <source>Failed to get multisig info: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1200"/> - <location filename="../src/wallet/api/wallet.cpp" line="1214"/> + <location filename="../src/wallet/api/wallet.cpp" line="1276"/> + <location filename="../src/wallet/api/wallet.cpp" line="1290"/> <source>Failed to make multisig: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1229"/> + <location filename="../src/wallet/api/wallet.cpp" line="1305"/> <source>Failed to finalize multisig wallet creation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1232"/> + <location filename="../src/wallet/api/wallet.cpp" line="1308"/> <source>Failed to finalize multisig wallet creation: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1248"/> + <location filename="../src/wallet/api/wallet.cpp" line="1324"/> <source>Failed to export multisig images: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1266"/> + <location filename="../src/wallet/api/wallet.cpp" line="1342"/> <source>Failed to parse imported multisig images</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1276"/> + <location filename="../src/wallet/api/wallet.cpp" line="1352"/> <source>Failed to import multisig images: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1290"/> + <location filename="../src/wallet/api/wallet.cpp" line="1366"/> <source>Failed to check for partial multisig key images: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1318"/> + <location filename="../src/wallet/api/wallet.cpp" line="1394"/> <source>Failed to restore multisig transaction: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1358"/> + <location filename="../src/wallet/api/wallet.cpp" line="1434"/> <source>Invalid destination address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2179"/> + <location filename="../src/wallet/api/wallet.cpp" line="2275"/> <source>Invalid output: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2186"/> + <location filename="../src/wallet/api/wallet.cpp" line="2282"/> <source>Failed to mark outputs as spent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2208"/> + <location filename="../src/wallet/api/wallet.cpp" line="2304"/> <source>Failed to mark output as spent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2230"/> + <location filename="../src/wallet/api/wallet.cpp" line="2326"/> <source>Failed to mark output as unspent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1445"/> - <location filename="../src/wallet/api/wallet.cpp" line="1529"/> + <location filename="../src/wallet/api/wallet.cpp" line="1527"/> + <location filename="../src/wallet/api/wallet.cpp" line="1611"/> <source>not enough money to transfer, overall balance only %s, sent amount %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1452"/> - <location filename="../src/wallet/api/wallet.cpp" line="1537"/> + <location filename="../src/wallet/api/wallet.cpp" line="1534"/> + <location filename="../src/wallet/api/wallet.cpp" line="1619"/> <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="1462"/> - <location filename="../src/wallet/api/wallet.cpp" line="1547"/> + <location filename="../src/wallet/api/wallet.cpp" line="1544"/> + <location filename="../src/wallet/api/wallet.cpp" line="1629"/> <source>output amount</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1467"/> - <location filename="../src/wallet/api/wallet.cpp" line="1551"/> + <location filename="../src/wallet/api/wallet.cpp" line="1549"/> + <location filename="../src/wallet/api/wallet.cpp" line="1633"/> <source>transaction was not constructed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1470"/> - <location filename="../src/wallet/api/wallet.cpp" line="1554"/> + <location filename="../src/wallet/api/wallet.cpp" line="1552"/> + <location filename="../src/wallet/api/wallet.cpp" line="1636"/> <source>transaction %s was rejected by daemon with status: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1475"/> - <location filename="../src/wallet/api/wallet.cpp" line="1559"/> + <location filename="../src/wallet/api/wallet.cpp" line="1557"/> + <location filename="../src/wallet/api/wallet.cpp" line="1641"/> <source>one of destinations is zero</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1477"/> - <location filename="../src/wallet/api/wallet.cpp" line="1561"/> + <location filename="../src/wallet/api/wallet.cpp" line="1559"/> + <location filename="../src/wallet/api/wallet.cpp" line="1643"/> <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="1479"/> - <location filename="../src/wallet/api/wallet.cpp" line="1563"/> + <location filename="../src/wallet/api/wallet.cpp" line="1561"/> + <location filename="../src/wallet/api/wallet.cpp" line="1645"/> <source>unknown transfer error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1481"/> - <location filename="../src/wallet/api/wallet.cpp" line="1565"/> + <location filename="../src/wallet/api/wallet.cpp" line="1563"/> + <location filename="../src/wallet/api/wallet.cpp" line="1647"/> <source>internal error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1483"/> - <location filename="../src/wallet/api/wallet.cpp" line="1567"/> + <location filename="../src/wallet/api/wallet.cpp" line="1565"/> + <location filename="../src/wallet/api/wallet.cpp" line="1649"/> <source>unexpected error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1485"/> - <location filename="../src/wallet/api/wallet.cpp" line="1569"/> + <location filename="../src/wallet/api/wallet.cpp" line="1567"/> + <location filename="../src/wallet/api/wallet.cpp" line="1651"/> <source>unknown error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1516"/> + <location filename="../src/wallet/api/wallet.cpp" line="1598"/> <source>failed to get outputs to mix</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1644"/> - <location filename="../src/wallet/api/wallet.cpp" line="1671"/> - <location filename="../src/wallet/api/wallet.cpp" line="1719"/> - <location filename="../src/wallet/api/wallet.cpp" line="1747"/> - <location filename="../src/wallet/api/wallet.cpp" line="1775"/> - <location filename="../src/wallet/api/wallet.cpp" line="1796"/> - <location filename="../src/wallet/api/wallet.cpp" line="2258"/> + <location filename="../src/wallet/api/wallet.cpp" line="1726"/> + <location filename="../src/wallet/api/wallet.cpp" line="1753"/> + <location filename="../src/wallet/api/wallet.cpp" line="1801"/> + <location filename="../src/wallet/api/wallet.cpp" line="1829"/> + <location filename="../src/wallet/api/wallet.cpp" line="1857"/> + <location filename="../src/wallet/api/wallet.cpp" line="1878"/> + <location filename="../src/wallet/api/wallet.cpp" line="2354"/> <source>Failed to parse txid</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1661"/> + <location filename="../src/wallet/api/wallet.cpp" line="1743"/> <source>no tx keys found for this txid</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1679"/> - <location filename="../src/wallet/api/wallet.cpp" line="1688"/> + <location filename="../src/wallet/api/wallet.cpp" line="1761"/> + <location filename="../src/wallet/api/wallet.cpp" line="1770"/> <source>Failed to parse tx key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1697"/> - <location filename="../src/wallet/api/wallet.cpp" line="1726"/> - <location filename="../src/wallet/api/wallet.cpp" line="1754"/> - <location filename="../src/wallet/api/wallet.cpp" line="1835"/> + <location filename="../src/wallet/api/wallet.cpp" line="1779"/> + <location filename="../src/wallet/api/wallet.cpp" line="1808"/> + <location filename="../src/wallet/api/wallet.cpp" line="1836"/> + <location filename="../src/wallet/api/wallet.cpp" line="1917"/> <source>Failed to parse address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1840"/> + <location filename="../src/wallet/api/wallet.cpp" line="1922"/> <source>Address must not be a subaddress</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1880"/> + <location filename="../src/wallet/api/wallet.cpp" line="1962"/> <source>The wallet must be in multisig ready state</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1902"/> + <location filename="../src/wallet/api/wallet.cpp" line="1984"/> <source>Given string is not a key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2130"/> + <location filename="../src/wallet/api/wallet.cpp" line="2226"/> <source>Rescan spent can only be used with a trusted daemon</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2197"/> - <location filename="../src/wallet/api/wallet.cpp" line="2219"/> + <location filename="../src/wallet/api/wallet.cpp" line="2293"/> + <location filename="../src/wallet/api/wallet.cpp" line="2315"/> <source>Failed to parse output amount</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2202"/> - <location filename="../src/wallet/api/wallet.cpp" line="2224"/> + <location filename="../src/wallet/api/wallet.cpp" line="2298"/> + <location filename="../src/wallet/api/wallet.cpp" line="2320"/> <source>Failed to parse output offset</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2241"/> - <location filename="../src/wallet/api/wallet.cpp" line="2280"/> + <location filename="../src/wallet/api/wallet.cpp" line="2337"/> + <location filename="../src/wallet/api/wallet.cpp" line="2376"/> <source>Failed to parse key image</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2247"/> + <location filename="../src/wallet/api/wallet.cpp" line="2343"/> <source>Failed to get ring</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2265"/> + <location filename="../src/wallet/api/wallet.cpp" line="2361"/> <source>Failed to get rings</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2286"/> + <location filename="../src/wallet/api/wallet.cpp" line="2382"/> <source>Failed to set ring</source> <translation type="unfinished"></translation> </message> @@ -519,22 +519,22 @@ <context> <name>Wallet</name> <message> - <location filename="../src/wallet/api/wallet.cpp" line="301"/> + <location filename="../src/wallet/api/wallet.cpp" line="344"/> <source>Failed to parse address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="308"/> + <location filename="../src/wallet/api/wallet.cpp" line="351"/> <source>Failed to parse key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="316"/> + <location filename="../src/wallet/api/wallet.cpp" line="359"/> <source>failed to verify key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="326"/> + <location filename="../src/wallet/api/wallet.cpp" line="369"/> <source>key does not match address</source> <translation type="unfinished"></translation> </message> @@ -604,803 +604,881 @@ <context> <name>cryptonote::simple_wallet</name> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3895"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4172"/> <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="3926"/> - <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="5486"/> - <source>There is currently a %u block backlog at that fee level. Is this okay? (Y/Yes/N/No): </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5537"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6037"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5938"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6428"/> <source>Spending from address index %d </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5541"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5942"/> <source>Sending %s. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5544"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5945"/> <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="5550"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5951"/> <source>The transaction fee is %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5553"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5954"/> <source>, of which %s is dust from change</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5554"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5955"/> <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="5559"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5960"/> <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="5775"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6176"/> <source>Not enough money in unlocked balance</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5815"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6216"/> <source>No address given</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5879"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6280"/> <source>missing lockedblocks parameter</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5889"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6290"/> <source>bad locked_blocks parameter</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6213"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6601"/> <source>failed to parse Payment ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6236"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2078"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2125"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6624"/> <source>failed to parse key image</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6290"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6678"/> <source>No outputs found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6295"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6683"/> <source>Multiple transactions are created, which is not supposed to happen</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6300"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6688"/> <source>The transaction uses multiple or no inputs, which is not supposed to happen</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6350"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6738"/> <source>Money successfully sent, transaction: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6377"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6765"/> <source>missing threshold amount</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6382"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6770"/> <source>invalid amount threshold</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6516"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6919"/> <source>Claimed change does not go to a paid address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6521"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6924"/> <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="6530"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6933"/> <source>Change goes to more than one address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6552"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6955"/> <source>sending %s to %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6562"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6965"/> <source> dummy output(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6565"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6968"/> <source>with no destinations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6574"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6977"/> <source>no change</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6577"/> - <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min ring size %lu, %s. %sIs this okay? (Y/Yes/N/No): </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3204"/> - <source>(Y/Yes/N/No): </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3705"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3780"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5583"/> - <source>Is this okay? (Y/Yes/N/No): </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4509"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4897"/> <source>Daemon is local, assuming trusted</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4355"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4632"/> <source>Password for new watch-only wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="341"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="362"/> <source>false</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="645"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="666"/> <source>Commands: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="659"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="680"/> <source>Unknown command: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="666"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="687"/> <source>Command usage: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="669"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="690"/> <source>Command description: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="695"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="716"/> <source>wallet is watch-only and has no spend key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="721"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="787"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="939"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="984"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1067"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1124"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1190"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1256"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1350"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1466"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1547"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6601"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6665"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6702"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6799"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7010"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7094"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8397"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8474"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8517"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8630"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8670"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="742"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="808"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="962"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1007"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1090"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1147"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1214"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1280"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1374"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1490"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7004"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7068"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7410"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7494"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8842"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8919"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8962"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9070"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9110"/> <source>command not supported by HW wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="726"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="797"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="747"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="818"/> <source>wallet is watch-only and has no seed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="735"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="756"/> <source>wallet is multisig but not yet finalized</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="744"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="807"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="765"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="828"/> <source>wallet is non-deterministic and has no seed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="768"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="789"/> <source>Failed to retrieve seed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="792"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="813"/> <source>wallet is multisig and has no seed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="817"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="838"/> <source>Incorrect password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="839"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1021"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1074"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1141"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="860"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1044"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1097"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1164"/> <source>Your original password was incorrect.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="854"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="875"/> <source>Error with wallet rewrite: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="870"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8144"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="893"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8587"/> <source>Random payment ID: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="883"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="906"/> <source>Current fee is %s %s per %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="899"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="922"/> <source>Error: failed to estimate backlog array size: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="904"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="927"/> <source>Error: bad estimated backlog array size</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="916"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="939"/> <source> (current)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="919"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="942"/> <source>%u block (%u minutes) backlog at priority %u%s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="921"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="944"/> <source>%u to %u block (%u to %u minutes) backlog at priority %u</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="924"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="947"/> <source>No backlog at priority </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="944"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="989"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="967"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1012"/> <source>This wallet is already multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="949"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="994"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="972"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1017"/> <source>wallet is watch-only and cannot be made multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="955"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1000"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="978"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1023"/> <source>This wallet has been used before, please use a new wallet to create a multisig wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="963"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="986"/> <source>Send this multisig info to all other participants, then use make_multisig <threshold> <info1> [<info2>...] with others' multisig info</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="964"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="987"/> <source>This includes the PRIVATE view key, so needs to be disclosed only to that multisig wallet's participants </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1014"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1037"/> <source>Invalid threshold</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1034"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1156"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1057"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1179"/> <source>Another step is needed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1046"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1069"/> <source>Error creating multisig: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1053"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1076"/> <source>Error creating multisig: new wallet is not multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1056"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1079"/> <source> multisig address: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1080"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1129"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1195"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1261"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1103"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1152"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1219"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1285"/> <source>This wallet is not multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1085"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1134"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1108"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1157"/> <source>This wallet is already finalized</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1101"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1124"/> <source>Failed to finalize multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1107"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1130"/> <source>Failed to finalize multisig: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1200"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1266"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1360"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1476"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1557"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1191"/> + <source>Multisig address: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1224"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1290"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1384"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1500"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1581"/> <source>This multisig wallet is not yet finalized</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1228"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8498"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8651"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1252"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8943"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9091"/> <source>failed to save file </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1236"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1260"/> <source>Error exporting multisig info: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1240"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1264"/> <source>Multisig info exported to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1289"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8421"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8447"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8684"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1313"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8866"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8892"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9124"/> <source>failed to read file </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1306"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1330"/> <source>Multisig info imported</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1334"/> <source>Failed to import multisig info: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1321"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1345"/> <source>Failed to update spent status after importing multisig info: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1327"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1351"/> <source>Untrusted daemon, spent status may be incorrect. Use a trusted daemon and run "rescan_spent"</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1355"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1471"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1552"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1379"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1495"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1576"/> <source>This is not a multisig wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1405"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1414"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1429"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1438"/> <source>Failed to sign multisig transaction</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1421"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1445"/> <source>Multisig error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1426"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1450"/> <source>Failed to sign multisig transaction: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1435"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1448"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6646"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1459"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1472"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7049"/> <source>Transaction successfully signed to file </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1449"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1473"/> <source>It may be relayed to the network with submit_multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1508"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1578"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1532"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1602"/> <source>Failed to load multisig transaction from file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1514"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1583"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1538"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1607"/> <source>Multisig transaction signed by only %u signers, needs %u more signatures</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1523"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8890"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1547"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9330"/> <source>Transaction successfully submitted, transaction </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1524"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8891"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1548"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9331"/> <source>You can check its status by using the `show_transfers` command.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1534"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1613"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4749"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5061"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5639"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5669"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5794"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6099"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6126"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6361"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6690"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1558"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1637"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5152"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5469"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6040"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6070"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6195"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6490"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6517"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6749"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7093"/> <source>unknown error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1599"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1623"/> <source>Failed to export multisig transaction to file </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1603"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1627"/> <source>Saved exported multisig transaction file(s): </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1608"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4744"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5056"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1632"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5147"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5464"/> <source>unexpected error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1631"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1788"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1655"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1812"/> <source>Invalid key image</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1637"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1661"/> <source>Invalid txid</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1649"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1673"/> <source>Key image either not spent, or spent with mixin 0</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1664"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1688"/> <source>Failed to get key image ring: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1679"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1703"/> <source>File doesn't exist</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1701"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1725"/> <source>Invalid ring specification: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1733"/> <source>Invalid key image: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1714"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1738"/> <source>Invalid ring type, expected relative or abosolute: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1720"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1732"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1744"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1756"/> <source>Error reading line: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1743"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1767"/> <source>Invalid ring: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1752"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1776"/> <source>Invalid relative ring: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1764"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1788"/> <source>Invalid absolute ring: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1773"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1797"/> <source>Failed to set ring for key image: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1773"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1797"/> <source>Continuing.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1803"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1827"/> <source>Missing absolute or relative keyword</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1813"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1820"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1837"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1844"/> <source>invalid index: must be a strictly positive unsigned integer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1828"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1852"/> <source>invalid index: indices wrap</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1838"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1862"/> <source>invalid index: indices should be in strictly ascending order</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1845"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1869"/> <source>failed to set ring</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1914"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1892"/> + <source>Invalid key image or txid</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1901"/> + <source>failed to unset ring</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1970"/> <source>Bad argument: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1914"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1970"/> <source>should be "add"</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1923"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1979"/> <source>Failed to open file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2007"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2063"/> <source>Failed to save known rings: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2069"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2072"/> + <source>usage: %s <key_image>|<pubkey></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2117"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2129"/> + <source>Frozen: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2131"/> + <source>Not frozen: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2138"/> + <source> bytes sent</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2139"/> + <source> bytes received</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2145"/> + <source>Welcome to Monero, the private cryptocurrency.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2147"/> + <source>Monero, like Bitcoin, is a cryptocurrency. That is, it is digital money.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2148"/> + <source>Unlike Bitcoin, your Monero transactions and balance stay private, and not visible to the world by default.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2149"/> + <source>However, you have the option of making those available to select parties, if you choose to.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2151"/> + <source>Monero protects your privacy on the blockchain, and while Monero strives to improve all the time,</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2152"/> + <source>no privacy technology can be 100% perfect, Monero included.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2153"/> + <source>Monero cannot protect you from malware, and it may not be as effective as we hope against powerful adversaries.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2154"/> + <source>Flaws in Monero may be discovered in the future, and attacks may be developed to peek under some</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2155"/> + <source>of the layers of privacy Monero provides. Be safe and practice defense in depth.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2157"/> + <source>Welcome to Monero and financial privacy. For more information, see https://getmonero.org/</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2218"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2237"/> <source>wallet is watch-only and cannot transfer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2095"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2101"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2120"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2244"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2250"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2269"/> <source>ring size must be an integer >= </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2106"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5581"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2255"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5982"/> <source>WARNING: this is a non default ring size, which may harm your privacy. Default is recommended.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2125"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2274"/> <source>could not change default ring size</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2137"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2160"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2176"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2286"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2309"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2325"/> <source>priority must be either 0, 1, 2, 3, or 4, or one of: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2330"/> <source>could not change default priority</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2284"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2435"/> <source>invalid unit</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2302"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2364"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2453"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2515"/> <source>invalid count: must be an unsigned integer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2320"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2471"/> <source>invalid value</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2398"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2469"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2549"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2620"/> <source>Invalid height</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2562"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2667"/> + <source>invalid argument: must be either 1/yes or 0/no</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2738"/> <source>Start mining in the daemon (bg_mining and ignore_battery are optional booleans).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2565"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2741"/> <source>Stop mining in the daemon.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2569"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2745"/> <source>Set another daemon to connect to.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2572"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2748"/> <source>Save the current blockchain data.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2575"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2751"/> <source>Synchronize the transactions and balance.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2579"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2755"/> <source>Show the wallet's balance of the currently selected account.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2589"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2759"/> + <source>Show the incoming transfers, all or filtered by availability and address index. + +Output format: +Amount, Spent("T"|"F"), "frozen"|"locked"|"unlocked", RingCT, Global Index, Transaction Hash, Address Index, [Public Key, Key Image] </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2765"/> <source>Show the payments for the given payment IDs.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2592"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2768"/> <source>Show the blockchain height.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2603"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2779"/> <source>Send all unlocked balance to an address and lock it for <lockblocks> (max. 1000000). If the parameter "index<N1>[,<N2>,...]" is specified, the wallet sweeps outputs received by those address indices. If omitted, the wallet randomly chooses an address index to be used. <priority> is the priority of the sweep. The higher the priority, the higher the transaction fee. Valid values in priority order (from lowest to highest) are: unimportant, normal, elevated, priority. If omitted, the default value (see the command "set priority") is used. <ring_size> is the number of inputs to include for untraceability.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2606"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2782"/> <source>Send all unmixable outputs to yourself with ring_size 1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2613"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2789"/> <source>Send all unlocked outputs below the threshold to an address.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2617"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2793"/> <source>Send a single output of the given key image to an address without change.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2621"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2797"/> <source>Donate <amount> to the development team (donate.getmonero.org).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2625"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2801"/> <source>Sign a transaction from a file. If the parameter "export_raw" is specified, transaction raw hex data suitable for the daemon RPC /sendrawtransaction is exported.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2628"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2804"/> <source>Submit a signed transaction from a file.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2632"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2808"/> <source>Change the current log detail (level must be <0-4>).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2812"/> <source>If no arguments are specified, the wallet shows all the existing accounts along with their balances. If the "new" argument is specified, the wallet creates a new account with its label initialized by the provided label text (which can be empty). If the "switch" argument is specified, the wallet switches to the account specified by <index>. @@ -1411,234 +1489,274 @@ If the "tag_description" argument is specified, the tag <tag_name&g <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2646"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2822"/> <source>If no arguments are specified or <index> is specified, the wallet shows the default or specified address. If "all" is specified, the wallet shows all the existing addresses in the currently selected account. If "new " is specified, the wallet creates a new address with the provided label text (which can be empty). If "label" is specified, the wallet sets the label of the address specified by <index> to the provided label text.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2650"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2826"/> <source>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="2654"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2830"/> <source>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="2657"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2833"/> <source>Save the wallet data.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2660"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2836"/> <source>Save a watch-only keys file.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2663"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2839"/> <source>Display the private view key.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2666"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2842"/> <source>Display the private spend key.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2669"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2845"/> <source>Display the Electrum-style mnemonic seed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2719"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2849"/> + <source>Available options: + seed language + Set the wallet's 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-ring-size <n> + Set the default ring size (obsolete). + auto-refresh <1|0> + Whether to automatically synchronize new blocks from the daemon. + refresh-type <full|optimize-coinbase|no-coinbase|default> + Set the wallet's refresh behaviour. + priority [0|1|2|3|4] + Set the fee to default/unimportant/normal/elevated/priority. + confirm-missing-payment-id <1|0> (obsolete) + ask-password <0|1|2 (or never|action|decrypt)> + action: ask the password before many actions such as transfer, etc + decrypt: same as action, but keeps the spend key encrypted in memory when not needed + unit <monero|millinero|micronero|nanonero|piconero> + Set the 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. + confirm-backlog <1|0> + Whether to warn if there is transaction backlog. + confirm-backlog-threshold [n] + Set a threshold for confirm-backlog to only warn if the transaction backlog is greater than n blocks. + refresh-from-block-height [n] + Set the height before which to ignore blocks. + auto-low-priority <1|0> + Whether to automatically use the low priority fee level when it's safe to do so. + segregate-pre-fork-outputs <1|0> + Set this if you intend to spend outputs on both Monero AND a key reusing fork. + key-reuse-mitigation2 <1|0> + Set this if you are not sure whether you will spend on a key reusing Monero fork later. +subaddress-lookahead <major>:<minor> + Set the lookahead sizes for the subaddress hash table. + Set this if you are not sure whether you will spend on a key reusing Monero fork later. + segregation-height <n> + Set to the height of a key reusing fork you want to use, 0 to use default.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2897"/> <source>Display the encrypted Electrum-style mnemonic seed.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2722"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2900"/> <source>Rescan the blockchain for spent outputs.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2726"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2904"/> <source>Get the transaction key (r) for a given <txid>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2730"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2908"/> <source>Set the transaction key (r) for a given <txid> in case the tx was made by some other device or 3rd party wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2734"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2912"/> <source>Check the amount going to <address> in <txid>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2738"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2916"/> <source>Generate a signature proving funds sent to <address> in <txid>, optionally with a challenge string <message>, using either the transaction secret key (when <address> is not your wallet's address) or the view secret key (otherwise), which does not disclose the secret key.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2742"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2920"/> <source>Check the proof for funds going to <address> in <txid> with the challenge string <message> if any.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2746"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2924"/> <source>Generate a signature proving that you generated <txid> using the spend secret key, optionally with a challenge string <message>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2750"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2928"/> <source>Check a signature proving that the signer generated <txid>, optionally with a challenge string <message>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2754"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2932"/> <source>Generate a signature proving that you own at least this much, optionally with a challenge string <message>. If 'all' is specified, you prove the entire sum of all of your existing accounts' balances. Otherwise, you prove the reserve of the smallest possible amount above <amount> available in your current account.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2760"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2938"/> <source>Check a signature proving that the owner of <address> holds at least this much, optionally with a challenge string <message>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2780"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2958"/> <source>Show the unspent outputs of a specified address within an optional amount range.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2784"/> - <source>Rescan the blockchain from scratch, losing any information which can not be recovered from the blockchain itself.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2788"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2966"/> <source>Set an arbitrary string note for a <txid>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2792"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2970"/> <source>Get a string note for a txid.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2796"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2974"/> <source>Set an arbitrary description for the wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2800"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2978"/> <source>Get the description of the wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2803"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2981"/> <source>Show the wallet's status.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2806"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2984"/> <source>Show the wallet's information.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2810"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2988"/> <source>Sign the contents of a file.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2814"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2992"/> <source>Verify a signature on the contents of a file.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2822"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3000"/> <source>Import a signed key images list and verify their spent status.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2830"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3008"/> <source>Attempts to reconnect HW wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2834"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3012"/> <source>Export a set of outputs owned by this wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2838"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3016"/> <source>Import a set of outputs owned by this wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2842"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3020"/> <source>Show information about a transfer to/from this address.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2845"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3023"/> <source>Change the wallet's password.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2849"/> - <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="2852"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3030"/> <source>Print the information about the current fee and transaction backlog.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2854"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3032"/> <source>Export data needed to create a multisig wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2857"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3035"/> <source>Turn this wallet into a multisig wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2861"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3039"/> <source>Turn this wallet into a multisig wallet, extra step for N-1/N wallets</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2869"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3047"/> <source>Export multisig info for other participants</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2873"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3051"/> <source>Import multisig info from other participants</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2877"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3055"/> <source>Sign a multisig transaction from a file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2881"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3059"/> <source>Submit a signed multisig transaction from a file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2885"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3063"/> <source>Export a signed multisig transaction to a file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2972"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3150"/> <source>Print the ring(s) used to spend a given key image or transaction (if the ring size is > 1) Output format: @@ -1646,450 +1764,471 @@ Key Image, "absolute", list of rings</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2978"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3156"/> <source>Set the ring used for a given key image, so it can be reused in a fork</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2982"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3160"/> + <source>Unsets the ring used for a given key image or transaction</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3164"/> <source>Save known rings to the shared rings database</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2998"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3180"/> + <source>Freeze a single output by key image so it will not be used</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3184"/> + <source>Thaw a single output by key image so it may be used again</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3188"/> + <source>Checks whether a given output is currently frozen by key image</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3192"/> + <source>Prints simple network stats</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3196"/> + <source>Prints basic info about Monero for first time users</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3200"/> <source>Returns version information</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3002"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3204"/> <source>Show the help section or the documentation about a <command>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3059"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3258"/> + <source> (set this to support the network and to get a chance to receive new monero)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3269"/> <source>needs an argument</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3073"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3283"/> <source>set seed: needs an argument. available options: language</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3082"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3083"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3084"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3086"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3089"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3094"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3095"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3097"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3099"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3100"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3101"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3104"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3292"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3294"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3296"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3299"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3304"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3305"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3307"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3309"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3311"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3314"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3315"/> <source>0 or 1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3085"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3295"/> <source>integer >= </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3087"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3297"/> <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="3088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3298"/> <source>0, 1, 2, 3, or 4, or one of </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3090"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3300"/> <source>0|1|2 (or never|action|decrypt)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3091"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3301"/> <source>monero, millinero, micronero, nanonero, piconero</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3092"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3096"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3103"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3306"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3313"/> <source>unsigned integer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3093"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3303"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>amount</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3098"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3308"/> <source>block height</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3102"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3312"/> <source><major>:<minor></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3108"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3316"/> + <source>1/yes or 0/no</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3319"/> <source>set: unrecognized argument(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3377"/> <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="3178"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3389"/> <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="3183"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3394"/> <source>Wallet and key files found, loading...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3189"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> <source>Key file found but not wallet file. Regenerating...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3195"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3406"/> <source>Key file not found. Failed to open wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3203"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3414"/> <source>No wallet found with that name. Confirm creation of new wallet named: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3214"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3425"/> <source>Generating new wallet...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3273"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3506"/> <source>Can't specify more than one of --testnet and --stagenet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3285"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3521"/> <source>can't specify more than one of --generate-new-wallet="wallet_name", --wallet-file="wallet_name", --generate-from-view-key="wallet_name", --generate-from-spend-key="wallet_name", --generate-from-keys="wallet_name", --generate-from-multisig-keys="wallet_name", --generate-from-json="jsonfilename" and --generate-from-device="wallet_name"</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3304"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3540"/> <source>can't specify both --restore-deterministic-wallet or --restore-multisig-wallet and --non-deterministic</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3546"/> <source>--restore-multisig-wallet uses --generate-new-wallet, not --wallet-file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3312"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3548"/> <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="3326"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3562"/> <source>specify a recovery parameter with the --electrum-seed="multisig seed here"</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3341"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3577"/> <source>specify a recovery parameter with the --electrum-seed="words list here"</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3355"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3591"/> <source>Multisig seed failed verification</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3364"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3600"/> <source>Electrum-style word list failed verification</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3395"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3415"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3450"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3470"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3490"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3505"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3553"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3578"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3594"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3633"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3630"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3650"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3686"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3707"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3727"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3742"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3791"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3816"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3832"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3871"/> <source>No data supplied, cancelled</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3401"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3476"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3584"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5371"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5969"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6243"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6818"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6886"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6950"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7154"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8193"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8454"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3713"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3822"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5770"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6360"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6631"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7218"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7286"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7350"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7554"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8899"/> <source>failed to parse address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3406"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3481"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3641"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3718"/> <source>This address is a subaddress which cannot be used here.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3421"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3511"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3656"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3748"/> <source>failed to parse view key secret key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3430"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3528"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3665"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3765"/> <source>failed to verify view key secret key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3434"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3532"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3613"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3669"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3769"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3851"/> <source>view key does not match standard address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3439"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3459"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3536"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3669"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3674"/> <location filename="../src/simplewallet/simplewallet.cpp" line="3695"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3726"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3773"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3907"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3934"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3966"/> <source>account creation failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3455"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3496"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3638"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3691"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3733"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3876"/> <source>failed to parse spend key secret key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3520"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3658"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3757"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3896"/> <source>failed to verify spend key secret key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3524"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3663"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3761"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3901"/> <source>spend key does not match standard address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3558"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3796"/> <source>Error: expected M/N, but got: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3563"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3801"/> <source>Error: expected N > 1 and N <= M, but got: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3568"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3806"/> <source>Error: M/N is currently unsupported. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3809"/> <source>Generating master wallet from %u of %u multisig wallet keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3600"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3838"/> <source>failed to parse secret view key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3608"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3846"/> <source>failed to verify secret view key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3628"/> - <source>Secret spend key (%u of %u):</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3651"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3889"/> <source>Error: M/N is currently unsupported</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3701"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3941"/> <source>No restore height is specified.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3702"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3942"/> <source>Assumed you are creating a new account, restore will be done from current estimated blockchain height.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3703"/> - <source>Use --restore-height if you want to restore an already setup account from a specific height</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3707"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3947"/> <source>account creation aborted</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3717"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3957"/> <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="3761"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3788"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4021"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4041"/> <source>bad m_restore_height parameter: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3766"/> - <source>date format must be YYYY-MM-DD</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3779"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3985"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4032"/> <source>Restore height is: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3802"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4055"/> <source>Restore height </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3803"/> - <source>Still apply restore height? (Y/Yes/N/No): </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3816"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4069"/> <source>can't specify --subaddress-lookahead and --wallet-file at the same time</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3820"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4073"/> <source>failed to open account</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3824"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4391"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4444"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4529"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6854"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4078"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4779"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4832"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4917"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7254"/> <source>wallet is null</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3829"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4083"/> <source>Warning: using an untrusted daemon at %s, privacy will be lessened</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3832"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4086"/> <source>Failed to initialize ring database: privacy enhancing features will be inactive</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3887"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4164"/> <source>wallet failed to connect to daemon: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3888"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4165"/> <source>Daemon either is not started or wrong port was passed. Please make sure daemon is running or change the daemon address using the 'set_daemon' command.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3916"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4193"/> <source>List of available languages for your wallet's seed:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3917"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4194"/> <source>If your display freezes, exit blind with ^C, then run again with --use-english-language-names</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3935"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3940"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4212"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4217"/> <source>invalid language choice entered. Please try again. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3954"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4231"/> <source>invalid password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4000"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4277"/> <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="4016"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4365"/> <source>Generated new wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4019"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4296"/> <source>View key: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4025"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4093"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4135"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4188"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4370"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4412"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4465"/> <source>failed to generate new wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4036"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4313"/> <source>Your wallet has been generated! To start synchronizing with the daemon, use the "refresh" command. Use the "help" command to see the list of available commands. @@ -2101,742 +2240,727 @@ 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="4130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4407"/> <source>Generated new wallet on hw device: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4180"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4457"/> <source>failed to generate new mutlisig wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4183"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4460"/> <source>Generated new %u/%u multisig wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4199"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4476"/> <source>wallet file path not valid: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4209"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4486"/> <source>Key file not found. Failed to open wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4230"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4507"/> <source>Opened watch-only wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4232"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4509"/> <source>Opened %u/%u multisig wallet%s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4511"/> <source>Opened wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4252"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4529"/> <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="4267"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4544"/> <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="4275"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4552"/> <source>failed to load wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4292"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4569"/> <source>Use the "help" command to see the list of available commands. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4570"/> <source>Use "help <command>" to see a command's documentation. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4314"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4591"/> <source>failed to deinitialize wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4337"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4614"/> <source>Wallet data saved</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4351"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4628"/> <source>wallet is multisig and cannot save a watch-only version</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4359"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4636"/> <source>failed to read wallet password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4367"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4644"/> <source>Watch only wallet saved as: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4371"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4648"/> <source>Failed to save watch only wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4382"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5024"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8522"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4770"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5432"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8967"/> <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="4431"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4819"/> <source>Mining started in daemon</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4433"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4821"/> <source>mining has NOT been started: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4453"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4841"/> <source>Mining stopped in daemon</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4455"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4843"/> <source>mining has NOT been stopped: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4476"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4864"/> <source>Unexpected array length - Exited simple_wallet::set_daemon()</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4498"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4886"/> <source>Expected trusted or untrusted, got </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4515"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4903"/> <source>trusted</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4515"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4903"/> <source>untrusted</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4517"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4905"/> <source>This does not seem to be a valid daemon URL.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4537"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4925"/> <source>Blockchain saved</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4539"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4927"/> <source>blockchain can't be saved: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4552"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4589"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4940"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4973"/> <source>Height </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4553"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4590"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4941"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4974"/> <source>txid </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4555"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4592"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4943"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4976"/> <source>idx </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4569"/> - <source>NOTE: this transaction uses an encrypted payment ID: consider using subaddresses instead</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4572"/> - <source>WARNING: this transaction uses an unencrypted payment ID: consider using subaddresses instead</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4591"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4975"/> <source>spent </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4616"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5000"/> <source>Enter password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4698"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5089"/> <source>Starting refresh...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4712"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5108"/> + <source>New transfer received since rescan was started. Key images are incomplete.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5115"/> <source>Refresh done, blocks received: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4720"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5038"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5446"/> <source>daemon is busy. Please try again later.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4724"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5042"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5127"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5450"/> <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="4729"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5051"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5132"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5459"/> <source>RPC error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4734"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5137"/> <source>refresh error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4739"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5142"/> <source>internal error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4754"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5157"/> <source>refresh failed: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4754"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5157"/> <source>Blocks received: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4780"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5183"/> <source> (Some owned outputs have partial key images - import_multisig_info needed)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4782"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5185"/> <source> (Some owned outputs have missing key images - import_key_images needed)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4783"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5186"/> <source>Currently selected account: [</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4783"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5186"/> <source>] </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4785"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5188"/> <source>(No tag assigned)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4785"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5188"/> <source>Tag: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4786"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5194"/> <source>Balance: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4787"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5195"/> <source>unlocked balance: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4792"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5200"/> <source>Balance per address:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> <source>Address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8451"/> <source>Balance</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8451"/> <source>Unlocked balance</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> <source>Outputs</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8008"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9122"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8451"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9564"/> <source>Label</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4801"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5209"/> <source>%8u %6s %21s %21s %7u %21s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4893"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5301"/> <source>pubkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4893"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5301"/> <source>key image</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> <source>spent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4910"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5318"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>unlocked</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> <source>ringct</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> <source>global index</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> <source>tx id</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>addr index</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4909"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5312"/> + <source>Used at heights: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5317"/> <source>T</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4909"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5317"/> <source>F</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4910"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5318"/> <source>locked</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4911"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5318"/> + <source>[frozen]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5319"/> <source>RingCT</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4911"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5319"/> <source>-</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4924"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5332"/> <source>No incoming transfers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4928"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5336"/> <source>No incoming available transfers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4932"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5340"/> <source>No incoming unavailable transfers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>payment</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>transaction</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>height</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>unlock time</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4968"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5376"/> <source>No payments with id </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4990"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5398"/> <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="5016"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5106"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5442"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5901"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5424"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5514"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5843"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6302"/> <source>failed to get blockchain height: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5046"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5454"/> <source>failed to get spent status</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5114"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5522"/> <source> Transaction %llu/%llu: txid=%s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5538"/> <source>failed to find construction data for tx input</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5135"/> - <source> -Input %llu/%llu: amount=%s</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5151"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5559"/> <source>failed to get output: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5159"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5567"/> <source>output key's originating block height shouldn't be higher than the blockchain height</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5163"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5571"/> <source> Originating block heights: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5175"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5583"/> <source> |</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5175"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7706"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5583"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8110"/> <source>| </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5192"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5600"/> <source> Warning: Some input keys being spent are from </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5601"/> <source>the same transaction</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5601"/> <source>blocks that are temporally very close</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5194"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5602"/> <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="5234"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5853"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6156"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5642"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6254"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6547"/> <source>Ring size must not be 0</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5246"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5865"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6168"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5654"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6266"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6559"/> <source>ring size %u is too small, minimum is %u</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5251"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5870"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6173"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5659"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6271"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6564"/> <source>ring size %u is too large, maximum is %u</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5258"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5666"/> <source>wrong number of arguments</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5686"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5796"/> + <source>Warning: Unencrypted payment IDs will harm your privacy: ask the recipient to use subaddresses instead</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5690"/> <source>payment id failed to encode</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5340"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6295"/> + <source>Locked blocks too high, max 1000000 (˜4 yrs)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5737"/> <source>failed to parse short payment ID from URI</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5363"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5365"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5762"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5764"/> <source>Invalid last argument: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5382"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5782"/> <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="5399"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5800"/> <source>failed to parse payment id, though it was detected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5914"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6182"/> - <source>Failed to parse number of outputs</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5818"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6387"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6656"/> + <source>No payment id is included with this transaction. Is this okay?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5919"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6187"/> - <source>Amount of outputs should be greater than 0</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5882"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5892"/> + <source>Is this okay anyway?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5958"/> - <source>payment id has invalid format, expected 16 or 64 character hex string: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5887"/> + <source>There is currently a %u block backlog at that fee level. Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6124"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6435"/> + <source>Sweeping %s in %llu transactions for a total fee of %s. Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6441"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6698"/> + <source>Sweeping %s for a total fee of %s. Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6177"/> + <source>Discarding %s of unmixable outputs that cannot be spent, which can be undone by "rescan_spent". Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6315"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6573"/> + <source>Failed to parse number of outputs</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6320"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6578"/> + <source>Amount of outputs should be greater than 0</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5276"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5395"/> - <source>Unencrypted payment IDs are bad for privacy: ask the recipient to use subaddresses instead</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6349"/> + <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="5307"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5704"/> <source>bad locked_blocks parameter:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5978"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6251"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6369"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6639"/> <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="5405"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5987"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6219"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6259"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5806"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6378"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6607"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6647"/> <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="1036"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1158"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1059"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1181"/> <source>Send this multisig info to all other participants, then use exchange_multisig_keys <info1> [<info2>...] with others' multisig info</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1167"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1190"/> <source>Multisig wallet has been successfully created. Current wallet type: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1172"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1196"/> <source>Failed to perform multisig keys exchange: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1499"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1523"/> <source>Failed to load multisig transaction from MMS</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1935"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1991"/> <source>Failed to mark output spent: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1962"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2018"/> <source>Failed to mark output unspent: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1986"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2042"/> <source>Spent: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1988"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2044"/> <source>Not spent: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1992"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2048"/> <source>Failed to check whether output is spent: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2022"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2171"/> <source>Please confirm the transaction on the device</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2510"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2686"/> <source>Device name not specified</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2519"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2695"/> <source>Device reconnect failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2524"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2700"/> <source>Device reconnect failed: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2583"/> - <source>Show the incoming transfers, all or filtered by availability and address index. - -Output format: -Amount, Spent("T"|"F"), "locked"|"unlocked", RingCT, Global Index, Transaction Hash, Address Index, [Public Key, Key Image] </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2673"/> - <source>Available options: - seed language - Set the wallet's 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-ring-size <n> - Set the default ring size (obsolete). - auto-refresh <1|0> - Whether to automatically synchronize new blocks from the daemon. - refresh-type <full|optimize-coinbase|no-coinbase|default> - Set the wallet's refresh behaviour. - priority [0|1|2|3|4] - Set the fee to default/unimportant/normal/elevated/priority. - confirm-missing-payment-id <1|0> - ask-password <0|1|2 (or never|action|decrypt)> - unit <monero|millinero|micronero|nanonero|piconero> - Set the 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. - confirm-backlog <1|0> - Whether to warn if there is transaction backlog. - confirm-backlog-threshold [n] - Set a threshold for confirm-backlog to only warn if the transaction backlog is greater than n blocks. - refresh-from-block-height [n] - Set the height before which to ignore blocks. - auto-low-priority <1|0> - Whether to automatically use the low priority fee level when it's safe to do so. - segregate-pre-fork-outputs <1|0> - Set this if you intend to spend outputs on both Monero AND a key reusing fork. - key-reuse-mitigation2 <1|0> - Set this if you are not sure whether you will spend on a key reusing Monero fork later. -subaddress-lookahead <major>:<minor> - Set the lookahead sizes for the subaddress hash table. - Set this if you are not sure whether you will spend on a key reusing Monero fork later. - segregation-height <n> - Set to the height of a key reusing fork you want to use, 0 to use default.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2765"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2943"/> <source>Show the incoming/outgoing transfers within an optional height range. Output format: @@ -2850,32 +2974,42 @@ Pending or Failed: "failed"|"pending", "o <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2775"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2953"/> <source>export_transfers [in|out|all|pending|failed|coinbase] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]] [output=<filepath>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2776"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2954"/> <source>Export to CSV the incoming/outgoing transfers within an optional height range.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2818"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2962"/> + <source>Rescan the blockchain from scratch. If "hard" is specified, you will lose any information which can not be recovered from the blockchain itself.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2996"/> <source>Export a signed set of key images to a <filename>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2826"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3004"/> <source>Synchronizes key images with the hw wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2865"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3027"/> + <source>Generate a new random full size payment id (obsolete). 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="3043"/> <source>Performs extra multisig keys exchange rounds. Needed for arbitrary M/N multisig wallets</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2889"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3067"/> <source>Interface with the MMS (Multisig Messaging System) <subcommand> is one of: init, info, signer, list, next, sync, transfer, delete, send, receive, export, note, show, set, help @@ -2884,73 +3018,73 @@ Get help about a subcommand with: help mms <subcommand>, or mms help <s <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2897"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3075"/> <source>Initialize and configure the MMS for M/N = number of required signers/number of authorized signers multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2901"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3079"/> <source>Display current MMS configuration</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2905"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3083"/> <source>Set or modify authorized signer info (single-word label, transport address, Monero address), or list all signers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2909"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3087"/> <source>List all messages</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2913"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3091"/> <source>Evaluate the next possible multisig-related action(s) according to wallet state, and execute or offer for choice By using 'sync' processing of waiting messages with multisig sync info can be forced regardless of wallet state</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2918"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3096"/> <source>Force generation of multisig sync info regardless of wallet state, to recover from special situations like "stale data" errors</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2922"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3100"/> <source>Initiate transfer with MMS support; arguments identical to normal 'transfer' command arguments, for info see there</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2926"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3104"/> <source>Delete a single message by giving its id, or delete all messages by using 'all'</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2930"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3108"/> <source>Send a single message by giving its id, or send all waiting messages</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2934"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3112"/> <source>Check right away for new messages to receive</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2938"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3116"/> <source>Write the content of a message to a file "mms_message_content"</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2942"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3120"/> <source>Send a one-line message to an authorized signer, identified by its label, or show any waiting unread notes</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2946"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3124"/> <source>Show detailed info about a single message</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2950"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3128"/> <source>Available options: auto-send <1|0> Whether to automatically send newly generated messages right away. @@ -2958,1548 +3092,1638 @@ By using 'sync' processing of waiting messages with multisig sync info <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3134"/> <source>Send completed signer config to all other authorized signers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2960"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3138"/> <source>Start auto-config at the auto-config manager's wallet by issuing auto-config tokens and optionally set others' labels</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2964"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3142"/> <source>Delete any auto-config tokens and abort a auto-config process</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2968"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3146"/> <source>Start auto-config by using the token received from the auto-config manager</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2986"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3168"/> <source>Mark output(s) as spent so they never get selected as fake outputs in a ring</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2990"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3172"/> <source>Marks an output as unspent so it may get selected as a fake output in a ring</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2994"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3176"/> <source>Checks whether an output is marked as spent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3106"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3317"/> <source><device_name[:device_spec]></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3127"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3338"/> <source>wrong number range, use: %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3232"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3443"/> <source>NOTE: the following %s can be used to recover access to your wallet. 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="3234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3445"/> <source>string</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3445"/> <source>25 words</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4631"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3866"/> + <source>Secret spend key (%u of %u)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3943"/> + <source>Use --restore-height or --restore-date if you want to restore an already setup account from a specific height.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3945"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4033"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5984"/> + <source>Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4056"/> + <source>Still apply restore height?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4203"/> + <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="4956"/> + <source>WARNING: this transaction uses an unencrypted payment ID: consider using subaddresses instead.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <source>WARNING: this transaction uses an unencrypted payment ID: these are obsolete. Support will be withdrawn in the future. Use subaddresses instead.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5015"/> <source>Device requires attention</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4639"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5023"/> <source>Enter device PIN</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4641"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5025"/> <source>Failed to read device PIN</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4648"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5032"/> <source>Please enter the device passphrase on the device</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4655"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5039"/> <source>Enter device passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4657"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5041"/> <source>Failed to read device passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4673"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5057"/> <source>The first refresh has finished for the HW-based wallet with received money. hw_key_images_sync is needed. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4675"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4753"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5059"/> <source>Do you want to do it now? (Y/Yes/N/No): </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4677"/> - <source>hw_key_images_sync skipped. Run command manually before a transfer.</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4093"/> + <source>If you are new to Monero, type "welcome" for a brief overview.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4855"/> - <source>Invalid keyword: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4098"/> + <source>WARNING: obsolete long payment IDs are enabled. Sending transactions with those payment IDs are bad for your privacy.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4904"/> - <source>Heights: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4100"/> + <source>It is recommended that you do not use them, and ask recipients who ask for one to not endanger your privacy.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5312"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5894"/> - <source>Locked blocks too high, max 1000000 (Ë4 yrs)</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4664"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4696"/> + <source>Failed to query mining status: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5354"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6417"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7115"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7600"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7608"/> - <source>amount is wrong: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4679"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4707"/> + <source>Failed to setup background mining: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5355"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6417"/> - <source>expected number from 0 to </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4683"/> + <source>Background mining enabled. Thank you for supporting the Monero network.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5417"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5996"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6268"/> - <source>No payment id is included with this transaction. Is this okay? (Y/Yes/N/No): </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4711"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4719"/> + <source>Background mining not enabled. Run "set setup-background-mining 1" to change.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5422"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5502"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5590"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5738"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6001"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6059"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6273"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6318"/> - <source>transaction cancelled.</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4725"/> + <source>Using an untrusted daemon, skipping background mining check</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5458"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6016"/> - <source>No outputs found, or daemon is not ready</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4750"/> + <source>The daemon is not set up to background mine.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4751"/> + <source>With background mining enabled, the daemon will mine when idle and not on batttery.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5481"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5491"/> - <source>Is this okay anyway? (Y/Yes/N/No): </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4752"/> + <source>Enabling this supports the network you are using, and makes you eligible for receiving new monero</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5491"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4757"/> + <source>Background mining not enabled. Set setup-background-mining to 1 to change.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5061"/> + <source>hw_key_images_sync skipped. Run command manually before a transfer.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5263"/> + <source>Invalid keyword: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5543"/> + <source> +Input %llu/%llu (%s): amount=%s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5752"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6805"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7515"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8004"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8012"/> + <source>amount is wrong: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5753"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6805"/> + <source>expected number from 0 to </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5823"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5903"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5991"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6139"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6392"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6450"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6661"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6706"/> + <source>transaction cancelled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5859"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6407"/> + <source>No outputs found, or daemon is not ready</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5892"/> <source>Failed to check for backlog: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5532"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6032"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5933"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6423"/> <source> Transaction </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5539"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6039"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5940"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6430"/> <source>WARNING: Outputs of multiple addresses are being used together, which might potentially compromise your privacy. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5554"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5955"/> <source>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5603"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6004"/> <source>Unsigned transaction(s) successfully written to MMS</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5611"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5648"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5749"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5761"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6070"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6107"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6328"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6340"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6012"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6049"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6150"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6162"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6461"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6498"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6716"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6728"/> <source>Failed to write transaction(s) to file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5616"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5653"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5753"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5765"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6074"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6111"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6332"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6344"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6017"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6054"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6154"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6465"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6502"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6720"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6732"/> <source>Unsigned transaction(s) successfully written to file: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5625"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6086"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6026"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6477"/> <source>Failed to cold sign transaction with HW wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5708"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6109"/> <source>No unmixable outputs found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5721"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6122"/> <source>Sweeping </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5723"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6044"/> - <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="5729"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6050"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6310"/> - <source>Sweeping %s for a total fee of %s. Is this okay? (Y/Yes/N/No): </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6816"/> + <source>Failed to parse donation address: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6428"/> - <source>Failed to parse donation address: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6832"/> + <source>Donating %s %s to %s.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6444"/> - <source>Donating %s %s to %s.</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6980"/> + <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min ring size %lu, %s. %sIs this okay?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7493"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7897"/> <source>usage: export_transfers [in|out|all|pending|failed|coinbase] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]] [output=<path>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>direction</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>timestamp</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>running balance</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>hash</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>payment ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>fee</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>destination</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>index</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>note</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7572"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7976"/> <source>CSV exported to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7750"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8161"/> + <source>Rescan anyway?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="8172"/> + <source>Warning: your restore height is higher than wallet restore height: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="8173"/> + <source>Rescan anyway ? (Y/Yes/N/No): </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="8192"/> <source>MMS received new message</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8385"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8654"/> + <source>Short payment IDs are to be used within an integrated address only</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="8830"/> <source>Normal</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8386"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9180"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8831"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9622"/> <source>Type: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8387"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8832"/> <source>Network type: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8388"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8833"/> <source>Testnet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8389"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8834"/> <source>Stagenet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8389"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8834"/> <source>Mainnet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9015"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9457"/> <source> (Y/Yes/N/No): </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9042"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9484"/> <source>Choose processing:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9051"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9493"/> <source>Sign tx</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9059"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9501"/> <source>Send the tx for submission to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9063"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9505"/> <source>Send the tx for signing to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9070"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9512"/> <source>Submit tx</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9073"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9515"/> <source>unknown</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9079"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9521"/> <source>Choice: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9091"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9533"/> <source>Wrong choice</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9098"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9540"/> <source>Id</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9098"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9540"/> <source>I/O</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9098"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9540"/> <source>Authorized Signer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>Message Type</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>Height</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>R</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>Message State</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>Since</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9116"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9558"/> <source> ago</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9122"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9564"/> <source>#</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9122"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9564"/> <source>Transport Address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9565"/> <source>Auto-Config Token</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9565"/> <source>Monero Address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9127"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9135"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9137"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9569"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9577"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9579"/> <source><not set></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9178"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9620"/> <source>Message </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9179"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9621"/> <source>In/out: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9623"/> <source>State: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9623"/> <source>%s since %s, %s ago</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9185"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9627"/> <source>Sent: Never</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9189"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9631"/> <source>Sent: %s, %s ago</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9192"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9634"/> <source>Authorized signer: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9635"/> <source>Content size: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9635"/> <source> bytes</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9194"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9636"/> <source>Content: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9194"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9636"/> <source>(binary data)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9224"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9666"/> <source>Send these messages now?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9676"/> <source>Queued for sending.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9254"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9696"/> <source>Invalid message id</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9263"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9705"/> <source>usage: mms init <required_signers>/<authorized_signers> <own_label> <own_transport_address></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9269"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9711"/> <source>The MMS is already initialized. Re-initialize by deleting all signer info and messages?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9284"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9726"/> <source>Error in the number of required signers and/or authorized signers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9301"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9743"/> <source>The MMS is not active.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9324"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9766"/> <source>Invalid signer number </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9329"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9771"/> <source>mms signer [<number> <label> [<transport_address> [<monero_address>]]]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9348"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9790"/> <source>Invalid Monero address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9355"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9797"/> <source>Wallet state does not allow changing Monero addresses anymore</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9367"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9809"/> <source>Usage: mms list</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9380"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9822"/> <source>Usage: mms next [sync]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9405"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9847"/> <source>No next step: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9415"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9857"/> <source>prepare_multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9421"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9863"/> <source>make_multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9436"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9878"/> <source>exchange_multisig_keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9451"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9893"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10013"/> <source>export_multisig_info</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9460"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9902"/> <source>import_multisig_info</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9473"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9915"/> <source>sign_multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9483"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9925"/> <source>submit_multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9493"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9935"/> <source>Send tx</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9504"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9946"/> <source>Process signer config</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9516"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9958"/> <source>Replace current signer config with the one displayed above?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9530"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9972"/> <source>Process auto config data</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9544"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9986"/> <source>Nothing ready to process</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9564"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10006"/> <source>Usage: mms sync</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9588"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10030"/> <source>Usage: mms delete (<message_id> | all)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9595"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10037"/> <source>Delete all messages?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9621"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10063"/> <source>Usage: mms send [<message_id>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9638"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10080"/> <source>Usage: mms receive</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9655"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10097"/> <source>Usage: mms export <message_id></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9667"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10109"/> <source>Message content saved to: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9671"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10113"/> <source>Failed to to save message content</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9695"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10137"/> <source>Usage: mms note [<label> <text>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9702"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10144"/> <source>No signer found with label </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9724"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10166"/> <source>Usage: mms show <message_id></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9743"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10185"/> <source>Usage: mms set <option_name> [<option_value>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9760"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10202"/> <source>Wrong option value</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9765"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10207"/> <source>Auto-send is on</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9765"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10207"/> <source>Auto-send is off</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9770"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10212"/> <source>Unknown option</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9778"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10220"/> <source>Usage: mms help [<subcommand>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9794"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10236"/> <source>Usage: mms send_signer_config</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9800"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10242"/> <source>Signer config not yet complete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9815"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10257"/> <source>Usage: mms start_auto_config [<label> <label> ...]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9820"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10262"/> <source>There are signers without a label set. Complete labels before auto-config or specify them as parameters here.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9826"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10268"/> <source>Auto-config is already running. Cancel and restart?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9850"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10292"/> <source>Usage: mms stop_auto_config</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9853"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10295"/> <source>Delete any auto-config tokens and stop auto-config?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9866"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10308"/> <source>Usage: mms auto_config <auto_config_token></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9873"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10315"/> <source>Invalid auto-config token</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9879"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10321"/> <source>Auto-config already running. Cancel and restart?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9911"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10339"/> + <source>MMS not available in this wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="10363"/> <source>The MMS is not active. Activate using the "mms init" command</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9988"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10440"/> <source>Invalid MMS subcommand</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9993"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9997"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10445"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10449"/> <source>Error in MMS command: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8407"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8852"/> <source>wallet is watch-only and cannot sign</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8412"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8857"/> <source>This wallet is multisig and cannot sign</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8461"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8906"/> <source>Bad signature from </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8465"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8910"/> <source>Good signature from </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8484"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8929"/> <source>wallet is watch-only and cannot export key images</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8509"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8954"/> <source>Signed key images exported to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8559"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8605"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8999"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9045"/> <source>command only supported by HW wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8564"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9004"/> <source>hw wallet does not support cold KI sync</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8576"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9016"/> <source>Please confirm the key image sync on the device</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8582"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9022"/> <source>Key images synchronized to height </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8585"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9025"/> <source>Running untrusted daemon, cannot determine which transaction output is spent. Use a trusted daemon with --trusted-daemon and run rescan_spent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8588"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9028"/> <source> spent, </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8588"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9028"/> <source> unspent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8592"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9032"/> <source>Failed to import key images</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8597"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9037"/> <source>Failed to import key images: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8614"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9054"/> <source>Failed to reconnect device</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8619"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9059"/> <source>Failed to reconnect device: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8662"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9102"/> <source>Outputs exported to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8813"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9253"/> <source>Double spend seen on the network: this transaction may or may not end up being mined</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8848"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9288"/> <source>Transaction ID not found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8883"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9323"/> <source>Transaction successfully saved to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8883"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8885"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9323"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9325"/> <source>, txid </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8885"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9325"/> <source>Failed to save transaction to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="336"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="357"/> <source>true</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="389"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="410"/> <source>failed to parse refresh type</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="751"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="772"/> <source>Enter optional seed offset passphrase, empty to see raw seed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3369"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3605"/> <source>Enter seed offset passphrase, empty if none</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4286"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4563"/> <source>You may want to remove the file "%s" and try again</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5776"/> - <source>Discarding %s of unmixable outputs that cannot be spent, which can be undone by "rescan_spent". Is this okay? (Y/Yes/N/No): </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6442"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6830"/> <source>Donating %s %s to The Monero Project (donate.getmonero.org or %s).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6606"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7009"/> <source>This is a multisig wallet, it can only sign with sign_multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6611"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7014"/> <source>This is a watch only wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6629"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7032"/> <source>Failed to sign transaction</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6635"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7038"/> <source>Failed to sign transaction: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6656"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7059"/> <source>Transaction raw hex data exported to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6677"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7080"/> <source>Failed to load transaction from file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6713"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6749"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6811"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6860"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6942"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7027"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7062"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8267"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8295"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8714"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7116"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7154"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7211"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7260"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7342"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7427"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7462"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8711"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8739"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9154"/> <source>failed to parse txid</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6727"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7132"/> <source>Tx key: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6732"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7137"/> <source>no tx keys found for this txid</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6759"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6770"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6777"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7164"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7175"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7182"/> <source>failed to parse tx_key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6786"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7191"/> <source>Tx key successfully stored.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6790"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7195"/> <source>Failed to store tx key: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6829"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7041"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7229"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7441"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7530"/> <source>signature file saved to: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6831"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7043"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7132"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7231"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7443"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7532"/> <source>failed to save signature file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6835"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6923"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7001"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7235"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7323"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7401"/> <source>error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6868"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6877"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7268"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7277"/> <source>failed to parse tx key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6899"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6972"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7299"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7372"/> <source>received</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6899"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6972"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7299"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7372"/> <source>in txid</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6902"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6975"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7375"/> <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="6912"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6985"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7312"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7385"/> <source>WARNING: failed to determine number of confirmations!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6918"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6991"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7318"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7391"/> <source>received nothing in txid</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6958"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7072"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7358"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7472"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7566"/> <source>failed to load signature file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6969"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7079"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7369"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7479"/> <source>Good signature</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6996"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7081"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7396"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7481"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7581"/> <source>Bad signature</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7020"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7420"/> <source>wallet is watch-only and cannot generate the proof</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7104"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7504"/> <source>The reserve proof can be generated only by a full wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7159"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7559"/> <source>Address must not be a subaddress</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7440"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7844"/> <source>usage: show_transfers [in|out|all|pending|failed|coinbase] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7266"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7666"/> <source>bad min_height parameter:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7278"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7678"/> <source>bad max_height parameter:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7296"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7696"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>block</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7296"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7696"/> <source>in</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7365"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7767"/> <source>[Double spend seen on the network: this transaction may or may not end up being mined] </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7615"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8019"/> <source><min_amount> should be smaller than <max_amount></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7641"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8045"/> <source>There is no unspent output in the specified address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7647"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8051"/> <source> Amount: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7647"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8051"/> <source>, number of keys: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7652"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8056"/> <source> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7657"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8061"/> <source> Min block height: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7658"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8062"/> <source> Max block height: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7659"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8063"/> <source> Min amount found: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7660"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8064"/> <source> Max amount found: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7661"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8065"/> <source> Total count: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7701"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8105"/> <source> Bin size: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7702"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8106"/> <source> Outputs per *: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7704"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8108"/> <source>count ^ </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7706"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8110"/> <source> |</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7708"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8112"/> <source> +</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7708"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8112"/> <source>+--> block height </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8113"/> <source> ^</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8113"/> <source>^ </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7710"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8114"/> <source> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7730"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8159"/> <source>Warning: this will lose any information which can not be recovered from the blockchain.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7731"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8160"/> <source>This includes destination addresses, tx secret keys, tx notes, etc</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7732"/> - <source>Rescan anyway ? (Y/Yes/N/No): </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7177"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7577"/> <source>Good signature -- total: %s, spent: %s, unspent: %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1890"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1946"/> <source>First line is not an amount</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1904"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1960"/> <source>Invalid output: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1929"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1985"/> <source>Invalid output key, and file doesn't exist</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1952"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1979"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2035"/> <source>Invalid output</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2108"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2257"/> <source>WARNING: from v8, ring size will be fixed and this setting will be ignored.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2249"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2400"/> <source>invalid argument: must be either 0/never, 1/action, or 2/encrypt/decrypt</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2595"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2771"/> <source>Transfer <amount> to <address>. If the parameter "index=<N1>[,<N2>,...]" is specified, the wallet uses outputs received by addresses of those indices. If omitted, the wallet randomly chooses address indices to be used. In any case, it tries its best not to combine outputs across multiple addresses. <priority> is the priority of the transaction. The higher the priority, the higher the transaction fee. Valid values in priority order (from lowest to highest) are: unimportant, normal, elevated, priority. If omitted, the default value (see the command "set priority") is used. <ring_size> is the number of inputs to include for untraceability. Multiple payments can be made at once by adding URI_2 or <address_2> <amount_2> etcetera (before the payment ID, if it's included)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2599"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2775"/> <source>Transfer <amount> to <address> and lock it for <lockblocks> (max. 1000000). If the parameter "index=<N1>[,<N2>,...]" is specified, the wallet uses outputs received by addresses of those indices. If omitted, the wallet randomly chooses address indices to be used. In any case, it tries its best not to combine outputs across multiple addresses. <priority> is the priority of the transaction. The higher the priority, the higher the transaction fee. Valid values in priority order (from lowest to highest) are: unimportant, normal, elevated, priority. If omitted, the default value (see the command "set priority") is used. <ring_size> is the number of inputs to include for untraceability. Multiple payments can be made at once by adding URI_2 or <address_2> <amount_2> etcetera (before the payment ID, if it's included)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2609"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2785"/> <source>Send all unlocked balance to an address. If the parameter "index<N1>[,<N2>,...]" is specified, the wallet sweeps outputs received by those address indices. If omitted, the wallet randomly chooses an address index to be used. If the parameter "outputs=<N>" is specified and N > 0, wallet splits the transaction into N even outputs.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4608"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4992"/> <source>Password needed (%s) - use the refresh command</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7797"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8240"/> <source>wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7799"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8242"/> <source> (no daemon)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7801"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8244"/> <source> (out of sync)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7852"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8295"/> <source>(Untitled account)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7865"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7883"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7908"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7931"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8077"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8100"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8308"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8326"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8351"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8374"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8520"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8543"/> <source>failed to parse index: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7870"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8082"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8313"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8525"/> <source>specify an index between 0 and </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7988"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8431"/> <source> Grand total: Balance: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7988"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8431"/> <source>, unlocked balance: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7996"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8439"/> <source>Untagged accounts:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8002"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8445"/> <source>Tag %s is unregistered.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8005"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8448"/> <source>Accounts with tag: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8006"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8449"/> <source>Tag's description: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8451"/> <source>Account</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8014"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8457"/> <source> %c%8u %6s %21s %21s %21s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8024"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8467"/> <source>----------------------------------------------------------------------------------</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8025"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8468"/> <source>%15s %21s %21s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8048"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8491"/> <source>Primary address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8048"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8491"/> <source>(used)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8069"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8512"/> <source>(Untitled address)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8109"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8552"/> <source><index_min> is already out of bound</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8114"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8557"/> <source><index_max> exceeds the bound</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8140"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8152"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8583"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8595"/> <source>Integrated addresses can only be created for account 0</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8145"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8588"/> <source>Matching integrated address: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8164"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8607"/> <source>Integrated address: %s, payment ID: %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8169"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8612"/> <source>Subaddress: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8169"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8612"/> <source>Standard address: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8174"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8617"/> <source>failed to parse payment ID or address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8215"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8659"/> <source>failed to parse payment ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8233"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8677"/> <source>failed to parse index</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8241"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8685"/> <source>Address book is empty.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8247"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8691"/> <source>Index: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8248"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8378"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8692"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8823"/> <source>Address: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8249"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8693"/> <source>Payment ID: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8250"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8377"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8694"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8822"/> <source>Description: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8335"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8779"/> <source>no description found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8337"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8781"/> <source>description found: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8376"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8821"/> <source>Filename: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8381"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8826"/> <source>Watch only</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8383"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8828"/> <source>%u/%u multisig%s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6974"/> <source>%s change to %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6908"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6981"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7308"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7381"/> <source>This transaction has %u confirmations</source> <translation type="unfinished"></translation> </message> @@ -4751,311 +4975,321 @@ Use "mms note" to display the waiting notes</source> <context> <name>sw</name> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="125"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="135"/> <source>Generate new wallet and save it to <arg></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="126"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="136"/> <source>Generate new wallet from device and save it to <arg></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="127"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="137"/> <source>Generate incoming-only wallet from view key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="128"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="138"/> <source>Generate deterministic wallet from spend key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="129"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="139"/> <source>Generate wallet from private keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="140"/> <source>Generate a master wallet from multisig wallet keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="132"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="142"/> <source>Language for mnemonic</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="133"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="143"/> <source>Specify Electrum seed for wallet recovery/creation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="134"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="144"/> <source>Recover wallet using Electrum-style mnemonic seed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="135"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="145"/> <source>Recover multisig wallet using Electrum-style mnemonic seed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="136"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="146"/> <source>Generate non-deterministic view and spend keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="276"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="149"/> + <source>Restore from estimated blockchain height on specified date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="297"/> <source>failed to read wallet password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="283"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="304"/> <source>Enter a new password for the wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="283"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="304"/> <source>Wallet password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="361"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="382"/> <source>invalid argument: must be either 0/1, true/false, y/n, yes/no</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="417"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="438"/> <source>DNSSEC validation passed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="421"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="442"/> <source>WARNING: DNSSEC validation was unsuccessful, this address may not be correct!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="424"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="445"/> <source>For URL: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="426"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="447"/> <source> Monero Address = </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="428"/> - <source>Is this OK? (Y/n) </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="438"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="459"/> <source>you have cancelled the transfer request</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="459"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="480"/> <source>failed to parse index: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="472"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="493"/> <source>invalid format for subaddress lookahead; must be <major>:<minor></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="489"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="510"/> <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="494"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="515"/> <source>RPC error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="498"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="519"/> <source>failed to get random outputs to mix: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="505"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="513"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="526"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="534"/> <source>Not enough money in unlocked balance</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="523"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="544"/> <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="529"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="550"/> <source>not enough outputs for specified ring size</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="532"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="553"/> <source>output amount</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="532"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="553"/> <source>found outputs to use</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="534"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="555"/> <source>Please use sweep_unmixable.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="538"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="559"/> <source>transaction was not constructed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="543"/> - <source>transaction %s was rejected by daemon with status: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="546"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="567"/> <source>Reason: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="555"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="576"/> <source>one of destinations is zero</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="560"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="581"/> <source>failed to find a suitable way to split transactions</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="566"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="587"/> <source>unknown transfer error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="592"/> <source>Multisig error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="577"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="598"/> <source>internal error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="582"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="603"/> <source>unexpected error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="586"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="607"/> <source>There was an error, which could mean the node may be trying to get you to retry creating a transaction, and zero in on which outputs you own. Or it could be a bona fide error. It may be prudent to disconnect from this node, and not try to send a transaction immediately. Alternatively, connect to another node so the original node cannot correlate information.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="596"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="617"/> <source>File %s likely stores wallet private keys! Use a different file name.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="599"/> - <source>File %s already exists. Are you sure to overwrite it? (Y/Yes/N/No): </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7195"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7595"/> <source> seconds</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7197"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7597"/> <source> minutes</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7199"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7599"/> <source> hours</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7601"/> <source> days</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7203"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7603"/> <source> months</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7204"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7604"/> <source>a long time</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8940"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9382"/> <source>This is the command line monero wallet. It needs to connect to a monero daemon to work correctly. WARNING: Do not reuse your Monero keys on another fork, UNLESS this fork has key reuse mitigations built in. Doing so will harm your privacy.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8965"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9407"/> <source>Unknown command: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="137"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="147"/> <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="138"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="148"/> <source>Restore from specific blockchain height</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="139"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="150"/> <source>The newly created transaction will not be relayed to the monero network</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="140"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="151"/> <source>Create an address file for new wallets</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="142"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="153"/> <source>Display English language names</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="293"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="485"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="154"/> + <source>Support obsolete long (unencrypted) payment ids (using them harms your privacy)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="314"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="506"/> <source>daemon is busy. Please try again later.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="323"/> <source>possibly lost connection to daemon</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="319"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="340"/> <source>Error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8959"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="449"/> + <source>Is this OK?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="564"/> + <source>transaction %s was rejected by daemon</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="620"/> + <source>File %s already exists. Are you sure to overwrite it?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="9401"/> <source>Failed to initialize wallet</source> <translation type="unfinished"></translation> </message> @@ -5063,359 +5297,447 @@ WARNING: Do not reuse your Monero keys on another fork, UNLESS this fork has key <context> <name>tools::wallet2</name> <message> - <location filename="../src/wallet/wallet2.cpp" line="201"/> + <location filename="../src/wallet/wallet2.cpp" line="234"/> <source>Use daemon instance at <host>:<port></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="202"/> + <location filename="../src/wallet/wallet2.cpp" line="235"/> <source>Use daemon instance at host <arg> instead of localhost</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="206"/> + <location filename="../src/wallet/wallet2.cpp" line="240"/> <source>Wallet password file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="207"/> + <location filename="../src/wallet/wallet2.cpp" line="241"/> <source>Use daemon instance at port <arg> instead of 18081</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="209"/> + <location filename="../src/wallet/wallet2.cpp" line="250"/> <source>For testnet. Daemon must also be launched with --testnet flag</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="282"/> + <location filename="../src/wallet/wallet2.cpp" line="361"/> <source>can't specify daemon host or port more than once</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="355"/> + <location filename="../src/wallet/wallet2.cpp" line="480"/> <source>can't specify more than one of --password and --password-file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="368"/> + <location filename="../src/wallet/wallet2.cpp" line="493"/> <source>the password file specified could not be read</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="394"/> + <location filename="../src/wallet/wallet2.cpp" line="519"/> <source>Failed to load file </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="205"/> + <location filename="../src/wallet/wallet2.cpp" line="239"/> <source>Wallet password (escape/quote as needed)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="203"/> + <location filename="../src/wallet/wallet2.cpp" line="236"/> + <source>[<ip>:]<port> socks proxy to use for daemon connections</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="237"/> <source>Enable commands which rely on a trusted daemon</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="204"/> + <location filename="../src/wallet/wallet2.cpp" line="238"/> <source>Disable commands which rely on a trusted daemon</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="208"/> + <location filename="../src/wallet/wallet2.cpp" line="242"/> <source>Specify username[:password] for daemon RPC client</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="210"/> + <location filename="../src/wallet/wallet2.cpp" line="243"/> + <source>Enable SSL on daemon RPC connections: enabled|disabled|autodetect</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="247"/> + <source>List of valid fingerprints of allowed RPC servers</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="248"/> + <source>Allow any SSL certificate from the daemon</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="249"/> + <source>Allow user (via --daemon-ssl-ca-certificates) chain certificates</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="251"/> <source>For stagenet. Daemon must also be launched with --stagenet flag</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="212"/> + <location filename="../src/wallet/wallet2.cpp" line="253"/> <source>Set shared ring database path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="223"/> + <location filename="../src/wallet/wallet2.cpp" line="264"/> <source>Number of rounds for the key derivation function</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="224"/> + <location filename="../src/wallet/wallet2.cpp" line="265"/> <source>HW device to use</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="225"/> + <location filename="../src/wallet/wallet2.cpp" line="266"/> <source>HW device wallet derivation path (e.g., SLIP-10)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="313"/> + <location filename="../src/wallet/wallet2.cpp" line="268"/> + <source>Do not use DNS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="269"/> + <source>Do not connect to a daemon, nor use DNS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="353"/> + <source>Invalid argument for </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="397"/> + <source>Enabling --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="397"/> + <source> requires --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="398"/> + <source> or --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="398"/> + <source> or use of a .onion/.i2p domain</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="432"/> <source>--trusted-daemon and --untrusted-daemon are both seen, assuming untrusted</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="323"/> + <location filename="../src/wallet/wallet2.cpp" line="442"/> <source>Daemon is local, assuming trusted</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="375"/> + <location filename="../src/wallet/wallet2.cpp" line="500"/> <source>no password specified; use --prompt-for-password to prompt for a password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="377"/> + <location filename="../src/wallet/wallet2.cpp" line="502"/> <source>Enter a new password for the wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="377"/> + <location filename="../src/wallet/wallet2.cpp" line="502"/> <source>Wallet password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="400"/> + <location filename="../src/wallet/wallet2.cpp" line="525"/> <source>Failed to parse JSON</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="407"/> + <location filename="../src/wallet/wallet2.cpp" line="532"/> <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="423"/> + <location filename="../src/wallet/wallet2.cpp" line="548"/> <source>failed to parse view key secret key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="428"/> - <location filename="../src/wallet/wallet2.cpp" line="496"/> - <location filename="../src/wallet/wallet2.cpp" line="539"/> + <location filename="../src/wallet/wallet2.cpp" line="553"/> + <location filename="../src/wallet/wallet2.cpp" line="621"/> + <location filename="../src/wallet/wallet2.cpp" line="666"/> <source>failed to verify view key secret key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="439"/> + <location filename="../src/wallet/wallet2.cpp" line="564"/> <source>failed to parse spend key secret key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="444"/> - <location filename="../src/wallet/wallet2.cpp" line="506"/> - <location filename="../src/wallet/wallet2.cpp" line="565"/> + <location filename="../src/wallet/wallet2.cpp" line="569"/> + <location filename="../src/wallet/wallet2.cpp" line="631"/> + <location filename="../src/wallet/wallet2.cpp" line="692"/> <source>failed to verify spend key secret key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="456"/> + <location filename="../src/wallet/wallet2.cpp" line="581"/> <source>Electrum-style word list failed verification</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="476"/> + <location filename="../src/wallet/wallet2.cpp" line="601"/> <source>At least one of either an Electrum-style word list, private view key, or private spend key must be specified</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="480"/> + <location filename="../src/wallet/wallet2.cpp" line="605"/> <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="490"/> + <location filename="../src/wallet/wallet2.cpp" line="615"/> <source>invalid address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="499"/> + <location filename="../src/wallet/wallet2.cpp" line="624"/> <source>view key does not match standard address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="509"/> + <location filename="../src/wallet/wallet2.cpp" line="634"/> <source>spend key does not match standard address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="517"/> + <location filename="../src/wallet/wallet2.cpp" line="642"/> <source>Cannot generate deprecated wallets from JSON</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="551"/> + <location filename="../src/wallet/wallet2.cpp" line="678"/> <source>failed to parse address: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="557"/> + <location filename="../src/wallet/wallet2.cpp" line="684"/> <source>Address must be specified in order to create watch-only wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="574"/> + <location filename="../src/wallet/wallet2.cpp" line="701"/> <source>failed to generate new wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="1382"/> + <location filename="../src/wallet/wallet2.cpp" line="1625"/> <source>Password is needed to compute key image for incoming monero</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="1383"/> + <location filename="../src/wallet/wallet2.cpp" line="1626"/> <source>Invalid password: password is needed to compute key image for incoming monero</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="3770"/> - <location filename="../src/wallet/wallet2.cpp" line="4374"/> - <location filename="../src/wallet/wallet2.cpp" line="4926"/> + <location filename="../src/wallet/wallet2.cpp" line="4122"/> + <location filename="../src/wallet/wallet2.cpp" line="4712"/> + <location filename="../src/wallet/wallet2.cpp" line="5308"/> <source>Primary account</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="10157"/> + <location filename="../src/wallet/wallet2.cpp" line="10885"/> <source>No funds received in this tx.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="10899"/> + <location filename="../src/wallet/wallet2.cpp" line="11645"/> <source>failed to read file </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="141"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="152"/> <source>Set subaddress lookahead sizes to <major>:<minor></source> <translation type="unfinished"></translation> </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="68"/> + <source>Enable SSL on wallet RPC connections: enabled|disabled|autodetect</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="69"/> + <location filename="../src/wallet/wallet2.cpp" line="244"/> + <source>Path to a PEM format private key</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="70"/> + <location filename="../src/wallet/wallet2.cpp" line="245"/> + <source>Path to a PEM format certificate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="71"/> + <location filename="../src/wallet/wallet2.cpp" line="246"/> + <source>Path to file containing concatenated PEM format certificate(s) to replace system CA(s).</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="72"/> + <source>List of certificate fingerprints to allow</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>tools::wallet_rpc_server</name> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="180"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="192"/> <source>Failed to create directory </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="182"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="194"/> <source>Failed to create directory %s: %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="193"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="205"/> <source>Cannot specify --</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="193"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="205"/> <source> and --</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="212"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="224"/> <source>Failed to create file </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="212"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="224"/> <source>. Check permissions or remove file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="222"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="234"/> <source>Error writing to file </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="225"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="237"/> <source>RPC username/password is stored in file </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="479"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="613"/> <source>Tag %s is unregistered.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3081"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="3242"/> <source>Transaction not possible. Available only %s, transaction amount %s = %s + %s (fee)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3947"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4409"/> <source>This is the RPC monero wallet. It needs to connect to a monero daemon to work correctly.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3773"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4230"/> <source>Can't specify more than one of --testnet and --stagenet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3788"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4245"/> <source>Can'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="3800"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4257"/> <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="3804"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4261"/> <source>Loading wallet...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3838"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3870"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4295"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4327"/> <source>Saving wallet...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3840"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3872"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4297"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4329"/> <source>Successfully saved</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3843"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4300"/> <source>Successfully loaded</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3847"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4304"/> <source>Wallet initialization failed: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3853"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4310"/> <source>Failed to initialize wallet RPC server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3857"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4314"/> <source>Starting wallet RPC server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3864"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4321"/> <source>Failed to run wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3867"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4324"/> <source>Stopped wallet RPC server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3876"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4333"/> <source>Failed to save wallet: </source> <translation type="unfinished"></translation> </message> @@ -5424,8 +5746,8 @@ daemon to work correctly.</source> <name>wallet_args</name> <message> <location filename="../src/gen_multisig/gen_multisig.cpp" line="168"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8908"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3928"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4385"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9348"/> <source>Wallet options</source> <translation type="unfinished"></translation> </message> diff --git a/translations/monero_fr.ts b/translations/monero_fr.ts index 6576043d3..47c718990 100644 --- a/translations/monero_fr.ts +++ b/translations/monero_fr.ts @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> -<TS version="2.0" language="fr_FR"> +<TS version="2.1" language="fr"> <context> <name>Monero::AddressBookImpl</name> <message> @@ -37,42 +37,42 @@ <translation>Échec de l'écriture de(s) transaction(s) dans le fichier</translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="121"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="138"/> <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="124"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="141"/> <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="128"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="145"/> <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="133"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="150"/> <source>. Reason: </source> <translation>. Raison : </translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="135"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="152"/> <source>Unknown exception: </source> <translation>Exception inconnue : </translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="138"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="155"/> <source>Unhandled exception</source> <translation>Exception non gérée</translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="211"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="228"/> <source>Couldn't multisig sign data: </source> <translation>Signature multisig des données impossible : </translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="233"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="250"/> <source>Couldn't sign multisig transaction: </source> <translation>Signature multisig de la transaction impossible : </translation> </message> @@ -134,384 +134,384 @@ <context> <name>Monero::WalletImpl</name> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1383"/> + <location filename="../src/wallet/api/wallet.cpp" line="1459"/> <source>payment id has invalid format, expected 16 or 64 character hex string: </source> <translation>format d'identifiant de paiement invalide, 16 ou 64 caractères hexadécimaux attendus : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1392"/> + <location filename="../src/wallet/api/wallet.cpp" line="1468"/> <source>Failed to add short payment id: </source> <translation>Échec de l'ajout de l'ID de paiement court : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1428"/> <location filename="../src/wallet/api/wallet.cpp" line="1510"/> + <location filename="../src/wallet/api/wallet.cpp" line="1592"/> <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="1430"/> <location filename="../src/wallet/api/wallet.cpp" line="1512"/> + <location filename="../src/wallet/api/wallet.cpp" line="1594"/> <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="1432"/> <location filename="../src/wallet/api/wallet.cpp" line="1514"/> + <location filename="../src/wallet/api/wallet.cpp" line="1596"/> <source>RPC error: </source> <translation>Erreur RPC : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1460"/> - <location filename="../src/wallet/api/wallet.cpp" line="1545"/> + <location filename="../src/wallet/api/wallet.cpp" line="1542"/> + <location filename="../src/wallet/api/wallet.cpp" line="1627"/> <source>not enough outputs for specified ring size</source> <translation>pas assez de sorties pour la taille de cercle spécifiée</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1462"/> - <location filename="../src/wallet/api/wallet.cpp" line="1547"/> + <location filename="../src/wallet/api/wallet.cpp" line="1544"/> + <location filename="../src/wallet/api/wallet.cpp" line="1629"/> <source>found outputs to use</source> <translation>sorties à utiliser trouvées</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1464"/> + <location filename="../src/wallet/api/wallet.cpp" line="1546"/> <source>Please sweep unmixable outputs.</source> <translation>Veuillez balayer les sorties non mélangeables.</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1438"/> - <location filename="../src/wallet/api/wallet.cpp" line="1521"/> + <location filename="../src/wallet/api/wallet.cpp" line="1520"/> + <location filename="../src/wallet/api/wallet.cpp" line="1603"/> <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="541"/> + <location filename="../src/wallet/api/wallet.cpp" line="589"/> <source>failed to parse address</source> <translation>échec de l'analyse de l'adresse</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="552"/> + <location filename="../src/wallet/api/wallet.cpp" line="600"/> <source>failed to parse secret spend key</source> <translation>échec de l'analyse de la clé secrète de dépense</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="575"/> + <location filename="../src/wallet/api/wallet.cpp" line="623"/> <source>failed to parse secret view key</source> <translation>échec de l'analyse de la clé secrète d'audit</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="584"/> + <location filename="../src/wallet/api/wallet.cpp" line="632"/> <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="588"/> + <location filename="../src/wallet/api/wallet.cpp" line="636"/> <source>spend key does not match address</source> <translation>la clé de dépense ne correspond pas à l'adresse</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="594"/> + <location filename="../src/wallet/api/wallet.cpp" line="642"/> <source>failed to verify secret view key</source> <translation>échec de la vérification de la clé secrète d'audit</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="598"/> + <location filename="../src/wallet/api/wallet.cpp" line="646"/> <source>view key does not match address</source> <translation>la clé d'audit ne correspond pas à l'adresse</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="621"/> - <location filename="../src/wallet/api/wallet.cpp" line="638"/> + <location filename="../src/wallet/api/wallet.cpp" line="669"/> + <location filename="../src/wallet/api/wallet.cpp" line="686"/> <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="885"/> + <location filename="../src/wallet/api/wallet.cpp" line="955"/> <source>Failed to send import wallet request</source> <translation>Échec de l'envoi de la requête d'importation de portefeuille</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1049"/> + <location filename="../src/wallet/api/wallet.cpp" line="1125"/> <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="1068"/> + <location filename="../src/wallet/api/wallet.cpp" line="1144"/> <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="1084"/> + <location filename="../src/wallet/api/wallet.cpp" line="1160"/> <source>Wallet is view only</source> <translation>Portefeuille d'audit uniquement</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1092"/> + <location filename="../src/wallet/api/wallet.cpp" line="1168"/> <source>failed to save file </source> <translation>échec de l'enregistrement du fichier </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1108"/> + <location filename="../src/wallet/api/wallet.cpp" line="1184"/> <source>Key images can only be imported with a trusted daemon</source> <translation>Les images de clé ne peuvent être importées qu'avec un démon de confiance</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1121"/> + <location filename="../src/wallet/api/wallet.cpp" line="1197"/> <source>Failed to import key images: </source> <translation>Échec de l'importation des images de clé : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1153"/> + <location filename="../src/wallet/api/wallet.cpp" line="1229"/> <source>Failed to get subaddress label: </source> <translation>Échec de la récupération de l'étiquette de sous-adresse : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1166"/> + <location filename="../src/wallet/api/wallet.cpp" line="1242"/> <source>Failed to set subaddress label: </source> <translation>Échec de l'affectation de l'étiquette de sous-adresse : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="567"/> + <location filename="../src/wallet/api/wallet.cpp" line="615"/> <source>Neither view key nor spend key supplied, cancelled</source> <translation>Ni clé d'audit ni clé de dépense fournie, annulation</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="686"/> + <location filename="../src/wallet/api/wallet.cpp" line="734"/> <source>Electrum seed is empty</source> <translation>La phrase Electrum est vide</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="695"/> + <location filename="../src/wallet/api/wallet.cpp" line="743"/> <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/api/wallet.cpp" line="1183"/> + <location filename="../src/wallet/api/wallet.cpp" line="1259"/> <source>Failed to get multisig info: </source> <translation>Échec de la récupération des infos multisig : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1200"/> - <location filename="../src/wallet/api/wallet.cpp" line="1214"/> + <location filename="../src/wallet/api/wallet.cpp" line="1276"/> + <location filename="../src/wallet/api/wallet.cpp" line="1290"/> <source>Failed to make multisig: </source> <translation>Échec de la création multisig : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1229"/> + <location filename="../src/wallet/api/wallet.cpp" line="1305"/> <source>Failed to finalize multisig wallet creation</source> <translation>Échec de la finalisation de la création du portefeuille multisig</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1232"/> + <location filename="../src/wallet/api/wallet.cpp" line="1308"/> <source>Failed to finalize multisig wallet creation: </source> <translation>Échec de la finalisation de la création du portefeuille multisig : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1248"/> + <location filename="../src/wallet/api/wallet.cpp" line="1324"/> <source>Failed to export multisig images: </source> <translation>Échec de l'exportation des images multisig : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1266"/> + <location filename="../src/wallet/api/wallet.cpp" line="1342"/> <source>Failed to parse imported multisig images</source> <translation>Échec de l'analyse des images multisig importées</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1276"/> + <location filename="../src/wallet/api/wallet.cpp" line="1352"/> <source>Failed to import multisig images: </source> <translation>Échec de l'importation des images multisig : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1290"/> + <location filename="../src/wallet/api/wallet.cpp" line="1366"/> <source>Failed to check for partial multisig key images: </source> <translation>Échec de la vérification des images de clé multisig partielles : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1318"/> + <location filename="../src/wallet/api/wallet.cpp" line="1394"/> <source>Failed to restore multisig transaction: </source> <translation>Échec de la restauration de la transaction multisig : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1358"/> + <location filename="../src/wallet/api/wallet.cpp" line="1434"/> <source>Invalid destination address</source> <translation>Adresse de destination invalide</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1434"/> + <location filename="../src/wallet/api/wallet.cpp" line="1516"/> <source>failed to get outputs to mix: %s</source> <translation>échec de la récupération de sorties à mélanger : %s</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1445"/> - <location filename="../src/wallet/api/wallet.cpp" line="1529"/> + <location filename="../src/wallet/api/wallet.cpp" line="1527"/> + <location filename="../src/wallet/api/wallet.cpp" line="1611"/> <source>not enough money to transfer, overall balance only %s, sent amount %s</source> <translation>pas assez de fonds pour le transfer, solde global disponible %s, montant envoyé %s</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1452"/> - <location filename="../src/wallet/api/wallet.cpp" line="1537"/> + <location filename="../src/wallet/api/wallet.cpp" line="1534"/> + <location filename="../src/wallet/api/wallet.cpp" line="1619"/> <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="1462"/> - <location filename="../src/wallet/api/wallet.cpp" line="1547"/> + <location filename="../src/wallet/api/wallet.cpp" line="1544"/> + <location filename="../src/wallet/api/wallet.cpp" line="1629"/> <source>output amount</source> <translation>montant de la sortie</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1467"/> - <location filename="../src/wallet/api/wallet.cpp" line="1551"/> + <location filename="../src/wallet/api/wallet.cpp" line="1549"/> + <location filename="../src/wallet/api/wallet.cpp" line="1633"/> <source>transaction was not constructed</source> <translation>la transaction n'a pas été construite</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1470"/> - <location filename="../src/wallet/api/wallet.cpp" line="1554"/> + <location filename="../src/wallet/api/wallet.cpp" line="1552"/> + <location filename="../src/wallet/api/wallet.cpp" line="1636"/> <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="1475"/> - <location filename="../src/wallet/api/wallet.cpp" line="1559"/> + <location filename="../src/wallet/api/wallet.cpp" line="1557"/> + <location filename="../src/wallet/api/wallet.cpp" line="1641"/> <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="1477"/> - <location filename="../src/wallet/api/wallet.cpp" line="1561"/> + <location filename="../src/wallet/api/wallet.cpp" line="1559"/> + <location filename="../src/wallet/api/wallet.cpp" line="1643"/> <source>failed to find a suitable way to split transactions</source> <translation>échec de la recherche d'une façon adéquate de scinder les transactions</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1479"/> - <location filename="../src/wallet/api/wallet.cpp" line="1563"/> + <location filename="../src/wallet/api/wallet.cpp" line="1561"/> + <location filename="../src/wallet/api/wallet.cpp" line="1645"/> <source>unknown transfer error: </source> <translation>erreur de transfert inconnue : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1481"/> - <location filename="../src/wallet/api/wallet.cpp" line="1565"/> + <location filename="../src/wallet/api/wallet.cpp" line="1563"/> + <location filename="../src/wallet/api/wallet.cpp" line="1647"/> <source>internal error: </source> <translation>erreur interne : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1483"/> - <location filename="../src/wallet/api/wallet.cpp" line="1567"/> + <location filename="../src/wallet/api/wallet.cpp" line="1565"/> + <location filename="../src/wallet/api/wallet.cpp" line="1649"/> <source>unexpected error: </source> <translation>erreur inattendue : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1485"/> - <location filename="../src/wallet/api/wallet.cpp" line="1569"/> + <location filename="../src/wallet/api/wallet.cpp" line="1567"/> + <location filename="../src/wallet/api/wallet.cpp" line="1651"/> <source>unknown error</source> <translation>erreur inconnue</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1516"/> + <location filename="../src/wallet/api/wallet.cpp" line="1598"/> <source>failed to get outputs to mix</source> <translation>échec de la récupération de sorties à mélanger</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1644"/> - <location filename="../src/wallet/api/wallet.cpp" line="1671"/> - <location filename="../src/wallet/api/wallet.cpp" line="1719"/> - <location filename="../src/wallet/api/wallet.cpp" line="1747"/> - <location filename="../src/wallet/api/wallet.cpp" line="1775"/> - <location filename="../src/wallet/api/wallet.cpp" line="1796"/> - <location filename="../src/wallet/api/wallet.cpp" line="2258"/> + <location filename="../src/wallet/api/wallet.cpp" line="1726"/> + <location filename="../src/wallet/api/wallet.cpp" line="1753"/> + <location filename="../src/wallet/api/wallet.cpp" line="1801"/> + <location filename="../src/wallet/api/wallet.cpp" line="1829"/> + <location filename="../src/wallet/api/wallet.cpp" line="1857"/> + <location filename="../src/wallet/api/wallet.cpp" line="1878"/> + <location filename="../src/wallet/api/wallet.cpp" line="2354"/> <source>Failed to parse txid</source> <translation>Échec de l'analyse de l'ID de transaction</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1661"/> + <location filename="../src/wallet/api/wallet.cpp" line="1743"/> <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/wallet/api/wallet.cpp" line="1679"/> - <location filename="../src/wallet/api/wallet.cpp" line="1688"/> + <location filename="../src/wallet/api/wallet.cpp" line="1761"/> + <location filename="../src/wallet/api/wallet.cpp" line="1770"/> <source>Failed to parse tx key</source> <translation>Échec de l'analyse de la clé de transaction</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1697"/> - <location filename="../src/wallet/api/wallet.cpp" line="1726"/> - <location filename="../src/wallet/api/wallet.cpp" line="1754"/> - <location filename="../src/wallet/api/wallet.cpp" line="1835"/> + <location filename="../src/wallet/api/wallet.cpp" line="1779"/> + <location filename="../src/wallet/api/wallet.cpp" line="1808"/> + <location filename="../src/wallet/api/wallet.cpp" line="1836"/> + <location filename="../src/wallet/api/wallet.cpp" line="1917"/> <source>Failed to parse address</source> <translation>Échec de l'analyse de l'adresse</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1840"/> + <location filename="../src/wallet/api/wallet.cpp" line="1922"/> <source>Address must not be a subaddress</source> <translation>L'adresse ne doit pas être une sous-adresse</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1880"/> + <location filename="../src/wallet/api/wallet.cpp" line="1962"/> <source>The wallet must be in multisig ready state</source> <translation>Le portefeuille doit être multisig et prêt</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1902"/> + <location filename="../src/wallet/api/wallet.cpp" line="1984"/> <source>Given string is not a key</source> <translation>La chaîne entrée n'est pas une clé</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2130"/> + <location filename="../src/wallet/api/wallet.cpp" line="2226"/> <source>Rescan spent can only be used with a trusted daemon</source> <translation>Réexaminer les dépenses ne peut se faire qu'avec un démon de confiance</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2179"/> + <location filename="../src/wallet/api/wallet.cpp" line="2275"/> <source>Invalid output: </source> <translation>Sortie invalide : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2186"/> + <location filename="../src/wallet/api/wallet.cpp" line="2282"/> <source>Failed to mark outputs as spent</source> - <translation type="unfinished"></translation> + <translation>Échec du marquage des sorties comme dépensées</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2208"/> + <location filename="../src/wallet/api/wallet.cpp" line="2304"/> <source>Failed to mark output as spent</source> - <translation type="unfinished"></translation> + <translation>Échec du marquage de la sortie comme dépensée</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2230"/> + <location filename="../src/wallet/api/wallet.cpp" line="2326"/> <source>Failed to mark output as unspent</source> - <translation type="unfinished"></translation> + <translation>Échec du marquage de la sortie comme non dépensée</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2197"/> - <location filename="../src/wallet/api/wallet.cpp" line="2219"/> + <location filename="../src/wallet/api/wallet.cpp" line="2293"/> + <location filename="../src/wallet/api/wallet.cpp" line="2315"/> <source>Failed to parse output amount</source> <translation>Échec de l'analyse du montant de la sortie</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2202"/> - <location filename="../src/wallet/api/wallet.cpp" line="2224"/> + <location filename="../src/wallet/api/wallet.cpp" line="2298"/> + <location filename="../src/wallet/api/wallet.cpp" line="2320"/> <source>Failed to parse output offset</source> <translation>Échec de l'analyse de l'offset de la sortie</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2241"/> - <location filename="../src/wallet/api/wallet.cpp" line="2280"/> + <location filename="../src/wallet/api/wallet.cpp" line="2337"/> + <location filename="../src/wallet/api/wallet.cpp" line="2376"/> <source>Failed to parse key image</source> <translation>Échec de l'analyse de l'image de clé</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2247"/> + <location filename="../src/wallet/api/wallet.cpp" line="2343"/> <source>Failed to get ring</source> <translation>Échec de la récupération du cercle</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2265"/> + <location filename="../src/wallet/api/wallet.cpp" line="2361"/> <source>Failed to get rings</source> <translation>Échec de la récupération des cercles</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2286"/> + <location filename="../src/wallet/api/wallet.cpp" line="2382"/> <source>Failed to set ring</source> <translation>Échec de l'affectation du cercle</translation> </message> @@ -519,22 +519,22 @@ <context> <name>Wallet</name> <message> - <location filename="../src/wallet/api/wallet.cpp" line="301"/> + <location filename="../src/wallet/api/wallet.cpp" line="344"/> <source>Failed to parse address</source> <translation>Échec de l'analyse de l'adresse</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="308"/> + <location filename="../src/wallet/api/wallet.cpp" line="351"/> <source>Failed to parse key</source> <translation>Échec de l'analyse de la clé</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="316"/> + <location filename="../src/wallet/api/wallet.cpp" line="359"/> <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="326"/> + <location filename="../src/wallet/api/wallet.cpp" line="369"/> <source>key does not match address</source> <translation>la clé ne correspond pas à l'adresse</translation> </message> @@ -604,360 +604,299 @@ <context> <name>cryptonote::simple_wallet</name> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="645"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="666"/> <source>Commands: </source> <translation>Commandes : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4359"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4636"/> <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="3954"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4231"/> <source>invalid password</source> <translation>mot de passe invalide</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3073"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3283"/> <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="3108"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3319"/> <source>set: unrecognized argument(s)</source> <translation>set : argument(s) non reconnu(s)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4199"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4476"/> <source>wallet file path not valid: </source> <translation>chemin du fichier portefeuille non valide : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3178"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3389"/> <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'un portefeuille, mais le fichier spécifié existe déjà. Sortie pour ne pas risquer de l'écraser.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3059"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3269"/> <source>needs an argument</source> <translation>requiert un argument</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3082"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3083"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3084"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3086"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3089"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3094"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3095"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3097"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3099"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3100"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3101"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3104"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3292"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3294"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3296"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3299"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3304"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3305"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3307"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3309"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3311"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3314"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3315"/> <source>0 or 1</source> <translation>0 ou 1</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3092"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3096"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3103"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3306"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3313"/> <source>unsigned integer</source> <translation>entier non signé</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3312"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3548"/> <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="3341"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3577"/> <source>specify a recovery parameter with the --electrum-seed="words list here"</source> <translation>spécifiez un paramètre de récupération avec --electrum-seed="liste de mots ici"</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3717"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3957"/> <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="3887"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4164"/> <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="3895"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4172"/> <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'un des deux à jour, ou utilisez --allow-mismatched-daemon-version.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3916"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4193"/> <source>List of available languages for your wallet's seed:</source> <translation>Liste des langues disponibles pour la phrase mnémonique de votre portefeuille :</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3926"/> - <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="4000"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4277"/> <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 phrase mnémonique que nous fournissons. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4016"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4365"/> <source>Generated new wallet: </source> <translation>Nouveau portefeuille généré : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4025"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4093"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4135"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4188"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4370"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4412"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4465"/> <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="4230"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4507"/> <source>Opened watch-only wallet</source> <translation>Ouverture du portefeuille d'audit</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4511"/> <source>Opened wallet</source> <translation>Ouverture du portefeuille</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4252"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4529"/> <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="4267"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4544"/> <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="4275"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4552"/> <source>failed to load wallet: </source> <translation>échec du chargement du portefeuille : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4292"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4569"/> <source>Use the "help" command to see the list of available commands. </source> <translation>Utilisez la commande "help" pour voir la liste des commandes disponibles. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4337"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4614"/> <source>Wallet data saved</source> <translation>Données du portefeuille sauvegardées</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4431"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4819"/> <source>Mining started in daemon</source> <translation>La mine a démarré dans le démon</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4433"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4821"/> <source>mining has NOT been started: </source> <translation>la mine n'a PAS démarré : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4453"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4841"/> <source>Mining stopped in daemon</source> <translation>La mine a été stoppée dans le démon</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4455"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4843"/> <source>mining has NOT been stopped: </source> <translation>la mine n'a PAS été stoppée : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4537"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4925"/> <source>Blockchain saved</source> <translation>Chaîne de blocs sauvegardée</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4552"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4589"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4940"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4973"/> <source>Height </source> <translation>Hauteur </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4591"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4975"/> <source>spent </source> <translation>dépensé </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4698"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5089"/> <source>Starting refresh...</source> <translation>Démarrage du rafraîchissement...</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4712"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5115"/> <source>Refresh done, blocks received: </source> <translation>Rafraîchissement effectué, blocs reçus : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5958"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6349"/> <source>payment id has invalid format, expected 16 or 64 character hex string: </source> <translation>format d'identifiant de paiement invalide, 16 ou 64 caractères hexadécimaux attendus : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5307"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5704"/> <source>bad locked_blocks parameter:</source> <translation>mauvais paramètre locked_blocks :</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5978"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6251"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6369"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6639"/> <source>a single transaction cannot use more than one payment id: </source> <translation>une unique transaction ne peut pas utiliser plus d'un ID de paiement : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5405"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5987"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6219"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6259"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5806"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6378"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6607"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6647"/> <source>failed to set up payment id, though it was decoded correctly</source> <translation>échec de la définition de l'ID de paiement, bien qu'il ait été décodé correctement</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1036"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1158"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1059"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1181"/> <source>Send this multisig info to all other participants, then use exchange_multisig_keys <info1> [<info2>...] with others' multisig info</source> - <translation type="unfinished"></translation> + <translation>Envoyez ces infos multisig à tous les autres participants, puis utilisez exchange_multisig_keys <info1> [<info2>...] avec les infos multisig des autres</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1167"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1190"/> <source>Multisig wallet has been successfully created. Current wallet type: </source> - <translation type="unfinished"></translation> + <translation>Le portefeuille multisig a été créé avec succès. Type du portefeuille actuel : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1172"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1196"/> <source>Failed to perform multisig keys exchange: </source> - <translation type="unfinished"></translation> + <translation>Échec de l'échange de clés multisig : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1499"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1523"/> <source>Failed to load multisig transaction from MMS</source> - <translation type="unfinished"></translation> + <translation>Échec du chargement de la transaction multisig à partir du MMS</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1935"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1991"/> <source>Failed to mark output spent: </source> - <translation type="unfinished"></translation> + <translation>Échec du marquage de la sortie comme dépensée : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1962"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2018"/> <source>Failed to mark output unspent: </source> - <translation type="unfinished"></translation> + <translation>Échec du marquage de la sortie comme non dépensée : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1986"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2042"/> <source>Spent: </source> - <translation type="unfinished"></translation> + <translation>Dépensé : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1988"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2044"/> <source>Not spent: </source> - <translation type="unfinished"></translation> + <translation>Non dépensé : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1992"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2048"/> <source>Failed to check whether output is spent: </source> - <translation type="unfinished"></translation> + <translation>Impossible de vérifier si la sortie est dépensée : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2022"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2171"/> <source>Please confirm the transaction on the device</source> - <translation type="unfinished"></translation> + <translation>Veuillez confirmer la transaction sur l'appareil</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2510"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2686"/> <source>Device name not specified</source> - <translation type="unfinished"></translation> + <translation>Nom de l'appareil non spécifié</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2519"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2695"/> <source>Device reconnect failed</source> - <translation type="unfinished"></translation> + <translation>Échec de la reconnexion à l'appareil</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2524"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2700"/> <source>Device reconnect failed: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2583"/> - <source>Show the incoming transfers, all or filtered by availability and address index. - -Output format: -Amount, Spent("T"|"F"), "locked"|"unlocked", RingCT, Global Index, Transaction Hash, Address Index, [Public Key, Key Image] </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2673"/> - <source>Available options: - seed language - Set the wallet's 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-ring-size <n> - Set the default ring size (obsolete). - auto-refresh <1|0> - Whether to automatically synchronize new blocks from the daemon. - refresh-type <full|optimize-coinbase|no-coinbase|default> - Set the wallet's refresh behaviour. - priority [0|1|2|3|4] - Set the fee to default/unimportant/normal/elevated/priority. - confirm-missing-payment-id <1|0> - ask-password <0|1|2 (or never|action|decrypt)> - unit <monero|millinero|micronero|nanonero|piconero> - Set the 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. - confirm-backlog <1|0> - Whether to warn if there is transaction backlog. - confirm-backlog-threshold [n] - Set a threshold for confirm-backlog to only warn if the transaction backlog is greater than n blocks. - refresh-from-block-height [n] - Set the height before which to ignore blocks. - auto-low-priority <1|0> - Whether to automatically use the low priority fee level when it's safe to do so. - segregate-pre-fork-outputs <1|0> - Set this if you intend to spend outputs on both Monero AND a key reusing fork. - key-reuse-mitigation2 <1|0> - Set this if you are not sure whether you will spend on a key reusing Monero fork later. -subaddress-lookahead <major>:<minor> - Set the lookahead sizes for the subaddress hash table. - Set this if you are not sure whether you will spend on a key reusing Monero fork later. - segregation-height <n> - Set to the height of a key reusing fork you want to use, 0 to use default.</source> - <translation type="unfinished"></translation> + <translation>Échec de la reconnexion à l'appareil : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2765"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2943"/> <source>Show the incoming/outgoing transfers within an optional height range. Output format: @@ -971,32 +910,37 @@ Pending or Failed: "failed"|"pending", "o <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2775"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2953"/> <source>export_transfers [in|out|all|pending|failed|coinbase] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]] [output=<filepath>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2776"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2954"/> <source>Export to CSV the incoming/outgoing transfers within an optional height range.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2818"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2996"/> <source>Export a signed set of key images to a <filename>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2826"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3004"/> <source>Synchronizes key images with the hw wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2865"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3027"/> + <source>Generate a new random full size payment id (obsolete). 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="3043"/> <source>Performs extra multisig keys exchange rounds. Needed for arbitrary M/N multisig wallets</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2889"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3067"/> <source>Interface with the MMS (Multisig Messaging System) <subcommand> is one of: init, info, signer, list, next, sync, transfer, delete, send, receive, export, note, show, set, help @@ -1005,73 +949,73 @@ Get help about a subcommand with: help mms <subcommand>, or mms help <s <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2897"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3075"/> <source>Initialize and configure the MMS for M/N = number of required signers/number of authorized signers multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2901"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3079"/> <source>Display current MMS configuration</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2905"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3083"/> <source>Set or modify authorized signer info (single-word label, transport address, Monero address), or list all signers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2909"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3087"/> <source>List all messages</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2913"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3091"/> <source>Evaluate the next possible multisig-related action(s) according to wallet state, and execute or offer for choice By using 'sync' processing of waiting messages with multisig sync info can be forced regardless of wallet state</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2918"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3096"/> <source>Force generation of multisig sync info regardless of wallet state, to recover from special situations like "stale data" errors</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2922"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3100"/> <source>Initiate transfer with MMS support; arguments identical to normal 'transfer' command arguments, for info see there</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2926"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3104"/> <source>Delete a single message by giving its id, or delete all messages by using 'all'</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2930"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3108"/> <source>Send a single message by giving its id, or send all waiting messages</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2934"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3112"/> <source>Check right away for new messages to receive</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2938"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3116"/> <source>Write the content of a message to a file "mms_message_content"</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2942"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3120"/> <source>Send a one-line message to an authorized signer, identified by its label, or show any waiting unread notes</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2946"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3124"/> <source>Show detailed info about a single message</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2950"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3128"/> <source>Available options: auto-send <1|0> Whether to automatically send newly generated messages right away. @@ -1079,1267 +1023,1406 @@ By using 'sync' processing of waiting messages with multisig sync info <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3134"/> <source>Send completed signer config to all other authorized signers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2960"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3138"/> <source>Start auto-config at the auto-config manager's wallet by issuing auto-config tokens and optionally set others' labels</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2964"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3142"/> <source>Delete any auto-config tokens and abort a auto-config process</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2968"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3146"/> <source>Start auto-config by using the token received from the auto-config manager</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2986"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3168"/> <source>Mark output(s) as spent so they never get selected as fake outputs in a ring</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2990"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3172"/> <source>Marks an output as unspent so it may get selected as a fake output in a ring</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2994"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3176"/> <source>Checks whether an output is marked as spent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3106"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3317"/> <source><device_name[:device_spec]></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3127"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3338"/> <source>wrong number range, use: %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3232"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3443"/> <source>NOTE: the following %s can be used to recover access to your wallet. 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="3234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3445"/> <source>string</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3445"/> <source>25 words</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4631"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3866"/> + <source>Secret spend key (%u of %u)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3943"/> + <source>Use --restore-height or --restore-date if you want to restore an already setup account from a specific height.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3945"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4033"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5984"/> + <source>Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4056"/> + <source>Still apply restore height?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4203"/> + <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="4956"/> + <source>WARNING: this transaction uses an unencrypted payment ID: consider using subaddresses instead.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <source>WARNING: this transaction uses an unencrypted payment ID: these are obsolete. Support will be withdrawn in the future. Use subaddresses instead.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5015"/> <source>Device requires attention</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4639"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5023"/> <source>Enter device PIN</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4641"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5025"/> <source>Failed to read device PIN</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4648"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5032"/> <source>Please enter the device passphrase on the device</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4655"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5039"/> <source>Enter device passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4657"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5041"/> <source>Failed to read device passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4673"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5057"/> <source>The first refresh has finished for the HW-based wallet with received money. hw_key_images_sync is needed. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4675"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4753"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5059"/> <source>Do you want to do it now? (Y/Yes/N/No): </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4677"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5061"/> <source>hw_key_images_sync skipped. Run command manually before a transfer.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4855"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5263"/> <source>Invalid keyword: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4904"/> - <source>Heights: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5312"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5894"/> - <source>Locked blocks too high, max 1000000 (Ë4 yrs)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5422"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5502"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5590"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5738"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6001"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6059"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6273"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6318"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5823"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5903"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5991"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6139"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6392"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6450"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6661"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6706"/> <source>transaction cancelled.</source> <translation>transaction annulée.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5481"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5491"/> - <source>Is this okay anyway? (Y/Yes/N/No): </source> - <translation>Est-ce correct quand même ? (Y/Yes/Oui/N/No/Non) : </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5486"/> - <source>There is currently a %u block backlog at that fee level. Is this okay? (Y/Yes/N/No): </source> - <translation>Il y a actuellement un arriéré de %u blocs à ce niveau de frais. Est-ce correct quand même ? (Y/Yes/Oui/N/No/Non) : </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5491"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5892"/> <source>Failed to check for backlog: </source> <translation>Échec de la vérification du backlog : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5532"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6032"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5933"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6423"/> <source> Transaction </source> <translation> Transaction </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5537"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6037"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5938"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6428"/> <source>Spending from address index %d </source> <translation>Dépense depuis l'adresse d'index %d </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5539"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6039"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5940"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6430"/> <source>WARNING: Outputs of multiple addresses are being used together, which might potentially compromise your privacy. </source> <translation>ATTENTION : Des sorties de multiples adresses sont utilisées ensemble, ce qui pourrait potentiellement compromettre votre confidentialité. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5541"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5942"/> <source>Sending %s. </source> <translation>Envoi de %s. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5544"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5945"/> <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="5550"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5951"/> <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="5553"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5954"/> <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="5554"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5955"/> <source>.</source> <translation>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5554"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5955"/> <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="5559"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5960"/> <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="5603"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6004"/> <source>Unsigned transaction(s) successfully written to MMS</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5611"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5648"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5749"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5761"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6070"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6107"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6328"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6340"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6012"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6049"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6150"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6162"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6461"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6498"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6716"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6728"/> <source>Failed to write transaction(s) to file</source> <translation>Échec de l'écriture de(s) transaction(s) dans le fichier</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5616"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5653"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5753"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5765"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6074"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6111"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6332"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6344"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6017"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6054"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6154"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6465"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6502"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6720"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6732"/> <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="5625"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6086"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6026"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6477"/> <source>Failed to cold sign transaction with HW wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5708"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6109"/> <source>No unmixable outputs found</source> <translation>Aucune sortie non mélangeable trouvée</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5815"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6124"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6435"/> + <source>Sweeping %s in %llu transactions for a total fee of %s. Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6441"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6698"/> + <source>Sweeping %s for a total fee of %s. Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6177"/> + <source>Discarding %s of unmixable outputs that cannot be spent, which can be undone by "rescan_spent". Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6216"/> <source>No address given</source> <translation>Aucune adresse fournie</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6213"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6601"/> <source>failed to parse Payment ID</source> <translation>échec de l'analyse de l'ID de paiement</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6236"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2078"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2125"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6624"/> <source>failed to parse key image</source> <translation>échec de l'analyse de l'image de clé</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6290"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6678"/> <source>No outputs found</source> <translation>Pas de sorties trouvées</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6295"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6683"/> <source>Multiple transactions are created, which is not supposed to happen</source> <translation>De multiples transactions sont crées, ce qui n'est pas supposé arriver</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6300"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6688"/> <source>The transaction uses multiple or no inputs, which is not supposed to happen</source> <translation>La transaction utilise aucune ou de multiples entrées, ce qui n'est pas supposé arriver</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6377"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6765"/> <source>missing threshold amount</source> <translation>montant seuil manquant</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6382"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6770"/> <source>invalid amount threshold</source> <translation>montant seuil invalide</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9015"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6980"/> + <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min ring size %lu, %s. %sIs this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="8161"/> + <source>Rescan anyway?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="8654"/> + <source>Short payment IDs are to be used within an integrated address only</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="9457"/> <source> (Y/Yes/N/No): </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9042"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9484"/> <source>Choose processing:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9051"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9493"/> <source>Sign tx</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9059"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9501"/> <source>Send the tx for submission to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9063"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9505"/> <source>Send the tx for signing to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9070"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9512"/> <source>Submit tx</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9073"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9515"/> <source>unknown</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9079"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9521"/> <source>Choice: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9091"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9533"/> <source>Wrong choice</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9098"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9540"/> <source>Id</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9098"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9540"/> <source>I/O</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9098"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9540"/> <source>Authorized Signer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>Message Type</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>Height</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>R</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>Message State</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>Since</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9116"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9558"/> <source> ago</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9122"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9564"/> <source>#</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9122"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9564"/> <source>Transport Address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9565"/> <source>Auto-Config Token</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9565"/> <source>Monero Address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9127"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9135"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9137"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9569"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9577"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9579"/> <source><not set></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9178"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9620"/> <source>Message </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9179"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9621"/> <source>In/out: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9623"/> <source>State: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9623"/> <source>%s since %s, %s ago</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9185"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9627"/> <source>Sent: Never</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9189"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9631"/> <source>Sent: %s, %s ago</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9192"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9634"/> <source>Authorized signer: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9635"/> <source>Content size: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9635"/> <source> bytes</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9194"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9636"/> <source>Content: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9194"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9636"/> <source>(binary data)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9224"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9666"/> <source>Send these messages now?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9676"/> <source>Queued for sending.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9254"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9696"/> <source>Invalid message id</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9263"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9705"/> <source>usage: mms init <required_signers>/<authorized_signers> <own_label> <own_transport_address></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9269"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9711"/> <source>The MMS is already initialized. Re-initialize by deleting all signer info and messages?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9284"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9726"/> <source>Error in the number of required signers and/or authorized signers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9301"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9743"/> <source>The MMS is not active.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9324"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9766"/> <source>Invalid signer number </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9329"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9771"/> <source>mms signer [<number> <label> [<transport_address> [<monero_address>]]]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9348"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9790"/> <source>Invalid Monero address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9355"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9797"/> <source>Wallet state does not allow changing Monero addresses anymore</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9367"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9809"/> <source>Usage: mms list</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9380"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9822"/> <source>Usage: mms next [sync]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9405"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9847"/> <source>No next step: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9415"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9857"/> <source>prepare_multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9421"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9863"/> <source>make_multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9436"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9878"/> <source>exchange_multisig_keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9451"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9893"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10013"/> <source>export_multisig_info</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9460"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9902"/> <source>import_multisig_info</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9473"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9915"/> <source>sign_multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9483"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9925"/> <source>submit_multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9493"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9935"/> <source>Send tx</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9504"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9946"/> <source>Process signer config</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9516"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9958"/> <source>Replace current signer config with the one displayed above?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9530"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9972"/> <source>Process auto config data</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9544"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9986"/> <source>Nothing ready to process</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9564"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10006"/> <source>Usage: mms sync</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9588"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10030"/> <source>Usage: mms delete (<message_id> | all)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9595"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10037"/> <source>Delete all messages?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9621"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10063"/> <source>Usage: mms send [<message_id>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9638"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10080"/> <source>Usage: mms receive</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9655"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10097"/> <source>Usage: mms export <message_id></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9667"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10109"/> <source>Message content saved to: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9671"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10113"/> <source>Failed to to save message content</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9695"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10137"/> <source>Usage: mms note [<label> <text>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9702"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10144"/> <source>No signer found with label </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9724"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10166"/> <source>Usage: mms show <message_id></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9743"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10185"/> <source>Usage: mms set <option_name> [<option_value>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9760"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10202"/> <source>Wrong option value</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9765"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10207"/> <source>Auto-send is on</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9765"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10207"/> <source>Auto-send is off</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9770"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10212"/> <source>Unknown option</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9778"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10220"/> <source>Usage: mms help [<subcommand>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9794"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10236"/> <source>Usage: mms send_signer_config</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9800"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10242"/> <source>Signer config not yet complete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9815"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10257"/> <source>Usage: mms start_auto_config [<label> <label> ...]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9820"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10262"/> <source>There are signers without a label set. Complete labels before auto-config or specify them as parameters here.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9826"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10268"/> <source>Auto-config is already running. Cancel and restart?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9850"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10292"/> <source>Usage: mms stop_auto_config</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9853"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10295"/> <source>Delete any auto-config tokens and stop auto-config?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9866"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10308"/> <source>Usage: mms auto_config <auto_config_token></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9873"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10315"/> <source>Invalid auto-config token</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9879"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10321"/> <source>Auto-config already running. Cancel and restart?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9911"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10339"/> + <source>MMS not available in this wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="10363"/> <source>The MMS is not active. Activate using the "mms init" command</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9988"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10440"/> <source>Invalid MMS subcommand</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9993"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9997"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10445"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10449"/> <source>Error in MMS command: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6516"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6919"/> <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="6521"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6924"/> <source>Claimed change is larger than payment to the change address</source> <translation>La monnaie réclamée est supérieure au paiement à l'adresse de monnaie</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6552"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6955"/> <source>sending %s to %s</source> <translation>envoi de %s à %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6562"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6965"/> <source> dummy output(s)</source> <translation> sortie(s) factice(s)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6565"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6968"/> <source>with no destinations</source> <translation>sans destination</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6577"/> - <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min ring size %lu, %s. %sIs this okay? (Y/Yes/N/No): </source> - <translation>%lu transactions chargées, pour %s, frais %s, %s, %s, taille de cercle minimum %lu, %s. %sEst-ce correct ? (Y/Yes/Oui/N/No/Non) : </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6606"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7009"/> <source>This is a multisig wallet, it can only sign with sign_multisig</source> <translation>Ceci est un portefeuille multisig, il ne peut signer qu'avec sign_multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6629"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7032"/> <source>Failed to sign transaction</source> <translation>Échec de signature de transaction</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6635"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7038"/> <source>Failed to sign transaction: </source> <translation>Échec de signature de transaction : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6656"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7059"/> <source>Transaction raw hex data exported to </source> <translation>Données brutes hex de la transaction exportées vers </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6677"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7080"/> <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="4729"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5051"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5132"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5459"/> <source>RPC error: </source> <translation>Erreur RPC : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="695"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="716"/> <source>wallet is watch-only and has no spend key</source> <translation>c'est un portefeuille d'audit et il n'a pas de clé de dépense</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="839"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1021"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1074"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1141"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="860"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1044"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1097"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1164"/> <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="854"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="875"/> <source>Error with wallet rewrite: </source> <translation>Erreur avec la réécriture du portefeuille : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2284"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2435"/> <source>invalid unit</source> <translation>unité invalide</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2302"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2364"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2453"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2515"/> <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="2320"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2471"/> <source>invalid value</source> <translation>valeur invalide</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3204"/> - <source>(Y/Yes/N/No): </source> - <translation>(Y/Yes/Oui/N/No/Non) : </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3761"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3788"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4021"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4041"/> <source>bad m_restore_height parameter: </source> <translation>mauvais paramètre m_restore_height : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3766"/> - <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="3779"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3985"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4032"/> <source>Restore height is: </source> <translation>La hauteur de restauration est : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3705"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3780"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5583"/> - <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="4509"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4897"/> <source>Daemon is local, assuming trusted</source> <translation>Le démon est local, supposons qu'il est de confiance</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4355"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4632"/> <source>Password for new watch-only wallet</source> <translation>Mot de passe pour le nouveau portefeuille d'audit</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4739"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5142"/> <source>internal error: </source> <translation>erreur interne : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1608"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4744"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5056"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1632"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5147"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5464"/> <source>unexpected error: </source> <translation>erreur inattendue : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1534"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1613"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4749"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5061"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5639"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5669"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5794"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6099"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6126"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6361"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6690"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1558"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1637"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5152"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5469"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6040"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6070"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6195"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6490"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6517"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6749"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7093"/> <source>unknown error</source> <translation>erreur inconnue</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4754"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5157"/> <source>refresh failed: </source> <translation>échec du rafraîchissement : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4754"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5157"/> <source>Blocks received: </source> <translation>Blocs reçus : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4787"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5195"/> <source>unlocked balance: </source> <translation>solde débloqué : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3093"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3303"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>amount</source> <translation>montant</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="341"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="362"/> <source>false</source> <translation>faux</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="659"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="680"/> <source>Unknown command: </source> <translation>Commande inconnue : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="666"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="687"/> <source>Command usage: </source> <translation>Usage de la commande : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="669"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="690"/> <source>Command description: </source> <translation>Description de la commande : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="735"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="756"/> <source>wallet is multisig but not yet finalized</source> <translation>le portefeuille est multisig mais pas encore finalisé</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="768"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="789"/> <source>Failed to retrieve seed</source> <translation>Échec de la récupération de la phrase mnémonique</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="792"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="813"/> <source>wallet is multisig and has no seed</source> <translation>le portefeuille est multisig et n'a pas de phrase mnémonique</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="899"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="922"/> <source>Error: failed to estimate backlog array size: </source> <translation>Erreur : échec de l'estimation de la taille du tableau d'arriéré : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="904"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="927"/> <source>Error: bad estimated backlog array size</source> <translation>Erreur : mauvaise estimation de la taille du tableau d'arriéré</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="916"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="939"/> <source> (current)</source> <translation> (actuel)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="919"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="942"/> <source>%u block (%u minutes) backlog at priority %u%s</source> <translation>arriéré de %u bloc(s) (%u minutes) à la priorité %u%s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="921"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="944"/> <source>%u to %u block (%u to %u minutes) backlog at priority %u</source> <translation>arriéré de %u à %u bloc(s) (%u à %u minutes) à la priorité %u</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="924"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="947"/> <source>No backlog at priority </source> <translation>Pas d'arriéré à la priorité </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="944"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="989"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="967"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1012"/> <source>This wallet is already multisig</source> <translation>Le portefeuille est déjà multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="949"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="994"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="972"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1017"/> <source>wallet is watch-only and cannot be made multisig</source> <translation>c'est un portefeuille d'audit et il ne peut pas être tranformé en multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="955"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1000"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="978"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1023"/> <source>This wallet has been used before, please use a new wallet to create a multisig wallet</source> <translation>Ce portefeuille a été utilisé auparavant, veuillez utiliser un nouveau portefeuille pour créer un portefeuille multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="963"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="986"/> <source>Send this multisig info to all other participants, then use make_multisig <threshold> <info1> [<info2>...] with others' multisig info</source> <translation>Envoyez ces infos multisig à tous les autres participants, ensuite utilisez make_multisig <seuil> <info1> [<info2>...] avec les infos multisig des autres</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="964"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="987"/> <source>This includes the PRIVATE view key, so needs to be disclosed only to that multisig wallet's participants </source> <translation>Ceci inclut la clé PRIVÉE d'audit, donc ne doit être divulgué qu'aux participants de ce portefeuille multisig </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1014"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1037"/> <source>Invalid threshold</source> <translation>Seuil invalide</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1034"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1156"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1057"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1179"/> <source>Another step is needed</source> <translation>Une autre étape est nécessaire</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1046"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1069"/> <source>Error creating multisig: </source> <translation>Erreur de création multisig : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1053"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1076"/> <source>Error creating multisig: new wallet is not multisig</source> <translation>Erreur de création multisig : le nouveau portefeuille n'est pas multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1056"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1079"/> <source> multisig address: </source> <translation> adresse multisig : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1080"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1129"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1195"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1261"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1103"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1152"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1219"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1285"/> <source>This wallet is not multisig</source> <translation>Ce portefeuille n'est pas multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1085"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1134"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1108"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1157"/> <source>This wallet is already finalized</source> <translation>Ce portefeuille est déjà finalisé</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1101"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1124"/> <source>Failed to finalize multisig</source> <translation>Échec de finalisation multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1107"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1130"/> <source>Failed to finalize multisig: </source> <translation>Échec de finalisation multisig : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1200"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1266"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1360"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1476"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1557"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1191"/> + <source>Multisig address: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1224"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1290"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1384"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1500"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1581"/> <source>This multisig wallet is not yet finalized</source> <translation>Ce portefeuille multisig n'est pas encore finalisé</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1236"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1260"/> <source>Error exporting multisig info: </source> <translation>Erreur d'importation des infos multisig : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1240"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1264"/> <source>Multisig info exported to </source> <translation>Infos multisig exportées vers </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1306"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1330"/> <source>Multisig info imported</source> <translation>Infos multisig importées</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1334"/> <source>Failed to import multisig info: </source> <translation>Échec de l'importation des infos multisig : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1321"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1345"/> <source>Failed to update spent status after importing multisig info: </source> <translation>Échec de la mise à jour de l'état des dépenses après l'importation des infos multisig : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1327"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1351"/> <source>Untrusted daemon, spent status may be incorrect. Use a trusted daemon and run "rescan_spent"</source> <translation>Pas un démon de confiance, l'état des dépenses peut être incorrect. Utilisez un démon de confiance et executez "rescan_spent"</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1355"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1471"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1552"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1379"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1495"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1576"/> <source>This is not a multisig wallet</source> <translation>Ceci n'est pas un portefeuille multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1405"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1414"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1429"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1438"/> <source>Failed to sign multisig transaction</source> <translation>Échec de la signature de la transaction multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1421"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1445"/> <source>Multisig error: </source> <translation>Erreur multisig : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1426"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1450"/> <source>Failed to sign multisig transaction: </source> <translation>Échec de la signature de la transaction multisig : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1449"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1473"/> <source>It may be relayed to the network with submit_multisig</source> <translation>Elle peut être transmise au réseau avec submit_multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1508"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1578"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1532"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1602"/> <source>Failed to load multisig transaction from file</source> <translation>Échec du chargement de la transaction multisig du fichier</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1514"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1583"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1538"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1607"/> <source>Multisig transaction signed by only %u signers, needs %u more signatures</source> <translation>Transaction multisig signée par %u signataire(s) seulement, nécessite %u signature(s) de plus</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1523"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8890"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1547"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9330"/> <source>Transaction successfully submitted, transaction </source> <translation>Transaction transmise avec succès, transaction </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1524"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8891"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1548"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9331"/> <source>You can check its status by using the `show_transfers` command.</source> <translation>Vous pouvez vérifier son statut en utilisant la commane 'show_transfers'.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1599"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1623"/> <source>Failed to export multisig transaction to file </source> <translation>Échec de l'exportation de la transaction multisig vers le fichier </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1603"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1627"/> <source>Saved exported multisig transaction file(s): </source> <translation>Transaction multisig enregistrée dans le(s) fichier(s) : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2095"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2101"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2120"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1892"/> + <source>Invalid key image or txid</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1901"/> + <source>failed to unset ring</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2072"/> + <source>usage: %s <key_image>|<pubkey></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2117"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2129"/> + <source>Frozen: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2131"/> + <source>Not frozen: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2138"/> + <source> bytes sent</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2139"/> + <source> bytes received</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2145"/> + <source>Welcome to Monero, the private cryptocurrency.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2147"/> + <source>Monero, like Bitcoin, is a cryptocurrency. That is, it is digital money.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2148"/> + <source>Unlike Bitcoin, your Monero transactions and balance stay private, and not visible to the world by default.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2149"/> + <source>However, you have the option of making those available to select parties, if you choose to.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2151"/> + <source>Monero protects your privacy on the blockchain, and while Monero strives to improve all the time,</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2152"/> + <source>no privacy technology can be 100% perfect, Monero included.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2153"/> + <source>Monero cannot protect you from malware, and it may not be as effective as we hope against powerful adversaries.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2154"/> + <source>Flaws in Monero may be discovered in the future, and attacks may be developed to peek under some</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2155"/> + <source>of the layers of privacy Monero provides. Be safe and practice defense in depth.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2157"/> + <source>Welcome to Monero and financial privacy. For more information, see https://getmonero.org/</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2244"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2250"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2269"/> <source>ring size must be an integer >= </source> <translation>la taille de cercle doit être un nombre entier >= </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2125"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2274"/> <source>could not change default ring size</source> <translation>échec du changement de la taille de cercle par défaut</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2398"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2469"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2549"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2620"/> <source>Invalid height</source> <translation>Hauteur invalide</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2562"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2667"/> + <source>invalid argument: must be either 1/yes or 0/no</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2738"/> <source>Start mining in the daemon (bg_mining and ignore_battery are optional booleans).</source> <translation>Démarrer la mine dans le démon (mine_arrière_plan et ignorer_batterie sont des booléens facultatifs).</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2565"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2741"/> <source>Stop mining in the daemon.</source> <translation>Arrêter la mine dans le démon.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2569"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2745"/> <source>Set another daemon to connect to.</source> <translation>Spécifier un autre démon auquel se connecter.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2572"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2748"/> <source>Save the current blockchain data.</source> <translation>Sauvegarder les données actuelles de la châine de blocs.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2575"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2751"/> <source>Synchronize the transactions and balance.</source> <translation>Synchroniser les transactions et le solde.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2579"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2755"/> <source>Show the wallet's balance of the currently selected account.</source> <translation>Afficher le solde du compte actuellement sélectionné.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2589"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2759"/> + <source>Show the incoming transfers, all or filtered by availability and address index. + +Output format: +Amount, Spent("T"|"F"), "frozen"|"locked"|"unlocked", RingCT, Global Index, Transaction Hash, Address Index, [Public Key, Key Image] </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2765"/> <source>Show the payments for the given payment IDs.</source> <translation>Afficher les paiements pour les IDs de paiement donnés.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2592"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2768"/> <source>Show the blockchain height.</source> <translation>Afficher la hauteur de la chaîne de blocs.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2606"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2782"/> <source>Send all unmixable outputs to yourself with ring_size 1</source> <translation>Envoyer toutes les sorties non mélangeables à vous-même avec une taille de cercle de 1</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2613"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2789"/> <source>Send all unlocked outputs below the threshold to an address.</source> <translation>Envoyer toutes les sorties débloquées d'un montant inférieur au seuil à une adresse.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2617"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2793"/> <source>Send a single output of the given key image to an address without change.</source> <translation>Envoyer une unique sortie ayant une image de clé donnée à une adresse sans rendu de monnaie.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2621"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2797"/> <source>Donate <amount> to the development team (donate.getmonero.org).</source> <translation>Donner <montant> à l'équipe de développement (donate.getmonero.org).</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2628"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2804"/> <source>Submit a signed transaction from a file.</source> <translation>Transmettre une transaction signée d'un fichier.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2632"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2808"/> <source>Change the current log detail (level must be <0-4>).</source> <translation>Changer le niveau de détail du journal (le niveau doit être <0-4>).</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2812"/> <source>If no arguments are specified, the wallet shows all the existing accounts along with their balances. If the "new" argument is specified, the wallet creates a new account with its label initialized by the provided label text (which can be empty). If the "switch" argument is specified, the wallet switches to the account specified by <index>. @@ -2356,82 +2439,132 @@ Si l'argument "untag" est spécifié, les mots clés assignés au Si l'argument "tag_description" est spécifié, le texte arbitraire <description> est assigné au mot clé <mot_clé>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2650"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2826"/> <source>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>Encoder un ID de paiement dans une adresse intégrée pour l'adresse publique du portefeuille actuel (en l'absence d'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="2654"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2830"/> <source>Print all entries in the address book, optionally adding/deleting an entry to/from it.</source> <translation>Afficher toutes les entrées du carnet d'adresses, optionnellement en y ajoutant/supprimant une entrée.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2657"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2833"/> <source>Save the wallet data.</source> <translation>Sauvegarder les données du portefeuille.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2660"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2836"/> <source>Save a watch-only keys file.</source> <translation>Sauvegarder un fichier de clés d'audit.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2663"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2839"/> <source>Display the private view key.</source> <translation>Afficher la clé privée d'audit.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2666"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2842"/> <source>Display the private spend key.</source> <translation>Afficher la clé privée de dépense.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2669"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2845"/> <source>Display the Electrum-style mnemonic seed</source> <translation>Afficher la phrase mnémonique de style Electrum</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2719"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2849"/> + <source>Available options: + seed language + Set the wallet's 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-ring-size <n> + Set the default ring size (obsolete). + auto-refresh <1|0> + Whether to automatically synchronize new blocks from the daemon. + refresh-type <full|optimize-coinbase|no-coinbase|default> + Set the wallet's refresh behaviour. + priority [0|1|2|3|4] + Set the fee to default/unimportant/normal/elevated/priority. + confirm-missing-payment-id <1|0> (obsolete) + ask-password <0|1|2 (or never|action|decrypt)> + action: ask the password before many actions such as transfer, etc + decrypt: same as action, but keeps the spend key encrypted in memory when not needed + unit <monero|millinero|micronero|nanonero|piconero> + Set the 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. + confirm-backlog <1|0> + Whether to warn if there is transaction backlog. + confirm-backlog-threshold [n] + Set a threshold for confirm-backlog to only warn if the transaction backlog is greater than n blocks. + refresh-from-block-height [n] + Set the height before which to ignore blocks. + auto-low-priority <1|0> + Whether to automatically use the low priority fee level when it's safe to do so. + segregate-pre-fork-outputs <1|0> + Set this if you intend to spend outputs on both Monero AND a key reusing fork. + key-reuse-mitigation2 <1|0> + Set this if you are not sure whether you will spend on a key reusing Monero fork later. +subaddress-lookahead <major>:<minor> + Set the lookahead sizes for the subaddress hash table. + Set this if you are not sure whether you will spend on a key reusing Monero fork later. + segregation-height <n> + Set to the height of a key reusing fork you want to use, 0 to use default.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2897"/> <source>Display the encrypted Electrum-style mnemonic seed.</source> <translation>Afficher la phrase mnémonique de style Electrum chiffrée.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2722"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2900"/> <source>Rescan the blockchain for spent outputs.</source> <translation>Rescanner la chaîne de blocs pour trouver les sorties dépensées.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2726"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2904"/> <source>Get the transaction key (r) for a given <txid>.</source> <translation>Obtenir la clé de transaction (r) pour un <ID_transaction> donné.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2734"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2912"/> <source>Check the amount going to <address> in <txid>.</source> <translation>Vérifier le montant allant à <adresse> dans <ID_transaction>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2738"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2916"/> <source>Generate a signature proving funds sent to <address> in <txid>, optionally with a challenge string <message>, using either the transaction secret key (when <address> is not your wallet's address) or the view secret key (otherwise), which does not disclose the secret key.</source> - <translation>Générer une signature prouvant l'envoi de fonds à <adresse> dans <ID_transaction>, optionnellement avec un <message> comme challenge, en utilisant soit la clé secrète de transaction (quand <adresse> n'est pas l'adresse de votre portefeuille) soit la clé secrète d'audit (dans le cas contraire), tout en ne divulgant pas la clé secrète.</translation> + <translation>Générer une signature prouvant l'envoi de fonds à <adresse> dans <ID_transaction>, optionnellement avec un <message> comme challenge, en utilisant soit la clé secrète de transaction (quand <adresse> n'est pas l'adresse de votre portefeuille) soit la clé secrète d'audit (dans le cas contraire), tout en ne divulguant pas la clé secrète.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2742"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2920"/> <source>Check the proof for funds going to <address> in <txid> with the challenge string <message> if any.</source> <translation>Vérifier la validité de la preuve de fonds allant à <adresse> dans <ID_transaction> avec le <message> de challenge s'il y en a un.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2746"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2924"/> <source>Generate a signature proving that you generated <txid> using the spend secret key, optionally with a challenge string <message>.</source> <translation>Générer une signature prouvant que vous avez créé <ID_transaction> en utilisant la clé secrète de dépense, optionnellement avec un <message> comme challenge.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2750"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2928"/> <source>Check a signature proving that the signer generated <txid>, optionally with a challenge string <message>.</source> <translation>Vérifier la validité de la preuve que le signataire a créé <ID_transaction>, optionnellement avec un <message> comme challenge.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2754"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2932"/> <source>Generate a signature proving that you own at least this much, optionally with a challenge string <message>. If 'all' is specified, you prove the entire sum of all of your existing accounts' balances. Otherwise, you prove the reserve of the smallest possible amount above <amount> available in your current account.</source> @@ -2440,238 +2573,283 @@ Si 'all' est spécifié, vous prouvez la somme totale des soldes de to Sinon, vous prouvez le plus petit solde supérieur à <montant> dans votre compte actuel.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2760"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2938"/> <source>Check a signature proving that the owner of <address> holds at least this much, optionally with a challenge string <message>.</source> <translation>Vérifier la validité d'une signature prouvant que le propriétaire d'une <adresse> détient au moins un montant, optionnellement avec un <message> comme challenge.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2780"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2958"/> <source>Show the unspent outputs of a specified address within an optional amount range.</source> <translation>Afficher les sorties non dépensées d'une adresse spécifique dans un interval de montants facultatif.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2788"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2962"/> + <source>Rescan the blockchain from scratch. If "hard" is specified, you will lose any information which can not be recovered from the blockchain itself.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2966"/> <source>Set an arbitrary string note for a <txid>.</source> <translation>Définir un texte arbitraire comme note pour <ID_transaction>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2792"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2970"/> <source>Get a string note for a txid.</source> - <translation>Obtenir le texte de la note pour <ID_transaction>.</translation> + <translation>Obtenir le texte de la note pour un ID de transaction.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2796"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2974"/> <source>Set an arbitrary description for the wallet.</source> <translation>Définir un texte arbitraire comme description du portefeuille.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2800"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2978"/> <source>Get the description of the wallet.</source> <translation>Obtenir la description du portefeuille.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2803"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2981"/> <source>Show the wallet's status.</source> <translation>Afficher l'état du portefeuille.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2806"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2984"/> <source>Show the wallet's information.</source> <translation>Afficher les informations du portefeuille.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2810"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2988"/> <source>Sign the contents of a file.</source> <translation>Signer le contenu d'un fichier.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2814"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2992"/> <source>Verify a signature on the contents of a file.</source> <translation>Vérifier la signature du contenu d'un fichier.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2822"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3000"/> <source>Import a signed key images list and verify their spent status.</source> <translation>Importer un ensemble signé d'images de clé et vérifier si elles correspondent à des dépenses.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2834"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3012"/> <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="2838"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3016"/> <source>Import a 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="2842"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3020"/> <source>Show information about a transfer to/from this address.</source> <translation>Afficher les information à propos d'un transfert vers/depuis cette adresse.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2845"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3023"/> <source>Change the wallet's password.</source> <translation>Changer le mot de passe du portefeuille.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2849"/> - <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 sont en clair 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="2852"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3030"/> <source>Print the information about the current fee and transaction backlog.</source> <translation>Afficher les informations à propos des frais et arriéré de transactions actuels.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2854"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3032"/> <source>Export data needed to create a multisig wallet</source> <translation>Exporter les données nécessaires pour créer un portefeuille multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2857"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3035"/> <source>Turn this wallet into a multisig wallet</source> <translation>Transformer ce portefeuille en portefeuille multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2861"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3039"/> <source>Turn this wallet into a multisig wallet, extra step for N-1/N wallets</source> <translation>Transformer ce portefeuille en portefeuille multisig, étape supplémentaire pour les portefeuilles N-1/N</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2869"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3047"/> <source>Export multisig info for other participants</source> <translation>Exporter les infos multisig pour les autres participants</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2873"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3051"/> <source>Import multisig info from other participants</source> <translation>Importer les infos multisig des autres participants</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2877"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3055"/> <source>Sign a multisig transaction from a file</source> <translation>Signer une transaction multisig d'un fichier</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2881"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3059"/> <source>Submit a signed multisig transaction from a file</source> <translation>Transmettre une transaction multisig signée d'un fichier</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2885"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3063"/> <source>Export a signed multisig transaction to a file</source> <translation>Exporter une transaction multisig signée vers un fichier</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3002"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3160"/> + <source>Unsets the ring used for a given key image or transaction</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3180"/> + <source>Freeze a single output by key image so it will not be used</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3184"/> + <source>Thaw a single output by key image so it may be used again</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3188"/> + <source>Checks whether a given output is currently frozen by key image</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3192"/> + <source>Prints simple network stats</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3196"/> + <source>Prints basic info about Monero for first time users</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3204"/> <source>Show the help section or the documentation about a <command>.</source> <translation>Afficher la section d'aide ou la documentation d'une <commande>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3085"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3258"/> + <source> (set this to support the network and to get a chance to receive new monero)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3295"/> <source>integer >= </source> <translation>entier >= </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3098"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3308"/> <source>block height</source> <translation>hauteur de bloc</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3203"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3316"/> + <source>1/yes or 0/no</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3414"/> <source>No wallet found with that name. Confirm creation of new wallet named: </source> <translation>Aucun portefeuille avec ce nom trouvé. Confirmer la création d'un nouveau portefeuille nommé : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3304"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3540"/> <source>can't specify both --restore-deterministic-wallet or --restore-multisig-wallet and --non-deterministic</source> <translation>impossible de spécifier à la fois --restore-deterministic-wallet ou --restore-multisig-wallet et --non-deterministic</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3546"/> <source>--restore-multisig-wallet uses --generate-new-wallet, not --wallet-file</source> <translation>--restore-multisig-wallet utilise --generate-new-wallet, pas --wallet-file</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3326"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3562"/> <source>specify a recovery parameter with the --electrum-seed="multisig seed here"</source> <translation>spécifiez un paramètre de récupération avec --electrum-seed="phrase mnémonique multisig ici"</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3355"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3591"/> <source>Multisig seed failed verification</source> <translation>Échec de la vérification de la phrase mnémonique multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3406"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3481"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3641"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3718"/> <source>This address is a subaddress which cannot be used here.</source> <translation>Cette adresse est une sous-adresse qui ne peut pas être utilisée ici.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3558"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3796"/> <source>Error: expected M/N, but got: </source> <translation>Erreur : M/N attendu, mais lu : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3563"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3801"/> <source>Error: expected N > 1 and N <= M, but got: </source> <translation>Erreur : N > 1 et N <= M attendu, mais lu : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3568"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3806"/> <source>Error: M/N is currently unsupported. </source> <translation>Erreur : M/N n'est actuellement pas supporté. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3809"/> <source>Generating master wallet from %u of %u multisig wallet keys</source> <translation>Génération du portefeuille principal à partir de %u de %u clés de portefeuille multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3600"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3838"/> <source>failed to parse secret view key</source> <translation>échec de l'analyse de la clé secrète d'audit</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3608"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3846"/> <source>failed to verify secret view key</source> <translation>échec de la vérification de la clé secrète d'audit</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3628"/> - <source>Secret spend key (%u of %u):</source> - <translation>Clé secrète de dépense (%u de %u) :</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3651"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3889"/> <source>Error: M/N is currently unsupported</source> <translation>Erreur : M/N n'est actuellement pas supporté</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3802"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4055"/> <source>Restore height </source> <translation>Hauteur de restauration </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3803"/> - <source>Still apply restore height? (Y/Yes/N/No): </source> - <translation>Appliquer la hauteur de restauration quand même ? (Y/Yes/Oui/N/No/Non) : </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3829"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4083"/> <source>Warning: using an untrusted daemon at %s, privacy will be lessened</source> <translation>Attention : en n'utilisant %s qui n'est pas un démon de confiance, la confidentialité sera réduite</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3888"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4093"/> + <source>If you are new to Monero, type "welcome" for a brief overview.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4098"/> + <source>WARNING: obsolete long payment IDs are enabled. Sending transactions with those payment IDs are bad for your privacy.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4100"/> + <source>It is recommended that you do not use them, and ask recipients who ask for one to not endanger your privacy.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4165"/> <source>Daemon either is not started or wrong port was passed. Please make sure daemon is running or change the daemon address using the 'set_daemon' command.</source> <translation>Le démon n'est pas lancé ou un mauvais port a été fourni. Veuillez vous assurer que le démon fonctionne ou changez l'adresse de démon avec la commande 'set_daemon'.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4036"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4313"/> <source>Your wallet has been generated! To start synchronizing with the daemon, use the "refresh" command. Use the "help" command to see the list of available commands. @@ -2690,1419 +2868,1467 @@ votre portefeuille à nouveau (mais les clés de votre portefeuille ne risquent </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4180"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4457"/> <source>failed to generate new mutlisig wallet</source> <translation>échec de la génération du nouveau portefeuille multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4183"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4460"/> <source>Generated new %u/%u multisig wallet: </source> <translation>Nouveau portefeuille multisig %u/%u généré : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4232"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4509"/> <source>Opened %u/%u multisig wallet%s</source> <translation>Portefeuille multisig %u/%u ouvert%s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4570"/> <source>Use "help <command>" to see a command's documentation. </source> <translation>Utilisez "help <commande>" pour voir la documentation d'une commande. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4351"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4628"/> <source>wallet is multisig and cannot save a watch-only version</source> <translation>c'est un portefeuille multisig et il ne peut pas sauvegarder une version d'audit</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4476"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4664"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4696"/> + <source>Failed to query mining status: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4679"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4707"/> + <source>Failed to setup background mining: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4683"/> + <source>Background mining enabled. Thank you for supporting the Monero network.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4711"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4719"/> + <source>Background mining not enabled. Run "set setup-background-mining 1" to change.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4725"/> + <source>Using an untrusted daemon, skipping background mining check</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4750"/> + <source>The daemon is not set up to background mine.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4751"/> + <source>With background mining enabled, the daemon will mine when idle and not on batttery.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4752"/> + <source>Enabling this supports the network you are using, and makes you eligible for receiving new monero</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4757"/> + <source>Background mining not enabled. Set setup-background-mining to 1 to change.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4864"/> <source>Unexpected array length - Exited simple_wallet::set_daemon()</source> <translation>Taille de tableau inattendue - Sortie de simple_wallet::set_daemon()</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4517"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4905"/> <source>This does not seem to be a valid daemon URL.</source> <translation>Ceci semble ne pas être une URL de démon valide.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4553"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4590"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4941"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4974"/> <source>txid </source> <translation>ID transaction </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4555"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4592"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4943"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4976"/> <source>idx </source> <translation>index </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4780"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5108"/> + <source>New transfer received since rescan was started. Key images are incomplete.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5183"/> <source> (Some owned outputs have partial key images - import_multisig_info needed)</source> <translation> (Certaines sorties ont des images de clé partielles - import_multisig_info requis)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4783"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5186"/> <source>Currently selected account: [</source> <translation>Compte actuellement sélectionné : [</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4783"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5186"/> <source>] </source> <translation>] </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4785"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5188"/> <source>Tag: </source> <translation>Mot clé : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4785"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5188"/> <source>(No tag assigned)</source> <translation>(Pas de mot clé assigné)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4792"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5200"/> <source>Balance per address:</source> <translation>Solde par adresse :</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> <source>Address</source> <translation>Adresse</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8451"/> <source>Balance</source> <translation>Solde</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8451"/> <source>Unlocked balance</source> <translation>Solde débloqué</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> <source>Outputs</source> <translation>Sorties</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8008"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9122"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8451"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9564"/> <source>Label</source> <translation>Étiquette</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4801"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5209"/> <source>%8u %6s %21s %21s %7u %21s</source> <translation>%8u %6s %21s %21s %7u %21s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> <source>spent</source> <translation>dépensé</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> <source>global index</source> <translation>index global</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> <source>tx id</source> <translation>ID de transaction</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>addr index</source> <translation>index adresse</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4924"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5312"/> + <source>Used at heights: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5318"/> + <source>[frozen]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5332"/> <source>No incoming transfers</source> <translation>Aucun transfert entrant</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4928"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5336"/> <source>No incoming available transfers</source> <translation>Aucun transfert entrant disponible</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4932"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5340"/> <source>No incoming unavailable transfers</source> <translation>Aucun transfert entrant non disponible</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>payment</source> <translation>paiement</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>transaction</source> <translation>transaction</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>height</source> <translation>hauteur</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>unlock time</source> <translation>durée de déverrouillage</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4968"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5376"/> <source>No payments with id </source> <translation>Aucun paiement avec l'ID </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5016"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5106"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5442"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5901"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5424"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5514"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5843"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6302"/> <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="5114"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5522"/> <source> Transaction %llu/%llu: txid=%s</source> <translation> Transaction %llu/%llu : ID=%s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5135"/> - <source> -Input %llu/%llu: amount=%s</source> - <translation> -Entrée %llu/%llu : montant=%s</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5151"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5559"/> <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="5159"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5567"/> <source>output key's originating block height shouldn't be higher than the blockchain height</source> <translation>la hauteur du bloc d'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="5163"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5571"/> <source> Originating block heights: </source> <translation> Hauteurs des blocs d'origine : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5175"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5583"/> <source> |</source> <translation> |</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5175"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7706"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5583"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8110"/> <source>| </source> <translation>| </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5192"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5600"/> <source> Warning: Some input keys being spent are from </source> <translation> Attention : Certaines clés d'entrées étant dépensées sont issues de </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5194"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5602"/> <source>, which can break the anonymity of ring signature. Make sure this is intentional!</source> <translation>, ce qui peut casser l'anonymat du cercle de signature. Assurez-vous que c'est intentionnel !</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5234"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5853"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6156"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5642"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6254"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6547"/> <source>Ring size must not be 0</source> <translation>La taille de cercle ne doit pas être 0</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5246"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5865"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6168"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5654"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6266"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6559"/> <source>ring size %u is too small, minimum is %u</source> <translation>la taille de cercle %u est trop petite, le minimum est %u</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5258"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5666"/> <source>wrong number of arguments</source> <translation>mauvais nombre d'arguments</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5417"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5996"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6268"/> - <source>No payment id is included with this transaction. Is this okay? (Y/Yes/N/No): </source> - <translation>Aucun ID de paiement n'est inclus dans cette transaction. Est-ce correct ? (Y/Yes/Oui/N/No/Non) : </translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="5686"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5796"/> + <source>Warning: Unencrypted payment IDs will harm your privacy: ask the recipient to use subaddresses instead</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5458"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6016"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5859"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6407"/> <source>No outputs found, or daemon is not ready</source> <translation>Aucune sortie trouvée, ou le démon n'est pas prêt</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6428"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6816"/> <source>Failed to parse donation address: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6444"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6832"/> <source>Donating %s %s to %s.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7493"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7897"/> <source>usage: export_transfers [in|out|all|pending|failed|coinbase] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]] [output=<path>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>direction</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>timestamp</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>running balance</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>hash</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>payment ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>fee</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>destination</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>index</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>note</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7572"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7976"/> <source>CSV exported to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7750"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8172"/> + <source>Warning: your restore height is higher than wallet restore height: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="8173"/> + <source>Rescan anyway ? (Y/Yes/N/No): </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="8192"/> <source>MMS received new message</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8559"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8605"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8999"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9045"/> <source>command only supported by HW wallet</source> <translation>commande supportée uniquement par un portefeuille matériel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8564"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9004"/> <source>hw wallet does not support cold KI sync</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8576"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9016"/> <source>Please confirm the key image sync on the device</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8582"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9022"/> <source>Key images synchronized to height </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8585"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9025"/> <source>Running untrusted daemon, cannot determine which transaction output is spent. Use a trusted daemon with --trusted-daemon and run rescan_spent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8588"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9028"/> <source> spent, </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8588"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9028"/> <source> unspent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8592"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9032"/> <source>Failed to import key images</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8597"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9037"/> <source>Failed to import key images: </source> <translation type="unfinished">Échec de l'importation des images de clé : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8614"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9054"/> <source>Failed to reconnect device</source> <translation>Échec de la reconnexion à l'appareil</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8619"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9059"/> <source>Failed to reconnect device: </source> <translation>Échec de la reconnexion à l'appareil : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8883"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9323"/> <source>Transaction successfully saved to </source> <translation>Transaction sauvegardée avec succès dans </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8883"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8885"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9323"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9325"/> <source>, txid </source> <translation>, ID transaction </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8885"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9325"/> <source>Failed to save transaction to </source> <translation>Échec de la sauvegarde de la transaction dans </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5723"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6044"/> - <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="5729"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6050"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6310"/> - <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="6611"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7014"/> <source>This is a watch only wallet</source> <translation>Ceci est un portefeuille d'audit</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8813"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9253"/> <source>Double spend seen on the network: this transaction may or may not end up being mined</source> <translation>Double dépense détectée sur le réseau : cette transaction sera peut-être invalidée</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8848"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9288"/> <source>Transaction ID not found</source> <translation>ID de transaction non trouvé</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="336"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="357"/> <source>true</source> <translation>vrai</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="389"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="410"/> <source>failed to parse refresh type</source> <translation>échec de l'analyse du type de rafraîchissement</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="721"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="787"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="939"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="984"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1067"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1124"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1190"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1256"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1350"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1466"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1547"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6601"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6665"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6702"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6799"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7010"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7094"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8397"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8474"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8517"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8630"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8670"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="742"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="808"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="962"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1007"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1090"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1147"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1214"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1280"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1374"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1490"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7004"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7068"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7410"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7494"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8842"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8919"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8962"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9070"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9110"/> <source>command not supported by HW wallet</source> <translation>commande non supportée par le portefeuille matériel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="726"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="797"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="747"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="818"/> <source>wallet is watch-only and has no seed</source> <translation>c'est un portefeuille d'audit et il n'a pas de phrase mnémonique</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="744"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="807"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="765"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="828"/> <source>wallet is non-deterministic and has no seed</source> <translation>c'est un portefeuille non déterministe et il n'a pas de phrase mnémonique</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="751"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="772"/> <source>Enter optional seed offset passphrase, empty to see raw seed</source> <translation>Entrer une phrase de passe facultative pour le décalage de la phrase mnémonique, effacer pour voir la phrase mnémonique brute</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="817"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="838"/> <source>Incorrect password</source> <translation>Mot de passe invalide</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="883"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="906"/> <source>Current fee is %s %s per %s</source> <translation>Les frais sont actuellement de %s %s par %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1631"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1788"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1655"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1812"/> <source>Invalid key image</source> <translation>Image de clé invalide</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1637"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1661"/> <source>Invalid txid</source> <translation>ID de transaction invalide</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1649"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1673"/> <source>Key image either not spent, or spent with mixin 0</source> <translation>Image de clé soit non dépensée, soit dépensée avec 0 mélange</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1664"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1688"/> <source>Failed to get key image ring: </source> <translation>Échec de la récupération du cercle de l'image de clé : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1679"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1703"/> <source>File doesn't exist</source> <translation>Le fichier d'existe pas</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1701"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1725"/> <source>Invalid ring specification: </source> <translation>Spécification de cercle invalide : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1733"/> <source>Invalid key image: </source> <translation>Image de clé invalide : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1714"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1738"/> <source>Invalid ring type, expected relative or abosolute: </source> <translation>Type de cercle invalide, "relative" ou "absolute" attendu : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1720"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1732"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1744"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1756"/> <source>Error reading line: </source> <translation>Erreur lors de la lecture de la ligne : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1743"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1767"/> <source>Invalid ring: </source> <translation>Cercle invalide : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1752"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1776"/> <source>Invalid relative ring: </source> <translation>Cercle relatif invalide : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1764"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1788"/> <source>Invalid absolute ring: </source> <translation>Cercle absolu invalide : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1773"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1797"/> <source>Failed to set ring for key image: </source> <translation>Échec de l'affectation du cercle pour l'image de clé : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1773"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1797"/> <source>Continuing.</source> <translation>On continue.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1803"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1827"/> <source>Missing absolute or relative keyword</source> <translation>Mot clé "absolute" ou "relative" manquant</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1813"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1820"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1837"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1844"/> <source>invalid index: must be a strictly positive unsigned integer</source> <translation>index invalide : doit être un nombre entier strictement positif</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1828"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1852"/> <source>invalid index: indices wrap</source> <translation>index invalide : boucle des indices</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1838"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1862"/> <source>invalid index: indices should be in strictly ascending order</source> <translation>index invalide : les indices doivent être en ordre strictement croissant</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1845"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1869"/> <source>failed to set ring</source> <translation>échec de l'affectation du cercle</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1890"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1946"/> <source>First line is not an amount</source> <translation>La première ligne n'est pas un montant</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1904"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1960"/> <source>Invalid output: </source> <translation>Sortie invalide : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1914"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1970"/> <source>Bad argument: </source> <translation>Mauvais argument : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1914"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1970"/> <source>should be "add"</source> <translation>devrait être "add"</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1923"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1979"/> <source>Failed to open file</source> <translation>Échec de l'ouverture du fichier</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1929"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1985"/> <source>Invalid output key, and file doesn't exist</source> <translation>Clé de sortie invalide, et le fichier n'existe pas</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1952"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1979"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2035"/> <source>Invalid output</source> <translation>Sortie invalide</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2007"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2063"/> <source>Failed to save known rings: </source> <translation>Échec de la sauvegarde des cercles connus : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2069"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2218"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2237"/> <source>wallet is watch-only and cannot transfer</source> <translation>c'est un portefeuille d'audit et il ne peut pas transférer</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2106"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5581"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2255"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5982"/> <source>WARNING: this is a non default ring size, which may harm your privacy. Default is recommended.</source> <translation>ATTENTION : ceci c'est pas la taille de cercle par défaut, ce qui peut nuire à votre confidentialité. La valeur par défaut est recommandée.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2108"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2257"/> <source>WARNING: from v8, ring size will be fixed and this setting will be ignored.</source> <translation>ATTENTION : ) partir de v8, la taille de cercle sera fixée et ce paramètre sera ignoré.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2137"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2160"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2176"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2286"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2309"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2325"/> <source>priority must be either 0, 1, 2, 3, or 4, or one of: </source> <translation>la priorité doit être 0, 1, 2, 3, 4 ou l'une de : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2330"/> <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="2249"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2400"/> <source>invalid argument: must be either 0/never, 1/action, or 2/encrypt/decrypt</source> <translation>argument invalide : doit être soit 0/never, 1/action, ou 2/encrypt/decrypt</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2595"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2771"/> <source>Transfer <amount> to <address>. If the parameter "index=<N1>[,<N2>,...]" is specified, the wallet uses outputs received by addresses of those indices. If omitted, the wallet randomly chooses address indices to be used. In any case, it tries its best not to combine outputs across multiple addresses. <priority> is the priority of the transaction. The higher the priority, the higher the transaction fee. Valid values in priority order (from lowest to highest) are: unimportant, normal, elevated, priority. If omitted, the default value (see the command "set priority") is used. <ring_size> is the number of inputs to include for untraceability. Multiple payments can be made at once by adding URI_2 or <address_2> <amount_2> etcetera (before the payment ID, if it's included)</source> - <translation>Transférer <montant> à <adresse> Si le paramètre "index=<N1>[,<N2>,...]" est spécifié, le portefeuille utilise les sorties reçues par les adresses de ces indices. Si il est omis, le portefeuille choisit les indices d'adresse à utiliser aléatoirement. Dans tous les cas, il essaye de ne pas combiner des sorties de multiples adresses. <priorité> est la priorité de la transaction. Plus la priorité est haute, plus les frais de transaction sont élévés. Les valeurs valides par ordre de priorité (de la plus basse à la plus haute) sont : unimportant, normal, elevated, priority. Si elle est omise, la valeur par défaut (voir la commande "set priority") est utilisée. <taille_cercle> est le nombre d'entrées à inclure pour l'intraçabilité. De multiples paiements peuvent être réalisés d'un coup en ajoutant <URI_2> ou <adresse_2> <montant_2> et cetera (avant l'ID de paiement, si il est inclus)</translation> + <translation>Transférer <montant> à <adresse> Si le paramètre "index=<N1>[,<N2>,...]" est spécifié, le portefeuille utilise les sorties reçues par les adresses de ces indices. Si il est omis, le portefeuille choisit les indices d'adresse à utiliser aléatoirement. Dans tous les cas, il essaye de ne pas combiner des sorties de multiples adresses. <priorité> est la priorité de la transaction. Plus la priorité est haute, plus les frais de transaction sont élevés. Les valeurs valides par ordre de priorité (de la plus basse à la plus haute) sont : unimportant, normal, elevated, priority. Si elle est omise, la valeur par défaut (voir la commande "set priority") est utilisée. <taille_cercle> est le nombre d'entrées à inclure pour l'intraçabilité. De multiples paiements peuvent être réalisés d'un coup en ajoutant <URI_2> ou <adresse_2> <montant_2> et cetera (avant l'ID de paiement, si il est inclus)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2599"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2775"/> <source>Transfer <amount> to <address> and lock it for <lockblocks> (max. 1000000). If the parameter "index=<N1>[,<N2>,...]" is specified, the wallet uses outputs received by addresses of those indices. If omitted, the wallet randomly chooses address indices to be used. In any case, it tries its best not to combine outputs across multiple addresses. <priority> is the priority of the transaction. The higher the priority, the higher the transaction fee. Valid values in priority order (from lowest to highest) are: unimportant, normal, elevated, priority. If omitted, the default value (see the command "set priority") is used. <ring_size> is the number of inputs to include for untraceability. Multiple payments can be made at once by adding URI_2 or <address_2> <amount_2> etcetera (before the payment ID, if it's included)</source> - <translation>Transférer <montant> à <adresse> et le verrouiller pendant <blocs_verrou> (max 1000000). Si le paramètre "index=<N1>[,<N2>,...]" est spécifié, le portefeuille utilise les sorties reçues par les adresses de ces indices. Si il est omis, le portefeuille choisit les indices d'adresse à utiliser aléatoirement. Dans tous les cas, il essaye de ne pas combiner des sorties de multiples adresses. <priorité> est la priorité de la transaction. Plus la priorité est haute, plus les frais de transaction sont élévés. Les valeurs valides par ordre de priorité (de la plus basse à la plus haute) sont : unimportant, normal, elevated, priority. Si elle est omise, la valeur par défaut (voir la commande "set priority") est utilisée. <taille_cercle> est le nombre d'entrées à inclure pour l'intraçabilité. De multiples paiements peuvent être réalisés d'un coup en ajoutant <URI_2> ou <adresse_2> <montant_2> et cetera (avant l'ID de paiement, si il est inclus)</translation> + <translation>Transférer <montant> à <adresse> et le verrouiller pendant <blocs_verrou> (max 1000000). Si le paramètre "index=<N1>[,<N2>,...]" est spécifié, le portefeuille utilise les sorties reçues par les adresses de ces indices. Si il est omis, le portefeuille choisit les indices d'adresse à utiliser aléatoirement. Dans tous les cas, il essaye de ne pas combiner des sorties de multiples adresses. <priorité> est la priorité de la transaction. Plus la priorité est haute, plus les frais de transaction sont élevés. Les valeurs valides par ordre de priorité (de la plus basse à la plus haute) sont : unimportant, normal, elevated, priority. Si elle est omise, la valeur par défaut (voir la commande "set priority") est utilisée. <taille_cercle> est le nombre d'entrées à inclure pour l'intraçabilité. De multiples paiements peuvent être réalisés d'un coup en ajoutant <URI_2> ou <adresse_2> <montant_2> et cetera (avant l'ID de paiement, si il est inclus)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2603"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2779"/> <source>Send all unlocked balance to an address and lock it for <lockblocks> (max. 1000000). If the parameter "index<N1>[,<N2>,...]" is specified, the wallet sweeps outputs received by those address indices. If omitted, the wallet randomly chooses an address index to be used. <priority> is the priority of the sweep. The higher the priority, the higher the transaction fee. Valid values in priority order (from lowest to highest) are: unimportant, normal, elevated, priority. If omitted, the default value (see the command "set priority") is used. <ring_size> is the number of inputs to include for untraceability.</source> - <translation>Transférer tout le solde débloqué à une adresse et le verrouiller pendant <blocs_verrou> (max 1000000). Si le paramètre "index=<N1>[,<N2>,...]" est spécifié, le portefeuille utilise les sorties reçues par ces indices d'adresse. Si il est omis, le portefeuille choisit un index d'adresse à utiliser aléatoirement. <priorité> est la priorité du balayage. Plus la priorité est haute, plus les frais de transaction sont élévés. Les valeurs valides par ordre de priorité (de la plus basse à la plus haute) sont : unimportant, normal, elevated, priority. Si elle est omise, la valeur par défaut (voir la commande "set priority") est utilisée. <taille_cercle> est le nombre d'entrées à inclure pour l'intraçabilité.</translation> + <translation>Transférer tout le solde débloqué à une adresse et le verrouiller pendant <blocs_verrou> (max 1000000). Si le paramètre "index=<N1>[,<N2>,...]" est spécifié, le portefeuille utilise les sorties reçues par ces indices d'adresse. Si il est omis, le portefeuille choisit un index d'adresse à utiliser aléatoirement. <priorité> est la priorité du balayage. Plus la priorité est haute, plus les frais de transaction sont élevés. Les valeurs valides par ordre de priorité (de la plus basse à la plus haute) sont : unimportant, normal, elevated, priority. Si elle est omise, la valeur par défaut (voir la commande "set priority") est utilisée. <taille_cercle> est le nombre d'entrées à inclure pour l'intraçabilité.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2609"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2785"/> <source>Send all unlocked balance to an address. If the parameter "index<N1>[,<N2>,...]" is specified, the wallet sweeps outputs received by those address indices. If omitted, the wallet randomly chooses an address index to be used. If the parameter "outputs=<N>" is specified and N > 0, wallet splits the transaction into N even outputs.</source> <translation>Envoyer tout le solde débloqué à une adresse. Si le paramètre "index<N1>[,<N2>,...]" est spécifié, le portefeuille balaye les sorties reçues par ces indices d'adresse. Si il est omis, le portefeuille choisit un index d'adresse à utiliser aléatoirement. Si le paramètre "outputs=<N>" est spécifié et N > 0, le portefeuille scinde la transaction en N sorties égales.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2625"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2801"/> <source>Sign a transaction from a file. If the parameter "export_raw" is specified, transaction raw hex data suitable for the daemon RPC /sendrawtransaction is exported.</source> <translation>Signer une transaction à partir d'un fichier. Si le paramètre "export_raw" est spécifié, les données brutes hexadécimales adaptées au RPC /sendrawtransaction du démon sont exportées.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2646"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2822"/> <source>If no arguments are specified or <index> is specified, the wallet shows the default or specified address. If "all" is specified, the wallet shows all the existing addresses in the currently selected account. If "new " is specified, the wallet creates a new address with the provided label text (which can be empty). If "label" is specified, the wallet sets the label of the address specified by <index> to the provided label text.</source> <translation>Si aucun argument n'est spécifié ou si <index> est spécifié, le portefeuille affiche l'adresse par défaut ou l'adresse spécifiée. Si "all" est spécifié, le portefeuille affiche toutes les adresses existantes dans le comptes actuellement sélectionné. Si "new" est spécifié, le portefeuille crée une nouvelle adresse avec le texte d'étiquette fourni (qui peut être vide). Si "label" est spécifié, le portefeuille affecte le texte fourni à l'étiquette de l'adresse spécifiée par <index>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2730"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2908"/> <source>Set the transaction key (r) for a given <txid> in case the tx was made by some other device or 3rd party wallet.</source> <translation>Définir la clé de transaction (r) pour un <ID_transaction> donné au cas où cette clé ait été créée par un appareil ou portefeuille tiers.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2784"/> - <source>Rescan the blockchain from scratch, losing any information which can not be recovered from the blockchain itself.</source> - <translation>Rescanner la chaîne de blocs à partir du début, en perdant toute information qui ne peut pas être retrouvée à partir de la chaîne elle même.</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2830"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3008"/> <source>Attempts to reconnect HW wallet.</source> <translation>Essayer de se reconnecter à un portefeuille matériel.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2972"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3150"/> <source>Print the ring(s) used to spend a given key image or transaction (if the ring size is > 1) Output format: Key Image, "absolute", list of rings</source> - <translation type="unfinished">Afficher le(s) cercle(s) utilisé(s) pour dépenser une image de clé ou une transaction (si la taille de cercle est > 1)</translation> + <translation>Afficher le(s) cercle(s) utilisé(s) pour dépenser une image de clé ou une transaction (si la taille de cercle est > 1) + +Format de sortie : +Image de clé, "absolue", liste de cercles</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2978"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3156"/> <source>Set the ring used for a given key image, so it can be reused in a fork</source> <translation>Définir le cercle utilisé pour une image de clé donnée, afin de pouvoir le réutiliser dans un fork</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2982"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3164"/> <source>Save known rings to the shared rings database</source> <translation>Sauvegarder les cercles connus dans la base de données des cercles partagés</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2998"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3200"/> <source>Returns version information</source> <translation>Retourne les informations de version</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3087"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3297"/> <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'on ne reçoit aucune récompense de bloc), default (comme optimize-coinbase)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3298"/> <source>0, 1, 2, 3, or 4, or one of </source> <translation>0, 1, 2, 3, 4 ou l'une de </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3090"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3300"/> <source>0|1|2 (or never|action|decrypt)</source> <translation>0|1|2 (ou never|action|decrypt)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3091"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3301"/> <source>monero, millinero, micronero, nanonero, piconero</source> <translation>monero, millinero, micronero, nanonero, piconero</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3102"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3312"/> <source><major>:<minor></source> <translation><majeur>:<mineur></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3377"/> <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="3183"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3394"/> <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="3189"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> <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="3195"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3406"/> <source>Key file not found. Failed to open wallet: </source> <translation>Fichier de clés non trouvé. Échec de l'ouverture du portefeuille : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3214"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3425"/> <source>Generating new wallet...</source> <translation>Génération du nouveau portefeuille...</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3273"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3506"/> <source>Can't specify more than one of --testnet and --stagenet</source> <translation>Impossible de spécifier plus d'une option parmis --testnet et --stagenet</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3285"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3521"/> <source>can't specify more than one of --generate-new-wallet="wallet_name", --wallet-file="wallet_name", --generate-from-view-key="wallet_name", --generate-from-spend-key="wallet_name", --generate-from-keys="wallet_name", --generate-from-multisig-keys="wallet_name", --generate-from-json="jsonfilename" and --generate-from-device="wallet_name"</source> <translation>impossible de spécifier plus d'une option parmis --generate-new-wallet="nom_portefeuille", --wallet-file="nom_portefeuille", --generate-from-view-key="nom_portefeuille", --generate-from-spend-key="nom_portefeuille", --generate-from-keys="nom_portefeuille", --generate-from-multisig-keys="nom_portefeuille", --generate-from-json="nom_fichier_json" et --generate-from-device="nom_portefeuille"</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3364"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3600"/> <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="3369"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3605"/> <source>Enter seed offset passphrase, empty if none</source> <translation>Entrer une phrase de passe pour le décalage de la phrase mnémonique, vide si aucun</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3395"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3415"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3450"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3470"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3490"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3505"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3553"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3578"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3594"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3633"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3630"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3650"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3686"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3707"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3727"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3742"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3791"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3816"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3832"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3871"/> <source>No data supplied, cancelled</source> <translation>Pas de données fournies, annulation</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3401"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3476"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3584"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5371"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5969"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6243"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6818"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6886"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6950"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7154"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8193"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8454"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3713"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3822"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5770"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6360"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6631"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7218"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7286"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7350"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7554"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8899"/> <source>failed to parse address</source> <translation>échec de l'analyse de l'adresse</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3421"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3511"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3656"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3748"/> <source>failed to parse view key secret key</source> <translation>échec de l'analyse de la clé secrète d'audit</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3430"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3528"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3665"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3765"/> <source>failed to verify view key secret key</source> <translation>échec de la vérification de la clé secrète d'audit</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3434"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3532"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3613"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3669"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3769"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3851"/> <source>view key does not match standard address</source> <translation>la clé d'audit ne correspond pas à l'adresse standard</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3439"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3459"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3536"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3669"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3674"/> <location filename="../src/simplewallet/simplewallet.cpp" line="3695"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3726"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3773"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3907"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3934"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3966"/> <source>account creation failed</source> <translation>échec de la création du compte</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3455"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3496"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3638"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3691"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3733"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3876"/> <source>failed to parse spend key secret key</source> <translation>échec de l'analyse de la clé secrète de dépense</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3520"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3658"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3757"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3896"/> <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="3524"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3663"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3761"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3901"/> <source>spend key does not match standard address</source> <translation>la clé de dépense ne correspond pas à l'adresse standard</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3701"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3941"/> <source>No restore height is specified.</source> <translation>Aucune hauteur de restauration n'est spécifiée.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3702"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3942"/> <source>Assumed you are creating a new account, restore will be done from current estimated blockchain height.</source> <translation>Nous supposons que vous créez un nouveau compte, la restauration sera faite à partir d'une hauteur de la chaîne de blocs estimée.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3703"/> - <source>Use --restore-height if you want to restore an already setup account from a specific height</source> - <translation>Utilisez --restore-height si vous voulez restaurer un compte existant à partir d'une hauteur spécifique</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3707"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3947"/> <source>account creation aborted</source> <translation>création du compte annulée</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3816"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4069"/> <source>can't specify --subaddress-lookahead and --wallet-file at the same time</source> <translation>Impossible de spécifier --subaddress-lookahead et --wallet-file en même temps</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3820"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4073"/> <source>failed to open account</source> <translation>échec de l'ouverture du compte</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3824"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4391"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4444"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4529"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6854"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4078"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4779"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4832"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4917"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7254"/> <source>wallet is null</source> <translation>portefeuille est nul</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3832"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4086"/> <source>Failed to initialize ring database: privacy enhancing features will be inactive</source> <translation>Impossible d'initialiser la base de données des cercles : les fonctions d'amélioration de la confidentialité seront inactives</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3917"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4194"/> <source>If your display freezes, exit blind with ^C, then run again with --use-english-language-names</source> <translation>Si votre affichage se bloque, quittez en aveugle avec ^C, puis lancer à nouveau en utilisant --use-english-language-names</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3935"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3940"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4212"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4217"/> <source>invalid language choice entered. Please try again. </source> <translation>choix de langue passé invalide. Veuillez réessayer. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4019"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4296"/> <source>View key: </source> <translation>Clé d'audit : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4407"/> <source>Generated new wallet on hw device: </source> <translation>Nouveau portefeuille généré sur l'appareil : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4209"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4486"/> <source>Key file not found. Failed to open wallet</source> <translation>Fichier des clés non trouvé. Échec d'ouverture du portefeuille</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4286"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4563"/> <source>You may want to remove the file "%s" and try again</source> <translation>Vous pourriez vouloir supprimer le fichier "%s" et réessayer</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4314"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4591"/> <source>failed to deinitialize wallet</source> <translation>échec de la désinitialisation du portefeuille</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4367"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4644"/> <source>Watch only wallet saved as: </source> <translation>Portefeuille d'audit sauvegardé vers : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4371"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4648"/> <source>Failed to save watch only wallet: </source> <translation>Échec de la sauvegarde du portefeuille d'audit : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4382"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5024"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8522"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4770"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5432"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8967"/> <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="4498"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4886"/> <source>Expected trusted or untrusted, got </source> <translation>"trusted" ou "untrusted" attendu, mais lu </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4515"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4903"/> <source>trusted</source> <translation>de confiance</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4515"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4903"/> <source>untrusted</source> <translation>non fiable</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4539"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4927"/> <source>blockchain can'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="4569"/> - <source>NOTE: this transaction uses an encrypted payment ID: consider using subaddresses instead</source> - <translation>NOTE: cette transaction utilise un ID de paiement chiffré: veuillez considérer l'utilisation de sous-adresses à la place</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4572"/> - <source>WARNING: this transaction uses an unencrypted payment ID: consider using subaddresses instead</source> - <translation>ATTENTION: cette transaction utilise un ID de paiement non chiffré: veuillez considérer l'utilisation de sous-adresses à la place</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4608"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4992"/> <source>Password needed (%s) - use the refresh command</source> <translation>Mot de passe requis (%s) - utilisez la commande refresh</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4616"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5000"/> <source>Enter password</source> <translation>Entrez le mot de passe</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4720"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5038"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5446"/> <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="4724"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5042"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5127"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5450"/> <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="4734"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5137"/> <source>refresh error: </source> <translation>erreur du rafraîchissement : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4782"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5185"/> <source> (Some owned outputs have missing key images - import_key_images needed)</source> <translation> (Il manque les images de clé de certaines sorties - import_key_images requis)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4786"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5194"/> <source>Balance: </source> <translation>Solde : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4893"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5301"/> <source>pubkey</source> <translation>clé publique</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4893"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5301"/> <source>key image</source> <translation>image de clé</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4910"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5318"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>unlocked</source> <translation>déverrouillé</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> <source>ringct</source> <translation>ringct</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4909"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5317"/> <source>T</source> <translation>V</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4909"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5317"/> <source>F</source> <translation>F</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4910"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5318"/> <source>locked</source> <translation>vérrouillé</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4911"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5319"/> <source>RingCT</source> <translation>RingCT</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4911"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5319"/> <source>-</source> <translation>-</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4990"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5398"/> <source>payment ID has invalid format, expected 16 or 64 character hex string: </source> <translation>format d'identifiant de paiement invalide, 16 ou 64 caractères hexadécimaux attendus : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5046"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5454"/> <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="5130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5538"/> <source>failed to find construction data for tx input</source> <translation>échec de la recherche des données pour contruire l'entrée de la transaction</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5543"/> + <source> +Input %llu/%llu (%s): amount=%s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5601"/> <source>the same transaction</source> <translation>la même transaction</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5601"/> <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="5251"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5870"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6173"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5659"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6271"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6564"/> <source>ring size %u is too large, maximum is %u</source> <translation>la taille de cercle %u est trop grande, le maximum est %u</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5276"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5395"/> - <source>Unencrypted payment IDs are bad for privacy: ask the recipient to use subaddresses instead</source> - <translation>Les ID de paiment non chiffrés sont mauvais pour la confidentialité : demandez au bénéficiaire d'utiliser les sous-adresses à la place</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5690"/> <source>payment id failed to encode</source> <translation>échec de l'encodage de l'ID de paiement</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5340"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5737"/> <source>failed to parse short payment ID from URI</source> <translation>échec de l'analyse de l'ID de paiement court à partir de l'URI</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5363"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5365"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5762"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5764"/> <source>Invalid last argument: </source> <translation>Dernier argument invalide : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5382"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5782"/> <source>a single transaction cannot use more than one payment id</source> <translation>une unique transaction ne peut pas utiliser plus d'un ID de paiement</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5399"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5800"/> <source>failed to parse payment id, though it was detected</source> <translation>échec de l'analyse de l'ID de paiement, bien qu'il ait été détecté</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5775"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6176"/> <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="5776"/> - <source>Discarding %s of unmixable outputs that cannot be spent, which can be undone by "rescan_spent". Is this okay? (Y/Yes/N/No): </source> - <translation>On se débarrasse de %s de sorties non mélangeables qui ne peuvent pas être dépensées, ce qui peut être défait avec "rescan_spent". Est-ce d'accord ? (Y/Yes/N/No) : </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5879"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6280"/> <source>missing lockedblocks parameter</source> <translation>paramètre blocs_verrou manquant</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5889"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6290"/> <source>bad locked_blocks parameter</source> <translation>mauvais paramètre blocs_verrou</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5914"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6182"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6315"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6573"/> <source>Failed to parse number of outputs</source> <translation>Échec de l'analyse du nombre de sorties</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5919"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6187"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6320"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6578"/> <source>Amount of outputs should be greater than 0</source> <translation>Le nombre de sorties doit être supérieur à 0</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6442"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6830"/> <source>Donating %s %s to The Monero Project (donate.getmonero.org or %s).</source> <translation>Don de %s %s à The Monero Project (donate.getmonero.org ou %s).</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6759"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6770"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6777"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7164"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7175"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7182"/> <source>failed to parse tx_key</source> <translation>échec de l'analyse de la clé de transaction</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6786"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7191"/> <source>Tx key successfully stored.</source> <translation>Clé de transaction sauvegardée avec succès.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6790"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7195"/> <source>Failed to store tx key: </source> <translation>Échec de la sauvegarde de la clé de transaction : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6969"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7079"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7369"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7479"/> <source>Good signature</source> <translation>Bonne signature</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6996"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7081"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7396"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7481"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7581"/> <source>Bad signature</source> <translation>Mauvaise signature</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7440"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7844"/> <source>usage: show_transfers [in|out|all|pending|failed|coinbase] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]]</source> - <translation>usage : show_transfers [in|out|all|pending|failed|coinbase] [index=<N1>[,<N2>,...]] [<hauteur_min> [<hauteur_max>]]</translation> + <translation>usage : show_transfers [in|out|all|pending|failed|coinbase] [index=<N1>[,<N2>,...]] [<hauteur_min> [<hauteur_max>]]</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7296"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7696"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>block</source> <translation>bloc</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7730"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8159"/> <source>Warning: this will lose any information which can not be recovered from the blockchain.</source> <translation>Attention : ceci pedra toute information qui ne peut pas être retrouvée à partir de la chaîne de blocs.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7731"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8160"/> <source>This includes destination addresses, tx secret keys, tx notes, etc</source> <translation>Ceci inclut les adresses de destination, les clé secrètes de transaction, les notes de transaction, etc</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7732"/> - <source>Rescan anyway ? (Y/Yes/N/No): </source> - <translation>Rescanner quand même ? (Y/Yes/N/No) : </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8169"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8612"/> <source>Standard address: </source> <translation>Adresse standard : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8174"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8617"/> <source>failed to parse payment ID or address</source> <translation>échec de l'analyse de l'ID de paiement ou de l'adresse</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8215"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8659"/> <source>failed to parse payment ID</source> <translation>échec de l'analyse de l'ID de paiement</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8233"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8677"/> <source>failed to parse index</source> <translation>échec de l'analyse de l'index</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8241"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8685"/> <source>Address book is empty.</source> <translation>Le carnet d'adresses est vide.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8247"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8691"/> <source>Index: </source> <translation>Index : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8248"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8378"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8692"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8823"/> <source>Address: </source> <translation>Adresse : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8249"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8693"/> <source>Payment ID: </source> <translation>ID de paiement : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8250"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8377"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8694"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8822"/> <source>Description: </source> <translation>Description : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8387"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8832"/> <source>Network type: </source> <translation>Type de réseau : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8388"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8833"/> <source>Testnet</source> <translation>Testnet</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8389"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8834"/> <source>Stagenet</source> <translation>Stagenet</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8389"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8834"/> <source>Mainnet</source> <translation>Mainnet</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8407"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8852"/> <source>wallet is watch-only and cannot sign</source> <translation>c'est un portefeuille d'audit et il ne peut pas signer</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1289"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8421"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8447"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8684"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1313"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8866"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8892"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9124"/> <source>failed to read file </source> <translation>échec de la lecture du fichier </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6958"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7072"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6295"/> + <source>Locked blocks too high, max 1000000 (˜4 yrs)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5818"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6387"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6656"/> + <source>No payment id is included with this transaction. Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5882"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5892"/> + <source>Is this okay anyway?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5887"/> + <source>There is currently a %u block backlog at that fee level. Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="7358"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7472"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7566"/> <source>failed to load signature file</source> <translation>échec du chargement du fichier signature</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7020"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7420"/> <source>wallet is watch-only and cannot generate the proof</source> <translation>c'est un portefeuille d'audit et il ne peut générer de preuve</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7104"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7504"/> <source>The reserve proof can be generated only by a full wallet</source> <translation>La preuve de réserve ne peut être généré que par un portefeuille complet</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7159"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7559"/> <source>Address must not be a subaddress</source> <translation>L'adresse ne doit pas être une sous-adresse</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7177"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7577"/> <source>Good signature -- total: %s, spent: %s, unspent: %s</source> <translation>Bonne signature -- total : %s, dépensé : %s, non dépensé : %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7365"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7767"/> <source>[Double spend seen on the network: this transaction may or may not end up being mined] </source> <translation>[Double dépense détectée sur le réseau : cette transaction sera peut-être invalidée] </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7641"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8045"/> <source>There is no unspent output in the specified address</source> <translation>Il n'y a pas de sortie non dépensée pour l'adresse spécifiée</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7799"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8242"/> <source> (no daemon)</source> <translation> (pas de démon)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7801"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8244"/> <source> (out of sync)</source> <translation> (désynchronisé)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7852"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8295"/> <source>(Untitled account)</source> <translation>(compte sans nom)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7865"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7883"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7908"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7931"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8077"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8100"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8308"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8326"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8351"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8374"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8520"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8543"/> <source>failed to parse index: </source> <translation>échec de l'analyse de l'index : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7870"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8082"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8313"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8525"/> <source>specify an index between 0 and </source> <translation>specifiez un index entre 0 et </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7988"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8431"/> <source> Grand total: Balance: </source> @@ -4111,386 +4337,386 @@ Somme finale : Solde : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7988"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8431"/> <source>, unlocked balance: </source> <translation>, solde débloqué : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7996"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8439"/> <source>Untagged accounts:</source> <translation>Comptes sans mot clé :</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8002"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8445"/> <source>Tag %s is unregistered.</source> <translation>Le mot clé %s n'est pas enregistré.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8005"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8448"/> <source>Accounts with tag: </source> <translation>Comptes avec mot clé : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8006"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8449"/> <source>Tag's description: </source> <translation>Description du mot clé : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8451"/> <source>Account</source> <translation>Compte</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8014"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8457"/> <source> %c%8u %6s %21s %21s %21s</source> <translation> %c%8u %6s %21s %21s %21s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8024"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8467"/> <source>----------------------------------------------------------------------------------</source> <translation>----------------------------------------------------------------------------------</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8025"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8468"/> <source>%15s %21s %21s</source> <translation>%15s %21s %21s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8048"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8491"/> <source>Primary address</source> <translation>Adresse primaire</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8048"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8491"/> <source>(used)</source> <translation>(utilisé)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8069"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8512"/> <source>(Untitled address)</source> <translation>(adresse sans nom)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8109"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8552"/> <source><index_min> is already out of bound</source> <translation><index_min> est déjà hors limite</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8114"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8557"/> <source><index_max> exceeds the bound</source> <translation><index_max> excède la limite</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8140"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8152"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8583"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8595"/> <source>Integrated addresses can only be created for account 0</source> <translation>Les adresses intégrées ne peuvent être créées que pour le compte 0</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8164"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8607"/> <source>Integrated address: %s, payment ID: %s</source> <translation>Adresse intégrée : %s, ID de paiement : %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8169"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8612"/> <source>Subaddress: </source> <translation>Sous-adresse : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8335"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8779"/> <source>no description found</source> <translation>pas de description trouvée</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8337"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8781"/> <source>description found: </source> <translation>description trouvée : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8376"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8821"/> <source>Filename: </source> <translation>Fichier : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8381"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8826"/> <source>Watch only</source> <translation>Audit</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8383"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8828"/> <source>%u/%u multisig%s</source> <translation>Multisig %u/%u%s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8385"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8830"/> <source>Normal</source> <translation>Normal</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8386"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9180"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8831"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9622"/> <source>Type: </source> <translation>Type : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8412"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8857"/> <source>This wallet is multisig and cannot sign</source> <translation>C'est un portefeuille multisig et il ne peut pas signer</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8461"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8906"/> <source>Bad signature from </source> <translation>Mauvaise signature de </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8465"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8910"/> <source>Good signature from </source> <translation>Bonne signature de </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8484"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8929"/> <source>wallet is watch-only and cannot export key images</source> <translation>c'est un portefeuille d'audit et il ne peut pas exporter les images de clé</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1228"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8498"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8651"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1252"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8943"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9091"/> <source>failed to save file </source> <translation>échec de l'enregistrement du fichier </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8509"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8954"/> <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="8662"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9102"/> <source>Outputs exported to </source> <translation>Sorties exportées vers </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5354"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6417"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7115"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7600"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7608"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5752"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6805"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7515"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8004"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8012"/> <source>amount is wrong: </source> <translation>montant erroné : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5355"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6417"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5753"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6805"/> <source>expected number from 0 to </source> <translation>attend un nombre de 0 à </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5721"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6122"/> <source>Sweeping </source> <translation>Balayage de </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6350"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6738"/> <source>Money successfully sent, transaction: </source> <translation>Fonds envoyés avec succès, transaction : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6530"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6933"/> <source>Change goes to more than one address</source> <translation>La monnaie rendue va à plus d'une adresse</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6974"/> <source>%s change to %s</source> <translation>%s de monnaie rendue à %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6574"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6977"/> <source>no change</source> <translation>sans monnaie rendue</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1435"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1448"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6646"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1459"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1472"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7049"/> <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="6713"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6749"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6811"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6860"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6942"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7027"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7062"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8267"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8295"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8714"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7116"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7154"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7211"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7260"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7342"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7427"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7462"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8711"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8739"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9154"/> <source>failed to parse txid</source> <translation>échec de l'analyse de l'ID de transaction</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6727"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7132"/> <source>Tx key: </source> <translation>Clé de transaction : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6732"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7137"/> <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="6829"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7041"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7229"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7441"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7530"/> <source>signature file saved to: </source> <translation>fichier signature sauvegardé dans : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6831"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7043"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7132"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7231"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7443"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7532"/> <source>failed to save signature file</source> <translation>échec de la sauvegarde du fichier signature</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6868"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6877"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7268"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7277"/> <source>failed to parse tx key</source> <translation>échec de l'analyse de la clé de transaction</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6835"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6923"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7001"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7235"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7323"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7401"/> <source>error: </source> <translation>erreur : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6899"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6972"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7299"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7372"/> <source>received</source> <translation>a reçu</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6899"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6972"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7299"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7372"/> <source>in txid</source> <translation>dans la transaction</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6918"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6991"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7318"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7391"/> <source>received nothing in txid</source> <translation>n'a rien reçu dans la transaction</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6902"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6975"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7375"/> <source>WARNING: this transaction is not yet included in the blockchain!</source> <translation>ATTENTION : cette transaction n'est pas encore inclue dans la chaîne de blocs !</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6908"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6981"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7308"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7381"/> <source>This transaction has %u confirmations</source> <translation>Cette transaction a %u confirmations</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6912"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6985"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7312"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7385"/> <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="7266"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7666"/> <source>bad min_height parameter:</source> <translation>mauvais paramètre hauteur_minimum :</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7278"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7678"/> <source>bad max_height parameter:</source> <translation>mauvais paramètre hauteur_maximum :</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7296"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7696"/> <source>in</source> <translation>reçu</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7615"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8019"/> <source><min_amount> should be smaller than <max_amount></source> <translation><montant_minimum> doit être inférieur à <montant_maximum></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7647"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8051"/> <source> Amount: </source> <translation> Montant : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7647"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8051"/> <source>, number of keys: </source> <translation>, nombre de clés : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7652"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8056"/> <source> </source> <translation> </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7657"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8061"/> <source> Min block height: </source> <translation> Hauteur de bloc minimum : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7658"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8062"/> <source> Max block height: </source> <translation> Hauteur de bloc maximum : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7659"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8063"/> <source> Min amount found: </source> <translation> Montant minimum trouvé : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7660"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8064"/> <source> Max amount found: </source> <translation> Montant maximum trouvé : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7661"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8065"/> <source> Total count: </source> <translation> Compte total : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7701"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8105"/> <source> Bin size: </source> <translation> Taille de classe : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7702"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8106"/> <source> Outputs per *: </source> <translation> Sorties par * : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7704"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8108"/> <source>count ^ </source> @@ -4499,52 +4725,52 @@ Sorties par * : </translation> </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7706"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8110"/> <source> |</source> <translation> |</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7708"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8112"/> <source> +</source> <translation> +</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7708"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8112"/> <source>+--> block height </source> <translation>+--> hauteur de bloc </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8113"/> <source> ^</source> <translation> ^</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8113"/> <source>^ </source> <translation>^ </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7710"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8114"/> <source> </source> <translation> </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7797"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8240"/> <source>wallet</source> <translation>portefeuille</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="870"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8144"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="893"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8587"/> <source>Random payment ID: </source> <translation>ID de paiement aléatoire : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8145"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8588"/> <source>Matching integrated address: </source> <translation>Adresse intégrée correspondante : </translation> </message> @@ -4796,243 +5022,233 @@ Use "mms note" to display the waiting notes</source> <context> <name>sw</name> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="125"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="135"/> <source>Generate new wallet and save it to <arg></source> <translation>Générer un nouveau portefeuille et le sauvegarder dans <arg></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="126"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="136"/> <source>Generate new wallet from device and save it to <arg></source> <translation>Générer un nouveau portefeuille à partir de l'appareil et le sauvegarder dans <arg></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="127"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="137"/> <source>Generate incoming-only wallet from view key</source> <translation>Générer un portefeuille d'audit à partir d'une clé d'audit</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="128"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="138"/> <source>Generate deterministic wallet from spend key</source> <translation>Générer un portefeuille déterministe à partir d'une clé de dépense</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="129"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="139"/> <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="130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="140"/> <source>Generate a master wallet from multisig wallet keys</source> <translation>Générer un portefeuille principal à partir de clés de portefeuille multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="132"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="142"/> <source>Language for mnemonic</source> <translation>Langue de la phrase mnémonique</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="133"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="143"/> <source>Specify Electrum seed for wallet recovery/creation</source> <translation>Spécifier la phrase mnémonique Electrum pour la récupération/création d'un portefeuille</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="134"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="144"/> <source>Recover wallet using Electrum-style mnemonic seed</source> <translation>Récupérer un portefeuille en utilisant une phrase mnémonique de style Electrum</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="135"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="145"/> <source>Recover multisig wallet using Electrum-style mnemonic seed</source> <translation>Récupérer un portefeuille multisig en utilisant une phrase mnémonique de style Electrum</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="136"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="146"/> <source>Generate non-deterministic view and spend keys</source> <translation>Générer des clés d'audit et de dépense non déterministes</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="361"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="149"/> + <source>Restore from estimated blockchain height on specified date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="382"/> <source>invalid argument: must be either 0/1, true/false, y/n, yes/no</source> <translation>argument invalide : doit être soit 0/1, true/false, y/n, yes/no</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="417"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="438"/> <source>DNSSEC validation passed</source> <translation>Validation DNSSEC réussie</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="421"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="442"/> <source>WARNING: DNSSEC validation was unsuccessful, this address may not be correct!</source> <translation>ATTENTION: la validation DNSSEC a échoué, cette adresse n'est peut être pas correcte !</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="424"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="445"/> <source>For URL: </source> <translation>Pour l'URL : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="426"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="447"/> <source> Monero Address = </source> <translation> Adresse Monero = </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="428"/> - <source>Is this OK? (Y/n) </source> - <translation>Est-ce correct ? (Y/n) </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="438"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="459"/> <source>you have cancelled the transfer request</source> <translation>vous avez annulé la demande de transfert</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="459"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="480"/> <source>failed to parse index: </source> <translation>échec de l'analyse de l'index : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="472"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="493"/> <source>invalid format for subaddress lookahead; must be <major>:<minor></source> <translation>format invalide pour l'anticipation des sous-addresses; doit être <majeur>:<mineur></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="489"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="510"/> <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="494"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="515"/> <source>RPC error: </source> <translation>Erreur RPC : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="498"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="519"/> <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="505"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="513"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="526"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="534"/> <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="523"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="544"/> <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>Impossible de trouver une façon de créer les transactions. Ceci est souvent dû à de la poussière si petite qu'elle ne peut pas payer ses propres frais, ou à une tentative d'envoi d'un montant supérieur au solde débloqué, ou à un montant restant insuffisant pour payer les frais</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="529"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="550"/> <source>not enough outputs for specified ring size</source> <translation>pas assez de sorties pour la taille de cercle spécifiée</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="532"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="553"/> <source>output amount</source> <translation>montant de la sortie</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="532"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="553"/> <source>found outputs to use</source> <translation>sorties à utiliser trouvées</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="534"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="555"/> <source>Please use sweep_unmixable.</source> <translation>Veuillez utiliser sweep_unmixable.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="538"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="559"/> <source>transaction was not constructed</source> <translation>la transaction n'a pas été construite</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="543"/> - <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="546"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="567"/> <source>Reason: </source> <translation>Raison : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="555"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="576"/> <source>one of destinations is zero</source> <translation>une des destinations est zéro</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="560"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="581"/> <source>failed to find a suitable way to split transactions</source> <translation>échec de la recherche d'une façon adéquate de scinder les transactions</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="566"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="587"/> <source>unknown transfer error: </source> <translation>erreur de transfert inconnue : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="592"/> <source>Multisig error: </source> <translation>Erreur multisig : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="577"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="598"/> <source>internal error: </source> <translation>erreur interne : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="582"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="603"/> <source>unexpected error: </source> <translation>erreur inattendue : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="586"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="607"/> <source>There was an error, which could mean the node may be trying to get you to retry creating a transaction, and zero in on which outputs you own. Or it could be a bona fide error. It may be prudent to disconnect from this node, and not try to send a transaction immediately. Alternatively, connect to another node so the original node cannot correlate information.</source> <translation>Il y a eu une erreur, ce qui pourrait signifier que le noeud essaye de vous faire réessayer de créer une transaction, pour tenter d'identifier quelles sorties sont les votres. Ou il pourrait s'agir d'une erreur de bonne foi. Il pourrait être prudent de se déconnecter de ce noeud, et de ne pas essayer d'envoyer une transaction immédiatement. Ou sinon, se connecter à un autre noeud pour que le noeud original ne puisse pas corréler les informations.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="596"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="617"/> <source>File %s likely stores wallet private keys! Use a different file name.</source> <translation>Le fichier %s contient probablement des clés privées de portefeuille ! Utilisez un nom de fichier différent.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="599"/> - <source>File %s already exists. Are you sure to overwrite it? (Y/Yes/N/No): </source> - <translation>Le fichier %s existe déjà. Êtes vous sûr de vouloir l'écraser ? (Y/Yes/N/No) : </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7195"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7595"/> <source> seconds</source> <translation> secondes</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7197"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7597"/> <source> minutes</source> <translation> minutes</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7199"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7599"/> <source> hours</source> <translation> heures</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7601"/> <source> days</source> <translation> jours</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7203"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7603"/> <source> months</source> <translation> mois</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7204"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7604"/> <source>a long time</source> <translation>longtemps</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8940"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9382"/> <source>This is the command line monero wallet. It needs to connect to a monero daemon to work correctly. WARNING: Do not reuse your Monero keys on another fork, UNLESS this fork has key reuse mitigations built in. Doing so will harm your privacy.</source> @@ -5041,68 +5257,88 @@ Il a besoin de se connecter à un démon monero pour fonctionner correctement. ATTENTION : Ne réutilisez pas vos clés Monero avec un autre fork, À MOINS QUE ce fork inclue des mitigations contre la réutilisation des clés. Faire ceci nuira à votre confidentialité.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8965"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9407"/> <source>Unknown command: </source> <translation>Commande inconnue : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="137"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="147"/> <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="138"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="148"/> <source>Restore from specific blockchain height</source> <translation>Restaurer à partir d'une hauteur de bloc spécifique</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="139"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="150"/> <source>The newly created transaction will not be relayed to the monero network</source> <translation>La transaction nouvellement créée ne sera pas transmise au réseau monero</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="140"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="151"/> <source>Create an address file for new wallets</source> <translation>Créer un fichier d'adresse pour les nouveaux portefeuilles</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="142"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="153"/> <source>Display English language names</source> <translation>Afficher les noms de langue en anglais</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="276"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="154"/> + <source>Support obsolete long (unencrypted) payment ids (using them harms your privacy)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="297"/> <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="283"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="304"/> <source>Enter a new password for the wallet</source> <translation>Entrer un nouveau mot de passe pour le portefeuille</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="283"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="304"/> <source>Wallet password</source> <translation>Mot de passe du portefeuille</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="293"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="485"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="314"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="506"/> <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="302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="323"/> <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="319"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="340"/> <source>Error: </source> <translation>Erreur : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8959"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="449"/> + <source>Is this OK?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="564"/> + <source>transaction %s was rejected by daemon</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="620"/> + <source>File %s already exists. Are you sure to overwrite it?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="9401"/> <source>Failed to initialize wallet</source> <translation>Échec de l'initialisation du portefeuille</translation> </message> @@ -5110,360 +5346,448 @@ ATTENTION : Ne réutilisez pas vos clés Monero avec un autre fork, À MOINS QUE <context> <name>tools::wallet2</name> <message> - <location filename="../src/wallet/wallet2.cpp" line="201"/> + <location filename="../src/wallet/wallet2.cpp" line="234"/> <source>Use daemon instance at <host>:<port></source> <translation>Utiliser l'instance de démon située à <hôte>:<port></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="202"/> + <location filename="../src/wallet/wallet2.cpp" line="235"/> <source>Use daemon instance at host <arg> instead of localhost</source> <translation>Utiliser l'instance de démon située à l'hôte <arg> au lieu de localhost</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="206"/> + <location filename="../src/wallet/wallet2.cpp" line="240"/> <source>Wallet password file</source> <translation>Fichier mot de passe du portefeuille</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="207"/> + <location filename="../src/wallet/wallet2.cpp" line="241"/> <source>Use daemon instance at port <arg> instead of 18081</source> <translation>Utiliser l'instance de démon située au port <arg> au lieu de 18081</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="209"/> + <location filename="../src/wallet/wallet2.cpp" line="250"/> <source>For testnet. Daemon must also be launched with --testnet flag</source> <translation>Pour testnet, le démon doit aussi être lancé avec l'option --testnet</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="282"/> + <location filename="../src/wallet/wallet2.cpp" line="361"/> <source>can't specify daemon host or port more than once</source> <translation>impossible de spécifier l'hôte ou le port du démon plus d'une fois</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="355"/> + <location filename="../src/wallet/wallet2.cpp" line="480"/> <source>can't specify more than one of --password and --password-file</source> <translation>impossible de spécifier plus d'une option parmis --password et --password-file</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="368"/> + <location filename="../src/wallet/wallet2.cpp" line="493"/> <source>the password file specified could not be read</source> <translation>le fichier mot de passe spécifié n'a pas pu être lu</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="394"/> + <location filename="../src/wallet/wallet2.cpp" line="519"/> <source>Failed to load file </source> <translation>Échec du chargement du fichier </translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="205"/> + <location filename="../src/wallet/wallet2.cpp" line="239"/> <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="203"/> + <location filename="../src/wallet/wallet2.cpp" line="236"/> + <source>[<ip>:]<port> socks proxy to use for daemon connections</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="237"/> <source>Enable commands which rely on a trusted daemon</source> <translation>Activer les commandes qui dépendent d'un démon de confiance</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="204"/> + <location filename="../src/wallet/wallet2.cpp" line="238"/> <source>Disable commands which rely on a trusted daemon</source> <translation>Désactiver les commandes qui dépendent d'un démon de confiance</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="208"/> + <location filename="../src/wallet/wallet2.cpp" line="242"/> <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="210"/> + <location filename="../src/wallet/wallet2.cpp" line="243"/> + <source>Enable SSL on daemon RPC connections: enabled|disabled|autodetect</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="247"/> + <source>List of valid fingerprints of allowed RPC servers</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="248"/> + <source>Allow any SSL certificate from the daemon</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="249"/> + <source>Allow user (via --daemon-ssl-ca-certificates) chain certificates</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="251"/> <source>For stagenet. Daemon must also be launched with --stagenet flag</source> <translation>Pour stagenet, le démon doit aussi être lancé avec l'option --stagenet</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="212"/> + <location filename="../src/wallet/wallet2.cpp" line="253"/> <source>Set shared ring database path</source> <translation>Définir le chemin de la base de donnée de cercles partagés</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="223"/> + <location filename="../src/wallet/wallet2.cpp" line="264"/> <source>Number of rounds for the key derivation function</source> <translation>Nombre de rondes de la fonction de dérivation de clé</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="224"/> + <location filename="../src/wallet/wallet2.cpp" line="265"/> <source>HW device to use</source> <translation>Portefeuille matériel à utiliser</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="225"/> + <location filename="../src/wallet/wallet2.cpp" line="266"/> <source>HW device wallet derivation path (e.g., SLIP-10)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="313"/> + <location filename="../src/wallet/wallet2.cpp" line="268"/> + <source>Do not use DNS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="269"/> + <source>Do not connect to a daemon, nor use DNS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="353"/> + <source>Invalid argument for </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="397"/> + <source>Enabling --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="397"/> + <source> requires --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="398"/> + <source> or --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="398"/> + <source> or use of a .onion/.i2p domain</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="432"/> <source>--trusted-daemon and --untrusted-daemon are both seen, assuming untrusted</source> <translation>--trusted-daemon et --untrusted-daemon présents simultanément, --untrusted-daemon choisi</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="323"/> + <location filename="../src/wallet/wallet2.cpp" line="442"/> <source>Daemon is local, assuming trusted</source> <translation>Le démon est local, supposons qu'il est de confiance</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="375"/> + <location filename="../src/wallet/wallet2.cpp" line="500"/> <source>no password specified; use --prompt-for-password to prompt for a password</source> <translation>pas de mot de passe spécifié; utilisez --prompt-for-password pour demander un mot de passe</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="377"/> + <location filename="../src/wallet/wallet2.cpp" line="502"/> <source>Enter a new password for the wallet</source> <translation>Entrer un nouveau mot de passe pour le portefeuille</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="377"/> + <location filename="../src/wallet/wallet2.cpp" line="502"/> <source>Wallet password</source> <translation>Mot de passe du portefeuille</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="400"/> + <location filename="../src/wallet/wallet2.cpp" line="525"/> <source>Failed to parse JSON</source> <translation>Échec de l'analyse JSON</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="407"/> + <location filename="../src/wallet/wallet2.cpp" line="532"/> <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="423"/> + <location filename="../src/wallet/wallet2.cpp" line="548"/> <source>failed to parse view key secret key</source> <translation>échec de l'analyse de la clé secrète d'audit</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="428"/> - <location filename="../src/wallet/wallet2.cpp" line="496"/> - <location filename="../src/wallet/wallet2.cpp" line="539"/> + <location filename="../src/wallet/wallet2.cpp" line="553"/> + <location filename="../src/wallet/wallet2.cpp" line="621"/> + <location filename="../src/wallet/wallet2.cpp" line="666"/> <source>failed to verify view key secret key</source> <translation>échec de la vérification de la clé secrète d'audit</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="439"/> + <location filename="../src/wallet/wallet2.cpp" line="564"/> <source>failed to parse spend key secret key</source> <translation>échec de l'analyse de la clé secrète de dépense</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="444"/> - <location filename="../src/wallet/wallet2.cpp" line="506"/> - <location filename="../src/wallet/wallet2.cpp" line="565"/> + <location filename="../src/wallet/wallet2.cpp" line="569"/> + <location filename="../src/wallet/wallet2.cpp" line="631"/> + <location filename="../src/wallet/wallet2.cpp" line="692"/> <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="456"/> + <location filename="../src/wallet/wallet2.cpp" line="581"/> <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="476"/> + <location filename="../src/wallet/wallet2.cpp" line="601"/> <source>At least one of either an Electrum-style word list, private view key, or private spend key must be specified</source> <translation>Il faut spécifier au moins une des options parmis la liste de mots de style Electrum, la clé privée d'audit et la clé privée de dépense</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="480"/> + <location filename="../src/wallet/wallet2.cpp" line="605"/> <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="490"/> + <location filename="../src/wallet/wallet2.cpp" line="615"/> <source>invalid address</source> <translation>adresse invalide</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="499"/> + <location filename="../src/wallet/wallet2.cpp" line="624"/> <source>view key does not match standard address</source> <translation>la clé d'audit ne correspond pas à l'adresse standard</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="509"/> + <location filename="../src/wallet/wallet2.cpp" line="634"/> <source>spend key does not match standard address</source> <translation>la clé de dépense ne correspond pas à l'adresse standard</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="517"/> + <location filename="../src/wallet/wallet2.cpp" line="642"/> <source>Cannot generate deprecated wallets from JSON</source> <translation>Impossible de générer un portefeuille obsolète à partir de JSON</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="551"/> + <location filename="../src/wallet/wallet2.cpp" line="678"/> <source>failed to parse address: </source> <translation>échec de l'analyse de l'adresse : </translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="557"/> + <location filename="../src/wallet/wallet2.cpp" line="684"/> <source>Address must be specified in order to create watch-only wallet</source> <translation>L'adresse doit être spécifiée afin de créer un portefeuille d'audit</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="574"/> + <location filename="../src/wallet/wallet2.cpp" line="701"/> <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="1382"/> + <location filename="../src/wallet/wallet2.cpp" line="1625"/> <source>Password is needed to compute key image for incoming monero</source> <translation>Le mot de passe est requis pour calculer l'image de clé pour les moneros entrants</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="1383"/> + <location filename="../src/wallet/wallet2.cpp" line="1626"/> <source>Invalid password: password is needed to compute key image for incoming monero</source> <translation>Mot de passe invalide : le mot de passe est requis pour calculer l'image de clé pour les moneros entrants</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="3770"/> - <location filename="../src/wallet/wallet2.cpp" line="4374"/> - <location filename="../src/wallet/wallet2.cpp" line="4926"/> + <location filename="../src/wallet/wallet2.cpp" line="4122"/> + <location filename="../src/wallet/wallet2.cpp" line="4712"/> + <location filename="../src/wallet/wallet2.cpp" line="5308"/> <source>Primary account</source> <translation>Compte primaire</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="10157"/> + <location filename="../src/wallet/wallet2.cpp" line="10885"/> <source>No funds received in this tx.</source> <translation>Aucun fonds n'a été reçu dans cette transaction.</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="10899"/> + <location filename="../src/wallet/wallet2.cpp" line="11645"/> <source>failed to read file </source> <translation>échec de la lecture du fichier </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="141"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="152"/> <source>Set subaddress lookahead sizes to <major>:<minor></source> <translation>Définir les tailles d'anticipation des sous-addresses à <majeur>:<mineur></translation> </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="68"/> + <source>Enable SSL on wallet RPC connections: enabled|disabled|autodetect</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="69"/> + <location filename="../src/wallet/wallet2.cpp" line="244"/> + <source>Path to a PEM format private key</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="70"/> + <location filename="../src/wallet/wallet2.cpp" line="245"/> + <source>Path to a PEM format certificate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="71"/> + <location filename="../src/wallet/wallet2.cpp" line="246"/> + <source>Path to file containing concatenated PEM format certificate(s) to replace system CA(s).</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="72"/> + <source>List of certificate fingerprints to allow</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>tools::wallet_rpc_server</name> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="180"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="192"/> <source>Failed to create directory </source> <translation>Échec de la création du répertoire </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="182"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="194"/> <source>Failed to create directory %s: %s</source> <translation>Échec de la création du répertoire %s : %s</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="193"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="205"/> <source>Cannot specify --</source> <translation>Impossible de spécifier --</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="193"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="205"/> <source> and --</source> <translation> et --</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="212"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="224"/> <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="212"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="224"/> <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="222"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="234"/> <source>Error writing to file </source> <translation>Erreur d'écriture dans le fichier </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="225"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="237"/> <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="479"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="613"/> <source>Tag %s is unregistered.</source> <translation>Le mot clé %s n'est pas enregistré.</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3081"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="3242"/> <source>Transaction not possible. Available only %s, transaction amount %s = %s + %s (fee)</source> <translation>Transaction impossible. Solde disponible : %s, montant de la transaction %s = %s + %s (frais)</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3947"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4409"/> <source>This is the RPC monero wallet. It needs to connect to a monero daemon to work correctly.</source> <translation>Ceci est le portefeuille monero par RPC. Il a besoin de se connecter à un démon monero pour fonctionner correctement.</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3788"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4245"/> <source>Can't specify more than one of --wallet-file and --generate-from-json</source> <translation>Impossible de spécifier plus d'une option parmis --wallet-file et --generate-from-json</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3773"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4230"/> <source>Can't specify more than one of --testnet and --stagenet</source> <translation>Impossible de spécifier plus d'une option parmis --testnet et --stagenet</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3800"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4257"/> <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="3804"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4261"/> <source>Loading wallet...</source> <translation>Chargement du portefeuille...</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3838"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3870"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4295"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4327"/> <source>Saving wallet...</source> <translation>Sauvegarde du portefeuille...</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3840"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3872"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4297"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4329"/> <source>Successfully saved</source> <translation>Sauvegardé avec succès</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3843"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4300"/> <source>Successfully loaded</source> <translation>Chargé avec succès</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3847"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4304"/> <source>Wallet initialization failed: </source> <translation>Échec de l'initialisation du portefeuille : </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3853"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4310"/> <source>Failed to initialize wallet RPC server</source> <translation>Échec de l'initialisation du serveur RPC du portefeuille</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3857"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4314"/> <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="3864"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4321"/> <source>Failed to run wallet: </source> <translation>Échec du lancement du portefeuille : </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3867"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4324"/> <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="3876"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4333"/> <source>Failed to save wallet: </source> <translation>Échec de la sauvegarde du portefeuille : </translation> </message> @@ -5472,8 +5796,8 @@ connecter à un démon monero pour fonctionner correctement.</translation> <name>wallet_args</name> <message> <location filename="../src/gen_multisig/gen_multisig.cpp" line="168"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8908"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3928"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4385"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9348"/> <source>Wallet options</source> <translation>Options du portefeuille</translation> </message> diff --git a/translations/monero_it.ts b/translations/monero_it.ts index 18b43e6d7..d9d946cc1 100644 --- a/translations/monero_it.ts +++ b/translations/monero_it.ts @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> -<TS version="2.0" language="it" sourcelanguage="en"> +<TS version="2.1" language="it" sourcelanguage="en"> <context> <name>Monero::AddressBookImpl</name> <message> @@ -37,44 +37,44 @@ <translation>Impossibile scrivere transazione/i su file</translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="121"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="138"/> <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="124"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="141"/> <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="128"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="145"/> <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="133"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="150"/> <source>. Reason: </source> <translation>. Motivo: </translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="135"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="152"/> <source>Unknown exception: </source> <translation>Eccezione sconosciuta: </translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="138"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="155"/> <source>Unhandled exception</source> <translation>Eccezione non gestita</translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="211"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="228"/> <source>Couldn't multisig sign data: </source> - <translation type="unfinished"></translation> + <translation>Impossibile firmare dati multifirma: </translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="233"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="250"/> <source>Couldn't sign multisig transaction: </source> - <translation type="unfinished"></translation> + <translation>Impossibile firmare la transazione multifirma: </translation> </message> </context> <context> @@ -134,407 +134,407 @@ <context> <name>Monero::WalletImpl</name> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1383"/> + <location filename="../src/wallet/api/wallet.cpp" line="1459"/> <source>payment id has invalid format, expected 16 or 64 character hex string: </source> <translation>L'id pagamento è in un formato invalido, dovrebbe essere una stringa esadecimale di 16 o 64 caratteri: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1392"/> + <location filename="../src/wallet/api/wallet.cpp" line="1468"/> <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="1428"/> <location filename="../src/wallet/api/wallet.cpp" line="1510"/> + <location filename="../src/wallet/api/wallet.cpp" line="1592"/> <source>daemon is busy. Please try again later.</source> <translation>il daemon è impegnato. Riprova più tardi.</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1430"/> <location filename="../src/wallet/api/wallet.cpp" line="1512"/> + <location filename="../src/wallet/api/wallet.cpp" line="1594"/> <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="1432"/> <location filename="../src/wallet/api/wallet.cpp" line="1514"/> + <location filename="../src/wallet/api/wallet.cpp" line="1596"/> <source>RPC error: </source> <translation>errore RPC: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1460"/> - <location filename="../src/wallet/api/wallet.cpp" line="1545"/> + <location filename="../src/wallet/api/wallet.cpp" line="1542"/> + <location filename="../src/wallet/api/wallet.cpp" line="1627"/> <source>not enough outputs for specified ring size</source> <translation>insufficiente numero di output per il ring size specificato</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1462"/> - <location filename="../src/wallet/api/wallet.cpp" line="1547"/> + <location filename="../src/wallet/api/wallet.cpp" line="1544"/> + <location filename="../src/wallet/api/wallet.cpp" line="1629"/> <source>found outputs to use</source> <translation>trovati output che possono essere usati</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1464"/> + <location filename="../src/wallet/api/wallet.cpp" line="1546"/> <source>Please sweep unmixable outputs.</source> <translation>Pulisci gli output non mixabili.</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1438"/> - <location filename="../src/wallet/api/wallet.cpp" line="1521"/> + <location filename="../src/wallet/api/wallet.cpp" line="1520"/> + <location filename="../src/wallet/api/wallet.cpp" line="1603"/> <source>not enough money to transfer, available only %s, sent amount %s</source> <translation>non hai abbastanza fondi da trasferire, sono disponibili solo %s, ammontare inviato %s</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="541"/> + <location filename="../src/wallet/api/wallet.cpp" line="589"/> <source>failed to parse address</source> <translation>parsing indirizzo fallito</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="552"/> + <location filename="../src/wallet/api/wallet.cpp" line="600"/> <source>failed to parse secret spend key</source> <translation>impossibile effettuare il parsing della chiave segreta di spesa</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="575"/> + <location filename="../src/wallet/api/wallet.cpp" line="623"/> <source>failed to parse secret view key</source> <translation>impossibile effettuare il parsing della chiave segreta di visualizzazione</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="584"/> + <location filename="../src/wallet/api/wallet.cpp" line="632"/> <source>failed to verify secret spend key</source> <translation>impossibile verificare la chiave segreta di spesa</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="588"/> + <location filename="../src/wallet/api/wallet.cpp" line="636"/> <source>spend key does not match address</source> <translation>la chiave di spesa non corrisponde all'indirizzo</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="594"/> + <location filename="../src/wallet/api/wallet.cpp" line="642"/> <source>failed to verify secret view key</source> <translation>verifica chiave segreta di visualizzazione fallita</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="598"/> + <location filename="../src/wallet/api/wallet.cpp" line="646"/> <source>view key does not match address</source> <translation>la chiave di visualizzazione non corrisponde all'indirizzo</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="621"/> - <location filename="../src/wallet/api/wallet.cpp" line="638"/> + <location filename="../src/wallet/api/wallet.cpp" line="669"/> + <location filename="../src/wallet/api/wallet.cpp" line="686"/> <source>failed to generate new wallet: </source> <translation>impossibile generare il nuovo portafoglio: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="885"/> + <location filename="../src/wallet/api/wallet.cpp" line="955"/> <source>Failed to send import wallet request</source> <translation>Impossibile inviare la richiesta di importazione portafoglio</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1049"/> + <location filename="../src/wallet/api/wallet.cpp" line="1125"/> <source>Failed to load unsigned transactions</source> <translation>Impossibile caricare transazioni non firmate</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1068"/> + <location filename="../src/wallet/api/wallet.cpp" line="1144"/> <source>Failed to load transaction from file</source> <translation>Impossibile caricare la transazione da file</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1084"/> + <location filename="../src/wallet/api/wallet.cpp" line="1160"/> <source>Wallet is view only</source> <translation>Il portafoglio è di tipo solo visualizzazione</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1092"/> + <location filename="../src/wallet/api/wallet.cpp" line="1168"/> <source>failed to save file </source> <translation>impossibile salvare il file </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1108"/> + <location filename="../src/wallet/api/wallet.cpp" line="1184"/> <source>Key images can only be imported with a trusted daemon</source> <translation>Le key image possono essere importate solo con un daemon fidato</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1121"/> + <location filename="../src/wallet/api/wallet.cpp" line="1197"/> <source>Failed to import key images: </source> <translation>Impossibile importare le key images: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1153"/> + <location filename="../src/wallet/api/wallet.cpp" line="1229"/> <source>Failed to get subaddress label: </source> <translation>Impossibile recuperare l'etichetta del sottoindirizzo: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1166"/> + <location filename="../src/wallet/api/wallet.cpp" line="1242"/> <source>Failed to set subaddress label: </source> <translation>Impossibile assegnare l'etichetta del sottoindirizzo: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="567"/> + <location filename="../src/wallet/api/wallet.cpp" line="615"/> <source>Neither view key nor spend key supplied, cancelled</source> - <translation type="unfinished"></translation> + <translation>Nessuna chiave di visualizzazione né chiave di spesa fornita, operazione annullata</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="686"/> + <location filename="../src/wallet/api/wallet.cpp" line="734"/> <source>Electrum seed is empty</source> - <translation type="unfinished"></translation> + <translation>Il seed Electrum è vuoto</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="695"/> + <location filename="../src/wallet/api/wallet.cpp" line="743"/> <source>Electrum-style word list failed verification</source> - <translation type="unfinished"></translation> + <translation>Verifica dell'elenco parole in stile Electrum non riuscita</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1183"/> + <location filename="../src/wallet/api/wallet.cpp" line="1259"/> <source>Failed to get multisig info: </source> - <translation type="unfinished"></translation> + <translation>Impossibile ottenere informazioni multifirma: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1200"/> - <location filename="../src/wallet/api/wallet.cpp" line="1214"/> + <location filename="../src/wallet/api/wallet.cpp" line="1276"/> + <location filename="../src/wallet/api/wallet.cpp" line="1290"/> <source>Failed to make multisig: </source> - <translation type="unfinished"></translation> + <translation>Impossibile eseguire multifirma: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1229"/> + <location filename="../src/wallet/api/wallet.cpp" line="1305"/> <source>Failed to finalize multisig wallet creation</source> - <translation type="unfinished"></translation> + <translation>Impossibile finalizzare la creazione di un portafoglio multifirma</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1232"/> + <location filename="../src/wallet/api/wallet.cpp" line="1308"/> <source>Failed to finalize multisig wallet creation: </source> - <translation type="unfinished"></translation> + <translation>Impossibile finalizzare la creazione di un portafoglio multifirma: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1248"/> + <location filename="../src/wallet/api/wallet.cpp" line="1324"/> <source>Failed to export multisig images: </source> - <translation type="unfinished"></translation> + <translation>Impossibile esportare immagini multifirma: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1266"/> + <location filename="../src/wallet/api/wallet.cpp" line="1342"/> <source>Failed to parse imported multisig images</source> - <translation type="unfinished"></translation> + <translation>Impossibile analizzare le immagini multifirma importate</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1276"/> + <location filename="../src/wallet/api/wallet.cpp" line="1352"/> <source>Failed to import multisig images: </source> - <translation type="unfinished"></translation> + <translation>Impossibile importare immagini multifirma: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1290"/> + <location filename="../src/wallet/api/wallet.cpp" line="1366"/> <source>Failed to check for partial multisig key images: </source> - <translation type="unfinished"></translation> + <translation>Impossibile controllare le immagini della chiave multifirma parziali: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1318"/> + <location filename="../src/wallet/api/wallet.cpp" line="1394"/> <source>Failed to restore multisig transaction: </source> - <translation type="unfinished"></translation> + <translation>Impossibile ripristinare la transazione multifirma: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1358"/> + <location filename="../src/wallet/api/wallet.cpp" line="1434"/> <source>Invalid destination address</source> - <translation type="unfinished">Indirizzo destinatario non valido</translation> + <translation>Indirizzo destinatario non valido</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1434"/> + <location filename="../src/wallet/api/wallet.cpp" line="1516"/> <source>failed to get outputs to mix: %s</source> - <translation type="unfinished"></translation> + <translation>impossibile ottenere gli output da mixare: %s</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1445"/> - <location filename="../src/wallet/api/wallet.cpp" line="1529"/> + <location filename="../src/wallet/api/wallet.cpp" line="1527"/> + <location filename="../src/wallet/api/wallet.cpp" line="1611"/> <source>not enough money to transfer, overall balance only %s, sent amount %s</source> <translation>fondi non sufficienti per il trasferimento, saldo totale %s, importo inviato %s</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1452"/> - <location filename="../src/wallet/api/wallet.cpp" line="1537"/> + <location filename="../src/wallet/api/wallet.cpp" line="1534"/> + <location filename="../src/wallet/api/wallet.cpp" line="1619"/> <source>not enough money to transfer, available only %s, transaction amount %s = %s + %s (fee)</source> <translation>fondi non sufficienti per il trasferimento, disponibili solo %s, ammontare transazione %s = %s + %s (commissione)</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1462"/> - <location filename="../src/wallet/api/wallet.cpp" line="1547"/> + <location filename="../src/wallet/api/wallet.cpp" line="1544"/> + <location filename="../src/wallet/api/wallet.cpp" line="1629"/> <source>output amount</source> <translation>ammontare output</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1467"/> - <location filename="../src/wallet/api/wallet.cpp" line="1551"/> + <location filename="../src/wallet/api/wallet.cpp" line="1549"/> + <location filename="../src/wallet/api/wallet.cpp" line="1633"/> <source>transaction was not constructed</source> <translation>transazione non costruita</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1470"/> - <location filename="../src/wallet/api/wallet.cpp" line="1554"/> + <location filename="../src/wallet/api/wallet.cpp" line="1552"/> + <location filename="../src/wallet/api/wallet.cpp" line="1636"/> <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="1475"/> - <location filename="../src/wallet/api/wallet.cpp" line="1559"/> + <location filename="../src/wallet/api/wallet.cpp" line="1557"/> + <location filename="../src/wallet/api/wallet.cpp" line="1641"/> <source>one of destinations is zero</source> <translation>una delle destinazioni è zero</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1477"/> - <location filename="../src/wallet/api/wallet.cpp" line="1561"/> + <location filename="../src/wallet/api/wallet.cpp" line="1559"/> + <location filename="../src/wallet/api/wallet.cpp" line="1643"/> <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="1479"/> - <location filename="../src/wallet/api/wallet.cpp" line="1563"/> + <location filename="../src/wallet/api/wallet.cpp" line="1561"/> + <location filename="../src/wallet/api/wallet.cpp" line="1645"/> <source>unknown transfer error: </source> <translation>errore trasferimento sconosciuto: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1481"/> - <location filename="../src/wallet/api/wallet.cpp" line="1565"/> + <location filename="../src/wallet/api/wallet.cpp" line="1563"/> + <location filename="../src/wallet/api/wallet.cpp" line="1647"/> <source>internal error: </source> <translation>errore interno: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1483"/> - <location filename="../src/wallet/api/wallet.cpp" line="1567"/> + <location filename="../src/wallet/api/wallet.cpp" line="1565"/> + <location filename="../src/wallet/api/wallet.cpp" line="1649"/> <source>unexpected error: </source> <translation>errore inaspettato: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1485"/> - <location filename="../src/wallet/api/wallet.cpp" line="1569"/> + <location filename="../src/wallet/api/wallet.cpp" line="1567"/> + <location filename="../src/wallet/api/wallet.cpp" line="1651"/> <source>unknown error</source> <translation>errore sconosciuto</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1516"/> + <location filename="../src/wallet/api/wallet.cpp" line="1598"/> <source>failed to get outputs to mix</source> - <translation type="unfinished"></translation> + <translation>impossibile ottenere gli output da mixare</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1644"/> - <location filename="../src/wallet/api/wallet.cpp" line="1671"/> - <location filename="../src/wallet/api/wallet.cpp" line="1719"/> - <location filename="../src/wallet/api/wallet.cpp" line="1747"/> - <location filename="../src/wallet/api/wallet.cpp" line="1775"/> - <location filename="../src/wallet/api/wallet.cpp" line="1796"/> - <location filename="../src/wallet/api/wallet.cpp" line="2258"/> + <location filename="../src/wallet/api/wallet.cpp" line="1726"/> + <location filename="../src/wallet/api/wallet.cpp" line="1753"/> + <location filename="../src/wallet/api/wallet.cpp" line="1801"/> + <location filename="../src/wallet/api/wallet.cpp" line="1829"/> + <location filename="../src/wallet/api/wallet.cpp" line="1857"/> + <location filename="../src/wallet/api/wallet.cpp" line="1878"/> + <location filename="../src/wallet/api/wallet.cpp" line="2354"/> <source>Failed to parse txid</source> <translation>Impossibile effettuare parsing del txid</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1661"/> + <location filename="../src/wallet/api/wallet.cpp" line="1743"/> <source>no tx keys found for this txid</source> <translation>nessuna chiave tx trovata per questo txid</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1679"/> - <location filename="../src/wallet/api/wallet.cpp" line="1688"/> + <location filename="../src/wallet/api/wallet.cpp" line="1761"/> + <location filename="../src/wallet/api/wallet.cpp" line="1770"/> <source>Failed to parse tx key</source> <translation>Impossibile effettuare parsing della chiave tx</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1697"/> - <location filename="../src/wallet/api/wallet.cpp" line="1726"/> - <location filename="../src/wallet/api/wallet.cpp" line="1754"/> - <location filename="../src/wallet/api/wallet.cpp" line="1835"/> + <location filename="../src/wallet/api/wallet.cpp" line="1779"/> + <location filename="../src/wallet/api/wallet.cpp" line="1808"/> + <location filename="../src/wallet/api/wallet.cpp" line="1836"/> + <location filename="../src/wallet/api/wallet.cpp" line="1917"/> <source>Failed to parse address</source> <translation>Impossibile effettuare parsing dell'indirizzo</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1840"/> + <location filename="../src/wallet/api/wallet.cpp" line="1922"/> <source>Address must not be a subaddress</source> <translation>L'indirizzo non può essere un sottoindirizzo</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1880"/> + <location filename="../src/wallet/api/wallet.cpp" line="1962"/> <source>The wallet must be in multisig ready state</source> - <translation type="unfinished"></translation> + <translation>Il portafoglio deve essere in stato multifirma</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1902"/> + <location filename="../src/wallet/api/wallet.cpp" line="1984"/> <source>Given string is not a key</source> - <translation type="unfinished"></translation> + <translation>La stringa inserita non è una chiave</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2130"/> + <location filename="../src/wallet/api/wallet.cpp" line="2226"/> <source>Rescan spent can only be used with a trusted daemon</source> <translation>"Riscannerizza spesi" può essere utilizzato solo da un daemon fidato</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2179"/> + <location filename="../src/wallet/api/wallet.cpp" line="2275"/> <source>Invalid output: </source> - <translation type="unfinished"></translation> + <translation>Output non valido: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2186"/> + <location filename="../src/wallet/api/wallet.cpp" line="2282"/> <source>Failed to mark outputs as spent</source> - <translation type="unfinished"></translation> + <translation>Impossibile contrassegnare gli outputs come spesi</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2197"/> - <location filename="../src/wallet/api/wallet.cpp" line="2219"/> + <location filename="../src/wallet/api/wallet.cpp" line="2293"/> + <location filename="../src/wallet/api/wallet.cpp" line="2315"/> <source>Failed to parse output amount</source> - <translation type="unfinished"></translation> + <translation>Impossibile analizzare la quantità di output</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2202"/> - <location filename="../src/wallet/api/wallet.cpp" line="2224"/> + <location filename="../src/wallet/api/wallet.cpp" line="2298"/> + <location filename="../src/wallet/api/wallet.cpp" line="2320"/> <source>Failed to parse output offset</source> - <translation type="unfinished"></translation> + <translation>Impossibile analizzare l'offset di output</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2208"/> + <location filename="../src/wallet/api/wallet.cpp" line="2304"/> <source>Failed to mark output as spent</source> - <translation type="unfinished"></translation> + <translation>Impossibile contrassegnare l'output come speso</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2230"/> + <location filename="../src/wallet/api/wallet.cpp" line="2326"/> <source>Failed to mark output as unspent</source> - <translation type="unfinished"></translation> + <translation>Impossibile contrassegnare l'output come non speso</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2241"/> - <location filename="../src/wallet/api/wallet.cpp" line="2280"/> + <location filename="../src/wallet/api/wallet.cpp" line="2337"/> + <location filename="../src/wallet/api/wallet.cpp" line="2376"/> <source>Failed to parse key image</source> - <translation type="unfinished"></translation> + <translation>Impossibile analizzare l'immagine della chiave</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2247"/> + <location filename="../src/wallet/api/wallet.cpp" line="2343"/> <source>Failed to get ring</source> - <translation type="unfinished"></translation> + <translation>Impossibile ottenere l'anello</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2265"/> + <location filename="../src/wallet/api/wallet.cpp" line="2361"/> <source>Failed to get rings</source> - <translation type="unfinished"></translation> + <translation>Impossibile ottenere gli anelli</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2286"/> + <location filename="../src/wallet/api/wallet.cpp" line="2382"/> <source>Failed to set ring</source> - <translation type="unfinished"></translation> + <translation>Impossibile impostare l'anello</translation> </message> </context> <context> <name>Wallet</name> <message> - <location filename="../src/wallet/api/wallet.cpp" line="301"/> + <location filename="../src/wallet/api/wallet.cpp" line="344"/> <source>Failed to parse address</source> <translation>Impossibile effettuare parsing dell'indirizzo</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="308"/> + <location filename="../src/wallet/api/wallet.cpp" line="351"/> <source>Failed to parse key</source> <translation>Impossibile effettuare parsing della chiave</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="316"/> + <location filename="../src/wallet/api/wallet.cpp" line="359"/> <source>failed to verify key</source> <translation>impossibile effettuare la verifica della chiave</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="326"/> + <location filename="../src/wallet/api/wallet.cpp" line="369"/> <source>key does not match address</source> <translation>la chiave non corrisponde all'indirizzo</translation> </message> @@ -598,931 +598,996 @@ <message> <location filename="../src/rpc/rpc_args.cpp" line="111"/> <source> requires RPC server password --</source> - <translation type="unfinished"></translation> + <translation> richiede la password del server RPC --</translation> </message> </context> <context> <name>cryptonote::simple_wallet</name> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="645"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="666"/> <source>Commands: </source> <translation>Comandi: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4359"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4636"/> <source>failed to read wallet password</source> <translation>impossibile leggere la password del portafoglio</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3954"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4231"/> <source>invalid password</source> <translation>password non valida</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3073"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3283"/> <source>set seed: needs an argument. available options: language</source> <translation>imposta seed: richiede un argomento. opzioni disponibili: lingua</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3108"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3319"/> <source>set: unrecognized argument(s)</source> <translation>imposta: argomento/i non riconosciuto/i</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4199"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4476"/> <source>wallet file path not valid: </source> <translation>percorso file portafoglio non valido: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3178"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3389"/> <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="3059"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3269"/> <source>needs an argument</source> <translation>ha bisogno di un argomento</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3082"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3083"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3084"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3086"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3089"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3094"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3095"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3097"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3099"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3100"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3101"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3104"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3292"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3294"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3296"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3299"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3304"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3305"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3307"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3309"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3311"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3314"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3315"/> <source>0 or 1</source> <translation>0 o 1</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3092"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3096"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3103"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3306"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3313"/> <source>unsigned integer</source> <translation>intero senza segno</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3341"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3577"/> <source>specify a recovery parameter with the --electrum-seed="words list here"</source> <translation>specificare un parametro di ripristino con --electrum-seed="lista parole qui"</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3887"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4164"/> <source>wallet failed to connect to daemon: </source> <translation>impossibile connettere il portafoglio al daemon: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3895"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4172"/> <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="3916"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4193"/> <source>List of available languages for your wallet's seed:</source> <translation>Lista delle lingue disponibili per il seed del tuo portafoglio:</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3926"/> - <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="4000"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4277"/> <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 seed che ti abbiamo fornito.</translation> + <translation>Hai usato una versione obsoleta del portafoglio. Per favore usa il nuovo seed che ti abbiamo fornito. +</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4016"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4365"/> <source>Generated new wallet: </source> <translation>Nuovo portafoglio generato: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4025"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4093"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4135"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4188"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4370"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4412"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4465"/> <source>failed to generate new wallet: </source> <translation>impossibile generare nuovo portafoglio: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4230"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4507"/> <source>Opened watch-only wallet</source> <translation>Portafoglio solo-vista aperto</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4511"/> <source>Opened wallet</source> <translation>Portafoglio aperto</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4252"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4529"/> <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'upgrade del portafoglio.</translation> + <translation>Stai utilizzando una versione disapprovata del portafoglio. Per favore procedi nell'upgrade del portafoglio. +</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4267"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4544"/> <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> + <translation>Stai utilizzando una versione disapprovata del portafoglio. Il formato del tuo portafoglio sta per essere aggiornato. +</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4275"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4552"/> <source>failed to load wallet: </source> <translation>impossibile caricare portafoglio: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4292"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4569"/> <source>Use the "help" command to see the list of available commands. </source> - <translation>Usa il comando "help" per visualizzare la lista dei comandi disponibili.</translation> + <translation>Usa il comando "help" per visualizzare la lista dei comandi disponibili. +</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4337"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4614"/> <source>Wallet data saved</source> <translation>Dati del portafoglio salvati</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4431"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4819"/> <source>Mining started in daemon</source> <translation>Mining avviato nel daemon</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4433"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4821"/> <source>mining has NOT been started: </source> <translation>il mining NON è stato avviato: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4453"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4841"/> <source>Mining stopped in daemon</source> <translation>Mining nel daemon interrotto</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4455"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4843"/> <source>mining has NOT been stopped: </source> <translation>il mining NON è stato interrotto: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4537"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4925"/> <source>Blockchain saved</source> <translation>Blockchain salvata</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4552"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4589"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4940"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4973"/> <source>Height </source> <translation>Blocco </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4591"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4975"/> <source>spent </source> <translation>speso/i </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4698"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5089"/> <source>Starting refresh...</source> <translation>Sto iniziando il refresh...</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4712"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5115"/> <source>Refresh done, blocks received: </source> <translation>Refresh finito, blocchi ricevuti: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5958"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6349"/> <source>payment id has invalid format, expected 16 or 64 character hex string: </source> <translation>l'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="5307"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5704"/> <source>bad locked_blocks parameter:</source> <translation>parametro locked_blocks non corretto:</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5978"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6251"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6369"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6639"/> <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="5405"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5987"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6219"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6259"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5806"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6378"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6607"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6647"/> <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="5251"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5870"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6173"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5659"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6271"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6564"/> <source>ring size %u is too large, maximum is %u</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5276"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5395"/> - <source>Unencrypted payment IDs are bad for privacy: ask the recipient to use subaddresses instead</source> - <translation type="unfinished"></translation> + <translation>la dimensione dell'anello %u è troppo grande, il massimo è %u</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5690"/> <source>payment id failed to encode</source> - <translation type="unfinished"></translation> + <translation>codifica dell'ID di pagamento non riuscita</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5312"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5894"/> - <source>Locked blocks too high, max 1000000 (Ë4 yrs)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5340"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5737"/> <source>failed to parse short payment ID from URI</source> - <translation type="unfinished"></translation> + <translation>impossibile analizzare l'ID di pagamento breve dall'URI</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5363"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5365"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5762"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5764"/> <source>Invalid last argument: </source> - <translation type="unfinished"></translation> + <translation>Ultimo argomento non valido: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5382"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5782"/> <source>a single transaction cannot use more than one payment id</source> - <translation type="unfinished"></translation> + <translation>una singola transazione non può utilizzare più di un ID di pagamento</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5399"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5800"/> <source>failed to parse payment id, though it was detected</source> - <translation type="unfinished"></translation> + <translation>errore nell'analisi dell'ID di pagamento, anche se è stato rilevato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5422"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5502"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5590"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5738"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6001"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6059"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6273"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6318"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5823"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5903"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5991"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6139"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6392"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6450"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6661"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6706"/> <source>transaction cancelled.</source> <translation>transazione cancellata.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5541"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5942"/> <source>Sending %s. </source> <translation>Sto inviando %s. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5544"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5945"/> <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 commissione verrà applicata per ogni transazione, per un totale di %s commissioni</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5550"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5951"/> <source>The transaction fee is %s</source> <translation>La commissione per la transazione è %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5553"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5954"/> <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="5554"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5955"/> <source>.</source> <translation>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5554"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5955"/> <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'indirizzo della polvere</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5559"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5960"/> <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="5603"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6004"/> <source>Unsigned transaction(s) successfully written to MMS</source> - <translation type="unfinished"></translation> + <translation>Transazione(i) senza firma scritta(e) con successo su MMS</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5611"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5648"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5749"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5761"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6070"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6107"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6328"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6340"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6012"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6049"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6150"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6162"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6461"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6498"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6716"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6728"/> <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="5616"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5653"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5753"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5765"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6074"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6111"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6332"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6344"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6017"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6054"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6154"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6465"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6502"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6720"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6732"/> <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="5625"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6086"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6026"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6477"/> <source>Failed to cold sign transaction with HW wallet</source> - <translation type="unfinished"></translation> + <translation>Impossibile firmare transazioni a freddo con il portafoglio hardware</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5708"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6109"/> <source>No unmixable outputs found</source> <translation>Nessun output non-mixabile trovato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5775"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6176"/> <source>Not enough money in unlocked balance</source> - <translation type="unfinished"></translation> + <translation>Fondi insufficienti in saldo sbloccato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5776"/> - <source>Discarding %s of unmixable outputs that cannot be spent, which can be undone by "rescan_spent". Is this okay? (Y/Yes/N/No): </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5815"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6216"/> <source>No address given</source> <translation>Non è stato fornito nessun indirizzo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5879"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6280"/> <source>missing lockedblocks parameter</source> - <translation type="unfinished"></translation> + <translation>parametro lockedblocks mancante</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5889"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6290"/> <source>bad locked_blocks parameter</source> - <translation type="unfinished"></translation> + <translation>parametro locked_blocks errato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5914"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6182"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6315"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6573"/> <source>Failed to parse number of outputs</source> - <translation type="unfinished"></translation> + <translation>Impossibile analizzare il numero di outputs</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5919"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6187"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6320"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6578"/> <source>Amount of outputs should be greater than 0</source> - <translation type="unfinished"></translation> + <translation>La quantità di outputs deve essere maggiore di 0</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6428"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6816"/> <source>Failed to parse donation address: </source> - <translation type="unfinished"></translation> + <translation>Impossibile analizzare l'indirizzo di donazione: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6442"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6830"/> <source>Donating %s %s to The Monero Project (donate.getmonero.org or %s).</source> - <translation type="unfinished"></translation> + <translation>Donare %s %s a The Monero Project (donate.getmonero.org o %s).</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6444"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6832"/> <source>Donating %s %s to %s.</source> - <translation type="unfinished"></translation> + <translation>Donare %s %s a %s.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6516"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6919"/> <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="6521"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6924"/> <source>Claimed change is larger than payment to the change address</source> <translation>Il cambiamento richiesto è più largo del pagamento all'indirizzo di cambio</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6552"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6955"/> <source>sending %s to %s</source> <translation>sto mandando %s a %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6562"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6965"/> <source> dummy output(s)</source> <translation> output dummy</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6565"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6968"/> <source>with no destinations</source> <translation>senza destinazioni</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6577"/> - <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min ring size %lu, %s. %sIs this okay? (Y/Yes/N/No): </source> - <translation>Caricate %lu transazioni, per %s, commissione %s, %s, %s, con ring size minimo %lu, %s. %sOK?(Y/Yes/N/No): </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6606"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7009"/> <source>This is a multisig wallet, it can only sign with sign_multisig</source> <translation>Questo è un portafoglio multisig, può firmare solo con sign_multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6629"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7032"/> <source>Failed to sign transaction</source> <translation>Impossibile firmare la transazione</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6635"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7038"/> <source>Failed to sign transaction: </source> <translation>Impossibile firmare la transazione: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6656"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7059"/> <source>Transaction raw hex data exported to </source> <translation>Dati esadecimali grezzi della transazione esportati su </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6677"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7080"/> <source>Failed to load transaction from file</source> <translation>Impossibile caricare la transazione da file</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4729"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5051"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5132"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5459"/> <source>RPC error: </source> <translation>errore RPC: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="695"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="716"/> <source>wallet is watch-only and has no spend key</source> <translation>il portafoglio è solo-vista e non ha una chiave di spesa</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="839"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1021"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1074"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1141"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="860"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1044"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1097"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1164"/> <source>Your original password was incorrect.</source> <translation>La tua password originale era scorretta</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="854"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="875"/> <source>Error with wallet rewrite: </source> <translation>Errore riscrittura wallet: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2284"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2435"/> <source>invalid unit</source> <translation>unità invalida</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2302"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2364"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2453"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2515"/> <source>invalid count: must be an unsigned integer</source> <translation>conteggio invalido: deve essere un intero senza segno</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2320"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2471"/> <source>invalid value</source> <translation>valore invalido</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3204"/> - <source>(Y/Yes/N/No): </source> - <translation>(S/Sì/N/No): </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3761"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3788"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4021"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4041"/> <source>bad m_restore_height parameter: </source> <translation>parametro m_restore_height non corretto: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3766"/> - <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="3779"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3985"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4032"/> <source>Restore height is: </source> <translation>Ripristina altezza è: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3705"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3780"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5583"/> - <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="4509"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4897"/> <source>Daemon is local, assuming trusted</source> <translation>Il daemon è locale, viene considerato fidato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4355"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4632"/> <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="4739"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5142"/> <source>internal error: </source> <translation>errore interno: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1608"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4744"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5056"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1632"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5147"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5464"/> <source>unexpected error: </source> <translation>errore inaspettato: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1534"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1613"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4749"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5061"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5639"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5669"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5794"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6099"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6126"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6361"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6690"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1558"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1637"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5152"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5469"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6040"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6070"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6195"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6490"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6517"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6749"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7093"/> <source>unknown error</source> <translation>errore sconosciuto</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4754"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5157"/> <source>refresh failed: </source> <translation>refresh fallito: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4754"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5157"/> <source>Blocks received: </source> <translation>Blocchi ricevuti: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4787"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5195"/> <source>unlocked balance: </source> <translation>bilancio sbloccato: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3093"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3303"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>amount</source> <translation>ammontare</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="341"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="362"/> <source>false</source> <translation>falso</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="659"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="680"/> <source>Unknown command: </source> <translation>Comando sconosciuto: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="666"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="687"/> <source>Command usage: </source> <translation>Uso del comando: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="669"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="690"/> <source>Command description: </source> <translation>Descrizione del comando: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="735"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="756"/> <source>wallet is multisig but not yet finalized</source> <translation>il portafoglio è multisig ma ancora non finalizzato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="768"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="789"/> <source>Failed to retrieve seed</source> <translation>Impossibile recuperare il seed</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="792"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="813"/> <source>wallet is multisig and has no seed</source> <translation>il portafoglio è multisig e non ha seed</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="899"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="922"/> <source>Error: failed to estimate backlog array size: </source> <translation>Errore: impossibile stimare la dimensione dell'array di backlog: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="904"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="927"/> <source>Error: bad estimated backlog array size</source> <translation>Errore: errata stima della dimensione dell'array di backlog</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="916"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="939"/> <source> (current)</source> <translation> (attuale)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="919"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="942"/> <source>%u block (%u minutes) backlog at priority %u%s</source> <translation>Backlog blocco %u (%u minuti) a priorità %u%s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="921"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="944"/> <source>%u to %u block (%u to %u minutes) backlog at priority %u</source> <translation>Backlog blocco %u a %u (%u a %u minuti) a priorità %u</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="924"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="947"/> <source>No backlog at priority </source> <translation>Nessun backlog a priorità </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="944"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="989"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="967"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1012"/> <source>This wallet is already multisig</source> <translation>Questo portafoglio è già multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="949"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="994"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="972"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1017"/> <source>wallet is watch-only and cannot be made multisig</source> <translation>il portafoglio è sola-visualizzazione e non può essere reso multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="955"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1000"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="978"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1023"/> <source>This wallet has been used before, please use a new wallet to create a multisig wallet</source> <translation>Questo portafoglio è stato usato precedentmente, per cortesia utilizza un nuovo portafoglio per creare un portafoglio multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="963"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="986"/> <source>Send this multisig info to all other participants, then use make_multisig <threshold> <info1> [<info2>...] with others' multisig info</source> <translation>Invia queste informazioni multisig a tutti gli altri partecipanti, poi utilizza make_multisig <threshold> <info1> [<info2>...] con le informazioni multisig degli altri</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="964"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="987"/> <source>This includes the PRIVATE view key, so needs to be disclosed only to that multisig wallet's participants </source> <translation>Questo include la chiave PRIVATA di visualizzazione, pertanto deve essere comunicata solo ai partecipanti di quel portafoglio multisig </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1014"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1037"/> <source>Invalid threshold</source> <translation>Soglia invalida</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1034"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1156"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1057"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1179"/> <source>Another step is needed</source> <translation>Ancora un ultimo passo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1046"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1069"/> <source>Error creating multisig: </source> <translation>Impossibile creare multisig: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1053"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1076"/> <source>Error creating multisig: new wallet is not multisig</source> <translation>Impossibile creare multisig: il nuovo portafoglio non è multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1056"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1079"/> <source> multisig address: </source> <translation> indirizzo multisig: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1080"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1129"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1195"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1261"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1103"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1152"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1219"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1285"/> <source>This wallet is not multisig</source> <translation>Questo portafoglio non è multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1085"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1134"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1108"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1157"/> <source>This wallet is already finalized</source> <translation>Questo portafoglio è già finalizzato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1101"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1124"/> <source>Failed to finalize multisig</source> <translation>Impossibile finalizzare multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1107"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1130"/> <source>Failed to finalize multisig: </source> <translation>Impossibile finalizzare multisig: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1200"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1266"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1360"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1476"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1557"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1191"/> + <source>Multisig address: </source> + <translation>Indirizzo multifirma: </translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1224"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1290"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1384"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1500"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1581"/> <source>This multisig wallet is not yet finalized</source> <translation>Questo portafoglio multisig non è ancora finalizzato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1236"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1260"/> <source>Error exporting multisig info: </source> <translation>Impossibile esportare informazioni sul multisig: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1240"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1264"/> <source>Multisig info exported to </source> <translation>Informazioni sul multisig esportate su </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1306"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1330"/> <source>Multisig info imported</source> <translation>Informazioni su multisig importate</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1334"/> <source>Failed to import multisig info: </source> <translation>Impossibile importare informazioni sul multisig: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1321"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1345"/> <source>Failed to update spent status after importing multisig info: </source> <translation>Impossibile aggiornare lo stato di spesa dopo aver importato le informazioni sul multisig: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1327"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1351"/> <source>Untrusted daemon, spent status may be incorrect. Use a trusted daemon and run "rescan_spent"</source> <translation>Daemon non fidato, lo stato di spesa potrebbe non essere corretto. Usare un daemon fidato ed eseguire "rescan_spent" </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1355"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1471"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1552"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1379"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1495"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1576"/> <source>This is not a multisig wallet</source> <translation>Questo non è un portafoglio multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1405"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1414"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1429"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1438"/> <source>Failed to sign multisig transaction</source> <translation>Impossibile firmare la transazione multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1421"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1445"/> <source>Multisig error: </source> <translation>Errore multisig: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1426"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1450"/> <source>Failed to sign multisig transaction: </source> <translation>Impossibile firmare la transazione multisig: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1449"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1473"/> <source>It may be relayed to the network with submit_multisig</source> <translation>Potrebbe essere trasmesso alla rete con submit_multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1508"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1578"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1532"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1602"/> <source>Failed to load multisig transaction from file</source> <translation>Impossibile caricare la transazione multisig da file</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1514"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1583"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1538"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1607"/> <source>Multisig transaction signed by only %u signers, needs %u more signatures</source> <translation>Transazione multisig firmata da solo %u firmatari, necessita di altre %u firme</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1523"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8890"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1547"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9330"/> <source>Transaction successfully submitted, transaction </source> <translation>Transazione inviata con successo, transazione </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1524"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8891"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1548"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9331"/> <source>You can check its status by using the `show_transfers` command.</source> <translation>E' possibile controllare il suo stato mediante il comando `show_transfers`.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1599"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1623"/> <source>Failed to export multisig transaction to file </source> <translation>Impossibile esportare la transazione multisig su file </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1603"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1627"/> <source>Saved exported multisig transaction file(s): </source> <translation>Transazioni esportate salvate su(i) file: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2095"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2101"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2120"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1892"/> + <source>Invalid key image or txid</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1901"/> + <source>failed to unset ring</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2072"/> + <source>usage: %s <key_image>|<pubkey></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2117"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2129"/> + <source>Frozen: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2131"/> + <source>Not frozen: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2138"/> + <source> bytes sent</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2139"/> + <source> bytes received</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2145"/> + <source>Welcome to Monero, the private cryptocurrency.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2147"/> + <source>Monero, like Bitcoin, is a cryptocurrency. That is, it is digital money.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2148"/> + <source>Unlike Bitcoin, your Monero transactions and balance stay private, and not visible to the world by default.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2149"/> + <source>However, you have the option of making those available to select parties, if you choose to.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2151"/> + <source>Monero protects your privacy on the blockchain, and while Monero strives to improve all the time,</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2152"/> + <source>no privacy technology can be 100% perfect, Monero included.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2153"/> + <source>Monero cannot protect you from malware, and it may not be as effective as we hope against powerful adversaries.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2154"/> + <source>Flaws in Monero may be discovered in the future, and attacks may be developed to peek under some</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2155"/> + <source>of the layers of privacy Monero provides. Be safe and practice defense in depth.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2157"/> + <source>Welcome to Monero and financial privacy. For more information, see https://getmonero.org/</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2244"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2250"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2269"/> <source>ring size must be an integer >= </source> <translation>il ring size deve essere un intero >= </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2125"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2274"/> <source>could not change default ring size</source> <translation>impossibile modificare il ring size di default</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2398"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2469"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2549"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2620"/> <source>Invalid height</source> <translation>Altezza invalida</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2562"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2667"/> + <source>invalid argument: must be either 1/yes or 0/no</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2738"/> <source>Start mining in the daemon (bg_mining and ignore_battery are optional booleans).</source> <translation>Avvia il mining sul daemon (bg_mining e ignore_battery sono booleani opzionali).</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2565"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2741"/> <source>Stop mining in the daemon.</source> <translation>Arresta il mining sul daemon.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2569"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2745"/> <source>Set another daemon to connect to.</source> <translation>Seleziona un altro daemon cui connettersi.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2572"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2748"/> <source>Save the current blockchain data.</source> <translation>Salva i dati blockchain correnti.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2575"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2751"/> <source>Synchronize the transactions and balance.</source> <translation>Sincronizza le transazioni ed il saldo.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2579"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2755"/> <source>Show the wallet's balance of the currently selected account.</source> <translation>Mostra il saldo del portafoglio del conto attualmente selezionato.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2589"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2759"/> + <source>Show the incoming transfers, all or filtered by availability and address index. + +Output format: +Amount, Spent("T"|"F"), "frozen"|"locked"|"unlocked", RingCT, Global Index, Transaction Hash, Address Index, [Public Key, Key Image] </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2765"/> <source>Show the payments for the given payment IDs.</source> <translation>Mostra i pagamenti per gli id pagamento specificati.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2592"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2768"/> <source>Show the blockchain height.</source> <translation>Mostra l'altezza della blockchain.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2606"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2782"/> <source>Send all unmixable outputs to yourself with ring_size 1</source> <translation>Invia tutti gli output non mixabili a te stesso usando ring_size 1</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2613"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2789"/> <source>Send all unlocked outputs below the threshold to an address.</source> <translation>Invia tutti gli output sbloccati sotto la soglia ad un indirizzo.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2617"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2793"/> <source>Send a single output of the given key image to an address without change.</source> <translation>Invia un singolo output della key image specificata ad un indirizzo senza modifica.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2621"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2797"/> <source>Donate <amount> to the development team (donate.getmonero.org).</source> <translation>Dona <amount> al team di sviluppo (donate.getmonero.org).</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2628"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2804"/> <source>Submit a signed transaction from a file.</source> <translation>Invia una transazione firmata da file.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2632"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2808"/> <source>Change the current log detail (level must be <0-4>).</source> <translation>Modifica il dettaglio di log (il livello deve essere <0-4>).</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2812"/> <source>If no arguments are specified, the wallet shows all the existing accounts along with their balances. If the "new" argument is specified, the wallet creates a new account with its label initialized by the provided label text (which can be empty). If the "switch" argument is specified, the wallet switches to the account specified by <index>. @@ -1530,323 +1595,429 @@ If the "label" argument is specified, the wallet sets the label of the If the "tag" argument is specified, a tag <tag_name> is assigned to the specified accounts <account_index_1>, <account_index_2>, .... If the "untag" argument is specified, the tags assigned to the specified accounts <account_index_1>, <account_index_2> ..., are removed. If the "tag_description" argument is specified, the tag <tag_name> is assigned an arbitrary text <description>.</source> - <translation type="unfinished"></translation> + <translation>Se non vengono specificati argomenti, il portafoglio mostra tutti gli account esistenti insieme ai loro saldi. +Se viene specificato l'argomento "new", il portafoglio crea un nuovo account con l'etichetta inizializzata dal testo dell'etichetta fornito (che può essere vuoto). +Se viene specificato l'argomento "switch", il portafoglio passa all'account specificato da <index>. +Se viene specificato l'argomento "label", il portafoglio imposta l'etichetta dell'account specificato da <index> nel testo dell'etichetta fornito. +Se l'argomento "tag" è specificato, un tag <tag_name> viene assegnato agli account specificati <account_index_1>, <account_index_2>, .... +Se viene specificato l'argomento "untag", i tag assegnati agli account specificati <account_index_1>, <account_index_2> ..., vengono rimossi. +Se viene specificato l'argomento "tag_description", al tag <tag_name> viene assegnato un testo arbitrario <description>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2650"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2826"/> <source>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> + <translation>Codifica un ID di pagamento in un indirizzo integrato per l'indirizzo pubblico del portafoglio corrente (nessun argomento utilizza un ID di pagamento casuale) o decodifica un indirizzo integrato per l'indirizzo standard e l'ID di pagamento</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2654"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2830"/> <source>Print all entries in the address book, optionally adding/deleting an entry to/from it.</source> - <translation type="unfinished"></translation> + <translation>Stampa tutte le voci nella rubrica, opzionalmente aggiungendo/eliminando una voce a/da esso.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2657"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2833"/> <source>Save the wallet data.</source> - <translation type="unfinished"></translation> + <translation>Salva i dati del portafoglio.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2660"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2836"/> <source>Save a watch-only keys file.</source> - <translation type="unfinished"></translation> + <translation>Salva un file di chiavi in sola lettura.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2663"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2839"/> <source>Display the private view key.</source> - <translation type="unfinished"></translation> + <translation>Mostra la chiave privata di visualizzazione.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2666"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2842"/> <source>Display the private spend key.</source> - <translation type="unfinished"></translation> + <translation>Mostra la chiave di spesa privata.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2669"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2845"/> <source>Display the Electrum-style mnemonic seed</source> + <translation>Mostra il seed mnemonico di tipo Electrum</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2849"/> + <source>Available options: + seed language + Set the wallet's 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-ring-size <n> + Set the default ring size (obsolete). + auto-refresh <1|0> + Whether to automatically synchronize new blocks from the daemon. + refresh-type <full|optimize-coinbase|no-coinbase|default> + Set the wallet's refresh behaviour. + priority [0|1|2|3|4] + Set the fee to default/unimportant/normal/elevated/priority. + confirm-missing-payment-id <1|0> (obsolete) + ask-password <0|1|2 (or never|action|decrypt)> + action: ask the password before many actions such as transfer, etc + decrypt: same as action, but keeps the spend key encrypted in memory when not needed + unit <monero|millinero|micronero|nanonero|piconero> + Set the 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. + confirm-backlog <1|0> + Whether to warn if there is transaction backlog. + confirm-backlog-threshold [n] + Set a threshold for confirm-backlog to only warn if the transaction backlog is greater than n blocks. + refresh-from-block-height [n] + Set the height before which to ignore blocks. + auto-low-priority <1|0> + Whether to automatically use the low priority fee level when it's safe to do so. + segregate-pre-fork-outputs <1|0> + Set this if you intend to spend outputs on both Monero AND a key reusing fork. + key-reuse-mitigation2 <1|0> + Set this if you are not sure whether you will spend on a key reusing Monero fork later. +subaddress-lookahead <major>:<minor> + Set the lookahead sizes for the subaddress hash table. + Set this if you are not sure whether you will spend on a key reusing Monero fork later. + segregation-height <n> + Set to the height of a key reusing fork you want to use, 0 to use default.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2719"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2897"/> <source>Display the encrypted Electrum-style mnemonic seed.</source> - <translation type="unfinished"></translation> + <translation>Mostra il seed mnemonico criptato di tipo Electrum.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2722"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2900"/> <source>Rescan the blockchain for spent outputs.</source> - <translation type="unfinished"></translation> + <translation>Riscansiona la blockchain per gli outputs spesi.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2726"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2904"/> <source>Get the transaction key (r) for a given <txid>.</source> - <translation type="unfinished"></translation> + <translation>Ottieni la chiave di transazione (r) per il dato <txid>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2734"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2912"/> <source>Check the amount going to <address> in <txid>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2738"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2916"/> <source>Generate a signature proving funds sent to <address> in <txid>, optionally with a challenge string <message>, using either the transaction secret key (when <address> is not your wallet's address) or the view secret key (otherwise), which does not disclose the secret key.</source> - <translation type="unfinished"></translation> + <translation>Generare una firma che provi l'invio dei fondi da <address> in <txid>, facoltativamente con una stringa di verifica <message>, utilizzando la chiave segreta della transazione (quando <address> non è l'indirizzo del tuo portafoglio) o (in alternativa) la chiave di visualizzazione segreta, che non riveli la chiave segreta.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2742"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2920"/> <source>Check the proof for funds going to <address> in <txid> with the challenge string <message> if any.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2746"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2924"/> <source>Generate a signature proving that you generated <txid> using the spend secret key, optionally with a challenge string <message>.</source> - <translation type="unfinished"></translation> + <translation>Genera una firma che dimostri che hai generato <txid> usando la chiave segreta di spesa, opzionalmente con una stringa di verifica <message>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2750"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2928"/> <source>Check a signature proving that the signer generated <txid>, optionally with a challenge string <message>.</source> - <translation type="unfinished"></translation> + <translation>Controlla la firma dimostrando che il firmatario ha generato <txid>, opzionalmente con una stringa di verifica <message>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2754"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2932"/> <source>Generate a signature proving that you own at least this much, optionally with a challenge string <message>. If 'all' is specified, you prove the entire sum of all of your existing accounts' balances. Otherwise, you prove the reserve of the smallest possible amount above <amount> available in your current account.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2760"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2938"/> <source>Check a signature proving that the owner of <address> holds at least this much, optionally with a challenge string <message>.</source> - <translation type="unfinished"></translation> + <translation>Controlla una firma che dimostri che il proprietario di <address> conserva questo valore, opzionalmente con una stringa di verifica <message>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2780"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2958"/> <source>Show the unspent outputs of a specified address within an optional amount range.</source> - <translation type="unfinished"></translation> + <translation>Mostra gli outputs non spesi di uno specifico indirizzo all'interno di un intervallo di quantità opzionale.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2788"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2962"/> + <source>Rescan the blockchain from scratch. If "hard" is specified, you will lose any information which can not be recovered from the blockchain itself.</source> + <translation>Scansiona la blockchain da zero. Se "hard" è specificato, perderai tutte le informazioni che non possono essere recuperate dalla blockchain stessa.</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2966"/> <source>Set an arbitrary string note for a <txid>.</source> - <translation type="unfinished"></translation> + <translation>Imposta una nota arbitraria per un <txid>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2792"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2970"/> <source>Get a string note for a txid.</source> - <translation type="unfinished"></translation> + <translation>Ottieni una nota di stringa per un txid.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2796"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2974"/> <source>Set an arbitrary description for the wallet.</source> - <translation type="unfinished"></translation> + <translation>Imposta una descrizione arbitraria per il portafoglio.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2800"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2978"/> <source>Get the description of the wallet.</source> - <translation type="unfinished"></translation> + <translation>Ottieni la descrizione del portafoglio.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2803"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2981"/> <source>Show the wallet's status.</source> - <translation type="unfinished"></translation> + <translation>Mostra lo stato del portafoglio.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2806"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2984"/> <source>Show the wallet's information.</source> - <translation type="unfinished"></translation> + <translation>Mostra le informazioni del portafoglio.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2810"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2988"/> <source>Sign the contents of a file.</source> - <translation type="unfinished"></translation> + <translation>Firma il contenuto di un file.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2814"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2992"/> <source>Verify a signature on the contents of a file.</source> - <translation type="unfinished"></translation> + <translation>Verifica una firma sul contenuto di un file.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2822"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3000"/> <source>Import a signed key images list and verify their spent status.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2834"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3012"/> <source>Export a set of outputs owned by this wallet.</source> - <translation type="unfinished"></translation> + <translation>Esporta un set di output posseduto da questo portafoglio.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2838"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3016"/> <source>Import a set of outputs owned by this wallet.</source> - <translation type="unfinished"></translation> + <translation>Importa un set di outputs posseduto da questo portafoglio.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2842"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3020"/> <source>Show information about a transfer to/from this address.</source> - <translation type="unfinished"></translation> + <translation>Mostra informazioni su un trasferimento da/verso questo indirizzo.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2845"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3023"/> <source>Change the wallet's password.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2849"/> - <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> + <translation>Cambia la password del portafoglio.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2852"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3030"/> <source>Print the information about the current fee and transaction backlog.</source> - <translation type="unfinished"></translation> + <translation>Stampa le informazioni sulla commissione corrente e sul backlog della transazione.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2854"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3032"/> <source>Export data needed to create a multisig wallet</source> - <translation type="unfinished"></translation> + <translation>Esportare i dati necessari per creare un portafoglio multifirma</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2857"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3035"/> <source>Turn this wallet into a multisig wallet</source> - <translation type="unfinished"></translation> + <translation>Trasforma questo portafoglio in un portafoglio multifirma</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2861"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3039"/> <source>Turn this wallet into a multisig wallet, extra step for N-1/N wallets</source> - <translation type="unfinished"></translation> + <translation>Trasforma questo portafoglio in un portafoglio multifirma, passo aggiuntivo per i portafogli N-1/N</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2869"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3047"/> <source>Export multisig info for other participants</source> - <translation type="unfinished"></translation> + <translation>Esporta informazioni multifirma per altri partecipanti</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2873"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3051"/> <source>Import multisig info from other participants</source> - <translation type="unfinished"></translation> + <translation>Importa informazioni multifirma da altri partecipanti</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2877"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3055"/> <source>Sign a multisig transaction from a file</source> - <translation type="unfinished"></translation> + <translation>Firma una transazione multifirma da un file</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2881"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3059"/> <source>Submit a signed multisig transaction from a file</source> - <translation type="unfinished"></translation> + <translation>Invia una transazione multifirma firmata da un file</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2885"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3063"/> <source>Export a signed multisig transaction to a file</source> + <translation>Esporta una transazione multifirma firmata in un file</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3160"/> + <source>Unsets the ring used for a given key image or transaction</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3180"/> + <source>Freeze a single output by key image so it will not be used</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3184"/> + <source>Thaw a single output by key image so it may be used again</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3188"/> + <source>Checks whether a given output is currently frozen by key image</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3192"/> + <source>Prints simple network stats</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3002"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3196"/> + <source>Prints basic info about Monero for first time users</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3204"/> <source>Show the help section or the documentation about a <command>.</source> + <translation>Mostra la sezione di aiuto o la documentazione su un <command>.</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3258"/> + <source> (set this to support the network and to get a chance to receive new monero)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3085"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3295"/> <source>integer >= </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3098"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3308"/> <source>block height</source> + <translation>altezza del blocco</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3316"/> + <source>1/yes or 0/no</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3203"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3414"/> <source>No wallet found with that name. Confirm creation of new wallet named: </source> - <translation type="unfinished"></translation> + <translation>Nessun portafoglio trovato con quel nome. Conferma la creazione di un nuovo portafoglio chiamato: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3304"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3540"/> <source>can't specify both --restore-deterministic-wallet or --restore-multisig-wallet and --non-deterministic</source> - <translation type="unfinished"></translation> + <translation>non è possibile specificare sia --restore-deterministic-wallet o --restore-multisig-wallet e --non-deterministic</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3546"/> <source>--restore-multisig-wallet uses --generate-new-wallet, not --wallet-file</source> - <translation type="unfinished"></translation> + <translation>--restore-multisig-wallet utilizza --generate-new-wallet, non --wallet-file</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3326"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3562"/> <source>specify a recovery parameter with the --electrum-seed="multisig seed here"</source> - <translation type="unfinished"></translation> + <translation>specifica un parametro di recupero con --electrum-seed=" seed multifirma qui"</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3355"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3591"/> <source>Multisig seed failed verification</source> - <translation type="unfinished"></translation> + <translation>Verifica seed mulitfirma fallita</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3406"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3481"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3641"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3718"/> <source>This address is a subaddress which cannot be used here.</source> - <translation type="unfinished"></translation> + <translation>Questo indirizzo è un sottoindirizzo che non può essere utilizzato qui.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3558"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3796"/> <source>Error: expected M/N, but got: </source> - <translation type="unfinished"></translation> + <translation>Errore: atteso M/N, ma ottenuto: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3563"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3801"/> <source>Error: expected N > 1 and N <= M, but got: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3568"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3806"/> <source>Error: M/N is currently unsupported. </source> - <translation type="unfinished"></translation> + <translation>Errore: M/N non è attualmente supportato. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3809"/> <source>Generating master wallet from %u of %u multisig wallet keys</source> - <translation type="unfinished"></translation> + <translation>Generazione del portafoglio principale da %u di %u chiavi del portafoglio multifirma</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3600"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3838"/> <source>failed to parse secret view key</source> <translation type="unfinished">impossibile fare il parsing della chiave segreta di visualizzazione</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3608"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3846"/> <source>failed to verify secret view key</source> <translation type="unfinished">verifica chiave segreta di visualizzazione fallita</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3628"/> - <source>Secret spend key (%u of %u):</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3651"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3889"/> <source>Error: M/N is currently unsupported</source> - <translation type="unfinished"></translation> + <translation>Errore: M/N non è attualmente supportato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3802"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4055"/> <source>Restore height </source> + <translation>Altezza di ripristino </translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4083"/> + <source>Warning: using an untrusted daemon at %s, privacy will be lessened</source> + <translation>Attenzione: sto utilizzando un daemon non fidato su %s, la privacy sarà ridotta</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4093"/> + <source>If you are new to Monero, type "welcome" for a brief overview.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3803"/> - <source>Still apply restore height? (Y/Yes/N/No): </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4098"/> + <source>WARNING: obsolete long payment IDs are enabled. Sending transactions with those payment IDs are bad for your privacy.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3829"/> - <source>Warning: using an untrusted daemon at %s, privacy will be lessened</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4100"/> + <source>It is recommended that you do not use them, and ask recipients who ask for one to not endanger your privacy.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3888"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4165"/> <source>Daemon either is not started or wrong port was passed. Please make sure daemon is running or change the daemon address using the 'set_daemon' command.</source> - <translation type="unfinished"></translation> + <translation>Il daemon non è stato avviato o la porta è errata. Assicurati che il daemon sia in esecuzione oppure cambia l'indirizzo del daemon usando il comando 'set_daemon'.</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4203"/> + <source>Enter the number corresponding to the language of your choice</source> + <translation>Inserire il numero corrispondente alla lingua desiderata</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4036"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4313"/> <source>Your wallet has been generated! To start synchronizing with the daemon, use the "refresh" command. Use the "help" command to see the list of available commands. @@ -1855,896 +2026,905 @@ Always use the "exit" command when closing monero-wallet-cli to save your current session's state. Otherwise, you might need to synchronize your wallet again (your wallet keys are NOT at risk in any case). </source> - <translation type="unfinished"></translation> + <translation>Il tuo portafoglio è stato generato! +Per avviare la sincronizzazione con il daemon, utilizzare il comando "refresh". +Utilizzare il comando "help" per visualizzare l'elenco dei comandi disponibili. +Usa "help <command>" per vedere la documentazione di un comando. +Usa sempre il comando "exit" quando chiudi monero-wallet-cli per salvare lo +stato della sessione corrente. In caso contrario, potrebbe essere necessario sincronizzare +di nuovo il tuo portafoglio (le chiavi del tuo portafoglio NON sono in nessun caso a rischio). +</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4180"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4457"/> <source>failed to generate new mutlisig wallet</source> - <translation type="unfinished"></translation> + <translation>impossibile generare un nuovo portafoglio multifirma</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4183"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4460"/> <source>Generated new %u/%u multisig wallet: </source> - <translation type="unfinished"></translation> + <translation>Generato nuovo portafoglio %u/%u multifirma: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4232"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4509"/> <source>Opened %u/%u multisig wallet%s</source> - <translation type="unfinished"></translation> + <translation>Aperto %u/%u portafoglio multifirma%s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4570"/> <source>Use "help <command>" to see a command's documentation. </source> - <translation type="unfinished"></translation> + <translation>Usa "help <command>" per vedere la documentazione di un comando. +</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4351"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4628"/> <source>wallet is multisig and cannot save a watch-only version</source> + <translation>il portafoglio è multifirma e non è possibile salvarne una versione in sola lettura</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4664"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4696"/> + <source>Failed to query mining status: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4476"/> - <source>Unexpected array length - Exited simple_wallet::set_daemon()</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4679"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4707"/> + <source>Failed to setup background mining: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4517"/> - <source>This does not seem to be a valid daemon URL.</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4683"/> + <source>Background mining enabled. Thank you for supporting the Monero network.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4553"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4590"/> - <source>txid </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4711"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4719"/> + <source>Background mining not enabled. Run "set setup-background-mining 1" to change.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4725"/> + <source>Using an untrusted daemon, skipping background mining check</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4750"/> + <source>The daemon is not set up to background mine.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4751"/> + <source>With background mining enabled, the daemon will mine when idle and not on batttery.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4752"/> + <source>Enabling this supports the network you are using, and makes you eligible for receiving new monero</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4757"/> + <source>Background mining not enabled. Set setup-background-mining to 1 to change.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4555"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4592"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4864"/> + <source>Unexpected array length - Exited simple_wallet::set_daemon()</source> + <translation>Lunghezza array imprevista - Exited simple_wallet:: set_daemon ()</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4905"/> + <source>This does not seem to be a valid daemon URL.</source> + <translation>Questo URL del daemon non sembra essere valido.</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4941"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4974"/> + <source>txid </source> + <translation>txid </translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4943"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4976"/> <source>idx </source> + <translation>idx </translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <source>WARNING: this transaction uses an unencrypted payment ID: consider using subaddresses instead.</source> + <translation>ATTENZIONE: questa transazione utilizza un ID di pagamento non criptato: considera l'utilizzo di sottoindirizzi.</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <source>WARNING: this transaction uses an unencrypted payment ID: these are obsolete. Support will be withdrawn in the future. Use subaddresses instead.</source> + <translation>ATTENZIONE: questa transazione utilizza un ID di pagamento non criptato: questi sono obsoleti. Il supporto ad essi verrà sospeso in futuro. Utilizzare sottoindirizzi.</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5108"/> + <source>New transfer received since rescan was started. Key images are incomplete.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4780"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5183"/> <source> (Some owned outputs have partial key images - import_multisig_info needed)</source> - <translation type="unfinished"></translation> + <translation> (Alcuni output contengono immagini chiave parziali - import_multisig_info necessario)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4783"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5186"/> <source>Currently selected account: [</source> - <translation type="unfinished"></translation> + <translation>Account attualmente selezionato: [</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4783"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5186"/> <source>] </source> - <translation type="unfinished"></translation> + <translation>] </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4785"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5188"/> <source>Tag: </source> - <translation type="unfinished"></translation> + <translation>Etichetta: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4785"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5188"/> <source>(No tag assigned)</source> - <translation type="unfinished"></translation> + <translation>(Nessuna etichetta assegnata)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4792"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5200"/> <source>Balance per address:</source> - <translation type="unfinished"></translation> + <translation>Saldo per indirizzo:</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> <source>Address</source> - <translation type="unfinished"></translation> + <translation>Indirizzo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8451"/> <source>Balance</source> - <translation type="unfinished"></translation> + <translation>Saldo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8451"/> <source>Unlocked balance</source> - <translation type="unfinished"></translation> + <translation>Saldo sbloccato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> <source>Outputs</source> - <translation type="unfinished"></translation> + <translation>Outputs</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8008"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9122"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8451"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9564"/> <source>Label</source> - <translation type="unfinished"></translation> + <translation>Etichetta</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4801"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5209"/> <source>%8u %6s %21s %21s %7u %21s</source> - <translation type="unfinished"></translation> + <translation>%8u %6s %21s %21s %7u %21s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> <source>spent</source> <translation>spesi</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> <source>global index</source> <translation>indice globale</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> <source>tx id</source> <translation>tx id</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>addr index</source> + <translation>indice indirizzo</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5312"/> + <source>Used at heights: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5318"/> + <source>[frozen]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4924"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5332"/> <source>No incoming transfers</source> <translation>Nessun trasferimento in entrata</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4928"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5336"/> <source>No incoming available transfers</source> <translation>Nessun trasferimento in entrata disponibile</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4932"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5340"/> <source>No incoming unavailable transfers</source> <translation>Nessun trasferimento indisponibile in entrata</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>payment</source> <translation>pagamento</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>transaction</source> <translation>transazione</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>height</source> <translation>altezza</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>unlock time</source> <translation>tempo sbloccato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4968"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5376"/> <source>No payments with id </source> <translation>Nessun pagamento con id </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5016"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5106"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5442"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5901"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5424"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5514"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5843"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6302"/> <source>failed to get blockchain height: </source> <translation>impossibile recuperare altezza blockchain: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5114"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5522"/> <source> Transaction %llu/%llu: txid=%s</source> <translation> Transazione %llu/%llu: txid=%s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5135"/> - <source> -Input %llu/%llu: amount=%s</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5151"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5559"/> <source>failed to get output: </source> <translation>impossibile recuperare output: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5159"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5567"/> <source>output key's originating block height shouldn't be higher than the blockchain height</source> <translation>l'altezza del blocco di origine della chiave di output non dovrebbe essere più alta dell'altezza della blockchain</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5163"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5571"/> <source> Originating block heights: </source> <translation> Originando blocchi: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5175"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5583"/> <source> |</source> <translation> |</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5175"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7706"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5583"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8110"/> <source>| </source> <translation>| </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5192"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5600"/> <source> Warning: Some input keys being spent are from </source> <translation> Avviso: alcune chiavi di input spese vengono da </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5194"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5602"/> <source>, which can break the anonymity of ring signature. Make sure this is intentional!</source> <translation>, che potrebbe compromettere l'anonimità della ring signature. Assicurati di farlo intenzionalmente!</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5234"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5853"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6156"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5642"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6254"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6547"/> <source>Ring size must not be 0</source> <translation>Il ring size non può essere 0</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5246"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5865"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6168"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5654"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6266"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6559"/> <source>ring size %u is too small, minimum is %u</source> <translation>il ring size %u è troppo piccolo, il minimo è %u</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5258"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5666"/> <source>wrong number of arguments</source> <translation>numero di argomenti errato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5417"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5996"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6268"/> - <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> + <location filename="../src/simplewallet/simplewallet.cpp" line="5686"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5796"/> + <source>Warning: Unencrypted payment IDs will harm your privacy: ask the recipient to use subaddresses instead</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5458"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6016"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5859"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6407"/> <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="6759"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6770"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6777"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7164"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7175"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7182"/> <source>failed to parse tx_key</source> - <translation type="unfinished"></translation> + <translation>impossibile analizzare tx_key</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6786"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7191"/> <source>Tx key successfully stored.</source> - <translation type="unfinished"></translation> + <translation>Tx key memorizzata con successo.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6790"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7195"/> <source>Failed to store tx key: </source> - <translation type="unfinished"></translation> + <translation>Impossibile memorizzare la chiave tx: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7296"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7696"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>block</source> - <translation type="unfinished"></translation> + <translation>blocco</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7440"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7844"/> <source>usage: show_transfers [in|out|all|pending|failed|coinbase] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]]</source> - <translation type="unfinished"></translation> + <translation>utilizzo: show_transfers [in|out|all|pending|failed|coinbase] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]]</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7493"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7897"/> <source>usage: export_transfers [in|out|all|pending|failed|coinbase] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]] [output=<path>]</source> - <translation type="unfinished"></translation> + <translation>utilizzo: export_transfers [in|out|all|pending|failed|coinbase] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]] [output=<path>]</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>direction</source> - <translation type="unfinished"></translation> + <translation>direzione</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>timestamp</source> - <translation type="unfinished"></translation> + <translation>timestamp</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>running balance</source> - <translation type="unfinished"></translation> + <translation>bilancio corrente</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>hash</source> - <translation type="unfinished"></translation> + <translation>hash</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>payment ID</source> - <translation type="unfinished"></translation> + <translation>ID di pagamento</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>fee</source> - <translation type="unfinished"></translation> + <translation>tassa</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>destination</source> - <translation type="unfinished"></translation> + <translation>destinazione</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>index</source> - <translation type="unfinished"></translation> + <translation>indice</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>note</source> - <translation type="unfinished"></translation> + <translation>nota</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7572"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7976"/> <source>CSV exported to </source> - <translation type="unfinished"></translation> + <translation>CSV esportato in </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7730"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8159"/> <source>Warning: this will lose any information which can not be recovered from the blockchain.</source> - <translation type="unfinished"></translation> + <translation>Attenzione: questo farà perdere ogni informazione che non può essere recuperata dalla blockchain.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7731"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8160"/> <source>This includes destination addresses, tx secret keys, tx notes, etc</source> + <translation>Questo include gli indirizzi di destinazione, le chiavi segrete di tx, le note di tx, ecc</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="8172"/> + <source>Warning: your restore height is higher than wallet restore height: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7732"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8173"/> <source>Rescan anyway ? (Y/Yes/N/No): </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7750"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8192"/> <source>MMS received new message</source> - <translation type="unfinished"></translation> + <translation>ricevuto un nuovo messaggio MMS</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8387"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8832"/> <source>Network type: </source> - <translation type="unfinished"></translation> + <translation>Tipo di rete: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8388"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8833"/> <source>Testnet</source> - <translation type="unfinished"></translation> + <translation>Testnet</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8389"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8834"/> <source>Stagenet</source> - <translation type="unfinished"></translation> + <translation>Stagenet</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8389"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8834"/> <source>Mainnet</source> - <translation type="unfinished"></translation> + <translation>Mainnet</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8559"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8605"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8999"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9045"/> <source>command only supported by HW wallet</source> - <translation type="unfinished"></translation> + <translation>comando supportato solo dal portafoglio HW</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8564"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9004"/> <source>hw wallet does not support cold KI sync</source> - <translation type="unfinished"></translation> + <translation>Il portafoglio hardware non supporta la sincronizzazione cold KI</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8576"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9016"/> <source>Please confirm the key image sync on the device</source> - <translation type="unfinished"></translation> + <translation>Si prega di confermare la sincronizzazione della chiave immagine sul dispositivo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8582"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9022"/> <source>Key images synchronized to height </source> - <translation type="unfinished"></translation> + <translation>Immagini della chiave sincronizzate all'altezza </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8585"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9025"/> <source>Running untrusted daemon, cannot determine which transaction output is spent. Use a trusted daemon with --trusted-daemon and run rescan_spent</source> - <translation type="unfinished"></translation> + <translation>L'esecuzione di un daemon non fidato non può determinare quale output di transazione viene speso. Utilizzare un daemon fidato con --trusted-daemon ed eseguire rescan_spent</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8588"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9028"/> <source> spent, </source> - <translation type="unfinished"></translation> + <translation> speso, </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8588"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9028"/> <source> unspent</source> - <translation type="unfinished"></translation> + <translation> non speso</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8592"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9032"/> <source>Failed to import key images</source> - <translation type="unfinished"></translation> + <translation>Impossibile importare le immagini della chiave</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8597"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9037"/> <source>Failed to import key images: </source> <translation type="unfinished">Impossibile importare le key images: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8614"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9054"/> <source>Failed to reconnect device</source> - <translation type="unfinished"></translation> + <translation>Impossibile ricollegare il dispositivo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8619"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9059"/> <source>Failed to reconnect device: </source> - <translation type="unfinished"></translation> + <translation>Impossibile ricollegare il dispositivo: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8883"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9323"/> <source>Transaction successfully saved to </source> - <translation type="unfinished"></translation> + <translation>Transazione salvata correttamente in </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8883"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8885"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9323"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9325"/> <source>, txid </source> - <translation type="unfinished"></translation> + <translation>, txid </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8885"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9325"/> <source>Failed to save transaction to </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5723"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6044"/> - <source>Sweeping %s in %llu transactions for a total fee of %s. Is this okay? (Y/Yes/N/No): </source> - <translation>Sto eseguendo lo sweep di %s nelle transazioni %llu per un totale commissioni di %s. Va bene? (S/Sì/N/No): </translation> + <translation>Impossibile salvare la transazione in </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5729"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6050"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6310"/> - <source>Sweeping %s for a total fee of %s. Is this okay? (Y/Yes/N/No): </source> - <translation>Sto eseguendo lo sweep di %s per un totale commissioni di %s. Va bene? (S/Sì/N/No): </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6611"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7014"/> <source>This is a watch only wallet</source> <translation>Questo è un portafoglio solo-vista</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8813"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9253"/> <source>Double spend seen on the network: this transaction may or may not end up being mined</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8848"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9288"/> <source>Transaction ID not found</source> <translation>ID transazione non trovato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="336"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="357"/> <source>true</source> <translation>vero</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="389"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="410"/> <source>failed to parse refresh type</source> <translation>impossibile fare il parsing del tipo di refresh</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="721"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="787"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="939"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="984"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1067"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1124"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1190"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1256"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1350"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1466"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1547"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6601"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6665"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6702"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6799"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7010"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7094"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8397"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8474"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8517"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8630"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8670"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="742"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="808"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="962"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1007"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1090"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1147"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1214"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1280"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1374"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1490"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7004"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7068"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7410"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7494"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8842"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8919"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8962"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9070"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9110"/> <source>command not supported by HW wallet</source> - <translation type="unfinished"></translation> + <translation>comando non supportato dal portafoglio HW</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="726"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="797"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="747"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="818"/> <source>wallet is watch-only and has no seed</source> <translation>il portafoglio è solo-vista e non possiede un seed</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="744"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="807"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="765"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="828"/> <source>wallet is non-deterministic and has no seed</source> <translation>il portafoglio è non-deterministico e non possiede un seed</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="751"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="772"/> <source>Enter optional seed offset passphrase, empty to see raw seed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="817"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="838"/> <source>Incorrect password</source> - <translation type="unfinished"></translation> + <translation>Password errata</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="883"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="906"/> <source>Current fee is %s %s per %s</source> - <translation type="unfinished"></translation> + <translation>La commissione attuale è %s %s per %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1036"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1158"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1059"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1181"/> <source>Send this multisig info to all other participants, then use exchange_multisig_keys <info1> [<info2>...] with others' multisig info</source> - <translation type="unfinished"></translation> + <translation>Invia queste informazioni multifirma a tutti i partecipanti, quindi utilizza exchange_multisig_keys <info1> [<info2>...] con le informazioni multifirma degli altri partecipanti</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1167"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1190"/> <source>Multisig wallet has been successfully created. Current wallet type: </source> - <translation type="unfinished"></translation> + <translation>Il portafoglio multifirma è stato creato con successo. Tipo di portafoglio corrente: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1172"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1196"/> <source>Failed to perform multisig keys exchange: </source> - <translation type="unfinished"></translation> + <translation>Impossibile eseguire lo scambio di chiavi multifirma: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1499"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1523"/> <source>Failed to load multisig transaction from MMS</source> - <translation type="unfinished"></translation> + <translation>Impossibile caricare la transazione multifirma da MMS</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1631"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1788"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1655"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1812"/> <source>Invalid key image</source> - <translation type="unfinished"></translation> + <translation>Immagine della chiave non valida</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1637"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1661"/> <source>Invalid txid</source> - <translation type="unfinished"></translation> + <translation>Txid non valido</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1649"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1673"/> <source>Key image either not spent, or spent with mixin 0</source> - <translation type="unfinished"></translation> + <translation>Immagine della chiave non spesa o spesa con mixin 0</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1664"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1688"/> <source>Failed to get key image ring: </source> - <translation type="unfinished"></translation> + <translation>Impossibile ottenere l'anello della chiave immagine: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1679"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1703"/> <source>File doesn't exist</source> - <translation type="unfinished"></translation> + <translation>Il file non esiste</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1701"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1725"/> <source>Invalid ring specification: </source> - <translation type="unfinished"></translation> + <translation>Specifica dell'anello non valida: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1733"/> <source>Invalid key image: </source> - <translation type="unfinished"></translation> + <translation>Immagine della chiave non valida: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1714"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1738"/> <source>Invalid ring type, expected relative or abosolute: </source> - <translation type="unfinished"></translation> + <translation>Tipo di anello non valido, previsto relativo o assoluto: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1720"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1732"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1744"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1756"/> <source>Error reading line: </source> - <translation type="unfinished"></translation> + <translation>Errore durante la lettura della riga: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1743"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1767"/> <source>Invalid ring: </source> - <translation type="unfinished"></translation> + <translation>Anello non valido: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1752"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1776"/> <source>Invalid relative ring: </source> - <translation type="unfinished"></translation> + <translation>Anello relativo non valido: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1764"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1788"/> <source>Invalid absolute ring: </source> - <translation type="unfinished"></translation> + <translation>Anello assoluto non valido: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1773"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1797"/> <source>Failed to set ring for key image: </source> - <translation type="unfinished"></translation> + <translation>Impossibile impostare l'anello per l'immagine della chiave: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1773"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1797"/> <source>Continuing.</source> - <translation type="unfinished"></translation> + <translation>Continuando.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1803"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1827"/> <source>Missing absolute or relative keyword</source> - <translation type="unfinished"></translation> + <translation>Parola chiave assoluta o relativa mancante</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1813"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1820"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1837"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1844"/> <source>invalid index: must be a strictly positive unsigned integer</source> - <translation type="unfinished"></translation> + <translation>indice non valido: deve essere un numero intero senza segno e positivo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1828"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1852"/> <source>invalid index: indices wrap</source> - <translation type="unfinished"></translation> + <translation>indice non valido: indici wrap</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1838"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1862"/> <source>invalid index: indices should be in strictly ascending order</source> - <translation type="unfinished"></translation> + <translation>indice non valido: gli indici devono essere rigorosamente in ordine crescente</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1845"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1869"/> <source>failed to set ring</source> - <translation type="unfinished"></translation> + <translation>impossibile impostare l'anello</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1890"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1946"/> <source>First line is not an amount</source> - <translation type="unfinished"></translation> + <translation>La prima riga non è un importo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1904"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1960"/> <source>Invalid output: </source> - <translation type="unfinished"></translation> + <translation>Output non valido: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1914"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1970"/> <source>Bad argument: </source> - <translation type="unfinished"></translation> + <translation>Argomento non valido: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1914"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1970"/> <source>should be "add"</source> - <translation type="unfinished"></translation> + <translation>dovrebbe essere "add"</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1923"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1979"/> <source>Failed to open file</source> - <translation type="unfinished"></translation> + <translation>Impossibile aprire il file</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1929"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1985"/> <source>Invalid output key, and file doesn't exist</source> - <translation type="unfinished"></translation> + <translation>Chiave di output non valida, il file non esiste</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1935"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1991"/> <source>Failed to mark output spent: </source> - <translation type="unfinished"></translation> + <translation>Impossibile contrassegnare l'output come speso: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1952"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1979"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2035"/> <source>Invalid output</source> - <translation type="unfinished"></translation> + <translation>Output non valido</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1962"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2018"/> <source>Failed to mark output unspent: </source> - <translation type="unfinished"></translation> + <translation>Impossibile contrassegnare l'output non speso: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1986"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2042"/> <source>Spent: </source> - <translation type="unfinished"></translation> + <translation>Speso: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1988"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2044"/> <source>Not spent: </source> - <translation type="unfinished"></translation> + <translation>Non speso: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1992"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2048"/> <source>Failed to check whether output is spent: </source> - <translation type="unfinished"></translation> + <translation>Impossibile verificare se l'output è stato speso: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2007"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2063"/> <source>Failed to save known rings: </source> - <translation type="unfinished"></translation> + <translation>Impossibile salvare gli anelli conosciuti: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2022"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2171"/> <source>Please confirm the transaction on the device</source> - <translation type="unfinished"></translation> + <translation>Si prega di confermare la transazione sul dispositivo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2069"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2218"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2237"/> <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="2106"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5581"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2255"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5982"/> <source>WARNING: this is a non default ring size, which may harm your privacy. Default is recommended.</source> - <translation type="unfinished"></translation> + <translation>ATTENZIONE: impostazione dell'anello non default, la tua privacy potrebbe essere compromessa. Si consiglia di utilizzare l'impostazione predefinita</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2108"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2257"/> <source>WARNING: from v8, ring size will be fixed and this setting will be ignored.</source> - <translation type="unfinished"></translation> + <translation>ATTENZIONE: dalla v8, la dimensione dell'anello sarà fissa e questa impostazione verrà ignorata.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2137"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2160"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2176"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2286"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2309"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2325"/> <source>priority must be either 0, 1, 2, 3, or 4, or one of: </source> - <translation type="unfinished"></translation> + <translation>la priorità deve essere 0, 1, 2, 3 o 4 o una di: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2330"/> <source>could not change default priority</source> <translation>impossibile cambiare priorità standard</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2249"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2400"/> <source>invalid argument: must be either 0/never, 1/action, or 2/encrypt/decrypt</source> - <translation type="unfinished"></translation> + <translation>argomento non valido: deve essere 0/never, 1/action, or 2/encrypt/decrypt</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2510"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2686"/> <source>Device name not specified</source> - <translation type="unfinished"></translation> + <translation>Nome del dispositivo non specificato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2519"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2695"/> <source>Device reconnect failed</source> - <translation type="unfinished"></translation> + <translation>Riconnessione del dispositivo fallita</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2524"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2700"/> <source>Device reconnect failed: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2583"/> - <source>Show the incoming transfers, all or filtered by availability and address index. - -Output format: -Amount, Spent("T"|"F"), "locked"|"unlocked", RingCT, Global Index, Transaction Hash, Address Index, [Public Key, Key Image] </source> - <translation type="unfinished"></translation> + <translation>Riconnessione del dispositivo fallita: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2595"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2771"/> <source>Transfer <amount> to <address>. If the parameter "index=<N1>[,<N2>,...]" is specified, the wallet uses outputs received by addresses of those indices. If omitted, the wallet randomly chooses address indices to be used. In any case, it tries its best not to combine outputs across multiple addresses. <priority> is the priority of the transaction. The higher the priority, the higher the transaction fee. Valid values in priority order (from lowest to highest) are: unimportant, normal, elevated, priority. If omitted, the default value (see the command "set priority") is used. <ring_size> is the number of inputs to include for untraceability. Multiple payments can be made at once by adding URI_2 or <address_2> <amount_2> etcetera (before the payment ID, if it's included)</source> - <translation type="unfinished"></translation> + <translation>Trasferisci <amount> in <address>. Se viene specificato il parametro "index=<N1>[,<N2>,...]" il portafoglio utilizza le uscite ricevute dagli indirizzi di tali indici. Se omesso, il portafoglio sceglie casualmente gli indici dell'indirizzo da utilizzare. In ogni caso, fa del suo meglio per non combinare gli output su più indirizzi. <priority> è la priorità della transazione. Maggiore è la priorità, maggiore è la commissione di transazione. I valori validi in ordine di priorità (dal più basso al più alto) sono: non importante, normale, elevata, priorità. Se omesso, viene utilizzato il valore predefinito (consultare il comando "set priority"). <ring_size> è il numero di input da includere per la non tracciabilità. È possibile effettuare pagamenti multipli contemporaneamente aggiungendo URI_2 o <address_2> <amount_2> eccetera (prima dell'ID pagamento, se questo è incluso)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2599"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2775"/> <source>Transfer <amount> to <address> and lock it for <lockblocks> (max. 1000000). If the parameter "index=<N1>[,<N2>,...]" is specified, the wallet uses outputs received by addresses of those indices. If omitted, the wallet randomly chooses address indices to be used. In any case, it tries its best not to combine outputs across multiple addresses. <priority> is the priority of the transaction. The higher the priority, the higher the transaction fee. Valid values in priority order (from lowest to highest) are: unimportant, normal, elevated, priority. If omitted, the default value (see the command "set priority") is used. <ring_size> is the number of inputs to include for untraceability. Multiple payments can be made at once by adding URI_2 or <address_2> <amount_2> etcetera (before the payment ID, if it's included)</source> - <translation type="unfinished"></translation> + <translation>Trasferisci <amount> in <address> e bloccalo per <lockblocks> (massimo 1000000). Se viene specificato il parametro "index=<N1>[,<N2>,...]", il portafoglio utilizza le uscite ricevute dagli indirizzi di tali indici. Se omesso, il portafoglio sceglie casualmente gli indici dell'indirizzo da utilizzare. In ogni caso, fa del suo meglio per non combinare gli output su più indirizzi. <priority> è la priorità della transazione. Maggiore è la priorità, maggiore è la commissione di transazione. I valori validi in ordine di priorità (dal più basso al più alto) sono: non importante, normale, elevata, priorità. Se omesso, viene utilizzato il valore predefinito (consultare il comando "set priority"). <ring_size> è il numero di input da includere per la non tracciabilità. È possibile effettuare pagamenti multipli contemporaneamente aggiungendo URI_2 o <address_2> <amount_2> eccetera (prima dell'ID pagamento, se questo è incluso)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2603"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2779"/> <source>Send all unlocked balance to an address and lock it for <lockblocks> (max. 1000000). If the parameter "index<N1>[,<N2>,...]" is specified, the wallet sweeps outputs received by those address indices. If omitted, the wallet randomly chooses an address index to be used. <priority> is the priority of the sweep. The higher the priority, the higher the transaction fee. Valid values in priority order (from lowest to highest) are: unimportant, normal, elevated, priority. If omitted, the default value (see the command "set priority") is used. <ring_size> is the number of inputs to include for untraceability.</source> - <translation type="unfinished"></translation> + <translation>Invia tutto il saldo sbloccato a un indirizzo e bloccalo per <lockblocks> (massimo 1000000). Se viene specificato il parametro "index<N1>[,<N2>,...]", le uscite sweep del portafoglio vengono ricevute da tali indici dell'indirizzo. Se omesso, il portafoglio sceglie casualmente un indice dell'indirizzo da utilizzare. <priority> è la priorità dello sweep. Maggiore è la priorità, maggiore è la commissione di transazione. I valori validi in ordine di priorità (dal più basso al più alto) sono: non importante, normale, elevata, priorità. Se omesso, viene utilizzato il valore predefinito (consultare il comando "set priority"). <ring_size> è il numero di input da includere per la non tracciabilità.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2609"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2785"/> <source>Send all unlocked balance to an address. If the parameter "index<N1>[,<N2>,...]" is specified, the wallet sweeps outputs received by those address indices. If omitted, the wallet randomly chooses an address index to be used. If the parameter "outputs=<N>" is specified and N > 0, wallet splits the transaction into N even outputs.</source> - <translation type="unfinished"></translation> + <translation>Invia tutto il saldo sbloccato a un indirizzo. Se viene specificato il parametro "index<N1>[,<N2>,...]", le uscite sweep del portafoglio vengono ricevute da tali indici dell'indirizzo. Se omesso, il portafoglio sceglie casualmente un indice dell'indirizzo da utilizzare. Se il parametro "outputs=<N>" è specificato e N > 0, il portafoglio divide la transazione in N uscite pari.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2625"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2801"/> <source>Sign a transaction from a file. If the parameter "export_raw" is specified, transaction raw hex data suitable for the daemon RPC /sendrawtransaction is exported.</source> - <translation type="unfinished"></translation> + <translation>Firma una transazione da un file. Se viene specificato il parametro "export_raw", vengono esportati i dati esadecimali grezzi della transazione adatti al daemon RPC /sendrawtransaction.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2646"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2822"/> <source>If no arguments are specified or <index> is specified, the wallet shows the default or specified address. If "all" is specified, the wallet shows all the existing addresses in the currently selected account. If "new " is specified, the wallet creates a new address with the provided label text (which can be empty). If "label" is specified, the wallet sets the label of the address specified by <index> to the provided label text.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2673"/> - <source>Available options: - seed language - Set the wallet's 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-ring-size <n> - Set the default ring size (obsolete). - auto-refresh <1|0> - Whether to automatically synchronize new blocks from the daemon. - refresh-type <full|optimize-coinbase|no-coinbase|default> - Set the wallet's refresh behaviour. - priority [0|1|2|3|4] - Set the fee to default/unimportant/normal/elevated/priority. - confirm-missing-payment-id <1|0> - ask-password <0|1|2 (or never|action|decrypt)> - unit <monero|millinero|micronero|nanonero|piconero> - Set the 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. - confirm-backlog <1|0> - Whether to warn if there is transaction backlog. - confirm-backlog-threshold [n] - Set a threshold for confirm-backlog to only warn if the transaction backlog is greater than n blocks. - refresh-from-block-height [n] - Set the height before which to ignore blocks. - auto-low-priority <1|0> - Whether to automatically use the low priority fee level when it's safe to do so. - segregate-pre-fork-outputs <1|0> - Set this if you intend to spend outputs on both Monero AND a key reusing fork. - key-reuse-mitigation2 <1|0> - Set this if you are not sure whether you will spend on a key reusing Monero fork later. -subaddress-lookahead <major>:<minor> - Set the lookahead sizes for the subaddress hash table. - Set this if you are not sure whether you will spend on a key reusing Monero fork later. - segregation-height <n> - Set to the height of a key reusing fork you want to use, 0 to use default.</source> - <translation type="unfinished"></translation> + <translation>Se non viene specificato alcun argomento o viene specificato <index>, il portafoglio mostra l'indirizzo predefinito o specificato. Se è specificato "all", il portafoglio mostra tutti gli indirizzi esistenti nell'account attualmente selezionato. Se viene specificato "new", il portafoglio crea un nuovo indirizzo con il testo dell'etichetta fornito (che può essere vuoto). Se si specifica "label", il portafoglio imposta l'etichetta dell'indirizzo specificato da <index> sul testo dell'etichetta fornito.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2730"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2908"/> <source>Set the transaction key (r) for a given <txid> in case the tx was made by some other device or 3rd party wallet.</source> - <translation type="unfinished"></translation> + <translation>Imposta la chiave di transazione (r) per un dato <txid> nel caso in cui il tx sia stato creato da qualche altro dispositivo o portafoglio di terze parti.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2765"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2943"/> <source>Show the incoming/outgoing transfers within an optional height range. Output format: @@ -2758,42 +2938,42 @@ Pending or Failed: "failed"|"pending", "o <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2775"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2953"/> <source>export_transfers [in|out|all|pending|failed|coinbase] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]] [output=<filepath>]</source> - <translation type="unfinished"></translation> + <translation>export_transfers [in|out|all|pending|failed|coinbase] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]] [output=<filepath>]</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2776"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2954"/> <source>Export to CSV the incoming/outgoing transfers within an optional height range.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2784"/> - <source>Rescan the blockchain from scratch, losing any information which can not be recovered from the blockchain itself.</source> - <translation type="unfinished"></translation> + <translation>Esporta in CSV i trasferimenti in entrata/uscita all'interno di un intervallo di altezza opzionale.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2818"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2996"/> <source>Export a signed set of key images to a <filename>.</source> - <translation type="unfinished"></translation> + <translation>Esporta un set firmato di immagini chiave in un <filename>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2826"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3004"/> <source>Synchronizes key images with the hw wallet.</source> - <translation type="unfinished"></translation> + <translation>Sincronizza le immagini chiave con il portafoglio hw.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2830"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3008"/> <source>Attempts to reconnect HW wallet.</source> - <translation type="unfinished"></translation> + <translation>Tenta di ricollegare il portafoglio HW.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2865"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3027"/> + <source>Generate a new random full size payment id (obsolete). These will be unencrypted on the blockchain, see integrated_address for encrypted short payment ids.</source> + <translation>Genera un nuovo ID di pagamento lungo casuale (obsoleto). Questi non saranno crittati sulla blockchain, vedere integrated_address per gli ID di pagamento brevi crittografati.</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3043"/> <source>Performs extra multisig keys exchange rounds. Needed for arbitrary M/N multisig wallets</source> - <translation type="unfinished"></translation> + <translation>Esegue scambi extra di chiavi multifirma. Necessario per portafogli multisig M/N arbitrari</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2889"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3067"/> <source>Interface with the MMS (Multisig Messaging System) <subcommand> is one of: init, info, signer, list, next, sync, transfer, delete, send, receive, export, note, show, set, help @@ -2802,73 +2982,74 @@ Get help about a subcommand with: help mms <subcommand>, or mms help <s <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2897"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3075"/> <source>Initialize and configure the MMS for M/N = number of required signers/number of authorized signers multisig</source> - <translation type="unfinished"></translation> + <translation>Inizializza e configura MMS per M/N = numero di firmatari richiesti/numero di multifirma dei firmatari autorizzati</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2901"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3079"/> <source>Display current MMS configuration</source> - <translation type="unfinished"></translation> + <translation>Mostra la configurazione MMS corrente</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2905"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3083"/> <source>Set or modify authorized signer info (single-word label, transport address, Monero address), or list all signers</source> - <translation type="unfinished"></translation> + <translation>Imposta o modifica le informazioni del firmatario autorizzato (etichetta con una sola parola, indirizzo di trasporto, indirizzo Monero) oppure elenca tutti i firmatari</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2909"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3087"/> <source>List all messages</source> - <translation type="unfinished"></translation> + <translation>Elenca tutti i messaggi</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2913"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3091"/> <source>Evaluate the next possible multisig-related action(s) according to wallet state, and execute or offer for choice By using 'sync' processing of waiting messages with multisig sync info can be forced regardless of wallet state</source> - <translation type="unfinished"></translation> + <translation>Valuta le azioni multifirma successive secondo lo stato del portafoglio, esegui o proponi una scelta +Utilizzando l'elaborazione 'sync' dei messaggi in attesa con le informazioni di sincronizzazione multifirma, è possibile forzare indipendentemente dallo stato del wallet</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2918"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3096"/> <source>Force generation of multisig sync info regardless of wallet state, to recover from special situations like "stale data" errors</source> - <translation type="unfinished"></translation> + <translation>Generazione forzata di informazioni di sincronizzazione multifirma indipendente dallo stato del wallet, per il ripristino da situazioni speciali come errori di "stale data"</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2922"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3100"/> <source>Initiate transfer with MMS support; arguments identical to normal 'transfer' command arguments, for info see there</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2926"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3104"/> <source>Delete a single message by giving its id, or delete all messages by using 'all'</source> - <translation type="unfinished"></translation> + <translation>Elimina un singolo messaggio inserendo il suo id, o cancella tutti i messaggi usando 'all'</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2930"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3108"/> <source>Send a single message by giving its id, or send all waiting messages</source> - <translation type="unfinished"></translation> + <translation>Invia un singolo messaggio inserendo il suo id o inviando tutti i messaggi in attesa</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2934"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3112"/> <source>Check right away for new messages to receive</source> - <translation type="unfinished"></translation> + <translation>Controlla subito i nuovi messaggi da ricevere</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2938"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3116"/> <source>Write the content of a message to a file "mms_message_content"</source> - <translation type="unfinished"></translation> + <translation>Scrivi il contenuto di un messaggio in un file "mms_message_content"</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2942"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3120"/> <source>Send a one-line message to an authorized signer, identified by its label, or show any waiting unread notes</source> - <translation type="unfinished"></translation> + <translation>Invia un messaggio di una linea a un firmatario autorizzato, identificato dalla sua etichetta, o mostra eventuali note non lette in attesa</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2946"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3124"/> <source>Show detailed info about a single message</source> - <translation type="unfinished"></translation> + <translation>Mostra informazioni dettagliate su un singolo messaggio</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2950"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3128"/> <source>Available options: auto-send <1|0> Whether to automatically send newly generated messages right away. @@ -2876,27 +3057,27 @@ By using 'sync' processing of waiting messages with multisig sync info <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3134"/> <source>Send completed signer config to all other authorized signers</source> - <translation type="unfinished"></translation> + <translation>Invia la configurazione completa del firmatario a tutti gli altri firmatari autorizzati</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2960"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3138"/> <source>Start auto-config at the auto-config manager's wallet by issuing auto-config tokens and optionally set others' labels</source> - <translation type="unfinished"></translation> + <translation>Avvia auto-config sul portafoglio del gestore automatico di configurazione emettendo i token di auto-configurazione e opzionalmente imposta le etichette degli altri</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2964"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3142"/> <source>Delete any auto-config tokens and abort a auto-config process</source> - <translation type="unfinished"></translation> + <translation>Elimina tutti i token di configurazione automatica e interrompi il processo di configurazione automatica</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2968"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3146"/> <source>Start auto-config by using the token received from the auto-config manager</source> - <translation type="unfinished"></translation> + <translation>Avviare la configurazione automatica utilizzando il token ricevuto dal gestore di configurazione automatica</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2972"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3150"/> <source>Print the ring(s) used to spend a given key image or transaction (if the ring size is > 1) Output format: @@ -2904,1616 +3085,1680 @@ Key Image, "absolute", list of rings</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2978"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3156"/> <source>Set the ring used for a given key image, so it can be reused in a fork</source> - <translation type="unfinished"></translation> + <translation>Imposta l'anello utilizzato per una determinata immagine chiave, in modo che possa essere riutilizzato in un fork</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2982"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3164"/> <source>Save known rings to the shared rings database</source> - <translation type="unfinished"></translation> + <translation>Salva gli anelli noti nel database degli anelli condivisi</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2986"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3168"/> <source>Mark output(s) as spent so they never get selected as fake outputs in a ring</source> - <translation type="unfinished"></translation> + <translation>Contrassegna gli output come spesi in modo che non vengano mai selezionati come output falsi in un anello</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2990"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3172"/> <source>Marks an output as unspent so it may get selected as a fake output in a ring</source> - <translation type="unfinished"></translation> + <translation>Contrassegna un output come non speso in modo che possa essere selezionato come un falso output in un anello</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2994"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3176"/> <source>Checks whether an output is marked as spent</source> - <translation type="unfinished"></translation> + <translation>Controlla se un output è contrassegnato come speso</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2998"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3200"/> <source>Returns version information</source> - <translation type="unfinished"></translation> + <translation>Restituisce informazioni sulla versione</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3087"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3297"/> <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>completo (più lento, nessuna ipotesi); optimize-coinbase (veloce, ipotizza che l'intero coinbase viene pagato ad un indirizzo singolo); no-coinbase (il più veloce, ipotizza di non ricevere una transazione coinbase), default (come optimize-coinbase)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3298"/> <source>0, 1, 2, 3, or 4, or one of </source> - <translation type="unfinished"></translation> + <translation>0, 1, 2, 3 o 4 o uno di </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3090"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3300"/> <source>0|1|2 (or never|action|decrypt)</source> - <translation type="unfinished"></translation> + <translation>0|1|2 (o never|action|decrypt)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3091"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3301"/> <source>monero, millinero, micronero, nanonero, piconero</source> <translation>monero, millinero, micronero, nanonero, piconero</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3102"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3312"/> <source><major>:<minor></source> - <translation type="unfinished"></translation> + <translation><major>:<minor></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3106"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3317"/> <source><device_name[:device_spec]></source> - <translation type="unfinished"></translation> + <translation><device_name[:device_spec]></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3127"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3338"/> <source>wrong number range, use: %s</source> - <translation type="unfinished"></translation> + <translation>intervallo di numeri errato, utilizzare: %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3377"/> <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="3183"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3394"/> <source>Wallet and key files found, loading...</source> <translation>Portafoglio e chiavi trovate, sto caricando...</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3189"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> <source>Key file found but not wallet file. Regenerating...</source> <translation>Ho trovato la chiave ma non il portafoglio. Sto rigenerando...</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3195"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3406"/> <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="3214"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3425"/> <source>Generating new wallet...</source> <translation>Sto generando un nuovo portafoglio...</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3232"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3443"/> <source>NOTE: the following %s can be used to recover access to your wallet. 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> + <translation>NOTA: il seguente %s può essere utilizzato per recuperare l'accesso al tuo portafoglio. Scrivili e salvali in un posto sicuro e protetto. Si prega di non archiviarli nella propria e-mail o in servizi di archiviazione di file al di fuori del proprio immediato controllo. +</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3445"/> <source>string</source> - <translation type="unfinished"></translation> + <translation>stringa</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3445"/> <source>25 words</source> - <translation type="unfinished"></translation> + <translation>25 parole</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3273"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3506"/> <source>Can't specify more than one of --testnet and --stagenet</source> - <translation type="unfinished"></translation> + <translation>Non è possibile specificare più di un --testnet e --stagenet</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3285"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3521"/> <source>can't specify more than one of --generate-new-wallet="wallet_name", --wallet-file="wallet_name", --generate-from-view-key="wallet_name", --generate-from-spend-key="wallet_name", --generate-from-keys="wallet_name", --generate-from-multisig-keys="wallet_name", --generate-from-json="jsonfilename" and --generate-from-device="wallet_name"</source> - <translation type="unfinished"></translation> + <translation>non è possibile specificare più di un --generate-new-wallet="wallet_name", --wallet-file="wallet_name", --generate-from-view-key="wallet_name", --generate-from-spend-key="wallet_name", --generate-from-keys="wallet_name", --generate-from-multisig-keys="wallet_name", --generate-from-json="jsonfilename" and --generate-from-device="wallet_name"</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3312"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3548"/> <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="3364"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3600"/> <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="3369"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3605"/> <source>Enter seed offset passphrase, empty if none</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3395"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3415"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3450"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3470"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3490"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3505"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3553"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3578"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3594"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3633"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3630"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3650"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3686"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3707"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3727"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3742"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3791"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3816"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3832"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3871"/> <source>No data supplied, cancelled</source> <translation>Nessun dato fornito, cancellato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3401"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3476"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3584"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5371"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5969"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6243"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6818"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6886"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6950"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7154"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8193"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8454"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3713"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3822"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5770"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6360"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6631"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7218"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7286"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7350"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7554"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8899"/> <source>failed to parse address</source> <translation>impossibile fare il parsing dell'indirizzo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3421"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3511"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3656"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3748"/> <source>failed to parse view key secret key</source> <translation>impossibile fare il parsing chiave di visualizzazione chiave segreta</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3430"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3528"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3665"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3765"/> <source>failed to verify view key secret key</source> <translation>impossibile verificare chiave di visualizzazione chiave segreta</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3434"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3532"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3613"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3669"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3769"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3851"/> <source>view key does not match standard address</source> <translation>la chiave di visualizzazione non corrisponde all'indirizzo standard</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3439"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3459"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3536"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3669"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3674"/> <location filename="../src/simplewallet/simplewallet.cpp" line="3695"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3726"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3773"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3907"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3934"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3966"/> <source>account creation failed</source> <translation>creazione dell'account fallita</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3455"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3496"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3638"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3691"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3733"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3876"/> <source>failed to parse spend key secret key</source> <translation>impossibile fare il parsing chiave di spesa chiave segreta</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3520"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3658"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3757"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3896"/> <source>failed to verify spend key secret key</source> <translation>impossibile verificare chiave di spesa chiave segreta</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3524"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3663"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3761"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3901"/> <source>spend key does not match standard address</source> <translation>la chiave di spesa non corrisponde all'indirizzo standard</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3701"/> - <source>No restore height is specified.</source> - <translation type="unfinished"></translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="3866"/> + <source>Secret spend key (%u of %u)</source> + <translation>Chiave di spesa segreta (%u di %u)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3702"/> - <source>Assumed you are creating a new account, restore will be done from current estimated blockchain height.</source> - <translation type="unfinished"></translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="3941"/> + <source>No restore height is specified.</source> + <translation>Nessuna altezza di ripristino specificata.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3703"/> - <source>Use --restore-height if you want to restore an already setup account from a specific height</source> - <translation type="unfinished"></translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="3942"/> + <source>Assumed you are creating a new account, restore will be done from current estimated blockchain height.</source> + <translation>Supponendo che si stia creando un nuovo account, il ripristino verrà effettuato dall'attuale altezza stimata sulla blockchain.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3707"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3947"/> <source>account creation aborted</source> - <translation type="unfinished"></translation> + <translation>creazione account interrotta</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3717"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3957"/> <source>specify a wallet path with --generate-new-wallet (not --wallet-file)</source> <translation>specifica un percorso per il portafoglio con --generate-new-wallet (non --wallet-file)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3816"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4069"/> <source>can't specify --subaddress-lookahead and --wallet-file at the same time</source> - <translation type="unfinished"></translation> + <translation>non è possibile specificare --subaddress-lookahead e --wallet-file nello stesso momento</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3820"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4073"/> <source>failed to open account</source> <translation>impossibile aprire account</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3824"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4391"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4444"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4529"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6854"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4078"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4779"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4832"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4917"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7254"/> <source>wallet is null</source> <translation>il portafoglio è nullo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3832"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4086"/> <source>Failed to initialize ring database: privacy enhancing features will be inactive</source> - <translation type="unfinished"></translation> + <translation>Impossibile inizializzare il database degli anelli: le funzionalità di miglioramento della privacy non saranno attive</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3917"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4194"/> <source>If your display freezes, exit blind with ^C, then run again with --use-english-language-names</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3935"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3940"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4212"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4217"/> <source>invalid language choice entered. Please try again. </source> - <translation>linguaggio selezionato scorretto. Prova di nuovo.</translation> + <translation>la lingua selezionata non è corretta. Prova di nuovo. +</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4019"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4296"/> <source>View key: </source> <translation>Chiave di visualizzazione: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4407"/> <source>Generated new wallet on hw device: </source> - <translation type="unfinished"></translation> + <translation>Generato un nuovo portafoglio sul dispositivo hw: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4209"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4486"/> <source>Key file not found. Failed to open wallet</source> - <translation type="unfinished"></translation> + <translation>File della chiave non trovato. Impossibile aprire il portafoglio</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4286"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4563"/> <source>You may want to remove the file "%s" and try again</source> <translation>Potresti voler rimuovere il file "%s" e provare di nuovo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4314"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4591"/> <source>failed to deinitialize wallet</source> <translation>deinizializzazione portafoglio fallita</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4367"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4644"/> <source>Watch only wallet saved as: </source> - <translation type="unfinished"></translation> + <translation>Portafoglio solo-lettura salvato come: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4371"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4648"/> <source>Failed to save watch only wallet: </source> - <translation type="unfinished"></translation> + <translation>Impossibile salvare il portafoglio in sola lettura: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4382"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5024"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8522"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4770"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5432"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8967"/> <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="4498"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4886"/> <source>Expected trusted or untrusted, got </source> - <translation type="unfinished"></translation> + <translation>Previsto fidato o non fidato, ottenuto </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4515"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4903"/> <source>trusted</source> - <translation type="unfinished"></translation> + <translation>fidato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4515"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4903"/> <source>untrusted</source> - <translation type="unfinished"></translation> + <translation>non fidato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4539"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4927"/> <source>blockchain can't be saved: </source> <translation>impossibile salvare la blockchain: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4569"/> - <source>NOTE: this transaction uses an encrypted payment ID: consider using subaddresses instead</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4572"/> - <source>WARNING: this transaction uses an unencrypted payment ID: consider using subaddresses instead</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4608"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4992"/> <source>Password needed (%s) - use the refresh command</source> - <translation type="unfinished"></translation> + <translation>Password necessaria (%s) - usa il comando refresh</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4616"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5000"/> <source>Enter password</source> - <translation type="unfinished"></translation> + <translation>Inserisci la password</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4631"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5015"/> <source>Device requires attention</source> - <translation type="unfinished"></translation> + <translation>Il dispositivo richiede attenzione</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4639"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5023"/> <source>Enter device PIN</source> - <translation type="unfinished"></translation> + <translation>Inserisci il PIN del dispositivo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4641"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5025"/> <source>Failed to read device PIN</source> - <translation type="unfinished"></translation> + <translation>Impossibile leggere il PIN del dispositivo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4648"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5032"/> <source>Please enter the device passphrase on the device</source> - <translation type="unfinished"></translation> + <translation>Inserisci la passphrase del dispositivo sul dispositivo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4655"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5039"/> <source>Enter device passphrase</source> - <translation type="unfinished"></translation> + <translation>Immettere la passphrase del dispositivo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4657"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5041"/> <source>Failed to read device passphrase</source> - <translation type="unfinished"></translation> + <translation>Impossibile leggere la passphrase del dispositivo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4673"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5057"/> <source>The first refresh has finished for the HW-based wallet with received money. hw_key_images_sync is needed. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4675"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4753"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5059"/> <source>Do you want to do it now? (Y/Yes/N/No): </source> - <translation type="unfinished"></translation> + <translation>Vuoi procedere adesso? (Y/Yes/N/No): </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4677"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5061"/> <source>hw_key_images_sync skipped. Run command manually before a transfer.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4720"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5038"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5446"/> <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="4724"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5042"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5127"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5450"/> <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="4734"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5137"/> <source>refresh error: </source> <translation>errore refresh: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4782"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5185"/> <source> (Some owned outputs have missing key images - import_key_images needed)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4786"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5194"/> <source>Balance: </source> <translation>Bilancio: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4855"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5263"/> <source>Invalid keyword: </source> - <translation type="unfinished"></translation> + <translation>Parola chiave non valida: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4893"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5301"/> <source>pubkey</source> <translation>pubkey</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4893"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5301"/> <source>key image</source> <translation>immagine chiave</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4910"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5318"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>unlocked</source> <translation>sbloccato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> <source>ringct</source> <translation>ringct</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4904"/> - <source>Heights: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4909"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5317"/> <source>T</source> <translation>T</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4909"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5317"/> <source>F</source> <translation>F</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4910"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5318"/> <source>locked</source> <translation>bloccato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4911"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5319"/> <source>RingCT</source> <translation>RingCT</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4911"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5319"/> <source>-</source> <translation>-</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4990"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5398"/> <source>payment ID has invalid format, expected 16 or 64 character hex string: </source> <translation>l'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="5046"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5454"/> <source>failed to get spent status</source> <translation>impossibile recuperare status spesi</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5538"/> <source>failed to find construction data for tx input</source> + <translation>impossibile trovare i dati di costruzione per l'input tx</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5543"/> + <source> +Input %llu/%llu (%s): amount=%s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5601"/> <source>the same transaction</source> <translation>la stessa transazione</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5601"/> <source>blocks that are temporally very close</source> <translation>i blocchi che sono temporalmente molto vicini</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9015"/> - <source> (Y/Yes/N/No): </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6295"/> + <source>Locked blocks too high, max 1000000 (˜4 yrs)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9042"/> - <source>Choose processing:</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5818"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6387"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6656"/> + <source>No payment id is included with this transaction. Is this okay?</source> + <translation>Nessun ID di pagamento è incluso in questa transazione. Vuoi procedere comunque?</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5882"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5892"/> + <source>Is this okay anyway?</source> + <translation>Vuoi procedere comunque?</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5887"/> + <source>There is currently a %u block backlog at that fee level. Is this okay?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9051"/> - <source>Sign tx</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6124"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6435"/> + <source>Sweeping %s in %llu transactions for a total fee of %s. Is this okay?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9059"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6441"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6698"/> + <source>Sweeping %s for a total fee of %s. Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6177"/> + <source>Discarding %s of unmixable outputs that cannot be spent, which can be undone by "rescan_spent". Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6980"/> + <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min ring size %lu, %s. %sIs this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="8161"/> + <source>Rescan anyway?</source> + <translation>Ripetere comunque la scansione?</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="8654"/> + <source>Short payment IDs are to be used within an integrated address only</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="9457"/> + <source> (Y/Yes/N/No): </source> + <translation> (Y/Yes/N/No): </translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="9484"/> + <source>Choose processing:</source> + <translation>Scegli l'elaborazione:</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="9493"/> + <source>Sign tx</source> + <translation>Firma tx</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="9501"/> <source>Send the tx for submission to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9063"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9505"/> <source>Send the tx for signing to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9070"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9512"/> <source>Submit tx</source> - <translation type="unfinished"></translation> + <translation>Invia tx</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9073"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9515"/> <source>unknown</source> - <translation type="unfinished"></translation> + <translation>sconosciuto</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9079"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9521"/> <source>Choice: </source> - <translation type="unfinished"></translation> + <translation>Scelta: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9091"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9533"/> <source>Wrong choice</source> - <translation type="unfinished"></translation> + <translation>Scelta errata</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9098"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9540"/> <source>Id</source> - <translation type="unfinished"></translation> + <translation>Id</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9098"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9540"/> <source>I/O</source> - <translation type="unfinished"></translation> + <translation>I/O</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9098"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9540"/> <source>Authorized Signer</source> - <translation type="unfinished"></translation> + <translation>Firmatario autorizzato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>Message Type</source> - <translation type="unfinished"></translation> + <translation>Tipo di messaggio</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>Height</source> - <translation type="unfinished"></translation> + <translation>Altezza</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>R</source> - <translation type="unfinished"></translation> + <translation>R</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>Message State</source> - <translation type="unfinished"></translation> + <translation>Stato del messaggio</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>Since</source> - <translation type="unfinished"></translation> + <translation>Da</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9116"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9558"/> <source> ago</source> - <translation type="unfinished"></translation> + <translation> fa</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9122"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9564"/> <source>#</source> - <translation type="unfinished"></translation> + <translation>#</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9122"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9564"/> <source>Transport Address</source> - <translation type="unfinished"></translation> + <translation>Indirizzo di trasporto</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9565"/> <source>Auto-Config Token</source> - <translation type="unfinished"></translation> + <translation>Auto-Config Token</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9565"/> <source>Monero Address</source> - <translation type="unfinished"></translation> + <translation>Indirizzo Monero</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9127"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9135"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9137"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9569"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9577"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9579"/> <source><not set></source> - <translation type="unfinished"></translation> + <translation><not set></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9178"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9620"/> <source>Message </source> - <translation type="unfinished"></translation> + <translation>Messaggio </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9179"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9621"/> <source>In/out: </source> - <translation type="unfinished"></translation> + <translation>In/out: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9623"/> <source>State: </source> - <translation type="unfinished"></translation> + <translation>Stato: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9623"/> <source>%s since %s, %s ago</source> - <translation type="unfinished"></translation> + <translation>%s da %s, %s fa</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9185"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9627"/> <source>Sent: Never</source> - <translation type="unfinished"></translation> + <translation>Inviati: mai</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9189"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9631"/> <source>Sent: %s, %s ago</source> - <translation type="unfinished"></translation> + <translation>inviato/i: %s, %s fa</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9192"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9634"/> <source>Authorized signer: </source> - <translation type="unfinished"></translation> + <translation>Firmatario autorizzato: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9635"/> <source>Content size: </source> - <translation type="unfinished"></translation> + <translation>Dimensione del contenuto: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9635"/> <source> bytes</source> - <translation type="unfinished"></translation> + <translation> bytes</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9194"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9636"/> <source>Content: </source> - <translation type="unfinished"></translation> + <translation>Contenuto: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9194"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9636"/> <source>(binary data)</source> - <translation type="unfinished"></translation> + <translation>(dati binari)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9224"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9666"/> <source>Send these messages now?</source> - <translation type="unfinished"></translation> + <translation>Vuoi inviare questi messaggi adesso?</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9676"/> <source>Queued for sending.</source> - <translation type="unfinished"></translation> + <translation>In coda per l'invio.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9254"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9696"/> <source>Invalid message id</source> - <translation type="unfinished"></translation> + <translation>ID messaggio non valido</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9263"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9705"/> <source>usage: mms init <required_signers>/<authorized_signers> <own_label> <own_transport_address></source> - <translation type="unfinished"></translation> + <translation>utilizzo: mms init <required_signers>/<authorized_signers> <own_label> <own_transport_address></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9269"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9711"/> <source>The MMS is already initialized. Re-initialize by deleting all signer info and messages?</source> - <translation type="unfinished"></translation> + <translation>L'MMS è già inizializzato. Reinizializzare eliminando tutte le informazioni e i messaggi del firmatario?</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9284"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9726"/> <source>Error in the number of required signers and/or authorized signers</source> - <translation type="unfinished"></translation> + <translation>Errore nel numero di firmatari richiesti e/o firmatari autorizzati</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9301"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9743"/> <source>The MMS is not active.</source> - <translation type="unfinished"></translation> + <translation>L'MMS non è attivo.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9324"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9766"/> <source>Invalid signer number </source> - <translation type="unfinished"></translation> + <translation>Numero del firmatario non valido </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9329"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9771"/> <source>mms signer [<number> <label> [<transport_address> [<monero_address>]]]</source> - <translation type="unfinished"></translation> + <translation>mms signer [<number> <label> [<transport_address> [<monero_address>]]]</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9348"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9790"/> <source>Invalid Monero address</source> - <translation type="unfinished"></translation> + <translation>Indirizzo Monero non valido</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9355"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9797"/> <source>Wallet state does not allow changing Monero addresses anymore</source> - <translation type="unfinished"></translation> + <translation>Lo stato del portafoglio non consente più di modificare gli indirizzi Monero</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9367"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9809"/> <source>Usage: mms list</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9380"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9822"/> <source>Usage: mms next [sync]</source> - <translation type="unfinished"></translation> + <translation>Utilizzo: mms next [sync]</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9405"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9847"/> <source>No next step: </source> - <translation type="unfinished"></translation> + <translation>Nessun passo successivo: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9415"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9857"/> <source>prepare_multisig</source> - <translation type="unfinished"></translation> + <translation>prepare_multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9421"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9863"/> <source>make_multisig</source> - <translation type="unfinished"></translation> + <translation>make_multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9436"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9878"/> <source>exchange_multisig_keys</source> - <translation type="unfinished"></translation> + <translation>exchange_multisig_keys</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9451"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9893"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10013"/> <source>export_multisig_info</source> - <translation type="unfinished"></translation> + <translation>export_multisig_info</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9460"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9902"/> <source>import_multisig_info</source> - <translation type="unfinished"></translation> + <translation>import_multisig_info</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9473"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9915"/> <source>sign_multisig</source> - <translation type="unfinished"></translation> + <translation>sign_multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9483"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9925"/> <source>submit_multisig</source> - <translation type="unfinished"></translation> + <translation>submit_multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9493"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9935"/> <source>Send tx</source> - <translation type="unfinished"></translation> + <translation>Invia tx</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9504"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9946"/> <source>Process signer config</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9516"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9958"/> <source>Replace current signer config with the one displayed above?</source> - <translation type="unfinished"></translation> + <translation>Sostituire la configurazione attuale del firmatario con quella visualizzata sopra?</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9530"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9972"/> <source>Process auto config data</source> - <translation type="unfinished"></translation> + <translation>Elabora dati di configurazione automatica</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9544"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9986"/> <source>Nothing ready to process</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9564"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10006"/> <source>Usage: mms sync</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9588"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10030"/> <source>Usage: mms delete (<message_id> | all)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9595"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10037"/> <source>Delete all messages?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9621"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10063"/> <source>Usage: mms send [<message_id>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9638"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10080"/> <source>Usage: mms receive</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9655"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10097"/> <source>Usage: mms export <message_id></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9667"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10109"/> <source>Message content saved to: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9671"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10113"/> <source>Failed to to save message content</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9695"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10137"/> <source>Usage: mms note [<label> <text>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9702"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10144"/> <source>No signer found with label </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9724"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10166"/> <source>Usage: mms show <message_id></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9743"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10185"/> <source>Usage: mms set <option_name> [<option_value>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9760"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10202"/> <source>Wrong option value</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9765"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10207"/> <source>Auto-send is on</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9765"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10207"/> <source>Auto-send is off</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9770"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10212"/> <source>Unknown option</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9778"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10220"/> <source>Usage: mms help [<subcommand>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9794"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10236"/> <source>Usage: mms send_signer_config</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9800"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10242"/> <source>Signer config not yet complete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9815"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10257"/> <source>Usage: mms start_auto_config [<label> <label> ...]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9820"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10262"/> <source>There are signers without a label set. Complete labels before auto-config or specify them as parameters here.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9826"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10268"/> <source>Auto-config is already running. Cancel and restart?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9850"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10292"/> <source>Usage: mms stop_auto_config</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9853"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10295"/> <source>Delete any auto-config tokens and stop auto-config?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9866"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10308"/> <source>Usage: mms auto_config <auto_config_token></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9873"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10315"/> <source>Invalid auto-config token</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9879"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10321"/> <source>Auto-config already running. Cancel and restart?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9911"/> - <source>The MMS is not active. Activate using the "mms init" command</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="10339"/> + <source>MMS not available in this wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9988"/> - <source>Invalid MMS subcommand</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9993"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9997"/> - <source>Error in MMS command: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="10363"/> + <source>The MMS is not active. Activate using the "mms init" command</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5481"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5491"/> - <source>Is this okay anyway? (Y/Yes/N/No): </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="10440"/> + <source>Invalid MMS subcommand</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5486"/> - <source>There is currently a %u block backlog at that fee level. Is this okay? (Y/Yes/N/No): </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="10445"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10449"/> + <source>Error in MMS command: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5491"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5892"/> <source>Failed to check for backlog: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5532"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6032"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5933"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6423"/> <source> Transaction </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5537"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6037"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5938"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6428"/> <source>Spending from address index %d </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5539"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6039"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5940"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6430"/> <source>WARNING: Outputs of multiple addresses are being used together, which might potentially compromise your privacy. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6213"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6601"/> <source>failed to parse Payment ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6236"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2078"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2125"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6624"/> <source>failed to parse key image</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6290"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6678"/> <source>No outputs found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6295"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6683"/> <source>Multiple transactions are created, which is not supposed to happen</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6300"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6688"/> <source>The transaction uses multiple or no inputs, which is not supposed to happen</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6377"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6765"/> <source>missing threshold amount</source> <translation>manca la soglia massima dell'ammontare</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6382"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6770"/> <source>invalid amount threshold</source> <translation>ammontare soglia invalido</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6530"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6933"/> <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="6969"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7079"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7369"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7479"/> <source>Good signature</source> <translation>Firma valida</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6996"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7081"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7396"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7481"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7581"/> <source>Bad signature</source> <translation>Firma invalida</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8169"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8612"/> <source>Standard address: </source> <translation>Indirizzo standard: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8174"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8617"/> <source>failed to parse payment ID or address</source> <translation>impossibile fare il parsing di ID pagamento o indirizzo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8215"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8659"/> <source>failed to parse payment ID</source> <translation>impossibile fare il parsing di ID pagamento</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8233"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8677"/> <source>failed to parse index</source> <translation>impossibile fare il parsing dell'indice</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8241"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8685"/> <source>Address book is empty.</source> <translation>La rubrica è vuota.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8247"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8691"/> <source>Index: </source> <translation>Indice: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8248"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8378"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8692"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8823"/> <source>Address: </source> <translation>Indirizzo: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8249"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8693"/> <source>Payment ID: </source> <translation>ID Pagamento: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8250"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8377"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8694"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8822"/> <source>Description: </source> <translation>Descrizione: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8407"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8852"/> <source>wallet is watch-only and cannot sign</source> <translation>il portafoglio è di tipo solo-visualizzazione e non può firmare</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1289"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8421"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8447"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8684"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1313"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8866"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8892"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9124"/> <source>failed to read file </source> <translation>impossibile leggere il file </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6958"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7072"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3943"/> + <source>Use --restore-height or --restore-date if you want to restore an already setup account from a specific height.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3945"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4033"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5984"/> + <source>Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4056"/> + <source>Still apply restore height?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="7358"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7472"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7566"/> <source>failed to load signature file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7020"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7420"/> <source>wallet is watch-only and cannot generate the proof</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7104"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7504"/> <source>The reserve proof can be generated only by a full wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7159"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7559"/> <source>Address must not be a subaddress</source> <translation type="unfinished">L'indirizzo non può essere un sottoindirizzo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7177"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7577"/> <source>Good signature -- total: %s, spent: %s, unspent: %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7365"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7767"/> <source>[Double spend seen on the network: this transaction may or may not end up being mined] </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7641"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8045"/> <source>There is no unspent output in the specified address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7799"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8242"/> <source> (no daemon)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7801"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8244"/> <source> (out of sync)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7852"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8295"/> <source>(Untitled account)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7865"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7883"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7908"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7931"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8077"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8100"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8308"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8326"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8351"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8374"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8520"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8543"/> <source>failed to parse index: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7870"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8082"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8313"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8525"/> <source>specify an index between 0 and </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7988"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8431"/> <source> Grand total: Balance: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7988"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8431"/> <source>, unlocked balance: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7996"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8439"/> <source>Untagged accounts:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8002"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8445"/> <source>Tag %s is unregistered.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8005"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8448"/> <source>Accounts with tag: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8006"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8449"/> <source>Tag's description: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8451"/> <source>Account</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8014"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8457"/> <source> %c%8u %6s %21s %21s %21s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8024"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8467"/> <source>----------------------------------------------------------------------------------</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8025"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8468"/> <source>%15s %21s %21s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8048"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8491"/> <source>Primary address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8048"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8491"/> <source>(used)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8069"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8512"/> <source>(Untitled address)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8109"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8552"/> <source><index_min> is already out of bound</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8114"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8557"/> <source><index_max> exceeds the bound</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8140"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8152"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8583"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8595"/> <source>Integrated addresses can only be created for account 0</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8164"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8607"/> <source>Integrated address: %s, payment ID: %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8169"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8612"/> <source>Subaddress: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8335"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8779"/> <source>no description found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8337"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8781"/> <source>description found: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8376"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8821"/> <source>Filename: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8381"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8826"/> <source>Watch only</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8383"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8828"/> <source>%u/%u multisig%s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8385"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8830"/> <source>Normal</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8386"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9180"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8831"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9622"/> <source>Type: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8412"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8857"/> <source>This wallet is multisig and cannot sign</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8461"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8906"/> <source>Bad signature from </source> <translation>Firma non valida da </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8465"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8910"/> <source>Good signature from </source> <translation>Firma valida da </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8484"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8929"/> <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="1228"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8498"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8651"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1252"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8943"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9091"/> <source>failed to save file </source> <translation>impossibile salvare file </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8509"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8954"/> <source>Signed key images exported to </source> <translation>Chiave immagine firmata esportata in </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8662"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9102"/> <source>Outputs exported to </source> <translation>Outputs esportati in </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5354"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6417"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7115"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7600"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7608"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5752"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6805"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7515"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8004"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8012"/> <source>amount is wrong: </source> <translation>l'ammontare non è corretto: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5355"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6417"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5753"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6805"/> <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="5721"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6122"/> <source>Sweeping </source> <translation>Eseguendo lo sweeping </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6350"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6738"/> <source>Money successfully sent, transaction: </source> <translation>Fondi inviati con successo, transazione: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6974"/> <source>%s change to %s</source> <translation>%s cambia in %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6574"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6977"/> <source>no change</source> <translation>nessun cambiamento</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1435"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1448"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6646"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1459"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1472"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7049"/> <source>Transaction successfully signed to file </source> <translation>Transazione firmata con successo nel file </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6713"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6749"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6811"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6860"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6942"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7027"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7062"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8267"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8295"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8714"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7116"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7154"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7211"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7260"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7342"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7427"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7462"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8711"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8739"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9154"/> <source>failed to parse txid</source> <translation>parsing txid fallito</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6727"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7132"/> <source>Tx key: </source> <translation>Chiave Tx: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6732"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7137"/> <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="6829"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7041"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7229"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7441"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7530"/> <source>signature file saved to: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6831"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7043"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7132"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7231"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7443"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7532"/> <source>failed to save signature file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6868"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6877"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7268"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7277"/> <source>failed to parse tx key</source> <translation>impossibile fare il parsing della chiave tx</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6835"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6923"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7001"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7235"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7323"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7401"/> <source>error: </source> <translation>errore: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6899"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6972"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7299"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7372"/> <source>received</source> <translation>ricevuto/i</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6899"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6972"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7299"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7372"/> <source>in txid</source> <translation>in txid</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6918"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6991"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7318"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7391"/> <source>received nothing in txid</source> <translation>nulla ricevuto in txid</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6902"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6975"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7375"/> <source>WARNING: this transaction is not yet included in the blockchain!</source> <translation>AVVISO: questa transazione non è ancora inclusa nella blockchain!</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6908"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6981"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7308"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7381"/> <source>This transaction has %u confirmations</source> <translation>Questa transazione ha %u conferme</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6912"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6985"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7312"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7385"/> <source>WARNING: failed to determine number of confirmations!</source> <translation>AVVISO: impossibile determinare il numero di conferme!</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7266"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7666"/> <source>bad min_height parameter:</source> <translation>parametro min_height non corretto:</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7278"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7678"/> <source>bad max_height parameter:</source> <translation>parametro max_height non corretto:</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7296"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7696"/> <source>in</source> <translation>in</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7615"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8019"/> <source><min_amount> should be smaller than <max_amount></source> <translation><min_amount> dovrebbe essere più piccolo di <max_amount></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7647"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8051"/> <source> Amount: </source> <translation> Ammontare: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7647"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8051"/> <source>, number of keys: </source> <translation>, numero di chiavi: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7652"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8056"/> <source> </source> <translation> </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7657"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8061"/> <source> Min block height: </source> <translation> Altezza minima blocco: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7658"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8062"/> <source> Max block height: </source> <translation> Altezza massima blocco: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7659"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8063"/> <source> Min amount found: </source> <translation> Ammontare minimo trovato: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7660"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8064"/> <source> Max amount found: </source> <translation> Ammontare massimo trovato: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7661"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8065"/> <source> Total count: </source> <translation> Conto totale: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7701"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8105"/> <source> Bin size: </source> <translation> Dimensione Bin: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7702"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8106"/> <source> Outputs per *: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7704"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8108"/> <source>count ^ </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7706"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8110"/> <source> |</source> <translation> |</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7708"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8112"/> <source> +</source> <translation> +</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7708"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8112"/> <source>+--> block height </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8113"/> <source> ^</source> <translation> ^</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8113"/> <source>^ </source> <translation>^ </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7710"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8114"/> <source> </source> <translation> </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7797"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8240"/> <source>wallet</source> <translation>portafoglio</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="870"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8144"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="893"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8587"/> <source>Random payment ID: </source> <translation>ID pagamento casuale: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8145"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8588"/> <source>Matching integrated address: </source> <translation>Indirizzo integrato corrispondente: </translation> </message> @@ -4699,7 +4944,7 @@ Use "mms note" to display the waiting notes</source> <message> <location filename="../src/wallet/message_store.cpp" line="1369"/> <source>note</source> - <translation type="unfinished"></translation> + <translation type="unfinished">nota</translation> </message> <message> <location filename="../src/wallet/message_store.cpp" line="1371"/> @@ -4765,311 +5010,321 @@ Use "mms note" to display the waiting notes</source> <context> <name>sw</name> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="125"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="135"/> <source>Generate new wallet and save it to <arg></source> <translation>Genera un nuovo portafoglio e salvalo in <arg></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="126"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="136"/> <source>Generate new wallet from device and save it to <arg></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="127"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="137"/> <source>Generate incoming-only wallet from view key</source> <translation>Genera un portafoglio solo-ricezione da chiave di visualizzazione</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="128"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="138"/> <source>Generate deterministic wallet from spend key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="129"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="139"/> <source>Generate wallet from private keys</source> <translation>Genera portafoglio da chiavi private</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="140"/> <source>Generate a master wallet from multisig wallet keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="132"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="142"/> <source>Language for mnemonic</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="133"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="143"/> <source>Specify Electrum seed for wallet recovery/creation</source> <translation>Specifica il seed stile Electrum per recuperare/creare il portafoglio</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="134"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="144"/> <source>Recover wallet using Electrum-style mnemonic seed</source> <translation>Recupera portafoglio usando il seed mnemonico stile-Electrum</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="135"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="145"/> <source>Recover multisig wallet using Electrum-style mnemonic seed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="136"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="146"/> <source>Generate non-deterministic view and spend keys</source> <translation>Crea chiavi di visualizzione e chiavi di spesa non-deterministiche</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="361"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="149"/> + <source>Restore from estimated blockchain height on specified date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="382"/> <source>invalid argument: must be either 0/1, true/false, y/n, yes/no</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="417"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="438"/> <source>DNSSEC validation passed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="421"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="442"/> <source>WARNING: DNSSEC validation was unsuccessful, this address may not be correct!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="424"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="445"/> <source>For URL: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="426"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="447"/> <source> Monero Address = </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="428"/> - <source>Is this OK? (Y/n) </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="438"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="459"/> <source>you have cancelled the transfer request</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="459"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="480"/> <source>failed to parse index: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="472"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="493"/> <source>invalid format for subaddress lookahead; must be <major>:<minor></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="489"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="510"/> <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="494"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="515"/> <source>RPC error: </source> <translation type="unfinished">errore RPC: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="498"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="519"/> <source>failed to get random outputs to mix: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="505"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="513"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="526"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="534"/> <source>Not enough money in unlocked balance</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Fondi insufficienti in saldo sbloccato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="523"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="544"/> <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="529"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="550"/> <source>not enough outputs for specified ring size</source> <translation type="unfinished">insufficiente numero di output per il ring size specificato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="532"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="553"/> <source>output amount</source> <translation type="unfinished">ammontare output</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="532"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="553"/> <source>found outputs to use</source> <translation type="unfinished">trovati output che possono essere usati</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="534"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="555"/> <source>Please use sweep_unmixable.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="538"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="559"/> <source>transaction was not constructed</source> <translation type="unfinished">transazione non costruita</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="543"/> - <source>transaction %s was rejected by daemon with status: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="546"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="567"/> <source>Reason: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="555"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="576"/> <source>one of destinations is zero</source> <translation type="unfinished">una delle destinazioni è zero</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="560"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="581"/> <source>failed to find a suitable way to split transactions</source> <translation type="unfinished">impossibile trovare un modo per dividere le transazioni</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="566"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="587"/> <source>unknown transfer error: </source> <translation type="unfinished">errore trasferimento sconosciuto: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="592"/> <source>Multisig error: </source> <translation type="unfinished">Errore multisig: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="577"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="598"/> <source>internal error: </source> <translation type="unfinished">errore interno: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="582"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="603"/> <source>unexpected error: </source> <translation type="unfinished">errore inaspettato: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="586"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="607"/> <source>There was an error, which could mean the node may be trying to get you to retry creating a transaction, and zero in on which outputs you own. Or it could be a bona fide error. It may be prudent to disconnect from this node, and not try to send a transaction immediately. Alternatively, connect to another node so the original node cannot correlate information.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="596"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="617"/> <source>File %s likely stores wallet private keys! Use a different file name.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="599"/> - <source>File %s already exists. Are you sure to overwrite it? (Y/Yes/N/No): </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7195"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7595"/> <source> seconds</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7197"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7597"/> <source> minutes</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7199"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7599"/> <source> hours</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7601"/> <source> days</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7203"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7603"/> <source> months</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7204"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7604"/> <source>a long time</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8940"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9382"/> <source>This is the command line monero wallet. It needs to connect to a monero daemon to work correctly. WARNING: Do not reuse your Monero keys on another fork, UNLESS this fork has key reuse mitigations built in. Doing so will harm your privacy.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8965"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9407"/> <source>Unknown command: </source> <translation type="unfinished">Comando sconosciuto: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="137"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="147"/> <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="138"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="148"/> <source>Restore from specific blockchain height</source> <translation>Ripristina da specifico blocco</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="139"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="150"/> <source>The newly created transaction will not be relayed to the monero network</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="140"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="151"/> <source>Create an address file for new wallets</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="142"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="153"/> <source>Display English language names</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="276"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="154"/> + <source>Support obsolete long (unencrypted) payment ids (using them harms your privacy)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="297"/> <source>failed to read wallet password</source> <translation type="unfinished">impossibile leggere la password del portafoglio</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="283"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="304"/> <source>Enter a new password for the wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="283"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="304"/> <source>Wallet password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="293"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="485"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="314"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="506"/> <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="302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="323"/> <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="319"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="340"/> <source>Error: </source> <translation>Errore: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8959"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="449"/> + <source>Is this OK?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="564"/> + <source>transaction %s was rejected by daemon</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="620"/> + <source>File %s already exists. Are you sure to overwrite it?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="9401"/> <source>Failed to initialize wallet</source> <translation>Inizializzazione wallet fallita</translation> </message> @@ -5077,359 +5332,447 @@ WARNING: Do not reuse your Monero keys on another fork, UNLESS this fork has key <context> <name>tools::wallet2</name> <message> - <location filename="../src/wallet/wallet2.cpp" line="201"/> + <location filename="../src/wallet/wallet2.cpp" line="234"/> <source>Use daemon instance at <host>:<port></source> <translation>Usa instanza daemon in <host>:<port></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="202"/> + <location filename="../src/wallet/wallet2.cpp" line="235"/> <source>Use daemon instance at host <arg> instead of localhost</source> <translation>Usa istanza daemon all'host <arg> invece che localhost</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="206"/> + <location filename="../src/wallet/wallet2.cpp" line="240"/> <source>Wallet password file</source> <translation>File password portafoglio</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="207"/> + <location filename="../src/wallet/wallet2.cpp" line="241"/> <source>Use daemon instance at port <arg> instead of 18081</source> <translation>Usa istanza daemon alla porta <arg> invece che alla 18081</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="209"/> + <location filename="../src/wallet/wallet2.cpp" line="250"/> <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="282"/> + <location filename="../src/wallet/wallet2.cpp" line="361"/> <source>can't specify daemon host or port more than once</source> <translation>non puoi specificare la porta o l'host del daemon più di una volta</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="355"/> + <location filename="../src/wallet/wallet2.cpp" line="480"/> <source>can'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="368"/> + <location filename="../src/wallet/wallet2.cpp" line="493"/> <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="394"/> + <location filename="../src/wallet/wallet2.cpp" line="519"/> <source>Failed to load file </source> <translation>Impossibile caricare file </translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="205"/> + <location filename="../src/wallet/wallet2.cpp" line="239"/> <source>Wallet password (escape/quote as needed)</source> <translation>Wallet password (escape/quote se necessario)</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="203"/> + <location filename="../src/wallet/wallet2.cpp" line="236"/> + <source>[<ip>:]<port> socks proxy to use for daemon connections</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="237"/> <source>Enable commands which rely on a trusted daemon</source> <translation type="unfinished">Abilita comandi dipendenti da un daemon fidato</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="204"/> + <location filename="../src/wallet/wallet2.cpp" line="238"/> <source>Disable commands which rely on a trusted daemon</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="208"/> + <location filename="../src/wallet/wallet2.cpp" line="242"/> <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="210"/> + <location filename="../src/wallet/wallet2.cpp" line="243"/> + <source>Enable SSL on daemon RPC connections: enabled|disabled|autodetect</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="247"/> + <source>List of valid fingerprints of allowed RPC servers</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="248"/> + <source>Allow any SSL certificate from the daemon</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="249"/> + <source>Allow user (via --daemon-ssl-ca-certificates) chain certificates</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="251"/> <source>For stagenet. Daemon must also be launched with --stagenet flag</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="212"/> + <location filename="../src/wallet/wallet2.cpp" line="253"/> <source>Set shared ring database path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="223"/> + <location filename="../src/wallet/wallet2.cpp" line="264"/> <source>Number of rounds for the key derivation function</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="224"/> + <location filename="../src/wallet/wallet2.cpp" line="265"/> <source>HW device to use</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="225"/> + <location filename="../src/wallet/wallet2.cpp" line="266"/> <source>HW device wallet derivation path (e.g., SLIP-10)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="313"/> + <location filename="../src/wallet/wallet2.cpp" line="268"/> + <source>Do not use DNS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="269"/> + <source>Do not connect to a daemon, nor use DNS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="353"/> + <source>Invalid argument for </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="397"/> + <source>Enabling --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="397"/> + <source> requires --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="398"/> + <source> or --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="398"/> + <source> or use of a .onion/.i2p domain</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="432"/> <source>--trusted-daemon and --untrusted-daemon are both seen, assuming untrusted</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="323"/> + <location filename="../src/wallet/wallet2.cpp" line="442"/> <source>Daemon is local, assuming trusted</source> <translation type="unfinished">Il daemon è locale, viene considerato fidato</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="375"/> + <location filename="../src/wallet/wallet2.cpp" line="500"/> <source>no password specified; use --prompt-for-password to prompt for a password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="377"/> + <location filename="../src/wallet/wallet2.cpp" line="502"/> <source>Enter a new password for the wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="377"/> + <location filename="../src/wallet/wallet2.cpp" line="502"/> <source>Wallet password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="400"/> + <location filename="../src/wallet/wallet2.cpp" line="525"/> <source>Failed to parse JSON</source> <translation>Impossibile fare il parsing di JSON</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="407"/> + <location filename="../src/wallet/wallet2.cpp" line="532"/> <source>Version %u too new, we can only grok up to %u</source> <translation>La versione %u è troppo recente, possiamo comprendere solo fino alla versione %u</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="423"/> + <location filename="../src/wallet/wallet2.cpp" line="548"/> <source>failed to parse view key secret key</source> <translation>impossibile fare il parsing di chiave di visualizzazione chiave segreta</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="428"/> - <location filename="../src/wallet/wallet2.cpp" line="496"/> - <location filename="../src/wallet/wallet2.cpp" line="539"/> + <location filename="../src/wallet/wallet2.cpp" line="553"/> + <location filename="../src/wallet/wallet2.cpp" line="621"/> + <location filename="../src/wallet/wallet2.cpp" line="666"/> <source>failed to verify view key secret key</source> <translation>impossibile verificare chiave di visualizzazione chiave segreta</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="439"/> + <location filename="../src/wallet/wallet2.cpp" line="564"/> <source>failed to parse spend key secret key</source> <translation>impossibile fare il parsing chiave di spesa chiave segreta</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="444"/> - <location filename="../src/wallet/wallet2.cpp" line="506"/> - <location filename="../src/wallet/wallet2.cpp" line="565"/> + <location filename="../src/wallet/wallet2.cpp" line="569"/> + <location filename="../src/wallet/wallet2.cpp" line="631"/> + <location filename="../src/wallet/wallet2.cpp" line="692"/> <source>failed to verify spend key secret key</source> <translation>impossibile verificare chiave di spesa chiave segreta</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="456"/> + <location filename="../src/wallet/wallet2.cpp" line="581"/> <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="476"/> + <location filename="../src/wallet/wallet2.cpp" line="601"/> <source>At least one of either an Electrum-style word list, private view key, or private spend key must be specified</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="480"/> + <location filename="../src/wallet/wallet2.cpp" line="605"/> <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="490"/> + <location filename="../src/wallet/wallet2.cpp" line="615"/> <source>invalid address</source> <translation>indirizzo invalido</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="499"/> + <location filename="../src/wallet/wallet2.cpp" line="624"/> <source>view key does not match standard address</source> <translation>la chiave di visualizzazione non corrisponde all'indirizzo standard</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="509"/> + <location filename="../src/wallet/wallet2.cpp" line="634"/> <source>spend key does not match standard address</source> <translation>la chiave di spesa non corrisponde all'indirizzo standard</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="517"/> + <location filename="../src/wallet/wallet2.cpp" line="642"/> <source>Cannot generate deprecated wallets from JSON</source> <translation>Impossibile creare portafogli disapprovati da JSON</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="551"/> + <location filename="../src/wallet/wallet2.cpp" line="678"/> <source>failed to parse address: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="557"/> + <location filename="../src/wallet/wallet2.cpp" line="684"/> <source>Address must be specified in order to create watch-only wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="574"/> + <location filename="../src/wallet/wallet2.cpp" line="701"/> <source>failed to generate new wallet: </source> <translation>impossibile generare nuovo portafoglio: </translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="1382"/> + <location filename="../src/wallet/wallet2.cpp" line="1625"/> <source>Password is needed to compute key image for incoming monero</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="1383"/> + <location filename="../src/wallet/wallet2.cpp" line="1626"/> <source>Invalid password: password is needed to compute key image for incoming monero</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="3770"/> - <location filename="../src/wallet/wallet2.cpp" line="4374"/> - <location filename="../src/wallet/wallet2.cpp" line="4926"/> + <location filename="../src/wallet/wallet2.cpp" line="4122"/> + <location filename="../src/wallet/wallet2.cpp" line="4712"/> + <location filename="../src/wallet/wallet2.cpp" line="5308"/> <source>Primary account</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="10157"/> + <location filename="../src/wallet/wallet2.cpp" line="10885"/> <source>No funds received in this tx.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="10899"/> + <location filename="../src/wallet/wallet2.cpp" line="11645"/> <source>failed to read file </source> <translation>lettura file fallita</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="141"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="152"/> <source>Set subaddress lookahead sizes to <major>:<minor></source> <translation type="unfinished"></translation> </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="68"/> + <source>Enable SSL on wallet RPC connections: enabled|disabled|autodetect</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="69"/> + <location filename="../src/wallet/wallet2.cpp" line="244"/> + <source>Path to a PEM format private key</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="70"/> + <location filename="../src/wallet/wallet2.cpp" line="245"/> + <source>Path to a PEM format certificate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="71"/> + <location filename="../src/wallet/wallet2.cpp" line="246"/> + <source>Path to file containing concatenated PEM format certificate(s) to replace system CA(s).</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="72"/> + <source>List of certificate fingerprints to allow</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>tools::wallet_rpc_server</name> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="180"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="192"/> <source>Failed to create directory </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="182"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="194"/> <source>Failed to create directory %s: %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="193"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="205"/> <source>Cannot specify --</source> <translation>Impossibile specificare --</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="193"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="205"/> <source> and --</source> <translation> e --</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="212"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="224"/> <source>Failed to create file </source> <translation>Impossibile creare file </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="212"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="224"/> <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="222"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="234"/> <source>Error writing to file </source> <translation>Errore durante scrittura su file </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="225"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="237"/> <source>RPC username/password is stored in file </source> <translation>Username/password RPC conservato nel file </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="479"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="613"/> <source>Tag %s is unregistered.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3081"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="3242"/> <source>Transaction not possible. Available only %s, transaction amount %s = %s + %s (fee)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3947"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4409"/> <source>This is the RPC monero wallet. It needs to connect to a monero daemon to work correctly.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3788"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4245"/> <source>Can'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="3773"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4230"/> <source>Can't specify more than one of --testnet and --stagenet</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Non è possibile specificare più di un --testnet e --stagenet</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3800"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4257"/> <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="3804"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4261"/> <source>Loading wallet...</source> <translation>Sto caricando il portafoglio...</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3838"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3870"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4295"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4327"/> <source>Saving wallet...</source> <translation>Sto salvando il portafoglio...</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3840"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3872"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4297"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4329"/> <source>Successfully saved</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3843"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4300"/> <source>Successfully loaded</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3847"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4304"/> <source>Wallet initialization failed: </source> <translation>Inizializzazione portafoglio fallita: </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3853"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4310"/> <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="3857"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4314"/> <source>Starting wallet RPC server</source> <translation>Server RPC portafoglio in avvio</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3864"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4321"/> <source>Failed to run wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3867"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4324"/> <source>Stopped wallet RPC server</source> <translation>Server RPC portafoglio arrestato</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3876"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4333"/> <source>Failed to save wallet: </source> <translation>Impossibile salvare portafoglio: </translation> </message> @@ -5438,8 +5781,8 @@ daemon to work correctly.</source> <name>wallet_args</name> <message> <location filename="../src/gen_multisig/gen_multisig.cpp" line="168"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8908"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3928"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4385"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9348"/> <source>Wallet options</source> <translation>Opzioni portafoglio</translation> </message> diff --git a/translations/monero_ja.ts b/translations/monero_ja.ts index 617186da3..c8b0871bf 100644 --- a/translations/monero_ja.ts +++ b/translations/monero_ja.ts @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> -<TS version="2.0" language="ja" sourcelanguage="en"> +<TS version="2.1" language="ja" sourcelanguage="en"> <context> <name>Monero::AddressBookImpl</name> <message> @@ -37,42 +37,42 @@ <translation>取引をファイルに書き込めませんでした</translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="121"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="138"/> <source>daemon is busy. Please try again later.</source> <translation>デーモンは忙しいです。後でもう一度試してください。</translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="124"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="141"/> <source>no connection to daemon. Please make sure daemon is running.</source> <translation>デーモンの接続が確立ありません。デーモンが実行中になっていることを確認してください。</translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="128"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="145"/> <source>transaction %s was rejected by daemon with status: </source> <translation>取引 %s がデーモンによって拒否しました。ステータス: </translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="133"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="150"/> <source>. Reason: </source> <translation>。 理由: </translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="135"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="152"/> <source>Unknown exception: </source> <translation>未知の例外: </translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="138"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="155"/> <source>Unhandled exception</source> <translation>未処理の例外</translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="211"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="228"/> <source>Couldn't multisig sign data: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="233"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="250"/> <source>Couldn't sign multisig transaction: </source> <translation type="unfinished"></translation> </message> @@ -134,384 +134,384 @@ <context> <name>Monero::WalletImpl</name> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1383"/> + <location filename="../src/wallet/api/wallet.cpp" line="1459"/> <source>payment id has invalid format, expected 16 or 64 character hex string: </source> <translation>ペイメントIDのフォーマットは不正です。16文字または64文字の16進数の文字列が必要で: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1392"/> + <location filename="../src/wallet/api/wallet.cpp" line="1468"/> <source>Failed to add short payment id: </source> <translation>短いペイメントIDの追加に失敗しました: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1428"/> <location filename="../src/wallet/api/wallet.cpp" line="1510"/> + <location filename="../src/wallet/api/wallet.cpp" line="1592"/> <source>daemon is busy. Please try again later.</source> <translation>デーモンは忙しいです。後でもう一度試してください。</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1430"/> <location filename="../src/wallet/api/wallet.cpp" line="1512"/> + <location filename="../src/wallet/api/wallet.cpp" line="1594"/> <source>no connection to daemon. Please make sure daemon is running.</source> <translation>デーモンの接続が確立ありません。デーモンが実行中になっていることを確認してください。</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1432"/> <location filename="../src/wallet/api/wallet.cpp" line="1514"/> + <location filename="../src/wallet/api/wallet.cpp" line="1596"/> <source>RPC error: </source> <translation>RPCエラー: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1460"/> - <location filename="../src/wallet/api/wallet.cpp" line="1545"/> + <location filename="../src/wallet/api/wallet.cpp" line="1542"/> + <location filename="../src/wallet/api/wallet.cpp" line="1627"/> <source>not enough outputs for specified ring size</source> <translation>指定したリングサイズのアウトプットが不十分です</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1462"/> - <location filename="../src/wallet/api/wallet.cpp" line="1547"/> + <location filename="../src/wallet/api/wallet.cpp" line="1544"/> + <location filename="../src/wallet/api/wallet.cpp" line="1629"/> <source>found outputs to use</source> <translation>使うためにアウトプットを見つかれました</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1464"/> + <location filename="../src/wallet/api/wallet.cpp" line="1546"/> <source>Please sweep unmixable outputs.</source> <translation>ミックス不能なアウトプットをスイープしてください。</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1438"/> - <location filename="../src/wallet/api/wallet.cpp" line="1521"/> + <location filename="../src/wallet/api/wallet.cpp" line="1520"/> + <location filename="../src/wallet/api/wallet.cpp" line="1603"/> <source>not enough money to transfer, available only %s, sent amount %s</source> <translation>振替でMoneroを受け取ることできません。利用可能な金額: %s, 取引の金額: %s</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="541"/> + <location filename="../src/wallet/api/wallet.cpp" line="589"/> <source>failed to parse address</source> <translation>アドレスの解析に失敗しました</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="552"/> + <location filename="../src/wallet/api/wallet.cpp" line="600"/> <source>failed to parse secret spend key</source> <translation>秘密なスペンドキーの解析に失敗しました</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="575"/> + <location filename="../src/wallet/api/wallet.cpp" line="623"/> <source>failed to parse secret view key</source> <translation>秘密なビューキーの解析に失敗しました</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="584"/> + <location filename="../src/wallet/api/wallet.cpp" line="632"/> <source>failed to verify secret spend key</source> <translation>秘密なスペンドキーの検証に失敗しました</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="588"/> + <location filename="../src/wallet/api/wallet.cpp" line="636"/> <source>spend key does not match address</source> <translation>スペンドキーがアドレスと一致しませんでした</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="594"/> + <location filename="../src/wallet/api/wallet.cpp" line="642"/> <source>failed to verify secret view key</source> <translation>秘密なビューキーの検証に失敗しました</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="598"/> + <location filename="../src/wallet/api/wallet.cpp" line="646"/> <source>view key does not match address</source> <translation>ビューキーがアドレスと一致しませんでした</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="621"/> - <location filename="../src/wallet/api/wallet.cpp" line="638"/> + <location filename="../src/wallet/api/wallet.cpp" line="669"/> + <location filename="../src/wallet/api/wallet.cpp" line="686"/> <source>failed to generate new wallet: </source> <translation>新しいウォレットの生成に失敗しました: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="885"/> + <location filename="../src/wallet/api/wallet.cpp" line="955"/> <source>Failed to send import wallet request</source> <translation>インポートウォレットリクエストの送信に失敗しました</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1049"/> + <location filename="../src/wallet/api/wallet.cpp" line="1125"/> <source>Failed to load unsigned transactions</source> <translation>未署名の取引を読み込めませんでした</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1068"/> + <location filename="../src/wallet/api/wallet.cpp" line="1144"/> <source>Failed to load transaction from file</source> <translation>ファイルからの取引のロードに失敗しました</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1084"/> + <location filename="../src/wallet/api/wallet.cpp" line="1160"/> <source>Wallet is view only</source> <translation>閲覧専用ウォレットです</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1092"/> + <location filename="../src/wallet/api/wallet.cpp" line="1168"/> <source>failed to save file </source> <translation>ファイルを保存できませんでした </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1108"/> + <location filename="../src/wallet/api/wallet.cpp" line="1184"/> <source>Key images can only be imported with a trusted daemon</source> <translation>信頼できるデーモンしかでキーイメージをインポートしません</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1121"/> + <location filename="../src/wallet/api/wallet.cpp" line="1197"/> <source>Failed to import key images: </source> <translation>キーイメージをインポートできませんでした: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1153"/> + <location filename="../src/wallet/api/wallet.cpp" line="1229"/> <source>Failed to get subaddress label: </source> <translation>サブアドレスラベルを取得できませんでした: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1166"/> + <location filename="../src/wallet/api/wallet.cpp" line="1242"/> <source>Failed to set subaddress label: </source> <translation>サブアドレスラベルをセットできませんでした: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="567"/> + <location filename="../src/wallet/api/wallet.cpp" line="615"/> <source>Neither view key nor spend key supplied, cancelled</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="686"/> + <location filename="../src/wallet/api/wallet.cpp" line="734"/> <source>Electrum seed is empty</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="695"/> + <location filename="../src/wallet/api/wallet.cpp" line="743"/> <source>Electrum-style word list failed verification</source> <translation type="unfinished">Electrumな単語表の検証に失敗しました</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1183"/> + <location filename="../src/wallet/api/wallet.cpp" line="1259"/> <source>Failed to get multisig info: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1200"/> - <location filename="../src/wallet/api/wallet.cpp" line="1214"/> + <location filename="../src/wallet/api/wallet.cpp" line="1276"/> + <location filename="../src/wallet/api/wallet.cpp" line="1290"/> <source>Failed to make multisig: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1229"/> + <location filename="../src/wallet/api/wallet.cpp" line="1305"/> <source>Failed to finalize multisig wallet creation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1232"/> + <location filename="../src/wallet/api/wallet.cpp" line="1308"/> <source>Failed to finalize multisig wallet creation: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1248"/> + <location filename="../src/wallet/api/wallet.cpp" line="1324"/> <source>Failed to export multisig images: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1266"/> + <location filename="../src/wallet/api/wallet.cpp" line="1342"/> <source>Failed to parse imported multisig images</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1276"/> + <location filename="../src/wallet/api/wallet.cpp" line="1352"/> <source>Failed to import multisig images: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1290"/> + <location filename="../src/wallet/api/wallet.cpp" line="1366"/> <source>Failed to check for partial multisig key images: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1318"/> + <location filename="../src/wallet/api/wallet.cpp" line="1394"/> <source>Failed to restore multisig transaction: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1358"/> + <location filename="../src/wallet/api/wallet.cpp" line="1434"/> <source>Invalid destination address</source> <translation type="unfinished">不正な宛先アドレス</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1434"/> + <location filename="../src/wallet/api/wallet.cpp" line="1516"/> <source>failed to get outputs to mix: %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1445"/> - <location filename="../src/wallet/api/wallet.cpp" line="1529"/> + <location filename="../src/wallet/api/wallet.cpp" line="1527"/> + <location filename="../src/wallet/api/wallet.cpp" line="1611"/> <source>not enough money to transfer, overall balance only %s, sent amount %s</source> <translation>振替でMoneroを受け取ることできません。利用可能な金額: %s, 取引の金額: %s</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1452"/> - <location filename="../src/wallet/api/wallet.cpp" line="1537"/> + <location filename="../src/wallet/api/wallet.cpp" line="1534"/> + <location filename="../src/wallet/api/wallet.cpp" line="1619"/> <source>not enough money to transfer, available only %s, transaction amount %s = %s + %s (fee)</source> <translation>取引は無理です。利用可能な金額 %s、 取引の金額 %s = %s + %s (手数料)</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1462"/> - <location filename="../src/wallet/api/wallet.cpp" line="1547"/> + <location filename="../src/wallet/api/wallet.cpp" line="1544"/> + <location filename="../src/wallet/api/wallet.cpp" line="1629"/> <source>output amount</source> <translation>アウトプットの金額</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1467"/> - <location filename="../src/wallet/api/wallet.cpp" line="1551"/> + <location filename="../src/wallet/api/wallet.cpp" line="1549"/> + <location filename="../src/wallet/api/wallet.cpp" line="1633"/> <source>transaction was not constructed</source> <translation>取引を作りませんでした</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1470"/> - <location filename="../src/wallet/api/wallet.cpp" line="1554"/> + <location filename="../src/wallet/api/wallet.cpp" line="1552"/> + <location filename="../src/wallet/api/wallet.cpp" line="1636"/> <source>transaction %s was rejected by daemon with status: </source> <translation>取引 %s がデーモンによって拒否しました。ステータス: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1475"/> - <location filename="../src/wallet/api/wallet.cpp" line="1559"/> + <location filename="../src/wallet/api/wallet.cpp" line="1557"/> + <location filename="../src/wallet/api/wallet.cpp" line="1641"/> <source>one of destinations is zero</source> <translation>宛先の1つはゼロです</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1477"/> - <location filename="../src/wallet/api/wallet.cpp" line="1561"/> + <location filename="../src/wallet/api/wallet.cpp" line="1559"/> + <location filename="../src/wallet/api/wallet.cpp" line="1643"/> <source>failed to find a suitable way to split transactions</source> <translation>取引を分割する適切な方法を見つけることができませんでした</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1479"/> - <location filename="../src/wallet/api/wallet.cpp" line="1563"/> + <location filename="../src/wallet/api/wallet.cpp" line="1561"/> + <location filename="../src/wallet/api/wallet.cpp" line="1645"/> <source>unknown transfer error: </source> <translation>不明な転送エラー: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1481"/> - <location filename="../src/wallet/api/wallet.cpp" line="1565"/> + <location filename="../src/wallet/api/wallet.cpp" line="1563"/> + <location filename="../src/wallet/api/wallet.cpp" line="1647"/> <source>internal error: </source> <translation>内部エラー: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1483"/> - <location filename="../src/wallet/api/wallet.cpp" line="1567"/> + <location filename="../src/wallet/api/wallet.cpp" line="1565"/> + <location filename="../src/wallet/api/wallet.cpp" line="1649"/> <source>unexpected error: </source> <translation>予期せぬエラー: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1485"/> - <location filename="../src/wallet/api/wallet.cpp" line="1569"/> + <location filename="../src/wallet/api/wallet.cpp" line="1567"/> + <location filename="../src/wallet/api/wallet.cpp" line="1651"/> <source>unknown error</source> <translation>不明なエラー</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1516"/> + <location filename="../src/wallet/api/wallet.cpp" line="1598"/> <source>failed to get outputs to mix</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1644"/> - <location filename="../src/wallet/api/wallet.cpp" line="1671"/> - <location filename="../src/wallet/api/wallet.cpp" line="1719"/> - <location filename="../src/wallet/api/wallet.cpp" line="1747"/> - <location filename="../src/wallet/api/wallet.cpp" line="1775"/> - <location filename="../src/wallet/api/wallet.cpp" line="1796"/> - <location filename="../src/wallet/api/wallet.cpp" line="2258"/> + <location filename="../src/wallet/api/wallet.cpp" line="1726"/> + <location filename="../src/wallet/api/wallet.cpp" line="1753"/> + <location filename="../src/wallet/api/wallet.cpp" line="1801"/> + <location filename="../src/wallet/api/wallet.cpp" line="1829"/> + <location filename="../src/wallet/api/wallet.cpp" line="1857"/> + <location filename="../src/wallet/api/wallet.cpp" line="1878"/> + <location filename="../src/wallet/api/wallet.cpp" line="2354"/> <source>Failed to parse txid</source> <translation>txidの解析に失敗しました</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1661"/> + <location filename="../src/wallet/api/wallet.cpp" line="1743"/> <source>no tx keys found for this txid</source> <translation>このtxidのためにtxキーを見つかれませんでした</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1679"/> - <location filename="../src/wallet/api/wallet.cpp" line="1688"/> + <location filename="../src/wallet/api/wallet.cpp" line="1761"/> + <location filename="../src/wallet/api/wallet.cpp" line="1770"/> <source>Failed to parse tx key</source> <translation>txキーの解析に失敗しました</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1697"/> - <location filename="../src/wallet/api/wallet.cpp" line="1726"/> - <location filename="../src/wallet/api/wallet.cpp" line="1754"/> - <location filename="../src/wallet/api/wallet.cpp" line="1835"/> + <location filename="../src/wallet/api/wallet.cpp" line="1779"/> + <location filename="../src/wallet/api/wallet.cpp" line="1808"/> + <location filename="../src/wallet/api/wallet.cpp" line="1836"/> + <location filename="../src/wallet/api/wallet.cpp" line="1917"/> <source>Failed to parse address</source> <translation>アドレスの解析に失敗しました</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1840"/> + <location filename="../src/wallet/api/wallet.cpp" line="1922"/> <source>Address must not be a subaddress</source> <translation>アドレスはサブアドレスであってはならないです</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1880"/> + <location filename="../src/wallet/api/wallet.cpp" line="1962"/> <source>The wallet must be in multisig ready state</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1902"/> + <location filename="../src/wallet/api/wallet.cpp" line="1984"/> <source>Given string is not a key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2130"/> + <location filename="../src/wallet/api/wallet.cpp" line="2226"/> <source>Rescan spent can only be used with a trusted daemon</source> <translation>信頼できるデーモンしかで再スキャンしません</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2179"/> + <location filename="../src/wallet/api/wallet.cpp" line="2275"/> <source>Invalid output: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2186"/> + <location filename="../src/wallet/api/wallet.cpp" line="2282"/> <source>Failed to mark outputs as spent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2197"/> - <location filename="../src/wallet/api/wallet.cpp" line="2219"/> + <location filename="../src/wallet/api/wallet.cpp" line="2293"/> + <location filename="../src/wallet/api/wallet.cpp" line="2315"/> <source>Failed to parse output amount</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2202"/> - <location filename="../src/wallet/api/wallet.cpp" line="2224"/> + <location filename="../src/wallet/api/wallet.cpp" line="2298"/> + <location filename="../src/wallet/api/wallet.cpp" line="2320"/> <source>Failed to parse output offset</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2208"/> + <location filename="../src/wallet/api/wallet.cpp" line="2304"/> <source>Failed to mark output as spent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2230"/> + <location filename="../src/wallet/api/wallet.cpp" line="2326"/> <source>Failed to mark output as unspent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2241"/> - <location filename="../src/wallet/api/wallet.cpp" line="2280"/> + <location filename="../src/wallet/api/wallet.cpp" line="2337"/> + <location filename="../src/wallet/api/wallet.cpp" line="2376"/> <source>Failed to parse key image</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2247"/> + <location filename="../src/wallet/api/wallet.cpp" line="2343"/> <source>Failed to get ring</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2265"/> + <location filename="../src/wallet/api/wallet.cpp" line="2361"/> <source>Failed to get rings</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2286"/> + <location filename="../src/wallet/api/wallet.cpp" line="2382"/> <source>Failed to set ring</source> <translation type="unfinished"></translation> </message> @@ -519,22 +519,22 @@ <context> <name>Wallet</name> <message> - <location filename="../src/wallet/api/wallet.cpp" line="301"/> + <location filename="../src/wallet/api/wallet.cpp" line="344"/> <source>Failed to parse address</source> <translation>アドレスの解析に失敗しました</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="308"/> + <location filename="../src/wallet/api/wallet.cpp" line="351"/> <source>Failed to parse key</source> <translation>キーの解析に失敗しました</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="316"/> + <location filename="../src/wallet/api/wallet.cpp" line="359"/> <source>failed to verify key</source> <translation>キーの検証に失敗しました</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="326"/> + <location filename="../src/wallet/api/wallet.cpp" line="369"/> <source>key does not match address</source> <translation>キーがアドレスと一致しませんでした</translation> </message> @@ -604,992 +604,1044 @@ <context> <name>cryptonote::simple_wallet</name> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="645"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="666"/> <source>Commands: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4359"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4636"/> <source>failed to read wallet password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3954"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4231"/> <source>invalid password</source> <translation>不正なパスワード</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3073"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3283"/> <source>set seed: needs an argument. available options: language</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3108"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3319"/> <source>set: unrecognized argument(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4199"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4476"/> <source>wallet file path not valid: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3178"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3389"/> <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="3059"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3269"/> <source>needs an argument</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3082"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3083"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3084"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3086"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3089"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3094"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3095"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3097"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3099"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3100"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3101"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3104"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3292"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3294"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3296"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3299"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3304"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3305"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3307"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3309"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3311"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3314"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3315"/> <source>0 or 1</source> <translation>0や1</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3092"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3096"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3103"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3306"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3313"/> <source>unsigned integer</source> <translation>符号無しの整数</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3312"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3548"/> <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="3341"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3577"/> <source>specify a recovery parameter with the --electrum-seed="words list here"</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3717"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3957"/> <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="3887"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4164"/> <source>wallet failed to connect to daemon: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3895"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4172"/> <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="3916"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4193"/> <source>List of available languages for your wallet's seed:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3926"/> - <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="4000"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4277"/> <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="4016"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4365"/> <source>Generated new wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4025"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4093"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4135"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4188"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4370"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4412"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4465"/> <source>failed to generate new wallet: </source> <translation>新しいウォレットの生成に失敗しました: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4230"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4507"/> <source>Opened watch-only wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4511"/> <source>Opened wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4252"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4529"/> <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="4267"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4544"/> <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="4275"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4552"/> <source>failed to load wallet: </source> <translation>ウォレットをロードできませんでした: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4292"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4569"/> <source>Use the "help" command to see the list of available commands. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4337"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4614"/> <source>Wallet data saved</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4431"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4819"/> <source>Mining started in daemon</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4433"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4821"/> <source>mining has NOT been started: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4453"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4841"/> <source>Mining stopped in daemon</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4455"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4843"/> <source>mining has NOT been stopped: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4537"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4925"/> <source>Blockchain saved</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4552"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4589"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4940"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4973"/> <source>Height </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4591"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4975"/> <source>spent </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4698"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5089"/> <source>Starting refresh...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4712"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5115"/> <source>Refresh done, blocks received: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5958"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6349"/> <source>payment id has invalid format, expected 16 or 64 character hex string: </source> <translation type="unfinished">ペイメントIDのフォーマットは不正です。16文字または64文字の16進数の文字列が必要で: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5307"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5704"/> <source>bad locked_blocks parameter:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5978"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6251"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6369"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6639"/> <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="5405"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5987"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6219"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6259"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5806"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6378"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6607"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6647"/> <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="5251"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5870"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6173"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5659"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6271"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6564"/> <source>ring size %u is too large, maximum is %u</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5276"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5395"/> - <source>Unencrypted payment IDs are bad for privacy: ask the recipient to use subaddresses instead</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5690"/> <source>payment id failed to encode</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5312"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5894"/> - <source>Locked blocks too high, max 1000000 (Ë4 yrs)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5340"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5737"/> <source>failed to parse short payment ID from URI</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5363"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5365"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5762"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5764"/> <source>Invalid last argument: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5382"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5782"/> <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="5399"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5800"/> <source>failed to parse payment id, though it was detected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5422"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5502"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5590"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5738"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6001"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6059"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6273"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6318"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5823"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5903"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5991"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6139"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6392"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6450"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6661"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6706"/> <source>transaction cancelled.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5481"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5491"/> - <source>Is this okay anyway? (Y/Yes/N/No): </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5486"/> - <source>There is currently a %u block backlog at that fee level. Is this okay? (Y/Yes/N/No): </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5491"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5892"/> <source>Failed to check for backlog: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5532"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6032"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5933"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6423"/> <source> Transaction </source> <translation> 取引 </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5537"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6037"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5938"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6428"/> <source>Spending from address index %d </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5539"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6039"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5940"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6430"/> <source>WARNING: Outputs of multiple addresses are being used together, which might potentially compromise your privacy. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5541"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5942"/> <source>Sending %s. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5544"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5945"/> <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="5550"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5951"/> <source>The transaction fee is %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5553"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5954"/> <source>, of which %s is dust from change</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5554"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5955"/> <source>.</source> <translation>。</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5554"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5955"/> <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="5559"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5960"/> <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="5603"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6004"/> <source>Unsigned transaction(s) successfully written to MMS</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5611"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5648"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5749"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5761"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6070"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6107"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6328"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6340"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6012"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6049"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6150"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6162"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6461"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6498"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6716"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6728"/> <source>Failed to write transaction(s) to file</source> <translation type="unfinished">取引をファイルに書き込めませんでした</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5616"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5653"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5753"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5765"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6074"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6111"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6332"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6344"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6017"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6054"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6154"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6465"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6502"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6720"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6732"/> <source>Unsigned transaction(s) successfully written to file: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5625"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6086"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6026"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6477"/> <source>Failed to cold sign transaction with HW wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5708"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6109"/> <source>No unmixable outputs found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5775"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6176"/> <source>Not enough money in unlocked balance</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5776"/> - <source>Discarding %s of unmixable outputs that cannot be spent, which can be undone by "rescan_spent". Is this okay? (Y/Yes/N/No): </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5815"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6216"/> <source>No address given</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5879"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6280"/> <source>missing lockedblocks parameter</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5889"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6290"/> <source>bad locked_blocks parameter</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5914"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6182"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6315"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6573"/> <source>Failed to parse number of outputs</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5919"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6187"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6320"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6578"/> <source>Amount of outputs should be greater than 0</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6213"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6601"/> <source>failed to parse Payment ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6236"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2078"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2125"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6624"/> <source>failed to parse key image</source> <translation>キーイメージの解析に失敗しました</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6290"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6678"/> <source>No outputs found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6295"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6683"/> <source>Multiple transactions are created, which is not supposed to happen</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6300"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6688"/> <source>The transaction uses multiple or no inputs, which is not supposed to happen</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6377"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6765"/> <source>missing threshold amount</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6382"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6770"/> <source>invalid amount threshold</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6516"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6919"/> <source>Claimed change does not go to a paid address</source> <translation type="unfinished">請求したお釣りはもうお金に送ったアドレス送りません</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6521"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6924"/> <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="6552"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6955"/> <source>sending %s to %s</source> <translation>%s を %s に送ってます</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6562"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6965"/> <source> dummy output(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6565"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6968"/> <source>with no destinations</source> <translation>目的地なし</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6577"/> - <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min ring size %lu, %s. %sIs this okay? (Y/Yes/N/No): </source> - <translation>取引は %lu ロードした、 %s に、%s のの手数料、 %s 、 %s 、最小リングサイズ %lu 、%s。これは大丈夫ですか? はい (Y) いいえ (N): </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6606"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7009"/> <source>This is a multisig wallet, it can only sign with sign_multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6629"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7032"/> <source>Failed to sign transaction</source> <translation>取引を署名できませんでした</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6635"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7038"/> <source>Failed to sign transaction: </source> <translation>取引を署名できませんでした: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6656"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7059"/> <source>Transaction raw hex data exported to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6677"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7080"/> <source>Failed to load transaction from file</source> <translation>ファイルからの取引のロードに失敗しました</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4729"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5051"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5132"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5459"/> <source>RPC error: </source> <translation>RPCエラー: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="695"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="716"/> <source>wallet is watch-only and has no spend key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="839"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1021"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1074"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1141"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="860"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1044"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1097"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1164"/> <source>Your original password was incorrect.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="854"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="875"/> <source>Error with wallet rewrite: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2284"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2435"/> <source>invalid unit</source> <translation>不正なユニット</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2302"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2364"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2453"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2515"/> <source>invalid count: must be an unsigned integer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2320"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2471"/> <source>invalid value</source> <translation>不正な金額</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3204"/> - <source>(Y/Yes/N/No): </source> - <translation>(はい (Y) いいえ (N)): </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3761"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3788"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4021"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4041"/> <source>bad m_restore_height parameter: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3766"/> - <source>date format must be YYYY-MM-DD</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3779"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3985"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4032"/> <source>Restore height is: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3705"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3780"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5583"/> - <source>Is this okay? (Y/Yes/N/No): </source> - <translation>これは大丈夫ですか? (はい (Y) いいえ (N)): </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4509"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4897"/> <source>Daemon is local, assuming trusted</source> <translation>デーモンはローカルです。信頼できるデーモン予期してます</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4355"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4632"/> <source>Password for new watch-only wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4739"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5142"/> <source>internal error: </source> <translation>内部エラー: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1608"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4744"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5056"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1632"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5147"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5464"/> <source>unexpected error: </source> <translation>予期せぬエラー: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1534"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1613"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4749"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5061"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5639"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5669"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5794"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6099"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6126"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6361"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6690"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1558"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1637"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5152"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5469"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6040"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6070"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6195"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6490"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6517"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6749"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7093"/> <source>unknown error</source> <translation>不明なエラー</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4754"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5157"/> <source>refresh failed: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4754"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5157"/> <source>Blocks received: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4787"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5195"/> <source>unlocked balance: </source> <translation>ロック解除された残高: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3093"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3303"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>amount</source> <translation>金額</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="341"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="362"/> <source>false</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="659"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="680"/> <source>Unknown command: </source> <translation>未知のコマンド: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="666"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="687"/> <source>Command usage: </source> <translation>コマンドの使用: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="669"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="690"/> <source>Command description: </source> <translation>コマンドの記述: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="735"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="756"/> <source>wallet is multisig but not yet finalized</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="768"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="789"/> <source>Failed to retrieve seed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="792"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="813"/> <source>wallet is multisig and has no seed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="899"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="922"/> <source>Error: failed to estimate backlog array size: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="904"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="927"/> <source>Error: bad estimated backlog array size</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="916"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="939"/> <source> (current)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="919"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="942"/> <source>%u block (%u minutes) backlog at priority %u%s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="921"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="944"/> <source>%u to %u block (%u to %u minutes) backlog at priority %u</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="924"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="947"/> <source>No backlog at priority </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="944"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="989"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="967"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1012"/> <source>This wallet is already multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="949"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="994"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="972"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1017"/> <source>wallet is watch-only and cannot be made multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="955"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1000"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="978"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1023"/> <source>This wallet has been used before, please use a new wallet to create a multisig wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="963"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="986"/> <source>Send this multisig info to all other participants, then use make_multisig <threshold> <info1> [<info2>...] with others' multisig info</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="964"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="987"/> <source>This includes the PRIVATE view key, so needs to be disclosed only to that multisig wallet's participants </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1014"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1037"/> <source>Invalid threshold</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1034"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1156"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1057"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1179"/> <source>Another step is needed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1046"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1069"/> <source>Error creating multisig: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1053"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1076"/> <source>Error creating multisig: new wallet is not multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1056"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1079"/> <source> multisig address: </source> <translation> マルチサインアドレス: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1080"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1129"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1195"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1261"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1103"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1152"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1219"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1285"/> <source>This wallet is not multisig</source> <translation>これはマルチシッグウォレットではありません</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1085"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1134"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1108"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1157"/> <source>This wallet is already finalized</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1101"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1124"/> <source>Failed to finalize multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1107"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1130"/> <source>Failed to finalize multisig: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1200"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1266"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1360"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1476"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1557"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1191"/> + <source>Multisig address: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1224"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1290"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1384"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1500"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1581"/> <source>This multisig wallet is not yet finalized</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1236"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1260"/> <source>Error exporting multisig info: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1240"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1264"/> <source>Multisig info exported to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1306"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1330"/> <source>Multisig info imported</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1334"/> <source>Failed to import multisig info: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1321"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1345"/> <source>Failed to update spent status after importing multisig info: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1327"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1351"/> <source>Untrusted daemon, spent status may be incorrect. Use a trusted daemon and run "rescan_spent"</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1355"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1471"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1552"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1379"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1495"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1576"/> <source>This is not a multisig wallet</source> <translation>これはマルチシッグウォレットではありません</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1405"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1414"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1429"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1438"/> <source>Failed to sign multisig transaction</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1421"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1445"/> <source>Multisig error: </source> <translation>マルチサインエラー: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1426"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1450"/> <source>Failed to sign multisig transaction: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1449"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1473"/> <source>It may be relayed to the network with submit_multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1508"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1578"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1532"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1602"/> <source>Failed to load multisig transaction from file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1514"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1583"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1538"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1607"/> <source>Multisig transaction signed by only %u signers, needs %u more signatures</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1523"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8890"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1547"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9330"/> <source>Transaction successfully submitted, transaction </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1524"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8891"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1548"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9331"/> <source>You can check its status by using the `show_transfers` command.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1599"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1623"/> <source>Failed to export multisig transaction to file </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1603"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1627"/> <source>Saved exported multisig transaction file(s): </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2095"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2101"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2120"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1892"/> + <source>Invalid key image or txid</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1901"/> + <source>failed to unset ring</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2072"/> + <source>usage: %s <key_image>|<pubkey></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2117"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2129"/> + <source>Frozen: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2131"/> + <source>Not frozen: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2138"/> + <source> bytes sent</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2139"/> + <source> bytes received</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2145"/> + <source>Welcome to Monero, the private cryptocurrency.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2147"/> + <source>Monero, like Bitcoin, is a cryptocurrency. That is, it is digital money.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2148"/> + <source>Unlike Bitcoin, your Monero transactions and balance stay private, and not visible to the world by default.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2149"/> + <source>However, you have the option of making those available to select parties, if you choose to.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2151"/> + <source>Monero protects your privacy on the blockchain, and while Monero strives to improve all the time,</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2152"/> + <source>no privacy technology can be 100% perfect, Monero included.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2153"/> + <source>Monero cannot protect you from malware, and it may not be as effective as we hope against powerful adversaries.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2154"/> + <source>Flaws in Monero may be discovered in the future, and attacks may be developed to peek under some</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2155"/> + <source>of the layers of privacy Monero provides. Be safe and practice defense in depth.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2157"/> + <source>Welcome to Monero and financial privacy. For more information, see https://getmonero.org/</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2244"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2250"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2269"/> <source>ring size must be an integer >= </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2125"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2274"/> <source>could not change default ring size</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2398"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2469"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2549"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2620"/> <source>Invalid height</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2562"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2667"/> + <source>invalid argument: must be either 1/yes or 0/no</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2738"/> <source>Start mining in the daemon (bg_mining and ignore_battery are optional booleans).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2565"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2741"/> <source>Stop mining in the daemon.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2569"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2745"/> <source>Set another daemon to connect to.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2572"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2748"/> <source>Save the current blockchain data.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2575"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2751"/> <source>Synchronize the transactions and balance.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2579"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2755"/> <source>Show the wallet's balance of the currently selected account.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2589"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2759"/> + <source>Show the incoming transfers, all or filtered by availability and address index. + +Output format: +Amount, Spent("T"|"F"), "frozen"|"locked"|"unlocked", RingCT, Global Index, Transaction Hash, Address Index, [Public Key, Key Image] </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2765"/> <source>Show the payments for the given payment IDs.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2592"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2768"/> <source>Show the blockchain height.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2606"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2782"/> <source>Send all unmixable outputs to yourself with ring_size 1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2613"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2789"/> <source>Send all unlocked outputs below the threshold to an address.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2617"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2793"/> <source>Send a single output of the given key image to an address without change.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2621"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2797"/> <source>Donate <amount> to the development team (donate.getmonero.org).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2628"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2804"/> <source>Submit a signed transaction from a file.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2632"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2808"/> <source>Change the current log detail (level must be <0-4>).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2812"/> <source>If no arguments are specified, the wallet shows all the existing accounts along with their balances. If the "new" argument is specified, the wallet creates a new account with its label initialized by the provided label text (which can be empty). If the "switch" argument is specified, the wallet switches to the account specified by <index>. @@ -1600,325 +1652,425 @@ If the "tag_description" argument is specified, the tag <tag_name&g <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2646"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2822"/> <source>If no arguments are specified or <index> is specified, the wallet shows the default or specified address. If "all" is specified, the wallet shows all the existing addresses in the currently selected account. If "new " is specified, the wallet creates a new address with the provided label text (which can be empty). If "label" is specified, the wallet sets the label of the address specified by <index> to the provided label text.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2650"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2826"/> <source>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="2654"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2830"/> <source>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="2657"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2833"/> <source>Save the wallet data.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2660"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2836"/> <source>Save a watch-only keys file.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2663"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2839"/> <source>Display the private view key.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2666"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2842"/> <source>Display the private spend key.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2669"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2845"/> <source>Display the Electrum-style mnemonic seed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2719"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2849"/> + <source>Available options: + seed language + Set the wallet's 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-ring-size <n> + Set the default ring size (obsolete). + auto-refresh <1|0> + Whether to automatically synchronize new blocks from the daemon. + refresh-type <full|optimize-coinbase|no-coinbase|default> + Set the wallet's refresh behaviour. + priority [0|1|2|3|4] + Set the fee to default/unimportant/normal/elevated/priority. + confirm-missing-payment-id <1|0> (obsolete) + ask-password <0|1|2 (or never|action|decrypt)> + action: ask the password before many actions such as transfer, etc + decrypt: same as action, but keeps the spend key encrypted in memory when not needed + unit <monero|millinero|micronero|nanonero|piconero> + Set the 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. + confirm-backlog <1|0> + Whether to warn if there is transaction backlog. + confirm-backlog-threshold [n] + Set a threshold for confirm-backlog to only warn if the transaction backlog is greater than n blocks. + refresh-from-block-height [n] + Set the height before which to ignore blocks. + auto-low-priority <1|0> + Whether to automatically use the low priority fee level when it's safe to do so. + segregate-pre-fork-outputs <1|0> + Set this if you intend to spend outputs on both Monero AND a key reusing fork. + key-reuse-mitigation2 <1|0> + Set this if you are not sure whether you will spend on a key reusing Monero fork later. +subaddress-lookahead <major>:<minor> + Set the lookahead sizes for the subaddress hash table. + Set this if you are not sure whether you will spend on a key reusing Monero fork later. + segregation-height <n> + Set to the height of a key reusing fork you want to use, 0 to use default.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2897"/> <source>Display the encrypted Electrum-style mnemonic seed.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2722"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2900"/> <source>Rescan the blockchain for spent outputs.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2726"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2904"/> <source>Get the transaction key (r) for a given <txid>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2734"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2912"/> <source>Check the amount going to <address> in <txid>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2738"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2916"/> <source>Generate a signature proving funds sent to <address> in <txid>, optionally with a challenge string <message>, using either the transaction secret key (when <address> is not your wallet's address) or the view secret key (otherwise), which does not disclose the secret key.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2742"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2920"/> <source>Check the proof for funds going to <address> in <txid> with the challenge string <message> if any.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2746"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2924"/> <source>Generate a signature proving that you generated <txid> using the spend secret key, optionally with a challenge string <message>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2750"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2928"/> <source>Check a signature proving that the signer generated <txid>, optionally with a challenge string <message>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2754"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2932"/> <source>Generate a signature proving that you own at least this much, optionally with a challenge string <message>. If 'all' is specified, you prove the entire sum of all of your existing accounts' balances. Otherwise, you prove the reserve of the smallest possible amount above <amount> available in your current account.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2760"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2938"/> <source>Check a signature proving that the owner of <address> holds at least this much, optionally with a challenge string <message>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2780"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2958"/> <source>Show the unspent outputs of a specified address within an optional amount range.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2788"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2962"/> + <source>Rescan the blockchain from scratch. If "hard" is specified, you will lose any information which can not be recovered from the blockchain itself.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2966"/> <source>Set an arbitrary string note for a <txid>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2792"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2970"/> <source>Get a string note for a txid.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2796"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2974"/> <source>Set an arbitrary description for the wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2800"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2978"/> <source>Get the description of the wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2803"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2981"/> <source>Show the wallet's status.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2806"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2984"/> <source>Show the wallet's information.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2810"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2988"/> <source>Sign the contents of a file.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2814"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2992"/> <source>Verify a signature on the contents of a file.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2822"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3000"/> <source>Import a signed key images list and verify their spent status.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2834"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3012"/> <source>Export a set of outputs owned by this wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2838"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3016"/> <source>Import a set of outputs owned by this wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2842"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3020"/> <source>Show information about a transfer to/from this address.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2845"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3023"/> <source>Change the wallet's password.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2849"/> - <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="2852"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3030"/> <source>Print the information about the current fee and transaction backlog.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2854"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3032"/> <source>Export data needed to create a multisig wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2857"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3035"/> <source>Turn this wallet into a multisig wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2861"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3039"/> <source>Turn this wallet into a multisig wallet, extra step for N-1/N wallets</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2869"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3047"/> <source>Export multisig info for other participants</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2873"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3051"/> <source>Import multisig info from other participants</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2877"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3055"/> <source>Sign a multisig transaction from a file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2881"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3059"/> <source>Submit a signed multisig transaction from a file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2885"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3063"/> <source>Export a signed multisig transaction to a file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3002"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3160"/> + <source>Unsets the ring used for a given key image or transaction</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3180"/> + <source>Freeze a single output by key image so it will not be used</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3184"/> + <source>Thaw a single output by key image so it may be used again</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3188"/> + <source>Checks whether a given output is currently frozen by key image</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3192"/> + <source>Prints simple network stats</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3196"/> + <source>Prints basic info about Monero for first time users</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3204"/> <source>Show the help section or the documentation about a <command>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3085"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3258"/> + <source> (set this to support the network and to get a chance to receive new monero)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3295"/> <source>integer >= </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3098"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3308"/> <source>block height</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3203"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3316"/> + <source>1/yes or 0/no</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3414"/> <source>No wallet found with that name. Confirm creation of new wallet named: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3304"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3540"/> <source>can't specify both --restore-deterministic-wallet or --restore-multisig-wallet and --non-deterministic</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3546"/> <source>--restore-multisig-wallet uses --generate-new-wallet, not --wallet-file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3326"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3562"/> <source>specify a recovery parameter with the --electrum-seed="multisig seed here"</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3355"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3591"/> <source>Multisig seed failed verification</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3406"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3481"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3641"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3718"/> <source>This address is a subaddress which cannot be used here.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3558"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3796"/> <source>Error: expected M/N, but got: </source> <translation>エラー: N/Mを欲しかったでもこれを貰いました: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3563"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3801"/> <source>Error: expected N > 1 and N <= M, but got: </source> <translation>エラー: N > 1 と N <= M のこと欲しかったでもこれを貰いました: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3568"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3806"/> <source>Error: M/N is currently unsupported. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3809"/> <source>Generating master wallet from %u of %u multisig wallet keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3600"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3838"/> <source>failed to parse secret view key</source> <translation>秘密なビューキーの解析に失敗しました</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3608"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3846"/> <source>failed to verify secret view key</source> <translation>秘密なビューキーの検証に失敗しました</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3628"/> - <source>Secret spend key (%u of %u):</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3889"/> + <source>Error: M/N is currently unsupported</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3651"/> - <source>Error: M/N is currently unsupported</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4055"/> + <source>Restore height </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3802"/> - <source>Restore height </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4083"/> + <source>Warning: using an untrusted daemon at %s, privacy will be lessened</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3803"/> - <source>Still apply restore height? (Y/Yes/N/No): </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4093"/> + <source>If you are new to Monero, type "welcome" for a brief overview.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3829"/> - <source>Warning: using an untrusted daemon at %s, privacy will be lessened</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4098"/> + <source>WARNING: obsolete long payment IDs are enabled. Sending transactions with those payment IDs are bad for your privacy.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3888"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4100"/> + <source>It is recommended that you do not use them, and ask recipients who ask for one to not endanger your privacy.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4165"/> <source>Daemon either is not started or wrong port was passed. Please make sure daemon is running or change the daemon address using the 'set_daemon' command.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4036"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4203"/> + <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="4313"/> <source>Your wallet has been generated! To start synchronizing with the daemon, use the "refresh" command. Use the "help" command to see the list of available commands. @@ -1930,900 +2082,901 @@ 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="4180"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4457"/> <source>failed to generate new mutlisig wallet</source> <translation>新しいマルチシッグウォレットの生成に失敗しました</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4183"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4460"/> <source>Generated new %u/%u multisig wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4232"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4509"/> <source>Opened %u/%u multisig wallet%s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4570"/> <source>Use "help <command>" to see a command's documentation. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4351"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4628"/> <source>wallet is multisig and cannot save a watch-only version</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4476"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4664"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4696"/> + <source>Failed to query mining status: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4679"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4707"/> + <source>Failed to setup background mining: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4683"/> + <source>Background mining enabled. Thank you for supporting the Monero network.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4711"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4719"/> + <source>Background mining not enabled. Run "set setup-background-mining 1" to change.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4725"/> + <source>Using an untrusted daemon, skipping background mining check</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4750"/> + <source>The daemon is not set up to background mine.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4751"/> + <source>With background mining enabled, the daemon will mine when idle and not on batttery.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4752"/> + <source>Enabling this supports the network you are using, and makes you eligible for receiving new monero</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4757"/> + <source>Background mining not enabled. Set setup-background-mining to 1 to change.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4864"/> <source>Unexpected array length - Exited simple_wallet::set_daemon()</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4517"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4905"/> <source>This does not seem to be a valid daemon URL.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4553"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4590"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4941"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4974"/> <source>txid </source> <translation>txid </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4555"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4592"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4943"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4976"/> <source>idx </source> <translation>idx </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4780"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <source>WARNING: this transaction uses an unencrypted payment ID: consider using subaddresses instead.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <source>WARNING: this transaction uses an unencrypted payment ID: these are obsolete. Support will be withdrawn in the future. Use subaddresses instead.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5108"/> + <source>New transfer received since rescan was started. Key images are incomplete.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5183"/> <source> (Some owned outputs have partial key images - import_multisig_info needed)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4783"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5186"/> <source>Currently selected account: [</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4783"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5186"/> <source>] </source> <translation>] </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4785"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5188"/> <source>Tag: </source> <translation>タグ: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4785"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5188"/> <source>(No tag assigned)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4792"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5200"/> <source>Balance per address:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> <source>Address</source> <translation>アドレス</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8451"/> <source>Balance</source> <translation>残高</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8451"/> <source>Unlocked balance</source> <translation>ロック解除された残高</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> <source>Outputs</source> <translation>アウトプット</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8008"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9122"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8451"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9564"/> <source>Label</source> <translation>ラベル</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4801"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5209"/> <source>%8u %6s %21s %21s %7u %21s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> <source>spent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> <source>global index</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> <source>tx id</source> <translation>tx id</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>addr index</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4924"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5312"/> + <source>Used at heights: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5318"/> + <source>[frozen]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5332"/> <source>No incoming transfers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4928"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5336"/> <source>No incoming available transfers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4932"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5340"/> <source>No incoming unavailable transfers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>payment</source> <translation>ペイメント</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>transaction</source> <translation>取引</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>height</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>unlock time</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4968"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5376"/> <source>No payments with id </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5016"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5106"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5442"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5901"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5424"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5514"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5843"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6302"/> <source>failed to get blockchain height: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5114"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5522"/> <source> Transaction %llu/%llu: txid=%s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5135"/> - <source> -Input %llu/%llu: amount=%s</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5151"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5559"/> <source>failed to get output: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5159"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5567"/> <source>output key's originating block height shouldn't be higher than the blockchain height</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5163"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5571"/> <source> Originating block heights: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5175"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5583"/> <source> |</source> <translation> |</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5175"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7706"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5583"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8110"/> <source>| </source> <translation>| </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5192"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5600"/> <source> Warning: Some input keys being spent are from </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5194"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5602"/> <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="5234"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5853"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6156"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5642"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6254"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6547"/> <source>Ring size must not be 0</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5246"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5865"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6168"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5654"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6266"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6559"/> <source>ring size %u is too small, minimum is %u</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5258"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5666"/> <source>wrong number of arguments</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5417"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5996"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6268"/> - <source>No payment id is included with this transaction. Is this okay? (Y/Yes/N/No): </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5686"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5796"/> + <source>Warning: Unencrypted payment IDs will harm your privacy: ask the recipient to use subaddresses instead</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5458"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6016"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5859"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6407"/> <source>No outputs found, or daemon is not ready</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6428"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6816"/> <source>Failed to parse donation address: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6442"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6830"/> <source>Donating %s %s to The Monero Project (donate.getmonero.org or %s).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6444"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6832"/> <source>Donating %s %s to %s.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6759"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6770"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6777"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7164"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7175"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7182"/> <source>failed to parse tx_key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6786"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7191"/> <source>Tx key successfully stored.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6790"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7195"/> <source>Failed to store tx key: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7296"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7696"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>block</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7440"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7844"/> <source>usage: show_transfers [in|out|all|pending|failed|coinbase] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7493"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7897"/> <source>usage: export_transfers [in|out|all|pending|failed|coinbase] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]] [output=<path>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>direction</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>timestamp</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>running balance</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>hash</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>payment ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>fee</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>destination</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>index</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>note</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7572"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7976"/> <source>CSV exported to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7730"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8159"/> <source>Warning: this will lose any information which can not be recovered from the blockchain.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7731"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8160"/> <source>This includes destination addresses, tx secret keys, tx notes, etc</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7732"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8172"/> + <source>Warning: your restore height is higher than wallet restore height: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="8173"/> <source>Rescan anyway ? (Y/Yes/N/No): </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7750"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8192"/> <source>MMS received new message</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8387"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8832"/> <source>Network type: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8388"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8833"/> <source>Testnet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8389"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8834"/> <source>Stagenet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8389"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8834"/> <source>Mainnet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8559"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8605"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8999"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9045"/> <source>command only supported by HW wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8564"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9004"/> <source>hw wallet does not support cold KI sync</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8576"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9016"/> <source>Please confirm the key image sync on the device</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8582"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9022"/> <source>Key images synchronized to height </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8585"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9025"/> <source>Running untrusted daemon, cannot determine which transaction output is spent. Use a trusted daemon with --trusted-daemon and run rescan_spent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8588"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9028"/> <source> spent, </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8588"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9028"/> <source> unspent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8592"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9032"/> <source>Failed to import key images</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8597"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9037"/> <source>Failed to import key images: </source> <translation type="unfinished">キーイメージをインポートできませんでした: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8614"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9054"/> <source>Failed to reconnect device</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8619"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9059"/> <source>Failed to reconnect device: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8883"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9323"/> <source>Transaction successfully saved to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8883"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8885"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9323"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9325"/> <source>, txid </source> <translation>、txid </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8885"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9325"/> <source>Failed to save transaction to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5723"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6044"/> - <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="5729"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6050"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6310"/> - <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="6611"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7014"/> <source>This is a watch only wallet</source> <translation>これは閲覧専用ウォレットです</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8813"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9253"/> <source>Double spend seen on the network: this transaction may or may not end up being mined</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8848"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9288"/> <source>Transaction ID not found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="336"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="357"/> <source>true</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="389"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="410"/> <source>failed to parse refresh type</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="721"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="787"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="939"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="984"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1067"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1124"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1190"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1256"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1350"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1466"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1547"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6601"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6665"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6702"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6799"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7010"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7094"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8397"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8474"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8517"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8630"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8670"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="742"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="808"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="962"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1007"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1090"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1147"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1214"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1280"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1374"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1490"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7004"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7068"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7410"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7494"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8842"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8919"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8962"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9070"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9110"/> <source>command not supported by HW wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="726"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="797"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="747"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="818"/> <source>wallet is watch-only and has no seed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="744"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="807"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="765"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="828"/> <source>wallet is non-deterministic and has no seed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="751"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="772"/> <source>Enter optional seed offset passphrase, empty to see raw seed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="817"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="838"/> <source>Incorrect password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="883"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="906"/> <source>Current fee is %s %s per %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1036"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1158"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1059"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1181"/> <source>Send this multisig info to all other participants, then use exchange_multisig_keys <info1> [<info2>...] with others' multisig info</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1167"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1190"/> <source>Multisig wallet has been successfully created. Current wallet type: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1172"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1196"/> <source>Failed to perform multisig keys exchange: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1499"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1523"/> <source>Failed to load multisig transaction from MMS</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1631"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1788"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1655"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1812"/> <source>Invalid key image</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1637"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1661"/> <source>Invalid txid</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1649"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1673"/> <source>Key image either not spent, or spent with mixin 0</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1664"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1688"/> <source>Failed to get key image ring: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1679"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1703"/> <source>File doesn't exist</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1701"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1725"/> <source>Invalid ring specification: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1733"/> <source>Invalid key image: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1714"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1738"/> <source>Invalid ring type, expected relative or abosolute: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1720"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1732"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1744"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1756"/> <source>Error reading line: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1743"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1767"/> <source>Invalid ring: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1752"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1776"/> <source>Invalid relative ring: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1764"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1788"/> <source>Invalid absolute ring: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1773"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1797"/> <source>Failed to set ring for key image: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1773"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1797"/> <source>Continuing.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1803"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1827"/> <source>Missing absolute or relative keyword</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1813"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1820"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1837"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1844"/> <source>invalid index: must be a strictly positive unsigned integer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1828"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1852"/> <source>invalid index: indices wrap</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1838"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1862"/> <source>invalid index: indices should be in strictly ascending order</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1845"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1869"/> <source>failed to set ring</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1890"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1946"/> <source>First line is not an amount</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1904"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1960"/> <source>Invalid output: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1914"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1970"/> <source>Bad argument: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1914"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1970"/> <source>should be "add"</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1923"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1979"/> <source>Failed to open file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1929"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1985"/> <source>Invalid output key, and file doesn't exist</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1935"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1991"/> <source>Failed to mark output spent: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1952"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1979"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2035"/> <source>Invalid output</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1962"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2018"/> <source>Failed to mark output unspent: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1986"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2042"/> <source>Spent: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1988"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2044"/> <source>Not spent: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1992"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2048"/> <source>Failed to check whether output is spent: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2007"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2063"/> <source>Failed to save known rings: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2022"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2171"/> <source>Please confirm the transaction on the device</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2069"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2218"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2237"/> <source>wallet is watch-only and cannot transfer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2106"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5581"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2255"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5982"/> <source>WARNING: this is a non default ring size, which may harm your privacy. Default is recommended.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2108"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2257"/> <source>WARNING: from v8, ring size will be fixed and this setting will be ignored.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2137"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2160"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2176"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2286"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2309"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2325"/> <source>priority must be either 0, 1, 2, 3, or 4, or one of: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2330"/> <source>could not change default priority</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2249"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2400"/> <source>invalid argument: must be either 0/never, 1/action, or 2/encrypt/decrypt</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2510"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2686"/> <source>Device name not specified</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2519"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2695"/> <source>Device reconnect failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2524"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2700"/> <source>Device reconnect failed: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2583"/> - <source>Show the incoming transfers, all or filtered by availability and address index. - -Output format: -Amount, Spent("T"|"F"), "locked"|"unlocked", RingCT, Global Index, Transaction Hash, Address Index, [Public Key, Key Image] </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2595"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2771"/> <source>Transfer <amount> to <address>. If the parameter "index=<N1>[,<N2>,...]" is specified, the wallet uses outputs received by addresses of those indices. If omitted, the wallet randomly chooses address indices to be used. In any case, it tries its best not to combine outputs across multiple addresses. <priority> is the priority of the transaction. The higher the priority, the higher the transaction fee. Valid values in priority order (from lowest to highest) are: unimportant, normal, elevated, priority. If omitted, the default value (see the command "set priority") is used. <ring_size> is the number of inputs to include for untraceability. Multiple payments can be made at once by adding URI_2 or <address_2> <amount_2> etcetera (before the payment ID, if it's included)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2599"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2775"/> <source>Transfer <amount> to <address> and lock it for <lockblocks> (max. 1000000). If the parameter "index=<N1>[,<N2>,...]" is specified, the wallet uses outputs received by addresses of those indices. If omitted, the wallet randomly chooses address indices to be used. In any case, it tries its best not to combine outputs across multiple addresses. <priority> is the priority of the transaction. The higher the priority, the higher the transaction fee. Valid values in priority order (from lowest to highest) are: unimportant, normal, elevated, priority. If omitted, the default value (see the command "set priority") is used. <ring_size> is the number of inputs to include for untraceability. Multiple payments can be made at once by adding URI_2 or <address_2> <amount_2> etcetera (before the payment ID, if it's included)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2603"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2779"/> <source>Send all unlocked balance to an address and lock it for <lockblocks> (max. 1000000). If the parameter "index<N1>[,<N2>,...]" is specified, the wallet sweeps outputs received by those address indices. If omitted, the wallet randomly chooses an address index to be used. <priority> is the priority of the sweep. The higher the priority, the higher the transaction fee. Valid values in priority order (from lowest to highest) are: unimportant, normal, elevated, priority. If omitted, the default value (see the command "set priority") is used. <ring_size> is the number of inputs to include for untraceability.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2609"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2785"/> <source>Send all unlocked balance to an address. If the parameter "index<N1>[,<N2>,...]" is specified, the wallet sweeps outputs received by those address indices. If omitted, the wallet randomly chooses an address index to be used. If the parameter "outputs=<N>" is specified and N > 0, wallet splits the transaction into N even outputs.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2625"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2801"/> <source>Sign a transaction from a file. If the parameter "export_raw" is specified, transaction raw hex data suitable for the daemon RPC /sendrawtransaction is exported.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2673"/> - <source>Available options: - seed language - Set the wallet's 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-ring-size <n> - Set the default ring size (obsolete). - auto-refresh <1|0> - Whether to automatically synchronize new blocks from the daemon. - refresh-type <full|optimize-coinbase|no-coinbase|default> - Set the wallet's refresh behaviour. - priority [0|1|2|3|4] - Set the fee to default/unimportant/normal/elevated/priority. - confirm-missing-payment-id <1|0> - ask-password <0|1|2 (or never|action|decrypt)> - unit <monero|millinero|micronero|nanonero|piconero> - Set the 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. - confirm-backlog <1|0> - Whether to warn if there is transaction backlog. - confirm-backlog-threshold [n] - Set a threshold for confirm-backlog to only warn if the transaction backlog is greater than n blocks. - refresh-from-block-height [n] - Set the height before which to ignore blocks. - auto-low-priority <1|0> - Whether to automatically use the low priority fee level when it's safe to do so. - segregate-pre-fork-outputs <1|0> - Set this if you intend to spend outputs on both Monero AND a key reusing fork. - key-reuse-mitigation2 <1|0> - Set this if you are not sure whether you will spend on a key reusing Monero fork later. -subaddress-lookahead <major>:<minor> - Set the lookahead sizes for the subaddress hash table. - Set this if you are not sure whether you will spend on a key reusing Monero fork later. - segregation-height <n> - Set to the height of a key reusing fork you want to use, 0 to use default.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2730"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2908"/> <source>Set the transaction key (r) for a given <txid> in case the tx was made by some other device or 3rd party wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2765"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2943"/> <source>Show the incoming/outgoing transfers within an optional height range. Output format: @@ -2837,42 +2990,42 @@ Pending or Failed: "failed"|"pending", "o <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2775"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2953"/> <source>export_transfers [in|out|all|pending|failed|coinbase] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]] [output=<filepath>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2776"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2954"/> <source>Export to CSV the incoming/outgoing transfers within an optional height range.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2784"/> - <source>Rescan the blockchain from scratch, losing any information which can not be recovered from the blockchain itself.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2818"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2996"/> <source>Export a signed set of key images to a <filename>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2826"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3004"/> <source>Synchronizes key images with the hw wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2830"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3008"/> <source>Attempts to reconnect HW wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2865"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3027"/> + <source>Generate a new random full size payment id (obsolete). 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="3043"/> <source>Performs extra multisig keys exchange rounds. Needed for arbitrary M/N multisig wallets</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2889"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3067"/> <source>Interface with the MMS (Multisig Messaging System) <subcommand> is one of: init, info, signer, list, next, sync, transfer, delete, send, receive, export, note, show, set, help @@ -2881,73 +3034,73 @@ Get help about a subcommand with: help mms <subcommand>, or mms help <s <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2897"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3075"/> <source>Initialize and configure the MMS for M/N = number of required signers/number of authorized signers multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2901"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3079"/> <source>Display current MMS configuration</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2905"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3083"/> <source>Set or modify authorized signer info (single-word label, transport address, Monero address), or list all signers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2909"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3087"/> <source>List all messages</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2913"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3091"/> <source>Evaluate the next possible multisig-related action(s) according to wallet state, and execute or offer for choice By using 'sync' processing of waiting messages with multisig sync info can be forced regardless of wallet state</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2918"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3096"/> <source>Force generation of multisig sync info regardless of wallet state, to recover from special situations like "stale data" errors</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2922"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3100"/> <source>Initiate transfer with MMS support; arguments identical to normal 'transfer' command arguments, for info see there</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2926"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3104"/> <source>Delete a single message by giving its id, or delete all messages by using 'all'</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2930"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3108"/> <source>Send a single message by giving its id, or send all waiting messages</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2934"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3112"/> <source>Check right away for new messages to receive</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2938"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3116"/> <source>Write the content of a message to a file "mms_message_content"</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2942"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3120"/> <source>Send a one-line message to an authorized signer, identified by its label, or show any waiting unread notes</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2946"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3124"/> <source>Show detailed info about a single message</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2950"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3128"/> <source>Available options: auto-send <1|0> Whether to automatically send newly generated messages right away. @@ -2955,27 +3108,27 @@ By using 'sync' processing of waiting messages with multisig sync info <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3134"/> <source>Send completed signer config to all other authorized signers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2960"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3138"/> <source>Start auto-config at the auto-config manager's wallet by issuing auto-config tokens and optionally set others' labels</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2964"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3142"/> <source>Delete any auto-config tokens and abort a auto-config process</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2968"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3146"/> <source>Start auto-config by using the token received from the auto-config manager</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2972"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3150"/> <source>Print the ring(s) used to spend a given key image or transaction (if the ring size is > 1) Output format: @@ -2983,1529 +3136,1600 @@ Key Image, "absolute", list of rings</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2978"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3156"/> <source>Set the ring used for a given key image, so it can be reused in a fork</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2982"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3164"/> <source>Save known rings to the shared rings database</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2986"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3168"/> <source>Mark output(s) as spent so they never get selected as fake outputs in a ring</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2990"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3172"/> <source>Marks an output as unspent so it may get selected as a fake output in a ring</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2994"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3176"/> <source>Checks whether an output is marked as spent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2998"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3200"/> <source>Returns version information</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3087"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3297"/> <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="3088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3298"/> <source>0, 1, 2, 3, or 4, or one of </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3090"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3300"/> <source>0|1|2 (or never|action|decrypt)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3091"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3301"/> <source>monero, millinero, micronero, nanonero, piconero</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3102"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3312"/> <source><major>:<minor></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3106"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3317"/> <source><device_name[:device_spec]></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3127"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3338"/> <source>wrong number range, use: %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3377"/> <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="3183"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3394"/> <source>Wallet and key files found, loading...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3189"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> <source>Key file found but not wallet file. Regenerating...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3195"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3406"/> <source>Key file not found. Failed to open wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3214"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3425"/> <source>Generating new wallet...</source> <translation>新しいウォレットを生じてます...</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3232"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3443"/> <source>NOTE: the following %s can be used to recover access to your wallet. 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="3234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3445"/> <source>string</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3445"/> <source>25 words</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3273"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3506"/> <source>Can't specify more than one of --testnet and --stagenet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3285"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3521"/> <source>can't specify more than one of --generate-new-wallet="wallet_name", --wallet-file="wallet_name", --generate-from-view-key="wallet_name", --generate-from-spend-key="wallet_name", --generate-from-keys="wallet_name", --generate-from-multisig-keys="wallet_name", --generate-from-json="jsonfilename" and --generate-from-device="wallet_name"</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3364"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3600"/> <source>Electrum-style word list failed verification</source> <translation>Electrumな単語表の検証に失敗しました</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3369"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3605"/> <source>Enter seed offset passphrase, empty if none</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3395"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3415"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3450"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3470"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3490"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3505"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3553"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3578"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3594"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3633"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3630"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3650"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3686"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3707"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3727"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3742"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3791"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3816"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3832"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3871"/> <source>No data supplied, cancelled</source> <translation>データをもらいませんでしたのでキャンセルしました</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3401"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3476"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3584"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5371"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5969"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6243"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6818"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6886"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6950"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7154"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8193"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8454"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3713"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3822"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5770"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6360"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6631"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7218"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7286"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7350"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7554"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8899"/> <source>failed to parse address</source> <translation>アドレスの解析に失敗しました</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3421"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3511"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3656"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3748"/> <source>failed to parse view key secret key</source> <translation>秘密なビューキーの解析に失敗しました</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3430"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3528"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3665"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3765"/> <source>failed to verify view key secret key</source> <translation>秘密なビューキーの検証に失敗しました</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3434"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3532"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3613"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3669"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3769"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3851"/> <source>view key does not match standard address</source> <translation>ビューキーが一般的なアドレスと一致しませんでした</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3439"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3459"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3536"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3669"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3674"/> <location filename="../src/simplewallet/simplewallet.cpp" line="3695"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3726"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3773"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3907"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3934"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3966"/> <source>account creation failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3455"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3496"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3638"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3691"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3733"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3876"/> <source>failed to parse spend key secret key</source> <translation>秘密なスペンドキーの解析に失敗しました</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3520"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3658"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3757"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3896"/> <source>failed to verify spend key secret key</source> <translation>秘密なスペンドキーの検証に失敗しました</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3524"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3663"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3761"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3901"/> <source>spend key does not match standard address</source> <translation>スペンドキーが一般的なアドレスと一致しませんでした</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3701"/> - <source>No restore height is specified.</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3866"/> + <source>Secret spend key (%u of %u)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3702"/> - <source>Assumed you are creating a new account, restore will be done from current estimated blockchain height.</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3941"/> + <source>No restore height is specified.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3703"/> - <source>Use --restore-height if you want to restore an already setup account from a specific height</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3942"/> + <source>Assumed you are creating a new account, restore will be done from current estimated blockchain height.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3707"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3947"/> <source>account creation aborted</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3816"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4069"/> <source>can't specify --subaddress-lookahead and --wallet-file at the same time</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3820"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4073"/> <source>failed to open account</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3824"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4391"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4444"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4529"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6854"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4078"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4779"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4832"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4917"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7254"/> <source>wallet is null</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3832"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4086"/> <source>Failed to initialize ring database: privacy enhancing features will be inactive</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3917"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4194"/> <source>If your display freezes, exit blind with ^C, then run again with --use-english-language-names</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3935"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3940"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4212"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4217"/> <source>invalid language choice entered. Please try again. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4019"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4296"/> <source>View key: </source> <translation>ビューキー: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4407"/> <source>Generated new wallet on hw device: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4209"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4486"/> <source>Key file not found. Failed to open wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4286"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4563"/> <source>You may want to remove the file "%s" and try again</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4314"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4591"/> <source>failed to deinitialize wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4367"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4644"/> <source>Watch only wallet saved as: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4371"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4648"/> <source>Failed to save watch only wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4382"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5024"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8522"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4770"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5432"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8967"/> <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="4498"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4886"/> <source>Expected trusted or untrusted, got </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4515"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4903"/> <source>trusted</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4515"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4903"/> <source>untrusted</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4539"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4927"/> <source>blockchain can't be saved: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4569"/> - <source>NOTE: this transaction uses an encrypted payment ID: consider using subaddresses instead</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4572"/> - <source>WARNING: this transaction uses an unencrypted payment ID: consider using subaddresses instead</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4608"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4992"/> <source>Password needed (%s) - use the refresh command</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4616"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5000"/> <source>Enter password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4631"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5015"/> <source>Device requires attention</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4639"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5023"/> <source>Enter device PIN</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4641"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5025"/> <source>Failed to read device PIN</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4648"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5032"/> <source>Please enter the device passphrase on the device</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4655"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5039"/> <source>Enter device passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4657"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5041"/> <source>Failed to read device passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4673"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5057"/> <source>The first refresh has finished for the HW-based wallet with received money. hw_key_images_sync is needed. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4675"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4753"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5059"/> <source>Do you want to do it now? (Y/Yes/N/No): </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4677"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5061"/> <source>hw_key_images_sync skipped. Run command manually before a transfer.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4720"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5038"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5446"/> <source>daemon is busy. Please try again later.</source> <translation>デーモンは忙しいです。後でもう一度試してください。</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4724"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5042"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5127"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5450"/> <source>no connection to daemon. Please make sure daemon is running.</source> <translation>デーモンの接続が確立ありません。デーモンが実行中になっていることを確認してください。</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4734"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5137"/> <source>refresh error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4782"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5185"/> <source> (Some owned outputs have missing key images - import_key_images needed)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4786"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5194"/> <source>Balance: </source> <translation>残高: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4855"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5263"/> <source>Invalid keyword: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4893"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5301"/> <source>pubkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4893"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5301"/> <source>key image</source> <translation>キーイメージ</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4910"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5318"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>unlocked</source> <translation></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> <source>ringct</source> <translation>ringct</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4904"/> - <source>Heights: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4909"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5317"/> <source>T</source> <translation>T</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4909"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5317"/> <source>F</source> <translation>F</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4910"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5318"/> <source>locked</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4911"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5319"/> <source>RingCT</source> <translation>RingCT</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4911"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5319"/> <source>-</source> <translation>-</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4990"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5398"/> <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="5046"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5454"/> <source>failed to get spent status</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5538"/> <source>failed to find construction data for tx input</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5543"/> + <source> +Input %llu/%llu (%s): amount=%s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5601"/> <source>the same transaction</source> <translation>同じ取引</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5601"/> <source>blocks that are temporally very close</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9015"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6295"/> + <source>Locked blocks too high, max 1000000 (˜4 yrs)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5818"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6387"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6656"/> + <source>No payment id is included with this transaction. Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5882"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5892"/> + <source>Is this okay anyway?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5887"/> + <source>There is currently a %u block backlog at that fee level. Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6124"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6435"/> + <source>Sweeping %s in %llu transactions for a total fee of %s. Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6441"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6698"/> + <source>Sweeping %s for a total fee of %s. Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6177"/> + <source>Discarding %s of unmixable outputs that cannot be spent, which can be undone by "rescan_spent". Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6980"/> + <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min ring size %lu, %s. %sIs this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="8161"/> + <source>Rescan anyway?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="8654"/> + <source>Short payment IDs are to be used within an integrated address only</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="9457"/> <source> (Y/Yes/N/No): </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9042"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9484"/> <source>Choose processing:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9051"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9493"/> <source>Sign tx</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9059"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9501"/> <source>Send the tx for submission to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9063"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9505"/> <source>Send the tx for signing to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9070"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9512"/> <source>Submit tx</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9073"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9515"/> <source>unknown</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9079"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9521"/> <source>Choice: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9091"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9533"/> <source>Wrong choice</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9098"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9540"/> <source>Id</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9098"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9540"/> <source>I/O</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9098"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9540"/> <source>Authorized Signer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>Message Type</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>Height</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>R</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>Message State</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>Since</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9116"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9558"/> <source> ago</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9122"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9564"/> <source>#</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9122"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9564"/> <source>Transport Address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9565"/> <source>Auto-Config Token</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9565"/> <source>Monero Address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9127"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9135"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9137"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9569"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9577"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9579"/> <source><not set></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9178"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9620"/> <source>Message </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9179"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9621"/> <source>In/out: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9623"/> <source>State: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9623"/> <source>%s since %s, %s ago</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9185"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9627"/> <source>Sent: Never</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9189"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9631"/> <source>Sent: %s, %s ago</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9192"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9634"/> <source>Authorized signer: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9635"/> <source>Content size: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9635"/> <source> bytes</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9194"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9636"/> <source>Content: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9194"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9636"/> <source>(binary data)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9224"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9666"/> <source>Send these messages now?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9676"/> <source>Queued for sending.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9254"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9696"/> <source>Invalid message id</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9263"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9705"/> <source>usage: mms init <required_signers>/<authorized_signers> <own_label> <own_transport_address></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9269"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9711"/> <source>The MMS is already initialized. Re-initialize by deleting all signer info and messages?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9284"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9726"/> <source>Error in the number of required signers and/or authorized signers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9301"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9743"/> <source>The MMS is not active.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9324"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9766"/> <source>Invalid signer number </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9329"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9771"/> <source>mms signer [<number> <label> [<transport_address> [<monero_address>]]]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9348"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9790"/> <source>Invalid Monero address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9355"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9797"/> <source>Wallet state does not allow changing Monero addresses anymore</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9367"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9809"/> <source>Usage: mms list</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9380"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9822"/> <source>Usage: mms next [sync]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9405"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9847"/> <source>No next step: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9415"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9857"/> <source>prepare_multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9421"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9863"/> <source>make_multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9436"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9878"/> <source>exchange_multisig_keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9451"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9893"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10013"/> <source>export_multisig_info</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9460"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9902"/> <source>import_multisig_info</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9473"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9915"/> <source>sign_multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9483"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9925"/> <source>submit_multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9493"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9935"/> <source>Send tx</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9504"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9946"/> <source>Process signer config</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9516"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9958"/> <source>Replace current signer config with the one displayed above?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9530"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9972"/> <source>Process auto config data</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9544"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9986"/> <source>Nothing ready to process</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9564"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10006"/> <source>Usage: mms sync</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9588"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10030"/> <source>Usage: mms delete (<message_id> | all)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9595"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10037"/> <source>Delete all messages?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9621"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10063"/> <source>Usage: mms send [<message_id>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9638"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10080"/> <source>Usage: mms receive</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9655"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10097"/> <source>Usage: mms export <message_id></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9667"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10109"/> <source>Message content saved to: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9671"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10113"/> <source>Failed to to save message content</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9695"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10137"/> <source>Usage: mms note [<label> <text>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9702"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10144"/> <source>No signer found with label </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9724"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10166"/> <source>Usage: mms show <message_id></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9743"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10185"/> <source>Usage: mms set <option_name> [<option_value>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9760"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10202"/> <source>Wrong option value</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9765"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10207"/> <source>Auto-send is on</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9765"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10207"/> <source>Auto-send is off</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9770"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10212"/> <source>Unknown option</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9778"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10220"/> <source>Usage: mms help [<subcommand>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9794"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10236"/> <source>Usage: mms send_signer_config</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9800"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10242"/> <source>Signer config not yet complete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9815"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10257"/> <source>Usage: mms start_auto_config [<label> <label> ...]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9820"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10262"/> <source>There are signers without a label set. Complete labels before auto-config or specify them as parameters here.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9826"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10268"/> <source>Auto-config is already running. Cancel and restart?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9850"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10292"/> <source>Usage: mms stop_auto_config</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9853"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10295"/> <source>Delete any auto-config tokens and stop auto-config?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9866"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10308"/> <source>Usage: mms auto_config <auto_config_token></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9873"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10315"/> <source>Invalid auto-config token</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9879"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10321"/> <source>Auto-config already running. Cancel and restart?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9911"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10339"/> + <source>MMS not available in this wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="10363"/> <source>The MMS is not active. Activate using the "mms init" command</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9988"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10440"/> <source>Invalid MMS subcommand</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9993"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9997"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10445"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10449"/> <source>Error in MMS command: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6969"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7079"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7369"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7479"/> <source>Good signature</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6996"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7081"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7396"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7481"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7581"/> <source>Bad signature</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8169"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8612"/> <source>Standard address: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8174"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8617"/> <source>failed to parse payment ID or address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8215"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8659"/> <source>failed to parse payment ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8233"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8677"/> <source>failed to parse index</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8241"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8685"/> <source>Address book is empty.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8247"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8691"/> <source>Index: </source> <translation>インデックス: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8248"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8378"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8692"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8823"/> <source>Address: </source> <translation>アドレス: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8249"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8693"/> <source>Payment ID: </source> <translation>ペイメントID: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8250"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8377"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8694"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8822"/> <source>Description: </source> <translation>記述: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8407"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8852"/> <source>wallet is watch-only and cannot sign</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1289"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8421"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8447"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8684"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1313"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8866"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8892"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9124"/> <source>failed to read file </source> <translation>ファイルの読み込みに失敗しました </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6958"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7072"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3943"/> + <source>Use --restore-height or --restore-date if you want to restore an already setup account from a specific height.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3945"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4033"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5984"/> + <source>Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4056"/> + <source>Still apply restore height?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="7358"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7472"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7566"/> <source>failed to load signature file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7020"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7420"/> <source>wallet is watch-only and cannot generate the proof</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7104"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7504"/> <source>The reserve proof can be generated only by a full wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7159"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7559"/> <source>Address must not be a subaddress</source> <translation>アドレスはサブアドレスであってはならないです</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7177"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7577"/> <source>Good signature -- total: %s, spent: %s, unspent: %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7365"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7767"/> <source>[Double spend seen on the network: this transaction may or may not end up being mined] </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7641"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8045"/> <source>There is no unspent output in the specified address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7799"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8242"/> <source> (no daemon)</source> <translation> (デーモンありません)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7801"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8244"/> <source> (out of sync)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7852"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8295"/> <source>(Untitled account)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7865"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7883"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7908"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7931"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8077"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8100"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8308"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8326"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8351"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8374"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8520"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8543"/> <source>failed to parse index: </source> <translation>インデックスの解析に失敗しました: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7870"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8082"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8313"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8525"/> <source>specify an index between 0 and </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7988"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8431"/> <source> Grand total: Balance: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7988"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8431"/> <source>, unlocked balance: </source> <translation>、ロック解除された残高: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7996"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8439"/> <source>Untagged accounts:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8002"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8445"/> <source>Tag %s is unregistered.</source> <translation type="unfinished">タグ %s を登録してません。</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8005"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8448"/> <source>Accounts with tag: </source> <translation>タグを持ってるアカウント: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8006"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8449"/> <source>Tag's description: </source> <translation>タグの記述: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8451"/> <source>Account</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8014"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8457"/> <source> %c%8u %6s %21s %21s %21s</source> <translation> %c%8u %6s %21s %21s %21s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8024"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8467"/> <source>----------------------------------------------------------------------------------</source> <translation>----------------------------------------------------------------------------------</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8025"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8468"/> <source>%15s %21s %21s</source> <translation>%15s %21s %21s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8048"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8491"/> <source>Primary address</source> <translation>プライマリアドレス</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8048"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8491"/> <source>(used)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8069"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8512"/> <source>(Untitled address)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8109"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8552"/> <source><index_min> is already out of bound</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8114"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8557"/> <source><index_max> exceeds the bound</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8140"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8152"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8583"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8595"/> <source>Integrated addresses can only be created for account 0</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8164"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8607"/> <source>Integrated address: %s, payment ID: %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8169"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8612"/> <source>Subaddress: </source> <translation>サブアドレス: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8335"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8779"/> <source>no description found</source> <translation>記述を見つかれませんでした</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8337"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8781"/> <source>description found: </source> <translation>記述を見つかれました: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8376"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8821"/> <source>Filename: </source> <translation>ファイル名: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8381"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8826"/> <source>Watch only</source> <translation>閲覧専用</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8383"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8828"/> <source>%u/%u multisig%s</source> <translation>%u/%u マルチサイン%s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8385"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8830"/> <source>Normal</source> <translation>ノーマル</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8386"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9180"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8831"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9622"/> <source>Type: </source> <translation>タイプ: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8412"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8857"/> <source>This wallet is multisig and cannot sign</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8461"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8906"/> <source>Bad signature from </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8465"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8910"/> <source>Good signature from </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8484"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8929"/> <source>wallet is watch-only and cannot export key images</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1228"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8498"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8651"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1252"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8943"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9091"/> <source>failed to save file </source> <translation>ファイルを保存できませんでした </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8509"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8954"/> <source>Signed key images exported to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8662"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9102"/> <source>Outputs exported to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5354"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6417"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7115"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7600"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7608"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5752"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6805"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7515"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8004"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8012"/> <source>amount is wrong: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5355"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6417"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5753"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6805"/> <source>expected number from 0 to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5721"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6122"/> <source>Sweeping </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6350"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6738"/> <source>Money successfully sent, transaction: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6530"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6933"/> <source>Change goes to more than one address</source> <translation type="unfinished">お釣りは複数のアドレスに送ります</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6974"/> <source>%s change to %s</source> <translation>%s のお釣り %s に</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6574"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6977"/> <source>no change</source> <translation>お釣りありません</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1435"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1448"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6646"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1459"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1472"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7049"/> <source>Transaction successfully signed to file </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6713"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6749"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6811"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6860"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6942"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7027"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7062"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8267"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8295"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8714"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7116"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7154"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7211"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7260"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7342"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7427"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7462"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8711"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8739"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9154"/> <source>failed to parse txid</source> <translation>txidの解析に失敗しました</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6727"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7132"/> <source>Tx key: </source> <translation>txキー: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6732"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7137"/> <source>no tx keys found for this txid</source> <translation type="unfinished">このtxidのためにtxキーを見つかれませんでした</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6829"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7041"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7229"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7441"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7530"/> <source>signature file saved to: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6831"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7043"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7132"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7231"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7443"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7532"/> <source>failed to save signature file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6868"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6877"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7268"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7277"/> <source>failed to parse tx key</source> <translation>txキーの解析に失敗しました</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6835"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6923"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7001"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7235"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7323"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7401"/> <source>error: </source> <translation>エラー: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6899"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6972"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7299"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7372"/> <source>received</source> <translation>貰いました</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6899"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6972"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7299"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7372"/> <source>in txid</source> <translation>txidに</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6918"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6991"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7318"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7391"/> <source>received nothing in txid</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6902"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6975"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7375"/> <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="6908"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6981"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7308"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7381"/> <source>This transaction has %u confirmations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6912"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6985"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7312"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7385"/> <source>WARNING: failed to determine number of confirmations!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7266"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7666"/> <source>bad min_height parameter:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7278"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7678"/> <source>bad max_height parameter:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7296"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7696"/> <source>in</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7615"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8019"/> <source><min_amount> should be smaller than <max_amount></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7647"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8051"/> <source> Amount: </source> <translation> 金額: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7647"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8051"/> <source>, number of keys: </source> <translation>、キーの数: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7652"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8056"/> <source> </source> <translation> </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7657"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8061"/> <source> Min block height: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7658"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8062"/> <source> Max block height: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7659"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8063"/> <source> Min amount found: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7660"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8064"/> <source> Max amount found: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7661"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8065"/> <source> Total count: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7701"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8105"/> <source> Bin size: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7702"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8106"/> <source> Outputs per *: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7704"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8108"/> <source>count ^ </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7706"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8110"/> <source> |</source> <translation> |</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7708"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8112"/> <source> +</source> <translation> +</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7708"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8112"/> <source>+--> block height </source> <translation>+--> ブロック高 </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8113"/> <source> ^</source> <translation> ^</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8113"/> <source>^ </source> <translation>^ </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7710"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8114"/> <source> </source> <translation> </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7797"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8240"/> <source>wallet</source> <translation>ウォレット</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="870"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8144"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="893"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8587"/> <source>Random payment ID: </source> <translation>ランダムなペイメントID: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8145"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8588"/> <source>Matching integrated address: </source> <translation type="unfinished"></translation> </message> @@ -4757,311 +4981,321 @@ Use "mms note" to display the waiting notes</source> <context> <name>sw</name> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="125"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="135"/> <source>Generate new wallet and save it to <arg></source> <translation>新しいウォレットを生じろ <arg> をこっちにセーブしてください</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="126"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="136"/> <source>Generate new wallet from device and save it to <arg></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="127"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="137"/> <source>Generate incoming-only wallet from view key</source> <translation>ビューキーで閲覧専用ウォレットを生じろください</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="128"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="138"/> <source>Generate deterministic wallet from spend key</source> <translation>スペンドキーで決定論的なウォレットを生じろください</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="129"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="139"/> <source>Generate wallet from private keys</source> <translation>秘密なキーでウォレットを生じろください</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="140"/> <source>Generate a master wallet from multisig wallet keys</source> <translation>マルチシガーウォレットキーでマスターウォレットを生じろください</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="132"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="142"/> <source>Language for mnemonic</source> <translation>ニーモニックのための言語</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="133"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="143"/> <source>Specify Electrum seed for wallet recovery/creation</source> <translation>ウォレットの回収や作成のためにElectrumなニーモニックシードを指定してください</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="134"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="144"/> <source>Recover wallet using Electrum-style mnemonic seed</source> <translation>Electrumなニーモニックシードでウォレットを復元してください</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="135"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="145"/> <source>Recover multisig wallet using Electrum-style mnemonic seed</source> <translation>Electrumなニーモニックシードでマルチシガーウォレットを復元してください</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="136"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="146"/> <source>Generate non-deterministic view and spend keys</source> <translation>非決定論的のビューとスペンドキーを生じろください</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="361"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="149"/> + <source>Restore from estimated blockchain height on specified date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="382"/> <source>invalid argument: must be either 0/1, true/false, y/n, yes/no</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="417"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="438"/> <source>DNSSEC validation passed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="421"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="442"/> <source>WARNING: DNSSEC validation was unsuccessful, this address may not be correct!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="424"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="445"/> <source>For URL: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="426"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="447"/> <source> Monero Address = </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="428"/> - <source>Is this OK? (Y/n) </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="438"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="459"/> <source>you have cancelled the transfer request</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="459"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="480"/> <source>failed to parse index: </source> <translation type="unfinished">インデックスの解析に失敗しました: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="472"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="493"/> <source>invalid format for subaddress lookahead; must be <major>:<minor></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="489"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="510"/> <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="494"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="515"/> <source>RPC error: </source> <translation type="unfinished">RPCエラー: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="498"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="519"/> <source>failed to get random outputs to mix: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="505"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="513"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="526"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="534"/> <source>Not enough money in unlocked balance</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="523"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="544"/> <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="529"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="550"/> <source>not enough outputs for specified ring size</source> <translation type="unfinished">指定したリングサイズのアウトプットが不十分です</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="532"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="553"/> <source>output amount</source> <translation type="unfinished">アウトプットの金額</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="532"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="553"/> <source>found outputs to use</source> <translation type="unfinished">使うためにアウトプットを見つかれました</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="534"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="555"/> <source>Please use sweep_unmixable.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="538"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="559"/> <source>transaction was not constructed</source> <translation type="unfinished">取引を作りませんでした</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="543"/> - <source>transaction %s was rejected by daemon with status: </source> - <translation type="unfinished">取引 %s がデーモンによって拒否しました。ステータス: </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="546"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="567"/> <source>Reason: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="555"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="576"/> <source>one of destinations is zero</source> <translation type="unfinished">宛先の1つはゼロです</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="560"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="581"/> <source>failed to find a suitable way to split transactions</source> <translation type="unfinished">取引を分割する適切な方法を見つけることができませんでした</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="566"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="587"/> <source>unknown transfer error: </source> <translation type="unfinished">不明な転送エラー: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="592"/> <source>Multisig error: </source> <translation type="unfinished">マルチサインエラー: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="577"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="598"/> <source>internal error: </source> <translation type="unfinished">内部エラー: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="582"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="603"/> <source>unexpected error: </source> <translation type="unfinished">予期せぬエラー: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="586"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="607"/> <source>There was an error, which could mean the node may be trying to get you to retry creating a transaction, and zero in on which outputs you own. Or it could be a bona fide error. It may be prudent to disconnect from this node, and not try to send a transaction immediately. Alternatively, connect to another node so the original node cannot correlate information.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="596"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="617"/> <source>File %s likely stores wallet private keys! Use a different file name.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="599"/> - <source>File %s already exists. Are you sure to overwrite it? (Y/Yes/N/No): </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7195"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7595"/> <source> seconds</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7197"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7597"/> <source> minutes</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7199"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7599"/> <source> hours</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7601"/> <source> days</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7203"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7603"/> <source> months</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7204"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7604"/> <source>a long time</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8940"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9382"/> <source>This is the command line monero wallet. It needs to connect to a monero daemon to work correctly. WARNING: Do not reuse your Monero keys on another fork, UNLESS this fork has key reuse mitigations built in. Doing so will harm your privacy.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8965"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9407"/> <source>Unknown command: </source> <translation type="unfinished">未知のコマンド: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="137"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="147"/> <source>Allow communicating with a daemon that uses a different RPC version</source> <translation>別のRPCバージョンを使用してるデーモンとの通信を許可してください</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="138"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="148"/> <source>Restore from specific blockchain height</source> <translation>特定ブロックチェイン高で復元してください</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="139"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="150"/> <source>The newly created transaction will not be relayed to the monero network</source> <translation>新しい取引をネットワークに中継しません</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="140"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="151"/> <source>Create an address file for new wallets</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="142"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="153"/> <source>Display English language names</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="276"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="154"/> + <source>Support obsolete long (unencrypted) payment ids (using them harms your privacy)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="297"/> <source>failed to read wallet password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="283"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="304"/> <source>Enter a new password for the wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="283"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="304"/> <source>Wallet password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="293"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="485"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="314"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="506"/> <source>daemon is busy. Please try again later.</source> <translation>デーモンは忙しいです。後でもう一度試してください。</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="323"/> <source>possibly lost connection to daemon</source> <translation>デモンの接続が切れましたかもしりません</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="319"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="340"/> <source>Error: </source> <translation>エラー: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8959"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="449"/> + <source>Is this OK?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="564"/> + <source>transaction %s was rejected by daemon</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="620"/> + <source>File %s already exists. Are you sure to overwrite it?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="9401"/> <source>Failed to initialize wallet</source> <translation>ウォレットを初期化できませんでした</translation> </message> @@ -5069,359 +5303,448 @@ WARNING: Do not reuse your Monero keys on another fork, UNLESS this fork has key <context> <name>tools::wallet2</name> <message> - <location filename="../src/wallet/wallet2.cpp" line="201"/> + <location filename="../src/wallet/wallet2.cpp" line="234"/> <source>Use daemon instance at <host>:<port></source> <translation><host>:<port>でデーモンインスタンスを使ってください</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="202"/> + <location filename="../src/wallet/wallet2.cpp" line="235"/> <source>Use daemon instance at host <arg> instead of localhost</source> <translation>localhostの代わりにホスト <arg>でデーモンインスタンスを使ってください</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="206"/> + <location filename="../src/wallet/wallet2.cpp" line="240"/> <source>Wallet password file</source> <translation>ウォレットのパスワードファイル</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="207"/> + <location filename="../src/wallet/wallet2.cpp" line="241"/> <source>Use daemon instance at port <arg> instead of 18081</source> <translation>18081の代わりにポート <arg>でデーモンインスタンスを使ってください</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="209"/> + <location filename="../src/wallet/wallet2.cpp" line="250"/> <source>For testnet. Daemon must also be launched with --testnet flag</source> <translation>テストネットのためにデーモンは --testnet のフラグで開始する必要があります</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="282"/> + <location filename="../src/wallet/wallet2.cpp" line="361"/> <source>can't specify daemon host or port more than once</source> <translation>デーモンのホストやポートを複数回指定することはできません</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="355"/> + <location filename="../src/wallet/wallet2.cpp" line="480"/> <source>can't specify more than one of --password and --password-file</source> <translation>--password と --passwordfile を1つしか指定しません</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="368"/> + <location filename="../src/wallet/wallet2.cpp" line="493"/> <source>the password file specified could not be read</source> <translation>指定されたパスワードファイルを読み取れません</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="394"/> + <location filename="../src/wallet/wallet2.cpp" line="519"/> <source>Failed to load file </source> <translation>ファイルのロードに失敗しました </translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="205"/> + <location filename="../src/wallet/wallet2.cpp" line="239"/> <source>Wallet password (escape/quote as needed)</source> <translation>ウォレットのパスワード(随時にエスケープ文字を使ってください)</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="203"/> + <location filename="../src/wallet/wallet2.cpp" line="236"/> + <source>[<ip>:]<port> socks proxy to use for daemon connections</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="237"/> <source>Enable commands which rely on a trusted daemon</source> <translation type="unfinished">必要な信用できるデーモンのコマンドをエネーブルしてください</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="204"/> + <location filename="../src/wallet/wallet2.cpp" line="238"/> <source>Disable commands which rely on a trusted daemon</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="208"/> + <location filename="../src/wallet/wallet2.cpp" line="242"/> <source>Specify username[:password] for daemon RPC client</source> <translation>デーモンのRPCクライアントを使うためにユーザー名[:パスワード]を指定してください</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="210"/> + <location filename="../src/wallet/wallet2.cpp" line="243"/> + <source>Enable SSL on daemon RPC connections: enabled|disabled|autodetect</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="247"/> + <source>List of valid fingerprints of allowed RPC servers</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="248"/> + <source>Allow any SSL certificate from the daemon</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="249"/> + <source>Allow user (via --daemon-ssl-ca-certificates) chain certificates</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="251"/> <source>For stagenet. Daemon must also be launched with --stagenet flag</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="212"/> + <location filename="../src/wallet/wallet2.cpp" line="253"/> <source>Set shared ring database path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="223"/> + <location filename="../src/wallet/wallet2.cpp" line="264"/> <source>Number of rounds for the key derivation function</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="224"/> + <location filename="../src/wallet/wallet2.cpp" line="265"/> <source>HW device to use</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="225"/> + <location filename="../src/wallet/wallet2.cpp" line="266"/> <source>HW device wallet derivation path (e.g., SLIP-10)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="313"/> + <location filename="../src/wallet/wallet2.cpp" line="268"/> + <source>Do not use DNS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="269"/> + <source>Do not connect to a daemon, nor use DNS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="353"/> + <source>Invalid argument for </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="397"/> + <source>Enabling --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="397"/> + <source> requires --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="398"/> + <source> or --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="398"/> + <source> or use of a .onion/.i2p domain</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="432"/> <source>--trusted-daemon and --untrusted-daemon are both seen, assuming untrusted</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="323"/> + <location filename="../src/wallet/wallet2.cpp" line="442"/> <source>Daemon is local, assuming trusted</source> <translation type="unfinished">デーモンはローカルです。信頼できるデーモン予期してます</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="375"/> + <location filename="../src/wallet/wallet2.cpp" line="500"/> <source>no password specified; use --prompt-for-password to prompt for a password</source> <translation>パスワードを指定しませんでした。パスワードプロンプトを見るために--prompt-for-password を使ってください</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="377"/> + <location filename="../src/wallet/wallet2.cpp" line="502"/> <source>Enter a new password for the wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="377"/> + <location filename="../src/wallet/wallet2.cpp" line="502"/> <source>Wallet password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="400"/> + <location filename="../src/wallet/wallet2.cpp" line="525"/> <source>Failed to parse JSON</source> <translation>JSONを解析に失敗しました</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="407"/> + <location filename="../src/wallet/wallet2.cpp" line="532"/> <source>Version %u too new, we can only grok up to %u</source> <translation>バージョン %u 新しすぎるです。%u までグロークできます</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="423"/> + <location filename="../src/wallet/wallet2.cpp" line="548"/> <source>failed to parse view key secret key</source> <translation>秘密なビューキーの解析に失敗しました</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="428"/> - <location filename="../src/wallet/wallet2.cpp" line="496"/> - <location filename="../src/wallet/wallet2.cpp" line="539"/> + <location filename="../src/wallet/wallet2.cpp" line="553"/> + <location filename="../src/wallet/wallet2.cpp" line="621"/> + <location filename="../src/wallet/wallet2.cpp" line="666"/> <source>failed to verify view key secret key</source> <translation>秘密なビューキーの検証に失敗しました</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="439"/> + <location filename="../src/wallet/wallet2.cpp" line="564"/> <source>failed to parse spend key secret key</source> <translation>秘密なスペンドキーの解析に失敗しました</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="444"/> - <location filename="../src/wallet/wallet2.cpp" line="506"/> - <location filename="../src/wallet/wallet2.cpp" line="565"/> + <location filename="../src/wallet/wallet2.cpp" line="569"/> + <location filename="../src/wallet/wallet2.cpp" line="631"/> + <location filename="../src/wallet/wallet2.cpp" line="692"/> <source>failed to verify spend key secret key</source> <translation>秘密なスペンドキーの検証に失敗しました</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="456"/> + <location filename="../src/wallet/wallet2.cpp" line="581"/> <source>Electrum-style word list failed verification</source> <translation>Electrumな単語表の検証に失敗しました</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="476"/> + <location filename="../src/wallet/wallet2.cpp" line="601"/> <source>At least one of either an Electrum-style word list, private view key, or private spend key must be specified</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="480"/> + <location filename="../src/wallet/wallet2.cpp" line="605"/> <source>Both Electrum-style word list and private key(s) specified</source> <translation>Electrumな単語表と秘密なキーを指定しました</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="490"/> + <location filename="../src/wallet/wallet2.cpp" line="615"/> <source>invalid address</source> <translation>不正なアドレス</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="499"/> + <location filename="../src/wallet/wallet2.cpp" line="624"/> <source>view key does not match standard address</source> <translation>ビューキーが一般的なアドレスと一致しませんでした</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="509"/> + <location filename="../src/wallet/wallet2.cpp" line="634"/> <source>spend key does not match standard address</source> <translation>スペンドキーが一般的なアドレスと一致しませんでした</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="517"/> + <location filename="../src/wallet/wallet2.cpp" line="642"/> <source>Cannot generate deprecated wallets from JSON</source> <translation>JSONで非推奨のウォレットを生成することはできません</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="551"/> + <location filename="../src/wallet/wallet2.cpp" line="678"/> <source>failed to parse address: </source> <translation>アドレスの解析に失敗しました: </translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="557"/> + <location filename="../src/wallet/wallet2.cpp" line="684"/> <source>Address must be specified in order to create watch-only wallet</source> <translation>閲覧専用ウォレットを作るためにアドレスを指定する必要があります</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="574"/> + <location filename="../src/wallet/wallet2.cpp" line="701"/> <source>failed to generate new wallet: </source> <translation>新しいウォレットの生成に失敗しました: </translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="1382"/> + <location filename="../src/wallet/wallet2.cpp" line="1625"/> <source>Password is needed to compute key image for incoming monero</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="1383"/> + <location filename="../src/wallet/wallet2.cpp" line="1626"/> <source>Invalid password: password is needed to compute key image for incoming monero</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="3770"/> - <location filename="../src/wallet/wallet2.cpp" line="4374"/> - <location filename="../src/wallet/wallet2.cpp" line="4926"/> + <location filename="../src/wallet/wallet2.cpp" line="4122"/> + <location filename="../src/wallet/wallet2.cpp" line="4712"/> + <location filename="../src/wallet/wallet2.cpp" line="5308"/> <source>Primary account</source> <translation>プライマリア カウント</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="10157"/> + <location filename="../src/wallet/wallet2.cpp" line="10885"/> <source>No funds received in this tx.</source> <translation>この取引から資金貰いませんでした。</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="10899"/> + <location filename="../src/wallet/wallet2.cpp" line="11645"/> <source>failed to read file </source> <translation>ファイルの読み込みに失敗しました </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="141"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="152"/> <source>Set subaddress lookahead sizes to <major>:<minor></source> <translation type="unfinished"></translation> </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="68"/> + <source>Enable SSL on wallet RPC connections: enabled|disabled|autodetect</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="69"/> + <location filename="../src/wallet/wallet2.cpp" line="244"/> + <source>Path to a PEM format private key</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="70"/> + <location filename="../src/wallet/wallet2.cpp" line="245"/> + <source>Path to a PEM format certificate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="71"/> + <location filename="../src/wallet/wallet2.cpp" line="246"/> + <source>Path to file containing concatenated PEM format certificate(s) to replace system CA(s).</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="72"/> + <source>List of certificate fingerprints to allow</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>tools::wallet_rpc_server</name> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="180"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="192"/> <source>Failed to create directory </source> <translation>ディレクトリの作成に失敗しました </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="182"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="194"/> <source>Failed to create directory %s: %s</source> <translation>%s %s ディレクトリの作成に失敗しました</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="193"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="205"/> <source>Cannot specify --</source> <translation>これを指定しません: --</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="193"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="205"/> <source> and --</source> <translation> と --</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="212"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="224"/> <source>Failed to create file </source> <translation>ファイルの作成に失敗しました </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="212"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="224"/> <source>. Check permissions or remove file</source> <translation>。 パーミッションを確認するか、ファイルを削除してください</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="222"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="234"/> <source>Error writing to file </source> <translation>ファイルへの書き込みエラー </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="225"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="237"/> <source>RPC username/password is stored in file </source> <translation>RPCユーザー名/パスワードはファイルに保存しました </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="479"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="613"/> <source>Tag %s is unregistered.</source> <translation>タグ %s を登録してません。</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3081"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="3242"/> <source>Transaction not possible. Available only %s, transaction amount %s = %s + %s (fee)</source> <translation>取引は無理です。利用可能な金額 %s、 取引の金額 %s = %s + %s (手数料)</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3947"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4409"/> <source>This is the RPC monero wallet. It needs to connect to a monero daemon to work correctly.</source> - <translation>これはMoneroのコマンドラインウォレットです。別のMoneroデモンと接続する必要があります。</translation> + <translation>これはMoneroのRPCウォレットです。正しく動作させるには +Moneroデーモンに接続する必要があります。</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3788"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4245"/> <source>Can't specify more than one of --wallet-file and --generate-from-json</source> <translation>--wallet-file と --generate-from-json を1つしか指定しません</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3773"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4230"/> <source>Can't specify more than one of --testnet and --stagenet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3800"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4257"/> <source>Must specify --wallet-file or --generate-from-json or --wallet-dir</source> <translation>--wallet-file や --generate-from-json や --wallet-dir を指定する必要があります</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3804"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4261"/> <source>Loading wallet...</source> <translation>ウォレットをロードしてます...</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3838"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3870"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4295"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4327"/> <source>Saving wallet...</source> <translation>ウォレットを保存してます...</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3840"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3872"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4297"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4329"/> <source>Successfully saved</source> <translation>保存しました</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3843"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4300"/> <source>Successfully loaded</source> <translation>ロードしました</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3847"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4304"/> <source>Wallet initialization failed: </source> <translation>ウォレットを初期化できませんでした: </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3853"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4310"/> <source>Failed to initialize wallet RPC server</source> <translation>ウォレットのRPCサーバを初期化できませんでした</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3857"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4314"/> <source>Starting wallet RPC server</source> <translation>ウォレットのRPCサーバを開始してます</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3864"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4321"/> <source>Failed to run wallet: </source> <translation>ウォレットを起動することできませんでした: </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3867"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4324"/> <source>Stopped wallet RPC server</source> <translation>ウォレットのRPCサーバを停止しました</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3876"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4333"/> <source>Failed to save wallet: </source> <translation>ウォレットを保存することできませんでした: </translation> </message> @@ -5430,8 +5753,8 @@ daemon to work correctly.</source> <name>wallet_args</name> <message> <location filename="../src/gen_multisig/gen_multisig.cpp" line="168"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8908"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3928"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4385"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9348"/> <source>Wallet options</source> <translation>ウォレットのオプション</translation> </message> @@ -5469,7 +5792,8 @@ daemon to work correctly.</source> <location filename="../src/wallet/wallet_args.cpp" line="144"/> <source>This is the command line monero wallet. It needs to connect to a monero daemon to work correctly.</source> - <translation>これはMoneroのコマンドラインウォレットです。別のMoneroデモンと接続する必要があります。</translation> + <translation>これはMoneroのコマンドラインウォレットです。正しく動作させるには +Moneroデーモンに接続する必要があります。</translation> </message> <message> <location filename="../src/wallet/wallet_args.cpp" line="169"/> diff --git a/translations/monero_sv.ts b/translations/monero_sv.ts index f4704fdd6..0d5b34023 100644 --- a/translations/monero_sv.ts +++ b/translations/monero_sv.ts @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> -<TS version="2.0"> +<TS version="2.1"> <context> <name>Monero::AddressBookImpl</name> <message> @@ -37,42 +37,42 @@ <translation>Det gick inte att skriva transaktioner till fil</translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="121"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="138"/> <source>daemon is busy. Please try again later.</source> <translation>daemonen är upptagen. Försök igen senare.</translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="124"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="141"/> <source>no connection to daemon. Please make sure daemon is running.</source> <translation>ingen anslutning till daemonen. Se till att daemonen körs.</translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="128"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="145"/> <source>transaction %s was rejected by daemon with status: </source> <translation>transaktionen %s avvisades av daemonen med status: </translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="133"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="150"/> <source>. Reason: </source> <translation>. Orsak: </translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="135"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="152"/> <source>Unknown exception: </source> <translation>Okänt undantag: </translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="138"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="155"/> <source>Unhandled exception</source> <translation>Ohanterat undantag</translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="211"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="228"/> <source>Couldn't multisig sign data: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="233"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="250"/> <source>Couldn't sign multisig transaction: </source> <translation type="unfinished"></translation> </message> @@ -134,384 +134,384 @@ <context> <name>Monero::WalletImpl</name> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1383"/> + <location filename="../src/wallet/api/wallet.cpp" line="1459"/> <source>payment id has invalid format, expected 16 or 64 character hex string: </source> <translation>betalnings-ID har ogiltigt format. En hexadecimal sträng med 16 eller 64 tecken förväntades: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1392"/> + <location filename="../src/wallet/api/wallet.cpp" line="1468"/> <source>Failed to add short payment id: </source> <translation>Det gick inte att lägga till kort betalnings-ID: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1428"/> <location filename="../src/wallet/api/wallet.cpp" line="1510"/> + <location filename="../src/wallet/api/wallet.cpp" line="1592"/> <source>daemon is busy. Please try again later.</source> <translation>daemonen är upptagen. Försök igen senare.</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1430"/> <location filename="../src/wallet/api/wallet.cpp" line="1512"/> + <location filename="../src/wallet/api/wallet.cpp" line="1594"/> <source>no connection to daemon. Please make sure daemon is running.</source> <translation>ingen anslutning till daemonen. Se till att daemonen körs.</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1432"/> <location filename="../src/wallet/api/wallet.cpp" line="1514"/> + <location filename="../src/wallet/api/wallet.cpp" line="1596"/> <source>RPC error: </source> <translation>RPC-fel: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1460"/> - <location filename="../src/wallet/api/wallet.cpp" line="1545"/> + <location filename="../src/wallet/api/wallet.cpp" line="1542"/> + <location filename="../src/wallet/api/wallet.cpp" line="1627"/> <source>not enough outputs for specified ring size</source> <translation>inte tillräckligt med utgångar för angiven ringstorlek</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1462"/> - <location filename="../src/wallet/api/wallet.cpp" line="1547"/> + <location filename="../src/wallet/api/wallet.cpp" line="1544"/> + <location filename="../src/wallet/api/wallet.cpp" line="1629"/> <source>found outputs to use</source> <translation>hittade utgångar att använda</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1464"/> + <location filename="../src/wallet/api/wallet.cpp" line="1546"/> <source>Please sweep unmixable outputs.</source> <translation>Svep upp omixbara utgångar.</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1438"/> - <location filename="../src/wallet/api/wallet.cpp" line="1521"/> + <location filename="../src/wallet/api/wallet.cpp" line="1520"/> + <location filename="../src/wallet/api/wallet.cpp" line="1603"/> <source>not enough money to transfer, available only %s, sent amount %s</source> <translation>inte tillräckligt med pengar för överföring, endast tillgängligt %s, skickat belopp %s</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="541"/> + <location filename="../src/wallet/api/wallet.cpp" line="589"/> <source>failed to parse address</source> <translation>det gick inte att parsa adressen</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="552"/> + <location filename="../src/wallet/api/wallet.cpp" line="600"/> <source>failed to parse secret spend key</source> <translation>det gick inte att parsa hemlig spendernyckel</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="575"/> + <location filename="../src/wallet/api/wallet.cpp" line="623"/> <source>failed to parse secret view key</source> <translation>det gick inte att parsa hemlig granskningsnyckel</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="584"/> + <location filename="../src/wallet/api/wallet.cpp" line="632"/> <source>failed to verify secret spend key</source> <translation>det gick inte att verifiera hemlig spendernyckel</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="588"/> + <location filename="../src/wallet/api/wallet.cpp" line="636"/> <source>spend key does not match address</source> <translation>spendernyckel matchar inte adress</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="594"/> + <location filename="../src/wallet/api/wallet.cpp" line="642"/> <source>failed to verify secret view key</source> <translation>det gick inte att verifiera hemlig granskningsnyckel</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="598"/> + <location filename="../src/wallet/api/wallet.cpp" line="646"/> <source>view key does not match address</source> <translation>granskningsnyckel matchar inte adress</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="621"/> - <location filename="../src/wallet/api/wallet.cpp" line="638"/> + <location filename="../src/wallet/api/wallet.cpp" line="669"/> + <location filename="../src/wallet/api/wallet.cpp" line="686"/> <source>failed to generate new wallet: </source> <translation>det gick inte att skapa ny plånbok: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="885"/> + <location filename="../src/wallet/api/wallet.cpp" line="955"/> <source>Failed to send import wallet request</source> <translation>Det gick inte att skicka begäran om att importera plånbok</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1049"/> + <location filename="../src/wallet/api/wallet.cpp" line="1125"/> <source>Failed to load unsigned transactions</source> <translation>Det gick inte att läsa in osignerade transaktioner</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1068"/> + <location filename="../src/wallet/api/wallet.cpp" line="1144"/> <source>Failed to load transaction from file</source> <translation>Det gick inte att läsa in transaktion från fil</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1084"/> + <location filename="../src/wallet/api/wallet.cpp" line="1160"/> <source>Wallet is view only</source> <translation>Plånboken är endast för granskning</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1092"/> + <location filename="../src/wallet/api/wallet.cpp" line="1168"/> <source>failed to save file </source> <translation>det gick inte att spara fil </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1108"/> + <location filename="../src/wallet/api/wallet.cpp" line="1184"/> <source>Key images can only be imported with a trusted daemon</source> <translation>Nyckelavbildningar kan bara importeras med en betrodd daemon</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1121"/> + <location filename="../src/wallet/api/wallet.cpp" line="1197"/> <source>Failed to import key images: </source> <translation>Det gick inte att importera nyckelavbildningar: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1153"/> + <location filename="../src/wallet/api/wallet.cpp" line="1229"/> <source>Failed to get subaddress label: </source> <translation>Det gick inte att hämta etikett för underadress: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1166"/> + <location filename="../src/wallet/api/wallet.cpp" line="1242"/> <source>Failed to set subaddress label: </source> <translation>Det gick inte att ange etikett för underadress: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="567"/> + <location filename="../src/wallet/api/wallet.cpp" line="615"/> <source>Neither view key nor spend key supplied, cancelled</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="686"/> + <location filename="../src/wallet/api/wallet.cpp" line="734"/> <source>Electrum seed is empty</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="695"/> + <location filename="../src/wallet/api/wallet.cpp" line="743"/> <source>Electrum-style word list failed verification</source> <translation type="unfinished">Det gick inte att verifiera ordlista av Electrum-typ</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1183"/> + <location filename="../src/wallet/api/wallet.cpp" line="1259"/> <source>Failed to get multisig info: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1200"/> - <location filename="../src/wallet/api/wallet.cpp" line="1214"/> + <location filename="../src/wallet/api/wallet.cpp" line="1276"/> + <location filename="../src/wallet/api/wallet.cpp" line="1290"/> <source>Failed to make multisig: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1229"/> + <location filename="../src/wallet/api/wallet.cpp" line="1305"/> <source>Failed to finalize multisig wallet creation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1232"/> + <location filename="../src/wallet/api/wallet.cpp" line="1308"/> <source>Failed to finalize multisig wallet creation: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1248"/> + <location filename="../src/wallet/api/wallet.cpp" line="1324"/> <source>Failed to export multisig images: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1266"/> + <location filename="../src/wallet/api/wallet.cpp" line="1342"/> <source>Failed to parse imported multisig images</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1276"/> + <location filename="../src/wallet/api/wallet.cpp" line="1352"/> <source>Failed to import multisig images: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1290"/> + <location filename="../src/wallet/api/wallet.cpp" line="1366"/> <source>Failed to check for partial multisig key images: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1318"/> + <location filename="../src/wallet/api/wallet.cpp" line="1394"/> <source>Failed to restore multisig transaction: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1358"/> + <location filename="../src/wallet/api/wallet.cpp" line="1434"/> <source>Invalid destination address</source> <translation type="unfinished">Ogiltig måladress</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1434"/> + <location filename="../src/wallet/api/wallet.cpp" line="1516"/> <source>failed to get outputs to mix: %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1445"/> - <location filename="../src/wallet/api/wallet.cpp" line="1529"/> + <location filename="../src/wallet/api/wallet.cpp" line="1527"/> + <location filename="../src/wallet/api/wallet.cpp" line="1611"/> <source>not enough money to transfer, overall balance only %s, sent amount %s</source> <translation>inte tillräckligt med pengar för överföring, totalt saldo är bara %s, skickat belopp %s</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1452"/> - <location filename="../src/wallet/api/wallet.cpp" line="1537"/> + <location filename="../src/wallet/api/wallet.cpp" line="1534"/> + <location filename="../src/wallet/api/wallet.cpp" line="1619"/> <source>not enough money to transfer, available only %s, transaction amount %s = %s + %s (fee)</source> <translation>ej tillräckligt med pengar för överföring, endast tillgängligt %s, transaktionsbelopp %s = %s + %s (avgift)</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1462"/> - <location filename="../src/wallet/api/wallet.cpp" line="1547"/> + <location filename="../src/wallet/api/wallet.cpp" line="1544"/> + <location filename="../src/wallet/api/wallet.cpp" line="1629"/> <source>output amount</source> <translation>utgångens belopp</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1467"/> - <location filename="../src/wallet/api/wallet.cpp" line="1551"/> + <location filename="../src/wallet/api/wallet.cpp" line="1549"/> + <location filename="../src/wallet/api/wallet.cpp" line="1633"/> <source>transaction was not constructed</source> <translation>transaktionen konstruerades inte</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1470"/> - <location filename="../src/wallet/api/wallet.cpp" line="1554"/> + <location filename="../src/wallet/api/wallet.cpp" line="1552"/> + <location filename="../src/wallet/api/wallet.cpp" line="1636"/> <source>transaction %s was rejected by daemon with status: </source> <translation>transaktionen %s avvisades av daemonen med status: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1475"/> - <location filename="../src/wallet/api/wallet.cpp" line="1559"/> + <location filename="../src/wallet/api/wallet.cpp" line="1557"/> + <location filename="../src/wallet/api/wallet.cpp" line="1641"/> <source>one of destinations is zero</source> <translation>ett av målen är noll</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1477"/> - <location filename="../src/wallet/api/wallet.cpp" line="1561"/> + <location filename="../src/wallet/api/wallet.cpp" line="1559"/> + <location filename="../src/wallet/api/wallet.cpp" line="1643"/> <source>failed to find a suitable way to split transactions</source> <translation>det gick inte att hitta ett lämpligt sätt att dela upp transaktioner</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1479"/> - <location filename="../src/wallet/api/wallet.cpp" line="1563"/> + <location filename="../src/wallet/api/wallet.cpp" line="1561"/> + <location filename="../src/wallet/api/wallet.cpp" line="1645"/> <source>unknown transfer error: </source> <translation>okänt överföringsfel: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1481"/> - <location filename="../src/wallet/api/wallet.cpp" line="1565"/> + <location filename="../src/wallet/api/wallet.cpp" line="1563"/> + <location filename="../src/wallet/api/wallet.cpp" line="1647"/> <source>internal error: </source> <translation>internt fel: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1483"/> - <location filename="../src/wallet/api/wallet.cpp" line="1567"/> + <location filename="../src/wallet/api/wallet.cpp" line="1565"/> + <location filename="../src/wallet/api/wallet.cpp" line="1649"/> <source>unexpected error: </source> <translation>oväntat fel: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1485"/> - <location filename="../src/wallet/api/wallet.cpp" line="1569"/> + <location filename="../src/wallet/api/wallet.cpp" line="1567"/> + <location filename="../src/wallet/api/wallet.cpp" line="1651"/> <source>unknown error</source> <translation>okänt fel</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1516"/> + <location filename="../src/wallet/api/wallet.cpp" line="1598"/> <source>failed to get outputs to mix</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1644"/> - <location filename="../src/wallet/api/wallet.cpp" line="1671"/> - <location filename="../src/wallet/api/wallet.cpp" line="1719"/> - <location filename="../src/wallet/api/wallet.cpp" line="1747"/> - <location filename="../src/wallet/api/wallet.cpp" line="1775"/> - <location filename="../src/wallet/api/wallet.cpp" line="1796"/> - <location filename="../src/wallet/api/wallet.cpp" line="2258"/> + <location filename="../src/wallet/api/wallet.cpp" line="1726"/> + <location filename="../src/wallet/api/wallet.cpp" line="1753"/> + <location filename="../src/wallet/api/wallet.cpp" line="1801"/> + <location filename="../src/wallet/api/wallet.cpp" line="1829"/> + <location filename="../src/wallet/api/wallet.cpp" line="1857"/> + <location filename="../src/wallet/api/wallet.cpp" line="1878"/> + <location filename="../src/wallet/api/wallet.cpp" line="2354"/> <source>Failed to parse txid</source> <translation>Det gick inte att parsa txid</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1661"/> + <location filename="../src/wallet/api/wallet.cpp" line="1743"/> <source>no tx keys found for this txid</source> <translation>inga tx-nycklar kunde hittas för detta txid</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1679"/> - <location filename="../src/wallet/api/wallet.cpp" line="1688"/> + <location filename="../src/wallet/api/wallet.cpp" line="1761"/> + <location filename="../src/wallet/api/wallet.cpp" line="1770"/> <source>Failed to parse tx key</source> <translation>Det gick inte att parsa txnyckel</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1697"/> - <location filename="../src/wallet/api/wallet.cpp" line="1726"/> - <location filename="../src/wallet/api/wallet.cpp" line="1754"/> - <location filename="../src/wallet/api/wallet.cpp" line="1835"/> + <location filename="../src/wallet/api/wallet.cpp" line="1779"/> + <location filename="../src/wallet/api/wallet.cpp" line="1808"/> + <location filename="../src/wallet/api/wallet.cpp" line="1836"/> + <location filename="../src/wallet/api/wallet.cpp" line="1917"/> <source>Failed to parse address</source> <translation>Det gick inte att parsa adressen</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1840"/> + <location filename="../src/wallet/api/wallet.cpp" line="1922"/> <source>Address must not be a subaddress</source> <translation>Adressen får inte vara en underadress</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1880"/> + <location filename="../src/wallet/api/wallet.cpp" line="1962"/> <source>The wallet must be in multisig ready state</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1902"/> + <location filename="../src/wallet/api/wallet.cpp" line="1984"/> <source>Given string is not a key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2130"/> + <location filename="../src/wallet/api/wallet.cpp" line="2226"/> <source>Rescan spent can only be used with a trusted daemon</source> <translation>Genomsök efter spenderade kan endast användas med en betrodd daemon</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2179"/> + <location filename="../src/wallet/api/wallet.cpp" line="2275"/> <source>Invalid output: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2186"/> + <location filename="../src/wallet/api/wallet.cpp" line="2282"/> <source>Failed to mark outputs as spent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2197"/> - <location filename="../src/wallet/api/wallet.cpp" line="2219"/> + <location filename="../src/wallet/api/wallet.cpp" line="2293"/> + <location filename="../src/wallet/api/wallet.cpp" line="2315"/> <source>Failed to parse output amount</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2202"/> - <location filename="../src/wallet/api/wallet.cpp" line="2224"/> + <location filename="../src/wallet/api/wallet.cpp" line="2298"/> + <location filename="../src/wallet/api/wallet.cpp" line="2320"/> <source>Failed to parse output offset</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2208"/> + <location filename="../src/wallet/api/wallet.cpp" line="2304"/> <source>Failed to mark output as spent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2230"/> + <location filename="../src/wallet/api/wallet.cpp" line="2326"/> <source>Failed to mark output as unspent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2241"/> - <location filename="../src/wallet/api/wallet.cpp" line="2280"/> + <location filename="../src/wallet/api/wallet.cpp" line="2337"/> + <location filename="../src/wallet/api/wallet.cpp" line="2376"/> <source>Failed to parse key image</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2247"/> + <location filename="../src/wallet/api/wallet.cpp" line="2343"/> <source>Failed to get ring</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2265"/> + <location filename="../src/wallet/api/wallet.cpp" line="2361"/> <source>Failed to get rings</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="2286"/> + <location filename="../src/wallet/api/wallet.cpp" line="2382"/> <source>Failed to set ring</source> <translation type="unfinished"></translation> </message> @@ -519,22 +519,22 @@ <context> <name>Wallet</name> <message> - <location filename="../src/wallet/api/wallet.cpp" line="301"/> + <location filename="../src/wallet/api/wallet.cpp" line="344"/> <source>Failed to parse address</source> <translation>Det gick inte att parsa adressen</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="308"/> + <location filename="../src/wallet/api/wallet.cpp" line="351"/> <source>Failed to parse key</source> <translation>Det gick inte att parsa nyckeln</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="316"/> + <location filename="../src/wallet/api/wallet.cpp" line="359"/> <source>failed to verify key</source> <translation>det gick inte att verifiera nyckeln</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="326"/> + <location filename="../src/wallet/api/wallet.cpp" line="369"/> <source>key does not match address</source> <translation>nyckeln matchar inte adressen</translation> </message> @@ -604,999 +604,1051 @@ <context> <name>cryptonote::simple_wallet</name> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="645"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="666"/> <source>Commands: </source> <translation>Kommandon: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4359"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4636"/> <source>failed to read wallet password</source> <translation>det gick inte att läsa lösenord för plånboken</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3954"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4231"/> <source>invalid password</source> <translation>ogiltigt lösenord</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3073"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3283"/> <source>set seed: needs an argument. available options: language</source> <translation>set seed: kräver ett argument. tillgängliga alternativ: språk</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3108"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3319"/> <source>set: unrecognized argument(s)</source> <translation>set: okända argument</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4199"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4476"/> <source>wallet file path not valid: </source> <translation>ogiltig sökväg till plånbok: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3178"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3389"/> <source>Attempting to generate or restore wallet, but specified file(s) exist. Exiting to not risk overwriting.</source> <translation>Försöker skapa eller återställa plånbok, men angivna filer finns redan. Avslutar för att inte riskera att skriva över någonting.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3059"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3269"/> <source>needs an argument</source> <translation>kräver ett argument</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3082"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3083"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3084"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3086"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3089"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3094"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3095"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3097"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3099"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3100"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3101"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3104"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3292"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3294"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3296"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3299"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3304"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3305"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3307"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3309"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3311"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3314"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3315"/> <source>0 or 1</source> <translation>0 eller 1</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3092"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3096"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3103"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3306"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3313"/> <source>unsigned integer</source> <translation>positivt heltal</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3312"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3548"/> <source>--restore-deterministic-wallet uses --generate-new-wallet, not --wallet-file</source> <translation>--restore-deterministic-wallet använder --generate-new-wallet, inte --wallet-file</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3341"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3577"/> <source>specify a recovery parameter with the --electrum-seed="words list here"</source> <translation>ange en återställningsparameter med --electrum-seed="ordlista här"</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3717"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3957"/> <source>specify a wallet path with --generate-new-wallet (not --wallet-file)</source> <translation>ange sökväg till en plånbok med --generate-new-wallet (inte --wallet-file)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3887"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4164"/> <source>wallet failed to connect to daemon: </source> <translation>plånboken kunde inte ansluta till daemonen: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3895"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4172"/> <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>Daemonen använder en högre version av RPC (%u) än plånboken (%u): %s. Antingen uppdatera en av dem, eller använd --allow-mismatched-daemon-version.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3916"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4193"/> <source>List of available languages for your wallet's seed:</source> <translation>Lista över tillgängliga språk för din plånboks startvärde:</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3926"/> - <source>Enter the number corresponding to the language of your choice: </source> - <translation>Ange det tal som motsvarar det språk du vill använda: </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4000"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4277"/> <source>You had been using a deprecated version of the wallet. Please use the new seed that we provide. </source> <translation>Du hade använt en inaktuell version av plånboken. Använd det nya startvärde som tillhandahålls. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4016"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4365"/> <source>Generated new wallet: </source> <translation>Ny plånbok skapad: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4025"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4093"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4135"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4188"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4370"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4412"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4465"/> <source>failed to generate new wallet: </source> <translation>det gick inte att skapa ny plånbok: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4230"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4507"/> <source>Opened watch-only wallet</source> <translation>Öppnade plånbok för granskning</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4511"/> <source>Opened wallet</source> <translation>Öppnade plånbok</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4252"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4529"/> <source>You had been using a deprecated version of the wallet. Please proceed to upgrade your wallet. </source> <translation>Du hade använt en inaktuell version av plånboken. Fortsätt för att uppgradera din plånbok. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4267"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4544"/> <source>You had been using a deprecated version of the wallet. Your wallet file format is being upgraded now. </source> <translation>Du hade använt en inaktuell version av plånboken. Plånbokens filformat kommer nu att uppgraderas. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4275"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4552"/> <source>failed to load wallet: </source> <translation>det gick inte att läsa in plånboken: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4292"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4569"/> <source>Use the "help" command to see the list of available commands. </source> <translation>Använd kommandot "help" för att visa en lista över tillgängliga kommandon. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4337"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4614"/> <source>Wallet data saved</source> <translation>Plånboksdata sparades</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4431"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4819"/> <source>Mining started in daemon</source> <translation>Brytning startad i daemonen</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4433"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4821"/> <source>mining has NOT been started: </source> <translation>brytning har INTE startats: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4453"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4841"/> <source>Mining stopped in daemon</source> <translation>Brytning stoppad i daemonen</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4455"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4843"/> <source>mining has NOT been stopped: </source> <translation>brytning har INTE stoppats: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4537"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4925"/> <source>Blockchain saved</source> <translation>Blockkedjan sparades</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4552"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4589"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4940"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4973"/> <source>Height </source> <translation>Höjd </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4591"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4975"/> <source>spent </source> <translation>spenderat </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4698"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5089"/> <source>Starting refresh...</source> <translation>Startar uppdatering …</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4712"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5115"/> <source>Refresh done, blocks received: </source> <translation>Uppdatering färdig, mottagna block: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5958"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6349"/> <source>payment id has invalid format, expected 16 or 64 character hex string: </source> <translation>betalnings-ID har ogiltigt format. En hexadecimal sträng med 16 eller 64 tecken förväntades: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5307"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5704"/> <source>bad locked_blocks parameter:</source> <translation>felaktig parameter för locked_blocks:</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5978"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6251"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6369"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6639"/> <source>a single transaction cannot use more than one payment id: </source> <translation>en enda transaktion kan inte använda fler än ett betalnings-ID: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5405"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5987"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6219"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6259"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5806"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6378"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6607"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6647"/> <source>failed to set up payment id, though it was decoded correctly</source> <translation>det gick inte att upprätta betalnings-ID, trots att det avkodades korrekt</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5251"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5870"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6173"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5659"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6271"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6564"/> <source>ring size %u is too large, maximum is %u</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5276"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5395"/> - <source>Unencrypted payment IDs are bad for privacy: ask the recipient to use subaddresses instead</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5690"/> <source>payment id failed to encode</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5312"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5894"/> - <source>Locked blocks too high, max 1000000 (Ë4 yrs)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5340"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5737"/> <source>failed to parse short payment ID from URI</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5363"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5365"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5762"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5764"/> <source>Invalid last argument: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5382"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5782"/> <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="5399"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5800"/> <source>failed to parse payment id, though it was detected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5422"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5502"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5590"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5738"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6001"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6059"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6273"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6318"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5823"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5903"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5991"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6139"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6392"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6450"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6661"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6706"/> <source>transaction cancelled.</source> <translation>transaktion avbruten.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5481"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5491"/> - <source>Is this okay anyway? (Y/Yes/N/No): </source> - <translation>Är detta okej ändå? (J/Ja/N/Nej): </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5486"/> - <source>There is currently a %u block backlog at that fee level. Is this okay? (Y/Yes/N/No): </source> - <translation>Det finns för närvarande en %u blocks eftersläpning på den avgiftsnivån. Är detta okej? (J/Ja/N/Nej): </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5491"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5892"/> <source>Failed to check for backlog: </source> <translation>Det gick inte att kontrollera eftersläpning: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5532"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6032"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5933"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6423"/> <source> Transaction </source> <translation> Transaktion </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5537"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6037"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5938"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6428"/> <source>Spending from address index %d </source> <translation>Spendera från adressindex %d </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5539"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6039"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5940"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6430"/> <source>WARNING: Outputs of multiple addresses are being used together, which might potentially compromise your privacy. </source> <translation>VARNING: Utgångar från flera adresser används tillsammans, vilket möjligen kan kompromettera din sekretess. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5541"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5942"/> <source>Sending %s. </source> <translation>Skickar %s. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5544"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5945"/> <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>Transaktionen behöver delas upp i %llu transaktioner. Detta gör att en transaktionsavgift läggs till varje transaktion, med ett totalbelopp på %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5550"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5951"/> <source>The transaction fee is %s</source> <translation>Transaktionsavgiften är %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5553"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5954"/> <source>, of which %s is dust from change</source> <translation>, varav %s är damm från växel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5554"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5955"/> <source>.</source> <translation>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5554"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5955"/> <source>A total of %s from dust change will be sent to dust address</source> <translation>Ett totalt belopp på %s från växeldamm skickas till damm-adressen</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5559"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5960"/> <source>. This transaction will unlock on block %llu, in approximately %s days (assuming 2 minutes per block)</source> <translation>. Denna transaktion låses upp vid block %llu, om ungefär %s dagar (förutsatt en blocktid på 2 minuter)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5603"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6004"/> <source>Unsigned transaction(s) successfully written to MMS</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5611"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5648"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5749"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5761"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6070"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6107"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6328"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6340"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6012"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6049"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6150"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6162"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6461"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6498"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6716"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6728"/> <source>Failed to write transaction(s) to file</source> <translation>Det gick inte att skriva transaktioner till fil</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5616"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5653"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5753"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5765"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6074"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6111"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6332"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6344"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6017"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6054"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6154"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6465"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6502"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6720"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6732"/> <source>Unsigned transaction(s) successfully written to file: </source> <translation>Osignerade transaktioner skrevs till fil: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5625"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6086"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6026"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6477"/> <source>Failed to cold sign transaction with HW wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5708"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6109"/> <source>No unmixable outputs found</source> <translation>Inga omixbara utgångar kunde hittas</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5775"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6176"/> <source>Not enough money in unlocked balance</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5776"/> - <source>Discarding %s of unmixable outputs that cannot be spent, which can be undone by "rescan_spent". Is this okay? (Y/Yes/N/No): </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5815"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6216"/> <source>No address given</source> <translation>Ingen adress har angivits</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5879"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6280"/> <source>missing lockedblocks parameter</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5889"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6290"/> <source>bad locked_blocks parameter</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5914"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6182"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6315"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6573"/> <source>Failed to parse number of outputs</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5919"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6187"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6320"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6578"/> <source>Amount of outputs should be greater than 0</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6213"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6601"/> <source>failed to parse Payment ID</source> <translation>det gick inte att parsa betalnings-ID</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6236"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2078"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2125"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6624"/> <source>failed to parse key image</source> <translation>det gick inte att parsa nyckelavbildning</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6290"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6678"/> <source>No outputs found</source> <translation>Inga utgångar kunde hittas</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6295"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6683"/> <source>Multiple transactions are created, which is not supposed to happen</source> <translation>Flera transaktioner skapas, vilket inte ska kunna inträffa</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6300"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6688"/> <source>The transaction uses multiple or no inputs, which is not supposed to happen</source> <translation>Transaktionen använder flera eller inga ingångar, vilket inte ska kunna inträffa</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6377"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6765"/> <source>missing threshold amount</source> <translation>tröskelbelopp saknas</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6382"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6770"/> <source>invalid amount threshold</source> <translation>ogiltigt tröskelbelopp</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6516"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6919"/> <source>Claimed change does not go to a paid address</source> <translation>Begärd växel går inte till en betald adress</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6521"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6924"/> <source>Claimed change is larger than payment to the change address</source> <translation>Begärd växel är större än betalning till växeladressen</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6552"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6955"/> <source>sending %s to %s</source> <translation>skickar %s till %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6562"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6965"/> <source> dummy output(s)</source> <translation> dummy-utgångar</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6565"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6968"/> <source>with no destinations</source> <translation>utan några mål</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6577"/> - <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min ring size %lu, %s. %sIs this okay? (Y/Yes/N/No): </source> - <translation>Läste in %lu transaktioner, för %s, avgift %s, %s, %s, med minsta ringstorlek %lu, %s. %sÄr detta okej? (J/Ja/N/Nej): </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6606"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7009"/> <source>This is a multisig wallet, it can only sign with sign_multisig</source> <translation>Detta är en multisig-plånbok, som endast kan signera med sign_multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6629"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7032"/> <source>Failed to sign transaction</source> <translation>Det gick inte att signera transaktionen</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6635"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7038"/> <source>Failed to sign transaction: </source> <translation>Det gick inte att signera transaktionen: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6656"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7059"/> <source>Transaction raw hex data exported to </source> <translation>Hexadecimala rådata för transaktionen exporterades till </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6677"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7080"/> <source>Failed to load transaction from file</source> <translation>Det gick inte att läsa in transaktion från fil</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4729"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5051"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5132"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5459"/> <source>RPC error: </source> <translation>RPC-fel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="695"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="716"/> <source>wallet is watch-only and has no spend key</source> <translation>plånboken är enbart för granskning och har ingen spendernyckel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="839"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1021"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1074"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1141"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="860"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1044"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1097"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1164"/> <source>Your original password was incorrect.</source> <translation>Ditt ursprungliga lösenord var fel.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="854"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="875"/> <source>Error with wallet rewrite: </source> <translation>Ett fel uppstod vid återskrivning av plånbok: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2284"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2435"/> <source>invalid unit</source> <translation>ogiltig enhet</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2302"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2364"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2453"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2515"/> <source>invalid count: must be an unsigned integer</source> <translation>ogiltigt värde för count: måste vara ett heltal utan tecken</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2320"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2471"/> <source>invalid value</source> <translation>ogiltigt värde</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3204"/> - <source>(Y/Yes/N/No): </source> - <translation>(J/Ja/N/Nej): </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3761"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3788"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4021"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4041"/> <source>bad m_restore_height parameter: </source> <translation>felaktig parameter för m_restore_height: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3766"/> - <source>date format must be YYYY-MM-DD</source> - <translation>datumformat måste vara ÅÅÅÅ-MM-DD</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3779"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3985"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4032"/> <source>Restore height is: </source> <translation>Återställningshöjd är: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3705"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3780"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5583"/> - <source>Is this okay? (Y/Yes/N/No): </source> - <translation>Är detta okej? (J/Ja/N/Nej): </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4509"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4897"/> <source>Daemon is local, assuming trusted</source> <translation>Daemonen är lokal, utgår från att den är betrodd</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4355"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4632"/> <source>Password for new watch-only wallet</source> <translation>Lösenord för ny granskningsplånbok</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4739"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5142"/> <source>internal error: </source> <translation>internt fel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1608"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4744"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5056"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1632"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5147"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5464"/> <source>unexpected error: </source> <translation>oväntat fel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1534"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1613"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4749"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5061"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5639"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5669"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5794"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6099"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6126"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6361"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6690"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1558"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1637"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5152"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5469"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6040"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6070"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6195"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6490"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6517"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6749"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7093"/> <source>unknown error</source> <translation>okänt fel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4754"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5157"/> <source>refresh failed: </source> <translation>det gick inte att uppdatera: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4754"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5157"/> <source>Blocks received: </source> <translation>Mottagna block: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4787"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5195"/> <source>unlocked balance: </source> <translation>upplåst saldo: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3093"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3303"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>amount</source> <translation>belopp</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="341"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="362"/> <source>false</source> <translation>falskt</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="659"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="680"/> <source>Unknown command: </source> <translation>Okänt kommando: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="666"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="687"/> <source>Command usage: </source> <translation>Användning av kommando: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="669"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="690"/> <source>Command description: </source> <translation>Beskrivning av kommando: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="735"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="756"/> <source>wallet is multisig but not yet finalized</source> <translation>plånboken är multisig men är ännu inte slutförd</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="768"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="789"/> <source>Failed to retrieve seed</source> <translation>Det gick inte att hämta startvärde</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="792"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="813"/> <source>wallet is multisig and has no seed</source> <translation>plånboken är multisig och har inget startvärde</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="899"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="922"/> <source>Error: failed to estimate backlog array size: </source> <translation>Fel: det gick inte att uppskatta eftersläpningsmatrisens storlek: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="904"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="927"/> <source>Error: bad estimated backlog array size</source> <translation>Fel: felaktigt uppskattat värde för eftersläpningsmatrisens storlek</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="916"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="939"/> <source> (current)</source> <translation> (aktuellt)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="919"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="942"/> <source>%u block (%u minutes) backlog at priority %u%s</source> <translation>%u blocks (%u minuters) eftersläpning vid prioritet %u%s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="921"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="944"/> <source>%u to %u block (%u to %u minutes) backlog at priority %u</source> <translation>%u till %u blocks (%u till %u minuters) eftersläpning vid prioritet %u</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="924"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="947"/> <source>No backlog at priority </source> <translation>Ingen eftersläpning vid prioritet </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="944"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="989"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="967"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1012"/> <source>This wallet is already multisig</source> <translation>Denna plånbok är redan multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="949"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="994"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="972"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1017"/> <source>wallet is watch-only and cannot be made multisig</source> <translation>plånboken är enbart för granskning och kan inte göras om till multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="955"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1000"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="978"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1023"/> <source>This wallet has been used before, please use a new wallet to create a multisig wallet</source> <translation>Denna plånbok har använts tidigare. Använd en ny plånbok för att skapa en multisig-plånbok</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="963"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="986"/> <source>Send this multisig info to all other participants, then use make_multisig <threshold> <info1> [<info2>...] with others' multisig info</source> <translation>Skicka denna multisig-info till alla andra deltagare och använd sedan make_multisig <tröskelvärde> <info1> [<info2>…] med de andras multisig-info</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="964"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="987"/> <source>This includes the PRIVATE view key, so needs to be disclosed only to that multisig wallet's participants </source> <translation>Detta innefattar den PRIVATA granskningsnyckeln, så den behöver endast lämnas ut till den multisig-plånbokens deltagare </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1014"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1037"/> <source>Invalid threshold</source> <translation>Ogiltigt tröskelvärde</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1034"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1156"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1057"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1179"/> <source>Another step is needed</source> <translation>Ytterligare ett steg krävs</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1046"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1069"/> <source>Error creating multisig: </source> <translation>Ett fel uppstod när multisig skapades: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1053"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1076"/> <source>Error creating multisig: new wallet is not multisig</source> <translation>Ett fel uppstod när multisig skapades: den nya plånboken är inte multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1056"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1079"/> <source> multisig address: </source> <translation> multisig-adress: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1080"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1129"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1195"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1261"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1103"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1152"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1219"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1285"/> <source>This wallet is not multisig</source> <translation>Denna plånbok är inte multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1085"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1134"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1108"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1157"/> <source>This wallet is already finalized</source> <translation>Denna plånbok är redan slutförd</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1101"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1124"/> <source>Failed to finalize multisig</source> <translation>Det gick inte att slutföra multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1107"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1130"/> <source>Failed to finalize multisig: </source> <translation>Det gick inte att slutföra multisig: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1200"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1266"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1360"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1476"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1557"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1191"/> + <source>Multisig address: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1224"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1290"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1384"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1500"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1581"/> <source>This multisig wallet is not yet finalized</source> <translation>Denna multisig-plånbok är inte slutförd ännu</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1236"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1260"/> <source>Error exporting multisig info: </source> <translation>Ett fel uppstod när multisig-info exporterades: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1240"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1264"/> <source>Multisig info exported to </source> <translation>Multisig-info exporterades till </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1306"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1330"/> <source>Multisig info imported</source> <translation>Multisig-info importerades</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1334"/> <source>Failed to import multisig info: </source> <translation>Det gick inte att importera multisig-info: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1321"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1345"/> <source>Failed to update spent status after importing multisig info: </source> <translation>Det gick inte att uppdatera spenderstatus efter import av multisig-info: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1327"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1351"/> <source>Untrusted daemon, spent status may be incorrect. Use a trusted daemon and run "rescan_spent"</source> <translation>Ej betrodd daemon. Spenderstatus kan vara felaktig. Använd en betrodd daemon och kör "rescan_spent"</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1355"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1471"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1552"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1379"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1495"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1576"/> <source>This is not a multisig wallet</source> <translation>Detta är inte en multisig-plånbok</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1405"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1414"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1429"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1438"/> <source>Failed to sign multisig transaction</source> <translation>Det gick inte att signera multisig-transaktion</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1421"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1445"/> <source>Multisig error: </source> <translation>Multisig-fel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1426"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1450"/> <source>Failed to sign multisig transaction: </source> <translation>Det gick inte att signera multisig-transaktion: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1449"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1473"/> <source>It may be relayed to the network with submit_multisig</source> <translation>Den kan skickas vidare till nätverket med submit_multisig</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1508"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1578"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1532"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1602"/> <source>Failed to load multisig transaction from file</source> <translation>Det gick inte att läsa in multisig-transaktion från fil</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1514"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1583"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1538"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1607"/> <source>Multisig transaction signed by only %u signers, needs %u more signatures</source> <translation>Multisig-transaktion har signerats av bara %u signerare. Den behöver %u ytterligare signaturer</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1523"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8890"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1547"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9330"/> <source>Transaction successfully submitted, transaction </source> <translation>Transaktionen skickades, transaktion </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1524"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8891"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1548"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9331"/> <source>You can check its status by using the `show_transfers` command.</source> <translation>Du kan kontrollera dess status genom att använda kommandot 'show_transfers'.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1599"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1623"/> <source>Failed to export multisig transaction to file </source> <translation>Det gick inte att exportera multisig-transaktion till fil </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1603"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1627"/> <source>Saved exported multisig transaction file(s): </source> <translation>Sparade filer med exporterade multisig-transaktioner: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2095"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2101"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2120"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1892"/> + <source>Invalid key image or txid</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1901"/> + <source>failed to unset ring</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2072"/> + <source>usage: %s <key_image>|<pubkey></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2117"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2129"/> + <source>Frozen: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2131"/> + <source>Not frozen: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2138"/> + <source> bytes sent</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2139"/> + <source> bytes received</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2145"/> + <source>Welcome to Monero, the private cryptocurrency.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2147"/> + <source>Monero, like Bitcoin, is a cryptocurrency. That is, it is digital money.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2148"/> + <source>Unlike Bitcoin, your Monero transactions and balance stay private, and not visible to the world by default.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2149"/> + <source>However, you have the option of making those available to select parties, if you choose to.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2151"/> + <source>Monero protects your privacy on the blockchain, and while Monero strives to improve all the time,</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2152"/> + <source>no privacy technology can be 100% perfect, Monero included.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2153"/> + <source>Monero cannot protect you from malware, and it may not be as effective as we hope against powerful adversaries.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2154"/> + <source>Flaws in Monero may be discovered in the future, and attacks may be developed to peek under some</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2155"/> + <source>of the layers of privacy Monero provides. Be safe and practice defense in depth.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2157"/> + <source>Welcome to Monero and financial privacy. For more information, see https://getmonero.org/</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2244"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2250"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2269"/> <source>ring size must be an integer >= </source> <translation>ringstorlek måste vara ett heltal >= </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2125"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2274"/> <source>could not change default ring size</source> <translation>det gick inte att ändra standardinställning för ringstorlek</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2398"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2469"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2549"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2620"/> <source>Invalid height</source> <translation>Ogiltig höjd</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2562"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2667"/> + <source>invalid argument: must be either 1/yes or 0/no</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2738"/> <source>Start mining in the daemon (bg_mining and ignore_battery are optional booleans).</source> <translation>Starta brytning i daemonen (bgbrytning och ignorera_batteri är valfri booleska värden).</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2565"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2741"/> <source>Stop mining in the daemon.</source> <translation>Stoppa brytning i daemonen.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2569"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2745"/> <source>Set another daemon to connect to.</source> <translation>Ange en annan daemon att ansluta till.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2572"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2748"/> <source>Save the current blockchain data.</source> <translation>Spara aktuella blockkedjedata.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2575"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2751"/> <source>Synchronize the transactions and balance.</source> <translation>Synkronisera transaktionerna och saldot.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2579"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2755"/> <source>Show the wallet's balance of the currently selected account.</source> <translation>Visa plånbokens saldo för det aktiva kontot.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2589"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2759"/> + <source>Show the incoming transfers, all or filtered by availability and address index. + +Output format: +Amount, Spent("T"|"F"), "frozen"|"locked"|"unlocked", RingCT, Global Index, Transaction Hash, Address Index, [Public Key, Key Image] </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2765"/> <source>Show the payments for the given payment IDs.</source> <translation>Visa betalningar för givna betalnings-ID.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2592"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2768"/> <source>Show the blockchain height.</source> <translation>Visa blockkedjans höjd.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2606"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2782"/> <source>Send all unmixable outputs to yourself with ring_size 1</source> <translation>Skicka alla omixbara utgångar till dig själv med ringstorlek 1</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2613"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2789"/> <source>Send all unlocked outputs below the threshold to an address.</source> <translation>Skicka alla upplåsta utgångar under tröskelvärdet till en adress.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2617"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2793"/> <source>Send a single output of the given key image to an address without change.</source> <translation>Skicka en enda utgång hos den givna nyckelavbildningen till en adress utan växel.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2621"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2797"/> <source>Donate <amount> to the development team (donate.getmonero.org).</source> <translation>Donera <belopp> till utvecklingsteamet (donate.getmonero.org).</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2628"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2804"/> <source>Submit a signed transaction from a file.</source> <translation>Skicka en signerad transaktion från en fil.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2632"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2808"/> <source>Change the current log detail (level must be <0-4>).</source> <translation>Ändra detaljnivån för aktuell logg (nivå måste vara 0-4).</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2812"/> <source>If no arguments are specified, the wallet shows all the existing accounts along with their balances. If the "new" argument is specified, the wallet creates a new account with its label initialized by the provided label text (which can be empty). If the "switch" argument is specified, the wallet switches to the account specified by <index>. @@ -1613,82 +1665,132 @@ Om argumentet "untag" anges, tas tilldelade taggar bort från de angiv Om argumentet "tag_description" anges, så tilldelas taggen <taggnamn> den godtyckliga texten <beskrivning>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2650"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2826"/> <source>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>Koda ett betalnings-ID till en integrerad adress för den aktuella plånbokens publika adress (om inget argument anges används ett slumpmässigt betalnings-ID), eller avkoda en integrerad adress till en standardadress och ett betalnings-ID</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2654"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2830"/> <source>Print all entries in the address book, optionally adding/deleting an entry to/from it.</source> <translation>Skriv ut alla poster i adressboken, och valfritt lägg till/ta bort en post i den.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2657"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2833"/> <source>Save the wallet data.</source> <translation>Spara plånboksdata.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2660"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2836"/> <source>Save a watch-only keys file.</source> <translation>Spara en fil med granskningsnycklar.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2663"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2839"/> <source>Display the private view key.</source> <translation>Visa privat granskningsnyckel.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2666"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2842"/> <source>Display the private spend key.</source> <translation>Visa privat spendernyckel.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2669"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2845"/> <source>Display the Electrum-style mnemonic seed</source> <translation>Visa det minnesbaserade startvärdet (Electrum-typ)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2719"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2849"/> + <source>Available options: + seed language + Set the wallet's 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-ring-size <n> + Set the default ring size (obsolete). + auto-refresh <1|0> + Whether to automatically synchronize new blocks from the daemon. + refresh-type <full|optimize-coinbase|no-coinbase|default> + Set the wallet's refresh behaviour. + priority [0|1|2|3|4] + Set the fee to default/unimportant/normal/elevated/priority. + confirm-missing-payment-id <1|0> (obsolete) + ask-password <0|1|2 (or never|action|decrypt)> + action: ask the password before many actions such as transfer, etc + decrypt: same as action, but keeps the spend key encrypted in memory when not needed + unit <monero|millinero|micronero|nanonero|piconero> + Set the 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. + confirm-backlog <1|0> + Whether to warn if there is transaction backlog. + confirm-backlog-threshold [n] + Set a threshold for confirm-backlog to only warn if the transaction backlog is greater than n blocks. + refresh-from-block-height [n] + Set the height before which to ignore blocks. + auto-low-priority <1|0> + Whether to automatically use the low priority fee level when it's safe to do so. + segregate-pre-fork-outputs <1|0> + Set this if you intend to spend outputs on both Monero AND a key reusing fork. + key-reuse-mitigation2 <1|0> + Set this if you are not sure whether you will spend on a key reusing Monero fork later. +subaddress-lookahead <major>:<minor> + Set the lookahead sizes for the subaddress hash table. + Set this if you are not sure whether you will spend on a key reusing Monero fork later. + segregation-height <n> + Set to the height of a key reusing fork you want to use, 0 to use default.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2897"/> <source>Display the encrypted Electrum-style mnemonic seed.</source> <translation>Visa det krypterade minnesbaserade startvärdet (Electrum-typ).</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2722"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2900"/> <source>Rescan the blockchain for spent outputs.</source> <translation>Genomsök blockkedjan efter spenderade utgångar.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2726"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2904"/> <source>Get the transaction key (r) for a given <txid>.</source> <translation>Hämta transaktionsnyckel (r) för ett givet <txid>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2734"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2912"/> <source>Check the amount going to <address> in <txid>.</source> <translation>Kontrollera belopp som går till <adress> i <txid>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2738"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2916"/> <source>Generate a signature proving funds sent to <address> in <txid>, optionally with a challenge string <message>, using either the transaction secret key (when <address> is not your wallet's address) or the view secret key (otherwise), which does not disclose the secret key.</source> <translation>Skapa en signatur som bevisar att pengar skickades till <adress> i <txid>, valfritt med kontrollsträngen <meddelande>, genom att använda antingen transaktionens hemliga nyckel (när <adress> inte är din plånboks adress) eller den hemliga granskningsnyckeln (annars), vilket inte lämnar ut den hemliga nyckeln.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2742"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2920"/> <source>Check the proof for funds going to <address> in <txid> with the challenge string <message> if any.</source> <translation>Kontrollera beviset för pengar som skickats till <adress> i <txid> med kontrollsträngen <meddelande>, om den angivits.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2746"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2924"/> <source>Generate a signature proving that you generated <txid> using the spend secret key, optionally with a challenge string <message>.</source> <translation>Skapa en signatur som bevisar att du skapade <txid> genom att använda den hemliga spendernyckeln, valfritt med kontrollsträngen <meddelande>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2750"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2928"/> <source>Check a signature proving that the signer generated <txid>, optionally with a challenge string <message>.</source> <translation>Kontrollera en signatur som bevisar att signeraren skapade <txid>, valfritt med kontrollsträngen <meddelande>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2754"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2932"/> <source>Generate a signature proving that you own at least this much, optionally with a challenge string <message>. If 'all' is specified, you prove the entire sum of all of your existing accounts' balances. Otherwise, you prove the reserve of the smallest possible amount above <amount> available in your current account.</source> @@ -1697,238 +1799,288 @@ Om 'all' anges, bevisar du totalsumman av alla dina befintliga kontons Annars bevisar du reserven för det minsta möjliga belopp över <belopp> som är tillgängligt på ditt aktuella konto.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2760"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2938"/> <source>Check a signature proving that the owner of <address> holds at least this much, optionally with a challenge string <message>.</source> <translation>Kontrollera en signatur som bevisar att ägaren till <adress> har åtminstone så här mycket, valfritt med kontrollsträngen <meddelande>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2780"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2958"/> <source>Show the unspent outputs of a specified address within an optional amount range.</source> <translation>Visa de ej spenderade utgångarna hos en angiven adress inom ett valfritt beloppsintervall.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2788"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2962"/> + <source>Rescan the blockchain from scratch. If "hard" is specified, you will lose any information which can not be recovered from the blockchain itself.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2966"/> <source>Set an arbitrary string note for a <txid>.</source> <translation>Ange en godtycklig stränganteckning för <txid>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2792"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2970"/> <source>Get a string note for a txid.</source> <translation>Hämta en stränganteckning för ett txid.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2796"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2974"/> <source>Set an arbitrary description for the wallet.</source> <translation>Ange en godtycklig beskrivning av plånboken.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2800"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2978"/> <source>Get the description of the wallet.</source> <translation>Hämta plånbokens beskrivning.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2803"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2981"/> <source>Show the wallet's status.</source> <translation>Visa plånbokens status.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2806"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2984"/> <source>Show the wallet's information.</source> <translation>Visa information om plånboken.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2810"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2988"/> <source>Sign the contents of a file.</source> <translation>Signera innehållet i en fil.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2814"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2992"/> <source>Verify a signature on the contents of a file.</source> <translation>Verifiera en signatur av innehållet in en fil.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2822"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3000"/> <source>Import a signed key images list and verify their spent status.</source> <translation>Importera en signerad lista av nyckelavbildningar och verifiera deras spenderstatus.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2834"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3012"/> <source>Export a set of outputs owned by this wallet.</source> <translation>Exportera en uppsättning utgångar som ägs av denna plånbok.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2838"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3016"/> <source>Import a set of outputs owned by this wallet.</source> <translation>Importera en uppsättning utgångar som ägs av denna plånbok.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2842"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3020"/> <source>Show information about a transfer to/from this address.</source> <translation>Visa information om en transktion till/från denna adress.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2845"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3023"/> <source>Change the wallet's password.</source> <translation>Ändra plånbokens lösenord.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2849"/> - <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>Skapa ett nytt slumpmässigt betalnings-ID av normalstorlek. Dessa kommer att vara okrypterade på blockkedjan. Se integrated_address för krypterade korta betalnings-ID.</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2852"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3030"/> <source>Print the information about the current fee and transaction backlog.</source> <translation>Skriv ut information om aktuell avgift och transaktionseftersläpning.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2854"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3032"/> <source>Export data needed to create a multisig wallet</source> <translation>Exportera data som krävs för att skapa en multisig-plånbok</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2857"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3035"/> <source>Turn this wallet into a multisig wallet</source> <translation>Gör denna plånbok till en multisig-plånbok</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2861"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3039"/> <source>Turn this wallet into a multisig wallet, extra step for N-1/N wallets</source> <translation>Gör denna plånbok till en multisig-plånbok, extra steg för plånböcker med N-1/N</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2869"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3047"/> <source>Export multisig info for other participants</source> <translation>Exportera multisig-info för andra deltagare</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2873"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3051"/> <source>Import multisig info from other participants</source> <translation>Importera multisig-info från andra deltagare</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2877"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3055"/> <source>Sign a multisig transaction from a file</source> <translation>Signera en a multisig-transaktion från en fil</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2881"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3059"/> <source>Submit a signed multisig transaction from a file</source> <translation>Skicka en signerad multisig-transaktion från en fil</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2885"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3063"/> <source>Export a signed multisig transaction to a file</source> <translation>Exportera en signerad multisig-transaktion till en fil</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3002"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3160"/> + <source>Unsets the ring used for a given key image or transaction</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3180"/> + <source>Freeze a single output by key image so it will not be used</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3184"/> + <source>Thaw a single output by key image so it may be used again</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3188"/> + <source>Checks whether a given output is currently frozen by key image</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3192"/> + <source>Prints simple network stats</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3196"/> + <source>Prints basic info about Monero for first time users</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3204"/> <source>Show the help section or the documentation about a <command>.</source> <translation>Visa hjälpavsnittet eller dokumentationen för <kommando>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3085"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3258"/> + <source> (set this to support the network and to get a chance to receive new monero)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3295"/> <source>integer >= </source> <translation>heltal >= </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3098"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3308"/> <source>block height</source> <translation>blockhöjd</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3203"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3316"/> + <source>1/yes or 0/no</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3414"/> <source>No wallet found with that name. Confirm creation of new wallet named: </source> <translation>Ingen plånbok med det namnet kunde hittas. Bekräfta skapande av ny plånbok med namn: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3304"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3540"/> <source>can't specify both --restore-deterministic-wallet or --restore-multisig-wallet and --non-deterministic</source> <translation>det går inte att ange både --restore-deterministic-wallet eller --restore-multisig-wallet och --non-deterministic</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3546"/> <source>--restore-multisig-wallet uses --generate-new-wallet, not --wallet-file</source> <translation>--restore-multisig-wallet använder --generate-new-wallet, inte --wallet-file</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3326"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3562"/> <source>specify a recovery parameter with the --electrum-seed="multisig seed here"</source> <translation>ange en återställningsparameter med --electrum-seed="startvärde för multisig"</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3355"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3591"/> <source>Multisig seed failed verification</source> <translation>Startvärde för multisig kunde inte verifieras</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3406"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3481"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3641"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3718"/> <source>This address is a subaddress which cannot be used here.</source> <translation>Denna adress är en underadress som inte kan användas här.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3558"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3796"/> <source>Error: expected M/N, but got: </source> <translation>Fel: förväntade M/N, men fick: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3563"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3801"/> <source>Error: expected N > 1 and N <= M, but got: </source> <translation>Fel: förväntade N > 1 och N <= M, men fick: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3568"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3806"/> <source>Error: M/N is currently unsupported. </source> <translation>Fel: M/N stöds för närvarande inte. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3809"/> <source>Generating master wallet from %u of %u multisig wallet keys</source> <translation>Skapar huvudplånbok från %u av %u multisig-plånboksnycklar</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3600"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3838"/> <source>failed to parse secret view key</source> <translation>det gick inte att parsa hemlig granskningsnyckel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3608"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3846"/> <source>failed to verify secret view key</source> <translation>det gick inte att verifiera hemlig granskningsnyckel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3628"/> - <source>Secret spend key (%u of %u):</source> - <translation>Hemlig spendernyckel (%u av %u):</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3651"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3889"/> <source>Error: M/N is currently unsupported</source> <translation>Fel: M/N stöds för närvarande inte</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3802"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4055"/> <source>Restore height </source> <translation>Återställningshöjd </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3803"/> - <source>Still apply restore height? (Y/Yes/N/No): </source> - <translation>Ska återställningshöjd fortfarande appliceras? (J/Ja/N/Nej): </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3829"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4083"/> <source>Warning: using an untrusted daemon at %s, privacy will be lessened</source> <translation>Varning: använder en ej betrodd daemon på %s; sekretessen kommer att vara mindre</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3888"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4093"/> + <source>If you are new to Monero, type "welcome" for a brief overview.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4098"/> + <source>WARNING: obsolete long payment IDs are enabled. Sending transactions with those payment IDs are bad for your privacy.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4100"/> + <source>It is recommended that you do not use them, and ask recipients who ask for one to not endanger your privacy.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4165"/> <source>Daemon either is not started or wrong port was passed. Please make sure daemon is running or change the daemon address using the 'set_daemon' command.</source> <translation>Antingen har daemonen inte startat eller så angavs fel port. Se till att daemonen körs eller byt daemonadress med kommandot 'set_daemon'.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4036"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4203"/> + <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="4313"/> <source>Your wallet has been generated! To start synchronizing with the daemon, use the "refresh" command. Use the "help" command to see the list of available commands. @@ -1946,910 +2098,910 @@ din plånbok igen (din plånboks nycklar är dock INTE hotade i vilket fall som </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4180"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4457"/> <source>failed to generate new mutlisig wallet</source> <translation>det gick inte att skapa ny multisig-plånbok</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4183"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4460"/> <source>Generated new %u/%u multisig wallet: </source> <translation>Skapa ny %u/%u-multisig-plånbok: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4232"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4509"/> <source>Opened %u/%u multisig wallet%s</source> <translation>Öppnade %u/%u-multisig-plånbok%s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4570"/> <source>Use "help <command>" to see a command's documentation. </source> <translation>Använd "help <kommando>" för att visa dokumentation för kommandot. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4351"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4628"/> <source>wallet is multisig and cannot save a watch-only version</source> <translation>plånboken är multisig och kan inte spara en granskningsversion</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4476"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4664"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4696"/> + <source>Failed to query mining status: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4679"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4707"/> + <source>Failed to setup background mining: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4683"/> + <source>Background mining enabled. Thank you for supporting the Monero network.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4711"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4719"/> + <source>Background mining not enabled. Run "set setup-background-mining 1" to change.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4725"/> + <source>Using an untrusted daemon, skipping background mining check</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4750"/> + <source>The daemon is not set up to background mine.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4751"/> + <source>With background mining enabled, the daemon will mine when idle and not on batttery.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4752"/> + <source>Enabling this supports the network you are using, and makes you eligible for receiving new monero</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4757"/> + <source>Background mining not enabled. Set setup-background-mining to 1 to change.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4864"/> <source>Unexpected array length - Exited simple_wallet::set_daemon()</source> <translation>Oväntad matrislängd - Lämnade simple_wallet::set_daemon()</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4517"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4905"/> <source>This does not seem to be a valid daemon URL.</source> <translation>Detta verkar inte vara en giltig daemon-URL.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4553"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4590"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4941"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4974"/> <source>txid </source> <translation>txid </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4555"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4592"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4943"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4976"/> <source>idx </source> <translation>idx </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4780"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <source>WARNING: this transaction uses an unencrypted payment ID: consider using subaddresses instead.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <source>WARNING: this transaction uses an unencrypted payment ID: these are obsolete. Support will be withdrawn in the future. Use subaddresses instead.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5108"/> + <source>New transfer received since rescan was started. Key images are incomplete.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5183"/> <source> (Some owned outputs have partial key images - import_multisig_info needed)</source> <translation> (Några ägda utgångar har partiella nyckelavbildningar - import_multisig_info krävs)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4783"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5186"/> <source>Currently selected account: [</source> <translation>Aktuellt valt konto: [</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4783"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5186"/> <source>] </source> <translation>] </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4785"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5188"/> <source>Tag: </source> <translation>Tagg: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4785"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5188"/> <source>(No tag assigned)</source> <translation>(Ingen tagg tilldelad)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4792"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5200"/> <source>Balance per address:</source> <translation>Saldo per adress:</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> <source>Address</source> <translation>Adress</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8451"/> <source>Balance</source> <translation>Saldo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8451"/> <source>Unlocked balance</source> <translation>Upplåst saldo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> <source>Outputs</source> <translation>Utgångar</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4793"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8008"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9122"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8451"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9564"/> <source>Label</source> <translation>Etikett</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4801"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5209"/> <source>%8u %6s %21s %21s %7u %21s</source> <translation>%8u %6s %21s %21s %7u %21s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> <source>spent</source> <translation>spenderat</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> <source>global index</source> <translation>globalt index</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> <source>tx id</source> <translation>tx-ID</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>addr index</source> <translation>addr index</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4924"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5312"/> + <source>Used at heights: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5318"/> + <source>[frozen]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5332"/> <source>No incoming transfers</source> <translation>Inga inkommande överföringar</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4928"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5336"/> <source>No incoming available transfers</source> <translation>Inga inkommande tillgängliga överföringar</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4932"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5340"/> <source>No incoming unavailable transfers</source> <translation>Inga inkommande otillgängliga överföringar</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>payment</source> <translation>betalning</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>transaction</source> <translation>transaktion</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>height</source> <translation>höjd</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5364"/> <source>unlock time</source> <translation>upplåsningstid</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4968"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5376"/> <source>No payments with id </source> <translation>Inga betalningar med ID </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5016"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5106"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5442"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5901"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5424"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5514"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5843"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6302"/> <source>failed to get blockchain height: </source> <translation>det gick inte att hämta blockkedjans höjd: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5114"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5522"/> <source> Transaction %llu/%llu: txid=%s</source> <translation> Transaktion %llu/%llu: txid=%s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5135"/> - <source> -Input %llu/%llu: amount=%s</source> - <translation> -Ingång %llu/%llu: belopp=%s</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5151"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5559"/> <source>failed to get output: </source> <translation>det gick inte att hämta utgång: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5159"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5567"/> <source>output key's originating block height shouldn't be higher than the blockchain height</source> <translation>utgångsnyckelns ursprungsblockhöjd får inte vara högre än blockkedjans höjd</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5163"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5571"/> <source> Originating block heights: </source> <translation> Ursprungsblockhöjder: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5175"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5583"/> <source> |</source> <translation> |</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5175"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7706"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5583"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8110"/> <source>| </source> <translation>| </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5192"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5600"/> <source> Warning: Some input keys being spent are from </source> <translation> Varning: Några ingångsnycklar som spenderas kommer från </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5194"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5602"/> <source>, which can break the anonymity of ring signature. Make sure this is intentional!</source> <translation>, vilket kan bryta ringsignaturens anonymitet. Se till att detta är avsiktligt!</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5234"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5853"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6156"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5642"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6254"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6547"/> <source>Ring size must not be 0</source> <translation>Ringstorlek för inte vara 0</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5246"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5865"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6168"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5654"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6266"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6559"/> <source>ring size %u is too small, minimum is %u</source> <translation>ringstorlek %uär för liten, minimum är %u</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5258"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5666"/> <source>wrong number of arguments</source> <translation>fel antal argument</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5417"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5996"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6268"/> - <source>No payment id is included with this transaction. Is this okay? (Y/Yes/N/No): </source> - <translation>Inget betalnings-ID har inkluderats med denna transaktion. Är detta okej? (J/Ja/N/Nej): </translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="5686"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5796"/> + <source>Warning: Unencrypted payment IDs will harm your privacy: ask the recipient to use subaddresses instead</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5458"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6016"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5859"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6407"/> <source>No outputs found, or daemon is not ready</source> <translation>Inga utgångar hittades, eller så är daemonen inte klar</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6428"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6816"/> <source>Failed to parse donation address: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6442"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6830"/> <source>Donating %s %s to The Monero Project (donate.getmonero.org or %s).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6444"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6832"/> <source>Donating %s %s to %s.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6759"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6770"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6777"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7164"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7175"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7182"/> <source>failed to parse tx_key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6786"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7191"/> <source>Tx key successfully stored.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6790"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7195"/> <source>Failed to store tx key: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7296"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7696"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>block</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7440"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7844"/> <source>usage: show_transfers [in|out|all|pending|failed|coinbase] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7493"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7897"/> <source>usage: export_transfers [in|out|all|pending|failed|coinbase] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]] [output=<path>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>direction</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>timestamp</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>running balance</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>hash</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>payment ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>fee</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>destination</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>index</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>note</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7572"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7976"/> <source>CSV exported to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7730"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8159"/> <source>Warning: this will lose any information which can not be recovered from the blockchain.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7731"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8160"/> <source>This includes destination addresses, tx secret keys, tx notes, etc</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7732"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8172"/> + <source>Warning: your restore height is higher than wallet restore height: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="8173"/> <source>Rescan anyway ? (Y/Yes/N/No): </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7750"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8192"/> <source>MMS received new message</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8387"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8832"/> <source>Network type: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8388"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8833"/> <source>Testnet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8389"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8834"/> <source>Stagenet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8389"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8834"/> <source>Mainnet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8559"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8605"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8999"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9045"/> <source>command only supported by HW wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8564"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9004"/> <source>hw wallet does not support cold KI sync</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8576"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9016"/> <source>Please confirm the key image sync on the device</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8582"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9022"/> <source>Key images synchronized to height </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8585"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9025"/> <source>Running untrusted daemon, cannot determine which transaction output is spent. Use a trusted daemon with --trusted-daemon and run rescan_spent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8588"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9028"/> <source> spent, </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8588"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9028"/> <source> unspent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8592"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9032"/> <source>Failed to import key images</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8597"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9037"/> <source>Failed to import key images: </source> <translation type="unfinished">Det gick inte att importera nyckelavbildningar: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8614"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9054"/> <source>Failed to reconnect device</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8619"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9059"/> <source>Failed to reconnect device: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8883"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9323"/> <source>Transaction successfully saved to </source> <translation>Transaktionen sparades till </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8883"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8885"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9323"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9325"/> <source>, txid </source> <translation>, txid </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8885"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9325"/> <source>Failed to save transaction to </source> <translation>Det gick inte att spara transaktion till </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5723"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6044"/> - <source>Sweeping %s in %llu transactions for a total fee of %s. Is this okay? (Y/Yes/N/No): </source> - <translation>Sveper upp %s i %llu transaktioner för en total avgift på %s. Är detta okej? (J/Ja/N/Nej): </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5729"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6050"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6310"/> - <source>Sweeping %s for a total fee of %s. Is this okay? (Y/Yes/N/No): </source> - <translation>Sveper upp %s för en total avgift på %s. Är detta okej? (J/Ja/N/Nej): </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6611"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7014"/> <source>This is a watch only wallet</source> <translation>Detta är en granskningsplånbok</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8813"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9253"/> <source>Double spend seen on the network: this transaction may or may not end up being mined</source> <translation>En dubbelspendering upptäcktes på nätverket: denna transaktion kanske aldrig blir verifierad</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8848"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9288"/> <source>Transaction ID not found</source> <translation>Transaktions-ID kunde inte hittas</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="336"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="357"/> <source>true</source> <translation>sant</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="389"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="410"/> <source>failed to parse refresh type</source> <translation>det gick inte att parsa uppdateringstyp</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="721"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="787"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="939"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="984"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1067"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1124"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1190"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1256"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1350"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1466"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1547"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6601"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6665"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6702"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6799"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7010"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7094"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8397"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8474"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8517"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8630"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8670"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="742"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="808"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="962"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1007"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1090"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1147"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1214"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1280"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1374"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1490"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7004"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7068"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7410"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7494"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8842"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8919"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8962"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9070"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9110"/> <source>command not supported by HW wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="726"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="797"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="747"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="818"/> <source>wallet is watch-only and has no seed</source> <translation>plånboken är enbart för granskning och har inget startvärde</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="744"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="807"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="765"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="828"/> <source>wallet is non-deterministic and has no seed</source> <translation>plånboken är icke-deterministisk och har inget startvärde</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="751"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="772"/> <source>Enter optional seed offset passphrase, empty to see raw seed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="817"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="838"/> <source>Incorrect password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="883"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="906"/> <source>Current fee is %s %s per %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1036"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1158"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1059"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1181"/> <source>Send this multisig info to all other participants, then use exchange_multisig_keys <info1> [<info2>...] with others' multisig info</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1167"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1190"/> <source>Multisig wallet has been successfully created. Current wallet type: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1172"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1196"/> <source>Failed to perform multisig keys exchange: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1499"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1523"/> <source>Failed to load multisig transaction from MMS</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1631"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1788"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1655"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1812"/> <source>Invalid key image</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1637"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1661"/> <source>Invalid txid</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1649"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1673"/> <source>Key image either not spent, or spent with mixin 0</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1664"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1688"/> <source>Failed to get key image ring: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1679"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1703"/> <source>File doesn't exist</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1701"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1725"/> <source>Invalid ring specification: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1733"/> <source>Invalid key image: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1714"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1738"/> <source>Invalid ring type, expected relative or abosolute: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1720"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1732"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1744"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1756"/> <source>Error reading line: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1743"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1767"/> <source>Invalid ring: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1752"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1776"/> <source>Invalid relative ring: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1764"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1788"/> <source>Invalid absolute ring: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1773"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1797"/> <source>Failed to set ring for key image: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1773"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1797"/> <source>Continuing.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1803"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1827"/> <source>Missing absolute or relative keyword</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1813"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1820"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1837"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1844"/> <source>invalid index: must be a strictly positive unsigned integer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1828"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1852"/> <source>invalid index: indices wrap</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1838"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1862"/> <source>invalid index: indices should be in strictly ascending order</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1845"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1869"/> <source>failed to set ring</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1890"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1946"/> <source>First line is not an amount</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1904"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1960"/> <source>Invalid output: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1914"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1970"/> <source>Bad argument: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1914"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1970"/> <source>should be "add"</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1923"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1979"/> <source>Failed to open file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1929"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1985"/> <source>Invalid output key, and file doesn't exist</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1935"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1991"/> <source>Failed to mark output spent: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1952"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1979"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2035"/> <source>Invalid output</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1962"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2018"/> <source>Failed to mark output unspent: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1986"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2042"/> <source>Spent: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1988"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2044"/> <source>Not spent: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1992"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2048"/> <source>Failed to check whether output is spent: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2007"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2063"/> <source>Failed to save known rings: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2022"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2171"/> <source>Please confirm the transaction on the device</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2069"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2218"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2237"/> <source>wallet is watch-only and cannot transfer</source> <translation>plånboken är enbart för granskning och kan inte göra överföringar</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2106"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5581"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2255"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5982"/> <source>WARNING: this is a non default ring size, which may harm your privacy. Default is recommended.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2108"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2257"/> <source>WARNING: from v8, ring size will be fixed and this setting will be ignored.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2137"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2160"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2176"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2286"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2309"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2325"/> <source>priority must be either 0, 1, 2, 3, or 4, or one of: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2330"/> <source>could not change default priority</source> <translation>det gick inte att ändra standardinställning för prioritet</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2249"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2400"/> <source>invalid argument: must be either 0/never, 1/action, or 2/encrypt/decrypt</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2510"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2686"/> <source>Device name not specified</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2519"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2695"/> <source>Device reconnect failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2524"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2700"/> <source>Device reconnect failed: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2583"/> - <source>Show the incoming transfers, all or filtered by availability and address index. - -Output format: -Amount, Spent("T"|"F"), "locked"|"unlocked", RingCT, Global Index, Transaction Hash, Address Index, [Public Key, Key Image] </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2595"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2771"/> <source>Transfer <amount> to <address>. If the parameter "index=<N1>[,<N2>,...]" is specified, the wallet uses outputs received by addresses of those indices. If omitted, the wallet randomly chooses address indices to be used. In any case, it tries its best not to combine outputs across multiple addresses. <priority> is the priority of the transaction. The higher the priority, the higher the transaction fee. Valid values in priority order (from lowest to highest) are: unimportant, normal, elevated, priority. If omitted, the default value (see the command "set priority") is used. <ring_size> is the number of inputs to include for untraceability. Multiple payments can be made at once by adding URI_2 or <address_2> <amount_2> etcetera (before the payment ID, if it's included)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2599"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2775"/> <source>Transfer <amount> to <address> and lock it for <lockblocks> (max. 1000000). If the parameter "index=<N1>[,<N2>,...]" is specified, the wallet uses outputs received by addresses of those indices. If omitted, the wallet randomly chooses address indices to be used. In any case, it tries its best not to combine outputs across multiple addresses. <priority> is the priority of the transaction. The higher the priority, the higher the transaction fee. Valid values in priority order (from lowest to highest) are: unimportant, normal, elevated, priority. If omitted, the default value (see the command "set priority") is used. <ring_size> is the number of inputs to include for untraceability. Multiple payments can be made at once by adding URI_2 or <address_2> <amount_2> etcetera (before the payment ID, if it's included)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2603"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2779"/> <source>Send all unlocked balance to an address and lock it for <lockblocks> (max. 1000000). If the parameter "index<N1>[,<N2>,...]" is specified, the wallet sweeps outputs received by those address indices. If omitted, the wallet randomly chooses an address index to be used. <priority> is the priority of the sweep. The higher the priority, the higher the transaction fee. Valid values in priority order (from lowest to highest) are: unimportant, normal, elevated, priority. If omitted, the default value (see the command "set priority") is used. <ring_size> is the number of inputs to include for untraceability.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2609"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2785"/> <source>Send all unlocked balance to an address. If the parameter "index<N1>[,<N2>,...]" is specified, the wallet sweeps outputs received by those address indices. If omitted, the wallet randomly chooses an address index to be used. If the parameter "outputs=<N>" is specified and N > 0, wallet splits the transaction into N even outputs.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2625"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2801"/> <source>Sign a transaction from a file. If the parameter "export_raw" is specified, transaction raw hex data suitable for the daemon RPC /sendrawtransaction is exported.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2646"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2822"/> <source>If no arguments are specified or <index> is specified, the wallet shows the default or specified address. If "all" is specified, the wallet shows all the existing addresses in the currently selected account. If "new " is specified, the wallet creates a new address with the provided label text (which can be empty). If "label" is specified, the wallet sets the label of the address specified by <index> to the provided label text.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2673"/> - <source>Available options: - seed language - Set the wallet's 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-ring-size <n> - Set the default ring size (obsolete). - auto-refresh <1|0> - Whether to automatically synchronize new blocks from the daemon. - refresh-type <full|optimize-coinbase|no-coinbase|default> - Set the wallet's refresh behaviour. - priority [0|1|2|3|4] - Set the fee to default/unimportant/normal/elevated/priority. - confirm-missing-payment-id <1|0> - ask-password <0|1|2 (or never|action|decrypt)> - unit <monero|millinero|micronero|nanonero|piconero> - Set the 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. - confirm-backlog <1|0> - Whether to warn if there is transaction backlog. - confirm-backlog-threshold [n] - Set a threshold for confirm-backlog to only warn if the transaction backlog is greater than n blocks. - refresh-from-block-height [n] - Set the height before which to ignore blocks. - auto-low-priority <1|0> - Whether to automatically use the low priority fee level when it's safe to do so. - segregate-pre-fork-outputs <1|0> - Set this if you intend to spend outputs on both Monero AND a key reusing fork. - key-reuse-mitigation2 <1|0> - Set this if you are not sure whether you will spend on a key reusing Monero fork later. -subaddress-lookahead <major>:<minor> - Set the lookahead sizes for the subaddress hash table. - Set this if you are not sure whether you will spend on a key reusing Monero fork later. - segregation-height <n> - Set to the height of a key reusing fork you want to use, 0 to use default.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2730"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2908"/> <source>Set the transaction key (r) for a given <txid> in case the tx was made by some other device or 3rd party wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2765"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2943"/> <source>Show the incoming/outgoing transfers within an optional height range. Output format: @@ -2863,42 +3015,42 @@ Pending or Failed: "failed"|"pending", "o <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2775"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2953"/> <source>export_transfers [in|out|all|pending|failed|coinbase] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]] [output=<filepath>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2776"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2954"/> <source>Export to CSV the incoming/outgoing transfers within an optional height range.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2784"/> - <source>Rescan the blockchain from scratch, losing any information which can not be recovered from the blockchain itself.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2818"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2996"/> <source>Export a signed set of key images to a <filename>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2826"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3004"/> <source>Synchronizes key images with the hw wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2830"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3008"/> <source>Attempts to reconnect HW wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2865"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3027"/> + <source>Generate a new random full size payment id (obsolete). 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="3043"/> <source>Performs extra multisig keys exchange rounds. Needed for arbitrary M/N multisig wallets</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2889"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3067"/> <source>Interface with the MMS (Multisig Messaging System) <subcommand> is one of: init, info, signer, list, next, sync, transfer, delete, send, receive, export, note, show, set, help @@ -2907,73 +3059,73 @@ Get help about a subcommand with: help mms <subcommand>, or mms help <s <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2897"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3075"/> <source>Initialize and configure the MMS for M/N = number of required signers/number of authorized signers multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2901"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3079"/> <source>Display current MMS configuration</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2905"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3083"/> <source>Set or modify authorized signer info (single-word label, transport address, Monero address), or list all signers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2909"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3087"/> <source>List all messages</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2913"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3091"/> <source>Evaluate the next possible multisig-related action(s) according to wallet state, and execute or offer for choice By using 'sync' processing of waiting messages with multisig sync info can be forced regardless of wallet state</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2918"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3096"/> <source>Force generation of multisig sync info regardless of wallet state, to recover from special situations like "stale data" errors</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2922"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3100"/> <source>Initiate transfer with MMS support; arguments identical to normal 'transfer' command arguments, for info see there</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2926"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3104"/> <source>Delete a single message by giving its id, or delete all messages by using 'all'</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2930"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3108"/> <source>Send a single message by giving its id, or send all waiting messages</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2934"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3112"/> <source>Check right away for new messages to receive</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2938"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3116"/> <source>Write the content of a message to a file "mms_message_content"</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2942"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3120"/> <source>Send a one-line message to an authorized signer, identified by its label, or show any waiting unread notes</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2946"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3124"/> <source>Show detailed info about a single message</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2950"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3128"/> <source>Available options: auto-send <1|0> Whether to automatically send newly generated messages right away. @@ -2981,27 +3133,27 @@ By using 'sync' processing of waiting messages with multisig sync info <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2956"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3134"/> <source>Send completed signer config to all other authorized signers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2960"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3138"/> <source>Start auto-config at the auto-config manager's wallet by issuing auto-config tokens and optionally set others' labels</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2964"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3142"/> <source>Delete any auto-config tokens and abort a auto-config process</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2968"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3146"/> <source>Start auto-config by using the token received from the auto-config manager</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2972"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3150"/> <source>Print the ring(s) used to spend a given key image or transaction (if the ring size is > 1) Output format: @@ -3009,1099 +3161,1170 @@ Key Image, "absolute", list of rings</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2978"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3156"/> <source>Set the ring used for a given key image, so it can be reused in a fork</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2982"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3164"/> <source>Save known rings to the shared rings database</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2986"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3168"/> <source>Mark output(s) as spent so they never get selected as fake outputs in a ring</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2990"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3172"/> <source>Marks an output as unspent so it may get selected as a fake output in a ring</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2994"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3176"/> <source>Checks whether an output is marked as spent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2998"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3200"/> <source>Returns version information</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3087"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3297"/> <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 (långsammast, inga antaganden); optimize-coinbase (snabb, antar att hela coinbase-transaktionen betalas till en enda adress); no-coinbase (snabbast, antar att ingen coinbase-transaktion tas emot), default (samma som optimize-coinbase)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3298"/> <source>0, 1, 2, 3, or 4, or one of </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3090"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3300"/> <source>0|1|2 (or never|action|decrypt)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3091"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3301"/> <source>monero, millinero, micronero, nanonero, piconero</source> <translation>monero, millinero, micronero, nanonero, piconero</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3102"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3312"/> <source><major>:<minor></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3106"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3317"/> <source><device_name[:device_spec]></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3127"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3338"/> <source>wrong number range, use: %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3377"/> <source>Wallet name not valid. Please try again or use Ctrl-C to quit.</source> <translation>Plånbokens namn ej giltigt. Försök igen eller använd Ctrl-C för att avsluta.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3183"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3394"/> <source>Wallet and key files found, loading...</source> <translation>Plånbok och nyckelfil hittades, läser in …</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3189"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> <source>Key file found but not wallet file. Regenerating...</source> <translation>Nyckelfilen hittades men inte plånboksfilen. Återskapar …</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3195"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3406"/> <source>Key file not found. Failed to open wallet: </source> <translation>Nyckelfilen kunde inte hittas. Det gick inte att öppna plånbok: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3214"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3425"/> <source>Generating new wallet...</source> <translation>Skapar ny plånbok …</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3232"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3443"/> <source>NOTE: the following %s can be used to recover access to your wallet. 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="3234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3445"/> <source>string</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3445"/> <source>25 words</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3273"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3506"/> <source>Can't specify more than one of --testnet and --stagenet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3285"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3521"/> <source>can't specify more than one of --generate-new-wallet="wallet_name", --wallet-file="wallet_name", --generate-from-view-key="wallet_name", --generate-from-spend-key="wallet_name", --generate-from-keys="wallet_name", --generate-from-multisig-keys="wallet_name", --generate-from-json="jsonfilename" and --generate-from-device="wallet_name"</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3364"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3600"/> <source>Electrum-style word list failed verification</source> <translation>Det gick inte att verifiera ordlista av Electrum-typ</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3369"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3605"/> <source>Enter seed offset passphrase, empty if none</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3395"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3415"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3450"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3470"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3490"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3505"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3553"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3578"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3594"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3633"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3630"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3650"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3686"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3707"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3727"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3742"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3791"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3816"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3832"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3871"/> <source>No data supplied, cancelled</source> <translation>Inga data angivna, avbryter</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3401"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3476"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3584"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5371"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5969"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6243"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6818"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6886"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6950"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7154"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8193"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8454"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3713"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3822"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5770"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6360"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6631"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7218"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7286"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7350"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7554"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8899"/> <source>failed to parse address</source> <translation>det gick inte att parsa adressen</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3421"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3511"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3656"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3748"/> <source>failed to parse view key secret key</source> <translation>det gick inte att parsa hemlig granskningsnyckel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3430"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3528"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3665"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3765"/> <source>failed to verify view key secret key</source> <translation>det gick inte att verifiera hemlig granskningsnyckel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3434"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3532"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3613"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3669"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3769"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3851"/> <source>view key does not match standard address</source> <translation>granskningsnyckel matchar inte standardadress</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3439"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3459"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3536"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3669"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3674"/> <location filename="../src/simplewallet/simplewallet.cpp" line="3695"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3726"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3773"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3907"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3934"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3966"/> <source>account creation failed</source> <translation>det gick inte att skapa konto</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3455"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3496"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3638"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3691"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3733"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3876"/> <source>failed to parse spend key secret key</source> <translation>det gick inte att parsa spendernyckel hemlig nyckel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3520"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3658"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3757"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3896"/> <source>failed to verify spend key secret key</source> <translation>det gick inte att verifiera spendernyckel hemlig nyckel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3524"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3663"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3761"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3901"/> <source>spend key does not match standard address</source> <translation>spendernyckel matchar inte standardadress</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3701"/> - <source>No restore height is specified.</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3866"/> + <source>Secret spend key (%u of %u)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3702"/> - <source>Assumed you are creating a new account, restore will be done from current estimated blockchain height.</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3941"/> + <source>No restore height is specified.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3703"/> - <source>Use --restore-height if you want to restore an already setup account from a specific height</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3942"/> + <source>Assumed you are creating a new account, restore will be done from current estimated blockchain height.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3707"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3947"/> <source>account creation aborted</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3816"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4069"/> <source>can't specify --subaddress-lookahead and --wallet-file at the same time</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3820"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4073"/> <source>failed to open account</source> <translation>det gick inte att öppna konto</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3824"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4391"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4444"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4529"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6854"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4078"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4779"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4832"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4917"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7254"/> <source>wallet is null</source> <translation>plånbok är null</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3832"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4086"/> <source>Failed to initialize ring database: privacy enhancing features will be inactive</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3917"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4194"/> <source>If your display freezes, exit blind with ^C, then run again with --use-english-language-names</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3935"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3940"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4212"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4217"/> <source>invalid language choice entered. Please try again. </source> <translation>ogiltigt språkval har angivits. Försök igen. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4019"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4296"/> <source>View key: </source> <translation>Granskningsnyckel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4407"/> <source>Generated new wallet on hw device: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4209"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4486"/> <source>Key file not found. Failed to open wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4286"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4563"/> <source>You may want to remove the file "%s" and try again</source> <translation>Du kan också prova att bort filen "%s" och försöka igen</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4314"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4591"/> <source>failed to deinitialize wallet</source> <translation>det gick inte att avinitiera plånboken</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4367"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4644"/> <source>Watch only wallet saved as: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4371"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4648"/> <source>Failed to save watch only wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4382"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5024"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8522"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4770"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5432"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8967"/> <source>this command requires a trusted daemon. Enable with --trusted-daemon</source> <translation>detta kommando kräver en betrodd daemon. Aktivera med --trusted-daemon</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4498"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4886"/> <source>Expected trusted or untrusted, got </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4515"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4903"/> <source>trusted</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4515"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4903"/> <source>untrusted</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4539"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4927"/> <source>blockchain can't be saved: </source> <translation>blockkedjan kan inte sparas: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4569"/> - <source>NOTE: this transaction uses an encrypted payment ID: consider using subaddresses instead</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4572"/> - <source>WARNING: this transaction uses an unencrypted payment ID: consider using subaddresses instead</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4608"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4992"/> <source>Password needed (%s) - use the refresh command</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4616"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5000"/> <source>Enter password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4631"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5015"/> <source>Device requires attention</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4639"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5023"/> <source>Enter device PIN</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4641"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5025"/> <source>Failed to read device PIN</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4648"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5032"/> <source>Please enter the device passphrase on the device</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4655"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5039"/> <source>Enter device passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4657"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5041"/> <source>Failed to read device passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4673"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5057"/> <source>The first refresh has finished for the HW-based wallet with received money. hw_key_images_sync is needed. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4675"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4753"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5059"/> <source>Do you want to do it now? (Y/Yes/N/No): </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4677"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5061"/> <source>hw_key_images_sync skipped. Run command manually before a transfer.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4720"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5038"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5446"/> <source>daemon is busy. Please try again later.</source> <translation>daemonen är upptagen. Försök igen senare.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4724"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="5042"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5127"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5450"/> <source>no connection to daemon. Please make sure daemon is running.</source> <translation>ingen anslutning till daemonen. Se till att daemonen körs.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4734"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5137"/> <source>refresh error: </source> <translation>fel vid uppdatering: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4782"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5185"/> <source> (Some owned outputs have missing key images - import_key_images needed)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4786"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5194"/> <source>Balance: </source> <translation>Saldo: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4855"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5263"/> <source>Invalid keyword: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4893"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5301"/> <source>pubkey</source> <translation>publik nyckel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4893"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5301"/> <source>key image</source> <translation>nyckelavbildning</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4910"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5318"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7922"/> <source>unlocked</source> <translation>upplåst</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5302"/> <source>ringct</source> <translation>ringct</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4904"/> - <source>Heights: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4909"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5317"/> <source>T</source> <translation>S</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4909"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5317"/> <source>F</source> <translation>F</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4910"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5318"/> <source>locked</source> <translation>låst</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4911"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5319"/> <source>RingCT</source> <translation>RingCT</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4911"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5319"/> <source>-</source> <translation>-</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4990"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5398"/> <source>payment ID has invalid format, expected 16 or 64 character hex string: </source> <translation>betalnings-ID har ogiltigt format. En hexadecimal sträng med 16 eller 64 tecken förväntades: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5046"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5454"/> <source>failed to get spent status</source> <translation>det gick inte att hämta spenderstatus</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5538"/> <source>failed to find construction data for tx input</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5543"/> + <source> +Input %llu/%llu (%s): amount=%s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5601"/> <source>the same transaction</source> <translation>samma transaktion</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5601"/> <source>blocks that are temporally very close</source> <translation>block som ligger väldigt nära varandra i tiden</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9015"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6295"/> + <source>Locked blocks too high, max 1000000 (˜4 yrs)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5818"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6387"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6656"/> + <source>No payment id is included with this transaction. Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5882"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5892"/> + <source>Is this okay anyway?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5887"/> + <source>There is currently a %u block backlog at that fee level. Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6124"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6435"/> + <source>Sweeping %s in %llu transactions for a total fee of %s. Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6441"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6698"/> + <source>Sweeping %s for a total fee of %s. Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6177"/> + <source>Discarding %s of unmixable outputs that cannot be spent, which can be undone by "rescan_spent". Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6980"/> + <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min ring size %lu, %s. %sIs this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="8161"/> + <source>Rescan anyway?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="8654"/> + <source>Short payment IDs are to be used within an integrated address only</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="9457"/> <source> (Y/Yes/N/No): </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9042"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9484"/> <source>Choose processing:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9051"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9493"/> <source>Sign tx</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9059"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9501"/> <source>Send the tx for submission to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9063"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9505"/> <source>Send the tx for signing to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9070"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9512"/> <source>Submit tx</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9073"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9515"/> <source>unknown</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9079"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9521"/> <source>Choice: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9091"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9533"/> <source>Wrong choice</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9098"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9540"/> <source>Id</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9098"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9540"/> <source>I/O</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9098"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9540"/> <source>Authorized Signer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>Message Type</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>Height</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>R</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>Message State</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9541"/> <source>Since</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9116"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9558"/> <source> ago</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9122"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9564"/> <source>#</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9122"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9564"/> <source>Transport Address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9565"/> <source>Auto-Config Token</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9565"/> <source>Monero Address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9127"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9135"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9137"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9569"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9577"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9579"/> <source><not set></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9178"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9620"/> <source>Message </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9179"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9621"/> <source>In/out: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9623"/> <source>State: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9623"/> <source>%s since %s, %s ago</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9185"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9627"/> <source>Sent: Never</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9189"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9631"/> <source>Sent: %s, %s ago</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9192"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9634"/> <source>Authorized signer: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9635"/> <source>Content size: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9635"/> <source> bytes</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9194"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9636"/> <source>Content: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9194"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9636"/> <source>(binary data)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9224"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9666"/> <source>Send these messages now?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9676"/> <source>Queued for sending.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9254"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9696"/> <source>Invalid message id</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9263"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9705"/> <source>usage: mms init <required_signers>/<authorized_signers> <own_label> <own_transport_address></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9269"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9711"/> <source>The MMS is already initialized. Re-initialize by deleting all signer info and messages?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9284"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9726"/> <source>Error in the number of required signers and/or authorized signers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9301"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9743"/> <source>The MMS is not active.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9324"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9766"/> <source>Invalid signer number </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9329"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9771"/> <source>mms signer [<number> <label> [<transport_address> [<monero_address>]]]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9348"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9790"/> <source>Invalid Monero address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9355"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9797"/> <source>Wallet state does not allow changing Monero addresses anymore</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9367"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9809"/> <source>Usage: mms list</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9380"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9822"/> <source>Usage: mms next [sync]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9405"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9847"/> <source>No next step: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9415"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9857"/> <source>prepare_multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9421"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9863"/> <source>make_multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9436"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9878"/> <source>exchange_multisig_keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9451"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9893"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10013"/> <source>export_multisig_info</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9460"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9902"/> <source>import_multisig_info</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9473"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9915"/> <source>sign_multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9483"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9925"/> <source>submit_multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9493"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9935"/> <source>Send tx</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9504"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9946"/> <source>Process signer config</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9516"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9958"/> <source>Replace current signer config with the one displayed above?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9530"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9972"/> <source>Process auto config data</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9544"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9986"/> <source>Nothing ready to process</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9564"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10006"/> <source>Usage: mms sync</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9588"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10030"/> <source>Usage: mms delete (<message_id> | all)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9595"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10037"/> <source>Delete all messages?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9621"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10063"/> <source>Usage: mms send [<message_id>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9638"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10080"/> <source>Usage: mms receive</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9655"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10097"/> <source>Usage: mms export <message_id></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9667"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10109"/> <source>Message content saved to: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9671"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10113"/> <source>Failed to to save message content</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9695"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10137"/> <source>Usage: mms note [<label> <text>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9702"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10144"/> <source>No signer found with label </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9724"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10166"/> <source>Usage: mms show <message_id></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9743"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10185"/> <source>Usage: mms set <option_name> [<option_value>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9760"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10202"/> <source>Wrong option value</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9765"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10207"/> <source>Auto-send is on</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9765"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10207"/> <source>Auto-send is off</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9770"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10212"/> <source>Unknown option</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9778"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10220"/> <source>Usage: mms help [<subcommand>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9794"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10236"/> <source>Usage: mms send_signer_config</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9800"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10242"/> <source>Signer config not yet complete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9815"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10257"/> <source>Usage: mms start_auto_config [<label> <label> ...]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9820"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10262"/> <source>There are signers without a label set. Complete labels before auto-config or specify them as parameters here.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9826"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10268"/> <source>Auto-config is already running. Cancel and restart?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9850"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10292"/> <source>Usage: mms stop_auto_config</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9853"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10295"/> <source>Delete any auto-config tokens and stop auto-config?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9866"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10308"/> <source>Usage: mms auto_config <auto_config_token></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9873"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10315"/> <source>Invalid auto-config token</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9879"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10321"/> <source>Auto-config already running. Cancel and restart?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9911"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10339"/> + <source>MMS not available in this wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="10363"/> <source>The MMS is not active. Activate using the "mms init" command</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9988"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10440"/> <source>Invalid MMS subcommand</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="9993"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9997"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10445"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="10449"/> <source>Error in MMS command: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6969"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7079"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7369"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7479"/> <source>Good signature</source> <translation>Godkänd signatur</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6996"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7081"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7396"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7481"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7581"/> <source>Bad signature</source> <translation>Felaktig signatur</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8169"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8612"/> <source>Standard address: </source> <translation>Standardadress: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8174"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8617"/> <source>failed to parse payment ID or address</source> <translation>det gick inte att parsa betalnings-ID eller adress</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8215"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8659"/> <source>failed to parse payment ID</source> <translation>det gick inte att parsa betalnings-ID</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8233"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8677"/> <source>failed to parse index</source> <translation>det gick inte att parsa index</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8241"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8685"/> <source>Address book is empty.</source> <translation>Adressboken är tom.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8247"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8691"/> <source>Index: </source> <translation>Index: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8248"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8378"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8692"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8823"/> <source>Address: </source> <translation>Adress: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8249"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8693"/> <source>Payment ID: </source> <translation>Betalnings-ID: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8250"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8377"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8694"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8822"/> <source>Description: </source> <translation>Beskrivning: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8407"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8852"/> <source>wallet is watch-only and cannot sign</source> <translation>plånboken är enbart för granskning och kan inte signera</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1289"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8421"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8447"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8684"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1313"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8866"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8892"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9124"/> <source>failed to read file </source> <translation>det gick inte att läsa filen </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6958"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7072"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3943"/> + <source>Use --restore-height or --restore-date if you want to restore an already setup account from a specific height.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3945"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4033"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5984"/> + <source>Is this okay?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4056"/> + <source>Still apply restore height?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="7358"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7472"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7566"/> <source>failed to load signature file</source> <translation>det gick inte att läsa in signaturfil</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7020"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7420"/> <source>wallet is watch-only and cannot generate the proof</source> <translation>plånboken är enbart för granskning och kan inte skapa beviset</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7104"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7504"/> <source>The reserve proof can be generated only by a full wallet</source> <translation>Beviset på reserv kan endast skapas av en standardplånbok</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7159"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7559"/> <source>Address must not be a subaddress</source> <translation>Adressen får inte vara en underadress</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7177"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7577"/> <source>Good signature -- total: %s, spent: %s, unspent: %s</source> <translation>Godkänd signatur -- summa: %s, spenderat: %s, ej spenderat: %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7365"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7767"/> <source>[Double spend seen on the network: this transaction may or may not end up being mined] </source> <translation>[En dubbelspendering upptäcktes på nätverket: denna transaktion kanske aldrig blir verifierad] </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7641"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8045"/> <source>There is no unspent output in the specified address</source> <translation>Det finns ingen ej spenderad utgång i den angivna adressen</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7799"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8242"/> <source> (no daemon)</source> <translation> (ingen daemon)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7801"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8244"/> <source> (out of sync)</source> <translation> (inte synkroniserad)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7852"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8295"/> <source>(Untitled account)</source> <translation>(Ej namngivet konto)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7865"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7883"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7908"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7931"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8077"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8100"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8308"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8326"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8351"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8374"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8520"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8543"/> <source>failed to parse index: </source> <translation>det gick inte att parsa index: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7870"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8082"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8313"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8525"/> <source>specify an index between 0 and </source> <translation>ange ett index mellan 0 och </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7988"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8431"/> <source> Grand total: Balance: </source> @@ -4110,386 +4333,386 @@ Totalsumma: Saldo: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7988"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8431"/> <source>, unlocked balance: </source> <translation>, upplåst saldo: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7996"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8439"/> <source>Untagged accounts:</source> <translation>Otaggade konton:</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8002"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8445"/> <source>Tag %s is unregistered.</source> <translation>Taggen %s har inte registrerats.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8005"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8448"/> <source>Accounts with tag: </source> <translation>Konton med tagg: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8006"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8449"/> <source>Tag's description: </source> <translation>Taggens beskrivning: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8451"/> <source>Account</source> <translation>Konto</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8014"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8457"/> <source> %c%8u %6s %21s %21s %21s</source> <translation> %c%8u %6s %21s %21s %21s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8024"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8467"/> <source>----------------------------------------------------------------------------------</source> <translation>----------------------------------------------------------------------------------</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8025"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8468"/> <source>%15s %21s %21s</source> <translation>%15s %21s %21s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8048"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8491"/> <source>Primary address</source> <translation>Primär adress</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8048"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8491"/> <source>(used)</source> <translation>(används)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8069"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8512"/> <source>(Untitled address)</source> <translation>(Ej namngiven adress)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8109"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8552"/> <source><index_min> is already out of bound</source> <translation><index_min> är redan utanför tillåtet intervall</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8114"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8557"/> <source><index_max> exceeds the bound</source> <translation><index_max> är utanför tillåtet intervall</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8140"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8152"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8583"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8595"/> <source>Integrated addresses can only be created for account 0</source> <translation>Integrerade adresser kan bara skapas för konto 0</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8164"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8607"/> <source>Integrated address: %s, payment ID: %s</source> <translation>Integrerad adress: %s, betalnings-ID: %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8169"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8612"/> <source>Subaddress: </source> <translation>Underadress: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8335"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8779"/> <source>no description found</source> <translation>ingen beskrivning hittades</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8337"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8781"/> <source>description found: </source> <translation>beskrivning hittades: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8376"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8821"/> <source>Filename: </source> <translation>Filnamn: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8381"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8826"/> <source>Watch only</source> <translation>Endast granskning</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8383"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8828"/> <source>%u/%u multisig%s</source> <translation>%u/%u multisig%s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8385"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8830"/> <source>Normal</source> <translation>Normal</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8386"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="9180"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8831"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9622"/> <source>Type: </source> <translation>Typ: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8412"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8857"/> <source>This wallet is multisig and cannot sign</source> <translation>Plånboken är multisig och kan inte signera</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8461"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8906"/> <source>Bad signature from </source> <translation>Felaktig signatur från </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8465"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8910"/> <source>Good signature from </source> <translation>Godkänd signatur från </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8484"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8929"/> <source>wallet is watch-only and cannot export key images</source> <translation>plånboken är enbart för granskning och kan inte exportera nyckelavbildningar</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1228"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8498"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8651"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1252"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8943"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9091"/> <source>failed to save file </source> <translation>det gick inte att spara fil </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8509"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8954"/> <source>Signed key images exported to </source> <translation>Signerade nyckelavbildningar exporterades till </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8662"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9102"/> <source>Outputs exported to </source> <translation>Utgångar exporterades till </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5354"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6417"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7115"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7600"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7608"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5752"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6805"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7515"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8004"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8012"/> <source>amount is wrong: </source> <translation>beloppet är fel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5355"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6417"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5753"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6805"/> <source>expected number from 0 to </source> <translation>förväntades: ett tal från 0 till </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="5721"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6122"/> <source>Sweeping </source> <translation>Sveper upp </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6350"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6738"/> <source>Money successfully sent, transaction: </source> <translation>Pengar skickades, transaktion: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6530"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6933"/> <source>Change goes to more than one address</source> <translation>Växel går till fler än en adress</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6974"/> <source>%s change to %s</source> <translation>%s växel till %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6574"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6977"/> <source>no change</source> <translation>ingen växel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1435"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1448"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6646"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1459"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1472"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7049"/> <source>Transaction successfully signed to file </source> <translation>Transaktionen signerades till fil </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6713"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6749"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6811"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6860"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6942"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7027"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7062"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8267"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8295"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8714"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7116"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7154"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7211"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7260"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7342"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7427"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7462"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8711"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8739"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9154"/> <source>failed to parse txid</source> <translation>det gick inte att parsa txid</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6727"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7132"/> <source>Tx key: </source> <translation>Tx-nyckel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6732"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7137"/> <source>no tx keys found for this txid</source> <translation>inga tx-nycklar kunde hittas för detta txid</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6829"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7041"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7229"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7441"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7530"/> <source>signature file saved to: </source> <translation>signaturfilen sparades till: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6831"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7043"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7132"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7231"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7443"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7532"/> <source>failed to save signature file</source> <translation>det gick inte att spara signaturfilen</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6868"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6877"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7268"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7277"/> <source>failed to parse tx key</source> <translation>det gick inte att parsa txnyckel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6835"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6923"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="7001"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7235"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7323"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7401"/> <source>error: </source> <translation>fel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6899"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6972"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7299"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7372"/> <source>received</source> <translation>mottaget</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6899"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6972"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7299"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7372"/> <source>in txid</source> <translation>i txid</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6918"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6991"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7318"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7391"/> <source>received nothing in txid</source> <translation>tog emot ingenting i txid</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6902"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6975"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7375"/> <source>WARNING: this transaction is not yet included in the blockchain!</source> <translation>VARNING: denna transaktion är ännu inte inkluderad i blockkedjan!</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6908"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6981"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7308"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7381"/> <source>This transaction has %u confirmations</source> <translation>Denna transaktion har %u bekräftelser</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="6912"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="6985"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7312"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7385"/> <source>WARNING: failed to determine number of confirmations!</source> <translation>VARNING: det gick inte att bestämma antal bekräftelser!</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7266"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7666"/> <source>bad min_height parameter:</source> <translation>felaktig parameter för min_höjd:</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7278"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7678"/> <source>bad max_height parameter:</source> <translation>felaktig parameter för max_höjd:</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7296"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7696"/> <source>in</source> <translation>in</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7615"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8019"/> <source><min_amount> should be smaller than <max_amount></source> <translation><min_belopp> måste vara mindre än <max_belopp></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7647"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8051"/> <source> Amount: </source> <translation> Belopp: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7647"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8051"/> <source>, number of keys: </source> <translation>, antal nycklar: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7652"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8056"/> <source> </source> <translation></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7657"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8061"/> <source> Min block height: </source> <translation> Minblockhöjd: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7658"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8062"/> <source> Max block height: </source> <translation> Maxblockhöjd: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7659"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8063"/> <source> Min amount found: </source> <translation> Minbelopp funnet: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7660"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8064"/> <source> Max amount found: </source> <translation> Maxbelopp funnet: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7661"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8065"/> <source> Total count: </source> <translation> Totalt antal: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7701"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8105"/> <source> Bin size: </source> <translation> Storlek för binge: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7702"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8106"/> <source> Outputs per *: </source> <translation> Utgångar per *: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7704"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8108"/> <source>count ^ </source> @@ -4498,52 +4721,52 @@ Utgångar per *: </translation> </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7706"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8110"/> <source> |</source> <translation> |</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7708"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8112"/> <source> +</source> <translation> +</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7708"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8112"/> <source>+--> block height </source> <translation>+--> blockhöjd </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8113"/> <source> ^</source> <translation> ^</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8113"/> <source>^ </source> <translation>^ </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7710"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8114"/> <source> </source> <translation></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7797"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8240"/> <source>wallet</source> <translation>plånbok</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="870"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8144"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="893"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8587"/> <source>Random payment ID: </source> <translation>Slumpmässigt betalnings-ID: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8145"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="8588"/> <source>Matching integrated address: </source> <translation>Matchande integrerad adress: </translation> </message> @@ -4795,311 +5018,321 @@ Use "mms note" to display the waiting notes</source> <context> <name>sw</name> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="125"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="135"/> <source>Generate new wallet and save it to <arg></source> <translation>Skapa ny plånbok och spara den till <arg></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="126"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="136"/> <source>Generate new wallet from device and save it to <arg></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="127"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="137"/> <source>Generate incoming-only wallet from view key</source> <translation>Skapa granskningsplånbok från granskningsnyckel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="128"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="138"/> <source>Generate deterministic wallet from spend key</source> <translation>Skapa deterministisk plånbok från spendernyckel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="129"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="139"/> <source>Generate wallet from private keys</source> <translation>Skapa plånbok från privata nycklar</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="140"/> <source>Generate a master wallet from multisig wallet keys</source> <translation>Skapa en huvudplånbok från multisig-plånboksnycklar</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="132"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="142"/> <source>Language for mnemonic</source> <translation>Språk för minnesbaserat startvärde</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="133"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="143"/> <source>Specify Electrum seed for wallet recovery/creation</source> <translation>Ange Electrum-startvärde för att återställa/skapa plånbok</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="134"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="144"/> <source>Recover wallet using Electrum-style mnemonic seed</source> <translation>Återställ plånbok genom att använda minnesbaserat startvärde (Electrum-typ)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="135"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="145"/> <source>Recover multisig wallet using Electrum-style mnemonic seed</source> <translation>Återställ multisig-plånbok genom att använda minnesbaserat startvärde (Electrum-typ)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="136"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="146"/> <source>Generate non-deterministic view and spend keys</source> <translation>Skapa icke-deterministisk granskningsnyckel och spendernyckel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="361"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="149"/> + <source>Restore from estimated blockchain height on specified date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="382"/> <source>invalid argument: must be either 0/1, true/false, y/n, yes/no</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="417"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="438"/> <source>DNSSEC validation passed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="421"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="442"/> <source>WARNING: DNSSEC validation was unsuccessful, this address may not be correct!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="424"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="445"/> <source>For URL: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="426"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="447"/> <source> Monero Address = </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="428"/> - <source>Is this OK? (Y/n) </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="438"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="459"/> <source>you have cancelled the transfer request</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="459"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="480"/> <source>failed to parse index: </source> <translation type="unfinished">det gick inte att parsa index: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="472"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="493"/> <source>invalid format for subaddress lookahead; must be <major>:<minor></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="489"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="510"/> <source>no connection to daemon. Please make sure daemon is running.</source> <translation type="unfinished">ingen anslutning till daemonen. Se till att daemonen körs.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="494"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="515"/> <source>RPC error: </source> <translation type="unfinished">RPC-fel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="498"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="519"/> <source>failed to get random outputs to mix: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="505"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="513"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="526"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="534"/> <source>Not enough money in unlocked balance</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="523"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="544"/> <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="529"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="550"/> <source>not enough outputs for specified ring size</source> <translation type="unfinished">inte tillräckligt med utgångar för angiven ringstorlek</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="532"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="553"/> <source>output amount</source> <translation type="unfinished">utgångens belopp</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="532"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="553"/> <source>found outputs to use</source> <translation type="unfinished">hittade utgångar att använda</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="534"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="555"/> <source>Please use sweep_unmixable.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="538"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="559"/> <source>transaction was not constructed</source> <translation type="unfinished">transaktionen konstruerades inte</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="543"/> - <source>transaction %s was rejected by daemon with status: </source> - <translation type="unfinished">transaktionen %s avvisades av daemonen med status: </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="546"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="567"/> <source>Reason: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="555"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="576"/> <source>one of destinations is zero</source> <translation type="unfinished">ett av målen är noll</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="560"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="581"/> <source>failed to find a suitable way to split transactions</source> <translation type="unfinished">det gick inte att hitta ett lämpligt sätt att dela upp transaktioner</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="566"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="587"/> <source>unknown transfer error: </source> <translation type="unfinished">okänt överföringsfel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="571"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="592"/> <source>Multisig error: </source> <translation type="unfinished">Multisig-fel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="577"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="598"/> <source>internal error: </source> <translation type="unfinished">internt fel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="582"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="603"/> <source>unexpected error: </source> <translation type="unfinished">oväntat fel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="586"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="607"/> <source>There was an error, which could mean the node may be trying to get you to retry creating a transaction, and zero in on which outputs you own. Or it could be a bona fide error. It may be prudent to disconnect from this node, and not try to send a transaction immediately. Alternatively, connect to another node so the original node cannot correlate information.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="596"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="617"/> <source>File %s likely stores wallet private keys! Use a different file name.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="599"/> - <source>File %s already exists. Are you sure to overwrite it? (Y/Yes/N/No): </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7195"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7595"/> <source> seconds</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7197"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7597"/> <source> minutes</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7199"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7599"/> <source> hours</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7601"/> <source> days</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7203"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7603"/> <source> months</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="7204"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="7604"/> <source>a long time</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8940"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9382"/> <source>This is the command line monero wallet. It needs to connect to a monero daemon to work correctly. WARNING: Do not reuse your Monero keys on another fork, UNLESS this fork has key reuse mitigations built in. Doing so will harm your privacy.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8965"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9407"/> <source>Unknown command: </source> <translation type="unfinished">Okänt kommando: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="137"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="147"/> <source>Allow communicating with a daemon that uses a different RPC version</source> <translation>Tillåt kommunikation med en daemon som använder en annan version av RPC</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="138"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="148"/> <source>Restore from specific blockchain height</source> <translation>Återställ från angiven blockkedjehöjd</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="139"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="150"/> <source>The newly created transaction will not be relayed to the monero network</source> <translation>Den nyss skapade transaktionen kommer inte att skickas vidare till monero-nätverket</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="140"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="151"/> <source>Create an address file for new wallets</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="142"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="153"/> <source>Display English language names</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="276"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="154"/> + <source>Support obsolete long (unencrypted) payment ids (using them harms your privacy)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="297"/> <source>failed to read wallet password</source> <translation type="unfinished">det gick inte att läsa lösenord för plånboken</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="283"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="304"/> <source>Enter a new password for the wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="283"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="304"/> <source>Wallet password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="293"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="485"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="314"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="506"/> <source>daemon is busy. Please try again later.</source> <translation>daemonen är upptagen. Försök igen senare.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="302"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="323"/> <source>possibly lost connection to daemon</source> <translation>anslutning till daemonen kan ha förlorats</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="319"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="340"/> <source>Error: </source> <translation>Fel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="8959"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="449"/> + <source>Is this OK?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="564"/> + <source>transaction %s was rejected by daemon</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="620"/> + <source>File %s already exists. Are you sure to overwrite it?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="9401"/> <source>Failed to initialize wallet</source> <translation>Det gick inte att initiera plånbok</translation> </message> @@ -5107,360 +5340,448 @@ WARNING: Do not reuse your Monero keys on another fork, UNLESS this fork has key <context> <name>tools::wallet2</name> <message> - <location filename="../src/wallet/wallet2.cpp" line="201"/> + <location filename="../src/wallet/wallet2.cpp" line="234"/> <source>Use daemon instance at <host>:<port></source> <translation>Använd daemonen på <värddator>:<port></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="202"/> + <location filename="../src/wallet/wallet2.cpp" line="235"/> <source>Use daemon instance at host <arg> instead of localhost</source> <translation>Använd daemonen på värddatorn <arg> istället för localhost</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="206"/> + <location filename="../src/wallet/wallet2.cpp" line="240"/> <source>Wallet password file</source> <translation>Lösenordsfil för plånboken</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="207"/> + <location filename="../src/wallet/wallet2.cpp" line="241"/> <source>Use daemon instance at port <arg> instead of 18081</source> <translation>Använd daemonen på port <arg> istället för 18081</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="209"/> + <location filename="../src/wallet/wallet2.cpp" line="250"/> <source>For testnet. Daemon must also be launched with --testnet flag</source> <translation>För testnet. Daemonen måste också startas med flaggan --testnet</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="282"/> + <location filename="../src/wallet/wallet2.cpp" line="361"/> <source>can't specify daemon host or port more than once</source> <translation>det går inte ange värd eller port för daemonen mer än en gång</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="355"/> + <location filename="../src/wallet/wallet2.cpp" line="480"/> <source>can't specify more than one of --password and --password-file</source> <translation>det går inte att ange fler än en av --password och --password-file</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="368"/> + <location filename="../src/wallet/wallet2.cpp" line="493"/> <source>the password file specified could not be read</source> <translation>det gick inte att läsa angiven lösenordsfil</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="394"/> + <location filename="../src/wallet/wallet2.cpp" line="519"/> <source>Failed to load file </source> <translation>Det gick inte att läsa in fil </translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="205"/> + <location filename="../src/wallet/wallet2.cpp" line="239"/> <source>Wallet password (escape/quote as needed)</source> <translation>Lösenord för plånboken (använd escape-sekvenser eller citattecken efter behov)</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="203"/> + <location filename="../src/wallet/wallet2.cpp" line="236"/> + <source>[<ip>:]<port> socks proxy to use for daemon connections</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="237"/> <source>Enable commands which rely on a trusted daemon</source> <translation type="unfinished">Aktivera kommandon som kräver en betrodd daemon</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="204"/> + <location filename="../src/wallet/wallet2.cpp" line="238"/> <source>Disable commands which rely on a trusted daemon</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="208"/> + <location filename="../src/wallet/wallet2.cpp" line="242"/> <source>Specify username[:password] for daemon RPC client</source> <translation>Ange användarnamn[:lösenord] för RPC-klient till daemonen</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="210"/> + <location filename="../src/wallet/wallet2.cpp" line="243"/> + <source>Enable SSL on daemon RPC connections: enabled|disabled|autodetect</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="247"/> + <source>List of valid fingerprints of allowed RPC servers</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="248"/> + <source>Allow any SSL certificate from the daemon</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="249"/> + <source>Allow user (via --daemon-ssl-ca-certificates) chain certificates</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="251"/> <source>For stagenet. Daemon must also be launched with --stagenet flag</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="212"/> + <location filename="../src/wallet/wallet2.cpp" line="253"/> <source>Set shared ring database path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="223"/> + <location filename="../src/wallet/wallet2.cpp" line="264"/> <source>Number of rounds for the key derivation function</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="224"/> + <location filename="../src/wallet/wallet2.cpp" line="265"/> <source>HW device to use</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="225"/> + <location filename="../src/wallet/wallet2.cpp" line="266"/> <source>HW device wallet derivation path (e.g., SLIP-10)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="313"/> + <location filename="../src/wallet/wallet2.cpp" line="268"/> + <source>Do not use DNS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="269"/> + <source>Do not connect to a daemon, nor use DNS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="353"/> + <source>Invalid argument for </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="397"/> + <source>Enabling --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="397"/> + <source> requires --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="398"/> + <source> or --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="398"/> + <source> or use of a .onion/.i2p domain</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="432"/> <source>--trusted-daemon and --untrusted-daemon are both seen, assuming untrusted</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="323"/> + <location filename="../src/wallet/wallet2.cpp" line="442"/> <source>Daemon is local, assuming trusted</source> <translation type="unfinished">Daemonen är lokal, utgår från att den är betrodd</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="375"/> + <location filename="../src/wallet/wallet2.cpp" line="500"/> <source>no password specified; use --prompt-for-password to prompt for a password</source> <translation>inget lösenord har angivits; använd --prompt-for-password för att fråga efter lösenord</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="377"/> + <location filename="../src/wallet/wallet2.cpp" line="502"/> <source>Enter a new password for the wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="377"/> + <location filename="../src/wallet/wallet2.cpp" line="502"/> <source>Wallet password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="400"/> + <location filename="../src/wallet/wallet2.cpp" line="525"/> <source>Failed to parse JSON</source> <translation>Det gick inte att parsa JSON</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="407"/> + <location filename="../src/wallet/wallet2.cpp" line="532"/> <source>Version %u too new, we can only grok up to %u</source> <translation>Version %u är för ny, vi förstår bara upp till %u</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="423"/> + <location filename="../src/wallet/wallet2.cpp" line="548"/> <source>failed to parse view key secret key</source> <translation>det gick inte att parsa hemlig granskningsnyckel</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="428"/> - <location filename="../src/wallet/wallet2.cpp" line="496"/> - <location filename="../src/wallet/wallet2.cpp" line="539"/> + <location filename="../src/wallet/wallet2.cpp" line="553"/> + <location filename="../src/wallet/wallet2.cpp" line="621"/> + <location filename="../src/wallet/wallet2.cpp" line="666"/> <source>failed to verify view key secret key</source> <translation>det gick inte att verifiera hemlig granskningsnyckel</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="439"/> + <location filename="../src/wallet/wallet2.cpp" line="564"/> <source>failed to parse spend key secret key</source> <translation>det gick inte att parsa spendernyckel hemlig nyckel</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="444"/> - <location filename="../src/wallet/wallet2.cpp" line="506"/> - <location filename="../src/wallet/wallet2.cpp" line="565"/> + <location filename="../src/wallet/wallet2.cpp" line="569"/> + <location filename="../src/wallet/wallet2.cpp" line="631"/> + <location filename="../src/wallet/wallet2.cpp" line="692"/> <source>failed to verify spend key secret key</source> <translation>det gick inte att verifiera spendernyckel hemlig nyckel</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="456"/> + <location filename="../src/wallet/wallet2.cpp" line="581"/> <source>Electrum-style word list failed verification</source> <translation>Det gick inte att verifiera ordlista av Electrum-typ</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="476"/> + <location filename="../src/wallet/wallet2.cpp" line="601"/> <source>At least one of either an Electrum-style word list, private view key, or private spend key must be specified</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="480"/> + <location filename="../src/wallet/wallet2.cpp" line="605"/> <source>Both Electrum-style word list and private key(s) specified</source> <translation>Både ordlista av Electrum-typ och privat nyckel har angivits</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="490"/> + <location filename="../src/wallet/wallet2.cpp" line="615"/> <source>invalid address</source> <translation>ogiltig adress</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="499"/> + <location filename="../src/wallet/wallet2.cpp" line="624"/> <source>view key does not match standard address</source> <translation>granskningsnyckel matchar inte standardadress</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="509"/> + <location filename="../src/wallet/wallet2.cpp" line="634"/> <source>spend key does not match standard address</source> <translation>spendernyckel matchar inte standardadress</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="517"/> + <location filename="../src/wallet/wallet2.cpp" line="642"/> <source>Cannot generate deprecated wallets from JSON</source> <translation>Det går inte att skapa inaktuella plånböcker från JSON</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="551"/> + <location filename="../src/wallet/wallet2.cpp" line="678"/> <source>failed to parse address: </source> <translation>det gick inte att parsa adressen: </translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="557"/> + <location filename="../src/wallet/wallet2.cpp" line="684"/> <source>Address must be specified in order to create watch-only wallet</source> <translation>Adress måste anges för att kunna skapa granskningsplånbok</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="574"/> + <location filename="../src/wallet/wallet2.cpp" line="701"/> <source>failed to generate new wallet: </source> <translation>det gick inte att skapa ny plånbok: </translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="1382"/> + <location filename="../src/wallet/wallet2.cpp" line="1625"/> <source>Password is needed to compute key image for incoming monero</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="1383"/> + <location filename="../src/wallet/wallet2.cpp" line="1626"/> <source>Invalid password: password is needed to compute key image for incoming monero</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="3770"/> - <location filename="../src/wallet/wallet2.cpp" line="4374"/> - <location filename="../src/wallet/wallet2.cpp" line="4926"/> + <location filename="../src/wallet/wallet2.cpp" line="4122"/> + <location filename="../src/wallet/wallet2.cpp" line="4712"/> + <location filename="../src/wallet/wallet2.cpp" line="5308"/> <source>Primary account</source> <translation>Primärt konto</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="10157"/> + <location filename="../src/wallet/wallet2.cpp" line="10885"/> <source>No funds received in this tx.</source> <translation>Inga pengar togs emot i denna tx.</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="10899"/> + <location filename="../src/wallet/wallet2.cpp" line="11645"/> <source>failed to read file </source> <translation>det gick inte att läsa filen </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="141"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="152"/> <source>Set subaddress lookahead sizes to <major>:<minor></source> <translation type="unfinished"></translation> </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="68"/> + <source>Enable SSL on wallet RPC connections: enabled|disabled|autodetect</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="69"/> + <location filename="../src/wallet/wallet2.cpp" line="244"/> + <source>Path to a PEM format private key</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="70"/> + <location filename="../src/wallet/wallet2.cpp" line="245"/> + <source>Path to a PEM format certificate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="71"/> + <location filename="../src/wallet/wallet2.cpp" line="246"/> + <source>Path to file containing concatenated PEM format certificate(s) to replace system CA(s).</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="72"/> + <source>List of certificate fingerprints to allow</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>tools::wallet_rpc_server</name> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="180"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="192"/> <source>Failed to create directory </source> <translation>Det gick inte att skapa mapp </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="182"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="194"/> <source>Failed to create directory %s: %s</source> <translation>Det gick inte att skapa mapp %s: %s</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="193"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="205"/> <source>Cannot specify --</source> <translation>Det går inte att ange --</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="193"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="205"/> <source> and --</source> <translation> och --</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="212"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="224"/> <source>Failed to create file </source> <translation>Det gick inte att skapa fil </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="212"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="224"/> <source>. Check permissions or remove file</source> <translation>. Kontrollera behörigheter eller ta bort filen</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="222"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="234"/> <source>Error writing to file </source> <translation>Ett fel uppstod vid skrivning till fil </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="225"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="237"/> <source>RPC username/password is stored in file </source> <translation>Användarnamn/lösenord för RPC har sparats i fil </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="479"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="613"/> <source>Tag %s is unregistered.</source> <translation>Taggen %s har inte registrerats.</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3081"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="3242"/> <source>Transaction not possible. Available only %s, transaction amount %s = %s + %s (fee)</source> <translation>Transaktion är inte möjlig. Endast tillgängligt %s, transaktionsbelopp %s = %s + %s (avgift)</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3947"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4409"/> <source>This is the RPC monero wallet. It needs to connect to a monero daemon to work correctly.</source> <translation>Detta är RPC-plånboken för monero. Den måste ansluta till en Monero- daemon för att fungera korrekt.</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3788"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4245"/> <source>Can't specify more than one of --wallet-file and --generate-from-json</source> <translation>Det går inte att ange fler än en av --wallet-file och --generate-from-json</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3773"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4230"/> <source>Can't specify more than one of --testnet and --stagenet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3800"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4257"/> <source>Must specify --wallet-file or --generate-from-json or --wallet-dir</source> <translation>Måste ange --wallet-file eller --generate-from-json eller --wallet-dir</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3804"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4261"/> <source>Loading wallet...</source> <translation>Läser in plånbok …</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3838"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3870"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4295"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4327"/> <source>Saving wallet...</source> <translation>Sparar plånbok …</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3840"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3872"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4297"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4329"/> <source>Successfully saved</source> <translation>Plånboken sparades</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3843"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4300"/> <source>Successfully loaded</source> <translation>Plånboken lästes in</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3847"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4304"/> <source>Wallet initialization failed: </source> <translation>Det gick inte att initiera plånbok: </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3853"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4310"/> <source>Failed to initialize wallet RPC server</source> <translation>Det gick inte att initiera RPC-servern för plånbok</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3857"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4314"/> <source>Starting wallet RPC server</source> <translation>Startar RPC-server för plånboken</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3864"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4321"/> <source>Failed to run wallet: </source> <translation>Det gick inte att köra plånboken: </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3867"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4324"/> <source>Stopped wallet RPC server</source> <translation>Stoppade RPC-server för plånboken</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3876"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4333"/> <source>Failed to save wallet: </source> <translation>Det gick inte spara plånboken: </translation> </message> @@ -5469,8 +5790,8 @@ daemon för att fungera korrekt.</translation> <name>wallet_args</name> <message> <location filename="../src/gen_multisig/gen_multisig.cpp" line="168"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="8908"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="3928"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="4385"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="9348"/> <source>Wallet options</source> <translation>Alternativ för plånbok</translation> </message> diff --git a/utils/python-rpc/console b/utils/python-rpc/console new file mode 100755 index 000000000..a4ec6a9ad --- /dev/null +++ b/utils/python-rpc/console @@ -0,0 +1,3 @@ +#!/bin/sh + +env python -i $(dirname $0)/console.py "$@" diff --git a/utils/python-rpc/console.py b/utils/python-rpc/console.py index ab0d9f27f..57a04528b 100755 --- a/utils/python-rpc/console.py +++ b/utils/python-rpc/console.py @@ -4,46 +4,85 @@ from __future__ import print_function import sys import subprocess import socket -from framework import rpc -from framework import wallet -from framework import daemon +import urlparse +import framework.rpc +import framework.daemon +import framework.wallet -USAGE = 'usage: python -i console.py <port>' -try: - port = int(sys.argv[1]) -except: - print(USAGE) - sys.exit(1) - -# check for open port -s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) -s.settimeout(1) -if s.connect_ex(('127.0.0.1', port)) != 0: - print('No wallet or daemon RPC on port ' + str(port)) - sys.exit(1) -s.close() - -# both wallet and daemon have a get_version JSON RPC -rpc = rpc.JSONRPC('{protocol}://{host}:{port}'.format(protocol='http', host='127.0.0.1', port=port)) -get_version = { - 'method': 'get_version', - 'jsonrpc': '2.0', - 'id': '0' -} -try: - res = rpc.send_json_rpc_request(get_version) -except Exception, e: - print('Failed to call version RPC: ' + str(e)) - sys.exit(1) +USAGE = 'usage: python -i console.py [[[scheme]<host>:]<port> [[[scheme]<host>:]<port>...]]' +daemons = [] +wallets = [] +rpcs = [] +for n in range(1, len(sys.argv)): + scheme='http' + host='127.0.0.1' + port=None + try: + try: + port = int(sys.argv[n]) + except: + t = urlparse.urlparse(sys.argv[n], allow_fragments = False) + scheme = t.scheme or scheme + host = t.hostname or host + port = t.port or port + if scheme != 'http' and scheme != 'https': + raise Exception(USAGE) + if port <= 0 or port > 65535: + raise Exception(USAGE) + except Exception, e: + print('Error: ' + str(e)) + raise Exception(USAGE) + + # check for open port + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.settimeout(1) + if s.connect_ex((host, port)) != 0: + raise Exception('No wallet or daemon RPC on port ' + str(port)) + s.close() + + # both wallet and daemon have a get_version JSON RPC + rpc = framework.rpc.JSONRPC('{protocol}://{host}:{port}'.format(protocol=scheme, host=host, port=port)) + get_version = { + 'method': 'get_version', + 'jsonrpc': '2.0', + 'id': '0' + } + try: + res = rpc.send_json_rpc_request(get_version) + except Exception, e: + raise Exception('Failed to call version RPC: ' + str(e)) -if 'version' not in res: - print('Server is not a monero process') - sys.exit(1) + if 'version' not in res: + raise Exception('Server is not a Monero process') -if 'status' in res: - rpc = daemon.Daemon(port=port) + if 'status' in res: + daemons.append(framework.daemon.Daemon(port=port)) + rpcs.append(daemons[-1]) + else: + wallets.append(framework.wallet.Wallet(port=port)) + rpcs.append(wallets[-1]) + +# add tab completion if we can: https://stackoverflow.com/questions/246725 +try: + import readline +except: + pass else: - rpc = wallet.Wallet(port=port) + import rlcompleter + readline.parse_and_bind('tab: complete') + +if len(daemons) == 1: + daemon = daemons[0] +if len(wallets) == 1: + wallet = wallets[0] -print('Connected to %s RPC on port %u' % ('daemon' if 'status' in res else 'wallet', port)) -print('The \'rpc\' object may now be used to use the API') +didx = 0 +widx = 0 +for rpc in rpcs: + if type(rpc) == framework.daemon.Daemon: + var = "daemon" if len(daemons) == 1 else "daemons[" + str(didx) + "]" + didx += 1 + else: + var = "wallet" if len(wallets) == 1 else "wallets[" + str(widx) + "]" + widx += 1 + print('Variable \'%s\' connected to %s RPC on %s:%u' % (var, 'daemon' if type(rpc) == framework.daemon.Daemon else 'wallet', rpc.host ,rpc.port)) diff --git a/utils/python-rpc/framework/daemon.py b/utils/python-rpc/framework/daemon.py index f60fe62db..04fc5b5cf 100644 --- a/utils/python-rpc/framework/daemon.py +++ b/utils/python-rpc/framework/daemon.py @@ -33,24 +33,28 @@ from .rpc import JSONRPC class Daemon(object): def __init__(self, protocol='http', host='127.0.0.1', port=0, idx=0): + self.host = host + self.port = port self.rpc = JSONRPC('{protocol}://{host}:{port}'.format(protocol=protocol, host=host, port=port if port else 18180+idx)) - def getblocktemplate(self, address): + def getblocktemplate(self, address, prev_block = ""): getblocktemplate = { 'method': 'getblocktemplate', 'params': { 'wallet_address': address, - 'reserve_size' : 1 + 'reserve_size' : 1, + 'prev_block' : prev_block, }, 'jsonrpc': '2.0', 'id': '0' } return self.rpc.send_json_rpc_request(getblocktemplate) - def send_raw_transaction(self, tx_as_hex, do_not_relay = False): + def send_raw_transaction(self, tx_as_hex, do_not_relay = False, do_sanity_checks = True): send_raw_transaction = { 'tx_as_hex': tx_as_hex, 'do_not_relay': do_not_relay, + 'do_sanity_checks': do_sanity_checks, } return self.rpc.send_request("/send_raw_transaction", send_raw_transaction) @@ -143,13 +147,15 @@ class Daemon(object): } return self.rpc.send_json_rpc_request(hard_fork_info) - def generateblocks(self, address, blocks=1): + def generateblocks(self, address, blocks=1, prev_block = "", starting_nonce = 0): generateblocks = { 'method': 'generateblocks', 'params': { 'amount_of_blocks' : blocks, 'reserve_size' : 20, - 'wallet_address': address + 'wallet_address': address, + 'prev_block': prev_block, + 'starting_nonce': starting_nonce, }, 'jsonrpc': '2.0', 'id': '0' @@ -217,3 +223,110 @@ class Daemon(object): 'id': '0' } return self.rpc.send_json_rpc_request(get_version) + + def get_bans(self): + get_bans = { + 'method': 'get_bans', + 'params': { + }, + 'jsonrpc': '2.0', + 'id': '0' + } + return self.rpc.send_json_rpc_request(get_bans) + + def set_bans(self, bans = []): + set_bans = { + 'method': 'set_bans', + 'params': { + 'bans': bans + }, + 'jsonrpc': '2.0', + 'id': '0' + } + return self.rpc.send_json_rpc_request(set_bans) + + def get_transactions(self, txs_hashes = [], decode_as_json = False, prune = False, split = False): + get_transactions = { + 'txs_hashes': txs_hashes, + 'decode_as_json': decode_as_json, + 'prune': prune, + 'split': split, + } + return self.rpc.send_request('/get_transactions', get_transactions) + + def get_outs(self, outputs = [], get_txid = False): + get_outs = { + 'outputs': outputs, + 'get_txid': get_txid, + } + return self.rpc.send_request('/get_outs', get_outs) + + def get_coinbase_tx_sum(self, height, count): + get_coinbase_tx_sum = { + 'method': 'get_coinbase_tx_sum', + 'params': { + 'height': height, + 'count': count, + }, + 'jsonrpc': '2.0', + 'id': '0' + } + return self.rpc.send_json_rpc_request(get_coinbase_tx_sum) + + def get_output_distribution(self, amounts = [], from_height = 0, to_height = 0, cumulative = False, binary = False, compress = False): + get_output_distribution = { + 'method': 'get_output_distribution', + 'params': { + 'amounts': amounts, + 'from_height': from_height, + 'to_height': to_height, + 'cumulative': cumulative, + 'binary': binary, + 'compress': compress, + }, + 'jsonrpc': '2.0', + 'id': '0' + } + return self.rpc.send_json_rpc_request(get_output_distribution) + + def get_output_histogram(self, amounts = [], min_count = 0, max_count = 0, unlocked = False, recent_cutoff = 0): + get_output_histogram = { + 'method': 'get_output_histogram', + 'params': { + 'amounts': amounts, + 'min_count': min_count, + 'max_count': max_count, + 'unlocked': unlocked, + 'recent_cutoff': recent_cutoff, + }, + 'jsonrpc': '2.0', + 'id': '0' + } + return self.rpc.send_json_rpc_request(get_output_histogram) + + def set_log_level(self, level): + set_log_level = { + 'level': level, + } + return self.rpc.send_request('/set_log_level', set_log_level) + + def set_log_categories(self, categories = ''): + set_log_categories = { + 'categories': categories, + } + return self.rpc.send_request('/set_log_categories', set_log_categories) + + def get_alt_blocks_hashes(self): + get_alt_blocks_hashes = { + } + return self.rpc.send_request('/get_alt_blocks_hashes', get_alt_blocks_hashes) + + def get_alternate_chains(self): + get_alternate_chains = { + 'method': 'get_alternate_chains', + 'params': { + }, + 'jsonrpc': '2.0', + 'id': '0' + } + return self.rpc.send_json_rpc_request(get_alternate_chains) diff --git a/utils/python-rpc/framework/wallet.py b/utils/python-rpc/framework/wallet.py index ea683b8c5..2e2650f92 100644 --- a/utils/python-rpc/framework/wallet.py +++ b/utils/python-rpc/framework/wallet.py @@ -33,6 +33,8 @@ from .rpc import JSONRPC class Wallet(object): def __init__(self, protocol='http', host='127.0.0.1', port=0, idx=0): + self.host = host + self.port = port self.rpc = JSONRPC('{protocol}://{host}:{port}'.format(protocol=protocol, host=host, port=port if port else 18090+idx)) def make_uniform_destinations(self, address, transfer_amount, transfer_number_of_destinations=1): @@ -89,6 +91,18 @@ class Wallet(object): } return self.rpc.send_json_rpc_request(transfer) + def get_transfer_by_txid(self, txid, account_index = 0): + get_transfer_by_txid = { + 'method': 'get_transfer_by_txid', + 'params': { + 'txid': txid, + 'account_index': account_index, + }, + 'jsonrpc': '2.0', + 'id': '0' + } + return self.rpc.send_json_rpc_request(get_transfer_by_txid) + def get_bulk_payments(self, payment_ids = [], min_block_height = 0): get_bulk_payments = { 'method': 'get_bulk_payments', @@ -101,24 +115,25 @@ class Wallet(object): } return self.rpc.send_json_rpc_request(get_bulk_payments) - def describe_transfer(self, unsigned_txset): + def describe_transfer(self, unsigned_txset = '', multisig_txset = ''): describe_transfer = { 'method': 'describe_transfer', 'params': { 'unsigned_txset': unsigned_txset, + 'multisig_txset': multisig_txset, }, 'jsonrpc': '2.0', 'id': '0' } return self.rpc.send_json_rpc_request(describe_transfer) - def create_wallet(self, index=''): + def create_wallet(self, filename='', password = '', language = 'English'): create_wallet = { 'method': 'create_wallet', 'params': { - 'filename': 'testWallet' + index, - 'password' : '', - 'language' : 'English' + 'filename': filename, + 'password': password, + 'language': language }, 'jsonrpc': '2.0', 'id': '0' @@ -146,17 +161,50 @@ class Wallet(object): } return self.rpc.send_json_rpc_request(sweep_dust) - def sweep_all(self, address): + def sweep_all(self, address = '', account_index = 0, subaddr_indices = [], priority = 0, ring_size = 0, outputs = 1, unlock_time = 0, payment_id = '', get_tx_keys = False, below_amount = 0, do_not_relay = False, get_tx_hex = False, get_tx_metadata = False): sweep_all = { 'method': 'sweep_all', 'params' : { - 'address' : '' + 'address' : address, + 'account_index' : account_index, + 'subaddr_indices' : subaddr_indices, + 'priority' : priority, + 'ring_size' : ring_size, + 'outputs' : outputs, + 'unlock_time' : unlock_time, + 'payment_id' : payment_id, + 'get_tx_keys' : get_tx_keys, + 'below_amount' : below_amount, + 'do_not_relay' : do_not_relay, + 'get_tx_hex' : get_tx_hex, + 'get_tx_metadata' : get_tx_metadata, }, 'jsonrpc': '2.0', 'id': '0' } return self.rpc.send_json_rpc_request(sweep_all) + def sweep_single(self, address = '', priority = 0, ring_size = 0, outputs = 1, unlock_time = 0, payment_id = '', get_tx_keys = False, key_image = "", do_not_relay = False, get_tx_hex = False, get_tx_metadata = False): + sweep_single = { + 'method': 'sweep_single', + 'params' : { + 'address' : address, + 'priority' : priority, + 'ring_size' : ring_size, + 'outputs' : outputs, + 'unlock_time' : unlock_time, + 'payment_id' : payment_id, + 'get_tx_keys' : get_tx_keys, + 'key_image' : key_image, + 'do_not_relay' : do_not_relay, + 'get_tx_hex' : get_tx_hex, + 'get_tx_metadata' : get_tx_metadata, + }, + 'jsonrpc': '2.0', + 'id': '0' + } + return self.rpc.send_json_rpc_request(sweep_single) + def get_address(self, account_index = 0, subaddresses = []): get_address = { 'method': 'get_address', @@ -238,7 +286,7 @@ class Wallet(object): } return self.rpc.send_json_rpc_request(query_key) - def restore_deterministic_wallet(self, seed = '', seed_offset = '', filename = '', restore_height = 0, password = '', language = ''): + def restore_deterministic_wallet(self, seed = '', seed_offset = '', filename = '', restore_height = 0, password = '', language = '', autosave_current = True): restore_deterministic_wallet = { 'method': 'restore_deterministic_wallet', 'params' : { @@ -247,14 +295,15 @@ class Wallet(object): 'seed': seed, 'seed_offset': seed_offset, 'password': password, - 'language': language + 'language': language, + 'autosave_current': autosave_current, }, 'jsonrpc': '2.0', 'id': '0' } return self.rpc.send_json_rpc_request(restore_deterministic_wallet) - def generate_from_keys(self, restore_height = 0, filename = "", password = "", address = "", spendkey = "", viewkey = ""): + def generate_from_keys(self, restore_height = 0, filename = "", password = "", address = "", spendkey = "", viewkey = "", autosave_current = True): generate_from_keys = { 'method': 'generate_from_keys', 'params' : { @@ -264,16 +313,31 @@ class Wallet(object): 'spendkey': spendkey, 'viewkey': viewkey, 'password': password, + 'autosave_current': autosave_current, }, 'jsonrpc': '2.0', 'id': '0' } return self.rpc.send_json_rpc_request(generate_from_keys) - def close_wallet(self): + def open_wallet(self, filename, password='', autosave_current = True): + open_wallet = { + 'method': 'open_wallet', + 'params' : { + 'filename': filename, + 'password': password, + 'autosave_current': autosave_current, + }, + 'jsonrpc': '2.0', + 'id': '0' + } + return self.rpc.send_json_rpc_request(open_wallet) + + def close_wallet(self, autosave_current = True): close_wallet = { 'method': 'close_wallet', 'params' : { + 'autosave_current': autosave_current }, 'jsonrpc': '2.0', 'id': '0' @@ -591,6 +655,101 @@ class Wallet(object): } return self.rpc.send_json_rpc_request(verify) + def get_height(self): + get_height = { + 'method': 'get_height', + 'jsonrpc': '2.0', + 'id': '0' + } + return self.rpc.send_json_rpc_request(get_height) + + def relay_tx(self, hex_): + relay_tx = { + 'method': 'relay_tx', + 'params': { + 'hex': hex_, + }, + 'jsonrpc': '2.0', + 'id': '0' + } + return self.rpc.send_json_rpc_request(relay_tx) + + def get_languages(self): + get_languages = { + 'method': 'get_languages', + 'params': { + }, + 'jsonrpc': '2.0', + 'id': '0' + } + return self.rpc.send_json_rpc_request(get_languages) + + def export_outputs(self): + export_outputs = { + 'method': 'export_outputs', + 'params': { + }, + 'jsonrpc': '2.0', + 'id': '0' + } + return self.rpc.send_json_rpc_request(export_outputs) + + def import_outputs(self, outputs_data_hex): + import_outputs = { + 'method': 'import_outputs', + 'params': { + 'outputs_data_hex': outputs_data_hex + }, + 'jsonrpc': '2.0', + 'id': '0' + } + return self.rpc.send_json_rpc_request(import_outputs) + + def export_key_images(self, all_ = False): + export_key_images = { + 'method': 'export_key_images', + 'params': { + 'all': all_ + }, + 'jsonrpc': '2.0', + 'id': '0' + } + return self.rpc.send_json_rpc_request(export_key_images) + + def import_key_images(self, signed_key_images, offset = 0): + import_key_images = { + 'method': 'import_key_images', + 'params': { + 'offset': offset, + 'signed_key_images': signed_key_images, + }, + 'jsonrpc': '2.0', + 'id': '0' + } + return self.rpc.send_json_rpc_request(import_key_images) + + def set_log_level(self, level): + set_log_level = { + 'method': 'set_log_level', + 'params': { + 'level': level, + }, + 'jsonrpc': '2.0', + 'id': '0' + } + return self.rpc.send_json_rpc_request(set_log_level) + + def set_log_categories(self, categories): + set_log_categories = { + 'method': 'set_log_categories', + 'params': { + 'categories': categories, + }, + 'jsonrpc': '2.0', + 'id': '0' + } + return self.rpc.send_json_rpc_request(set_log_categories) + def get_version(self): get_version = { 'method': 'get_version', |