diff options
107 files changed, 14184 insertions, 4954 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index f0be28845..7697cd1c4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -298,7 +298,7 @@ if(SANITIZE) endif() # Set default blockchain storage location: -# memory was the default in Cryptonote before Monero implimented LMDB, it still works but is unneccessary. +# memory was the default in Cryptonote before Monero implemented LMDB, it still works but is unnecessary. # set(DATABASE memory) set(DATABASE lmdb) @@ -412,6 +412,8 @@ if(STATIC AND NOT IOS) endif() endif() +find_package(PCSC) + add_definition_if_library_exists(c memset_s "string.h" HAVE_MEMSET_S) add_definition_if_library_exists(c explicit_bzero "strings.h" HAVE_EXPLICIT_BZERO) add_definition_if_function_found(strptime HAVE_STRPTIME) @@ -456,6 +458,13 @@ endif() include_directories(${LIBUNWIND_INCLUDE}) link_directories(${LIBUNWIND_LIBRARY_DIRS}) +# Final setup for libpcsc +if (PCSC_FOUND) + add_definitions(-DHAVE_PCSC) + include_directories(${PCSC_INCLUDE_DIR}) + link_directories(${LIBPCSC_LIBRARY_DIRS}) +endif() + if(MSVC) add_definitions("/bigobj /MP /W3 /GS- /D_CRT_SECURE_NO_WARNINGS /wd4996 /wd4345 /D_WIN32_WINNT=0x0600 /DWIN32_LEAN_AND_MEAN /DGTEST_HAS_TR1_TUPLE=0 /FIinline_c.h /D__SSE4_1__") # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Dinline=__inline") diff --git a/README.i18n.md b/README.i18n.md index 65f87cda2..b0379bfb3 100644 --- a/README.i18n.md +++ b/README.i18n.md @@ -1,7 +1,7 @@ Monero daemon internationalization ================================== -The Monero command line tools can be translated in various languages. +The Monero command line tools can be translated in various languages. If you wish to contribute and need help/support, contact the [Monero Localization Workgroup on Taiga](https://taiga.getmonero.org/project/erciccione-monero-localization/) or come chat on `#monero-translations` (Freenode/IRC, riot/matrix, MatterMost) In order to use the same translation workflow as the [Monero Core GUI](https://github.com/monero-project/monero-core), they use Qt Linguist translation files. However, to avoid the dependencies on Qt this normally implies, they use a custom loader to read those files at runtime. @@ -166,7 +166,7 @@ library archives (`.a`). | Dep | Min. version | Vendored | Debian/Ubuntu pkg | Arch pkg | Fedora | Optional | Purpose | | ------------ | ------------- | -------- | ------------------ | ------------ | ----------------- | -------- | -------------- | | GCC | 4.7.3 | NO | `build-essential` | `base-devel` | `gcc` | NO | | -| CMake | 3.0.0 | NO | `cmake` | `cmake` | `cmake` | NO | | +| CMake | 3.2.0 | NO | `cmake` | `cmake` | `cmake` | NO | | | pkg-config | any | NO | `pkg-config` | `base-devel` | `pkgconf` | NO | | | Boost | 1.58 | NO | `libboost-all-dev` | `boost` | `boost-devel` | NO | C++ libraries | | OpenSSL | basically any | NO | `libssl-dev` | `openssl` | `openssl-devel` | NO | sha256 sum | diff --git a/cmake/FindPCSC.cmake b/cmake/FindPCSC.cmake new file mode 100644 index 000000000..8dd9d0e76 --- /dev/null +++ b/cmake/FindPCSC.cmake @@ -0,0 +1,44 @@ +# - Find PCSC +# Find the native PCSC includes and library +# +# PCSC_INCLUDE_DIR - where to find winscard.h, wintypes.h, etc. +# PCSC_LIBRARIES - List of libraries when using PCSC. +# PCSC_FOUND - True if PCSC found. + + +IF (PCSC_INCLUDE_DIR AND PCSC_LIBRARIES) + # Already in cache, be silent + SET(PCSC_FIND_QUIETLY TRUE) +ENDIF (PCSC_INCLUDE_DIR AND PCSC_LIBRARIES) + +IF (NOT WIN32) + FIND_PACKAGE(PkgConfig) + PKG_CHECK_MODULES(PC_PCSC libpcsclite) +ENDIF (NOT WIN32) + +FIND_PATH(PCSC_INCLUDE_DIR winscard.h + HINTS + /usr/include/PCSC + ${PC_PCSC_INCLUDEDIR} + ${PC_PCSC_INCLUDE_DIRS} + PATH_SUFFIXES PCSC + ) + +FIND_LIBRARY(PCSC_LIBRARY NAMES pcsclite libpcsclite WinSCard PCSC + HINTS + ${PC_PCSC_LIBDIR} + ${PC_PCSC_LIBRARY_DIRS} + ) + +# handle the QUIETLY and REQUIRED arguments and set PCSC_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(PCSC DEFAULT_MSG PCSC_LIBRARY PCSC_INCLUDE_DIR) + +IF(PCSC_FOUND) + SET( PCSC_LIBRARIES ${PCSC_LIBRARY} ) +ELSE(PCSC_FOUND) + SET( PCSC_LIBRARIES ) +ENDIF(PCSC_FOUND) + +MARK_AS_ADVANCED( PCSC_LIBRARY PCSC_INCLUDE_DIR ) diff --git a/contrib/epee/include/misc_os_dependent.h b/contrib/epee/include/misc_os_dependent.h index 99690b301..ffe575501 100644 --- a/contrib/epee/include/misc_os_dependent.h +++ b/contrib/epee/include/misc_os_dependent.h @@ -75,13 +75,13 @@ namespace misc_utils clock_get_time(cclock, &mts); mach_port_deallocate(mach_task_self(), cclock); - return (mts.tv_sec * 1000000000) + (mts.tv_nsec); + return ((uint64_t)mts.tv_sec * 1000000000) + (mts.tv_nsec); #else struct timespec ts; if(clock_gettime(CLOCK_MONOTONIC, &ts) != 0) { return 0; } - return (ts.tv_sec * 1000000000) + (ts.tv_nsec); + return ((uint64_t)ts.tv_sec * 1000000000) + (ts.tv_nsec); #endif } diff --git a/contrib/epee/src/memwipe.c b/contrib/epee/src/memwipe.c index 9a83e67e8..e3a2f76c8 100644 --- a/contrib/epee/src/memwipe.c +++ b/contrib/epee/src/memwipe.c @@ -31,6 +31,7 @@ #define __STDC_WANT_LIB_EXT1__ 1 #include <string.h> #include <stdlib.h> +#include <stdio.h> #include <unistd.h> #ifdef HAVE_EXPLICIT_BZERO #include <strings.h> diff --git a/contrib/epee/src/wipeable_string.cpp b/contrib/epee/src/wipeable_string.cpp index cc43b8988..6ed4ee8a2 100644 --- a/contrib/epee/src/wipeable_string.cpp +++ b/contrib/epee/src/wipeable_string.cpp @@ -76,7 +76,8 @@ wipeable_string::~wipeable_string() void wipeable_string::wipe() { - memwipe(buffer.data(), buffer.size() * sizeof(char)); + if (!buffer.empty()) + memwipe(buffer.data(), buffer.size() * sizeof(char)); } void wipeable_string::grow(size_t sz, size_t reserved) @@ -93,11 +94,13 @@ void wipeable_string::grow(size_t sz, size_t reserved) size_t old_sz = buffer.size(); std::unique_ptr<char[]> tmp{new char[old_sz]}; memcpy(tmp.get(), buffer.data(), old_sz * sizeof(char)); - memwipe(buffer.data(), old_sz * sizeof(char)); + if (old_sz > 0) + memwipe(buffer.data(), old_sz * sizeof(char)); buffer.reserve(reserved); buffer.resize(sz); memcpy(buffer.data(), tmp.get(), old_sz * sizeof(char)); - memwipe(tmp.get(), old_sz * sizeof(char)); + if (old_sz > 0) + memwipe(tmp.get(), old_sz * sizeof(char)); } void wipeable_string::push_back(char c) diff --git a/external/db_drivers/liblmdb/CMakeLists.txt b/external/db_drivers/liblmdb/CMakeLists.txt index 3ca489a4a..cb2501ee5 100644 --- a/external/db_drivers/liblmdb/CMakeLists.txt +++ b/external/db_drivers/liblmdb/CMakeLists.txt @@ -46,10 +46,6 @@ add_library(lmdb target_link_libraries(lmdb PRIVATE ${CMAKE_THREAD_LIBS_INIT}) -if(WIN32) - target_link_libraries(lmdb - -lntdll) -endif() if(${ARCH_WIDTH} EQUAL 32) target_compile_definitions(lmdb PUBLIC -DMDB_VL32) diff --git a/external/db_drivers/liblmdb/Makefile b/external/db_drivers/liblmdb/Makefile index 42a5f034a..186168038 100644 --- a/external/db_drivers/liblmdb/Makefile +++ b/external/db_drivers/liblmdb/Makefile @@ -24,8 +24,8 @@ W = -W -Wall -Wno-unused-parameter -Wbad-function-cast -Wuninitialized THREADS = -pthread OPT = -O2 -g CFLAGS = $(THREADS) $(OPT) $(W) $(XCFLAGS) -LDLIBS = # -lntdll # Windows needs ntdll -SOLIBS = # -lntdll +LDLIBS = +SOLIBS = prefix = /usr/local exec_prefix = $(prefix) bindir = $(exec_prefix)/bin diff --git a/external/db_drivers/liblmdb/mdb.c b/external/db_drivers/liblmdb/mdb.c index bb0420453..dde428c43 100644 --- a/external/db_drivers/liblmdb/mdb.c +++ b/external/db_drivers/liblmdb/mdb.c @@ -47,29 +47,35 @@ * the full size. These APIs are defined in <wdm.h> and <ntifs.h> * but those headers are meant for driver-level development and * conflict with the regular user-level headers, so we explicitly - * declare them here. Using these APIs also means we must link to - * ntdll.dll, which is not linked by default in user code. + * declare them here. We get pointers to these functions from + * NTDLL.DLL at runtime, to avoid buildtime dependencies on any + * NTDLL import libraries. */ -NTSTATUS WINAPI -NtCreateSection(OUT PHANDLE sh, IN ACCESS_MASK acc, +typedef NTSTATUS WINAPI (NtCreateSectionFunc) + (OUT PHANDLE sh, IN ACCESS_MASK acc, IN void * oa OPTIONAL, IN PLARGE_INTEGER ms OPTIONAL, IN ULONG pp, IN ULONG aa, IN HANDLE fh OPTIONAL); +static NtCreateSectionFunc *NtCreateSection; + typedef enum _SECTION_INHERIT { ViewShare = 1, ViewUnmap = 2 } SECTION_INHERIT; -NTSTATUS WINAPI -NtMapViewOfSection(IN PHANDLE sh, IN HANDLE ph, +typedef NTSTATUS WINAPI (NtMapViewOfSectionFunc) + (IN PHANDLE sh, IN HANDLE ph, IN OUT PVOID *addr, IN ULONG_PTR zbits, IN SIZE_T cs, IN OUT PLARGE_INTEGER off OPTIONAL, IN OUT PSIZE_T vs, IN SECTION_INHERIT ih, IN ULONG at, IN ULONG pp); -NTSTATUS WINAPI -NtClose(HANDLE h); +static NtMapViewOfSectionFunc *NtMapViewOfSection; + +typedef NTSTATUS WINAPI (NtCloseFunc)(HANDLE h); + +static NtCloseFunc *NtClose; /** getpid() returns int; MinGW defines pid_t but MinGW64 typedefs it * as int64 which is wrong. MSVC doesn't define it at all, so just @@ -4397,6 +4403,21 @@ mdb_env_open2(MDB_env *env, int prev) env->me_pidquery = MDB_PROCESS_QUERY_LIMITED_INFORMATION; else env->me_pidquery = PROCESS_QUERY_INFORMATION; + /* Grab functions we need from NTDLL */ + if (!NtCreateSection) { + HMODULE h = GetModuleHandle("NTDLL.DLL"); + if (!h) + return MDB_PANIC; + NtClose = (NtCloseFunc *)GetProcAddress(h, "NtClose"); + if (!NtClose) + return MDB_PANIC; + NtMapViewOfSection = (NtMapViewOfSectionFunc *)GetProcAddress(h, "NtMapViewOfSection"); + if (!NtMapViewOfSection) + return MDB_PANIC; + NtCreateSection = (NtCreateSectionFunc *)GetProcAddress(h, "NtCreateSection"); + if (!NtCreateSection) + return MDB_PANIC; + } #endif /* _WIN32 */ #ifdef BROKEN_FDATASYNC diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 357495960..3b71c38cd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -143,3 +143,5 @@ endif() if(PER_BLOCK_CHECKPOINT) add_subdirectory(blocks) endif() + +add_subdirectory(device) diff --git a/src/blockchain_db/lmdb/db_lmdb.cpp b/src/blockchain_db/lmdb/db_lmdb.cpp index fd8aad31d..51dcb49a8 100644 --- a/src/blockchain_db/lmdb/db_lmdb.cpp +++ b/src/blockchain_db/lmdb/db_lmdb.cpp @@ -472,7 +472,7 @@ void BlockchainLMDB::do_resize(uint64_t increase_size) // add 1Gb per resize, instead of doing a percentage increase uint64_t new_mapsize = (double) mei.me_mapsize + add_size; - // If given, use increase_size intead of above way of resizing. + // If given, use increase_size instead of above way of resizing. // This is currently used for increasing by an estimated size at start of new // batch txn. if (increase_size > 0) @@ -2440,7 +2440,7 @@ bool BlockchainLMDB::for_all_key_images(std::function<bool(const crypto::key_ima RCURSOR(spent_keys); MDB_val k, v; - bool ret = true; + bool fret = true; k = zerokval; MDB_cursor_op op = MDB_FIRST; @@ -2454,14 +2454,14 @@ bool BlockchainLMDB::for_all_key_images(std::function<bool(const crypto::key_ima throw0(DB_ERROR("Failed to enumerate key images")); const crypto::key_image k_image = *(const crypto::key_image*)v.mv_data; if (!f(k_image)) { - ret = false; + fret = false; break; } } TXN_POSTFIX_RDONLY(); - return ret; + return fret; } bool BlockchainLMDB::for_blocks_range(const uint64_t& h1, const uint64_t& h2, std::function<bool(uint64_t, const crypto::hash&, const cryptonote::block&)> f) const @@ -2474,7 +2474,7 @@ bool BlockchainLMDB::for_blocks_range(const uint64_t& h1, const uint64_t& h2, st MDB_val k; MDB_val v; - bool ret = true; + bool fret = true; MDB_cursor_op op; if (h1) @@ -2503,7 +2503,7 @@ bool BlockchainLMDB::for_blocks_range(const uint64_t& h1, const uint64_t& h2, st if (!get_block_hash(b, hash)) throw0(DB_ERROR("Failed to get block hash from blob retrieved from the db")); if (!f(height, hash, b)) { - ret = false; + fret = false; break; } if (height >= h2) @@ -2512,7 +2512,7 @@ bool BlockchainLMDB::for_blocks_range(const uint64_t& h1, const uint64_t& h2, st TXN_POSTFIX_RDONLY(); - return ret; + return fret; } bool BlockchainLMDB::for_all_transactions(std::function<bool(const crypto::hash&, const cryptonote::transaction&)> f) const @@ -2526,7 +2526,7 @@ bool BlockchainLMDB::for_all_transactions(std::function<bool(const crypto::hash& MDB_val k; MDB_val v; - bool ret = true; + bool fret = true; MDB_cursor_op op = MDB_FIRST; while (1) @@ -2553,14 +2553,14 @@ bool BlockchainLMDB::for_all_transactions(std::function<bool(const crypto::hash& if (!parse_and_validate_tx_from_blob(bd, tx)) throw0(DB_ERROR("Failed to parse tx from blob retrieved from the db")); if (!f(hash, tx)) { - ret = false; + fret = false; break; } } TXN_POSTFIX_RDONLY(); - return ret; + return fret; } bool BlockchainLMDB::for_all_outputs(std::function<bool(uint64_t amount, const crypto::hash &tx_hash, size_t tx_idx)> f) const @@ -2573,7 +2573,7 @@ bool BlockchainLMDB::for_all_outputs(std::function<bool(uint64_t amount, const c MDB_val k; MDB_val v; - bool ret = true; + bool fret = true; MDB_cursor_op op = MDB_FIRST; while (1) @@ -2588,14 +2588,14 @@ bool BlockchainLMDB::for_all_outputs(std::function<bool(uint64_t amount, const c outkey *ok = (outkey *)v.mv_data; tx_out_index toi = get_output_tx_and_index_from_global(ok->output_id); if (!f(amount, toi.first, toi.second)) { - ret = false; + fret = false; break; } } TXN_POSTFIX_RDONLY(); - return ret; + return fret; } // batch_num_blocks: (optional) Used to check if resize needed before batch transaction starts. diff --git a/src/blockchain_utilities/blockchain_export.cpp b/src/blockchain_utilities/blockchain_export.cpp index fcf020057..b3e11605d 100644 --- a/src/blockchain_utilities/blockchain_export.cpp +++ b/src/blockchain_utilities/blockchain_export.cpp @@ -59,7 +59,6 @@ int main(int argc, char* argv[]) tools::on_startup(); boost::filesystem::path default_data_path {tools::get_default_data_dir()}; - boost::filesystem::path default_testnet_data_path {default_data_path / "testnet"}; boost::filesystem::path output_file_path; po::options_description desc_cmd_only("Command line options"); @@ -73,8 +72,7 @@ int main(int argc, char* argv[]) const command_line::arg_descriptor<bool> arg_blocks_dat = {"blocksdat", "Output in blocks.dat format", blocks_dat}; - command_line::add_arg(desc_cmd_sett, cryptonote::arg_data_dir, default_data_path.string()); - command_line::add_arg(desc_cmd_sett, cryptonote::arg_testnet_data_dir, default_testnet_data_path.string()); + command_line::add_arg(desc_cmd_sett, cryptonote::arg_data_dir); command_line::add_arg(desc_cmd_sett, arg_output_file); command_line::add_arg(desc_cmd_sett, cryptonote::arg_testnet_on); command_line::add_arg(desc_cmd_sett, arg_log_level); @@ -118,8 +116,7 @@ int main(int argc, char* argv[]) std::string m_config_folder; - auto data_dir_arg = opt_testnet ? cryptonote::arg_testnet_data_dir : cryptonote::arg_data_dir; - m_config_folder = command_line::get_arg(vm, data_dir_arg); + m_config_folder = command_line::get_arg(vm, cryptonote::arg_data_dir); std::string db_type = command_line::get_arg(vm, arg_database); if (!cryptonote::blockchain_valid_db_type(db_type)) diff --git a/src/blockchain_utilities/blockchain_import.cpp b/src/blockchain_utilities/blockchain_import.cpp index ce08022fc..6195e47e7 100644 --- a/src/blockchain_utilities/blockchain_import.cpp +++ b/src/blockchain_utilities/blockchain_import.cpp @@ -671,8 +671,7 @@ int main(int argc, char* argv[]) } opt_testnet = command_line::get_arg(vm, cryptonote::arg_testnet_on); - auto data_dir_arg = opt_testnet ? cryptonote::arg_testnet_data_dir : cryptonote::arg_data_dir; - m_config_folder = command_line::get_arg(vm, data_dir_arg); + m_config_folder = command_line::get_arg(vm, cryptonote::arg_data_dir); db_arg_str = command_line::get_arg(vm, arg_database); mlog_configure(mlog_get_default_log_path("monero-blockchain-import.log"), true); diff --git a/src/common/command_line.h b/src/common/command_line.h index 7b183d86b..f67efcf86 100644 --- a/src/common/command_line.h +++ b/src/common/command_line.h @@ -30,7 +30,9 @@ #pragma once +#include <functional> #include <iostream> +#include <sstream> #include <type_traits> #include <boost/program_options/parsers.hpp> @@ -46,7 +48,7 @@ namespace command_line //! \return True if `str` is `is_iequal("n" || "no" || `tr("no"))`. bool is_no(const std::string& str); - template<typename T, bool required = false> + template<typename T, bool required = false, bool dependent = false> struct arg_descriptor; template<typename T> @@ -81,6 +83,22 @@ namespace command_line }; template<typename T> + struct arg_descriptor<T, false, true> + { + typedef T value_type; + + const char* name; + const char* description; + + T default_value; + + const arg_descriptor<bool, false>& ref; + std::function<T(bool, bool, T)> depf; + + bool not_use_default; + }; + + template<typename T> boost::program_options::typed_value<T, char>* make_semantic(const arg_descriptor<T, true>& /*arg*/) { return boost::program_options::value<T>()->required(); @@ -96,6 +114,20 @@ namespace command_line } template<typename T> + boost::program_options::typed_value<T, char>* make_semantic(const arg_descriptor<T, false, true>& arg) + { + auto semantic = boost::program_options::value<T>(); + if (!arg.not_use_default) { + std::ostringstream format; + format << arg.depf(false, true, arg.default_value) << ", " + << arg.depf(true, true, arg.default_value) << " if '" + << arg.ref.name << "'"; + semantic->default_value(arg.depf(arg.ref.default_value, true, arg.default_value), format.str()); + } + return semantic; + } + + template<typename T> boost::program_options::typed_value<T, char>* make_semantic(const arg_descriptor<T, false>& arg, const T& def) { auto semantic = boost::program_options::value<T>(); @@ -112,8 +144,8 @@ namespace command_line return semantic; } - template<typename T, bool required> - void add_arg(boost::program_options::options_description& description, const arg_descriptor<T, required>& arg, bool unique = true) + template<typename T, bool required, bool dependent> + void add_arg(boost::program_options::options_description& description, const arg_descriptor<T, required, dependent>& arg, bool unique = true) { if (0 != description.find_nothrow(arg.name, false)) { @@ -189,12 +221,17 @@ namespace command_line return !value.empty(); } - template<typename T, bool required> - bool is_arg_defaulted(const boost::program_options::variables_map& vm, const arg_descriptor<T, required>& arg) + template<typename T, bool required, bool dependent> + bool is_arg_defaulted(const boost::program_options::variables_map& vm, const arg_descriptor<T, required, dependent>& arg) { return vm[arg.name].defaulted(); } + template<typename T, bool required> + T get_arg(const boost::program_options::variables_map& vm, const arg_descriptor<T, required, true>& arg) + { + return arg.depf(get_arg(vm, arg.ref), is_arg_defaulted(vm, arg), vm[arg.name].template as<T>()); + } template<typename T, bool required> T get_arg(const boost::program_options::variables_map& vm, const arg_descriptor<T, required>& arg) diff --git a/src/common/password.cpp b/src/common/password.cpp index ef026c979..9336a14fc 100644 --- a/src/common/password.cpp +++ b/src/common/password.cpp @@ -42,12 +42,10 @@ #include <unistd.h> #endif -#ifdef HAVE_READLINE - #include "readline_buffer.h" -#endif - #include "memwipe.h" +#define EOT 0x4 + namespace { #if defined(_WIN32) @@ -134,7 +132,7 @@ namespace while (aPass.size() < tools::password_container::max_password_size) { int ch = getch(); - if (EOF == ch) + if (EOF == ch || ch == EOT) { return false; } @@ -229,13 +227,20 @@ namespace tools m_password.clear(); } + std::atomic<bool> password_container::is_prompting(false); + boost::optional<password_container> password_container::prompt(const bool verify, const char *message) { + is_prompting = true; password_container pass1{}; password_container pass2{}; if (is_cin_tty() ? read_from_tty(verify, message, pass1.m_password, pass2.m_password) : read_from_file(pass1.m_password)) + { + is_prompting = false; return {std::move(pass1)}; + } + is_prompting = false; return boost::none; } diff --git a/src/common/password.h b/src/common/password.h index 7c29effe4..61937b93a 100644 --- a/src/common/password.h +++ b/src/common/password.h @@ -31,6 +31,7 @@ #pragma once #include <string> +#include <atomic> #include <boost/optional/optional.hpp> #include "wipeable_string.h" @@ -49,6 +50,7 @@ namespace tools //! \return A password from stdin TTY prompt or `std::cin` pipe. static boost::optional<password_container> prompt(bool verify, const char *mesage = "Password"); + static std::atomic<bool> is_prompting; password_container(const password_container&) = delete; password_container(password_container&& rhs) = default; diff --git a/src/common/util.h b/src/common/util.h index 5afb42c97..d3ba47a4f 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -153,8 +153,12 @@ namespace tools } return r; #else + static struct sigaction sa; + memset(&sa, 0, sizeof(struct sigaction)); + sa.sa_handler = posix_handler; + sa.sa_flags = 0; /* Only blocks SIGINT, SIGTERM and SIGPIPE */ - signal(SIGINT, posix_handler); + sigaction(SIGINT, &sa, NULL); signal(SIGTERM, posix_handler); signal(SIGPIPE, SIG_IGN); m_handler = t; diff --git a/src/common/varint.h b/src/common/varint.h index 262bd1360..151d13dbf 100644 --- a/src/common/varint.h +++ b/src/common/varint.h @@ -45,7 +45,7 @@ * is as follows: Strip the msb of each byte, then from left to right, * read in what remains, placing it in reverse, into the buffer. Thus, * the following bit stream: 0xff02 would return 0x027f. 0xff turns - * into 0x7f, is placed on the beggining of the buffer, then 0x02 is + * into 0x7f, is placed on the beginning of the buffer, then 0x02 is * unchanged, since its msb is not set, and placed at the end of the * buffer. */ @@ -108,7 +108,7 @@ namespace tools { return EVARINT_REPRESENT; } - write |= static_cast<T>(byte & 0x7f) << shift; /* Does the actualy placing into write, stripping the first bit */ + write |= static_cast<T>(byte & 0x7f) << shift; /* Does the actually placing into write, stripping the first bit */ /* If there is no next */ if ((byte & 0x80) == 0) { diff --git a/src/crypto/CMakeLists.txt b/src/crypto/CMakeLists.txt index 71dcedcab..35c099697 100644 --- a/src/crypto/CMakeLists.txt +++ b/src/crypto/CMakeLists.txt @@ -33,6 +33,7 @@ set(crypto_sources crypto-ops-data.c crypto-ops.c crypto.cpp + crypto_device.cpp groestl.c hash-extra-blake.c hash-extra-groestl.c @@ -77,6 +78,7 @@ monero_add_library(cncrypto target_link_libraries(cncrypto PUBLIC epee + device ${Boost_SYSTEM_LIBRARY} PRIVATE ${EXTRA_LIBRARIES}) diff --git a/src/crypto/chacha.h b/src/crypto/chacha.h index f74d0c352..b45c3d7c7 100644 --- a/src/crypto/chacha.h +++ b/src/crypto/chacha.h @@ -69,10 +69,10 @@ namespace crypto { chacha20(data, length, key.data(), reinterpret_cast<const uint8_t*>(&iv), cipher); } - inline void generate_chacha_key(const void *data, size_t size, chacha_key& key) { + inline void generate_chacha_key(const void *data, size_t size, chacha_key& key, bool prehashed=false) { static_assert(sizeof(chacha_key) <= sizeof(hash), "Size of hash must be at least that of chacha_key"); tools::scrubbed_arr<char, HASH_SIZE> pwd_hash; - crypto::cn_slow_hash(data, size, pwd_hash.data()); + crypto::cn_slow_hash_pre(data, size, pwd_hash.data(), prehashed); memcpy(&key, pwd_hash.data(), sizeof(key)); } diff --git a/src/crypto/crypto.cpp b/src/crypto/crypto.cpp index d9b8b6787..0c70b9eeb 100644 --- a/src/crypto/crypto.cpp +++ b/src/crypto/crypto.cpp @@ -107,7 +107,7 @@ namespace crypto { /* * generate public and secret keys from a random 256-bit integer - * TODO: allow specifiying random value (for wallet recovery) + * TODO: allow specifying random value (for wallet recovery) * */ secret_key crypto_ops::generate_keys(public_key &pub, secret_key &sec, const secret_key& recovery_key, bool recover) { @@ -436,7 +436,7 @@ namespace crypto { return sc_isnonzero(&c2) == 0; } - static void hash_to_ec(const public_key &key, ge_p3 &res) { + void crypto_ops::hash_to_ec(const public_key &key, ge_p3 &res) { hash h; ge_p2 point; ge_p1p1 point2; diff --git a/src/crypto/crypto.h b/src/crypto/crypto.h index 81ebfb9e2..75b333473 100644 --- a/src/crypto/crypto.h +++ b/src/crypto/crypto.h @@ -46,6 +46,10 @@ #include "hex.h" #include "span.h" #include "hash.h" +#include "device/device_declare.hpp" +extern "C" { + #include "crypto-ops.h" +} namespace crypto { @@ -113,6 +117,9 @@ namespace crypto { void operator=(const crypto_ops &); ~crypto_ops(); + static void hash_to_ec(const public_key &key, ge_p3 &res) ; + friend void hash_to_ec(const public_key &key, ge_p3 &res) ; + static secret_key generate_keys(public_key &pub, secret_key &sec, const secret_key& recovery_key = secret_key(), bool recover = false); friend secret_key generate_keys(public_key &pub, secret_key &sec, const secret_key& recovery_key, bool recover); static bool check_key(const public_key &); @@ -149,6 +156,17 @@ namespace crypto { const public_key *const *, std::size_t, const signature *); }; + secret_key generate_keys(public_key &pub, secret_key &sec, const secret_key& recovery_key, bool recover, hw::device &hwdev); + secret_key generate_keys(public_key &pub, secret_key &sec, hw::device &hwdev); + bool secret_key_to_public_key(const secret_key &sec, public_key &pub, hw::device &hwdev); + bool generate_key_derivation(const public_key &key1, const secret_key &key2, key_derivation &derivation, hw::device &hwdev); + void derivation_to_scalar(const key_derivation &derivation, size_t output_index, ec_scalar &res, hw::device &hwdev) ; + bool derive_public_key(const key_derivation &derivation, size_t output_index, const public_key &base, public_key &derived_key, hw::device &hwdev); + void derive_secret_key(const key_derivation &derivation, size_t output_index, const secret_key &base, secret_key &derived_key, hw::device &hwdev); + bool derive_subaddress_public_key(const public_key &out_key, const key_derivation &derivation, std::size_t output_index, public_key &derived_key, hw::device &hwdev); + void generate_key_image(const public_key &pub, const secret_key &sec, key_image &image, hw::device &hwdev); + + /* Generate N random bytes */ inline void rand(size_t N, uint8_t *bytes) { @@ -166,6 +184,9 @@ namespace crypto { return res; } + inline void hash_to_ec(const public_key &key, ge_p3 &res) { + crypto_ops::hash_to_ec(key,res); + } /* 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/crypto/crypto_device.cpp b/src/crypto/crypto_device.cpp new file mode 100644 index 000000000..5536857c8 --- /dev/null +++ b/src/crypto/crypto_device.cpp @@ -0,0 +1,79 @@ +// Copyright (c) 2014-2018, 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 "crypto.h" +#include "device/device.hpp" +#include "device/log.hpp" + +namespace crypto { + + secret_key generate_keys(public_key &pub, secret_key &sec, const secret_key& recovery_key, bool recover, hw::device &hwdev) { + secret_key rng; + hwdev.generate_keys(pub, sec, recovery_key, recover, rng); + return rng; + } + + secret_key generate_keys(public_key &pub, secret_key &sec, hw::device &hwdev) { + secret_key rng; + hwdev.generate_keys(pub, sec, secret_key(), false, rng); + return rng; + } + + + bool secret_key_to_public_key(const secret_key &sec, public_key &pub, hw::device &hwdev) { + return hwdev.secret_key_to_public_key(sec, pub); + } + + bool generate_key_derivation(const public_key &key1, const secret_key &key2, key_derivation &derivation, hw::device &hwdev) { + return hwdev.generate_key_derivation(key1, key2, derivation); + } + + void derivation_to_scalar(const key_derivation &derivation, size_t output_index, ec_scalar &res, hw::device &hwdev) { + hwdev.derivation_to_scalar(derivation, output_index, res); + } + + bool derive_public_key(const key_derivation &derivation, size_t output_index, + const public_key &base, public_key &derived_key, hw::device &hwdev) { + return hwdev.derive_public_key(derivation, output_index, base, derived_key); + } + + void derive_secret_key(const key_derivation &derivation, size_t output_index, + const secret_key &base, secret_key &derived_key, hw::device &hwdev) { + hwdev.derive_secret_key(derivation, output_index, base, derived_key); + } + + bool derive_subaddress_public_key(const public_key &out_key, const key_derivation &derivation, std::size_t output_index, public_key &derived_key, hw::device &hwdev) { + return hwdev.derive_subaddress_public_key(out_key, derivation, output_index, derived_key); + } + + void generate_key_image(const public_key &pub, const secret_key &sec, key_image &image, hw::device &hwdev) { + hwdev.generate_key_image(pub,sec,image); + } +}
\ No newline at end of file diff --git a/src/crypto/hash-ops.h b/src/crypto/hash-ops.h index 47c6f6425..130bf02db 100644 --- a/src/crypto/hash-ops.h +++ b/src/crypto/hash-ops.h @@ -80,6 +80,7 @@ enum { void cn_fast_hash(const void *data, size_t length, char *hash); void cn_slow_hash(const void *data, size_t length, char *hash); +void cn_slow_hash_pre(const void *data, size_t length, char *hash, bool pre); void hash_extra_blake(const void *data, size_t length, char *hash); void hash_extra_groestl(const void *data, size_t length, char *hash); diff --git a/src/crypto/random.c b/src/crypto/random.c index 929377943..9e1a70a2d 100644 --- a/src/crypto/random.c +++ b/src/crypto/random.c @@ -42,6 +42,7 @@ static void generate_system_random_bytes(size_t n, void *result); #include <windows.h> #include <wincrypt.h> +#include <stdio.h> static void generate_system_random_bytes(size_t n, void *result) { HCRYPTPROV prov; diff --git a/src/crypto/slow-hash.c b/src/crypto/slow-hash.c index f921b2455..36bfba9fd 100644 --- a/src/crypto/slow-hash.c +++ b/src/crypto/slow-hash.c @@ -515,8 +515,11 @@ void slow_hash_free_state(void) * @param length the length in bytes of the data * @param hash a pointer to a buffer in which the final 256 bit hash will be stored */ +void cn_slow_hash(const void *data, size_t length, char *hash) { + cn_slow_hash_pre(data,length,hash,false); +} -void cn_slow_hash(const void *data, size_t length, char *hash) +void cn_slow_hash_pre(const void *data, size_t length, char *hash, bool prehashed) { RDATA_ALIGN16 uint8_t expandedKey[240]; /* These buffers are aligned to use later with SSE functions */ @@ -543,8 +546,11 @@ void cn_slow_hash(const void *data, size_t length, char *hash) slow_hash_allocate_state(); /* CryptoNight Step 1: Use Keccak1600 to initialize the 'state' (and 'text') buffers from the data. */ - - hash_process(&state.hs, data, length); + if (prehashed) { + memcpy(&state.hs, data, length); + } else { + hash_process(&state.hs, data, length); + } memcpy(text, state.init, INIT_SIZE_BYTE); /* CryptoNight Step 2: Iteratively encrypt the results from Keccak to fill diff --git a/src/cryptonote_basic/CMakeLists.txt b/src/cryptonote_basic/CMakeLists.txt index de986b6aa..d50a9df67 100644 --- a/src/cryptonote_basic/CMakeLists.txt +++ b/src/cryptonote_basic/CMakeLists.txt @@ -68,6 +68,7 @@ target_link_libraries(cryptonote_basic common cncrypto checkpoints + device ${Boost_DATE_TIME_LIBRARY} ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_SERIALIZATION_LIBRARY} diff --git a/src/cryptonote_basic/account.cpp b/src/cryptonote_basic/account.cpp index 1b38d99b3..26c823c2a 100644 --- a/src/cryptonote_basic/account.cpp +++ b/src/cryptonote_basic/account.cpp @@ -40,6 +40,7 @@ extern "C" } #include "cryptonote_basic_impl.h" #include "cryptonote_format_utils.h" +#include "device/device.hpp" #undef MONERO_DEFAULT_LOG_CATEGORY #define MONERO_DEFAULT_LOG_CATEGORY "account" @@ -50,6 +51,17 @@ DISABLE_VS_WARNINGS(4244 4345) namespace cryptonote { + + //----------------------------------------------------------------- + hw::device& account_keys::get_device() const { + return *m_device; + } + //----------------------------------------------------------------- + void account_keys::set_device( hw::device &hwdev) { + m_device = &hwdev; + MCDEBUG("device", "account_keys::set_device device type: "<<typeid(hwdev).name()); + } + //----------------------------------------------------------------- account_base::account_base() { @@ -116,6 +128,34 @@ DISABLE_VS_WARNINGS(4244 4345) if (m_creation_timestamp == (uint64_t)-1) // failure m_creation_timestamp = 0; // lowest value } + + //----------------------------------------------------------------- + void account_base::create_from_device(const std::string &device_name) + { + + hw::device &hwdev = hw::get_device(device_name); + m_keys.set_device(hwdev); + hwdev.set_name(device_name); + MCDEBUG("ledger", "device type: "<<typeid(hwdev).name()); + hwdev.init(); + hwdev.connect(); + hwdev.get_public_address(m_keys.m_account_address); + #ifdef DEBUG_HWDEVICE + hwdev.get_secret_keys(m_keys.m_view_secret_key, m_keys.m_spend_secret_key); + #endif + struct tm timestamp = {0}; + timestamp.tm_year = 2014 - 1900; // year 2014 + timestamp.tm_mon = 4 - 1; // month april + timestamp.tm_mday = 15; // 15th of april + timestamp.tm_hour = 0; + timestamp.tm_min = 0; + timestamp.tm_sec = 0; + + m_creation_timestamp = mktime(×tamp); + if (m_creation_timestamp == (uint64_t)-1) // failure + m_creation_timestamp = 0; // lowest value + } + //----------------------------------------------------------------- void account_base::create_from_viewkey(const cryptonote::account_public_address& address, const crypto::secret_key& viewkey) { diff --git a/src/cryptonote_basic/account.h b/src/cryptonote_basic/account.h index 79601f99c..d734599a3 100644 --- a/src/cryptonote_basic/account.h +++ b/src/cryptonote_basic/account.h @@ -33,6 +33,7 @@ #include "cryptonote_basic.h" #include "crypto/crypto.h" #include "serialization/keyvalue_serialization.h" +#include "device/device_declare.hpp" namespace cryptonote { @@ -43,6 +44,7 @@ namespace cryptonote crypto::secret_key m_spend_secret_key; crypto::secret_key m_view_secret_key; std::vector<crypto::secret_key> m_multisig_keys; + hw::device *m_device = &hw::get_device("default"); BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(m_account_address) @@ -50,6 +52,11 @@ namespace cryptonote KV_SERIALIZE_VAL_POD_AS_BLOB_FORCE(m_view_secret_key) KV_SERIALIZE_CONTAINER_POD_AS_BLOB(m_multisig_keys) END_KV_SERIALIZE_MAP() + + account_keys& operator=(account_keys const&) = default; + + hw::device& get_device() const ; + void set_device( hw::device &hwdev) ; }; /************************************************************************/ @@ -60,6 +67,7 @@ namespace cryptonote public: account_base(); crypto::secret_key generate(const crypto::secret_key& recovery_key = crypto::secret_key(), bool recover = false, bool two_random = false); + void create_from_device(const std::string &device_name) ; void create_from_keys(const cryptonote::account_public_address& address, const crypto::secret_key& spendkey, const crypto::secret_key& viewkey); void create_from_viewkey(const cryptonote::account_public_address& address, const crypto::secret_key& viewkey); bool make_multisig(const crypto::secret_key &view_secret_key, const crypto::secret_key &spend_secret_key, const crypto::public_key &spend_public_key, const std::vector<crypto::secret_key> &multisig_keys); @@ -68,6 +76,9 @@ namespace cryptonote std::string get_public_address_str(bool testnet) const; std::string get_public_integrated_address_str(const crypto::hash8 &payment_id, bool testnet) const; + hw::device& get_device() const {return m_keys.get_device();} + void set_device( hw::device &hwdev) {m_keys.set_device(hwdev);} + uint64_t get_createtime() const { return m_creation_timestamp; } void set_createtime(uint64_t val) { m_creation_timestamp = val; } diff --git a/src/cryptonote_basic/cryptonote_basic.h b/src/cryptonote_basic/cryptonote_basic.h index 54227ad92..4c5f32a09 100644 --- a/src/cryptonote_basic/cryptonote_basic.h +++ b/src/cryptonote_basic/cryptonote_basic.h @@ -434,6 +434,12 @@ namespace cryptonote generate_keys(k.pub, k.sec); return k; } + static inline keypair generate(hw::device &hwdev) + { + keypair k; + generate_keys(k.pub, k.sec, hwdev); + return k; + } }; //--------------------------------------------------------------- diff --git a/src/cryptonote_basic/cryptonote_format_utils.cpp b/src/cryptonote_basic/cryptonote_format_utils.cpp index aab4f380c..f462d1ca9 100644 --- a/src/cryptonote_basic/cryptonote_format_utils.cpp +++ b/src/cryptonote_basic/cryptonote_format_utils.cpp @@ -41,6 +41,8 @@ using namespace epee; #include "crypto/crypto.h" #include "crypto/hash.h" #include "ringct/rctSigs.h" +#include "device/device.hpp" +#include "device/log.hpp" #undef MONERO_DEFAULT_LOG_CATEGORY #define MONERO_DEFAULT_LOG_CATEGORY "cn" @@ -104,6 +106,16 @@ namespace cryptonote ge_p1p1_to_p3(&A2, &tmp3); ge_p3_tobytes(&AB, &A2); } + + // a copy of rct::scalarmultKey, since we can't link to libringct to avoid circular dependencies + static void secret_key_mult_public_key(crypto::public_key & aP, const crypto::public_key &P, const crypto::secret_key &a) { + ge_p3 A; + ge_p2 R; + //CHECK_AND_ASSERT_THROW_MES_L1(ge_frombytes_vartime(&A, P.bytes) == 0, "ge_frombytes_vartime failed at "+boost::lexical_cast<std::string>(__LINE__)); + ge_frombytes_vartime(&A, (const unsigned char*)P.data); + ge_scalarmult(&R, (const unsigned char*)a.data, &A); + ge_tobytes((unsigned char*)aP.data, &R); + } } namespace cryptonote @@ -171,29 +183,83 @@ namespace cryptonote crypto::hash_to_scalar(data, sizeof(data), m); return m; } + crypto::secret_key get_subaddress_secret_key(const crypto::secret_key& a, const subaddress_index& index, hw::device &hwdev) + { + crypto::secret_key m; + hwdev.get_subaddress_secret_key(a, index, m); + return m; + } + //--------------------------------------------------------------- - bool generate_key_image_helper(const account_keys& ack, const std::unordered_map<crypto::public_key, subaddress_index>& subaddresses, const crypto::public_key& out_key, const crypto::public_key& tx_public_key, const std::vector<crypto::public_key>& additional_tx_public_keys, size_t real_output_index, keypair& in_ephemeral, crypto::key_image& ki) + std::vector<crypto::public_key> get_subaddress_spend_public_keys(const cryptonote::account_keys &keys, uint32_t account, uint32_t begin, uint32_t end) + { + CHECK_AND_ASSERT_THROW_MES(begin <= end, "begin > end"); + + std::vector<crypto::public_key> pkeys; + pkeys.reserve(end - begin); + cryptonote::subaddress_index index = {account, begin}; + + ge_p3 p3; + ge_cached cached; + CHECK_AND_ASSERT_THROW_MES(ge_frombytes_vartime(&p3, (const unsigned char*)keys.m_account_address.m_spend_public_key.data) == 0, + "ge_frombytes_vartime failed to convert spend public key"); + ge_p3_to_cached(&cached, &p3); + + for (uint32_t idx = begin; idx < end; ++idx) + { + index.minor = idx; + if (index.is_zero()) + { + pkeys.push_back(keys.m_account_address.m_spend_public_key); + continue; + } + const crypto::secret_key m = cryptonote::get_subaddress_secret_key(keys.m_view_secret_key, index); + + // M = m*G + ge_scalarmult_base(&p3, (const unsigned char*)m.data); + + // D = B + M + crypto::public_key D; + ge_p1p1 p1p1; + ge_add(&p1p1, &p3, &cached); + ge_p1p1_to_p3(&p3, &p1p1); + ge_p3_tobytes((unsigned char*)D.data, &p3); + + pkeys.push_back(D); + } + return pkeys; + } + + std::vector<crypto::public_key> get_subaddress_spend_public_keys(const cryptonote::account_keys &keys, uint32_t account, uint32_t begin, uint32_t end, hw::device &hwdev) + { + std::vector<crypto::public_key> pkeys; + hwdev.get_subaddress_spend_public_keys(keys, account, begin, end, pkeys); + return pkeys; + } + + //--------------------------------------------------------------- + bool generate_key_image_helper(const account_keys& ack, const std::unordered_map<crypto::public_key, subaddress_index>& subaddresses, const crypto::public_key& out_key, const crypto::public_key& tx_public_key, const std::vector<crypto::public_key>& additional_tx_public_keys, size_t real_output_index, keypair& in_ephemeral, crypto::key_image& ki, hw::device &hwdev) { crypto::key_derivation recv_derivation = AUTO_VAL_INIT(recv_derivation); - bool r = crypto::generate_key_derivation(tx_public_key, ack.m_view_secret_key, recv_derivation); + bool r = crypto::generate_key_derivation(tx_public_key, ack.m_view_secret_key, recv_derivation, hwdev); CHECK_AND_ASSERT_MES(r, false, "key image helper: failed to generate_key_derivation(" << tx_public_key << ", " << ack.m_view_secret_key << ")"); std::vector<crypto::key_derivation> additional_recv_derivations; for (size_t i = 0; i < additional_tx_public_keys.size(); ++i) { crypto::key_derivation additional_recv_derivation = AUTO_VAL_INIT(additional_recv_derivation); - r = crypto::generate_key_derivation(additional_tx_public_keys[i], ack.m_view_secret_key, additional_recv_derivation); + r = crypto::generate_key_derivation(additional_tx_public_keys[i], ack.m_view_secret_key, additional_recv_derivation, hwdev); CHECK_AND_ASSERT_MES(r, false, "key image helper: failed to generate_key_derivation(" << additional_tx_public_keys[i] << ", " << ack.m_view_secret_key << ")"); additional_recv_derivations.push_back(additional_recv_derivation); } - boost::optional<subaddress_receive_info> subaddr_recv_info = is_out_to_acc_precomp(subaddresses, out_key, recv_derivation, additional_recv_derivations, real_output_index); + boost::optional<subaddress_receive_info> subaddr_recv_info = is_out_to_acc_precomp(subaddresses, out_key, recv_derivation, additional_recv_derivations, real_output_index,hwdev); CHECK_AND_ASSERT_MES(subaddr_recv_info, false, "key image helper: given output pubkey doesn't seem to belong to this address"); - return generate_key_image_helper_precomp(ack, out_key, subaddr_recv_info->derivation, real_output_index, subaddr_recv_info->index, in_ephemeral, ki); + return generate_key_image_helper_precomp(ack, out_key, subaddr_recv_info->derivation, real_output_index, subaddr_recv_info->index, in_ephemeral, ki, hwdev); } //--------------------------------------------------------------- - bool generate_key_image_helper_precomp(const account_keys& ack, const crypto::public_key& out_key, const crypto::key_derivation& recv_derivation, size_t real_output_index, const subaddress_index& received_index, keypair& in_ephemeral, crypto::key_image& ki) + bool generate_key_image_helper_precomp(const account_keys& ack, const crypto::public_key& out_key, const crypto::key_derivation& recv_derivation, size_t real_output_index, const subaddress_index& received_index, keypair& in_ephemeral, crypto::key_image& ki, hw::device &hwdev) { if (ack.m_spend_secret_key == crypto::null_skey) { @@ -205,7 +271,7 @@ namespace cryptonote { // derive secret key with subaddress - step 1: original CN derivation crypto::secret_key scalar_step1; - crypto::derive_secret_key(recv_derivation, real_output_index, ack.m_spend_secret_key, scalar_step1); // computes Hs(a*R || idx) + b + crypto::derive_secret_key(recv_derivation, real_output_index, ack.m_spend_secret_key, scalar_step1, hwdev); // computes Hs(a*R || idx) + b // step 2: add Hs(a || index_major || index_minor) crypto::secret_key subaddr_sk; @@ -216,8 +282,8 @@ namespace cryptonote } else { - subaddr_sk = get_subaddress_secret_key(ack.m_view_secret_key, received_index); - sc_add((unsigned char*)&scalar_step2, (unsigned char*)&scalar_step1, (unsigned char*)&subaddr_sk); + hwdev.get_subaddress_secret_key(ack.m_view_secret_key, received_index, subaddr_sk); + hwdev.sc_secret_add(scalar_step2, scalar_step1,subaddr_sk); } in_ephemeral.sec = scalar_step2; @@ -225,17 +291,17 @@ namespace cryptonote if (ack.m_multisig_keys.empty()) { // when not in multisig, we know the full spend secret key, so the output pubkey can be obtained by scalarmultBase - CHECK_AND_ASSERT_MES(crypto::secret_key_to_public_key(in_ephemeral.sec, in_ephemeral.pub), false, "Failed to derive public key"); + CHECK_AND_ASSERT_MES(crypto::secret_key_to_public_key(in_ephemeral.sec, in_ephemeral.pub, hwdev), false, "Failed to derive public key"); } else { // when in multisig, we only know the partial spend secret key. but we do know the full spend public key, so the output pubkey can be obtained by using the standard CN key derivation - CHECK_AND_ASSERT_MES(crypto::derive_public_key(recv_derivation, real_output_index, ack.m_account_address.m_spend_public_key, in_ephemeral.pub), false, "Failed to derive public key"); + CHECK_AND_ASSERT_MES(crypto::derive_public_key(recv_derivation, real_output_index, ack.m_account_address.m_spend_public_key, in_ephemeral.pub, hwdev), false, "Failed to derive public key"); // and don't forget to add the contribution from the subaddress part if (!received_index.is_zero()) { crypto::public_key subaddr_pk; - CHECK_AND_ASSERT_MES(crypto::secret_key_to_public_key(subaddr_sk, subaddr_pk), false, "Failed to derive public key"); + CHECK_AND_ASSERT_MES(crypto::secret_key_to_public_key(subaddr_sk, subaddr_pk, hwdev), false, "Failed to derive public key"); add_public_key(in_ephemeral.pub, in_ephemeral.pub, subaddr_pk); } } @@ -244,7 +310,7 @@ namespace cryptonote false, "key image helper precomp: given output pubkey doesn't match the derived one"); } - crypto::generate_key_image(in_ephemeral.pub, in_ephemeral.sec, ki); + crypto::generate_key_image(in_ephemeral.pub, in_ephemeral.sec, ki, hwdev); return true; } //--------------------------------------------------------------- @@ -531,6 +597,17 @@ namespace cryptonote // Encryption and decryption are the same operation (xor with a key) return encrypt_payment_id(payment_id, public_key, secret_key); } + + //--------------------------------------------------------------- + bool encrypt_payment_id(crypto::hash8 &payment_id, const crypto::public_key &public_key, const crypto::secret_key &secret_key,hw::device &hwdev) + { + return hwdev.encrypt_payment_id(public_key, secret_key, payment_id); + } + bool decrypt_payment_id(crypto::hash8 &payment_id, const crypto::public_key &public_key, const crypto::secret_key &secret_key, hw::device &hwdev) + { + // Encryption and decryption are the same operation (xor with a key) + return encrypt_payment_id(payment_id, public_key, secret_key, hwdev); + } //--------------------------------------------------------------- bool get_inputs_money_amount(const transaction& tx, uint64_t& money) { @@ -631,10 +708,10 @@ namespace cryptonote bool is_out_to_acc(const account_keys& acc, const txout_to_key& out_key, const crypto::public_key& tx_pub_key, const std::vector<crypto::public_key>& additional_tx_pub_keys, size_t output_index) { crypto::key_derivation derivation; - bool r = generate_key_derivation(tx_pub_key, acc.m_view_secret_key, derivation); + bool r = generate_key_derivation(tx_pub_key, acc.m_view_secret_key, derivation, acc.get_device()); CHECK_AND_ASSERT_MES(r, false, "Failed to generate key derivation"); crypto::public_key pk; - r = derive_public_key(derivation, output_index, acc.m_account_address.m_spend_public_key, pk); + r = derive_public_key(derivation, output_index, acc.m_account_address.m_spend_public_key, pk, acc.get_device()); CHECK_AND_ASSERT_MES(r, false, "Failed to derive public key"); if (pk == out_key.key) return true; @@ -642,20 +719,20 @@ namespace cryptonote if (!additional_tx_pub_keys.empty()) { CHECK_AND_ASSERT_MES(output_index < additional_tx_pub_keys.size(), false, "wrong number of additional tx pubkeys"); - r = generate_key_derivation(additional_tx_pub_keys[output_index], acc.m_view_secret_key, derivation); + r = generate_key_derivation(additional_tx_pub_keys[output_index], acc.m_view_secret_key, derivation, acc.get_device()); CHECK_AND_ASSERT_MES(r, false, "Failed to generate key derivation"); - r = derive_public_key(derivation, output_index, acc.m_account_address.m_spend_public_key, pk); + r = derive_public_key(derivation, output_index, acc.m_account_address.m_spend_public_key, pk, acc.get_device()); CHECK_AND_ASSERT_MES(r, false, "Failed to derive public key"); return pk == out_key.key; } return false; } //--------------------------------------------------------------- - boost::optional<subaddress_receive_info> is_out_to_acc_precomp(const std::unordered_map<crypto::public_key, subaddress_index>& subaddresses, const crypto::public_key& out_key, const crypto::key_derivation& derivation, const std::vector<crypto::key_derivation>& additional_derivations, size_t output_index) + boost::optional<subaddress_receive_info> is_out_to_acc_precomp(const std::unordered_map<crypto::public_key, subaddress_index>& subaddresses, const crypto::public_key& out_key, const crypto::key_derivation& derivation, const std::vector<crypto::key_derivation>& additional_derivations, size_t output_index, hw::device &hwdev) { // try the shared tx pubkey crypto::public_key subaddress_spendkey; - derive_subaddress_public_key(out_key, derivation, output_index, subaddress_spendkey); + derive_subaddress_public_key(out_key, derivation, output_index, subaddress_spendkey,hwdev); auto found = subaddresses.find(subaddress_spendkey); if (found != subaddresses.end()) return subaddress_receive_info{ found->second, derivation }; @@ -663,7 +740,7 @@ namespace cryptonote if (!additional_derivations.empty()) { CHECK_AND_ASSERT_MES(output_index < additional_derivations.size(), boost::none, "wrong number of additional derivations"); - derive_subaddress_public_key(out_key, additional_derivations[output_index], output_index, subaddress_spendkey); + derive_subaddress_public_key(out_key, additional_derivations[output_index], output_index, subaddress_spendkey, hwdev); found = subaddresses.find(subaddress_spendkey); if (found != subaddresses.end()) return subaddress_receive_info{ found->second, additional_derivations[output_index] }; @@ -1063,4 +1140,63 @@ namespace cryptonote return key; } + //--------------------------------------------------------------- + #define CHACHA8_KEY_TAIL 0x8c + bool generate_chacha_key_from_secret_keys(const account_keys &keys, crypto::chacha_key &key) + { + const crypto::secret_key &view_key = keys.m_view_secret_key; + const crypto::secret_key &spend_key = keys.m_spend_secret_key; + tools::scrubbed_arr<char, sizeof(view_key) + sizeof(spend_key) + 1> data; + memcpy(data.data(), &view_key, sizeof(view_key)); + memcpy(data.data() + sizeof(view_key), &spend_key, sizeof(spend_key)); + data[sizeof(data) - 1] = CHACHA8_KEY_TAIL; + crypto::generate_chacha_key(data.data(), sizeof(data), key); + return true; + } + + //--------------------------------------------------------------- + crypto::public_key get_subaddress_spend_public_key(const cryptonote::account_keys& keys, const cryptonote::subaddress_index& index) + { + if (index.is_zero()) + return keys.m_account_address.m_spend_public_key; + + // m = Hs(a || index_major || index_minor) + crypto::secret_key m = cryptonote::get_subaddress_secret_key(keys.m_view_secret_key, index); + + // M = m*G + crypto::public_key M; + crypto::secret_key_to_public_key(m, M); + + // D = B + M + crypto::public_key D; + add_public_key(D, keys.m_account_address.m_spend_public_key, M); // could have defined add_public_key() under src/crypto + return D; + } + + //--------------------------------------------------------------- + cryptonote::account_public_address get_subaddress(const cryptonote::account_keys& keys, const cryptonote::subaddress_index& index) + { + if (index.is_zero()) + return keys.m_account_address; + + crypto::public_key D = get_subaddress_spend_public_key(keys, index); + + // C = a*D + crypto::public_key C; + secret_key_mult_public_key(C, D, keys.m_view_secret_key); // could have defined secret_key_mult_public_key() under src/crypto + + // result: (C, D) + cryptonote::account_public_address address; + address.m_view_public_key = C; + address.m_spend_public_key = D; + return address; + } + + //--------------------------------------------------------------- + bool verify_keys(const crypto::secret_key& sec, const crypto::public_key& expected_pub) + { + crypto::public_key pub; + bool r = crypto::secret_key_to_public_key(sec, pub); + return r && expected_pub == pub; + } } diff --git a/src/cryptonote_basic/cryptonote_format_utils.h b/src/cryptonote_basic/cryptonote_format_utils.h index 29e180c41..7bd34ea87 100644 --- a/src/cryptonote_basic/cryptonote_format_utils.h +++ b/src/cryptonote_basic/cryptonote_format_utils.h @@ -37,6 +37,7 @@ #include "crypto/crypto.h" #include "crypto/hash.h" #include <unordered_map> +#include "device/device_declare.hpp" namespace epee { @@ -52,7 +53,9 @@ namespace cryptonote bool parse_and_validate_tx_from_blob(const blobdata& tx_blob, transaction& tx); bool parse_and_validate_tx_base_from_blob(const blobdata& tx_blob, transaction& tx); bool encrypt_payment_id(crypto::hash8 &payment_id, const crypto::public_key &public_key, const crypto::secret_key &secret_key); + bool encrypt_payment_id(crypto::hash8 &payment_id, const crypto::public_key &public_key, const crypto::secret_key &secret_key, hw::device &hwdev); bool decrypt_payment_id(crypto::hash8 &payment_id, const crypto::public_key &public_key, const crypto::secret_key &secret_key); + bool decrypt_payment_id(crypto::hash8 &payment_id, const crypto::public_key &public_key, const crypto::secret_key &secret_key, hw::device &hwdev); template<typename T> bool find_tx_extra_field_by_type(const std::vector<tx_extra_field>& tx_extra_fields, T& field, size_t index = 0) @@ -87,14 +90,17 @@ namespace cryptonote subaddress_index index; crypto::key_derivation derivation; }; - boost::optional<subaddress_receive_info> is_out_to_acc_precomp(const std::unordered_map<crypto::public_key, subaddress_index>& subaddresses, const crypto::public_key& out_key, const crypto::key_derivation& derivation, const std::vector<crypto::key_derivation>& additional_derivations, size_t output_index); + boost::optional<subaddress_receive_info> is_out_to_acc_precomp(const std::unordered_map<crypto::public_key, subaddress_index>& subaddresses, const crypto::public_key& out_key, const crypto::key_derivation& derivation, const std::vector<crypto::key_derivation>& additional_derivations, size_t output_index, hw::device &hwdev); bool lookup_acc_outs(const account_keys& acc, const transaction& tx, const crypto::public_key& tx_pub_key, const std::vector<crypto::public_key>& additional_tx_public_keys, std::vector<size_t>& outs, uint64_t& money_transfered); bool lookup_acc_outs(const account_keys& acc, const transaction& tx, std::vector<size_t>& outs, uint64_t& money_transfered); bool get_tx_fee(const transaction& tx, uint64_t & fee); uint64_t get_tx_fee(const transaction& tx); crypto::secret_key get_subaddress_secret_key(const crypto::secret_key& a, const subaddress_index& index); - bool generate_key_image_helper(const account_keys& ack, const std::unordered_map<crypto::public_key, subaddress_index>& subaddresses, const crypto::public_key& out_key, const crypto::public_key& tx_public_key, const std::vector<crypto::public_key>& additional_tx_public_keys, size_t real_output_index, keypair& in_ephemeral, crypto::key_image& ki); - bool generate_key_image_helper_precomp(const account_keys& ack, const crypto::public_key& out_key, const crypto::key_derivation& recv_derivation, size_t real_output_index, const subaddress_index& received_index, keypair& in_ephemeral, crypto::key_image& ki); + crypto::secret_key get_subaddress_secret_key(const crypto::secret_key& a, const subaddress_index& index, hw::device &hwdev); + std::vector<crypto::public_key> get_subaddress_spend_public_keys(const cryptonote::account_keys &keys, uint32_t account, uint32_t begin, uint32_t end); + std::vector<crypto::public_key> get_subaddress_spend_public_keys(const cryptonote::account_keys &keys, uint32_t account, uint32_t begin, uint32_t end, hw::device &hwdev); + bool generate_key_image_helper(const account_keys& ack, const std::unordered_map<crypto::public_key, subaddress_index>& subaddresses, const crypto::public_key& out_key, const crypto::public_key& tx_public_key, const std::vector<crypto::public_key>& additional_tx_public_keys, size_t real_output_index, keypair& in_ephemeral, crypto::key_image& ki, hw::device &hwdev); + bool generate_key_image_helper_precomp(const account_keys& ack, const crypto::public_key& out_key, const crypto::key_derivation& recv_derivation, size_t real_output_index, const subaddress_index& received_index, keypair& in_ephemeral, crypto::key_image& ki, hw::device &hwdev); void get_blob_hash(const blobdata& blob, crypto::hash& res); crypto::hash get_blob_hash(const blobdata& blob); std::string short_hash_str(const crypto::hash& h); @@ -237,4 +243,9 @@ namespace cryptonote CHECK_AND_ASSERT_MES(variant_var.type() == typeid(specific_type), fail_return_val, "wrong variant type: " << variant_var.type().name() << ", expected " << typeid(specific_type).name()); \ specific_type& variable_name = boost::get<specific_type>(variant_var); + cryptonote::account_public_address get_subaddress(const cryptonote::account_keys &keys, const cryptonote::subaddress_index& index); + crypto::public_key get_subaddress_spend_public_key(const cryptonote::account_keys &keys, const cryptonote::subaddress_index& index); + bool generate_chacha_key_from_secret_keys(const cryptonote::account_keys &keys, crypto::chacha_key &key); + bool verify_keys(const crypto::secret_key& sec, const crypto::public_key& expected_pub); + } diff --git a/src/cryptonote_basic/hardfork.h b/src/cryptonote_basic/hardfork.h index 1ec601660..ee5ec0596 100644 --- a/src/cryptonote_basic/hardfork.h +++ b/src/cryptonote_basic/hardfork.h @@ -79,7 +79,6 @@ namespace cryptonote * returns true if no error, false otherwise * * @param version the major block version for the fork - * @param voting_version the minor block version for the fork, used for voting * @param height The height the hardfork takes effect * @param time Approximate time of the hardfork (seconds since epoch) */ diff --git a/src/cryptonote_basic/miner.cpp b/src/cryptonote_basic/miner.cpp index b322383a9..7af9b3487 100644 --- a/src/cryptonote_basic/miner.cpp +++ b/src/cryptonote_basic/miner.cpp @@ -602,7 +602,7 @@ namespace cryptonote // this should take care of the case where mining is started with bg-enabled, // and then the user decides to un-check background mining, and just do // regular full-speed mining. I might just be over-doing it and thinking up - // non-existant use-cases, so if the concensus is to simplify, we can remove all this fluff. + // non-existant use-cases, so if the consensus is to simplify, we can remove all this fluff. /* while( !m_is_background_mining_enabled ) { @@ -624,21 +624,15 @@ namespace cryptonote continue; // if interrupted because stop called, loop should end .. } - boost::tribool battery_powered(on_battery_power()); - bool on_ac_power = false; - if(indeterminate( battery_powered )) + bool on_ac_power = m_ignore_battery; + if(!m_ignore_battery) { - // name could be better, only ignores battery requirement if we failed - // to get the status of the system - if( m_ignore_battery ) + boost::tribool battery_powered(on_battery_power()); + if(!indeterminate( battery_powered )) { - on_ac_power = true; + on_ac_power = !battery_powered; } } - else - { - on_ac_power = !battery_powered; - } if( m_is_background_mining_started ) { diff --git a/src/cryptonote_core/CMakeLists.txt b/src/cryptonote_core/CMakeLists.txt index d8a21ae31..72844db66 100644 --- a/src/cryptonote_core/CMakeLists.txt +++ b/src/cryptonote_core/CMakeLists.txt @@ -61,6 +61,7 @@ target_link_libraries(cryptonote_core blockchain_db multisig ringct + device ${Boost_DATE_TIME_LIBRARY} ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_SERIALIZATION_LIBRARY} diff --git a/src/cryptonote_core/blockchain.cpp b/src/cryptonote_core/blockchain.cpp index fe4004caa..376f9ca5e 100644 --- a/src/cryptonote_core/blockchain.cpp +++ b/src/cryptonote_core/blockchain.cpp @@ -2739,7 +2739,7 @@ bool Blockchain::check_tx_inputs(transaction& tx, tx_verification_context &tvc, case rct::RCTTypeSimple: case rct::RCTTypeSimpleBulletproof: { - // check all this, either recontructed (so should really pass), or not + // check all this, either reconstructed (so should really pass), or not { if (pubkeys.size() != rv.mixRing.size()) { @@ -2797,7 +2797,7 @@ bool Blockchain::check_tx_inputs(transaction& tx, tx_verification_context &tvc, case rct::RCTTypeFull: case rct::RCTTypeFullBulletproof: { - // check all this, either recontructed (so should really pass), or not + // check all this, either reconstructed (so should really pass), or not { bool size_matches = true; for (size_t i = 0; i < pubkeys.size(); ++i) diff --git a/src/cryptonote_core/cryptonote_core.cpp b/src/cryptonote_core/cryptonote_core.cpp index aaa5ccdbc..8b837f2e4 100644 --- a/src/cryptonote_core/cryptonote_core.cpp +++ b/src/cryptonote_core/cryptonote_core.cpp @@ -66,19 +66,22 @@ DISABLE_VS_WARNINGS(4355) namespace cryptonote { - const command_line::arg_descriptor<std::string> arg_data_dir = { - "data-dir" - , "Specify data directory" - }; - const command_line::arg_descriptor<std::string> arg_testnet_data_dir = { - "testnet-data-dir" - , "Specify testnet data directory" - }; const command_line::arg_descriptor<bool, false> arg_testnet_on = { "testnet" , "Run on testnet. The wallet must be launched with --testnet flag." , false }; + const command_line::arg_descriptor<std::string, false, true> arg_data_dir = { + "data-dir" + , "Specify data directory" + , tools::get_default_data_dir() + , arg_testnet_on + , [](bool testnet, bool defaulted, std::string val) { + if (testnet) + return (boost::filesystem::path(val) / "testnet").string(); + return val; + } + }; const command_line::arg_descriptor<bool> arg_offline = { "offline" , "Do not listen for peers, nor connect to any" @@ -134,7 +137,12 @@ namespace cryptonote }; static const command_line::arg_descriptor<bool> arg_fluffy_blocks = { "fluffy-blocks" - , "Relay blocks as fluffy blocks where possible (automatic on testnet)" + , "Relay blocks as fluffy blocks (obsolete, now default)" + , true + }; + static const command_line::arg_descriptor<bool> arg_no_fluffy_blocks = { + "no-fluffy-blocks" + , "Relay blocks as normal blocks" , false }; static const command_line::arg_descriptor<size_t> arg_max_txpool_size = { @@ -229,8 +237,7 @@ namespace cryptonote //----------------------------------------------------------------------------------- void core::init_options(boost::program_options::options_description& desc) { - command_line::add_arg(desc, arg_data_dir, tools::get_default_data_dir()); - command_line::add_arg(desc, arg_testnet_data_dir, (boost::filesystem::path(tools::get_default_data_dir()) / "testnet").string()); + command_line::add_arg(desc, arg_data_dir); command_line::add_arg(desc, arg_test_drop_download); command_line::add_arg(desc, arg_test_drop_download_height); @@ -243,6 +250,7 @@ namespace cryptonote command_line::add_arg(desc, arg_block_sync_size); command_line::add_arg(desc, arg_check_updates); command_line::add_arg(desc, arg_fluffy_blocks); + command_line::add_arg(desc, arg_no_fluffy_blocks); command_line::add_arg(desc, arg_test_dbg_lock_sleep); command_line::add_arg(desc, arg_offline); command_line::add_arg(desc, arg_disable_dns_checkpoints); @@ -256,8 +264,7 @@ namespace cryptonote { m_testnet = command_line::get_arg(vm, arg_testnet_on); - auto data_dir_arg = m_testnet ? arg_testnet_data_dir : arg_data_dir; - m_config_folder = command_line::get_arg(vm, data_dir_arg); + m_config_folder = command_line::get_arg(vm, arg_data_dir); auto data_dir = boost::filesystem::path(m_config_folder); @@ -279,9 +286,11 @@ namespace cryptonote set_enforce_dns_checkpoints(command_line::get_arg(vm, arg_dns_checkpoints)); test_drop_download_height(command_line::get_arg(vm, arg_test_drop_download_height)); - m_fluffy_blocks_enabled = m_testnet || get_arg(vm, arg_fluffy_blocks); + m_fluffy_blocks_enabled = !get_arg(vm, arg_no_fluffy_blocks); m_offline = get_arg(vm, arg_offline); m_disable_dns_checkpoints = get_arg(vm, arg_disable_dns_checkpoints); + if (!command_line::is_arg_defaulted(vm, arg_fluffy_blocks)) + MWARNING(arg_fluffy_blocks.name << " is obsolete, it is now default"); if (command_line::get_arg(vm, arg_test_drop_download) == true) test_drop_download(); @@ -1379,7 +1388,7 @@ namespace cryptonote break; case HardFork::UpdateNeeded: MCLOG_RED(level, "global", "**********************************************************************"); - MCLOG_RED(level, "global", "Last scheduled hard fork time shows a daemon update is needed now."); + MCLOG_RED(level, "global", "Last scheduled hard fork time shows a daemon update is needed soon."); MCLOG_RED(level, "global", "**********************************************************************"); break; default: diff --git a/src/cryptonote_core/cryptonote_core.h b/src/cryptonote_core/cryptonote_core.h index 429f6b820..ce39aaddf 100644 --- a/src/cryptonote_core/cryptonote_core.h +++ b/src/cryptonote_core/cryptonote_core.h @@ -58,8 +58,7 @@ namespace cryptonote const std::pair<uint8_t, uint64_t> *hard_forks; }; - extern const command_line::arg_descriptor<std::string> arg_data_dir; - extern const command_line::arg_descriptor<std::string> arg_testnet_data_dir; + extern const command_line::arg_descriptor<std::string, false, true> arg_data_dir; extern const command_line::arg_descriptor<bool, false> arg_testnet_on; extern const command_line::arg_descriptor<bool> arg_offline; diff --git a/src/cryptonote_core/cryptonote_tx_utils.cpp b/src/cryptonote_core/cryptonote_tx_utils.cpp index 4a10f7133..d641caf80 100644 --- a/src/cryptonote_core/cryptonote_tx_utils.cpp +++ b/src/cryptonote_core/cryptonote_tx_utils.cpp @@ -41,6 +41,7 @@ using namespace epee; #include "crypto/hash.h" #include "ringct/rctSigs.h" #include "multisig/multisig.h" +#include "device/device.hpp" using namespace crypto; @@ -194,6 +195,8 @@ namespace cryptonote //--------------------------------------------------------------- bool construct_tx_with_tx_key(const account_keys& sender_account_keys, const std::unordered_map<crypto::public_key, subaddress_index>& subaddresses, std::vector<tx_source_entry>& sources, const std::vector<tx_destination_entry>& destinations, const boost::optional<cryptonote::account_public_address>& change_addr, std::vector<uint8_t> extra, transaction& tx, uint64_t unlock_time, const crypto::secret_key &tx_key, const std::vector<crypto::secret_key> &additional_tx_keys, bool rct, bool bulletproof, rct::multisig_out *msout) { + hw::device &hwdev = sender_account_keys.get_device(); + if (sources.empty()) { LOG_ERROR("Empty sources"); @@ -232,7 +235,7 @@ namespace cryptonote return false; } - if (!encrypt_payment_id(payment_id, view_key_pub, tx_key)) + if (!encrypt_payment_id(payment_id, view_key_pub, tx_key, hwdev)) { LOG_ERROR("Failed to encrypt payment id"); return false; @@ -280,7 +283,7 @@ namespace cryptonote keypair& in_ephemeral = in_contexts.back().in_ephemeral; crypto::key_image img; const auto& out_key = reinterpret_cast<const crypto::public_key&>(src_entr.outputs[src_entr.real_output].second.dest); - if(!generate_key_image_helper(sender_account_keys, subaddresses, out_key, src_entr.real_out_tx_key, src_entr.real_out_additional_tx_keys, src_entr.real_output_in_tx_index, in_ephemeral, img)) + if(!generate_key_image_helper(sender_account_keys, subaddresses, out_key, src_entr.real_out_tx_key, src_entr.real_out_additional_tx_keys, src_entr.real_output_in_tx_index, in_ephemeral,img, hwdev)) { LOG_ERROR("Key image generation failed!"); return false; @@ -338,11 +341,11 @@ namespace cryptonote // if this is a single-destination transfer to a subaddress, we set the tx pubkey to R=s*D if (num_stdaddresses == 0 && num_subaddresses == 1) { - txkey_pub = rct::rct2pk(rct::scalarmultKey(rct::pk2rct(single_dest_subaddress.m_spend_public_key), rct::sk2rct(tx_key))); + txkey_pub = rct::rct2pk(rct::scalarmultKey(rct::pk2rct(single_dest_subaddress.m_spend_public_key), rct::sk2rct(tx_key), hwdev)); } else { - txkey_pub = rct::rct2pk(rct::scalarmultBase(rct::sk2rct(tx_key))); + txkey_pub = rct::rct2pk(rct::scalarmultBase(rct::sk2rct(tx_key), hwdev)); } remove_field_from_tx_extra(tx.extra, typeid(tx_extra_pub_key)); add_tx_pub_key_to_extra(tx, txkey_pub); @@ -371,22 +374,22 @@ namespace cryptonote { additional_txkey.sec = additional_tx_keys[output_index]; if (dst_entr.is_subaddress) - additional_txkey.pub = rct::rct2pk(rct::scalarmultKey(rct::pk2rct(dst_entr.addr.m_spend_public_key), rct::sk2rct(additional_txkey.sec))); + additional_txkey.pub = rct::rct2pk(rct::scalarmultKey(rct::pk2rct(dst_entr.addr.m_spend_public_key), rct::sk2rct(additional_txkey.sec),hwdev)); else - additional_txkey.pub = rct::rct2pk(rct::scalarmultBase(rct::sk2rct(additional_txkey.sec))); + additional_txkey.pub = rct::rct2pk(rct::scalarmultBase(rct::sk2rct(additional_txkey.sec), hwdev)); } bool r; if (change_addr && dst_entr.addr == *change_addr) { // sending change to yourself; derivation = a*R - r = crypto::generate_key_derivation(txkey_pub, sender_account_keys.m_view_secret_key, derivation); + r = crypto::generate_key_derivation(txkey_pub, sender_account_keys.m_view_secret_key, derivation, hwdev); CHECK_AND_ASSERT_MES(r, false, "at creation outs: failed to generate_key_derivation(" << txkey_pub << ", " << sender_account_keys.m_view_secret_key << ")"); } else { // sending to the recipient; derivation = r*A (or s*C in the subaddress scheme) - r = crypto::generate_key_derivation(dst_entr.addr.m_view_public_key, dst_entr.is_subaddress && need_additional_txkeys ? additional_txkey.sec : tx_key, derivation); + r = crypto::generate_key_derivation(dst_entr.addr.m_view_public_key, dst_entr.is_subaddress && need_additional_txkeys ? additional_txkey.sec : tx_key, derivation, hwdev); CHECK_AND_ASSERT_MES(r, false, "at creation outs: failed to generate_key_derivation(" << dst_entr.addr.m_view_public_key << ", " << (dst_entr.is_subaddress && need_additional_txkeys ? additional_txkey.sec : tx_key) << ")"); } @@ -398,12 +401,14 @@ namespace cryptonote if (tx.version > 1) { crypto::secret_key scalar1; - crypto::derivation_to_scalar(derivation, output_index, scalar1); + crypto::derivation_to_scalar(derivation, output_index, scalar1, hwdev); amount_keys.push_back(rct::sk2rct(scalar1)); } - r = crypto::derive_public_key(derivation, output_index, dst_entr.addr.m_spend_public_key, out_eph_public_key); + r = crypto::derive_public_key(derivation, output_index, dst_entr.addr.m_spend_public_key, out_eph_public_key, hwdev); CHECK_AND_ASSERT_MES(r, false, "at creation outs: failed to derive_public_key(" << derivation << ", " << output_index << ", "<< dst_entr.addr.m_spend_public_key << ")"); + hwdev.add_output_key_mapping(dst_entr.addr.m_view_public_key, dst_entr.addr.m_spend_public_key, output_index, amount_keys.back(), out_eph_public_key); + tx_out out; out.amount = dst_entr.amount; txout_to_key tk; @@ -579,9 +584,9 @@ namespace cryptonote get_transaction_prefix_hash(tx, tx_prefix_hash); rct::ctkeyV outSk; if (use_simple_rct) - tx.rct_signatures = rct::genRctSimple(rct::hash2rct(tx_prefix_hash), inSk, destinations, inamounts, outamounts, amount_in - amount_out, mixRing, amount_keys, msout ? &kLRki : NULL, msout, index, outSk, bulletproof); + tx.rct_signatures = rct::genRctSimple(rct::hash2rct(tx_prefix_hash), inSk, destinations, inamounts, outamounts, amount_in - amount_out, mixRing, amount_keys, msout ? &kLRki : NULL, msout, index, outSk, bulletproof, hwdev); else - tx.rct_signatures = rct::genRct(rct::hash2rct(tx_prefix_hash), inSk, destinations, outamounts, mixRing, amount_keys, msout ? &kLRki[0] : NULL, msout, sources[0].real_output, outSk, bulletproof); // same index assumption + tx.rct_signatures = rct::genRct(rct::hash2rct(tx_prefix_hash), inSk, destinations, outamounts, mixRing, amount_keys, msout ? &kLRki[0] : NULL, msout, sources[0].real_output, outSk, bulletproof, hwdev); // same index assumption CHECK_AND_ASSERT_MES(tx.vout.size() == outSk.size(), false, "outSk size does not match vout"); @@ -595,8 +600,8 @@ namespace cryptonote //--------------------------------------------------------------- bool construct_tx_and_get_tx_key(const account_keys& sender_account_keys, const std::unordered_map<crypto::public_key, subaddress_index>& subaddresses, std::vector<tx_source_entry>& sources, const std::vector<tx_destination_entry>& destinations, const boost::optional<cryptonote::account_public_address>& change_addr, std::vector<uint8_t> extra, transaction& tx, uint64_t unlock_time, crypto::secret_key &tx_key, std::vector<crypto::secret_key> &additional_tx_keys, bool rct, bool bulletproof, rct::multisig_out *msout) { - keypair txkey = keypair::generate(); - tx_key = txkey.sec; + hw::device &hwdev = sender_account_keys.get_device(); + hwdev.open_tx(tx_key); // figure out if we need to make additional tx pubkeys size_t num_stdaddresses = 0; @@ -608,10 +613,12 @@ namespace cryptonote { additional_tx_keys.clear(); for (const auto &d: destinations) - additional_tx_keys.push_back(keypair::generate().sec); + additional_tx_keys.push_back(keypair::generate(sender_account_keys.get_device()).sec); } - return construct_tx_with_tx_key(sender_account_keys, subaddresses, sources, destinations, change_addr, extra, tx, unlock_time, tx_key, additional_tx_keys, rct, bulletproof, msout); + bool r = construct_tx_with_tx_key(sender_account_keys, subaddresses, sources, destinations, change_addr, extra, tx, unlock_time, tx_key, additional_tx_keys, rct, bulletproof, msout); + hwdev.close_tx(); + return r; } //--------------------------------------------------------------- bool construct_tx(const account_keys& sender_account_keys, std::vector<tx_source_entry>& sources, const std::vector<tx_destination_entry>& destinations, const boost::optional<cryptonote::account_public_address>& change_addr, std::vector<uint8_t> extra, transaction& tx, uint64_t unlock_time) diff --git a/src/cryptonote_core/tx_pool.cpp b/src/cryptonote_core/tx_pool.cpp index 5f54e93f1..762feb5ee 100644 --- a/src/cryptonote_core/tx_pool.cpp +++ b/src/cryptonote_core/tx_pool.cpp @@ -181,7 +181,7 @@ namespace cryptonote } size_t tx_size_limit = get_transaction_size_limit(version); - if (!kept_by_block && blob_size >= tx_size_limit) + if (!kept_by_block && blob_size > tx_size_limit) { LOG_PRINT_L1("transaction is too big: " << blob_size << " bytes, maximum size: " << tx_size_limit); tvc.m_verifivation_failed = true; @@ -1207,7 +1207,7 @@ namespace cryptonote m_txpool_size = 0; m_blockchain.for_all_txpool_txes([this, &remove, tx_size_limit](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata*) { m_txpool_size += meta.blob_size; - if (meta.blob_size >= tx_size_limit) { + if (meta.blob_size > tx_size_limit) { LOG_PRINT_L1("Transaction " << txid << " is too big (" << meta.blob_size << " bytes), removing it from pool"); remove.insert(txid); } diff --git a/src/cryptonote_protocol/cryptonote_protocol_handler.h b/src/cryptonote_protocol/cryptonote_protocol_handler.h index e24c964a5..d7b74c06d 100644 --- a/src/cryptonote_protocol/cryptonote_protocol_handler.h +++ b/src/cryptonote_protocol/cryptonote_protocol_handler.h @@ -1,6 +1,6 @@ /// @file /// @author rfree (current maintainer/user in monero.cc project - most of code is from CryptoNote) -/// @brief This is the orginal cryptonote protocol network-events handler, modified by us +/// @brief This is the original cryptonote protocol network-events handler, modified by us // Copyright (c) 2014-2018, The Monero Project // diff --git a/src/cryptonote_protocol/cryptonote_protocol_handler.inl b/src/cryptonote_protocol/cryptonote_protocol_handler.inl index ff187e8ae..14c3fb298 100644 --- a/src/cryptonote_protocol/cryptonote_protocol_handler.inl +++ b/src/cryptonote_protocol/cryptonote_protocol_handler.inl @@ -1,6 +1,6 @@ /// @file /// @author rfree (current maintainer/user in monero.cc project - most of code is from CryptoNote) -/// @brief This is the orginal cryptonote protocol network-events handler, modified by us +/// @brief This is the original cryptonote protocol network-events handler, modified by us // Copyright (c) 2014-2018, The Monero Project // diff --git a/src/daemon/command_line_args.h b/src/daemon/command_line_args.h index ee6167b6a..efbae488c 100644 --- a/src/daemon/command_line_args.h +++ b/src/daemon/command_line_args.h @@ -31,20 +31,35 @@ #include "common/command_line.h" #include "cryptonote_config.h" +#include "daemonizer/daemonizer.h" namespace daemon_args { std::string const WINDOWS_SERVICE_NAME = "Monero Daemon"; - const command_line::arg_descriptor<std::string> arg_config_file = { + const command_line::arg_descriptor<std::string, false, true> arg_config_file = { "config-file" , "Specify configuration file" - , std::string(CRYPTONOTE_NAME ".conf") + , (daemonizer::get_default_data_dir() / std::string(CRYPTONOTE_NAME ".conf")).string() + , cryptonote::arg_testnet_on + , [](bool testnet, bool defaulted, std::string val) { + if (testnet && defaulted) + return (daemonizer::get_default_data_dir() / "testnet" / + std::string(CRYPTONOTE_NAME ".conf")).string(); + return val; + } }; - const command_line::arg_descriptor<std::string> arg_log_file = { + const command_line::arg_descriptor<std::string, false, true> arg_log_file = { "log-file" , "Specify log file" - , "" + , (daemonizer::get_default_data_dir() / std::string(CRYPTONOTE_NAME ".log")).string() + , cryptonote::arg_testnet_on + , [](bool testnet, bool defaulted, std::string val) { + if (testnet && defaulted) + return (daemonizer::get_default_data_dir() / "testnet" / + std::string(CRYPTONOTE_NAME ".log")).string(); + return val; + } }; const command_line::arg_descriptor<std::size_t> arg_max_log_file_size = { "max-log-file-size" @@ -76,16 +91,16 @@ namespace daemon_args , "127.0.0.1" }; - const command_line::arg_descriptor<std::string> arg_zmq_rpc_bind_port = { + const command_line::arg_descriptor<std::string, false, true> arg_zmq_rpc_bind_port = { "zmq-rpc-bind-port" - , "Port for ZMQ RPC server to listen on" - , std::to_string(config::ZMQ_RPC_DEFAULT_PORT) - }; - - const command_line::arg_descriptor<std::string> arg_zmq_testnet_rpc_bind_port = { - "zmq-testnet-rpc-bind-port" - , "Port for testnet ZMQ RPC server to listen on" - , std::to_string(config::testnet::ZMQ_RPC_DEFAULT_PORT) + , "Port for ZMQ RPC server to listen on" + , std::to_string(config::ZMQ_RPC_DEFAULT_PORT) + , cryptonote::arg_testnet_on + , [](bool testnet, bool defaulted, std::string val) { + if (testnet && defaulted) + return std::to_string(config::testnet::ZMQ_RPC_DEFAULT_PORT); + return val; + } }; } // namespace daemon_args diff --git a/src/daemon/core.h b/src/daemon/core.h index f00dffccc..1ff696bef 100644 --- a/src/daemon/core.h +++ b/src/daemon/core.h @@ -69,8 +69,7 @@ public: std::string get_config_subdir() const { bool testnet = command_line::get_arg(m_vm_HACK, cryptonote::arg_testnet_on); - auto p2p_bind_arg = testnet ? nodetool::arg_testnet_p2p_bind_port : nodetool::arg_p2p_bind_port; - std::string port = command_line::get_arg(m_vm_HACK, p2p_bind_arg); + std::string port = command_line::get_arg(m_vm_HACK, nodetool::arg_p2p_bind_port); if ((!testnet && port != std::to_string(::config::P2P_DEFAULT_PORT)) || (testnet && port != std::to_string(::config::testnet::P2P_DEFAULT_PORT))) { return port; diff --git a/src/daemon/daemon.cpp b/src/daemon/daemon.cpp index 9b15e62ca..8053932fe 100644 --- a/src/daemon/daemon.cpp +++ b/src/daemon/daemon.cpp @@ -77,10 +77,10 @@ public: const auto testnet = command_line::get_arg(vm, cryptonote::arg_testnet_on); const auto restricted = command_line::get_arg(vm, cryptonote::core_rpc_server::arg_restricted_rpc); - const auto main_rpc_port = command_line::get_arg(vm, testnet ? cryptonote::core_rpc_server::arg_testnet_rpc_bind_port : cryptonote::core_rpc_server::arg_rpc_bind_port); + const auto main_rpc_port = command_line::get_arg(vm, cryptonote::core_rpc_server::arg_rpc_bind_port); rpcs.emplace_back(new t_rpc{vm, core, p2p, restricted, testnet, main_rpc_port, "core"}); - auto restricted_rpc_port_arg = testnet ? cryptonote::core_rpc_server::arg_testnet_rpc_restricted_bind_port : cryptonote::core_rpc_server::arg_rpc_restricted_bind_port; + auto restricted_rpc_port_arg = cryptonote::core_rpc_server::arg_rpc_restricted_bind_port; if(!command_line::is_arg_defaulted(vm, restricted_rpc_port_arg)) { auto restricted_rpc_port = command_line::get_arg(vm, restricted_rpc_port_arg); @@ -101,15 +101,7 @@ t_daemon::t_daemon( ) : mp_internals{new t_internals{vm}} { - bool testnet = command_line::get_arg(vm, cryptonote::arg_testnet_on); - if (testnet) - { - zmq_rpc_bind_port = command_line::get_arg(vm, daemon_args::arg_zmq_testnet_rpc_bind_port); - } - else - { - zmq_rpc_bind_port = command_line::get_arg(vm, daemon_args::arg_zmq_rpc_bind_port); - } + zmq_rpc_bind_port = command_line::get_arg(vm, daemon_args::arg_zmq_rpc_bind_port); zmq_rpc_bind_address = command_line::get_arg(vm, daemon_args::arg_zmq_rpc_bind_ip); } diff --git a/src/daemon/main.cpp b/src/daemon/main.cpp index 7bac2d3d8..752a92ba4 100644 --- a/src/daemon/main.cpp +++ b/src/daemon/main.cpp @@ -73,26 +73,20 @@ int main(int argc, char const * argv[]) po::options_description core_settings("Settings"); po::positional_options_description positional_options; { - bf::path default_data_dir = daemonizer::get_default_data_dir(); - bf::path default_testnet_data_dir = {default_data_dir / "testnet"}; - // Misc Options command_line::add_arg(visible_options, command_line::arg_help); command_line::add_arg(visible_options, command_line::arg_version); command_line::add_arg(visible_options, daemon_args::arg_os_version); - bf::path default_conf = default_data_dir / std::string(CRYPTONOTE_NAME ".conf"); - command_line::add_arg(visible_options, daemon_args::arg_config_file, default_conf.string()); + command_line::add_arg(visible_options, daemon_args::arg_config_file); // Settings - bf::path default_log = default_data_dir / std::string(CRYPTONOTE_NAME ".log"); - command_line::add_arg(core_settings, daemon_args::arg_log_file, default_log.string()); + command_line::add_arg(core_settings, daemon_args::arg_log_file); command_line::add_arg(core_settings, daemon_args::arg_log_level); command_line::add_arg(core_settings, daemon_args::arg_max_log_file_size); command_line::add_arg(core_settings, daemon_args::arg_max_concurrency); command_line::add_arg(core_settings, daemon_args::arg_zmq_rpc_bind_ip); command_line::add_arg(core_settings, daemon_args::arg_zmq_rpc_bind_port); - command_line::add_arg(core_settings, daemon_args::arg_zmq_testnet_rpc_bind_port); daemonizer::init_options(hidden_options, visible_options); daemonize::t_executor::init_options(core_settings); @@ -154,10 +148,6 @@ int main(int argc, char const * argv[]) return 0; } - bool testnet_mode = command_line::get_arg(vm, cryptonote::arg_testnet_on); - - auto data_dir_arg = testnet_mode ? cryptonote::arg_testnet_data_dir : cryptonote::arg_data_dir; - // data_dir // default: e.g. ~/.bitmonero/ or ~/.bitmonero/testnet // if data-dir argument given: @@ -166,7 +156,7 @@ int main(int argc, char const * argv[]) // Create data dir if it doesn't exist boost::filesystem::path data_dir = boost::filesystem::absolute( - command_line::get_arg(vm, data_dir_arg)); + command_line::get_arg(vm, cryptonote::arg_data_dir)); // FIXME: not sure on windows implementation default, needs further review //bf::path relative_path_base = daemonizer::get_relative_path_base(vm); @@ -226,10 +216,6 @@ int main(int argc, char const * argv[]) const cryptonote::rpc_args::descriptors arg{}; auto rpc_ip_str = command_line::get_arg(vm, arg.rpc_bind_ip); auto rpc_port_str = command_line::get_arg(vm, cryptonote::core_rpc_server::arg_rpc_bind_port); - if (testnet_mode) - { - rpc_port_str = command_line::get_arg(vm, cryptonote::core_rpc_server::arg_testnet_rpc_bind_port); - } uint32_t rpc_ip; uint16_t rpc_port; diff --git a/src/daemonizer/CMakeLists.txt b/src/daemonizer/CMakeLists.txt index 2c0583c49..2753d0003 100644 --- a/src/daemonizer/CMakeLists.txt +++ b/src/daemonizer/CMakeLists.txt @@ -54,6 +54,10 @@ else() ) endif() +if(CMAKE_BUILD_TYPE STREQUAL "Debug") + add_definitions(-DDEBUG_TMPDIR_LOG=1) +endif() + monero_private_headers(daemonizer ${daemonizer_private_headers}) monero_add_library(daemonizer diff --git a/src/daemonizer/posix_fork.cpp b/src/daemonizer/posix_fork.cpp index 4dff04f3f..3cbee9c51 100644 --- a/src/daemonizer/posix_fork.cpp +++ b/src/daemonizer/posix_fork.cpp @@ -115,6 +115,7 @@ void fork(const std::string & pidfile) quit("Unable to open /dev/null"); } +#ifdef DEBUG_TMPDIR_LOG // Send standard output to a log file. const char *tmpdir = getenv("TMPDIR"); if (!tmpdir) @@ -133,6 +134,7 @@ void fork(const std::string & pidfile) { quit("Unable to dup output descriptor"); } +#endif } } // namespace posix diff --git a/src/device/CMakeLists.txt b/src/device/CMakeLists.txt new file mode 100644 index 000000000..26389220f --- /dev/null +++ b/src/device/CMakeLists.txt @@ -0,0 +1,77 @@ +# Copyright (c) 2014-2017, The Monero Project +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are +# permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this list of +# conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, this list +# of conditions and the following disclaimer in the documentation and/or other +# materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +set(device_sources + device.cpp + device_default.cpp + log.cpp + ) + +if(PCSC_FOUND) + set(device_sources ${device_sources} device_ledger.cpp) +endif() + +set(device_headers + device_declare.hpp + device.hpp + device_default.hpp + log.hpp + ) + +if(PCSC_FOUND) + set(device_headers ${device_headers} device_ledger.hpp) +endif() + +set(device_private_headers) + + +if(PER_BLOCK_CHECKPOINT) + set(Blocks "blocks") +else() + set(Blocks "") +endif() + +monero_private_headers(device + ${device_private_headers}) + +monero_add_library(device + ${device_sources} + ${device_headers} + ${device_private_headers}) + +target_link_libraries(device + PUBLIC + ${PCSC_LIBRARIES} + cncrypto + ringct + ${OPENSSL_CRYPTO_LIBRARIES} + ${GNU_READLINE_LIBRARY} + ${EPEE_READLINE} + PRIVATE + ${Blocks} + ${EXTRA_LIBRARIES}) diff --git a/src/device/device.cpp b/src/device/device.cpp new file mode 100644 index 000000000..080d83c7e --- /dev/null +++ b/src/device/device.cpp @@ -0,0 +1,71 @@ +// Copyright (c) 2017-2018, 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 "device.hpp" +#include "device_default.hpp" +#ifdef HAVE_PCSC +#include "device_ledger.hpp" +#endif +#include "common/scoped_message_writer.h" + + +namespace hw { + + /* ======================================================================= */ + /* SETUP */ + /* ======================================================================= */ + device& get_device(const std::string device_descriptor) { + + struct s_devices { + std::map<std::string, std::unique_ptr<device>> registry; + s_devices() : registry() { + hw::core::register_all(registry); + #ifdef HAVE_PCSC + hw::ledger::register_all(registry); + #endif + }; + }; + + static const s_devices devices; + + auto device = devices.registry.find(device_descriptor); + if (device == devices.registry.end()) { + auto logger = tools::fail_msg_writer(); + logger << "device not found in registry '"<<device_descriptor<<"'\n" << + "known devices:"<<device_descriptor<<"'"; + + for( const auto& sm_pair : devices.registry ) { + logger<< " - " << sm_pair.first ; + } + throw std::runtime_error("device not found: "+ device_descriptor); + } + return *device->second; + } + +}
\ No newline at end of file diff --git a/src/device/device.hpp b/src/device/device.hpp new file mode 100644 index 000000000..bdea7b8f6 --- /dev/null +++ b/src/device/device.hpp @@ -0,0 +1,146 @@ +// Copyright (c) 2017-2018, 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. +// + + +#pragma once + +#include "cryptonote_basic/cryptonote_basic.h" +#include "cryptonote_basic/account.h" +#include "cryptonote_basic/subaddress_index.h" + +#ifndef USE_DEVICE_LEDGER +#define USE_DEVICE_LEDGER 1 +#endif + +#if !defined(HAVE_PCSC) +#undef USE_DEVICE_LEDGER +#define USE_DEVICE_LEDGER 0 +#endif + +#if USE_DEVICE_LEDGER +#define WITH_DEVICE_LEDGER +#endif + +namespace hw { + namespace { + //device funcion not supported + #define dfns() \ + throw std::runtime_error(std::string("device function not supported: ")+ std::string(__FUNCTION__) + \ + std::string(" (device.hpp line ")+std::to_string(__LINE__)+std::string(").")); \ + return false; + } + + + class device { + public: + + device() {} + device(const device &hwdev) {} + virtual ~device() {} + + explicit virtual operator bool() const = 0; + + static const int SIGNATURE_REAL = 0; + static const int SIGNATURE_FAKE = 1; + + + std::string name; + + /* ======================================================================= */ + /* SETUP/TEARDOWN */ + /* ======================================================================= */ + virtual bool set_name(const std::string &name) = 0; + virtual const std::string get_name() const = 0; + + virtual bool init(void) = 0; + virtual bool release() = 0; + + virtual bool connect(void) = 0; + virtual bool disconnect() = 0; + + /* ======================================================================= */ + /* WALLET & ADDRESS */ + /* ======================================================================= */ + virtual bool get_public_address(cryptonote::account_public_address &pubkey) = 0; + virtual bool get_secret_keys(crypto::secret_key &viewkey , crypto::secret_key &spendkey) = 0; + virtual bool generate_chacha_key(const cryptonote::account_keys &keys, crypto::chacha_key &key) = 0; + + /* ======================================================================= */ + /* SUB ADDRESS */ + /* ======================================================================= */ + virtual bool derive_subaddress_public_key(const crypto::public_key &pub, const crypto::key_derivation &derivation, const std::size_t output_index, crypto::public_key &derived_pub) = 0; + virtual bool get_subaddress_spend_public_key(const cryptonote::account_keys& keys, const cryptonote::subaddress_index& index, crypto::public_key &D) = 0; + virtual bool get_subaddress_spend_public_keys(const cryptonote::account_keys &keys, uint32_t account, uint32_t begin, uint32_t end, std::vector<crypto::public_key> &pkeys) = 0; + virtual bool get_subaddress(const cryptonote::account_keys& keys, const cryptonote::subaddress_index &index, cryptonote::account_public_address &address) = 0; + virtual bool get_subaddress_secret_key(const crypto::secret_key &sec, const cryptonote::subaddress_index &index, crypto::secret_key &sub_sec) = 0; + + /* ======================================================================= */ + /* DERIVATION & KEY */ + /* ======================================================================= */ + virtual bool verify_keys(const crypto::secret_key &secret_key, const crypto::public_key &public_key) = 0; + virtual bool scalarmultKey(rct::key & aP, const rct::key &P, const rct::key &a) = 0; + virtual bool scalarmultBase(rct::key &aG, const rct::key &a) = 0; + virtual bool sc_secret_add( crypto::secret_key &r, const crypto::secret_key &a, const crypto::secret_key &b) = 0; + virtual bool generate_keys(crypto::public_key &pub, crypto::secret_key &sec, const crypto::secret_key& recovery_key, bool recover, crypto::secret_key &rng) = 0; + virtual bool generate_key_derivation(const crypto::public_key &pub, const crypto::secret_key &sec, crypto::key_derivation &derivation) = 0; + virtual bool derivation_to_scalar(const crypto::key_derivation &derivation, const size_t output_index, crypto::ec_scalar &res) = 0; + virtual bool derive_secret_key(const crypto::key_derivation &derivation, const std::size_t output_index, const crypto::secret_key &sec, crypto::secret_key &derived_sec) = 0; + virtual bool derive_public_key(const crypto::key_derivation &derivation, const std::size_t output_index, const crypto::public_key &pub, crypto::public_key &derived_pub) = 0; + virtual bool secret_key_to_public_key(const crypto::secret_key &sec, crypto::public_key &pub) = 0; + virtual bool generate_key_image(const crypto::public_key &pub, const crypto::secret_key &sec, crypto::key_image &image) = 0; + + /* ======================================================================= */ + /* TRANSACTION */ + /* ======================================================================= */ + + virtual bool open_tx(crypto::secret_key &tx_key) = 0; + + virtual bool set_signature_mode(unsigned int sig_mode) = 0; + + virtual bool encrypt_payment_id(const crypto::public_key &public_key, const crypto::secret_key &secret_key, crypto::hash8 &payment_id ) = 0; + + virtual bool ecdhEncode(rct::ecdhTuple & unmasked, const rct::key & sharedSec) = 0; + virtual bool ecdhDecode(rct::ecdhTuple & masked, const rct::key & sharedSec) = 0; + + virtual bool add_output_key_mapping(const crypto::public_key &Aout, const crypto::public_key &Bout, size_t real_output_index, + const rct::key &amount_key, const crypto::public_key &out_eph_public_key) = 0; + + + virtual bool mlsag_prehash(const std::string &blob, size_t inputs_size, size_t outputs_size, const rct::keyV &hashes, const rct::ctkeyV &outPk, rct::key &prehash) = 0; + virtual bool mlsag_prepare(const rct::key &H, const rct::key &xx, rct::key &a, rct::key &aG, rct::key &aHP, rct::key &rvII) = 0; + virtual bool mlsag_prepare(rct::key &a, rct::key &aG) = 0; + virtual bool mlsag_hash(const rct::keyV &long_message, rct::key &c) = 0; + virtual bool mlsag_sign(const rct::key &c, const rct::keyV &xx, const rct::keyV &alpha, const size_t rows, const size_t dsRows, rct::keyV &ss) = 0; + + virtual bool close_tx(void) = 0; + } ; + + device& get_device(const std::string device_descriptor) ; +} + diff --git a/src/device/device_declare.hpp b/src/device/device_declare.hpp new file mode 100644 index 000000000..799052ad2 --- /dev/null +++ b/src/device/device_declare.hpp @@ -0,0 +1,42 @@ +// Copyright (c) 2017-2018, 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. +// + +#pragma once + + +//#define DEBUG_HWDEVICE +//#define IODUMMYCRYPT 1 +//#define IONOCRYPT 1 + +namespace hw { + class device; + + device& get_device(std::string device_descriptor); +} + diff --git a/src/device/device_default.cpp b/src/device/device_default.cpp new file mode 100644 index 000000000..a38d96c15 --- /dev/null +++ b/src/device/device_default.cpp @@ -0,0 +1,263 @@ +// Copyright (c) 2017-2018, 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 "device_default.hpp" + +#include "cryptonote_basic/cryptonote_format_utils.h" +#include "ringct/rctOps.h" + +namespace hw { + + namespace core { + + device_default::device_default() { } + + device_default::~device_default() { } + + /* ===================================================================== */ + /* === Misc ==== */ + /* ===================================================================== */ + static inline unsigned char *operator &(crypto::ec_scalar &scalar) { + return &reinterpret_cast<unsigned char &>(scalar); + } + static inline const unsigned char *operator &(const crypto::ec_scalar &scalar) { + return &reinterpret_cast<const unsigned char &>(scalar); + } + + /* ======================================================================= */ + /* SETUP/TEARDOWN */ + /* ======================================================================= */ + bool device_default::set_name(const std::string &name) { + this->name = name; + return true; + } + const std::string device_default::get_name() const { + return this->name; + } + + bool device_default::init(void) { + dfns(); + } + bool device_default::release() { + dfns(); + } + + bool device_default::connect(void) { + dfns(); + } + bool device_default::disconnect() { + dfns(); + } + + /* ======================================================================= */ + /* WALLET & ADDRESS */ + /* ======================================================================= */ + + bool device_default::generate_chacha_key(const cryptonote::account_keys &keys, crypto::chacha_key &key) { + return cryptonote::generate_chacha_key_from_secret_keys(keys, key); + } + bool device_default::get_public_address(cryptonote::account_public_address &pubkey) { + dfns(); + } + bool device_default::get_secret_keys(crypto::secret_key &viewkey , crypto::secret_key &spendkey) { + dfns(); + } + /* ======================================================================= */ + /* SUB ADDRESS */ + /* ======================================================================= */ + + bool device_default::derive_subaddress_public_key(const crypto::public_key &out_key, const crypto::key_derivation &derivation, const std::size_t output_index, crypto::public_key &derived_key) { + return crypto::derive_subaddress_public_key(out_key, derivation, output_index,derived_key); + } + + bool device_default::get_subaddress_spend_public_key(const cryptonote::account_keys& keys, const cryptonote::subaddress_index &index, crypto::public_key &D) { + D = cryptonote::get_subaddress_spend_public_key(keys,index); + return true; + } + + bool device_default::get_subaddress_spend_public_keys(const cryptonote::account_keys &keys, uint32_t account, uint32_t begin, uint32_t end, std::vector<crypto::public_key> &pkeys) { + pkeys = cryptonote::get_subaddress_spend_public_keys(keys, account, begin, end); + return true; + } + + bool device_default::get_subaddress(const cryptonote::account_keys& keys, const cryptonote::subaddress_index &index, cryptonote::account_public_address &address) { + address = cryptonote::get_subaddress(keys,index); + return true; + } + + bool device_default::get_subaddress_secret_key(const crypto::secret_key &a, const cryptonote::subaddress_index &index, crypto::secret_key &m) { + m = cryptonote::get_subaddress_secret_key(a,index); + return true; + } + + /* ======================================================================= */ + /* DERIVATION & KEY */ + /* ======================================================================= */ + + bool device_default::verify_keys(const crypto::secret_key &secret_key, const crypto::public_key &public_key) { + return cryptonote::verify_keys(secret_key, public_key); + } + + bool device_default::scalarmultKey(rct::key & aP, const rct::key &P, const rct::key &a) { + rct::scalarmultKey(aP, P,a); + return true; + } + + bool device_default::scalarmultBase(rct::key &aG, const rct::key &a) { + rct::scalarmultBase(aG,a); + return true; + } + + bool device_default::sc_secret_add(crypto::secret_key &r, const crypto::secret_key &a, const crypto::secret_key &b) { + sc_add(&r, &a, &b); + return true; + } + + bool device_default::generate_keys(crypto::public_key &pub, crypto::secret_key &sec, const crypto::secret_key& recovery_key, bool recover, crypto::secret_key &rng) { + rng = crypto::generate_keys(pub, sec, recovery_key, recover); + return true; + } + + bool device_default::generate_key_derivation(const crypto::public_key &key1, const crypto::secret_key &key2, crypto::key_derivation &derivation) { + return crypto::generate_key_derivation(key1, key2, derivation); + } + + bool device_default::derivation_to_scalar(const crypto::key_derivation &derivation, const size_t output_index, crypto::ec_scalar &res){ + crypto::derivation_to_scalar(derivation,output_index, res); + return true; + } + + bool device_default::derive_secret_key(const crypto::key_derivation &derivation, const std::size_t output_index, const crypto::secret_key &base, crypto::secret_key &derived_key){ + crypto::derive_secret_key(derivation, output_index, base, derived_key); + return true; + } + + bool device_default::derive_public_key(const crypto::key_derivation &derivation, const std::size_t output_index, const crypto::public_key &base, crypto::public_key &derived_key){ + return crypto::derive_public_key(derivation, output_index, base, derived_key); + } + + bool device_default::secret_key_to_public_key(const crypto::secret_key &sec, crypto::public_key &pub) { + return crypto::secret_key_to_public_key(sec,pub); + } + + bool device_default::generate_key_image(const crypto::public_key &pub, const crypto::secret_key &sec, crypto::key_image &image){ + crypto::generate_key_image(pub, sec,image); + return true; + } + + /* ======================================================================= */ + /* TRANSACTION */ + /* ======================================================================= */ + + bool device_default::open_tx(crypto::secret_key &tx_key) { + cryptonote::keypair txkey = cryptonote::keypair::generate(); + tx_key = txkey.sec; + return true; + } + + + bool device_default::add_output_key_mapping(const crypto::public_key &Aout, const crypto::public_key &Bout, size_t real_output_index, + const rct::key &amount_key, const crypto::public_key &out_eph_public_key) { + return true; + } + + bool device_default::set_signature_mode(unsigned int sig_mode) { + return true; + } + + bool device_default::encrypt_payment_id(const crypto::public_key &public_key, const crypto::secret_key &secret_key, crypto::hash8 &payment_id ) { + return cryptonote::encrypt_payment_id(payment_id, public_key, secret_key); + } + + bool device_default::ecdhEncode(rct::ecdhTuple & unmasked, const rct::key & sharedSec) { + rct::ecdhEncode(unmasked, sharedSec); + return true; + } + + bool device_default::ecdhDecode(rct::ecdhTuple & masked, const rct::key & sharedSec) { + rct::ecdhDecode(masked, sharedSec); + return true; + } + + bool device_default::mlsag_prepare(const rct::key &H, const rct::key &xx, + rct::key &a, rct::key &aG, rct::key &aHP, rct::key &II) { + rct::skpkGen(a, aG); + rct::scalarmultKey(aHP, H, a); + rct::scalarmultKey(II, H, xx); + return true; + } + bool device_default::mlsag_prepare(rct::key &a, rct::key &aG) { + rct::skpkGen(a, aG); + return true; + } + bool device_default::mlsag_prehash(const std::string &blob, size_t inputs_size, size_t outputs_size, const rct::keyV &hashes, const rct::ctkeyV &outPk, rct::key &prehash) { + prehash = rct::cn_fast_hash(hashes); + return true; + } + + + bool device_default::mlsag_hash(const rct::keyV &toHash, rct::key &c_old) { + c_old = rct::hash_to_scalar(toHash); + return true; + } + + bool device_default::mlsag_sign(const rct::key &c, const rct::keyV &xx, const rct::keyV &alpha, const size_t rows, const size_t dsRows, rct::keyV &ss ) { + CHECK_AND_ASSERT_THROW_MES(dsRows<=rows, "dsRows greater than rows"); + CHECK_AND_ASSERT_THROW_MES(xx.size() == rows, "xx size does not match rows"); + CHECK_AND_ASSERT_THROW_MES(alpha.size() == rows, "alpha size does not match rows"); + CHECK_AND_ASSERT_THROW_MES(ss.size() == rows, "ss size does not match rows"); + for (size_t j = 0; j < rows; j++) { + sc_mulsub(ss[j].bytes, c.bytes, xx[j].bytes, alpha[j].bytes); + } + return true; + } + + bool device_default::close_tx() { + return true; + } + + + /* ---------------------------------------------------------- */ + static device_default *default_core_device = NULL; + void register_all(std::map<std::string, std::unique_ptr<device>> ®istry) { + if (!default_core_device) { + default_core_device = new device_default(); + default_core_device->set_name("default_core_device"); + + } + registry.insert(std::make_pair("default",default_core_device)); + } + + + } + +}
\ No newline at end of file diff --git a/src/device/device_default.hpp b/src/device/device_default.hpp new file mode 100644 index 000000000..f5b158a3b --- /dev/null +++ b/src/device/device_default.hpp @@ -0,0 +1,126 @@ +// Copyright (c) 2017-2018, 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. +// + +#pragma once + +#include "device.hpp" + +namespace hw { + + namespace core { + + void register_all(std::map<std::string, std::unique_ptr<device>> ®istry); + + class device_default : public hw::device { + public: + device_default(); + ~device_default(); + + device_default(const device_default &device) = delete; + device_default& operator=(const device_default &device) = delete; + + explicit operator bool() const override { return false; }; + + /* ======================================================================= */ + /* SETUP/TEARDOWN */ + /* ======================================================================= */ + bool set_name(const std::string &name) override; + const std::string get_name() const override; + + bool init(void) override; + bool release() override; + + bool connect(void) override; + bool disconnect() override; + + /* ======================================================================= */ + /* WALLET & ADDRESS */ + /* ======================================================================= */ + bool get_public_address(cryptonote::account_public_address &pubkey) override; + bool get_secret_keys(crypto::secret_key &viewkey , crypto::secret_key &spendkey) override; + bool generate_chacha_key(const cryptonote::account_keys &keys, crypto::chacha_key &key) override; + + /* ======================================================================= */ + /* SUB ADDRESS */ + /* ======================================================================= */ + bool derive_subaddress_public_key(const crypto::public_key &pub, const crypto::key_derivation &derivation, const std::size_t output_index, crypto::public_key &derived_pub) override; + bool get_subaddress_spend_public_key(const cryptonote::account_keys& keys, const cryptonote::subaddress_index& index, crypto::public_key &D) override; + bool get_subaddress_spend_public_keys(const cryptonote::account_keys &keys, uint32_t account, uint32_t begin, uint32_t end, std::vector<crypto::public_key> &pkeys) override; + bool get_subaddress(const cryptonote::account_keys& keys, const cryptonote::subaddress_index &index, cryptonote::account_public_address &address) override; + bool get_subaddress_secret_key(const crypto::secret_key &sec, const cryptonote::subaddress_index &index, crypto::secret_key &sub_sec) override; + + /* ======================================================================= */ + /* DERIVATION & KEY */ + /* ======================================================================= */ + bool verify_keys(const crypto::secret_key &secret_key, const crypto::public_key &public_key) override; + bool scalarmultKey(rct::key & aP, const rct::key &P, const rct::key &a) override; + bool scalarmultBase(rct::key &aG, const rct::key &a) override; + bool sc_secret_add(crypto::secret_key &r, const crypto::secret_key &a, const crypto::secret_key &b) override; + bool generate_keys(crypto::public_key &pub, crypto::secret_key &sec, const crypto::secret_key& recovery_key, bool recover, crypto::secret_key &rng) override; + bool generate_key_derivation(const crypto::public_key &pub, const crypto::secret_key &sec, crypto::key_derivation &derivation) override; + bool derivation_to_scalar(const crypto::key_derivation &derivation, const size_t output_index, crypto::ec_scalar &res) override; + bool derive_secret_key(const crypto::key_derivation &derivation, const std::size_t output_index, const crypto::secret_key &sec, crypto::secret_key &derived_sec) override; + bool derive_public_key(const crypto::key_derivation &derivation, const std::size_t output_index, const crypto::public_key &pub, crypto::public_key &derived_pub) override; + bool secret_key_to_public_key(const crypto::secret_key &sec, crypto::public_key &pub) override; + bool generate_key_image(const crypto::public_key &pub, const crypto::secret_key &sec, crypto::key_image &image) override; + + + /* ======================================================================= */ + /* TRANSACTION */ + /* ======================================================================= */ + + bool open_tx(crypto::secret_key &tx_key) override; + + //bool get_additional_key(const bool subaddr, cryptonote::keypair &additional_txkey) override; + bool set_signature_mode(unsigned int sig_mode) override; + + bool encrypt_payment_id(const crypto::public_key &public_key, const crypto::secret_key &secret_key, crypto::hash8 &payment_id ) override; + + bool ecdhEncode(rct::ecdhTuple & unmasked, const rct::key & sharedSec) override; + bool ecdhDecode(rct::ecdhTuple & masked, const rct::key & sharedSec) override; + + bool add_output_key_mapping(const crypto::public_key &Aout, const crypto::public_key &Bout, size_t real_output_index, + const rct::key &amount_key, const crypto::public_key &out_eph_public_key) override; + + + bool mlsag_prehash(const std::string &blob, size_t inputs_size, size_t outputs_size, const rct::keyV &hashes, const rct::ctkeyV &outPk, rct::key &prehash) override; + bool mlsag_prepare(const rct::key &H, const rct::key &xx, rct::key &a, rct::key &aG, rct::key &aHP, rct::key &rvII) override; + bool mlsag_prepare(rct::key &a, rct::key &aG) override; + bool mlsag_hash(const rct::keyV &long_message, rct::key &c) override; + bool mlsag_sign(const rct::key &c, const rct::keyV &xx, const rct::keyV &alpha, const size_t rows, const size_t dsRows, rct::keyV &ss) override; + + bool close_tx(void) override; + }; + + } + + + +} + diff --git a/src/device/device_ledger.cpp b/src/device/device_ledger.cpp new file mode 100644 index 000000000..e8eb7cc8b --- /dev/null +++ b/src/device/device_ledger.cpp @@ -0,0 +1,2069 @@ +// Copyright (c) 2017-2018, 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 "device_ledger.hpp" +#include "log.hpp" +#include "ringct/rctOps.h" + + + +namespace hw { + + namespace ledger { + + #ifdef WITH_DEVICE_LEDGER + + #undef MONERO_DEFAULT_LOG_CATEGORY + #define MONERO_DEFAULT_LOG_CATEGORY "device.ledger" + + /* ===================================================================== */ + /* === Debug ==== */ + /* ===================================================================== */ + void set_apdu_verbose(bool verbose) { + apdu_verbose = verbose; + } + + #define TRACKD MTRACE("hw") + #define ASSERT_RV(rv) CHECK_AND_ASSERT_THROW_MES((rv)==SCARD_S_SUCCESS, "Fail SCard API : (" << (rv) << ") "<< pcsc_stringify_error(rv)<<" Device="<<this->id<<", hCard="<<hCard<<", hContext="<<hContext); + #define ASSERT_SW(sw,ok,msk) CHECK_AND_ASSERT_THROW_MES(((sw)&(mask))==(ok), "Wrong Device Status : SW=" << std::hex << (sw) << " (EXPECT=" << std::hex << (ok) << ", MASK=" << std::hex << (mask) << ")") ; + #define ASSERT_T0(exp) CHECK_AND_ASSERT_THROW_MES(exp, "Protocol assert failure: "#exp ) ; + + #ifdef DEBUG_HWDEVICE + #define DEVICE_CONTROLE :controle_device(hw::get_device("default")) + crypto::secret_key viewkey; + crypto::secret_key spendkey; + #else + #define DEVICE_CONTROLE + #endif + + /* ===================================================================== */ + /* === Keymap ==== */ + /* ===================================================================== */ + + ABPkeys::ABPkeys(const rct::key& A, const rct::key& B, size_t real_output_index, const rct::key& P, const rct::key& AK) { + Aout = A; + Bout = B; + index = real_output_index; + Pout = P; + AKout = AK; + } + + ABPkeys::ABPkeys(const ABPkeys& keys) { + Aout = keys.Aout; + Bout = keys.Bout; + index = keys.index; + Pout = keys.Pout; + AKout = keys.AKout; + } + + bool Keymap::find(const rct::key& P, ABPkeys& keys) const { + size_t sz = ABP.size(); + for (size_t i=0; i<sz; i++) { + if (ABP[i].Pout == P) { + keys = ABP[i]; + return true; + } + } + return false; + } + + void Keymap::add(const ABPkeys& keys) { + ABP.push_back(keys); + } + + void Keymap::clear() { + ABP.clear(); + } + + #ifdef DEBUG_HWDEVICE + void Keymap::log() { + log_message("keymap", "content"); + size_t sz = ABP.size(); + for (size_t i=0; i<sz; i++) { + log_message(" keymap", std::to_string(i)); + log_hexbuffer(" Aout", (char*)ABP[i].Aout.bytes, 32); + log_hexbuffer(" Bout", (char*)ABP[i].Bout.bytes, 32); + log_message (" index", std::to_string(ABP[i].index)); + log_hexbuffer(" Pout", (char*)ABP[i].Pout.bytes, 32); + } + } + #endif + + /* ===================================================================== */ + /* === Device ==== */ + /* ===================================================================== */ + + static int device_id = 0; + + #define INS_NONE 0x00 + #define INS_RESET 0x02 + + #define INS_GET_KEY 0x20 + #define INS_PUT_KEY 0x22 + #define INS_GET_CHACHA8_PREKEY 0x24 + #define INS_VERIFY_KEY 0x26 + + #define INS_SECRET_KEY_TO_PUBLIC_KEY 0x30 + #define INS_GEN_KEY_DERIVATION 0x32 + #define INS_DERIVATION_TO_SCALAR 0x34 + #define INS_DERIVE_PUBLIC_KEY 0x36 + #define INS_DERIVE_SECRET_KEY 0x38 + #define INS_GEN_KEY_IMAGE 0x3A + #define INS_SECRET_KEY_ADD 0x3C + #define INS_SECRET_KEY_SUB 0x3E + #define INS_GENERATE_KEYPAIR 0x40 + #define INS_SECRET_SCAL_MUL_KEY 0x42 + #define INS_SECRET_SCAL_MUL_BASE 0x44 + + #define INS_DERIVE_SUBADDRESS_PUBLIC_KEY 0x46 + #define INS_GET_SUBADDRESS 0x48 + #define INS_GET_SUBADDRESS_SPEND_PUBLIC_KEY 0x4A + #define INS_GET_SUBADDRESS_SECRET_KEY 0x4C + + #define INS_OPEN_TX 0x70 + #define INS_SET_SIGNATURE_MODE 0x72 + #define INS_GET_ADDITIONAL_KEY 0x74 + #define INS_STEALTH 0x76 + #define INS_BLIND 0x78 + #define INS_UNBLIND 0x7A + #define INS_VALIDATE 0x7C + #define INS_MLSAG 0x7E + #define INS_CLOSE_TX 0x80 + + + #define INS_GET_RESPONSE 0xc0 + + + void device_ledger::logCMD() { + if (apdu_verbose) { + char strbuffer[1024]; + sprintf(strbuffer, "%.02x %.02x %.02x %.02x %.02x ", + this->buffer_send[0], + this->buffer_send[1], + this->buffer_send[2], + this->buffer_send[3], + this->buffer_send[4] + ); + buffer_to_str(strbuffer+strlen(strbuffer), sizeof(strbuffer), (char*)(this->buffer_send+5), this->length_send-5); + MDEBUG( "CMD :" << strbuffer); + } + } + + void device_ledger::logRESP() { + if (apdu_verbose) { + char strbuffer[1024]; + sprintf(strbuffer, "%.02x%.02x ", + this->buffer_recv[this->length_recv-2], + this->buffer_recv[this->length_recv-1] + ); + buffer_to_str(strbuffer+strlen(strbuffer), sizeof(strbuffer), (char*)(this->buffer_recv), this->length_recv-2); + MDEBUG( "RESP :" << strbuffer); + + } + } + + /* -------------------------------------------------------------- */ + device_ledger::device_ledger() DEVICE_CONTROLE { + this->id = device_id++; + this->hCard = 0; + this->hContext = 0; + this->reset_buffer(); + MDEBUG( "Device "<<this->id <<" Created"); + } + + device_ledger::~device_ledger() { + this->release(); + MDEBUG( "Device "<<this->id <<" Destroyed"); + } + + + /* ======================================================================= */ + /* MISC */ + /* ======================================================================= */ + bool device_ledger::reset() { + + lock_device(); + try { + int offset; + reset_buffer(); + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_RESET; + this->buffer_send[2] = 0x00; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = 0x00; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + unsigned int device_ledger::exchange(unsigned int ok, unsigned int mask) { + LONG rv; + int sw; + + ASSERT_T0(this->length_send <= BUFFER_SEND_SIZE); + logCMD(); + this->length_recv = BUFFER_RECV_SIZE; + rv = SCardTransmit(this->hCard, + SCARD_PCI_T0, this->buffer_send, this->length_send, + NULL, this->buffer_recv, &this->length_recv); + ASSERT_RV(rv); + ASSERT_T0(this->length_recv <= BUFFER_RECV_SIZE); + logRESP(); + + sw = (this->buffer_recv[this->length_recv-2]<<8) | this->buffer_recv[this->length_recv-1]; + ASSERT_SW(sw,ok,msk); + return sw; + } + + void device_ledger::reset_buffer() { + this->length_send = 0; + memset(this->buffer_send, 0, BUFFER_SEND_SIZE); + this->length_recv = 0; + memset(this->buffer_recv, 0, BUFFER_RECV_SIZE); + } + + void device_ledger::lock_device() { + MDEBUG( "Ask for LOCKING for device "<<this->id); + device_locker.lock(); + MDEBUG( "Device "<<this->id << " LOCKed"); + } + void device_ledger::unlock_device() { + try { + MDEBUG( "Ask for UNLOCKING for device "<<this->id); + } catch (...) { + } + device_locker.unlock(); + MDEBUG( "Device "<<this->id << " UNLOCKed"); + } + void device_ledger::lock_tx() { + MDEBUG( "Ask for LOCKING for TX "<<this->id); + //tx_locker.lock(); + MDEBUG( "TX "<<this->id << " LOCKed"); + } + void device_ledger::unlock_tx() { + MDEBUG( "Ask for UNLOCKING for TX "<<this->id); + //tx_locker.unlock(); + MDEBUG( "TX "<<this->id << " UNLOCKed"); + } + + /* ======================================================================= */ + /* SETUP/TEARDOWN */ + /* ======================================================================= */ + + bool device_ledger::set_name(const std::string & name) { + this->name = name; + return true; + } + + const std::string device_ledger::get_name() const { + if (this->full_name.empty() || (this->hCard == 0)) { + return std::string("<disconnected:").append(this->name).append(">"); + } + return this->full_name; + } + + bool device_ledger::init(void) { + LONG rv; + this->release(); + rv = SCardEstablishContext(SCARD_SCOPE_SYSTEM,0,0, &this->hContext); + ASSERT_RV(rv); + MDEBUG( "Device "<<this->id <<" SCardContext created: hContext="<<this->hContext); + this->hCard = 0; + return true; + } + + bool device_ledger::release() { + this->disconnect(); + if (this->hContext) { + SCardReleaseContext(this->hContext); + MDEBUG( "Device "<<this->id <<" SCardContext released: hContext="<<this->hContext); + this->hContext = 0; + this->full_name.clear(); + } + return true; + } + + bool device_ledger::connect(void) { + BYTE pbAtr[MAX_ATR_SIZE]; + LPSTR mszReaders; + DWORD dwReaders; + LONG rv; + DWORD dwState, dwProtocol, dwAtrLen, dwReaderLen; + + this->disconnect(); +#ifdef SCARD_AUTOALLOCATE + dwReaders = SCARD_AUTOALLOCATE; + rv = SCardListReaders(this->hContext, NULL, (LPSTR)&mszReaders, &dwReaders); +#else + dwReaders = 0; + rv = SCardListReaders(this->hContext, NULL, NULL, &dwReaders); + if (rv != SCARD_S_SUCCESS) + return false; + mszReaders = (LPSTR)calloc(dwReaders, sizeof(char)); + rv = SCardListReaders(this->hContext, NULL, mszReaders, &dwReaders); +#endif + if (rv == SCARD_S_SUCCESS) { + char* p; + const char* prefix = this->name.c_str(); + + p = mszReaders; + MDEBUG( "Looking for " << std::string(prefix)); + while (*p) { + MDEBUG( "Device Found: " << std::string(p)); + if ((strncmp(prefix, p, strlen(prefix))==0)) { + MDEBUG( "Device Match: " << std::string(p)); + if ((rv = SCardConnect(this->hContext, + p, SCARD_SHARE_EXCLUSIVE, SCARD_PROTOCOL_T0, + &this->hCard, &dwProtocol))!=SCARD_S_SUCCESS) { + break; + } + MDEBUG( "Device "<<this->id <<" Connected: hCard="<<this->hCard); + dwAtrLen = sizeof(pbAtr); + if ((rv = SCardStatus(this->hCard, NULL, &dwReaderLen, &dwState, &dwProtocol, pbAtr, &dwAtrLen))!=SCARD_S_SUCCESS) { + break; + } + MDEBUG( "Device "<<this->id <<" Status OK"); + rv = SCARD_S_SUCCESS ; + this->full_name = std::string(p); + break; + } + p += strlen(p) +1; + } + } + + if (mszReaders) { + #ifdef SCARD_AUTOALLOCATE + SCardFreeMemory(this->hContext, mszReaders); + #else + free(mszReaders); + #endif + mszReaders = NULL; + } + if (rv != SCARD_S_SUCCESS) { + if ( hCard) { + SCardDisconnect(this->hCard, SCARD_UNPOWER_CARD); + MDEBUG( "Device "<<this->id <<" disconnected: hCard="<<this->hCard); + this->hCard = 0; + } + } + ASSERT_RV(rv); + + this->reset(); + #ifdef DEBUG_HWDEVICE + cryptonote::account_public_address pubkey; + this->get_public_address(pubkey); + crypto::secret_key vkey; + crypto::secret_key skey; + this->get_secret_keys(vkey,skey); + #endif + + return rv==SCARD_S_SUCCESS; + } + + bool device_ledger::disconnect() { + if (this->hCard) { + SCardDisconnect(this->hCard, SCARD_UNPOWER_CARD); + MDEBUG( "Device "<<this->id <<" disconnected: hCard="<<this->hCard); + this->hCard = 0; + } + return true; + } + + + /* ======================================================================= */ + /* WALLET & ADDRESS */ + /* ======================================================================= */ + + bool device_ledger::get_secret_keys(crypto::secret_key &viewkey , crypto::secret_key &spendkey) { + memset(viewkey.data, 0x00, 32); + memset(spendkey.data, 0xFF, 32); + return true; + } + + /* Application API */ + bool device_ledger::get_public_address(cryptonote::account_public_address &pubkey){ + + lock_device(); + try { + int offset; + reset_buffer(); + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_GET_KEY; + this->buffer_send[2] = 0x01; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = 0x00; + offset += 1; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + memmove(pubkey.m_view_public_key.data, this->buffer_recv, 32); + memmove(pubkey.m_spend_public_key.data, this->buffer_recv+32, 32); + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + #ifdef DEBUG_HWDEVICE + bool device_ledger::get_secret_keys(crypto::secret_key &viewkey , crypto::secret_key &spendkey) { + lock_device(); + try { + //spcialkey, normal conf handled in decrypt + int offset; + reset_buffer(); + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_GET_KEY; + this->buffer_send[2] = 0x02; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = 0x00; + offset += 1; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + //clear key + memmove(ledger::viewkey.data, this->buffer_recv+64, 32); + memmove(ledger::spendkey.data, this->buffer_recv+96, 32); + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + #endif + + bool device_ledger::generate_chacha_key(const cryptonote::account_keys &keys, crypto::chacha_key &key) { + lock_device(); + try { + int offset; + + #ifdef DEBUG_HWDEVICE + const cryptonote::account_keys keys_x = decrypt(keys); + crypto::chacha_key key_x; + this->controle_device.generate_chacha_key(keys_x, key_x); + #endif + + reset_buffer(); + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_GET_CHACHA8_PREKEY; + this->buffer_send[2] = 0x00; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = 0x00; + offset += 1; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + char prekey[200]; + memmove(prekey, &this->buffer_recv[0], 200); + crypto::generate_chacha_key(&prekey[0], sizeof(prekey), key, true); + + #ifdef DEBUG_HWDEVICE + hw::ledger::check32("generate_chacha_key", "key", (char*)key_x.data(), (char*)key.data()); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + /* ======================================================================= */ + /* SUB ADDRESS */ + /* ======================================================================= */ + + bool device_ledger::derive_subaddress_public_key(const crypto::public_key &pub, const crypto::key_derivation &derivation, const std::size_t output_index, crypto::public_key &derived_pub){ + + lock_device(); + try { + int offset =0; + unsigned char options = 0; + + #ifdef DEBUG_HWDEVICE + const crypto::public_key pub_x = pub; + const crypto::key_derivation derivation_x = hw::ledger::decrypt(derivation); + const std::size_t output_index_x = output_index; + crypto::public_key derived_pub_x; + this->controle_device.derive_subaddress_public_key(pub_x, derivation_x,output_index_x,derived_pub_x); + #endif + + reset_buffer(); + + options = 0; + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_DERIVE_SUBADDRESS_PUBLIC_KEY; + this->buffer_send[2] = 0x00; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = options; + offset += 1; + //pub + memmove(this->buffer_send+offset, pub.data, 32); + offset += 32; + //derivation + memmove(this->buffer_send+offset, derivation.data, 32); + offset += 32; + //index + this->buffer_send[offset+0] = output_index>>24; + this->buffer_send[offset+1] = output_index>>16; + this->buffer_send[offset+2] = output_index>>8; + this->buffer_send[offset+3] = output_index>>0; + offset += 4; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + //pub key + memmove(derived_pub.data, &this->buffer_recv[0], 32); + + #ifdef DEBUG_HWDEVICE + hw::ledger::check32("derive_subaddress_public_key", "derived_pub", derived_pub_x.data, derived_pub.data); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + bool device_ledger::get_subaddress_spend_public_key(const cryptonote::account_keys& keys, const cryptonote::subaddress_index &index, crypto::public_key &D) { + lock_device(); + try { + int offset =0; + unsigned char options = 0; + + #ifdef DEBUG_HWDEVICE + const cryptonote::account_keys keys_x = hw::ledger::decrypt(keys); + const cryptonote::subaddress_index index_x = index; + crypto::public_key D_x; + this->controle_device.get_subaddress_spend_public_key(keys_x, index_x, D_x); + #endif + + if (index.is_zero()) { + D = keys.m_account_address.m_spend_public_key; + } else { + + reset_buffer(); + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_GET_SUBADDRESS_SPEND_PUBLIC_KEY; + this->buffer_send[2] = 0x00; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = 0x00; + offset += 1; + //index + static_assert(sizeof(cryptonote::subaddress_index) == 8, "cryptonote::subaddress_index shall be 8 bytes length"); + memmove(this->buffer_send+offset, &index, sizeof(cryptonote::subaddress_index)); + offset +=8 ; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + memmove(D.data, &this->buffer_recv[0], 32); + } + + #ifdef DEBUG_HWDEVICE + hw::ledger::check32("get_subaddress_spend_public_key", "D", D_x.data, D.data); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + bool device_ledger::get_subaddress_spend_public_keys(const cryptonote::account_keys &keys, uint32_t account, uint32_t begin, uint32_t end, std::vector<crypto::public_key> &pkeys) { + cryptonote::subaddress_index index = {account, begin}; + crypto::public_key D; + for (uint32_t idx = begin; idx < end; ++idx) { + index.minor = idx; + this->get_subaddress_spend_public_key(keys, index, D); + pkeys.push_back(D); + } + return true; + } + + bool device_ledger::get_subaddress(const cryptonote::account_keys& keys, const cryptonote::subaddress_index &index, cryptonote::account_public_address &address) { + lock_device(); + try { + int offset =0; + unsigned char options = 0; + + #ifdef DEBUG_HWDEVICE + const cryptonote::account_keys keys_x = hw::ledger::decrypt(keys); + const cryptonote::subaddress_index index_x = index; + cryptonote::account_public_address address_x; + this->controle_device.get_subaddress(keys_x, index_x, address_x); + #endif + + if (index.is_zero()) { + address = keys.m_account_address; + } else { + reset_buffer(); + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_GET_SUBADDRESS; + this->buffer_send[2] = 0x00; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = 0x00; + offset += 1; + //index + static_assert(sizeof(cryptonote::subaddress_index) == 8, "cryptonote::subaddress_index shall be 8 bytes length"); + memmove(this->buffer_send+offset, &index, sizeof(cryptonote::subaddress_index)); + offset +=8 ; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + memmove(address.m_view_public_key.data, &this->buffer_recv[0], 32); + memmove(address.m_spend_public_key.data, &this->buffer_recv[32], 32); + } + + #ifdef DEBUG_HWDEVICE + hw::ledger::check32("get_subaddress", "address.m_view_public_key.data", address_x.m_view_public_key.data, address.m_view_public_key.data); + hw::ledger::check32("get_subaddress", "address.m_spend_public_key.data", address_x.m_spend_public_key.data, address.m_spend_public_key.data); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + bool device_ledger::get_subaddress_secret_key(const crypto::secret_key &sec, const cryptonote::subaddress_index &index, crypto::secret_key &sub_sec) { + lock_device(); + try { + int offset =0; + unsigned char options = 0; + + #ifdef DEBUG_HWDEVICE + const crypto::secret_key sec_x = hw::ledger::decrypt(sec); + const cryptonote::subaddress_index index_x = index; + crypto::secret_key sub_sec_x; + this->controle_device.get_subaddress_secret_key(sec_x, index_x, sub_sec_x); + #endif + + reset_buffer(); + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_GET_SUBADDRESS_SECRET_KEY; + this->buffer_send[2] = 0x00; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = options; + offset += 1; + //sec + memmove(this->buffer_send+offset, sec.data, 32); + offset += 32; + //index + static_assert(sizeof(cryptonote::subaddress_index) == 8, "cryptonote::subaddress_index shall be 8 bytes length"); + memmove(this->buffer_send+offset, &index, sizeof(cryptonote::subaddress_index)); + offset +=8 ; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + memmove(sub_sec.data, &this->buffer_recv[0], 32); + + #ifdef DEBUG_HWDEVICE + crypto::secret_key sub_sec_clear = hw::ledger::decrypt(sub_sec); + hw::ledger::check32("get_subaddress_secret_key", "sub_sec", sub_sec_x.data, sub_sec_clear.data); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + /* ======================================================================= */ + /* DERIVATION & KEY */ + /* ======================================================================= */ + + bool device_ledger::verify_keys(const crypto::secret_key &secret_key, const crypto::public_key &public_key) { + lock_device(); + try { + int offset =0,sw; + unsigned char options = 0; + reset_buffer(); + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_VERIFY_KEY; + this->buffer_send[2] = 0x00; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = 0x00; + offset += 1; + //sec + memmove(this->buffer_send+offset, secret_key.data, 32); + offset += 32; + //pub + memmove(this->buffer_send+offset, public_key.data, 32); + offset += 32; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + uint32_t verified = + this->buffer_recv[0] << 24 | + this->buffer_recv[1] << 16 | + this->buffer_recv[2] << 8 | + this->buffer_recv[3] << 0 ; + + unlock_device(); + return verified == 1; + }catch (...) { + unlock_device(); + throw; + } + return false; + } + + bool device_ledger::scalarmultKey(rct::key & aP, const rct::key &P, const rct::key &a) { + lock_device(); + try { + int offset =0; + unsigned char options = 0; + + #ifdef DEBUG_HWDEVICE + const rct::key pub_x = pub; + const rct::key sec_x = hw::ledger::decrypt(sec); + rct::key mulkey_x; + this->controle_device.scalarmultKey(pub_x, sec_x, mulkey_x); + #endif + + reset_buffer(); + + options = 0; + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_SECRET_SCAL_MUL_KEY; + this->buffer_send[2] = 0x00; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = options; + offset += 1; + //pub + memmove(this->buffer_send+offset, P.bytes, 32); + offset += 32; + //sec + memmove(this->buffer_send+offset, a.bytes, 32); + offset += 32; + + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + //pub key + memmove(aP.bytes, &this->buffer_recv[0], 32); + + #ifdef DEBUG_HWDEVICE + hw::ledger::check32("scalarmultKey", "mulkey", (char*)mulkey_x.bytes, (char*)mulkey.bytes); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + bool device_ledger::scalarmultBase(rct::key &aG, const rct::key &a) { + lock_device(); + try { + int offset =0; + unsigned char options = 0; + + #ifdef DEBUG_HWDEVICE + const rct::key sec_x = hw::ledger::decrypt(sec); + rct::key mulkey_x; + this->controle_device.scalarmultBase(sec_x, mulkey_x); + #endif + + reset_buffer(); + + options = 0; + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_SECRET_SCAL_MUL_BASE; + this->buffer_send[2] = 0x00; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = options; + offset += 1; + //sec + memmove(this->buffer_send+offset, a.bytes, 32); + offset += 32; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + //pub key + memmove(aG.bytes, &this->buffer_recv[0], 32); + + #ifdef DEBUG_HWDEVICE + hw::ledger::check32("scalarmultBase", "mulkey", (char*)mulkey_x.bytes, (char*)mulkey.bytes); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + bool device_ledger::sc_secret_add( crypto::secret_key &r, const crypto::secret_key &a, const crypto::secret_key &b) { + + lock_device(); + try { + int offset =0; + unsigned char options = 0; + + #ifdef DEBUG_HWDEVICE + const crypto::secret_key a_x = hw::ledger::decrypt(a); + const crypto::secret_key b_x = hw::ledger::decrypt(b); + crypto::secret_key r_x; + this->controle_device.sc_secret_add(r_x, a_x, b_x); + #endif + + reset_buffer(); + + options = 0; + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_SECRET_KEY_ADD; + this->buffer_send[2] = 0x00; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = options; + offset += 1; + //sec key + memmove(this->buffer_send+offset, a.data, 32); + offset += 32; + //sec key + memmove(this->buffer_send+offset, b.data, 32); + offset += 32; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + //pub key + memmove(r.data, &this->buffer_recv[0], 32); + + #ifdef DEBUG_HWDEVICE + crypto::secret_key r_clear = hw::ledger::decrypt(r); + hw::ledger::check32("sc_secret_add", "r", r_x.data, r_clear.data); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + bool device_ledger::generate_keys(crypto::public_key &pub, crypto::secret_key &sec, const crypto::secret_key& recovery_key, bool recover, crypto::secret_key &rng) { + if (recover) { + throw std::runtime_error("device generate key does not support recover"); + } + + lock_device(); + try { + int offset =0; + unsigned char options = 0; + + #ifdef DEBUG_HWDEVICE + bool recover_x = recover; + const crypto::secret_key recovery_key_x = recovery_key; + crypto::public_key pub_x; + crypto::secret_key sec_x; + #endif + + reset_buffer(); + + options = 0; + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_GENERATE_KEYPAIR; + this->buffer_send[2] = 0x00; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = options; + offset += 1; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + //pub key + memmove(pub.data, &this->buffer_recv[0], 32); + memmove(sec.data, &this->buffer_recv[32], 32); + + #ifdef DEBUG_HWDEVICE + crypto::secret_key sec_clear = hw::ledger::decrypt(sec); + sec_x = sec_clear; + crypto::secret_key_to_public_key(sec_x,pub_x); + hw::ledger::check32("generate_keys", "pub", pub_x.data, pub.data); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + + } + + bool device_ledger::generate_key_derivation(const crypto::public_key &pub, const crypto::secret_key &sec, crypto::key_derivation &derivation) { + lock_device(); + try { + int offset =0; + unsigned char options = 0; + + #ifdef DEBUG_HWDEVICE + const crypto::public_key pub_x = pub; + const crypto::secret_key sec_x = hw::ledger::decrypt(sec); + crypto::key_derivation derivation_x; + this->controle_device.generate_key_derivation(pub_x, sec_x, derivation_x); + hw::ledger::log_hexbuffer("generate_key_derivation: sec_x.data", sec_x.data, 32); + hw::ledger::log_hexbuffer("generate_key_derivation: pub_x.data", pub_x.data, 32); + hw::ledger::log_hexbuffer("generate_key_derivation: derivation_x.data", derivation_x.data, 32); + #endif + + reset_buffer(); + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_GEN_KEY_DERIVATION; + this->buffer_send[2] = 0x00; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = options; + offset += 1; + //pub + memmove(this->buffer_send+offset, pub.data, 32); + offset += 32; + //sec + memmove(this->buffer_send+offset, sec.data, 32); + offset += 32; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + //derivattion data + memmove(derivation.data, &this->buffer_recv[0], 32); + + #ifdef DEBUG_HWDEVICE + crypto::key_derivation derivation_clear = hw::ledger::decrypt(derivation); + hw::ledger::check32("generate_key_derivation", "derivation", derivation_x.data, derivation_clear.data); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + bool device_ledger::derivation_to_scalar(const crypto::key_derivation &derivation, const size_t output_index, crypto::ec_scalar &res) { + lock_device(); + try { + int offset; + unsigned char options; + + #ifdef DEBUG_HWDEVICE + const crypto::key_derivation derivation_x = hw::ledger::decrypt(derivation); + const size_t output_index_x = output_index; + crypto::ec_scalar res_x; + this->controle_device.derivation_to_scalar(derivation_x, output_index_x, res_x); + #endif + + reset_buffer(); + + options = 0; + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_DERIVATION_TO_SCALAR; + this->buffer_send[2] = 0x00; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = options; + offset += 1; + //derivattion + memmove(this->buffer_send+offset, derivation.data, 32); + offset += 32; + //index + this->buffer_send[offset+0] = output_index>>24; + this->buffer_send[offset+1] = output_index>>16; + this->buffer_send[offset+2] = output_index>>8; + this->buffer_send[offset+3] = output_index>>0; + offset += 4; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + //derivattion data + memmove(res.data, &this->buffer_recv[0], 32); + + #ifdef DEBUG_HWDEVICE + crypto::ec_scalar res_clear = hw::ledger::decrypt(res); + hw::ledger::check32("derivation_to_scalar", "res", res_x.data, res_clear.data); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + bool device_ledger::derive_secret_key(const crypto::key_derivation &derivation, const std::size_t output_index, const crypto::secret_key &sec, crypto::secret_key &derived_sec) { + lock_device(); + try { + int offset; + unsigned char options; + + #ifdef DEBUG_HWDEVICE + const crypto::key_derivation derivation_x = hw::ledger::decrypt(derivation); + const std::size_t output_index_x = output_index; + const crypto::secret_key sec_x = hw::ledger::decrypt(sec); + crypto::secret_key derived_sec_x; + this->controle_device.derive_secret_key(derivation_x, output_index_x, sec_x, derived_sec_x); + #endif + + reset_buffer(); + + options = 0; + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_DERIVE_SECRET_KEY; + this->buffer_send[2] = 0x00; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = options; + offset += 1; + //derivation + memmove(this->buffer_send+offset, derivation.data, 32); + offset += 32; + //index + this->buffer_send[offset+0] = output_index>>24; + this->buffer_send[offset+1] = output_index>>16; + this->buffer_send[offset+2] = output_index>>8; + this->buffer_send[offset+3] = output_index>>0; + offset += 4; + //sec + memmove(this->buffer_send+offset, sec.data, 32); + offset += 32; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + //pub key + memmove(derived_sec.data, &this->buffer_recv[0], 32); + + #ifdef DEBUG_HWDEVICE + crypto::secret_key derived_sec_clear = hw::ledger::decrypt(derived_sec); + hw::ledger::check32("derive_secret_key", "derived_sec", derived_sec_x.data, derived_sec_clear.data); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + bool device_ledger::derive_public_key(const crypto::key_derivation &derivation, const std::size_t output_index, const crypto::public_key &pub, crypto::public_key &derived_pub){ + lock_device(); + try { + int offset; + unsigned char options; + + #ifdef DEBUG_HWDEVICE + const crypto::key_derivation derivation_x = hw::ledger::decrypt(derivation); + const std::size_t output_index_x = output_index; + const crypto::public_key pub_x = pub; + crypto::public_key derived_pub_x; + this->controle_device.derive_public_key(derivation_x, output_index_x, pub_x, derived_pub_x); + #endif + + reset_buffer(); + + options = 0; + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_DERIVE_PUBLIC_KEY; + this->buffer_send[2] = 0x00; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = options; + offset += 1; + //derivation + memmove(this->buffer_send+offset, derivation.data, 32); + offset += 32; + //index + this->buffer_send[offset+0] = output_index>>24; + this->buffer_send[offset+1] = output_index>>16; + this->buffer_send[offset+2] = output_index>>8; + this->buffer_send[offset+3] = output_index>>0; + offset += 4; + //pub + memmove(this->buffer_send+offset, pub.data, 32); + offset += 32; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + //pub key + memmove(derived_pub.data, &this->buffer_recv[0], 32); + + #ifdef DEBUG_HWDEVICE + hw::ledger::check32("derive_public_key", "derived_pub", derived_pub_x.data, derived_pub.data); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + bool device_ledger::secret_key_to_public_key(const crypto::secret_key &sec, crypto::public_key &pub) { + lock_device(); + try { + int offset; + unsigned char options; + + #ifdef DEBUG_HWDEVICE + const crypto::secret_key sec_x = hw::ledger::decrypt(sec); + crypto::public_key pub_x; + this->controle_device.secret_key_to_public_key(sec_x, pub_x); + #endif + + reset_buffer(); + + options = 0; + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_SECRET_KEY_TO_PUBLIC_KEY; + this->buffer_send[2] = 0x00; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = options; + offset += 1; + //sec key + memmove(this->buffer_send+offset, sec.data, 32); + offset += 32; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + //pub key + memmove(pub.data, &this->buffer_recv[0], 32); + + #ifdef DEBUG_HWDEVICE + hw::ledger::check32("secret_key_to_public_key", "pub", pub_x.data, pub.data); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + bool device_ledger::generate_key_image(const crypto::public_key &pub, const crypto::secret_key &sec, crypto::key_image &image){ + lock_device(); + try { + int offset; + unsigned char options; + + #ifdef DEBUG_HWDEVICE + const crypto::public_key pub_x = pub; + const crypto::secret_key sec_x = hw::ledger::decrypt(sec); + crypto::key_image image_x; + this->controle_device.generate_key_image(pub_x, sec_x, image_x); + #endif + + reset_buffer(); + + options = 0; + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_GEN_KEY_IMAGE; + this->buffer_send[2] = 0x00; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = options; + offset += 1; + //pub + memmove(this->buffer_send+offset, pub.data, 32); + offset += 32; + //sec + memmove(this->buffer_send+offset, sec.data, 32); + offset += 32; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + //pub key + memmove(image.data, &this->buffer_recv[0], 32); + + #ifdef DEBUG_HWDEVICE + hw::ledger::check32("generate_key_image", "image", image_x.data, image.data); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + /* ======================================================================= */ + /* TRANSACTION */ + /* ======================================================================= */ + + bool device_ledger::open_tx(crypto::secret_key &tx_key) { + lock_device(); + try { + int offset =0; + unsigned char options = 0; + + lock_tx(); + reset_buffer(); + key_map.clear(); + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_OPEN_TX; + this->buffer_send[2] = 0x01; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = 0x00; + offset += 1; + //account + this->buffer_send[offset+0] = 0x00; + this->buffer_send[offset+1] = 0x00; + this->buffer_send[offset+2] = 0x00; + this->buffer_send[offset+3] = 0x00; + offset += 4; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + memmove(tx_key.data, &this->buffer_recv[32], 32); + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + bool device_ledger::set_signature_mode(unsigned int sig_mode) { + lock_device(); + try { + int offset =0; + unsigned char options = 0; + + reset_buffer(); + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_SET_SIGNATURE_MODE; + this->buffer_send[2] = 0x01; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = 0x00; + offset += 1; + //account + this->buffer_send[offset] = sig_mode; + offset += 1; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + bool device_ledger::encrypt_payment_id(const crypto::public_key &public_key, const crypto::secret_key &secret_key, crypto::hash8 &payment_id) { + lock_device(); + try { + int offset =0; + unsigned char options = 0; + + #ifdef DEBUG_HWDEVICE + const crypto::public_key public_key_x = public_key; + const crypto::secret_key secret_key_x = hw::ledger::decrypt(secret_key); + crypto::hash8 payment_id_x = payment_id; + this->controle_device.encrypt_payment_id(public_key_x, secret_key_x, payment_id_x); + #endif + + reset_buffer(); + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_STEALTH; + this->buffer_send[2] = 0x00; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = 0x00; + offset += 1; + //pub + memmove(&this->buffer_send[offset], public_key.data, 32); + offset += 32; + //sec + memmove(&this->buffer_send[offset], secret_key.data, 32); + offset += 32; + //id + memmove(&this->buffer_send[offset], payment_id.data, 8); + offset += 8; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + memmove(payment_id.data, &this->buffer_recv[0], 8); + + #ifdef DEBUG_HWDEVICE + hw::ledger::check8("stealth", "payment_id", payment_id_x.data, payment_id.data); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + bool device_ledger::add_output_key_mapping(const crypto::public_key &Aout, const crypto::public_key &Bout, size_t real_output_index, + const rct::key &amount_key, const crypto::public_key &out_eph_public_key) { + lock_device(); + try { + key_map.add(ABPkeys(rct::pk2rct(Aout),rct::pk2rct(Bout), real_output_index, rct::pk2rct(out_eph_public_key), amount_key)); + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + bool device_ledger::ecdhEncode(rct::ecdhTuple & unmasked, const rct::key & AKout) { + lock_device(); + try { + int offset =0; + unsigned char options = 0; + + #ifdef DEBUG_HWDEVICE + const rct::key AKout_x = hw::ledger::decrypt(AKout); + rct::ecdhTuple unmasked_x = unmasked; + this->controle_device.ecdhEncode(AKout_x, unmasked_x); + #endif + + reset_buffer(); + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_BLIND; + this->buffer_send[2] = 0x00; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = 0x00; + offset += 1; + // AKout + memmove(this->buffer_send+offset, AKout.bytes, 32); + offset += 32; + //mask k + memmove(this->buffer_send+offset, unmasked.mask.bytes, 32); + offset += 32; + //value v + memmove(this->buffer_send+offset, unmasked.amount.bytes, 32); + offset += 32; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + memmove(unmasked.amount.bytes, &this->buffer_recv[0], 32); + memmove(unmasked.mask.bytes, &this->buffer_recv[32], 32); + + #ifdef DEBUG_HWDEVICE + hw::ledger::check32("ecdhEncode", "amount", (char*)unmasked_x.amount.bytes, (char*)unmasked.amount.bytes); + hw::ledger::check32("ecdhEncode", "mask", (char*)unmasked_x.mask.bytes, (char*)unmasked.mask.bytes); + + hw::ledger::log_hexbuffer("Blind AKV input", (char*)&this->buffer_recv[64], 3*32); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + bool device_ledger::ecdhDecode(rct::ecdhTuple & masked, const rct::key & AKout) { + lock_device(); + try { + int offset =0; + unsigned char options = 0; + + #ifdef DEBUG_HWDEVICE + const rct::key AKout_x = hw::ledger::decrypt(AKout); + rct::ecdhTuple masked_x = masked; + this->controle_device.ecdhDecode(AKout_x, masked_x); + #endif + + reset_buffer(); + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_UNBLIND; + this->buffer_send[2] = 0x00; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = 0x00; + offset += 1; + // AKout + memmove(this->buffer_send+offset, AKout.bytes, 32); + offset += 32; + //mask k + memmove(this->buffer_send+offset, masked.mask.bytes, 32); + offset += 32; + //value v + memmove(this->buffer_send+offset, masked.amount.bytes, 32); + offset += 32; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + memmove(masked.amount.bytes, &this->buffer_recv[0], 32); + memmove(masked.mask.bytes, &this->buffer_recv[32], 32); + + #ifdef DEBUG_HWDEVICE + hw::ledger::check32("ecdhDecode", "amount", (char*)masked_x.amount.bytes, (char*)masked.amount.bytes); + hw::ledger::check32("ecdhDecode", "mask", (char*)masked_x.mask.bytes,(char*) masked.mask.bytes); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + bool device_ledger::mlsag_prehash(const std::string &blob, size_t inputs_size, size_t outputs_size, + const rct::keyV &hashes, const rct::ctkeyV &outPk, + rct::key &prehash) { + + lock_device(); + try { + unsigned char options = 0; + unsigned int data_offset, C_offset, kv_offset, i; + const char *data; + + #ifdef DEBUG_HWDEVICE + const std::string blob_x = blob; + size_t inputs_size_x = inputs_size; + size_t outputs_size_x = outputs_size; + const rct::keyV hashes_x = hashes; + const rct::ctkeyV outPk_x = outPk; + rct::key prehash_x; + this->controle_device.mlsag_prehash(blob_x, inputs_size_x, outputs_size_x, hashes_x, outPk_x, prehash_x); + if (inputs_size) { + log_message("mlsag_prehash", (std::string("inputs_size not null: ") + std::to_string(inputs_size)).c_str()); + } + this->key_map.log(); + #endif + + data = blob.data(); + + // ====== u8 type, varint txnfee ====== + int offset; + + reset_buffer(); + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_VALIDATE; + this->buffer_send[2] = 0x01; + this->buffer_send[3] = 0x01; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = (inputs_size == 0)?0x00:0x80; + offset += 1; + + //type + this->buffer_send[offset] = data[0]; + offset += 1; + + //txnfee + data_offset = 1; + while (data[data_offset]&0x80) { + this->buffer_send[offset] = data[data_offset]; + offset += 1; + data_offset += 1; + } + this->buffer_send[offset] = data[data_offset]; + offset += 1; + data_offset += 1; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + //pseudoOuts + for ( i = 0; i < inputs_size; i++) { + reset_buffer(); + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_VALIDATE; + this->buffer_send[2] = 0x01; + this->buffer_send[3] = i+2; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = (i==inputs_size-1)? 0x00:0x80; + offset += 1; + //pseudoOut + memmove(this->buffer_send+offset, data+data_offset,32); + offset += 32; + data_offset += 32; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + } + + // ====== Aout, Bout, AKout, C, v, k ====== + kv_offset = data_offset; + C_offset = kv_offset+ (32*2)*outputs_size; + for ( i = 0; i < outputs_size; i++) { + ABPkeys outKeys; + bool found; + + found = this->key_map.find(outPk[i].dest, outKeys); + if (!found) { + log_hexbuffer("Pout not found", (char*)outPk[i].dest.bytes, 32); + CHECK_AND_ASSERT_THROW_MES(found, "Pout not found"); + } + reset_buffer(); + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_VALIDATE; + this->buffer_send[2] = 0x02; + this->buffer_send[3] = i+1; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = (i==outputs_size-1)? 0x00:0x80 ; + offset += 1; + if (found) { + //Aout + memmove(this->buffer_send+offset, outKeys.Aout.bytes, 32); + offset+=32; + //Bout + memmove(this->buffer_send+offset, outKeys.Bout.bytes, 32); + offset+=32; + //AKout + memmove(this->buffer_send+offset, outKeys.AKout.bytes, 32); + offset+=32; + } else { + // dummy: Aout Bout AKout + offset += 32*3; + } + //C + memmove(this->buffer_send+offset, data+C_offset,32); + offset += 32; + C_offset += 32; + //k + memmove(this->buffer_send+offset, data+kv_offset,32); + offset += 32; + //v + kv_offset += 32; + memmove(this->buffer_send+offset, data+kv_offset,32); + offset += 32; + kv_offset += 32; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + #ifdef DEBUG_HWDEVICE + hw::ledger::log_hexbuffer("Prehash AKV input", (char*)&this->buffer_recv[64], 3*32); + #endif + } + + // ====== C[], message, proof====== + C_offset = kv_offset; + for (i = 0; i < outputs_size; i++) { + reset_buffer(); + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_VALIDATE; + this->buffer_send[2] = 0x03; + this->buffer_send[3] = i+1; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = 0x80 ; + offset += 1; + //C + memmove(this->buffer_send+offset, data+C_offset,32); + offset += 32; + C_offset += 32; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + } + + reset_buffer(); + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_VALIDATE; + this->buffer_send[2] = 0x03; + this->buffer_send[3] = i+1; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = 0x00; + offset += 1; + //message + memmove(this->buffer_send+offset, hashes[0].bytes,32); + offset += 32; + //proof + memmove(this->buffer_send+offset, hashes[2].bytes,32); + offset += 32; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + memmove(prehash.bytes, this->buffer_recv, 32); + + #ifdef DEBUG_HWDEVICE + hw::ledger::check32("mlsag_prehash", "prehash", (char*)prehash_x.bytes, (char*)prehash.bytes); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + + bool device_ledger::mlsag_prepare(const rct::key &H, const rct::key &xx, + rct::key &a, rct::key &aG, rct::key &aHP, rct::key &II) { + lock_device(); + try { + int offset =0; + unsigned char options = 0; + + #ifdef DEBUG_HWDEVICE + const rct::key H_x = H; + const rct::key xx_x = hw::ledger::decrypt(xx); + rct::key a_x; + rct::key aG_x; + rct::key aHP_x; + rct::key II_x; + #endif + + reset_buffer(); + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_MLSAG; + this->buffer_send[2] = 0x01; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = 0x00; + offset += 1; + //value H + memmove(this->buffer_send+offset, H.bytes, 32); + offset += 32; + //mask xin + memmove(this->buffer_send+offset, xx.bytes, 32); + offset += 32; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + memmove(a.bytes, &this->buffer_recv[32*0], 32); + memmove(aG.bytes, &this->buffer_recv[32*1], 32); + memmove(aHP.bytes, &this->buffer_recv[32*2], 32); + memmove(II.bytes, &this->buffer_recv[32*3], 32); + + #ifdef DEBUG_HWDEVICE + a_x = hw::ledger::decrypt(a); + + rct::scalarmultBase(aG_x, a_x); + rct::scalarmultKey(aHP_x, H_x, a_x); + rct::scalarmultKey(II_x, H_x, xx_x); + hw::ledger::check32("mlsag_prepare", "AG", (char*)aG_x.bytes, (char*)aG.bytes); + hw::ledger::check32("mlsag_prepare", "aHP", (char*)aHP_x.bytes, (char*)aHP.bytes); + hw::ledger::check32("mlsag_prepare", "II", (char*)II_x.bytes, (char*)II.bytes); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + bool device_ledger::mlsag_prepare(rct::key &a, rct::key &aG) { + lock_device(); + try { + int offset =0; + unsigned char options = 0; + + #ifdef DEBUG_HWDEVICE + rct::key a_x; + rct::key aG_x; + #endif + + reset_buffer(); + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_MLSAG; + this->buffer_send[2] = 0x01; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = 0x00; + offset += 1; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + memmove(a.bytes, &this->buffer_recv[32*0], 32); + memmove(aG.bytes, &this->buffer_recv[32*1], 32); + + #ifdef DEBUG_HWDEVICE + a_x = hw::ledger::decrypt(a); + rct::scalarmultBase(aG_x, a_x); + hw::ledger::check32("mlsag_prepare", "AG", (char*)aG_x.bytes, (char*)aG.bytes); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + bool device_ledger::mlsag_hash(const rct::keyV &long_message, rct::key &c) { + lock_device(); + try { + int offset =0; + unsigned char options = 0; + size_t cnt; + + #ifdef DEBUG_HWDEVICE + const rct::keyV long_message_x = long_message; + rct::key c_x; + this->controle_device.mlsag_hash(long_message_x, c_x); + #endif + + cnt = long_message.size(); + for (size_t i = 0; i<cnt; i++) { + reset_buffer(); + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_MLSAG; + this->buffer_send[2] = 0x02; + this->buffer_send[3] = i+1; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = + (i==(cnt-1))?0x00:0x80; //last + offset += 1; + //msg part + memmove(this->buffer_send+offset, long_message[i].bytes, 32); + offset += 32; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + } + + memmove(c.bytes, &this->buffer_recv[0], 32); + + #ifdef DEBUG_HWDEVICE + hw::ledger::check32("mlsag_hash", "c", (char*)c_x.bytes, (char*)c.bytes); + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + + } + + bool device_ledger::mlsag_sign(const rct::key &c, const rct::keyV &xx, const rct::keyV &alpha, const size_t rows, const size_t dsRows, rct::keyV &ss) { + lock_device(); + try { + int offset =0; + unsigned char options = 0; + + CHECK_AND_ASSERT_THROW_MES(dsRows<=rows, "dsRows greater than rows"); + CHECK_AND_ASSERT_THROW_MES(xx.size() == rows, "xx size does not match rows"); + CHECK_AND_ASSERT_THROW_MES(alpha.size() == rows, "alpha size does not match rows"); + CHECK_AND_ASSERT_THROW_MES(ss.size() == rows, "ss size does not match rows"); + + #ifdef DEBUG_HWDEVICE + const rct::key c_x = c; + const rct::keyV xx_x = hw::ledger::decrypt(xx); + const rct::keyV alpha_x = hw::ledger::decrypt(alpha); + const int rows_x = rows; + const int dsRows_x = dsRows; + rct::keyV ss_x(ss.size()); + this->controle_device.mlsag_sign(c_x, xx_x, alpha_x, rows_x, dsRows_x, ss_x); + #endif + + for (size_t j = 0; j < dsRows; j++) { + reset_buffer(); + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_MLSAG; + this->buffer_send[2] = 0x03; + this->buffer_send[3] = j+1; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = 0x00; + if (j==(dsRows-1)) { + this->buffer_send[offset] |= 0x80; //last + } + offset += 1; + //xx + memmove(this->buffer_send+offset, xx[j].bytes, 32); + offset += 32; + //alpa + memmove(this->buffer_send+offset, alpha[j].bytes, 32); + offset += 32; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + //ss + memmove(ss[j].bytes, &this->buffer_recv[0], 32); + } + + for (size_t j = dsRows; j < rows; j++) { + sc_mulsub(ss[j].bytes, c.bytes, xx[j].bytes, alpha[j].bytes); + } + + #ifdef DEBUG_HWDEVICE + for (size_t j = 0; j < rows; j++) { + hw::ledger::check32("mlsag_sign", "ss["+std::to_string(j)+"]", (char*)ss_x[j].bytes, (char*)ss[j].bytes); + } + #endif + + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + bool device_ledger::close_tx() { + lock_device(); + try { + int offset =0; + unsigned char options = 0; + + reset_buffer(); + + this->buffer_send[0] = 0x00; + this->buffer_send[1] = INS_CLOSE_TX; + this->buffer_send[2] = 0x00; + this->buffer_send[3] = 0x00; + this->buffer_send[4] = 0x00; + offset = 5; + //options + this->buffer_send[offset] = 0x00; + offset += 1; + + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + unlock_tx(); + unlock_device(); + }catch (...) { + unlock_device(); + throw; + } + return true; + } + + /* ---------------------------------------------------------- */ + + static device_ledger *legder_device = NULL; + void register_all(std::map<std::string, std::unique_ptr<device>> ®istry) { + if (!legder_device) { + legder_device = new device_ledger(); + legder_device->set_name("Ledger"); + } + registry.insert(std::make_pair("Ledger", legder_device)); + } + + #else //WITH_DEVICE_LEDGER + + void register_all(std::map<std::string, std::unique_ptr<device>> ®istry) { + } + + #endif //WITH_DEVICE_LEDGER + + } +} + diff --git a/src/device/device_ledger.hpp b/src/device/device_ledger.hpp new file mode 100644 index 000000000..ab8e0c553 --- /dev/null +++ b/src/device/device_ledger.hpp @@ -0,0 +1,202 @@ +// Copyright (c) 2017-2018, 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. +// + + +#pragma once + +#include <cstddef> +#include <string> +#include <mutex> +#include "device.hpp" +#include <PCSC/winscard.h> +#include <PCSC/wintypes.h> + + +namespace hw { + + namespace ledger { + + void register_all(std::map<std::string, std::unique_ptr<device>> ®istry); + + #ifdef WITH_DEVICE_LEDGER + + namespace { + bool apdu_verbose =true; + } + + void set_apdu_verbose(bool verbose); + + class ABPkeys { + public: + rct::key Aout; + rct::key Bout; + size_t index; + rct::key Pout; + rct::key AKout; + ABPkeys(const rct::key& A, const rct::key& B, size_t index, const rct::key& P,const rct::key& AK); + ABPkeys(const ABPkeys& keys) ; + ABPkeys() {index=0;} + }; + + class Keymap { + public: + std::vector<ABPkeys> ABP; + + bool find(const rct::key& P, ABPkeys& keys) const; + void add(const ABPkeys& keys); + void clear(); + void log(); + }; + + #define BUFFER_SEND_SIZE 262 + #define BUFFER_RECV_SIZE 262 + + class device_ledger : public hw::device { + private: + mutable std::mutex device_locker; + mutable std::mutex tx_locker; + void lock_device() ; + void unlock_device() ; + void lock_tx() ; + void unlock_tx() ; + + std::string full_name; + SCARDCONTEXT hContext; + SCARDHANDLE hCard; + DWORD length_send; + BYTE buffer_send[BUFFER_SEND_SIZE]; + DWORD length_recv; + BYTE buffer_recv[BUFFER_RECV_SIZE]; + unsigned int id; + + Keymap key_map; + + + void logCMD(void); + void logRESP(void); + unsigned int exchange(unsigned int ok=0x9000, unsigned int mask=0xFFFF); + void reset_buffer(void); + + #ifdef DEBUGLEDGER + Device &controle_device; + #endif + + public: + device_ledger(); + ~device_ledger(); + + device_ledger(const device_ledger &device) = delete ; + device_ledger& operator=(const device_ledger &device) = delete; + + explicit operator bool() const override {return this->hContext != 0;} + + bool reset(void); + + /* ======================================================================= */ + /* SETUP/TEARDOWN */ + /* ======================================================================= */ + bool set_name(const std::string &name) override; + + const std::string get_name() const override; + bool init(void) override; + bool release() override; + bool connect(void) override; + bool disconnect() override; + + /* ======================================================================= */ + /* WALLET & ADDRESS */ + /* ======================================================================= */ + bool get_public_address(cryptonote::account_public_address &pubkey) override; + bool get_secret_keys(crypto::secret_key &viewkey , crypto::secret_key &spendkey) override; + bool generate_chacha_key(const cryptonote::account_keys &keys, crypto::chacha_key &key) override; + + + /* ======================================================================= */ + /* SUB ADDRESS */ + /* ======================================================================= */ + bool derive_subaddress_public_key(const crypto::public_key &pub, const crypto::key_derivation &derivation, const std::size_t output_index, crypto::public_key &derived_pub) override; + bool get_subaddress_spend_public_key(const cryptonote::account_keys& keys, const cryptonote::subaddress_index& index, crypto::public_key &D) override; + bool get_subaddress_spend_public_keys(const cryptonote::account_keys &keys, uint32_t account, uint32_t begin, uint32_t end, std::vector<crypto::public_key> &pkeys) override; + bool get_subaddress(const cryptonote::account_keys& keys, const cryptonote::subaddress_index &index, cryptonote::account_public_address &address) override; + bool get_subaddress_secret_key(const crypto::secret_key &sec, const cryptonote::subaddress_index &index, crypto::secret_key &sub_sec) override; + + /* ======================================================================= */ + /* DERIVATION & KEY */ + /* ======================================================================= */ + bool verify_keys(const crypto::secret_key &secret_key, const crypto::public_key &public_key) override; + bool scalarmultKey(rct::key & aP, const rct::key &P, const rct::key &a) override; + bool scalarmultBase(rct::key &aG, const rct::key &a) override; + bool sc_secret_add(crypto::secret_key &r, const crypto::secret_key &a, const crypto::secret_key &b) override; + bool generate_keys(crypto::public_key &pub, crypto::secret_key &sec, const crypto::secret_key& recovery_key, bool recover, crypto::secret_key &rng) override; + bool generate_key_derivation(const crypto::public_key &pub, const crypto::secret_key &sec, crypto::key_derivation &derivation) override; + bool derivation_to_scalar(const crypto::key_derivation &derivation, const size_t output_index, crypto::ec_scalar &res) override; + bool derive_secret_key(const crypto::key_derivation &derivation, const std::size_t output_index, const crypto::secret_key &sec, crypto::secret_key &derived_sec) override; + bool derive_public_key(const crypto::key_derivation &derivation, const std::size_t output_index, const crypto::public_key &pub, crypto::public_key &derived_pub) override; + bool secret_key_to_public_key(const crypto::secret_key &sec, crypto::public_key &pub) override; + bool generate_key_image(const crypto::public_key &pub, const crypto::secret_key &sec, crypto::key_image &image) override; + + /* ======================================================================= */ + /* TRANSACTION */ + /* ======================================================================= */ + + bool open_tx(crypto::secret_key &tx_key) override; + + bool set_signature_mode(unsigned int sig_mode) override; + + bool encrypt_payment_id(const crypto::public_key &public_key, const crypto::secret_key &secret_key, crypto::hash8 &payment_id ) override; + + bool ecdhEncode(rct::ecdhTuple & unmasked, const rct::key & sharedSec) override; + bool ecdhDecode(rct::ecdhTuple & masked, const rct::key & sharedSec) override; + + bool add_output_key_mapping(const crypto::public_key &Aout, const crypto::public_key &Bout, size_t real_output_index, + const rct::key &amount_key, const crypto::public_key &out_eph_public_key) override; + + + bool mlsag_prehash(const std::string &blob, size_t inputs_size, size_t outputs_size, const rct::keyV &hashes, const rct::ctkeyV &outPk, rct::key &prehash) override; + bool mlsag_prepare(const rct::key &H, const rct::key &xx, rct::key &a, rct::key &aG, rct::key &aHP, rct::key &rvII) override; + bool mlsag_prepare(rct::key &a, rct::key &aG) override; + bool mlsag_hash(const rct::keyV &long_message, rct::key &c) override; + bool mlsag_sign( const rct::key &c, const rct::keyV &xx, const rct::keyV &alpha, const size_t rows, const size_t dsRows, rct::keyV &ss) override; + + bool close_tx(void) override; + + }; + + + + #ifdef DEBUGLEDGER + extern crypto::secret_key viewkey; + extern crypto::secret_key spendkey; + #endif + + #endif //WITH_DEVICE_LEDGER + } + +} + diff --git a/src/device/log.cpp b/src/device/log.cpp new file mode 100644 index 000000000..103b2b3ba --- /dev/null +++ b/src/device/log.cpp @@ -0,0 +1,164 @@ +// Copyright (c) 2017-2018, 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 "misc_log_ex.h" +#include "log.hpp" + +namespace hw { + + #ifdef WITH_DEVICE_LEDGER + namespace ledger { + + #undef MONERO_DEFAULT_LOG_CATEGORY + #define MONERO_DEFAULT_LOG_CATEGORY "device.ledger" + + void buffer_to_str(char *to_buff, size_t to_len, const char *buff, size_t len) { + CHECK_AND_ASSERT_THROW_MES(to_len > (len*2), "destination buffer too short. At least" << (len*2+1) << " bytes required"); + for (size_t i=0; i<len; i++) { + sprintf(to_buff+2*i, "%.02x", (unsigned char)buff[i]); + } + } + + void log_hexbuffer(std::string msg, const char* buff, size_t len) { + char logstr[1025]; + buffer_to_str(logstr, sizeof(logstr), buff, len); + MDEBUG(msg<< ": " << logstr); + } + + void log_message(std::string msg, std::string info ) { + MDEBUG(msg << ": " << info); + } + + #ifdef DEBUGLEDGER + extern crypto::secret_key viewkey; + extern crypto::secret_key spendkey; + + + void decrypt(char* buf, size_t len) { + #ifdef IODUMMYCRYPT + int i; + if (len == 32) { + //view key? + for (i = 0; i<32; i++) { + if (buf[i] != 0) break; + } + if (i == 32) { + memmove(buf, hw::ledger::viewkey.data, 32); + return; + } + //spend key? + for (i = 0; i<32; i++) { + if (buf[i] != (char)0xff) break; + } + if (i == 32) { + memmove(buf, hw::ledger::spendkey.data, 32); + return; + } + } + //std decrypt: XOR.55h + for (i = 0; i<len;i++) { + buf[i] ^= 0x55; + } + #endif + } + + crypto::key_derivation decrypt(const crypto::key_derivation &derivation) { + crypto::key_derivation x = derivation; + decrypt(x.data, 32); + return x; + } + + cryptonote::account_keys decrypt(const cryptonote::account_keys& keys) { + cryptonote::account_keys x = keys; + decrypt(x.m_view_secret_key.data, 32); + decrypt(x.m_spend_secret_key.data, 32); + return x; + } + + + crypto::secret_key decrypt(const crypto::secret_key &sec) { + crypto::secret_key x = sec; + decrypt(x.data, 32); + return x; + } + + rct::key decrypt(const rct::key &sec) { + rct::key x = sec; + decrypt((char*)x.bytes, 32); + return x; + } + + crypto::ec_scalar decrypt(const crypto::ec_scalar &res) { + crypto::ec_scalar x = res; + decrypt((char*)x.data, 32); + return x; + } + + rct::keyV decrypt(const rct::keyV &keys) { + rct::keyV x ; + for (unsigned int j = 0; j<keys.size(); j++) { + x.push_back(decrypt(keys[j])); + } + return x; + } + + static void check(std::string msg, std::string info, const char *h, const char *d, int len, bool crypted) { + char dd[32]; + char logstr[128]; + + memmove(dd,d,len); + if (crypted) { + CHECK_AND_ASSERT_THROW_MES(len<=32, "encrypted data greater than 32"); + decrypt(dd,len); + } + + if (memcmp(h,dd,len)) { + log_message("ASSERT EQ FAIL", msg + ": "+ info ); + log_hexbuffer(" host ", h, len); + log_hexbuffer(" device", dd, len); + + } else { + buffer_to_str(logstr, dd, len); + log_message("ASSERT EQ OK", msg + ": "+ info + ": "+ std::string(logstr) ); + } + } + + void check32(std::string msg, std::string info, const char *h, const char *d, bool crypted) { + check(msg, info, h, d, 32, crypted); + } + + void check8(std::string msg, std::string info, const char *h, const char *d, bool crypted) { + check(msg, info, h, d, 8, crypted); + } + #endif + + } + #endif //WITH_DEVICE_LEDGER + +}
\ No newline at end of file diff --git a/src/device/log.hpp b/src/device/log.hpp new file mode 100644 index 000000000..1ab572c2c --- /dev/null +++ b/src/device/log.hpp @@ -0,0 +1,69 @@ +// Copyright (c) 2017-2018, 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. +// + +#pragma once + +#include <cstddef> +#include <string> + +#include "ringct/rctOps.h" +#include "crypto/crypto.h" +#include "cryptonote_basic/account.h" + +#include "device.hpp" + +namespace hw { + + #ifdef WITH_DEVICE_LEDGER + namespace ledger { + + void buffer_to_str(char *to_buff, size_t to_len, const char *buff, size_t len) ; + void log_hexbuffer(std::string msg, const char* buff, size_t len); + void log_message(std::string msg, std::string info ); + #ifdef DEBUG_HWDEVICE + #define TRACK printf("file %s:%d\n",__FILE__, __LINE__) + //#define TRACK MCDEBUG("ledger"," At file " << __FILE__ << ":" << __LINE__) + //#define TRACK while(0); + + void decrypt(char* buf, size_t len) ; + crypto::key_derivation decrypt(const crypto::key_derivation &derivation) ; + cryptonote::account_keys decrypt(const cryptonote::account_keys& keys) ; + crypto::secret_key decrypt(const crypto::secret_key &sec) ; + rct::key decrypt(const rct::key &sec); + crypto::ec_scalar decrypt(const crypto::ec_scalar &res); + rct::keyV decrypt(const rct::keyV &keys); + + void check32(std::string msg, std::string info, const char *h, const char *d, bool crypted=false); + void check8(std::string msg, std::string info, const char *h, const char *d, bool crypted=false); + + void set_check_verbose(bool verbose); + #endif + } + #endif +} diff --git a/src/multisig/multisig.cpp b/src/multisig/multisig.cpp index 6c05a38d9..91042d58a 100644 --- a/src/multisig/multisig.cpp +++ b/src/multisig/multisig.cpp @@ -33,6 +33,7 @@ #include "cryptonote_basic/account.h" #include "cryptonote_basic/cryptonote_format_utils.h" #include "multisig.h" +#include "device/device_default.hpp" #undef MONERO_DEFAULT_LOG_CATEGORY #define MONERO_DEFAULT_LOG_CATEGORY "multisig" @@ -116,7 +117,7 @@ namespace cryptonote bool generate_multisig_composite_key_image(const account_keys &keys, const std::unordered_map<crypto::public_key, subaddress_index>& subaddresses, const crypto::public_key& out_key, const crypto::public_key &tx_public_key, const std::vector<crypto::public_key>& additional_tx_public_keys, size_t real_output_index, const std::vector<crypto::key_image> &pkis, crypto::key_image &ki) { cryptonote::keypair in_ephemeral; - if (!cryptonote::generate_key_image_helper(keys, subaddresses, out_key, tx_public_key, additional_tx_public_keys, real_output_index, in_ephemeral, ki)) + if (!cryptonote::generate_key_image_helper(keys, subaddresses, out_key, tx_public_key, additional_tx_public_keys, real_output_index, in_ephemeral, ki, keys.get_device())) return false; std::unordered_set<crypto::key_image> used; for (size_t m = 0; m < keys.m_multisig_keys.size(); ++m) diff --git a/src/p2p/CMakeLists.txt b/src/p2p/CMakeLists.txt index 9421a1477..83bdffab5 100644 --- a/src/p2p/CMakeLists.txt +++ b/src/p2p/CMakeLists.txt @@ -40,6 +40,7 @@ target_link_libraries(p2p PUBLIC epee version + cryptonote_core ${UPNP_LIBRARIES} ${Boost_CHRONO_LIBRARY} ${Boost_PROGRAM_OPTIONS_LIBRARY} diff --git a/src/p2p/net_node.cpp b/src/p2p/net_node.cpp index 994941168..170b79984 100644 --- a/src/p2p/net_node.cpp +++ b/src/p2p/net_node.cpp @@ -34,15 +34,16 @@ namespace nodetool { const command_line::arg_descriptor<std::string> arg_p2p_bind_ip = {"p2p-bind-ip", "Interface for p2p network protocol", "0.0.0.0"}; - const command_line::arg_descriptor<std::string> arg_p2p_bind_port = { + const command_line::arg_descriptor<std::string, false, true> arg_p2p_bind_port = { "p2p-bind-port" , "Port for p2p network protocol" , std::to_string(config::P2P_DEFAULT_PORT) - }; - const command_line::arg_descriptor<std::string> arg_testnet_p2p_bind_port = { - "testnet-p2p-bind-port" - , "Port for testnet p2p network protocol" - , std::to_string(config::testnet::P2P_DEFAULT_PORT) + , cryptonote::arg_testnet_on + , [](bool testnet, bool defaulted, std::string val) { + if (testnet && defaulted) + return std::to_string(config::testnet::P2P_DEFAULT_PORT); + return val; + } }; const command_line::arg_descriptor<uint32_t> arg_p2p_external_port = {"p2p-external-port", "External port for p2p network protocol (if port forwarding used with NAT)", 0}; const command_line::arg_descriptor<bool> arg_p2p_allow_local_ip = {"allow-local-ip", "Allow local ip add to peer list, mostly in debug purposes"}; diff --git a/src/p2p/net_node.h b/src/p2p/net_node.h index 9ebefbca6..54c474665 100644 --- a/src/p2p/net_node.h +++ b/src/p2p/net_node.h @@ -337,8 +337,7 @@ namespace nodetool const int64_t default_limit_up = 2048; const int64_t default_limit_down = 8192; extern const command_line::arg_descriptor<std::string> arg_p2p_bind_ip; - extern const command_line::arg_descriptor<std::string> arg_p2p_bind_port; - extern const command_line::arg_descriptor<std::string> arg_testnet_p2p_bind_port; + extern const command_line::arg_descriptor<std::string, false, true> arg_p2p_bind_port; extern const command_line::arg_descriptor<uint32_t> arg_p2p_external_port; extern const command_line::arg_descriptor<bool> arg_p2p_allow_local_ip; extern const command_line::arg_descriptor<std::vector<std::string> > arg_p2p_add_peer; diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl index d60f0a13e..59b417d90 100644 --- a/src/p2p/net_node.inl +++ b/src/p2p/net_node.inl @@ -75,7 +75,6 @@ namespace nodetool { command_line::add_arg(desc, arg_p2p_bind_ip); command_line::add_arg(desc, arg_p2p_bind_port, false); - command_line::add_arg(desc, arg_testnet_p2p_bind_port, false); command_line::add_arg(desc, arg_p2p_external_port); command_line::add_arg(desc, arg_p2p_allow_local_ip); command_line::add_arg(desc, arg_p2p_add_peer); @@ -264,11 +263,8 @@ namespace nodetool ) { m_testnet = command_line::get_arg(vm, cryptonote::arg_testnet_on); - - auto p2p_bind_arg = m_testnet ? arg_testnet_p2p_bind_port : arg_p2p_bind_port; - m_bind_ip = command_line::get_arg(vm, arg_p2p_bind_ip); - m_port = command_line::get_arg(vm, p2p_bind_arg); + m_port = command_line::get_arg(vm, arg_p2p_bind_port); m_external_port = command_line::get_arg(vm, arg_p2p_external_port); m_allow_local_ip = command_line::get_arg(vm, arg_p2p_allow_local_ip); m_no_igd = command_line::get_arg(vm, arg_no_igd); @@ -504,8 +500,7 @@ namespace nodetool } MDEBUG("Number of seed nodes: " << m_seed_nodes.size()); - auto config_arg = m_testnet ? cryptonote::arg_testnet_data_dir : cryptonote::arg_data_dir; - m_config_folder = command_line::get_arg(vm, config_arg); + m_config_folder = command_line::get_arg(vm, cryptonote::arg_data_dir); if ((!m_testnet && m_port != std::to_string(::config::P2P_DEFAULT_PORT)) || (m_testnet && m_port != std::to_string(::config::testnet::P2P_DEFAULT_PORT))) { diff --git a/src/ringct/CMakeLists.txt b/src/ringct/CMakeLists.txt index 3a28997dd..2d3ea5cf4 100644 --- a/src/ringct/CMakeLists.txt +++ b/src/ringct/CMakeLists.txt @@ -28,6 +28,7 @@ set(ringct_sources rctOps.cpp + rctOps_device.cpp rctSigs.cpp rctTypes.cpp rctCryptoOps.c @@ -52,6 +53,7 @@ target_link_libraries(ringct common cncrypto cryptonote_basic + device PRIVATE ${OPENSSL_LIBRARIES} ${EXTRA_LIBRARIES}) diff --git a/src/ringct/rctOps.h b/src/ringct/rctOps.h index 3f8f6955c..c9f2e7a43 100644 --- a/src/ringct/rctOps.h +++ b/src/ringct/rctOps.h @@ -112,10 +112,14 @@ namespace rct { //does a * G where a is a scalar and G is the curve basepoint void scalarmultBase(key & aG, const key &a); + void scalarmultBase(key & aG, const key &a, hw::device &hwdev); key scalarmultBase(const key & a); + key scalarmultBase(const key & a, hw::device &hwdev); //does a * P where a is a scalar and P is an arbitrary point void scalarmultKey(key &aP, const key &P, const key &a); + void scalarmultKey(key &aP, const key &P, const key &a, hw::device &hwdev); key scalarmultKey(const key &P, const key &a); + key scalarmultKey(const key &P, const key &a, hw::device &hwdev); //Computes aH where H= toPoint(cn_fast_hash(G)), G the basepoint key scalarmultH(const key & a); @@ -174,6 +178,8 @@ namespace rct { //Elliptic Curve Diffie Helman: encodes and decodes the amount b and mask a // where C= aG + bH void ecdhEncode(ecdhTuple & unmasked, const key & sharedSec); + void ecdhEncode(ecdhTuple & unmasked, const key & sharedSec, hw::device &hwdev); void ecdhDecode(ecdhTuple & masked, const key & sharedSec); + void ecdhDecode(ecdhTuple & masked, const key & sharedSec, hw::device &hwdev); } #endif /* RCTOPS_H */ diff --git a/src/ringct/rctOps_device.cpp b/src/ringct/rctOps_device.cpp new file mode 100644 index 000000000..fbfe8e9cf --- /dev/null +++ b/src/ringct/rctOps_device.cpp @@ -0,0 +1,66 @@ +// Copyright (c) 2017-2018, 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 "misc_log_ex.h" +#include "rctOps.h" +#include "device/device.hpp" +using namespace crypto; +using namespace std; + + +namespace rct +{ + void scalarmultKey(key & aP, const key &P, const key &a, hw::device &hwdev) { + hwdev.scalarmultKey(aP, P, a); + } + + key scalarmultKey(const key & P, const key & a, hw::device &hwdev) { + key aP; + hwdev.scalarmultKey(aP, P, a); + return aP; + } + + void scalarmultBase(key &aG, const key &a, hw::device &hwdev) { + hwdev.scalarmultBase(aG, a); + } + + key scalarmultBase(const key & a, hw::device &hwdev) { + key aG; + hwdev.scalarmultBase(aG, a); + return aG; + } + + void ecdhDecode(ecdhTuple & masked, const key & sharedSec, hw::device &hwdev) { + hwdev.ecdhDecode(masked, sharedSec); + } + + void ecdhEncode(ecdhTuple & unmasked, const key & sharedSec, hw::device &hwdev) { + hwdev.ecdhEncode(unmasked, sharedSec); + } +}
\ No newline at end of file diff --git a/src/ringct/rctSigs.cpp b/src/ringct/rctSigs.cpp index 0c2be5add..d3437eb36 100644 --- a/src/ringct/rctSigs.cpp +++ b/src/ringct/rctSigs.cpp @@ -35,6 +35,9 @@ #include "rctSigs.h" #include "bulletproofs.h" #include "cryptonote_basic/cryptonote_format_utils.h" +#include "cryptonote_basic/cryptonote_basic.h" +#include "cryptonote_basic/subaddress_index.h" +#include "device/device.hpp" using namespace crypto; using namespace std; @@ -153,7 +156,7 @@ namespace rct { // Gen creates a signature which proves that for some column in the keymatrix "pk" // the signer knows a secret key for each row in that column // Ver verifies that the MG sig was created correctly - mgSig MLSAG_Gen(const key &message, const keyM & pk, const keyV & xx, const multisig_kLRki *kLRki, key *mscout, const unsigned int index, size_t dsRows) { + mgSig MLSAG_Gen(const key &message, const keyM & pk, const keyV & xx, const multisig_kLRki *kLRki, key *mscout, const unsigned int index, size_t dsRows, hw::device &hwdev) { mgSig rv; size_t cols = pk.size(); CHECK_AND_ASSERT_THROW_MES(cols >= 2, "Error! What is c if cols = 1!"); @@ -191,11 +194,9 @@ namespace rct { } else { Hi = hashToPoint(pk[index][i]); - skpkGen(alpha[i], aG[i]); //need to save alphas for later.. - aHP[i] = scalarmultKey(Hi, alpha[i]); + hwdev.mlsag_prepare(Hi, xx[i], alpha[i] , aG[i] , aHP[i] , rv.II[i]); toHash[3 * i + 2] = aG[i]; toHash[3 * i + 3] = aHP[i]; - rv.II[i] = scalarmultKey(Hi, xx[i]); } precomp(Ip[i].k, rv.II[i]); } @@ -206,7 +207,7 @@ namespace rct { toHash[ndsRows + 2 * ii + 2] = aG[i]; } - c_old = hash_to_scalar(toHash); + hwdev.mlsag_hash(toHash, c_old); i = (index + 1) % cols; @@ -230,7 +231,7 @@ namespace rct { toHash[ndsRows + 2 * ii + 1] = pk[i][j]; toHash[ndsRows + 2 * ii + 2] = L; } - c = hash_to_scalar(toHash); + hwdev.mlsag_hash(toHash, c); copy(c_old, c); i = (i + 1) % cols; @@ -238,9 +239,7 @@ namespace rct { copy(rv.cc, c_old); } } - for (j = 0; j < rows; j++) { - sc_mulsub(rv.ss[index][j].bytes, c.bytes, xx[j].bytes, alpha[j].bytes); - } + hwdev.mlsag_sign(c, xx, alpha, rows, dsRows, rv.ss[index]); if (mscout) *mscout = c; return rv; @@ -372,7 +371,7 @@ namespace rct { catch (...) { return false; } } - key get_pre_mlsag_hash(const rctSig &rv) + key get_pre_mlsag_hash(const rctSig &rv, hw::device &hwdev) { keyV hashes; hashes.reserve(3); @@ -384,6 +383,7 @@ namespace rct { CHECK_AND_ASSERT_THROW_MES(!rv.mixRing.empty(), "Empty mixRing"); const size_t inputs = is_simple(rv.type) ? rv.mixRing.size() : rv.mixRing[0].size(); const size_t outputs = rv.ecdhInfo.size(); + key prehash; CHECK_AND_ASSERT_THROW_MES(const_cast<rctSig&>(rv).serialize_rctsig_base(ba, inputs, outputs), "Failed to serialize rctSigBase"); cryptonote::get_blob_hash(ss.str(), h); @@ -427,7 +427,8 @@ namespace rct { } } hashes.push_back(cn_fast_hash(kv)); - return cn_fast_hash(hashes); + hwdev.mlsag_prehash(ss.str(), inputs, outputs, hashes, rv.outPk, prehash); + return prehash; } //Ring-ct MG sigs @@ -438,7 +439,7 @@ namespace rct { // this shows that sum inputs = sum outputs //Ver: // verifies the above sig is created corretly - mgSig proveRctMG(const key &message, const ctkeyM & pubs, const ctkeyV & inSk, const ctkeyV &outSk, const ctkeyV & outPk, const multisig_kLRki *kLRki, key *mscout, unsigned int index, key txnFeeKey) { + mgSig proveRctMG(const key &message, const ctkeyM & pubs, const ctkeyV & inSk, const ctkeyV &outSk, const ctkeyV & outPk, const multisig_kLRki *kLRki, key *mscout, unsigned int index, key txnFeeKey, hw::device &hwdev) { mgSig mg; //setup vars size_t cols = pubs.size(); @@ -483,7 +484,7 @@ namespace rct { for (size_t j = 0; j < outPk.size(); j++) { sc_sub(sk[rows].bytes, sk[rows].bytes, outSk[j].mask.bytes); //subtract output masks in last row.. } - return MLSAG_Gen(message, M, sk, kLRki, mscout, index, rows); + return MLSAG_Gen(message, M, sk, kLRki, mscout, index, rows, hwdev); } @@ -494,7 +495,7 @@ namespace rct { // inSk is x, a_in corresponding to signing index // a_out, Cout is for the output commitment // index is the signing index.. - mgSig proveRctMGSimple(const key &message, const ctkeyV & pubs, const ctkey & inSk, const key &a , const key &Cout, const multisig_kLRki *kLRki, key *mscout, unsigned int index) { + mgSig proveRctMGSimple(const key &message, const ctkeyV & pubs, const ctkey & inSk, const key &a , const key &Cout, const multisig_kLRki *kLRki, key *mscout, unsigned int index, hw::device &hwdev) { mgSig mg; //setup vars size_t rows = 1; @@ -511,7 +512,7 @@ namespace rct { sk[0] = copy(inSk.dest); sc_sub(sk[1].bytes, inSk.mask.bytes, a.bytes); } - return MLSAG_Gen(message, M, sk, kLRki, mscout, index, rows); + return MLSAG_Gen(message, M, sk, kLRki, mscout, index, rows, hwdev); } @@ -645,7 +646,7 @@ namespace rct { // must know the destination private key to find the correct amount, else will return a random number // Note: For txn fees, the last index in the amounts vector should contain that // Thus the amounts vector will be "one" longer than the destinations vectort - rctSig genRct(const key &message, const ctkeyV & inSk, const keyV & destinations, const vector<xmr_amount> & amounts, const ctkeyM &mixRing, const keyV &amount_keys, const multisig_kLRki *kLRki, multisig_out *msout, unsigned int index, ctkeyV &outSk, bool bulletproof) { + rctSig genRct(const key &message, const ctkeyV & inSk, const keyV & destinations, const vector<xmr_amount> & amounts, const ctkeyM &mixRing, const keyV &amount_keys, const multisig_kLRki *kLRki, multisig_out *msout, unsigned int index, ctkeyV &outSk, bool bulletproof, hw::device &hwdev) { CHECK_AND_ASSERT_THROW_MES(amounts.size() == destinations.size() || amounts.size() == destinations.size() + 1, "Different number of amounts/destinations"); CHECK_AND_ASSERT_THROW_MES(amount_keys.size() == destinations.size(), "Different number of amount_keys/destinations"); CHECK_AND_ASSERT_THROW_MES(index < mixRing.size(), "Bad index into mixRing"); @@ -685,8 +686,7 @@ namespace rct { //mask amount and mask rv.ecdhInfo[i].mask = copy(outSk[i].mask); rv.ecdhInfo[i].amount = d2h(amounts[i]); - ecdhEncode(rv.ecdhInfo[i], amount_keys[i]); - + ecdhEncode(rv.ecdhInfo[i], amount_keys[i], hwdev); } //set txn fee @@ -703,21 +703,21 @@ namespace rct { rv.mixRing = mixRing; if (msout) msout->c.resize(1); - rv.p.MGs.push_back(proveRctMG(get_pre_mlsag_hash(rv), rv.mixRing, inSk, outSk, rv.outPk, kLRki, msout ? &msout->c[0] : NULL, index, txnFeeKey)); + rv.p.MGs.push_back(proveRctMG(get_pre_mlsag_hash(rv, hwdev), rv.mixRing, inSk, outSk, rv.outPk, kLRki, msout ? &msout->c[0] : NULL, index, txnFeeKey,hwdev)); return rv; } - rctSig genRct(const key &message, const ctkeyV & inSk, const ctkeyV & inPk, const keyV & destinations, const vector<xmr_amount> & amounts, const keyV &amount_keys, const multisig_kLRki *kLRki, multisig_out *msout, const int mixin) { + rctSig genRct(const key &message, const ctkeyV & inSk, const ctkeyV & inPk, const keyV & destinations, const vector<xmr_amount> & amounts, const keyV &amount_keys, const multisig_kLRki *kLRki, multisig_out *msout, const int mixin, hw::device &hwdev) { unsigned int index; ctkeyM mixRing; ctkeyV outSk; tie(mixRing, index) = populateFromBlockchain(inPk, mixin); - return genRct(message, inSk, destinations, amounts, mixRing, amount_keys, kLRki, msout, index, outSk, false); + return genRct(message, inSk, destinations, amounts, mixRing, amount_keys, kLRki, msout, index, outSk, false, hwdev); } //RCT simple //for post-rct only - rctSig genRctSimple(const key &message, const ctkeyV & inSk, const keyV & destinations, const vector<xmr_amount> &inamounts, const vector<xmr_amount> &outamounts, xmr_amount txnFee, const ctkeyM & mixRing, const keyV &amount_keys, const std::vector<multisig_kLRki> *kLRki, multisig_out *msout, const std::vector<unsigned int> & index, ctkeyV &outSk, bool bulletproof) { + rctSig genRctSimple(const key &message, const ctkeyV & inSk, const keyV & destinations, const vector<xmr_amount> &inamounts, const vector<xmr_amount> &outamounts, xmr_amount txnFee, const ctkeyM & mixRing, const keyV &amount_keys, const std::vector<multisig_kLRki> *kLRki, multisig_out *msout, const std::vector<unsigned int> & index, ctkeyV &outSk, bool bulletproof, hw::device &hwdev) { CHECK_AND_ASSERT_THROW_MES(inamounts.size() > 0, "Empty inamounts"); CHECK_AND_ASSERT_THROW_MES(inamounts.size() == inSk.size(), "Different number of inamounts/inSk"); CHECK_AND_ASSERT_THROW_MES(outamounts.size() == destinations.size(), "Different number of amounts/destinations"); @@ -767,7 +767,7 @@ namespace rct { //mask amount and mask rv.ecdhInfo[i].mask = copy(outSk[i].mask); rv.ecdhInfo[i].amount = d2h(outamounts[i]); - ecdhEncode(rv.ecdhInfo[i], amount_keys[i]); + ecdhEncode(rv.ecdhInfo[i], amount_keys[i],hwdev); } //set txn fee @@ -790,16 +790,16 @@ namespace rct { genC(pseudoOuts[i], a[i], inamounts[i]); DP(pseudoOuts[i]); - key full_message = get_pre_mlsag_hash(rv); + key full_message = get_pre_mlsag_hash(rv,hwdev); if (msout) msout->c.resize(inamounts.size()); for (i = 0 ; i < inamounts.size(); i++) { - rv.p.MGs[i] = proveRctMGSimple(full_message, rv.mixRing[i], inSk[i], a[i], pseudoOuts[i], kLRki ? &(*kLRki)[i]: NULL, msout ? &msout->c[i] : NULL, index[i]); + rv.p.MGs[i] = proveRctMGSimple(full_message, rv.mixRing[i], inSk[i], a[i], pseudoOuts[i], kLRki ? &(*kLRki)[i]: NULL, msout ? &msout->c[i] : NULL, index[i], hwdev); } return rv; } - rctSig genRctSimple(const key &message, const ctkeyV & inSk, const ctkeyV & inPk, const keyV & destinations, const vector<xmr_amount> &inamounts, const vector<xmr_amount> &outamounts, const keyV &amount_keys, const std::vector<multisig_kLRki> *kLRki, multisig_out *msout, xmr_amount txnFee, unsigned int mixin) { + rctSig genRctSimple(const key &message, const ctkeyV & inSk, const ctkeyV & inPk, const keyV & destinations, const vector<xmr_amount> &inamounts, const vector<xmr_amount> &outamounts, const keyV &amount_keys, const std::vector<multisig_kLRki> *kLRki, multisig_out *msout, xmr_amount txnFee, unsigned int mixin, hw::device &hwdev) { std::vector<unsigned int> index; index.resize(inPk.size()); ctkeyM mixRing; @@ -809,7 +809,7 @@ namespace rct { mixRing[i].resize(mixin+1); index[i] = populateFromBlockchainSimple(mixRing[i], inPk[i], mixin); } - return genRctSimple(message, inSk, destinations, inamounts, outamounts, txnFee, mixRing, amount_keys, kLRki, msout, index, outSk, false); + return genRctSimple(message, inSk, destinations, inamounts, outamounts, txnFee, mixRing, amount_keys, kLRki, msout, index, outSk, false, hwdev); } //RingCT protocol @@ -868,7 +868,7 @@ namespace rct { if (!semantics) { //compute txn fee key txnFeeKey = scalarmultH(d2h(rv.txnFee)); - bool mgVerd = verRctMG(rv.p.MGs[0], rv.mixRing, rv.outPk, txnFeeKey, get_pre_mlsag_hash(rv)); + bool mgVerd = verRctMG(rv.p.MGs[0], rv.mixRing, rv.outPk, txnFeeKey, get_pre_mlsag_hash(rv, hw::get_device("default"))); DP("mg sig verified?"); DP(mgVerd); if (!mgVerd) { @@ -973,7 +973,7 @@ namespace rct { } } else { - const key message = get_pre_mlsag_hash(rv); + const key message = get_pre_mlsag_hash(rv, hw::get_device("default")); results.clear(); results.resize(rv.mixRing.size()); @@ -1017,14 +1017,14 @@ namespace rct { //decodeRct: (c.f. http://eprint.iacr.org/2015/1098 section 5.1.1) // uses the attached ecdh info to find the amounts represented by each output commitment // must know the destination private key to find the correct amount, else will return a random number - xmr_amount decodeRct(const rctSig & rv, const key & sk, unsigned int i, key & mask) { + xmr_amount decodeRct(const rctSig & rv, const key & sk, unsigned int i, key & mask, hw::device &hwdev) { CHECK_AND_ASSERT_MES(rv.type == RCTTypeFull || rv.type == RCTTypeFullBulletproof, false, "decodeRct called on non-full rctSig"); CHECK_AND_ASSERT_THROW_MES(i < rv.ecdhInfo.size(), "Bad index"); CHECK_AND_ASSERT_THROW_MES(rv.outPk.size() == rv.ecdhInfo.size(), "Mismatched sizes of rv.outPk and rv.ecdhInfo"); //mask amount and mask ecdhTuple ecdh_info = rv.ecdhInfo[i]; - ecdhDecode(ecdh_info, sk); + ecdhDecode(ecdh_info, sk, hwdev); mask = ecdh_info.mask; key amount = ecdh_info.amount; key C = rv.outPk[i].mask; @@ -1040,19 +1040,19 @@ namespace rct { return h2d(amount); } - xmr_amount decodeRct(const rctSig & rv, const key & sk, unsigned int i) { + xmr_amount decodeRct(const rctSig & rv, const key & sk, unsigned int i, hw::device &hwdev) { key mask; - return decodeRct(rv, sk, i, mask); + return decodeRct(rv, sk, i, mask, hwdev); } - xmr_amount decodeRctSimple(const rctSig & rv, const key & sk, unsigned int i, key &mask) { + xmr_amount decodeRctSimple(const rctSig & rv, const key & sk, unsigned int i, key &mask, hw::device &hwdev) { CHECK_AND_ASSERT_MES(rv.type == RCTTypeSimple || rv.type == RCTTypeSimpleBulletproof, false, "decodeRct called on non simple rctSig"); CHECK_AND_ASSERT_THROW_MES(i < rv.ecdhInfo.size(), "Bad index"); CHECK_AND_ASSERT_THROW_MES(rv.outPk.size() == rv.ecdhInfo.size(), "Mismatched sizes of rv.outPk and rv.ecdhInfo"); //mask amount and mask ecdhTuple ecdh_info = rv.ecdhInfo[i]; - ecdhDecode(ecdh_info, sk); + ecdhDecode(ecdh_info, sk, hwdev); mask = ecdh_info.mask; key amount = ecdh_info.amount; key C = rv.outPk[i].mask; @@ -1068,9 +1068,9 @@ namespace rct { return h2d(amount); } - xmr_amount decodeRctSimple(const rctSig & rv, const key & sk, unsigned int i) { + xmr_amount decodeRctSimple(const rctSig & rv, const key & sk, unsigned int i, hw::device &hwdev) { key mask; - return decodeRctSimple(rv, sk, i, mask); + return decodeRctSimple(rv, sk, i, mask, hwdev); } bool signMultisig(rctSig &rv, const std::vector<unsigned int> &indices, const keyV &k, const multisig_out &msout, const key &secret_key) { diff --git a/src/ringct/rctSigs.h b/src/ringct/rctSigs.h index e83083a98..17047fc0f 100644 --- a/src/ringct/rctSigs.h +++ b/src/ringct/rctSigs.h @@ -50,6 +50,8 @@ extern "C" { #include "rctTypes.h" #include "rctOps.h" +#include "cryptonote_basic/cryptonote_basic.h" +#include "device/device_declare.hpp" //Define this flag when debugging to get additional info on the console #ifdef DBG @@ -73,7 +75,7 @@ namespace rct { // the signer knows a secret key for each row in that column // Ver verifies that the MG sig was created correctly keyV keyImageV(const keyV &xx); - mgSig MLSAG_Gen(const key &message, const keyM & pk, const keyV & xx, const multisig_kLRki *kLRki, key *mscout, const unsigned int index, size_t dsRows); + mgSig MLSAG_Gen(const key &message, const keyM & pk, const keyV & xx, const multisig_kLRki *kLRki, key *mscout, const unsigned int index, size_t dsRows, hw::device &hwdev); bool MLSAG_Ver(const key &message, const keyM &pk, const mgSig &sig, size_t dsRows); //mgSig MLSAG_Gen_Old(const keyM & pk, const keyV & xx, const int index); @@ -95,8 +97,8 @@ namespace rct { // this shows that sum inputs = sum outputs //Ver: // verifies the above sig is created corretly - mgSig proveRctMG(const ctkeyM & pubs, const ctkeyV & inSk, const keyV &outMasks, const ctkeyV & outPk, const multisig_kLRki *kLRki, key *mscout, unsigned int index, key txnFee, const key &message); - mgSig proveRctMGSimple(const key & message, const ctkeyV & pubs, const ctkey & inSk, const key &a , const key &Cout, const multisig_kLRki *kLRki, key *mscout, unsigned int index); + mgSig proveRctMG(const ctkeyM & pubs, const ctkeyV & inSk, const keyV &outMasks, const ctkeyV & outPk, const multisig_kLRki *kLRki, key *mscout, unsigned int index, key txnFee, const key &message, hw::device &hwdev); + mgSig proveRctMGSimple(const key & message, const ctkeyV & pubs, const ctkey & inSk, const key &a , const key &Cout, const multisig_kLRki *kLRki, key *mscout, unsigned int index, hw::device &hwdev); bool verRctMG(const mgSig &mg, const ctkeyM & pubs, const ctkeyV & outPk, key txnFee, const key &message); bool verRctMGSimple(const key &message, const mgSig &mg, const ctkeyV & pubs, const key & C); @@ -118,18 +120,18 @@ namespace rct { //decodeRct: (c.f. http://eprint.iacr.org/2015/1098 section 5.1.1) // uses the attached ecdh info to find the amounts represented by each output commitment // must know the destination private key to find the correct amount, else will return a random number - rctSig genRct(const key &message, const ctkeyV & inSk, const keyV & destinations, const std::vector<xmr_amount> & amounts, const ctkeyM &mixRing, const keyV &amount_keys, const multisig_kLRki *kLRki, multisig_out *msout, unsigned int index, ctkeyV &outSk, bool bulletproof); - rctSig genRct(const key &message, const ctkeyV & inSk, const ctkeyV & inPk, const keyV & destinations, const std::vector<xmr_amount> & amounts, const keyV &amount_keys, const multisig_kLRki *kLRki, multisig_out *msout, const int mixin); - rctSig genRctSimple(const key & message, const ctkeyV & inSk, const ctkeyV & inPk, const keyV & destinations, const std::vector<xmr_amount> & inamounts, const std::vector<xmr_amount> & outamounts, const keyV &amount_keys, const std::vector<multisig_kLRki> *kLRki, multisig_out *msout, xmr_amount txnFee, unsigned int mixin); - rctSig genRctSimple(const key & message, const ctkeyV & inSk, const keyV & destinations, const std::vector<xmr_amount> & inamounts, const std::vector<xmr_amount> & outamounts, xmr_amount txnFee, const ctkeyM & mixRing, const keyV &amount_keys, const std::vector<multisig_kLRki> *kLRki, multisig_out *msout, const std::vector<unsigned int> & index, ctkeyV &outSk, bool bulletproof); + rctSig genRct(const key &message, const ctkeyV & inSk, const keyV & destinations, const std::vector<xmr_amount> & amounts, const ctkeyM &mixRing, const keyV &amount_keys, const multisig_kLRki *kLRki, multisig_out *msout, unsigned int index, ctkeyV &outSk, bool bulletproof, hw::device &hwdev); + rctSig genRct(const key &message, const ctkeyV & inSk, const ctkeyV & inPk, const keyV & destinations, const std::vector<xmr_amount> & amounts, const keyV &amount_keys, const multisig_kLRki *kLRki, multisig_out *msout, const int mixin, hw::device &hwdev); + rctSig genRctSimple(const key & message, const ctkeyV & inSk, const ctkeyV & inPk, const keyV & destinations, const std::vector<xmr_amount> & inamounts, const std::vector<xmr_amount> & outamounts, const keyV &amount_keys, const std::vector<multisig_kLRki> *kLRki, multisig_out *msout, xmr_amount txnFee, unsigned int mixin, hw::device &hwdev); + rctSig genRctSimple(const key & message, const ctkeyV & inSk, const keyV & destinations, const std::vector<xmr_amount> & inamounts, const std::vector<xmr_amount> & outamounts, xmr_amount txnFee, const ctkeyM & mixRing, const keyV &amount_keys, const std::vector<multisig_kLRki> *kLRki, multisig_out *msout, const std::vector<unsigned int> & index, ctkeyV &outSk, bool bulletproof, hw::device &hwdev); bool verRct(const rctSig & rv, bool semantics); static inline bool verRct(const rctSig & rv) { return verRct(rv, true) && verRct(rv, false); } bool verRctSimple(const rctSig & rv, bool semantics); static inline bool verRctSimple(const rctSig & rv) { return verRctSimple(rv, true) && verRctSimple(rv, false); } - xmr_amount decodeRct(const rctSig & rv, const key & sk, unsigned int i, key & mask); - xmr_amount decodeRct(const rctSig & rv, const key & sk, unsigned int i); - xmr_amount decodeRctSimple(const rctSig & rv, const key & sk, unsigned int i, key & mask); - xmr_amount decodeRctSimple(const rctSig & rv, const key & sk, unsigned int i); + xmr_amount decodeRct(const rctSig & rv, const key & sk, unsigned int i, key & mask, hw::device &hwdev); + xmr_amount decodeRct(const rctSig & rv, const key & sk, unsigned int i, hw::device &hwdev); + xmr_amount decodeRctSimple(const rctSig & rv, const key & sk, unsigned int i, key & mask, hw::device &hwdev); + xmr_amount decodeRctSimple(const rctSig & rv, const key & sk, unsigned int i, hw::device &hwdev); bool signMultisig(rctSig &rv, const std::vector<unsigned int> &indices, const keyV &k, const multisig_out &msout, const key &secret_key); } diff --git a/src/rpc/core_rpc_server.cpp b/src/rpc/core_rpc_server.cpp index da2e79dfa..a8d801ac7 100644 --- a/src/rpc/core_rpc_server.cpp +++ b/src/rpc/core_rpc_server.cpp @@ -73,8 +73,6 @@ namespace cryptonote { command_line::add_arg(desc, arg_rpc_bind_port); command_line::add_arg(desc, arg_rpc_restricted_bind_port); - command_line::add_arg(desc, arg_testnet_rpc_bind_port); - command_line::add_arg(desc, arg_testnet_rpc_restricted_bind_port); command_line::add_arg(desc, arg_restricted_rpc); command_line::add_arg(desc, arg_bootstrap_daemon_address); command_line::add_arg(desc, arg_bootstrap_daemon_login); @@ -2075,10 +2073,16 @@ namespace cryptonote } //------------------------------------------------------------------------------------------------------------------------------ - const command_line::arg_descriptor<std::string> core_rpc_server::arg_rpc_bind_port = { + const command_line::arg_descriptor<std::string, false, true> core_rpc_server::arg_rpc_bind_port = { "rpc-bind-port" , "Port for RPC server" , std::to_string(config::RPC_DEFAULT_PORT) + , cryptonote::arg_testnet_on + , [](bool testnet, bool defaulted, std::string val) { + if (testnet && defaulted) + return std::to_string(config::testnet::RPC_DEFAULT_PORT); + return val; + } }; const command_line::arg_descriptor<std::string> core_rpc_server::arg_rpc_restricted_bind_port = { @@ -2087,18 +2091,6 @@ namespace cryptonote , "" }; - const command_line::arg_descriptor<std::string> core_rpc_server::arg_testnet_rpc_bind_port = { - "testnet-rpc-bind-port" - , "Port for testnet RPC server" - , std::to_string(config::testnet::RPC_DEFAULT_PORT) - }; - - const command_line::arg_descriptor<std::string> core_rpc_server::arg_testnet_rpc_restricted_bind_port = { - "testnet-rpc-restricted-bind-port" - , "Port for testnet restricted RPC server" - , "" - }; - const command_line::arg_descriptor<bool> core_rpc_server::arg_restricted_rpc = { "restricted-rpc" , "Restrict RPC to view only commands and do not return privacy sensitive data in RPC calls" diff --git a/src/rpc/core_rpc_server.h b/src/rpc/core_rpc_server.h index 650e738bd..3c57a6016 100644 --- a/src/rpc/core_rpc_server.h +++ b/src/rpc/core_rpc_server.h @@ -53,10 +53,8 @@ namespace cryptonote { public: - static const command_line::arg_descriptor<std::string> arg_rpc_bind_port; + static const command_line::arg_descriptor<std::string, false, true> arg_rpc_bind_port; static const command_line::arg_descriptor<std::string> arg_rpc_restricted_bind_port; - static const command_line::arg_descriptor<std::string> arg_testnet_rpc_bind_port; - static const command_line::arg_descriptor<std::string> arg_testnet_rpc_restricted_bind_port; static const command_line::arg_descriptor<bool> arg_restricted_rpc; static const command_line::arg_descriptor<std::string> arg_bootstrap_daemon_address; static const command_line::arg_descriptor<std::string> arg_bootstrap_daemon_login; diff --git a/src/serialization/binary_archive.h b/src/serialization/binary_archive.h index 79c6c753c..f47a4494d 100644 --- a/src/serialization/binary_archive.h +++ b/src/serialization/binary_archive.h @@ -82,7 +82,7 @@ protected: /* \struct binary_archive * - * \brief the actualy binary archive type + * \brief the actually binary archive type * * \detailed The boolean template argument /a W is the is_saving * parameter for binary_archive_base. diff --git a/src/serialization/variant.h b/src/serialization/variant.h index 31d903d55..1d00ab461 100644 --- a/src/serialization/variant.h +++ b/src/serialization/variant.h @@ -87,7 +87,7 @@ struct variant_reader }; // This one just fails when you call it.... okay -// So the TEnd parameter must be specified/differnt from TBegin +// So the TEnd parameter must be specified/different from TBegin template <class Archive, class Variant, class TBegin> struct variant_reader<Archive, Variant, TBegin, TBegin> { diff --git a/src/simplewallet/simplewallet.cpp b/src/simplewallet/simplewallet.cpp index 2d8eb97e0..3c940bfef 100644 --- a/src/simplewallet/simplewallet.cpp +++ b/src/simplewallet/simplewallet.cpp @@ -62,6 +62,7 @@ #include "ringct/rctSigs.h" #include "multisig/multisig.h" #include "wallet/wallet_args.h" +#include "device/device.hpp" #include <stdexcept> #ifdef HAVE_READLINE @@ -113,6 +114,7 @@ namespace const std::array<const char* const, 5> allowed_priority_strings = {{"default", "unimportant", "normal", "elevated", "priority"}}; const auto arg_wallet_file = wallet_args::arg_wallet_file(); const command_line::arg_descriptor<std::string> arg_generate_new_wallet = {"generate-new-wallet", sw::tr("Generate new wallet and save it to <arg>"), ""}; + const command_line::arg_descriptor<std::string> arg_generate_from_device = {"generate-from-device", sw::tr("Generate new wallet from device and save it to <arg>"), ""}; const command_line::arg_descriptor<std::string> arg_generate_from_view_key = {"generate-from-view-key", sw::tr("Generate incoming-only wallet from view key"), ""}; const command_line::arg_descriptor<std::string> arg_generate_from_spend_key = {"generate-from-spend-key", sw::tr("Generate deterministic wallet from spend key"), ""}; const command_line::arg_descriptor<std::string> arg_generate_from_keys = {"generate-from-keys", sw::tr("Generate wallet from private keys"), ""}; @@ -509,7 +511,11 @@ bool simple_wallet::viewkey(const std::vector<std::string> &args/* = std::vector { if (m_wallet->ask_password() && !get_and_verify_password()) { return true; } // don't log - std::cout << "secret: " << string_tools::pod_to_hex(m_wallet->get_account().get_keys().m_view_secret_key) << std::endl; + if (m_wallet->key_on_device()) { + std::cout << "secret: On device. Not available" << std::endl; + } else { + std::cout << "secret: " << string_tools::pod_to_hex(m_wallet->get_account().get_keys().m_view_secret_key) << std::endl; + } std::cout << "public: " << string_tools::pod_to_hex(m_wallet->get_account().get_keys().m_account_address.m_view_public_key) << std::endl; return true; @@ -524,7 +530,11 @@ bool simple_wallet::spendkey(const std::vector<std::string> &args/* = std::vecto } if (m_wallet->ask_password() && !get_and_verify_password()) { return true; } // don't log - std::cout << "secret: " << string_tools::pod_to_hex(m_wallet->get_account().get_keys().m_spend_secret_key) << std::endl; + if (m_wallet->key_on_device()) { + std::cout << "secret: On device. Not available" << std::endl; + } else { + std::cout << "secret: " << string_tools::pod_to_hex(m_wallet->get_account().get_keys().m_spend_secret_key) << std::endl; + } std::cout << "public: " << string_tools::pod_to_hex(m_wallet->get_account().get_keys().m_account_address.m_spend_public_key) << std::endl; return true; @@ -536,6 +546,11 @@ bool simple_wallet::print_seed(bool encrypted) std::string seed; bool ready, multisig; + if (m_wallet->key_on_device()) + { + fail_msg_writer() << tr("command not supported by HW wallet"); + return true; + } if (m_wallet->watch_only()) { fail_msg_writer() << tr("wallet is watch-only and has no seed"); @@ -598,6 +613,11 @@ bool simple_wallet::encrypted_seed(const std::vector<std::string> &args/* = std: bool simple_wallet::seed_set_language(const std::vector<std::string> &args/* = std::vector<std::string>()*/) { + if (m_wallet->key_on_device()) + { + fail_msg_writer() << tr("command not supported by HW wallet"); + return true; + } if (m_wallet->multisig()) { fail_msg_writer() << tr("wallet is multisig and has no seed"); @@ -639,6 +659,8 @@ bool simple_wallet::change_password(const std::vector<std::string> &args) // prompts for a new password, pass true to verify the password const auto pwd_container = default_password_prompter(true); + if(!pwd_container) + return true; try { @@ -724,6 +746,11 @@ bool simple_wallet::print_fee_info(const std::vector<std::string> &args/* = std: bool simple_wallet::prepare_multisig(const std::vector<std::string> &args) { + if (m_wallet->key_on_device()) + { + fail_msg_writer() << tr("command not supported by HW wallet"); + return true; + } if (m_wallet->multisig()) { fail_msg_writer() << tr("This wallet is already multisig"); @@ -757,6 +784,11 @@ bool simple_wallet::prepare_multisig(const std::vector<std::string> &args) bool simple_wallet::make_multisig(const std::vector<std::string> &args) { + if (m_wallet->key_on_device()) + { + fail_msg_writer() << tr("command not supported by HW wallet"); + return true; + } if (m_wallet->multisig()) { fail_msg_writer() << tr("This wallet is already multisig"); @@ -831,6 +863,11 @@ bool simple_wallet::make_multisig(const std::vector<std::string> &args) bool simple_wallet::finalize_multisig(const std::vector<std::string> &args) { bool ready; + if (m_wallet->key_on_device()) + { + fail_msg_writer() << tr("command not supported by HW wallet"); + return true; + } if (!m_wallet->multisig(&ready)) { fail_msg_writer() << tr("This wallet is not multisig"); @@ -875,6 +912,11 @@ bool simple_wallet::finalize_multisig(const std::vector<std::string> &args) bool simple_wallet::export_multisig(const std::vector<std::string> &args) { bool ready; + if (m_wallet->key_on_device()) + { + fail_msg_writer() << tr("command not supported by HW wallet"); + return true; + } if (!m_wallet->multisig(&ready)) { fail_msg_writer() << tr("This wallet is not multisig"); @@ -922,6 +964,11 @@ bool simple_wallet::import_multisig(const std::vector<std::string> &args) { bool ready; uint32_t threshold, total; + if (m_wallet->key_on_device()) + { + fail_msg_writer() << tr("command not supported by HW wallet"); + return true; + } if (!m_wallet->multisig(&ready, &threshold, &total)) { fail_msg_writer() << tr("This wallet is not multisig"); @@ -996,6 +1043,11 @@ bool simple_wallet::accept_loaded_tx(const tools::wallet2::multisig_tx_set &txs) bool simple_wallet::sign_multisig(const std::vector<std::string> &args) { bool ready; + if (m_wallet->key_on_device()) + { + fail_msg_writer() << tr("command not supported by HW wallet"); + return true; + } if(!m_wallet->multisig(&ready)) { fail_msg_writer() << tr("This is not a multisig wallet"); @@ -1064,6 +1116,11 @@ bool simple_wallet::submit_multisig(const std::vector<std::string> &args) { bool ready; uint32_t threshold; + if (m_wallet->key_on_device()) + { + fail_msg_writer() << tr("command not supported by HW wallet"); + return true; + } if (!m_wallet->multisig(&ready, &threshold)) { fail_msg_writer() << tr("This is not a multisig wallet"); @@ -1126,6 +1183,11 @@ bool simple_wallet::export_raw_multisig(const std::vector<std::string> &args) { bool ready; uint32_t threshold; + if (m_wallet->key_on_device()) + { + fail_msg_writer() << tr("command not supported by HW wallet"); + return true; + } if (!m_wallet->multisig(&ready, &threshold)) { fail_msg_writer() << tr("This is not a multisig wallet"); @@ -2063,12 +2125,12 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm) if (!handle_command_line(vm)) return false; - if((!m_generate_new.empty()) + (!m_wallet_file.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) + 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\" and --generate-from-json=\"jsonfilename\""); + 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\""); return false; } - else if (m_generate_new.empty() && m_wallet_file.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()) + else 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()) { if(!ask_wallet_create_if_needed()) return false; } @@ -2405,7 +2467,7 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm) // get N secret spend keys from user for(unsigned int i=0; i<multisig_n; ++i) { - spendkey_string = input_line(tr((boost::format(tr("Secret spend key (%u of %u):")) % (i+i) % multisig_m).str().c_str())); + spendkey_string = input_line(tr((boost::format(tr("Secret spend key (%u of %u):")) % (i+1) % multisig_m).str().c_str())); if (std::cin.eof()) return false; if (spendkey_string.empty()) @@ -2465,6 +2527,13 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm) if (!m_wallet) return false; } + else if (!m_generate_from_device.empty()) + { + m_wallet_file = m_generate_from_device; + // create wallet + bool r = new_wallet(vm, "Ledger"); + CHECK_AND_ASSERT_MES(r, false, tr("account creation failed")); + } else { if (m_generate_new.empty()) { @@ -2520,7 +2589,7 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm) try { year = boost::lexical_cast<uint16_t>(heightstr.substr(0,4)); - // lexical_cast<uint8_t> won't work becasue uint8_t is treated as character type + // lexical_cast<uint8_t> won't work because uint8_t is treated as character type month = boost::lexical_cast<uint16_t>(heightstr.substr(5,2)); day = boost::lexical_cast<uint16_t>(heightstr.substr(8,2)); m_restore_height = m_wallet->get_blockchain_height_by_date(year, month, day); @@ -2599,6 +2668,7 @@ bool simple_wallet::handle_command_line(const boost::program_options::variables_ { m_wallet_file = command_line::get_arg(vm, arg_wallet_file); m_generate_new = command_line::get_arg(vm, arg_generate_new_wallet); + m_generate_from_device = command_line::get_arg(vm, arg_generate_from_device); m_generate_from_view_key = command_line::get_arg(vm, arg_generate_from_view_key); m_generate_from_spend_key = command_line::get_arg(vm, arg_generate_from_spend_key); m_generate_from_keys = command_line::get_arg(vm, arg_generate_from_keys); @@ -2618,6 +2688,7 @@ bool simple_wallet::handle_command_line(const boost::program_options::variables_ !m_generate_from_keys.empty() || !m_generate_from_multisig_keys.empty() || !m_generate_from_json.empty() || + !m_generate_from_device.empty() || m_restore_deterministic_wallet || m_restore_multisig_wallet; @@ -2818,6 +2889,33 @@ bool simple_wallet::new_wallet(const boost::program_options::variables_map& vm, return true; } + +//---------------------------------------------------------------------------------------------------- +bool simple_wallet::new_wallet(const boost::program_options::variables_map& vm, + const std::string &device_name) { + auto rc = tools::wallet2::make_new(vm, password_prompter); + m_wallet = std::move(rc.first); + if (!m_wallet) + { + return false; + } + if (m_restore_height) + m_wallet->set_refresh_from_block_height(m_restore_height); + + try + { + m_wallet->restore(m_wallet_file, std::move(rc.second).password(), device_name); + message_writer(console_color_white, true) << tr("Generated new on device wallet: ") + << m_wallet->get_account().get_public_address_str(m_wallet->testnet()); + } + catch (const std::exception& e) + { + fail_msg_writer() << tr("failed to generate new wallet: ") << e.what(); + return false; + } + + return true; +} //---------------------------------------------------------------------------------------------------- bool simple_wallet::new_wallet(const boost::program_options::variables_map& vm, const std::string &multisig_keys, const std::string &old_language) @@ -2891,6 +2989,9 @@ bool simple_wallet::open_wallet(const boost::program_options::variables_map& vm) prefix = tr("Opened wallet"); message_writer(console_color_white, true) << prefix << ": " << m_wallet->get_account().get_public_address_str(m_wallet->testnet()); + if (m_wallet->get_account().get_device()) { + message_writer(console_color_white, true) << "Wallet is on device: " << m_wallet->get_account().get_device().get_name(); + } // If the wallet file is deprecated, we should ask for mnemonic language again and store // everything in the new format. // NOTE: this is_deprecated() refers to the wallet file format before becoming JSON. It does not refer to the "old english" seed words form of "deprecated" used elsewhere. @@ -3085,6 +3186,7 @@ bool simple_wallet::stop_mining(const std::vector<std::string>& args) fail_msg_writer() << tr("wallet is null"); return true; } + COMMAND_RPC_STOP_MINING::request req; COMMAND_RPC_STOP_MINING::response res; bool r = net_utils::invoke_http_json("/stop_mining", req, res, m_http_client); @@ -3192,14 +3294,6 @@ void simple_wallet::on_money_spent(uint64_t height, const crypto::hash &txid, co //---------------------------------------------------------------------------------------------------- void simple_wallet::on_skip_transaction(uint64_t height, const crypto::hash &txid, const cryptonote::transaction& tx) { - message_writer(console_color_red, true) << "\r" << - tr("Height ") << height << ", " << - tr("transaction ") << txid << ", " << - tr("unsupported transaction format"); - if (m_auto_refresh_refreshing) - m_cmd_binder.print_prompt(); - else - m_refresh_progress_reporter.update(height, true); } //---------------------------------------------------------------------------------------------------- bool simple_wallet::refresh_main(uint64_t start_height, bool reset, bool is_init) @@ -4627,7 +4721,7 @@ bool simple_wallet::donate(const std::vector<std::string> &args_) local_args.push_back(amount_str); if (!payment_id_str.empty()) local_args.push_back(payment_id_str); - message_writer() << tr("Donating ") << amount_str << " to The Monero Project (donate.getmonero.org/"<< MONERO_DONATION_ADDR <<")."; + message_writer() << tr("Donating ") << amount_str << " to The Monero Project (donate.getmonero.org or "<< MONERO_DONATION_ADDR <<")."; transfer_new(local_args); return true; } @@ -4782,6 +4876,11 @@ bool simple_wallet::accept_loaded_tx(const tools::wallet2::signed_tx_set &txs) //---------------------------------------------------------------------------------------------------- bool simple_wallet::sign_transfer(const std::vector<std::string> &args_) { + if (m_wallet->key_on_device()) + { + fail_msg_writer() << tr("command not supported by HW wallet"); + return true; + } if(m_wallet->multisig()) { fail_msg_writer() << tr("This is a multisig wallet, it can only sign with sign_multisig"); @@ -4840,6 +4939,11 @@ bool simple_wallet::sign_transfer(const std::vector<std::string> &args_) //---------------------------------------------------------------------------------------------------- bool simple_wallet::submit_transfer(const std::vector<std::string> &args_) { + if (m_wallet->key_on_device()) + { + fail_msg_writer() << tr("command not supported by HW wallet"); + return true; + } if (!try_connect_to_daemon()) return true; @@ -4872,6 +4976,11 @@ bool simple_wallet::get_tx_key(const std::vector<std::string> &args_) { std::vector<std::string> local_args = args_; + if (m_wallet->key_on_device()) + { + fail_msg_writer() << tr("command not supported by HW wallet"); + return true; + } if(local_args.size() != 1) { fail_msg_writer() << tr("usage: get_tx_key <txid>"); return true; @@ -4907,6 +5016,11 @@ bool simple_wallet::get_tx_key(const std::vector<std::string> &args_) //---------------------------------------------------------------------------------------------------- bool simple_wallet::get_tx_proof(const std::vector<std::string> &args) { + if (m_wallet->key_on_device()) + { + fail_msg_writer() << tr("command not supported by HW wallet"); + return true; + } if (args.size() != 2 && args.size() != 3) { fail_msg_writer() << tr("usage: get_tx_proof <txid> <address> [<message>]"); @@ -5113,6 +5227,11 @@ bool simple_wallet::check_tx_proof(const std::vector<std::string> &args) //---------------------------------------------------------------------------------------------------- bool simple_wallet::get_spend_proof(const std::vector<std::string> &args) { + if (m_wallet->key_on_device()) + { + fail_msg_writer() << tr("command not supported by HW wallet"); + return true; + } if(args.size() != 1 && args.size() != 2) { fail_msg_writer() << tr("usage: get_spend_proof <txid> [<message>]"); return true; @@ -5198,6 +5317,11 @@ bool simple_wallet::check_spend_proof(const std::vector<std::string> &args) //---------------------------------------------------------------------------------------------------- bool simple_wallet::get_reserve_proof(const std::vector<std::string> &args) { + if (m_wallet->key_on_device()) + { + fail_msg_writer() << tr("command not supported by HW wallet"); + return true; + } if(args.size() != 1 && args.size() != 2) { fail_msg_writer() << tr("usage: get_reserve_proof (all|<amount>) [<message>]"); return true; @@ -6299,6 +6423,11 @@ bool simple_wallet::wallet_info(const std::vector<std::string> &args) //---------------------------------------------------------------------------------------------------- bool simple_wallet::sign(const std::vector<std::string> &args) { + if (m_wallet->key_on_device()) + { + fail_msg_writer() << tr("command not supported by HW wallet"); + return true; + } if (args.size() != 1) { fail_msg_writer() << tr("usage: sign <filename>"); @@ -6368,6 +6497,11 @@ bool simple_wallet::verify(const std::vector<std::string> &args) //---------------------------------------------------------------------------------------------------- bool simple_wallet::export_key_images(const std::vector<std::string> &args) { + if (m_wallet->key_on_device()) + { + fail_msg_writer() << tr("command not supported by HW wallet"); + return true; + } if (args.size() != 1) { fail_msg_writer() << tr("usage: export_key_images <filename>"); @@ -6405,6 +6539,11 @@ bool simple_wallet::export_key_images(const std::vector<std::string> &args) //---------------------------------------------------------------------------------------------------- bool simple_wallet::import_key_images(const std::vector<std::string> &args) { + if (m_wallet->key_on_device()) + { + fail_msg_writer() << tr("command not supported by HW wallet"); + return true; + } if (!m_trusted_daemon) { fail_msg_writer() << tr("this command requires a trusted daemon. Enable with --trusted-daemon"); @@ -6442,6 +6581,11 @@ bool simple_wallet::import_key_images(const std::vector<std::string> &args) //---------------------------------------------------------------------------------------------------- bool simple_wallet::export_outputs(const std::vector<std::string> &args) { + if (m_wallet->key_on_device()) + { + fail_msg_writer() << tr("command not supported by HW wallet"); + return true; + } if (args.size() != 1) { fail_msg_writer() << tr("usage: export_outputs <filename>"); @@ -6487,6 +6631,11 @@ bool simple_wallet::export_outputs(const std::vector<std::string> &args) //---------------------------------------------------------------------------------------------------- bool simple_wallet::import_outputs(const std::vector<std::string> &args) { + if (m_wallet->key_on_device()) + { + fail_msg_writer() << tr("command not supported by HW wallet"); + return true; + } if (args.size() != 1) { fail_msg_writer() << tr("usage: import_outputs <filename>"); @@ -6761,6 +6910,7 @@ int main(int argc, char* argv[]) tools::wallet2::init_options(desc_params); command_line::add_arg(desc_params, arg_wallet_file); command_line::add_arg(desc_params, arg_generate_new_wallet); + command_line::add_arg(desc_params, arg_generate_from_device); command_line::add_arg(desc_params, arg_generate_from_view_key); command_line::add_arg(desc_params, arg_generate_from_spend_key); command_line::add_arg(desc_params, arg_generate_from_keys); @@ -6811,6 +6961,11 @@ int main(int argc, char* argv[]) else { tools::signal_handler::install([&w](int type) { + if (tools::password_container::is_prompting.load()) + { + // must be prompting for password so return and let the signal stop prompt + return; + } #ifdef WIN32 if (type == CTRL_C_EVENT) #else diff --git a/src/simplewallet/simplewallet.h b/src/simplewallet/simplewallet.h index af2f940c3..4c7818bf1 100644 --- a/src/simplewallet/simplewallet.h +++ b/src/simplewallet/simplewallet.h @@ -97,6 +97,7 @@ namespace cryptonote const boost::optional<crypto::secret_key>& spendkey, const crypto::secret_key& viewkey); bool new_wallet(const boost::program_options::variables_map& vm, const std::string &multisig_keys, const std::string &old_language); + bool new_wallet(const boost::program_options::variables_map& vm, const std::string& device_name); bool open_wallet(const boost::program_options::variables_map& vm); bool close_wallet(); @@ -303,6 +304,7 @@ namespace cryptonote private: std::string m_wallet_file; std::string m_generate_new; + std::string m_generate_from_device; std::string m_generate_from_view_key; std::string m_generate_from_spend_key; std::string m_generate_from_keys; diff --git a/src/wallet/api/wallet.cpp b/src/wallet/api/wallet.cpp index 5ce8ede8d..7f8144129 100644 --- a/src/wallet/api/wallet.cpp +++ b/src/wallet/api/wallet.cpp @@ -1746,7 +1746,7 @@ void WalletImpl::doRefresh() m_synchronized = true; } // assuming if we have empty history, it wasn't initialized yet - // for futher history changes client need to update history in + // for further history changes client need to update history in // "on_money_received" and "on_money_sent" callbacks if (m_history->count() == 0) { m_history->refresh(); diff --git a/src/wallet/api/wallet2_api.h b/src/wallet/api/wallet2_api.h index a22788399..1c4545a25 100644 --- a/src/wallet/api/wallet2_api.h +++ b/src/wallet/api/wallet2_api.h @@ -685,7 +685,7 @@ struct Wallet * \brief setUserNote - attach an arbitrary string note to a txid * \param txid - the transaction id to attach the note to * \param note - the note - * \return true if succesful, false otherwise + * \return true if successful, false otherwise */ virtual bool setUserNote(const std::string &txid, const std::string ¬e) = 0; /*! @@ -827,7 +827,7 @@ struct WalletManager const std::string &spendKeyString = "") = 0; /*! - * \brief Closes wallet. In case operation succeded, wallet object deleted. in case operation failed, wallet object not deleted + * \brief Closes wallet. In case operation succeeded, wallet object deleted. in case operation failed, wallet object not deleted * \param wallet previously opened / created wallet instance * \return None */ diff --git a/src/wallet/api/wallet_manager.cpp b/src/wallet/api/wallet_manager.cpp index bb144227e..22bc343fb 100644 --- a/src/wallet/api/wallet_manager.cpp +++ b/src/wallet/api/wallet_manager.cpp @@ -37,7 +37,7 @@ #include "common/updates.h" #include "version.h" #include "net/http_client.h" - +#include "deviuce/device.hpp" #include <boost/filesystem.hpp> #include <boost/regex.hpp> @@ -151,7 +151,7 @@ bool WalletManagerImpl::walletExists(const std::string &path) bool WalletManagerImpl::verifyWalletPassword(const std::string &keys_file_name, const std::string &password, bool no_spend_key) const { - return tools::wallet2::verify_password(keys_file_name, password, no_spend_key); + return tools::wallet2::verify_password(keys_file_name, password, no_spend_key, hw::get_device("default")); } std::vector<std::string> WalletManagerImpl::findWallets(const std::string &path) diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 5dc3ea2d1..08924fffa 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -66,6 +66,7 @@ using namespace epee; #include "memwipe.h" #include "common/base58.h" #include "ringct/rctSigs.h" +#include "device/device.hpp" extern "C" { @@ -382,7 +383,7 @@ std::unique_ptr<tools::wallet2> generate_from_json(const std::string& json_file, if (field_spendkey.empty()) { - // if we have an addres but no spend key, we can deduce the spend public key + // if we have an address but no spend key, we can deduce the spend public key // from the address if (field_address_found) { @@ -538,7 +539,7 @@ uint8_t get_bulletproof_fork() return 8; } -crypto::hash8 get_short_payment_id(const tools::wallet2::pending_tx &ptx) +crypto::hash8 get_short_payment_id(const tools::wallet2::pending_tx &ptx, hw::device &hwdev) { crypto::hash8 payment_id8 = null_hash8; std::vector<tx_extra_field> tx_extra_fields; @@ -553,16 +554,16 @@ crypto::hash8 get_short_payment_id(const tools::wallet2::pending_tx &ptx) MWARNING("Encrypted payment id found, but no destinations public key, cannot decrypt"); return crypto::null_hash8; } - decrypt_payment_id(payment_id8, ptx.dests[0].addr.m_view_public_key, ptx.tx_key); + decrypt_payment_id(payment_id8, ptx.dests[0].addr.m_view_public_key, ptx.tx_key, hwdev); } } return payment_id8; } -tools::wallet2::tx_construction_data get_construction_data_with_decrypted_short_payment_id(const tools::wallet2::pending_tx &ptx) +tools::wallet2::tx_construction_data get_construction_data_with_decrypted_short_payment_id(const tools::wallet2::pending_tx &ptx, hw::device &hwdev) { tools::wallet2::tx_construction_data construction_data = ptx.construction_data; - crypto::hash8 payment_id = get_short_payment_id(ptx); + crypto::hash8 payment_id = get_short_payment_id(ptx,hwdev); if (payment_id != null_hash8) { // Remove encrypted @@ -623,7 +624,8 @@ wallet2::wallet2(bool testnet, bool restricted): m_light_wallet_blockchain_height(0), m_light_wallet_connected(false), m_light_wallet_balance(0), - m_light_wallet_unlocked_balance(0) + m_light_wallet_unlocked_balance(0), + m_key_on_device(false) { } @@ -817,40 +819,17 @@ void wallet2::set_seed_language(const std::string &language) //---------------------------------------------------------------------------------------------------- cryptonote::account_public_address wallet2::get_subaddress(const cryptonote::subaddress_index& index) const { - const cryptonote::account_keys& keys = m_account.get_keys(); - if (index.is_zero()) - return keys.m_account_address; - - crypto::public_key D = get_subaddress_spend_public_key(index); - - // C = a*D - crypto::public_key C = rct::rct2pk(rct::scalarmultKey(rct::pk2rct(D), rct::sk2rct(keys.m_view_secret_key))); // could have defined secret_key_mult_public_key() under src/crypto - - // result: (C, D) cryptonote::account_public_address address; - address.m_view_public_key = C; - address.m_spend_public_key = D; + hw::device &hwdev = m_account.get_device(); + hwdev.get_subaddress(m_account.get_keys(), index,address); return address; } //---------------------------------------------------------------------------------------------------- crypto::public_key wallet2::get_subaddress_spend_public_key(const cryptonote::subaddress_index& index) const { - const cryptonote::account_keys& keys = m_account.get_keys(); - if (index.is_zero()) - return keys.m_account_address.m_spend_public_key; - - // m = Hs(a || index_major || index_minor) - crypto::secret_key m = cryptonote::get_subaddress_secret_key(keys.m_view_secret_key, index); - - // M = m*G - crypto::public_key M; - crypto::secret_key_to_public_key(m, M); - - // D = B + M - rct::key D_rct; - rct::addKeys(D_rct, rct::pk2rct(keys.m_account_address.m_spend_public_key), rct::pk2rct(M)); // could have defined add_public_key() under src/crypto - crypto::public_key D = rct::rct2pk(D_rct); - + crypto::public_key D ; + hw::device &hwdev = m_account.get_device(); + hwdev.get_subaddress_spend_public_key(m_account.get_keys(), index, D); return D; } //---------------------------------------------------------------------------------------------------- @@ -882,20 +861,19 @@ void wallet2::add_subaddress(uint32_t index_major, const std::string& label) //---------------------------------------------------------------------------------------------------- void wallet2::expand_subaddresses(const cryptonote::subaddress_index& index) { + hw::device &hwdev = m_account.get_device(); if (m_subaddress_labels.size() <= index.major) { // add new accounts cryptonote::subaddress_index index2; for (index2.major = m_subaddress_labels.size(); index2.major < index.major + m_subaddress_lookahead_major; ++index2.major) { - for (index2.minor = 0; index2.minor < (index2.major == index.major ? index.minor : 0) + m_subaddress_lookahead_minor; ++index2.minor) + const uint32_t end = (index2.major == index.major ? index.minor : 0) + m_subaddress_lookahead_minor; + const std::vector<crypto::public_key> pkeys = cryptonote::get_subaddress_spend_public_keys(m_account.get_keys(), index2.major, 0, end, hwdev); + for (index2.minor = 0; index2.minor < end; ++index2.minor) { - if (m_subaddresses_inv.count(index2) == 0) - { - crypto::public_key D = get_subaddress_spend_public_key(index2); - m_subaddresses[D] = index2; - m_subaddresses_inv[index2] = D; - } + const crypto::public_key &D = pkeys[index2.minor]; + m_subaddresses[D] = index2; } } m_subaddress_labels.resize(index.major + 1, {"Untitled account"}); @@ -904,15 +882,14 @@ void wallet2::expand_subaddresses(const cryptonote::subaddress_index& index) else if (m_subaddress_labels[index.major].size() <= index.minor) { // add new subaddresses - cryptonote::subaddress_index index2 = index; - for (index2.minor = m_subaddress_labels[index.major].size(); index2.minor < index.minor + m_subaddress_lookahead_minor; ++index2.minor) + const uint32_t end = index.minor + m_subaddress_lookahead_minor; + const uint32_t begin = m_subaddress_labels[index.major].size(); + cryptonote::subaddress_index index2 = {index.major, begin}; + const std::vector<crypto::public_key> pkeys = cryptonote::get_subaddress_spend_public_keys(m_account.get_keys(), index2.major, index2.minor, end, hwdev); + for (; index2.minor < end; ++index2.minor) { - if (m_subaddresses_inv.count(index2) == 0) - { - crypto::public_key D = get_subaddress_spend_public_key(index2); - m_subaddresses[D] = index2; - m_subaddresses_inv[index2] = D; - } + const crypto::public_key &D = pkeys[index2.minor - begin]; + m_subaddresses[D] = index2; } m_subaddress_labels[index.major].resize(index.minor + 1); } @@ -973,7 +950,7 @@ void wallet2::check_acc_out_precomp(const tx_out &o, const crypto::key_derivatio LOG_ERROR("wrong type id in transaction out"); return; } - tx_scan_info.received = is_out_to_acc_precomp(m_subaddresses, boost::get<txout_to_key>(o.target).key, derivation, additional_derivations, i); + tx_scan_info.received = is_out_to_acc_precomp(m_subaddresses, boost::get<txout_to_key>(o.target).key, derivation, additional_derivations, i, m_account.get_device()); if(tx_scan_info.received) { tx_scan_info.money_transfered = o.amount; // may be 0 for ringct outputs @@ -985,20 +962,20 @@ void wallet2::check_acc_out_precomp(const tx_out &o, const crypto::key_derivatio tx_scan_info.error = false; } //---------------------------------------------------------------------------------------------------- -static uint64_t decodeRct(const rct::rctSig & rv, const crypto::key_derivation &derivation, unsigned int i, rct::key & mask) +static uint64_t decodeRct(const rct::rctSig & rv, const crypto::key_derivation &derivation, unsigned int i, rct::key & mask, hw::device &hwdev) { crypto::secret_key scalar1; - crypto::derivation_to_scalar(derivation, i, scalar1); + crypto::derivation_to_scalar(derivation, i, scalar1, hwdev); try { switch (rv.type) { case rct::RCTTypeSimple: case rct::RCTTypeSimpleBulletproof: - return rct::decodeRctSimple(rv, rct::sk2rct(scalar1), i, mask); + return rct::decodeRctSimple(rv, rct::sk2rct(scalar1), i, mask, hwdev); case rct::RCTTypeFull: case rct::RCTTypeFullBulletproof: - return rct::decodeRct(rv, rct::sk2rct(scalar1), i, mask); + return rct::decodeRct(rv, rct::sk2rct(scalar1), i, mask, hwdev); default: LOG_ERROR("Unsupported rct type: " << rv.type); return 0; @@ -1022,7 +999,7 @@ void wallet2::scan_output(const cryptonote::transaction &tx, const crypto::publi } else { - bool r = cryptonote::generate_key_image_helper_precomp(m_account.get_keys(), boost::get<cryptonote::txout_to_key>(tx.vout[i].target).key, tx_scan_info.received->derivation, i, tx_scan_info.received->index, tx_scan_info.in_ephemeral, tx_scan_info.ki); + bool r = cryptonote::generate_key_image_helper_precomp(m_account.get_keys(), boost::get<cryptonote::txout_to_key>(tx.vout[i].target).key, tx_scan_info.received->derivation, i, tx_scan_info.received->index, tx_scan_info.in_ephemeral, tx_scan_info.ki, m_account.get_device()); THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "Failed to generate key image"); THROW_WALLET_EXCEPTION_IF(tx_scan_info.in_ephemeral.pub != boost::get<cryptonote::txout_to_key>(tx.vout[i].target).key, error::wallet_internal_error, "key_image generated ephemeral public key not matched with output_key"); @@ -1031,7 +1008,7 @@ void wallet2::scan_output(const cryptonote::transaction &tx, const crypto::publi outs.push_back(i); if (tx_scan_info.money_transfered == 0) { - tx_scan_info.money_transfered = tools::decodeRct(tx.rct_signatures, tx_scan_info.received->derivation, i, tx_scan_info.mask); + tx_scan_info.money_transfered = tools::decodeRct(tx.rct_signatures, tx_scan_info.received->derivation, i, tx_scan_info.mask, m_account.get_device()); } tx_money_got_in_outs[tx_scan_info.received->index] += tx_scan_info.money_transfered; tx_scan_info.amount = tx_scan_info.money_transfered; @@ -1079,8 +1056,9 @@ void wallet2::process_new_transaction(const crypto::hash &txid, const cryptonote tools::threadpool& tpool = tools::threadpool::getInstance(); tools::threadpool::waiter waiter; const cryptonote::account_keys& keys = m_account.get_keys(); + hw::device &hwdev = m_account.get_device(); crypto::key_derivation derivation; - if (!generate_key_derivation(tx_pub_key, keys.m_view_secret_key, derivation)) + if (!generate_key_derivation(tx_pub_key, keys.m_view_secret_key, derivation, hwdev)) { MWARNING("Failed to generate key derivation from tx pubkey, skipping"); static_assert(sizeof(derivation) == sizeof(rct::key), "Mismatched sizes of key_derivation and rct::key"); @@ -1093,7 +1071,7 @@ void wallet2::process_new_transaction(const crypto::hash &txid, const cryptonote for (size_t i = 0; i < additional_tx_pub_keys.size(); ++i) { additional_derivations.push_back({}); - if (!generate_key_derivation(additional_tx_pub_keys[i], keys.m_view_secret_key, additional_derivations.back())) + if (!generate_key_derivation(additional_tx_pub_keys[i], keys.m_view_secret_key, additional_derivations.back(),hwdev)) { MWARNING("Failed to generate key derivation from tx pubkey, skipping"); additional_derivations.pop_back(); @@ -1218,7 +1196,7 @@ void wallet2::process_new_transaction(const crypto::hash &txid, const cryptonote td.m_rct = false; } set_unspent(m_transfers.size()-1); - if (!m_multisig) + if (!m_multisig && !m_watch_only) m_key_images[td.m_key_image] = m_transfers.size()-1; m_pub_keys[tx_scan_info[o].in_ephemeral.pub] = m_transfers.size()-1; if (m_multisig) @@ -1312,11 +1290,21 @@ void wallet2::process_new_transaction(const crypto::hash &txid, const cryptonote uint64_t amount = boost::get<cryptonote::txin_to_key>(in).amount; if (amount > 0) { - THROW_WALLET_EXCEPTION_IF(amount != td.amount(), error::wallet_internal_error, - std::string("Inconsistent amount in tx input: got ") + print_money(amount) + - std::string(", expected ") + print_money(td.amount())); + if(amount != td.amount()) + { + MERROR("Inconsistent amount in tx input: got " << print_money(amount) << + ", expected " << print_money(td.amount())); + // this means: + // 1) the same output pub key was used as destination multiple times, + // 2) the wallet set the highest amount among them to transfer_details::m_amount, and + // 3) the wallet somehow spent that output with an amount smaller than the above amount, causing inconsistency + td.m_amount = amount; + } + } + else + { + amount = td.amount(); } - amount = td.amount(); tx_money_spent_in_ins += amount; if (subaddr_account && *subaddr_account != td.m_subaddr_index.major) LOG_ERROR("spent funds are from different subaddress accounts; count of incoming/outgoing payments will be incorrect"); @@ -1375,7 +1363,7 @@ void wallet2::process_new_transaction(const crypto::hash &txid, const cryptonote LOG_PRINT_L2("Found encrypted payment ID: " << payment_id8); if (tx_pub_key != null_pkey) { - if (!decrypt_payment_id(payment_id8, tx_pub_key, m_account.get_keys().m_view_secret_key)) + if (!decrypt_payment_id(payment_id8, tx_pub_key, m_account.get_keys().m_view_secret_key, m_account.get_device())) { LOG_PRINT_L0("Failed to decrypt payment ID: " << payment_id8); } @@ -2342,7 +2330,6 @@ bool wallet2::clear() m_address_book.clear(); m_local_bc_height = 1; m_subaddresses.clear(); - m_subaddresses_inv.clear(); m_subaddress_labels.clear(); return true; } @@ -2379,6 +2366,10 @@ bool wallet2::store_keys(const std::string& keys_file_name, const epee::wipeable } rapidjson::Value value2(rapidjson::kNumberType); + + value2.SetInt(m_key_on_device?1:0); + json.AddMember("key_on_device", value2, json.GetAllocator()); + value2.SetInt(watch_only ? 1 :0); // WTF ? JSON has different true and false types, and not boolean ?? json.AddMember("watch_only", value2, json.GetAllocator()); @@ -2476,16 +2467,6 @@ bool wallet2::store_keys(const std::string& keys_file_name, const epee::wipeable return true; } //---------------------------------------------------------------------------------------------------- -namespace -{ - bool verify_keys(const crypto::secret_key& sec, const crypto::public_key& expected_pub) - { - crypto::public_key pub; - bool r = crypto::secret_key_to_public_key(sec, pub); - return r && expected_pub == pub; - } -} - /*! * \brief Load wallet information from wallet file. * \param keys_file_name Name of wallet file @@ -2533,6 +2514,7 @@ bool wallet2::load_keys(const std::string& keys_file_name, const epee::wipeable_ m_confirm_backlog_threshold = 0; m_confirm_export_overwrite = true; m_auto_low_priority = true; + m_key_on_device = false; } else if(json.IsObject()) { @@ -2549,6 +2531,12 @@ bool wallet2::load_keys(const std::string& keys_file_name, const epee::wipeable_ const char *field_key_data = json["key_data"].GetString(); account_data = std::string(field_key_data, field_key_data + json["key_data"].GetStringLength()); + if (json.HasMember("key_on_device")) + { + GET_FIELD_FROM_JSON_RETURN_ON_ERROR(json, key_on_device, int, Int, false, false); + m_key_on_device = field_key_on_device; + } + GET_FIELD_FROM_JSON_RETURN_ON_ERROR(json, seed_language, std::string, String, false, std::string()); if (field_seed_language_found) { @@ -2634,8 +2622,8 @@ bool wallet2::load_keys(const std::string& keys_file_name, const epee::wipeable_ m_confirm_backlog_threshold = field_confirm_backlog_threshold; GET_FIELD_FROM_JSON_RETURN_ON_ERROR(json, confirm_export_overwrite, int, Int, false, true); m_confirm_export_overwrite = field_confirm_export_overwrite; - GET_FIELD_FROM_JSON_RETURN_ON_ERROR(json, m_auto_low_priority, int, Int, false, true); - m_auto_low_priority = field_m_auto_low_priority; + GET_FIELD_FROM_JSON_RETURN_ON_ERROR(json, auto_low_priority, int, Int, false, true); + m_auto_low_priority = field_auto_low_priority; GET_FIELD_FROM_JSON_RETURN_ON_ERROR(json, testnet, int, Int, false, m_testnet); // Wallet is being opened with testnet flag, but is saved as a mainnet wallet THROW_WALLET_EXCEPTION_IF(m_testnet && !field_testnet, error::wallet_internal_error, "Mainnet wallet can not be opened as testnet wallet"); @@ -2648,11 +2636,20 @@ bool wallet2::load_keys(const std::string& keys_file_name, const epee::wipeable_ return false; } - const cryptonote::account_keys& keys = m_account.get_keys(); r = epee::serialization::load_t_from_binary(m_account, account_data); - r = r && verify_keys(keys.m_view_secret_key, keys.m_account_address.m_view_public_key); + if (r && m_key_on_device) { + LOG_PRINT_L0("Account on device. Initing device..."); + hw::device &hwdev = hw::get_device("Ledger"); + hwdev.init(); + hwdev.connect(); + m_account.set_device(hwdev); + LOG_PRINT_L0("Device inited..."); + } + const cryptonote::account_keys& keys = m_account.get_keys(); + hw::device &hwdev = m_account.get_device(); + r = r && hwdev.verify_keys(keys.m_view_secret_key, keys.m_account_address.m_view_public_key); if(!m_watch_only && !m_multisig) - r = r && verify_keys(keys.m_spend_secret_key, keys.m_account_address.m_spend_public_key); + r = r && hwdev.verify_keys(keys.m_spend_secret_key, keys.m_account_address.m_spend_public_key); THROW_WALLET_EXCEPTION_IF(!r, error::invalid_password); return true; } @@ -2669,7 +2666,7 @@ bool wallet2::load_keys(const std::string& keys_file_name, const epee::wipeable_ */ bool wallet2::verify_password(const epee::wipeable_string& password) const { - return verify_password(m_keys_file, password, m_watch_only || m_multisig); + return verify_password(m_keys_file, password, m_watch_only || m_multisig, m_account.get_device()); } /*! @@ -2684,7 +2681,7 @@ bool wallet2::verify_password(const epee::wipeable_string& password) const * can be used prior to rewriting wallet keys file, to ensure user has entered the correct password * */ -bool wallet2::verify_password(const std::string& keys_file_name, const epee::wipeable_string& password, bool no_spend_key) +bool wallet2::verify_password(const std::string& keys_file_name, const epee::wipeable_string& password, bool no_spend_key, hw::device &hwdev) { rapidjson::Document json; wallet2::keys_file_data keys_file_data; @@ -2719,9 +2716,9 @@ bool wallet2::verify_password(const std::string& keys_file_name, const epee::wip r = epee::serialization::load_t_from_binary(account_data_check, account_data); const cryptonote::account_keys& keys = account_data_check.get_keys(); - r = r && verify_keys(keys.m_view_secret_key, keys.m_account_address.m_view_public_key); + r = r && hwdev.verify_keys(keys.m_view_secret_key, keys.m_account_address.m_view_public_key); if(!no_spend_key) - r = r && verify_keys(keys.m_spend_secret_key, keys.m_account_address.m_spend_public_key); + r = r && hwdev.verify_keys(keys.m_spend_secret_key, keys.m_account_address.m_spend_public_key); return r; } @@ -2797,6 +2794,7 @@ void wallet2::generate(const std::string& wallet_, const epee::wipeable_string& m_multisig = true; m_multisig_threshold = threshold; m_multisig_signers = multisig_signers; + m_key_on_device = false; if (!wallet_.empty()) { @@ -2845,6 +2843,7 @@ crypto::secret_key wallet2::generate(const std::string& wallet_, const epee::wip m_multisig = false; m_multisig_threshold = 0; m_multisig_signers.clear(); + m_key_on_device = false; // calculate a starting refresh height if(m_refresh_from_block_height == 0 && !recover){ @@ -2939,6 +2938,7 @@ void wallet2::generate(const std::string& wallet_, const epee::wipeable_string& m_multisig = false; m_multisig_threshold = 0; m_multisig_signers.clear(); + m_key_on_device = false; if (!wallet_.empty()) { @@ -2985,6 +2985,7 @@ void wallet2::generate(const std::string& wallet_, const epee::wipeable_string& m_multisig = false; m_multisig_threshold = 0; m_multisig_signers.clear(); + m_key_on_device = false; if (!wallet_.empty()) { @@ -3004,6 +3005,46 @@ void wallet2::generate(const std::string& wallet_, const epee::wipeable_string& store(); } +/*! +* \brief Creates a wallet from a device +* \param wallet_ Name of wallet file +* \param password Password of wallet file +* \param device_name device string address +*/ +void wallet2::restore(const std::string& wallet_, const epee::wipeable_string& password, const std::string &device_name) +{ + clear(); + prepare_file_names(wallet_); + + boost::system::error_code ignored_ec; + if (!wallet_.empty()) { + THROW_WALLET_EXCEPTION_IF(boost::filesystem::exists(m_wallet_file, ignored_ec), error::file_exists, m_wallet_file); + THROW_WALLET_EXCEPTION_IF(boost::filesystem::exists(m_keys_file, ignored_ec), error::file_exists, m_keys_file); + } + m_key_on_device = true; + m_account.create_from_device(device_name); + m_account_public_address = m_account.get_keys().m_account_address; + m_watch_only = false; + m_multisig = false; + m_multisig_threshold = 0; + m_multisig_signers.clear(); + + if (!wallet_.empty()) { + bool r = store_keys(m_keys_file, password, false); + THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_keys_file); + + r = file_io_utils::save_string_to_file(m_wallet_file + ".address.txt", m_account.get_public_address_str(m_testnet)); + if(!r) MERROR("String with address text not saved"); + } + cryptonote::block b; + generate_genesis(b); + m_blockchain.push_back(get_block_hash(b)); + add_subaddress_account(tr("Primary account")); + if (!wallet_.empty()) { + store(); + } +} + std::string wallet2::make_multisig(const epee::wipeable_string &password, const std::vector<crypto::secret_key> &view_keys, const std::vector<crypto::public_key> &spend_keys, @@ -3067,6 +3108,8 @@ std::string wallet2::make_multisig(const epee::wipeable_string &password, m_watch_only = false; m_multisig = true; m_multisig_threshold = threshold; + m_key_on_device = false; + if (threshold == spend_keys.size() + 1) { m_multisig_signers = spend_keys; @@ -3187,7 +3230,6 @@ bool wallet2::finalize_multisig(const epee::wipeable_string &password, std::unor } m_subaddresses.clear(); - m_subaddresses_inv.clear(); m_subaddress_labels.clear(); add_subaddress_account(tr("Primary account")); @@ -3476,15 +3518,8 @@ bool wallet2::check_connection(uint32_t *version, uint32_t timeout) //---------------------------------------------------------------------------------------------------- bool wallet2::generate_chacha_key_from_secret_keys(crypto::chacha_key &key) const { - const account_keys &keys = m_account.get_keys(); - const crypto::secret_key &view_key = keys.m_view_secret_key; - const crypto::secret_key &spend_key = keys.m_spend_secret_key; - tools::scrubbed_arr<char, sizeof(view_key) + sizeof(spend_key) + 1> data; - memcpy(data.data(), &view_key, sizeof(view_key)); - memcpy(data.data() + sizeof(view_key), &spend_key, sizeof(spend_key)); - data[sizeof(data) - 1] = CHACHA8_KEY_TAIL; - crypto::generate_chacha_key(data.data(), sizeof(data), key); - return true; + hw::device &hwdev = m_account.get_device(); + return hwdev.generate_chacha_key(m_account.get_keys(), key); } //---------------------------------------------------------------------------------------------------- void wallet2::load(const std::string& wallet_, const epee::wipeable_string& password) @@ -4258,7 +4293,7 @@ crypto::hash wallet2::get_payment_id(const pending_tx &ptx) const MWARNING("Encrypted payment id found, but no destinations public key, cannot decrypt"); return crypto::null_hash; } - if (decrypt_payment_id(payment_id8, ptx.dests[0].addr.m_view_public_key, ptx.tx_key)) + if (decrypt_payment_id(payment_id8, ptx.dests[0].addr.m_view_public_key, ptx.tx_key, m_account.get_device())) { memcpy(payment_id.data, payment_id8.data, 8); } @@ -4367,7 +4402,7 @@ bool wallet2::save_tx(const std::vector<pending_tx>& ptx_vector, const std::stri // Short payment id is encrypted with tx_key. // Since sign_tx() generates new tx_keys and encrypts the payment id, we need to save the decrypted payment ID // Save tx construction_data to unsigned_tx_set - txs.txes.push_back(get_construction_data_with_decrypted_short_payment_id(tx)); + txs.txes.push_back(get_construction_data_with_decrypted_short_payment_id(tx, m_account.get_device())); } txs.transfers = m_transfers; @@ -4694,7 +4729,7 @@ std::string wallet2::save_multisig_tx(multisig_tx_set txs) for (auto &ptx: txs.m_ptx) { // Get decrypted payment id from pending_tx - ptx.construction_data = get_construction_data_with_decrypted_short_payment_id(ptx); + ptx.construction_data = get_construction_data_with_decrypted_short_payment_id(ptx, m_account.get_device()); } // save as binary @@ -5273,7 +5308,7 @@ void wallet2::light_wallet_get_outs(std::vector<std::vector<tools::wallet2::get_ bool r = epee::net_utils::invoke_http_json("/get_random_outs", oreq, ores, m_http_client, 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 recieved from light wallet node. Error: " + ores.Error); + THROW_WALLET_EXCEPTION_IF(ores.amount_outs.empty() , error::wallet_internal_error, "No outputs received from light wallet node. Error: " + ores.Error); // Check if we got enough outputs for each amount for(auto& out: ores.amount_outs) { @@ -5497,7 +5532,7 @@ void wallet2::get_outs(std::vector<std::vector<tools::wallet2::get_outs_entry>> } } - // sort the subsection, to ensure the daemon doesn't know wich output is ours + // sort the subsection, to ensure the daemon doesn't know which output is ours std::sort(req.outputs.begin() + start, req.outputs.end(), [](const get_outputs_out &a, const get_outputs_out &b) { return a.index < b.index; }); } @@ -6124,7 +6159,7 @@ bool wallet2::light_wallet_login(bool &new_address) cryptonote::COMMAND_RPC_LOGIN::response response; request.address = get_account().get_public_address_str(m_testnet); request.view_key = string_tools::pod_to_hex(get_account().get_keys().m_view_secret_key); - // Always create account if it doesnt exist. + // 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"); @@ -6137,7 +6172,7 @@ bool wallet2::light_wallet_login(bool &new_address) MDEBUG("New wallet: " << response.new_address); if(m_light_wallet_connected) { - // Clear old data on successfull login. + // Clear old data on successful login. // m_transfers.clear(); // m_payments.clear(); // m_unconfirmed_payments.clear(); @@ -6509,7 +6544,7 @@ void wallet2::light_wallet_get_address_txs() // Calculate wallet balance m_light_wallet_balance = ires.total_received-wallet_total_sent; - // MyMonero doesnt send unlocked balance + // MyMonero doesn't send unlocked balance if(ires.total_received_unlocked > 0) m_light_wallet_unlocked_balance = ires.total_received_unlocked-wallet_total_sent; else @@ -6786,7 +6821,7 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_2(std::vector<cryp { string s; for (auto i: preferred_inputs) s += boost::lexical_cast<std::string>(i) + " (" + print_money(m_transfers[i].amount()) + ") "; - LOG_PRINT_L1("Found prefered rct inputs for rct tx: " << s); + LOG_PRINT_L1("Found preferred rct inputs for rct tx: " << s); // bring the list of available outputs stored by the same subaddress index to the front of the list uint32_t index_minor = m_transfers[preferred_inputs[0]].m_subaddr_index.minor; @@ -6817,6 +6852,8 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_2(std::vector<cryp unsigned int original_output_index = 0; std::vector<size_t>* unused_transfers_indices = &unused_transfers_indices_per_subaddr[0].second; std::vector<size_t>* unused_dust_indices = &unused_dust_indices_per_subaddr[0].second; + hw::device &hwdev = m_account.get_device(); + hwdev.set_signature_mode(hw::device::SIGNATURE_FAKE); while ((!dsts.empty() && dsts[0].amount > 0) || adding_fee || !preferred_inputs.empty() || should_pick_a_second_output(use_rct, txes.back().selected_transfers.size(), *unused_transfers_indices, *unused_dust_indices)) { TX &tx = txes.back(); @@ -7002,6 +7039,37 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_2(std::vector<cryp LOG_PRINT_L2("Made a final " << get_size_string(txBlob) << " tx, with " << print_money(test_ptx.fee) << " fee and " << print_money(test_ptx.change_dts.amount) << " change"); + if ((!dsts.empty()) || + (dsts.empty() && !(adding_fee || !preferred_inputs.empty() || should_pick_a_second_output(use_rct, txes.back().selected_transfers.size(), *unused_transfers_indices, *unused_dust_indices)) ) + ) { + hwdev.set_signature_mode(hw::device::SIGNATURE_REAL); + if (use_rct) { + transfer_selected_rct(tx.dsts, /* NOMOD std::vector<cryptonote::tx_destination_entry> dsts,*/ + tx.selected_transfers, /* const std::list<size_t> selected_transfers */ + fake_outs_count, /* CONST size_t fake_outputs_count, */ + outs, /* MOD std::vector<std::vector<tools::wallet2::get_outs_entry>> &outs, */ + unlock_time, /* CONST uint64_t unlock_time, */ + needed_fee, /* CONST uint64_t fee, */ + extra, /* const std::vector<uint8_t>& extra, */ + test_tx, /* OUT cryptonote::transaction& tx, */ + test_ptx, /* OUT cryptonote::transaction& tx, */ + bulletproof); + } else { + transfer_selected(tx.dsts, + tx.selected_transfers, + fake_outs_count, + outs, + unlock_time, + needed_fee, + extra, + detail::digit_split_strategy, + tx_dust_policy(::config::DEFAULT_DUST_THRESHOLD), + test_tx, + test_ptx); + } + hwdev.set_signature_mode(hw::device::SIGNATURE_FAKE); + } + tx.tx = test_tx; tx.ptx = test_ptx; tx.bytes = txBlob.size(); @@ -7170,6 +7238,8 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_from(const crypton needed_fee = 0; // while we have something to send + hw::device &hwdev = m_account.get_device(); + hwdev.set_signature_mode(hw::device::SIGNATURE_FAKE); while (!unused_dust_indices.empty() || !unused_transfers_indices.empty()) { TX &tx = txes.back(); @@ -7235,6 +7305,18 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_from(const crypton " fee and " << print_money(test_ptx.change_dts.amount) << " change"); } while (needed_fee > test_ptx.fee); + if (!unused_transfers_indices.empty() || !unused_dust_indices.empty()) { + hwdev.set_signature_mode(hw::device::SIGNATURE_REAL); + if (use_rct) { + transfer_selected_rct(tx.dsts, tx.selected_transfers, fake_outs_count, outs, unlock_time, needed_fee, extra, + test_tx, test_ptx, bulletproof); + } else { + transfer_selected(tx.dsts, tx.selected_transfers, fake_outs_count, outs, unlock_time, needed_fee, extra, + detail::digit_split_strategy, tx_dust_policy(::config::DEFAULT_DUST_THRESHOLD), test_tx, test_ptx); + } + hwdev.set_signature_mode(hw::device::SIGNATURE_FAKE); + } + LOG_PRINT_L2("Made a final " << get_size_string(txBlob) << " tx, with " << print_money(test_ptx.fee) << " fee and " << print_money(test_ptx.change_dts.amount) << " change"); @@ -7524,7 +7606,7 @@ std::string wallet2::get_spend_proof(const crypto::hash &txid, const std::string const std::vector<crypto::public_key> in_additionakl_tx_pub_keys = get_additional_tx_pub_keys_from_extra(in_td.m_tx); keypair in_ephemeral; crypto::key_image in_img; - THROW_WALLET_EXCEPTION_IF(!generate_key_image_helper(m_account.get_keys(), m_subaddresses, in_tx_out_pkey->key, in_tx_pub_key, in_additionakl_tx_pub_keys, in_td.m_internal_output_index, in_ephemeral, in_img), + THROW_WALLET_EXCEPTION_IF(!generate_key_image_helper(m_account.get_keys(), m_subaddresses, in_tx_out_pkey->key, in_tx_pub_key, in_additionakl_tx_pub_keys, in_td.m_internal_output_index, in_ephemeral, in_img, m_account.get_device()), error::wallet_internal_error, "failed to generate key image"); THROW_WALLET_EXCEPTION_IF(in_key->k_image != in_img, error::wallet_internal_error, "key image mismatch"); @@ -7699,13 +7781,13 @@ bool wallet2::check_spend_proof(const crypto::hash &txid, const std::string &mes void wallet2::check_tx_key(const crypto::hash &txid, const crypto::secret_key &tx_key, const std::vector<crypto::secret_key> &additional_tx_keys, const cryptonote::account_public_address &address, uint64_t &received, bool &in_pool, uint64_t &confirmations) { crypto::key_derivation derivation; - THROW_WALLET_EXCEPTION_IF(!crypto::generate_key_derivation(address.m_view_public_key, tx_key, derivation), error::wallet_internal_error, + THROW_WALLET_EXCEPTION_IF(!crypto::generate_key_derivation(address.m_view_public_key, tx_key, derivation, m_account.get_device()), error::wallet_internal_error, "Failed to generate key derivation from supplied parameters"); std::vector<crypto::key_derivation> additional_derivations; additional_derivations.resize(additional_tx_keys.size()); for (size_t i = 0; i < additional_tx_keys.size(); ++i) - THROW_WALLET_EXCEPTION_IF(!crypto::generate_key_derivation(address.m_view_public_key, additional_tx_keys[i], additional_derivations[i]), error::wallet_internal_error, + THROW_WALLET_EXCEPTION_IF(!crypto::generate_key_derivation(address.m_view_public_key, additional_tx_keys[i], additional_derivations[i], m_account.get_device()), error::wallet_internal_error, "Failed to generate key derivation from supplied parameters"); check_tx_key_helper(txid, derivation, additional_derivations, address, received, in_pool, confirmations); @@ -7739,6 +7821,7 @@ void wallet2::check_tx_key_helper(const crypto::hash &txid, const crypto::key_de "The size of additional derivations is wrong"); received = 0; + hw::device &hwdev = m_account.get_device(); for (size_t n = 0; n < tx.vout.size(); ++n) { const cryptonote::txout_to_key* const out_key = boost::get<cryptonote::txout_to_key>(std::addressof(tx.vout[n].target)); @@ -7746,13 +7829,13 @@ void wallet2::check_tx_key_helper(const crypto::hash &txid, const crypto::key_de continue; crypto::public_key derived_out_key; - bool r = derive_public_key(derivation, n, address.m_spend_public_key, derived_out_key); + bool r = derive_public_key(derivation, n, address.m_spend_public_key, derived_out_key, hwdev); THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "Failed to derive public key"); bool found = out_key->key == derived_out_key; crypto::key_derivation found_derivation = derivation; if (!found && !additional_derivations.empty()) { - r = derive_public_key(additional_derivations[n], n, address.m_spend_public_key, derived_out_key); + r = derive_public_key(additional_derivations[n], n, address.m_spend_public_key, derived_out_key,hwdev); THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "Failed to derive public key"); found = out_key->key == derived_out_key; found_derivation = additional_derivations[n]; @@ -7768,9 +7851,9 @@ void wallet2::check_tx_key_helper(const crypto::hash &txid, const crypto::key_de else { crypto::secret_key scalar1; - crypto::derivation_to_scalar(found_derivation, n, scalar1); + crypto::derivation_to_scalar(found_derivation, n, scalar1, hwdev); rct::ecdhTuple ecdh_info = tx.rct_signatures.ecdhInfo[n]; - rct::ecdhDecode(ecdh_info, rct::sk2rct(scalar1)); + rct::ecdhDecode(ecdh_info, rct::sk2rct(scalar1), hwdev); const rct::key C = tx.rct_signatures.outPk[n].mask; rct::key Ctmp; rct::addKeys2(Ctmp, ecdh_info.mask, ecdh_info.amount, rct::H); @@ -8124,7 +8207,7 @@ std::string wallet2::get_reserve_proof(const boost::optional<std::pair<uint32_t, // derive ephemeral secret key crypto::key_image ki; cryptonote::keypair ephemeral; - const bool r = cryptonote::generate_key_image_helper(m_account.get_keys(), m_subaddresses, td.get_public_key(), tx_pub_key, additional_tx_pub_keys, td.m_internal_output_index, ephemeral, ki); + const bool r = cryptonote::generate_key_image_helper(m_account.get_keys(), m_subaddresses, td.get_public_key(), tx_pub_key, additional_tx_pub_keys, td.m_internal_output_index, ephemeral, ki, m_account.get_device()); THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "Failed to generate key image"); THROW_WALLET_EXCEPTION_IF(ephemeral.pub != td.get_public_key(), error::wallet_internal_error, "Derived public key doesn't agree with the stored one"); @@ -8498,20 +8581,21 @@ crypto::public_key wallet2::get_tx_pub_key_from_received_outs(const tools::walle // more than one, loop and search const cryptonote::account_keys& keys = m_account.get_keys(); size_t pk_index = 0; + hw::device &hwdev = m_account.get_device(); const std::vector<crypto::public_key> additional_tx_pub_keys = get_additional_tx_pub_keys_from_extra(td.m_tx); std::vector<crypto::key_derivation> additional_derivations; for (size_t i = 0; i < additional_tx_pub_keys.size(); ++i) { additional_derivations.push_back({}); - bool r = generate_key_derivation(additional_tx_pub_keys[i], keys.m_view_secret_key, additional_derivations.back()); + bool r = generate_key_derivation(additional_tx_pub_keys[i], keys.m_view_secret_key, additional_derivations.back(), hwdev); THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "Failed to generate key derivation"); } while (find_tx_extra_field_by_type(tx_extra_fields, pub_key_field, pk_index++)) { const crypto::public_key tx_pub_key = pub_key_field.pub_key; crypto::key_derivation derivation; - bool r = generate_key_derivation(tx_pub_key, keys.m_view_secret_key, derivation); + bool r = generate_key_derivation(tx_pub_key, keys.m_view_secret_key, derivation, hwdev); THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "Failed to generate key derivation"); for (size_t i = 0; i < td.m_tx.vout.size(); ++i) @@ -8582,7 +8666,7 @@ std::vector<std::pair<crypto::key_image, crypto::signature>> wallet2::export_key // generate ephemeral secret key crypto::key_image ki; cryptonote::keypair in_ephemeral; - bool r = cryptonote::generate_key_image_helper(m_account.get_keys(), m_subaddresses, pkey, tx_pub_key, additional_tx_pub_keys, td.m_internal_output_index, in_ephemeral, ki); + bool r = cryptonote::generate_key_image_helper(m_account.get_keys(), m_subaddresses, pkey, tx_pub_key, additional_tx_pub_keys, td.m_internal_output_index, in_ephemeral, ki, m_account.get_device()); THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "Failed to generate key image"); THROW_WALLET_EXCEPTION_IF(td.m_key_image_known && !td.m_key_image_partial && ki != td.m_key_image, @@ -8782,6 +8866,7 @@ uint64_t wallet2::import_key_images(const std::vector<std::pair<crypto::key_imag // process each outgoing tx auto spent_txid = spent_txids.begin(); + hw::device &hwdev = m_account.get_device(); for (const COMMAND_RPC_GET_TRANSACTIONS::entry& e : gettxs_res.txs) { THROW_WALLET_EXCEPTION_IF(e.in_pool, error::wallet_internal_error, "spent tx isn't supposed to be in txpool"); @@ -8799,14 +8884,14 @@ uint64_t wallet2::import_key_images(const std::vector<std::pair<crypto::key_imag const cryptonote::account_keys& keys = m_account.get_keys(); const crypto::public_key tx_pub_key = get_tx_pub_key_from_extra(spent_tx); crypto::key_derivation derivation; - bool r = generate_key_derivation(tx_pub_key, keys.m_view_secret_key, derivation); + bool r = generate_key_derivation(tx_pub_key, keys.m_view_secret_key, derivation, hwdev); THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "Failed to generate key derivation"); const std::vector<crypto::public_key> additional_tx_pub_keys = get_additional_tx_pub_keys_from_extra(spent_tx); std::vector<crypto::key_derivation> additional_derivations; for (size_t i = 0; i < additional_tx_pub_keys.size(); ++i) { additional_derivations.push_back({}); - r = generate_key_derivation(additional_tx_pub_keys[i], keys.m_view_secret_key, additional_derivations.back()); + r = generate_key_derivation(additional_tx_pub_keys[i], keys.m_view_secret_key, additional_derivations.back(), hwdev); THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "Failed to generate key derivation"); } size_t output_index = 0; @@ -8820,7 +8905,7 @@ uint64_t wallet2::import_key_images(const std::vector<std::pair<crypto::key_imag if (tx_scan_info.money_transfered == 0) { rct::key mask; - tx_scan_info.money_transfered = tools::decodeRct(spent_tx.rct_signatures, tx_scan_info.received->derivation, output_index, mask); + tx_scan_info.money_transfered = tools::decodeRct(spent_tx.rct_signatures, tx_scan_info.received->derivation, output_index, mask, hwdev); } tx_money_got_in_outs += tx_scan_info.money_transfered; } @@ -8980,7 +9065,7 @@ size_t wallet2::import_outputs(const std::vector<tools::wallet2::transfer_detail const std::vector<crypto::public_key> additional_tx_pub_keys = get_additional_tx_pub_keys_from_extra(td.m_tx); const crypto::public_key& out_key = boost::get<cryptonote::txout_to_key>(td.m_tx.vout[td.m_internal_output_index].target).key; - bool r = cryptonote::generate_key_image_helper(m_account.get_keys(), m_subaddresses, out_key, tx_pub_key, additional_tx_pub_keys, td.m_internal_output_index, in_ephemeral, td.m_key_image); + bool r = cryptonote::generate_key_image_helper(m_account.get_keys(), m_subaddresses, out_key, tx_pub_key, additional_tx_pub_keys, td.m_internal_output_index, in_ephemeral, td.m_key_image, m_account.get_device()); THROW_WALLET_EXCEPTION_IF(!r, error::wallet_internal_error, "Failed to generate key image"); expand_subaddresses(td.m_subaddr_index); td.m_key_image_known = true; diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index f9995c2ee..127e70a26 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -162,7 +162,7 @@ namespace tools //! Just parses variables. static std::unique_ptr<wallet2> make_dummy(const boost::program_options::variables_map& vm, const std::function<boost::optional<password_container>(const char *, bool)> &password_prompter); - static bool verify_password(const std::string& keys_file_name, const epee::wipeable_string& password, bool no_spend_key); + static bool verify_password(const std::string& keys_file_name, const epee::wipeable_string& password, bool no_spend_key, hw::device &hwdev); wallet2(bool testnet = false, bool restricted = false); @@ -487,6 +487,14 @@ namespace tools const cryptonote::account_public_address &account_public_address, const crypto::secret_key& viewkey = crypto::secret_key()); /*! + * \brief Restore a wallet hold by an HW. + * \param wallet_ Name of wallet file + * \param password Password of wallet file + * \param device_name name of HW to use + */ + void restore(const std::string& wallet_, const epee::wipeable_string& password, const std::string &device_name); + + /*! * \brief Creates a multisig wallet * \return empty if done, non empty if we need to send another string * to other participants @@ -605,6 +613,7 @@ namespace tools cryptonote::account_public_address get_subaddress(const cryptonote::subaddress_index& index) const; cryptonote::account_public_address get_address() const { return get_subaddress({0,0}); } crypto::public_key get_subaddress_spend_public_key(const cryptonote::subaddress_index& index) const; + std::vector<crypto::public_key> get_subaddress_spend_public_keys(uint32_t account, uint32_t begin, uint32_t end) const; std::string get_subaddress_as_str(const cryptonote::subaddress_index& index) const; std::string get_address_as_str() const { return get_subaddress_as_str({0, 0}); } std::string get_integrated_address_as_str(const crypto::hash8& payment_id) const; @@ -634,6 +643,7 @@ namespace tools bool multisig(bool *ready = NULL, uint32_t *threshold = NULL, uint32_t *total = NULL) const; bool has_multisig_partial_key_images() const; bool get_multisig_seed(std::string& seed, const epee::wipeable_string &passphrase = std::string(), bool raw = true) const; + bool key_on_device() const { return m_key_on_device; } // locked & unlocked balance of given or current subaddress account uint64_t balance(uint32_t subaddr_index_major) const; @@ -782,7 +792,8 @@ namespace tools if (ver < 20) return; a & m_subaddresses; - a & m_subaddresses_inv; + std::unordered_map<cryptonote::subaddress_index, crypto::public_key> dummy_subaddresses_inv; + a & dummy_subaddresses_inv; a & m_subaddress_labels; a & m_additional_tx_keys; if(ver < 21) @@ -1089,7 +1100,6 @@ namespace tools std::unordered_map<crypto::public_key, size_t> m_pub_keys; cryptonote::account_public_address m_account_public_address; std::unordered_map<crypto::public_key, cryptonote::subaddress_index> m_subaddresses; - std::unordered_map<cryptonote::subaddress_index, crypto::public_key> m_subaddresses_inv; std::vector<std::vector<std::string>> m_subaddress_labels; std::unordered_map<crypto::hash, std::string> m_tx_notes; std::unordered_map<std::string, std::string> m_attributes; @@ -1104,6 +1114,7 @@ namespace tools boost::mutex m_daemon_rpc_mutex; i_wallet2_callback* m_callback; + bool m_key_on_device; bool m_testnet; bool m_restricted; std::string seed_language; /*!< Language of the mnemonics (seed). */ diff --git a/src/wallet/wallet_rpc_server.cpp b/src/wallet/wallet_rpc_server.cpp index 5c644983b..6d5419521 100644 --- a/src/wallet/wallet_rpc_server.cpp +++ b/src/wallet/wallet_rpc_server.cpp @@ -39,6 +39,7 @@ using namespace epee; #include "wallet/wallet_args.h" #include "common/command_line.h" #include "common/i18n.h" +#include "cryptonote_config.h" #include "cryptonote_basic/cryptonote_format_utils.h" #include "cryptonote_basic/account.h" #include "multisig/multisig.h" @@ -1803,11 +1804,11 @@ namespace tools return false; } - uint64_t min_height = 0, max_height = (uint64_t)-1; + uint64_t min_height = 0, max_height = CRYPTONOTE_MAX_BLOCK_NUMBER; if (req.filter_by_height) { min_height = req.min_height; - max_height = req.max_height; + max_height = req.max_height <= max_height ? req.max_height : max_height; } if (req.in) diff --git a/src/wallet/wallet_rpc_server_commands_defs.h b/src/wallet/wallet_rpc_server_commands_defs.h index 82b6b78f9..e38cba5a5 100644 --- a/src/wallet/wallet_rpc_server_commands_defs.h +++ b/src/wallet/wallet_rpc_server_commands_defs.h @@ -29,6 +29,7 @@ // Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers #pragma once +#include "cryptonote_config.h" #include "cryptonote_protocol/cryptonote_protocol_defs.h" #include "cryptonote_basic/cryptonote_basic.h" #include "cryptonote_basic/subaddress_index.h" @@ -1262,7 +1263,7 @@ namespace wallet_rpc KV_SERIALIZE(pool); KV_SERIALIZE(filter_by_height); KV_SERIALIZE(min_height); - KV_SERIALIZE(max_height); + KV_SERIALIZE_OPT(max_height, (uint64_t)CRYPTONOTE_MAX_BLOCK_NUMBER); KV_SERIALIZE(account_index); KV_SERIALIZE(subaddr_indices); END_KV_SERIALIZE_MAP() diff --git a/tests/core_proxy/core_proxy.cpp b/tests/core_proxy/core_proxy.cpp index 8c9340318..f0a1eb5ce 100644 --- a/tests/core_proxy/core_proxy.cpp +++ b/tests/core_proxy/core_proxy.cpp @@ -80,8 +80,7 @@ int main(int argc, char* argv[]) po::options_description desc("Allowed options"); - // tools::get_default_data_dir() can't be called during static initialization - command_line::add_arg(desc, cryptonote::arg_data_dir, tools::get_default_data_dir()); + command_line::add_arg(desc, cryptonote::arg_data_dir); nodetool::node_server<cryptonote::t_cryptonote_protocol_handler<tests::proxy_core> >::init_options(desc); po::variables_map vm; diff --git a/tests/core_tests/CMakeLists.txt b/tests/core_tests/CMakeLists.txt index 4d2452e84..c8ee7d9db 100644 --- a/tests/core_tests/CMakeLists.txt +++ b/tests/core_tests/CMakeLists.txt @@ -70,6 +70,7 @@ target_link_libraries(core_tests p2p version epee + device ${CMAKE_THREAD_LIBS_INIT} ${EXTRA_LIBRARIES}) set_property(TARGET core_tests diff --git a/tests/core_tests/chaingen.cpp b/tests/core_tests/chaingen.cpp index c1bcc7a47..5e1525e3e 100644 --- a/tests/core_tests/chaingen.cpp +++ b/tests/core_tests/chaingen.cpp @@ -43,7 +43,7 @@ #include "cryptonote_basic/miner.h" #include "chaingen.h" - +#include "device/device.hpp" using namespace std; using namespace epee; @@ -368,7 +368,7 @@ bool init_spent_output_indices(map_output_idx_t& outs, map_output_t& outs_mine, crypto::public_key out_key = boost::get<txout_to_key>(oi.out).key; std::unordered_map<crypto::public_key, cryptonote::subaddress_index> subaddresses; subaddresses[from.get_keys().m_account_address.m_spend_public_key] = {0,0}; - generate_key_image_helper(from.get_keys(), subaddresses, out_key, get_tx_pub_key_from_extra(*oi.p_tx), get_additional_tx_pub_keys_from_extra(*oi.p_tx), oi.out_no, in_ephemeral, img); + generate_key_image_helper(from.get_keys(), subaddresses, out_key, get_tx_pub_key_from_extra(*oi.p_tx), get_additional_tx_pub_keys_from_extra(*oi.p_tx), oi.out_no, in_ephemeral, img, hw::get_device(("default"))); // lookup for this key image in the events vector BOOST_FOREACH(auto& tx_pair, mtx) { diff --git a/tests/core_tests/multisig.cpp b/tests/core_tests/multisig.cpp index c35800e6c..936a4b742 100644 --- a/tests/core_tests/multisig.cpp +++ b/tests/core_tests/multisig.cpp @@ -34,7 +34,7 @@ #include "common/apply_permutation.h" #include "chaingen.h" #include "multisig.h" - +#include "device/device.hpp" using namespace epee; using namespace crypto; using namespace cryptonote; @@ -367,7 +367,7 @@ bool gen_multisig_tx_validation_base::generate_with(std::vector<test_event_entry for (size_t n = 0; n < tx.vout.size(); ++n) { CHECK_AND_ASSERT_MES(typeid(txout_to_key) == tx.vout[n].target.type(), false, "Unexpected tx out type"); - if (is_out_to_acc_precomp(subaddresses, boost::get<txout_to_key>(tx.vout[n].target).key, derivation, additional_derivations, n)) + if (is_out_to_acc_precomp(subaddresses, boost::get<txout_to_key>(tx.vout[n].target).key, derivation, additional_derivations, n, hw::get_device(("default")))) { ++n_outs; CHECK_AND_ASSERT_MES(tx.vout[n].amount == 0, false, "Destination amount is not zero"); diff --git a/tests/core_tests/rct.cpp b/tests/core_tests/rct.cpp index 62799d842..55401c4cb 100644 --- a/tests/core_tests/rct.cpp +++ b/tests/core_tests/rct.cpp @@ -31,6 +31,7 @@ #include "ringct/rctSigs.h" #include "chaingen.h" #include "rct.h" +#include "device/device.hpp" using namespace epee; using namespace crypto; @@ -133,9 +134,9 @@ bool gen_rct_tx_validation_base::generate_with(std::vector<test_event_entry>& ev crypto::secret_key amount_key; crypto::derivation_to_scalar(derivation, o, amount_key); if (rct_txes[n].rct_signatures.type == rct::RCTTypeSimple || rct_txes[n].rct_signatures.type == rct::RCTTypeSimpleBulletproof) - rct::decodeRctSimple(rct_txes[n].rct_signatures, rct::sk2rct(amount_key), o, rct_tx_masks[o+n*4]); + rct::decodeRctSimple(rct_txes[n].rct_signatures, rct::sk2rct(amount_key), o, rct_tx_masks[o+n*4], hw::get_device("default")); else - rct::decodeRct(rct_txes[n].rct_signatures, rct::sk2rct(amount_key), o, rct_tx_masks[o+n*4]); + rct::decodeRct(rct_txes[n].rct_signatures, rct::sk2rct(amount_key), o, rct_tx_masks[o+n*4], hw::get_device("default")); } CHECK_AND_ASSERT_MES(generator.construct_block_manually(blk_txes[n], blk_last, miner_account, diff --git a/tests/core_tests/tx_validation.cpp b/tests/core_tests/tx_validation.cpp index 6707cc003..d6d5236aa 100644 --- a/tests/core_tests/tx_validation.cpp +++ b/tests/core_tests/tx_validation.cpp @@ -30,6 +30,7 @@ #include "chaingen.h" #include "tx_validation.h" +#include "device/device.hpp" using namespace epee; using namespace crypto; @@ -62,7 +63,7 @@ namespace std::unordered_map<crypto::public_key, cryptonote::subaddress_index> subaddresses; subaddresses[sender_account_keys.m_account_address.m_spend_public_key] = {0,0}; auto& out_key = reinterpret_cast<const crypto::public_key&>(src_entr.outputs[src_entr.real_output].second.dest); - generate_key_image_helper(sender_account_keys, subaddresses, out_key, src_entr.real_out_tx_key, src_entr.real_out_additional_tx_keys, src_entr.real_output_in_tx_index, in_ephemeral, img); + generate_key_image_helper(sender_account_keys, subaddresses, out_key, src_entr.real_out_tx_key, src_entr.real_out_additional_tx_keys, src_entr.real_output_in_tx_index, in_ephemeral, img, hw::get_device(("default"))); // put key image into tx input txin_to_key input_to_key; diff --git a/tests/crypto/CMakeLists.txt b/tests/crypto/CMakeLists.txt index df96c57cc..c89049d50 100644 --- a/tests/crypto/CMakeLists.txt +++ b/tests/crypto/CMakeLists.txt @@ -42,7 +42,10 @@ add_executable(cncrypto-tests ${crypto_headers}) target_link_libraries(cncrypto-tests PRIVATE + wallet + cryptonote_core common + device ${Boost_SYSTEM_LIBRARY} ${EXTRA_LIBRARIES}) set_property(TARGET cncrypto-tests diff --git a/tests/crypto/crypto.cpp b/tests/crypto/crypto.cpp index 6a1dd1b29..90212bd0b 100644 --- a/tests/crypto/crypto.cpp +++ b/tests/crypto/crypto.cpp @@ -33,7 +33,7 @@ #include "crypto-tests.h" bool check_scalar(const crypto::ec_scalar &scalar) { - return crypto::sc_check(crypto::operator &(scalar)) == 0; + return sc_check(crypto::operator &(scalar)) == 0; } void random_scalar(crypto::ec_scalar &res) { @@ -45,13 +45,13 @@ void hash_to_scalar(const void *data, std::size_t length, crypto::ec_scalar &res } void hash_to_point(const crypto::hash &h, crypto::ec_point &res) { - crypto::ge_p2 point; - crypto::ge_fromfe_frombytes_vartime(&point, reinterpret_cast<const unsigned char *>(&h)); - crypto::ge_tobytes(crypto::operator &(res), &point); + ge_p2 point; + ge_fromfe_frombytes_vartime(&point, reinterpret_cast<const unsigned char *>(&h)); + ge_tobytes(crypto::operator &(res), &point); } void hash_to_ec(const crypto::public_key &key, crypto::ec_point &res) { - crypto::ge_p3 tmp; + ge_p3 tmp; crypto::hash_to_ec(key, tmp); - crypto::ge_p3_tobytes(crypto::operator &(res), &tmp); + ge_p3_tobytes(crypto::operator &(res), &tmp); } diff --git a/tests/fuzz/CMakeLists.txt b/tests/fuzz/CMakeLists.txt index 6d34b13e2..dfbbaeca6 100644 --- a/tests/fuzz/CMakeLists.txt +++ b/tests/fuzz/CMakeLists.txt @@ -32,6 +32,7 @@ target_link_libraries(block_fuzz_tests cryptonote_core p2p epee + device ${CMAKE_THREAD_LIBS_INIT} ${EXTRA_LIBRARIES}) set_property(TARGET block_fuzz_tests @@ -44,6 +45,7 @@ target_link_libraries(transaction_fuzz_tests cryptonote_core p2p epee + device ${CMAKE_THREAD_LIBS_INIT} ${EXTRA_LIBRARIES}) set_property(TARGET transaction_fuzz_tests @@ -57,6 +59,7 @@ target_link_libraries(signature_fuzz_tests cryptonote_core p2p epee + device ${CMAKE_THREAD_LIBS_INIT} ${EXTRA_LIBRARIES}) set_property(TARGET signature_fuzz_tests @@ -70,6 +73,7 @@ target_link_libraries(cold-outputs_fuzz_tests cryptonote_core p2p epee + device ${CMAKE_THREAD_LIBS_INIT} ${EXTRA_LIBRARIES}) set_property(TARGET cold-outputs_fuzz_tests @@ -83,6 +87,7 @@ target_link_libraries(cold-transaction_fuzz_tests cryptonote_core p2p epee + device ${CMAKE_THREAD_LIBS_INIT} ${EXTRA_LIBRARIES}) set_property(TARGET cold-transaction_fuzz_tests diff --git a/tests/gtest/include/gtest/internal/gtest-filepath.h b/tests/gtest/include/gtest/internal/gtest-filepath.h index 7a13b4b0d..184450686 100644 --- a/tests/gtest/include/gtest/internal/gtest-filepath.h +++ b/tests/gtest/include/gtest/internal/gtest-filepath.h @@ -192,7 +192,7 @@ class GTEST_API_ FilePath { void Normalize(); - // Returns a pointer to the last occurence of a valid path separator in + // Returns a pointer to the last occurrence of a valid path separator in // the FilePath. On Windows, for example, both '/' and '\' are valid path // separators. Returns NULL if no path separator was found. const char* FindLastPathSeparator() const; diff --git a/tests/gtest/src/gtest-filepath.cc b/tests/gtest/src/gtest-filepath.cc index 0292dc119..3bb275488 100644 --- a/tests/gtest/src/gtest-filepath.cc +++ b/tests/gtest/src/gtest-filepath.cc @@ -130,7 +130,7 @@ FilePath FilePath::RemoveExtension(const char* extension) const { return *this; } -// Returns a pointer to the last occurence of a valid path separator in +// Returns a pointer to the last occurrence of a valid path separator in // the FilePath. On Windows, for example, both '/' and '\' are valid path // separators. Returns NULL if no path separator was found. const char* FilePath::FindLastPathSeparator() const { diff --git a/tests/libwallet_api_tests/CMakeLists.txt b/tests/libwallet_api_tests/CMakeLists.txt index ef066d340..ef1b666ed 100644 --- a/tests/libwallet_api_tests/CMakeLists.txt +++ b/tests/libwallet_api_tests/CMakeLists.txt @@ -38,6 +38,8 @@ add_executable(libwallet_api_tests ${libwallet_api_tests_headers}) target_link_libraries(libwallet_api_tests + PUBLIC + device PRIVATE wallet_api wallet diff --git a/tests/libwallet_api_tests/main.cpp b/tests/libwallet_api_tests/main.cpp index 96e327ef1..1e63a12f3 100644 --- a/tests/libwallet_api_tests/main.cpp +++ b/tests/libwallet_api_tests/main.cpp @@ -841,7 +841,7 @@ struct MyWalletListener : public Monero::WalletListener { std::cout << "wallet: " << wallet->mainAddress() << "**** just received unconfirmed money (" << txId << ", " << wallet->displayAmount(amount) << ")" << std::endl; - // Don't trigger recieve until tx is mined + // Don't trigger receive until tx is mined // total_rx += amount; // receive_triggered = true; // cv_receive.notify_one(); diff --git a/tests/libwallet_api_tests/scripts/README.md b/tests/libwallet_api_tests/scripts/README.md index 2705cc04b..3818a27d8 100644 --- a/tests/libwallet_api_tests/scripts/README.md +++ b/tests/libwallet_api_tests/scripts/README.md @@ -3,7 +3,7 @@ ## Environment for the tests * Running monero node, linked to private/public testnet. By default, tests expect daemon running at ```localhost:38081```, - can we overriden with enviroment variable ```TESTNET_DAEMON_ADDRESS=<your_daemon_address>``` + can we overriden with environment variable ```TESTNET_DAEMON_ADDRESS=<your_daemon_address>``` [Manual](https://github.com/moneroexamples/private-testnet) explaining how to run private testnet. * Directory with pre-generated wallets diff --git a/tests/performance_tests/generate_key_image_helper.h b/tests/performance_tests/generate_key_image_helper.h index 869e595fd..ede48b6ca 100644 --- a/tests/performance_tests/generate_key_image_helper.h +++ b/tests/performance_tests/generate_key_image_helper.h @@ -35,6 +35,7 @@ #include "cryptonote_basic/cryptonote_format_utils.h" #include "single_tx_test_base.h" +#include "device/device.hpp" class test_generate_key_image_helper : public single_tx_test_base { @@ -48,6 +49,6 @@ public: std::unordered_map<crypto::public_key, cryptonote::subaddress_index> subaddresses; subaddresses[m_bob.get_keys().m_account_address.m_spend_public_key] = {0,0}; crypto::public_key out_key = boost::get<cryptonote::txout_to_key>(m_tx.vout[0].target).key; - return cryptonote::generate_key_image_helper(m_bob.get_keys(), subaddresses, out_key, m_tx_pub_key, m_additional_tx_pub_keys, 0, in_ephemeral, ki); + return cryptonote::generate_key_image_helper(m_bob.get_keys(), subaddresses, out_key, m_tx_pub_key, m_additional_tx_pub_keys, 0, in_ephemeral, ki, hw::get_device("default")); } }; diff --git a/tests/performance_tests/is_out_to_acc.h b/tests/performance_tests/is_out_to_acc.h index 2aaf00b36..9f81995ac 100644 --- a/tests/performance_tests/is_out_to_acc.h +++ b/tests/performance_tests/is_out_to_acc.h @@ -66,7 +66,7 @@ public: std::unordered_map<crypto::public_key, cryptonote::subaddress_index> subaddresses; subaddresses[m_bob.get_keys().m_account_address.m_spend_public_key] = {0,0}; std::vector<crypto::key_derivation> additional_derivations; - boost::optional<cryptonote::subaddress_receive_info> info = cryptonote::is_out_to_acc_precomp(subaddresses, tx_out.key, m_derivation, additional_derivations, 0); + boost::optional<cryptonote::subaddress_receive_info> info = cryptonote::is_out_to_acc_precomp(subaddresses, tx_out.key, m_derivation, additional_derivations, 0, hw::get_device("default")); return (bool)info; } diff --git a/tests/performance_tests/rct_mlsag.h b/tests/performance_tests/rct_mlsag.h index 70fb36aec..888f4b260 100644 --- a/tests/performance_tests/rct_mlsag.h +++ b/tests/performance_tests/rct_mlsag.h @@ -65,7 +65,7 @@ public: { sk[j] = xm[ind][j]; } - IIccss = MLSAG_Gen(rct::identity(), P, sk, NULL, NULL, ind, rows); + IIccss = MLSAG_Gen(rct::identity(), P, sk, NULL, NULL, ind, rows, hw::get_device("default")); return true; } @@ -75,7 +75,7 @@ public: if (ver) MLSAG_Ver(rct::identity(), P, IIccss, rows); else - MLSAG_Gen(rct::identity(), P, sk, NULL, NULL, ind, rows); + MLSAG_Gen(rct::identity(), P, sk, NULL, NULL, ind, rows, hw::get_device("default")); return true; } diff --git a/tests/unit_tests/ringct.cpp b/tests/unit_tests/ringct.cpp index d90a14542..b7fcbbcab 100644 --- a/tests/unit_tests/ringct.cpp +++ b/tests/unit_tests/ringct.cpp @@ -37,6 +37,7 @@ #include "ringct/rctTypes.h" #include "ringct/rctSigs.h" #include "ringct/rctOps.h" +#include "device/device.hpp" using namespace std; using namespace crypto; @@ -111,7 +112,7 @@ TEST(ringct, MG_sigs) sk[j] = xm[ind][j]; } key message = identity(); - mgSig IIccss = MLSAG_Gen(message, P, sk, NULL, NULL, ind, R); + mgSig IIccss = MLSAG_Gen(message, P, sk, NULL, NULL, ind, R, hw::get_device("default")); ASSERT_TRUE(MLSAG_Ver(message, P, IIccss, R)); //#MG sig: false one @@ -131,8 +132,8 @@ TEST(ringct, MG_sigs) } sk[j] = xx[ind][j]; } - sk[2] = skGen();//asume we don't know one of the private keys.. - IIccss = MLSAG_Gen(message, P, sk, NULL, NULL, ind, R); + sk[2] = skGen();//assume we don't know one of the private keys.. + IIccss = MLSAG_Gen(message, P, sk, NULL, NULL, ind, R, hw::get_device("default")); ASSERT_FALSE(MLSAG_Ver(message, P, IIccss, R)); } @@ -171,13 +172,13 @@ TEST(ringct, range_proofs) destinations.push_back(Pk); //compute rct data with mixin 500 - rctSig s = genRct(rct::zero(), sc, pc, destinations, amounts, amount_keys, NULL, NULL, 3); + rctSig s = genRct(rct::zero(), sc, pc, destinations, amounts, amount_keys, NULL, NULL, 3, hw::get_device("default")); //verify rct data ASSERT_TRUE(verRct(s)); //decode received amount - decodeRct(s, amount_keys[1], 1, mask); + decodeRct(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 @@ -188,13 +189,13 @@ TEST(ringct, range_proofs) //compute rct data with mixin 500 - s = genRct(rct::zero(), sc, pc, destinations, amounts, amount_keys, NULL, NULL, 3); + s = genRct(rct::zero(), sc, pc, destinations, amounts, amount_keys, NULL, NULL, 3, hw::get_device("default")); //verify rct data ASSERT_FALSE(verRct(s)); //decode received amount - decodeRct(s, amount_keys[1], 1, mask); + decodeRct(s, amount_keys[1], 1, mask, hw::get_device("default")); } TEST(ringct, range_proofs_with_fee) @@ -235,13 +236,13 @@ TEST(ringct, range_proofs_with_fee) destinations.push_back(Pk); //compute rct data with mixin 500 - rctSig s = genRct(rct::zero(), sc, pc, destinations, amounts, amount_keys, NULL, NULL, 3); + rctSig s = genRct(rct::zero(), sc, pc, destinations, amounts, amount_keys, NULL, NULL, 3, hw::get_device("default")); //verify rct data ASSERT_TRUE(verRct(s)); //decode received amount - decodeRct(s, amount_keys[1], 1, mask); + decodeRct(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 @@ -252,13 +253,13 @@ TEST(ringct, range_proofs_with_fee) //compute rct data with mixin 500 - s = genRct(rct::zero(), sc, pc, destinations, amounts, amount_keys, NULL, NULL, 3); + s = genRct(rct::zero(), sc, pc, destinations, amounts, amount_keys, NULL, NULL, 3, hw::get_device("default")); //verify rct data ASSERT_FALSE(verRct(s)); //decode received amount - decodeRct(s, amount_keys[1], 1, mask); + decodeRct(s, amount_keys[1], 1, mask, hw::get_device("default")); } TEST(ringct, simple) @@ -310,13 +311,13 @@ TEST(ringct, simple) //compute sig with mixin 2 xmr_amount txnfee = 1; - rctSig s = genRctSimple(message, sc, pc, destinations,inamounts, outamounts, amount_keys, NULL, NULL, txnfee, 2); + rctSig s = genRctSimple(message, sc, pc, destinations,inamounts, outamounts, amount_keys, NULL, NULL, txnfee, 2, hw::get_device("default")); //verify ring ct signature ASSERT_TRUE(verRctSimple(s)); //decode received amount corresponding to output pubkey index 1 - decodeRctSimple(s, amount_keys[1], 1, mask); + decodeRctSimple(s, amount_keys[1], 1, mask, hw::get_device("default")); } static rct::rctSig make_sample_rct_sig(int n_inputs, const uint64_t input_amounts[], int n_outputs, const uint64_t output_amounts[], bool last_is_fee) @@ -344,7 +345,7 @@ static rct::rctSig make_sample_rct_sig(int n_inputs, const uint64_t input_amount } } - return genRct(rct::zero(), sc, pc, destinations, amounts, amount_keys, NULL, NULL, 3);; + return genRct(rct::zero(), sc, pc, destinations, amounts, amount_keys, NULL, NULL, 3, hw::get_device("default")); } static rct::rctSig make_sample_simple_rct_sig(int n_inputs, const uint64_t input_amounts[], int n_outputs, const uint64_t output_amounts[], uint64_t fee) @@ -370,7 +371,7 @@ static rct::rctSig make_sample_simple_rct_sig(int n_inputs, const uint64_t input destinations.push_back(Pk); } - return genRctSimple(rct::zero(), sc, pc, destinations, inamounts, outamounts, amount_keys, NULL, NULL, fee, 3);; + return genRctSimple(rct::zero(), sc, pc, destinations, inamounts, outamounts, amount_keys, NULL, NULL, fee, 3, hw::get_device("default")); } static bool range_proof_test(bool expected_valid, diff --git a/tests/unit_tests/serialization.cpp b/tests/unit_tests/serialization.cpp index aa116da04..00bb9e49c 100644 --- a/tests/unit_tests/serialization.cpp +++ b/tests/unit_tests/serialization.cpp @@ -47,6 +47,7 @@ #include "wallet/wallet2.h" #include "gtest/gtest.h" #include "unit_tests_utils.h" +#include "device/device.hpp" using namespace std; using namespace crypto; @@ -590,7 +591,7 @@ TEST(Serialization, serializes_ringct_types) rct::skpkGen(Sk, Pk); destinations.push_back(Pk); //compute rct data with mixin 500 - s0 = rct::genRct(rct::zero(), sc, pc, destinations, amounts, amount_keys, NULL, NULL, 3); + s0 = rct::genRct(rct::zero(), sc, pc, destinations, amounts, amount_keys, NULL, NULL, 3, hw::get_device("default")); mg0 = s0.p.MGs[0]; ASSERT_TRUE(serialization::dump_binary(mg0, blob)); @@ -713,9 +714,9 @@ TEST(Serialization, portability_wallet) epee::string_tools::hex_to_pod("c5680d3735b90871ca5e3d90cd82d6483eed1151b9ab75c2c8c3a7d89e00a5a8", ki[0]); epee::string_tools::hex_to_pod("d54cbd435a8d636ad9b01b8d4f3eb13bd0cf1ce98eddf53ab1617f9b763e66c0", ki[1]); epee::string_tools::hex_to_pod("6c3cd6af97c4070a7aef9b1344e7463e29c7cd245076fdb65da447a34da3ca76", ki[2]); - ASSERT_TRUE(w.m_key_images.find(ki[0])->second == 0); - ASSERT_TRUE(w.m_key_images.find(ki[1])->second == 1); - ASSERT_TRUE(w.m_key_images.find(ki[2])->second == 2); + ASSERT_EQ_MAP(0, w.m_key_images, ki[0]); + ASSERT_EQ_MAP(1, w.m_key_images, ki[1]); + ASSERT_EQ_MAP(2, w.m_key_images, ki[2]); } // unconfirmed txs ASSERT_TRUE(w.m_unconfirmed_txs.size() == 0); @@ -743,15 +744,19 @@ TEST(Serialization, portability_wallet) // tx keys ASSERT_TRUE(w.m_tx_keys.size() == 2); { - auto tx_key0 = w.m_tx_keys.begin(); - auto tx_key1 = tx_key0; - ++tx_key1; - if (epee::string_tools::pod_to_hex(tx_key0->first) == "6e7013684d35820f66c6679197ded9329bfe0e495effa47e7b25258799858dba") - swap(tx_key0, tx_key1); - ASSERT_TRUE(epee::string_tools::pod_to_hex(tx_key0->first) == "b9aac8c020ab33859e0c0b6331f46a8780d349e7ac17b067116e2d87bf48daad"); - ASSERT_TRUE(epee::string_tools::pod_to_hex(tx_key1->first) == "6e7013684d35820f66c6679197ded9329bfe0e495effa47e7b25258799858dba"); - ASSERT_TRUE(epee::string_tools::pod_to_hex(tx_key0->second) == "bf3614c6de1d06c09add5d92a5265d8c76af706f7bc6ac830d6b0d109aa87701"); - ASSERT_TRUE(epee::string_tools::pod_to_hex(tx_key1->second) == "e556884246df5a787def6732c6ea38f1e092fa13e5ea98f732b99c07a6332003"); + const std::vector<std::pair<std::string, std::string>> txid_txkey = + { + {"b9aac8c020ab33859e0c0b6331f46a8780d349e7ac17b067116e2d87bf48daad", "bf3614c6de1d06c09add5d92a5265d8c76af706f7bc6ac830d6b0d109aa87701"}, + {"6e7013684d35820f66c6679197ded9329bfe0e495effa47e7b25258799858dba", "e556884246df5a787def6732c6ea38f1e092fa13e5ea98f732b99c07a6332003"}, + }; + for (size_t i = 0; i < txid_txkey.size(); ++i) + { + crypto::hash txid; + crypto::secret_key txkey; + epee::string_tools::hex_to_pod(txid_txkey[i].first, txid); + epee::string_tools::hex_to_pod(txid_txkey[i].second, txkey); + ASSERT_EQ_MAP(txkey, w.m_tx_keys, txid); + } } // confirmed txs ASSERT_TRUE(w.m_confirmed_txs.size() == 1); @@ -761,8 +766,8 @@ TEST(Serialization, portability_wallet) crypto::hash h[2]; epee::string_tools::hex_to_pod("15024343b38e77a1a9860dfed29921fa17e833fec837191a6b04fa7cb9605b8e", h[0]); epee::string_tools::hex_to_pod("6e7013684d35820f66c6679197ded9329bfe0e495effa47e7b25258799858dba", h[1]); - ASSERT_TRUE(w.m_tx_notes.find(h[0])->second == "sample note"); - ASSERT_TRUE(w.m_tx_notes.find(h[1])->second == "sample note 2"); + ASSERT_EQ_MAP("sample note", w.m_tx_notes, h[0]); + ASSERT_EQ_MAP("sample note 2", w.m_tx_notes, h[1]); } // unconfirmed payments ASSERT_TRUE(w.m_unconfirmed_payments.size() == 0); @@ -773,9 +778,9 @@ TEST(Serialization, portability_wallet) epee::string_tools::hex_to_pod("33f75f264574cb3a9ea5b24220a5312e183d36dc321c9091dfbb720922a4f7b0", pubkey[0]); epee::string_tools::hex_to_pod("5066ff2ce9861b1d131cf16eeaa01264933a49f28242b97b153e922ec7b4b3cb", pubkey[1]); epee::string_tools::hex_to_pod("0d8467e16e73d16510452b78823e082e05ee3a63788d40de577cf31eb555f0c8", pubkey[2]); - ASSERT_TRUE(w.m_pub_keys.find(pubkey[0])->second == 0); - ASSERT_TRUE(w.m_pub_keys.find(pubkey[1])->second == 1); - ASSERT_TRUE(w.m_pub_keys.find(pubkey[2])->second == 2); + ASSERT_EQ_MAP(0, w.m_pub_keys, pubkey[0]); + ASSERT_EQ_MAP(1, w.m_pub_keys, pubkey[1]); + ASSERT_EQ_MAP(2, w.m_pub_keys, pubkey[2]); } // address book ASSERT_TRUE(w.m_address_book.size() == 1); diff --git a/tests/unit_tests/unit_tests_utils.h b/tests/unit_tests/unit_tests_utils.h index 49301f5a8..ecd97e3d5 100644 --- a/tests/unit_tests/unit_tests_utils.h +++ b/tests/unit_tests/unit_tests_utils.h @@ -65,3 +65,10 @@ namespace unit_test std::atomic<size_t> m_counter; }; } + +# define ASSERT_EQ_MAP(val, map, key) \ + do { \ + auto found = map.find(key); \ + ASSERT_TRUE(found != map.end()); \ + ASSERT_EQ(val, found->second); \ + } while (false) diff --git a/translations/monero.ts b/translations/monero.ts index 5ca882bb3..c768d69c5 100644 --- a/translations/monero.ts +++ b/translations/monero.ts @@ -4,23 +4,23 @@ <context> <name>Monero::AddressBookImpl</name> <message> - <location filename="../src/wallet/api/address_book.cpp" line="55"/> + <location filename="../src/wallet/api/address_book.cpp" line="53"/> <source>Invalid destination address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/address_book.cpp" line="65"/> + <location filename="../src/wallet/api/address_book.cpp" line="63"/> <source>Invalid payment ID. Short payment ID should only be used in an integrated address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/address_book.cpp" line="72"/> + <location filename="../src/wallet/api/address_book.cpp" line="70"/> <source>Invalid payment ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/address_book.cpp" line="79"/> - <source>Integrated address and long payment id can't be used at the same time</source> + <location filename="../src/wallet/api/address_book.cpp" line="77"/> + <source>Integrated address and long payment ID can't be used at the same time</source> <translation type="unfinished"></translation> </message> </context> @@ -37,32 +37,32 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="114"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="115"/> <source>daemon is busy. Please try again later.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="117"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="118"/> <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="121"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="122"/> <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="126"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="127"/> <source>. Reason: </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="129"/> <source>Unknown exception: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="131"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="132"/> <source>Unhandled exception</source> <translation type="unfinished"></translation> </message> @@ -81,323 +81,324 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="135"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="168"/> <source>Claimed change does not go to a paid address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="141"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="174"/> <source>Claimed change is larger than payment to the change address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="151"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="184"/> <source>Change goes to more than one address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="164"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="197"/> <source>sending %s to %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="170"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="203"/> <source>with no destinations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="176"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="209"/> <source>%s change to %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="179"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="212"/> <source>no change</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="181"/> - <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min mixin %lu. %s</source> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="214"/> + <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min ring size %lu. %s</source> <translation type="unfinished"></translation> </message> </context> <context> <name>Monero::WalletImpl</name> <message> - <location filename="../src/wallet/api/wallet.cpp" line="942"/> + <location filename="../src/wallet/api/wallet.cpp" line="1111"/> <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="952"/> + <location filename="../src/wallet/api/wallet.cpp" line="1121"/> <source>Failed to add short payment id: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="978"/> - <location filename="../src/wallet/api/wallet.cpp" line="1072"/> + <location filename="../src/wallet/api/wallet.cpp" line="1154"/> + <location filename="../src/wallet/api/wallet.cpp" line="1258"/> <source>daemon is busy. Please try again later.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="981"/> - <location filename="../src/wallet/api/wallet.cpp" line="1075"/> + <location filename="../src/wallet/api/wallet.cpp" line="1157"/> + <location filename="../src/wallet/api/wallet.cpp" line="1261"/> <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="984"/> - <location filename="../src/wallet/api/wallet.cpp" line="1078"/> + <location filename="../src/wallet/api/wallet.cpp" line="1160"/> + <location filename="../src/wallet/api/wallet.cpp" line="1264"/> <source>RPC error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1081"/> + <location filename="../src/wallet/api/wallet.cpp" line="1197"/> + <location filename="../src/wallet/api/wallet.cpp" line="1301"/> + <source>not enough outputs for specified ring size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="1199"/> + <location filename="../src/wallet/api/wallet.cpp" line="1303"/> + <source>found outputs to use</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="1201"/> + <source>Please sweep unmixable outputs.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="1267"/> <source>failed to get random outputs to mix</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="994"/> - <location filename="../src/wallet/api/wallet.cpp" line="1088"/> + <location filename="../src/wallet/api/wallet.cpp" line="1170"/> + <location filename="../src/wallet/api/wallet.cpp" line="1274"/> <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="403"/> + <location filename="../src/wallet/api/wallet.cpp" line="474"/> <source>failed to parse address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="415"/> + <location filename="../src/wallet/api/wallet.cpp" line="486"/> <source>failed to parse secret spend key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="425"/> + <location filename="../src/wallet/api/wallet.cpp" line="496"/> <source>No view key supplied, cancelled</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="432"/> + <location filename="../src/wallet/api/wallet.cpp" line="503"/> <source>failed to parse secret view key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="442"/> + <location filename="../src/wallet/api/wallet.cpp" line="513"/> <source>failed to verify secret spend key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="447"/> + <location filename="../src/wallet/api/wallet.cpp" line="518"/> <source>spend key does not match address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="453"/> + <location filename="../src/wallet/api/wallet.cpp" line="524"/> <source>failed to verify secret view key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="458"/> + <location filename="../src/wallet/api/wallet.cpp" line="529"/> <source>view key does not match address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="477"/> + <location filename="../src/wallet/api/wallet.cpp" line="548"/> <source>failed to generate new wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="799"/> + <location filename="../src/wallet/api/wallet.cpp" line="773"/> + <source>Failed to send import wallet request</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="919"/> <source>Failed to load unsigned transactions</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="820"/> + <location filename="../src/wallet/api/wallet.cpp" line="940"/> <source>Failed to load transaction from file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="838"/> + <location filename="../src/wallet/api/wallet.cpp" line="958"/> <source>Wallet is view only</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="847"/> + <location filename="../src/wallet/api/wallet.cpp" line="967"/> <source>failed to save file </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="874"/> + <location filename="../src/wallet/api/wallet.cpp" line="986"/> + <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="999"/> <source>Failed to import key images: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="987"/> - <source>failed to get random outputs to mix: %s</source> + <location filename="../src/wallet/api/wallet.cpp" line="1032"/> + <source>Failed to get subaddress label: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1003"/> - <location filename="../src/wallet/api/wallet.cpp" line="1097"/> - <source>not enough money to transfer, available only %s, transaction amount %s = %s + %s (fee)</source> + <location filename="../src/wallet/api/wallet.cpp" line="1046"/> + <source>Failed to set subaddress label: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1012"/> - <location filename="../src/wallet/api/wallet.cpp" line="1106"/> - <source>not enough outputs for specified mixin_count</source> + <location filename="../src/wallet/api/wallet.cpp" line="1163"/> + <source>failed to get random outputs to mix: %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1014"/> - <location filename="../src/wallet/api/wallet.cpp" line="1108"/> - <source>output amount</source> + <location filename="../src/wallet/api/wallet.cpp" line="1179"/> + <location filename="../src/wallet/api/wallet.cpp" line="1283"/> + <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="1188"/> + <location filename="../src/wallet/api/wallet.cpp" line="1292"/> + <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="1014"/> - <location filename="../src/wallet/api/wallet.cpp" line="1108"/> - <source>found outputs to mix</source> + <location filename="../src/wallet/api/wallet.cpp" line="1199"/> + <location filename="../src/wallet/api/wallet.cpp" line="1303"/> + <source>output amount</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1019"/> - <location filename="../src/wallet/api/wallet.cpp" line="1113"/> + <location filename="../src/wallet/api/wallet.cpp" line="1205"/> + <location filename="../src/wallet/api/wallet.cpp" line="1308"/> <source>transaction was not constructed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1023"/> - <location filename="../src/wallet/api/wallet.cpp" line="1117"/> + <location filename="../src/wallet/api/wallet.cpp" line="1209"/> + <location filename="../src/wallet/api/wallet.cpp" line="1312"/> <source>transaction %s was rejected by daemon with status: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1030"/> - <location filename="../src/wallet/api/wallet.cpp" line="1124"/> + <location filename="../src/wallet/api/wallet.cpp" line="1216"/> + <location filename="../src/wallet/api/wallet.cpp" line="1319"/> <source>one of destinations is zero</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1033"/> - <location filename="../src/wallet/api/wallet.cpp" line="1127"/> + <location filename="../src/wallet/api/wallet.cpp" line="1219"/> + <location filename="../src/wallet/api/wallet.cpp" line="1322"/> <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="1036"/> - <location filename="../src/wallet/api/wallet.cpp" line="1130"/> + <location filename="../src/wallet/api/wallet.cpp" line="1222"/> + <location filename="../src/wallet/api/wallet.cpp" line="1325"/> <source>unknown transfer error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1039"/> - <location filename="../src/wallet/api/wallet.cpp" line="1133"/> + <location filename="../src/wallet/api/wallet.cpp" line="1225"/> + <location filename="../src/wallet/api/wallet.cpp" line="1328"/> <source>internal error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1042"/> - <location filename="../src/wallet/api/wallet.cpp" line="1136"/> + <location filename="../src/wallet/api/wallet.cpp" line="1228"/> + <location filename="../src/wallet/api/wallet.cpp" line="1331"/> <source>unexpected error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1045"/> - <location filename="../src/wallet/api/wallet.cpp" line="1139"/> + <location filename="../src/wallet/api/wallet.cpp" line="1231"/> + <location filename="../src/wallet/api/wallet.cpp" line="1334"/> <source>unknown error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1419"/> - <source>Rescan spent can only be used with a trusted daemon</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Monero::WalletManagerImpl</name> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="192"/> - <source>failed to parse txid</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="199"/> - <location filename="../src/wallet/api/wallet_manager.cpp" line="206"/> - <source>failed to parse tx key</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="217"/> - <source>failed to parse address</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="227"/> - <source>failed to get transaction from daemon</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="238"/> - <source>failed to parse transaction from daemon</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="245"/> - <source>failed to validate transaction from daemon</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="250"/> - <source>failed to get the right transaction from daemon</source> + <location filename="../src/wallet/api/wallet.cpp" line="1412"/> + <location filename="../src/wallet/api/wallet.cpp" line="1441"/> + <location filename="../src/wallet/api/wallet.cpp" line="1494"/> + <location filename="../src/wallet/api/wallet.cpp" line="1525"/> + <location filename="../src/wallet/api/wallet.cpp" line="1556"/> + <location filename="../src/wallet/api/wallet.cpp" line="1579"/> + <source>Failed to parse txid</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="257"/> - <source>failed to generate key derivation from supplied parameters</source> + <location filename="../src/wallet/api/wallet.cpp" line="1430"/> + <source>no tx keys found for this txid</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="313"/> - <source>error: </source> + <location filename="../src/wallet/api/wallet.cpp" line="1450"/> + <location filename="../src/wallet/api/wallet.cpp" line="1460"/> + <source>Failed to parse tx key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="319"/> - <source>received</source> + <location filename="../src/wallet/api/wallet.cpp" line="1470"/> + <location filename="../src/wallet/api/wallet.cpp" line="1502"/> + <location filename="../src/wallet/api/wallet.cpp" line="1533"/> + <location filename="../src/wallet/api/wallet.cpp" line="1621"/> + <source>Failed to parse address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="319"/> - <source>in txid</source> + <location filename="../src/wallet/api/wallet.cpp" line="1627"/> + <source>Address must not be a subaddress</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="323"/> - <source>received nothing in txid</source> + <location filename="../src/wallet/api/wallet.cpp" line="1849"/> + <source>Rescan spent can only be used with a trusted daemon</source> <translation type="unfinished"></translation> </message> </context> <context> <name>Wallet</name> <message> - <location filename="../src/wallet/api/wallet.cpp" line="212"/> + <location filename="../src/wallet/api/wallet.cpp" line="246"/> <source>Failed to parse address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="219"/> + <location filename="../src/wallet/api/wallet.cpp" line="253"/> <source>Failed to parse key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="227"/> + <location filename="../src/wallet/api/wallet.cpp" line="261"/> <source>failed to verify key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="237"/> + <location filename="../src/wallet/api/wallet.cpp" line="271"/> <source>key does not match address</source> <translation type="unfinished"></translation> </message> @@ -405,2193 +406,3467 @@ <context> <name>command_line</name> <message> - <location filename="../src/common/command_line.cpp" line="76"/> + <location filename="../src/common/command_line.cpp" line="57"/> <source>yes</source> <translation type="unfinished"></translation> </message> + <message> + <location filename="../src/common/command_line.cpp" line="71"/> + <source>no</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>cryptonote::rpc_args</name> <message> - <location filename="../src/rpc/rpc_args.cpp" line="38"/> + <location filename="../src/rpc/rpc_args.cpp" line="40"/> <source>Specify IP to bind RPC server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="39"/> + <location filename="../src/rpc/rpc_args.cpp" line="41"/> <source>Specify username[:password] required for RPC server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="40"/> + <location filename="../src/rpc/rpc_args.cpp" line="42"/> <source>Confirm rpc-bind-ip value is NOT a loopback (local) IP</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="66"/> + <location filename="../src/rpc/rpc_args.cpp" line="43"/> + <source>Specify a comma separated list of origins to allow cross origin resource sharing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/rpc/rpc_args.cpp" line="70"/> <source>Invalid IP address given for --</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="74"/> + <location filename="../src/rpc/rpc_args.cpp" line="78"/> <source> permits inbound unencrypted external connections. Consider SSH tunnel or SSL proxy instead. Override with --</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="89"/> + <location filename="../src/rpc/rpc_args.cpp" line="95"/> <source>Username specified with --</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="89"/> + <location filename="../src/rpc/rpc_args.cpp" line="95"/> + <location filename="../src/rpc/rpc_args.cpp" line="105"/> <source> cannot be empty</source> <translation type="unfinished"></translation> </message> + <message> + <location filename="../src/rpc/rpc_args.cpp" line="105"/> + <source> requires RFC server password --</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>cryptonote::simple_wallet</name> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="290"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="479"/> <source>Commands: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1557"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3008"/> <source>failed to read wallet password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1325"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2699"/> <source>invalid password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="697"/> - <source>start_mining [<number_of_threads>] - Start mining in daemon</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="698"/> - <source>Stop mining in daemon</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="699"/> - <source>Save current blockchain data</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="701"/> - <source>Show current wallet balance</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="704"/> - <source>Show blockchain height</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="715"/> - <source>Show current wallet public address</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="744"/> - <source>Show this help</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="788"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1905"/> <source>set seed: needs an argument. available options: language</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="811"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1933"/> <source>set: unrecognized argument(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1442"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2869"/> <source>wallet file path not valid: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="863"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1987"/> <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="416"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="662"/> <source>usage: payment_id</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="710"/> - <source>sweep_below <amount_threshold> [mixin] address [<payment_id>] - Send all unlocked outputs below the threshold to an address</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="743"/> - <source>Generate a new random full size payment id - these will be unencrypted on the blockchain, see integrated_address for encrypted short payment ids</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="774"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1891"/> <source>needs an argument</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="797"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="798"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="799"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="801"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="804"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="805"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="809"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1914"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1915"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1916"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1918"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1921"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1922"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1926"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1927"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1929"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1931"/> <source>0 or 1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="800"/> - <source>integer >= 2</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="803"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1920"/> <source>0, 1, 2, 3, or 4</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="807"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1924"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1928"/> <source>unsigned integer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="912"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2041"/> <source>NOTE: the following 25 words 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="958"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2092"/> <source>--restore-deterministic-wallet uses --generate-new-wallet, not --wallet-file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="973"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2121"/> <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="1123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2471"/> <source>specify a wallet path with --generate-new-wallet (not --wallet-file)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1261"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2635"/> <source>wallet failed to connect to daemon: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1269"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2643"/> <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="1288"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2662"/> <source>List of available languages for your wallet's seed:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1297"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2671"/> <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="1354"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2737"/> <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="1368"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1425"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2751"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2809"/> <source>Generated new wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1374"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1430"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2757"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2814"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2858"/> <source>failed to generate new wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1457"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2887"/> <source>Opened watch-only wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1457"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2891"/> <source>Opened wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1466"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2901"/> <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="1481"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2916"/> <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="1489"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2924"/> <source>failed to load wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1497"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2941"/> <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="1541"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2986"/> <source>Wallet data saved</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1613"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3072"/> <source>Mining started in daemon</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1615"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3074"/> <source>mining has NOT been started: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1634"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3093"/> <source>Mining stopped in daemon</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3095"/> <source>mining has NOT been stopped: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1655"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3150"/> <source>Blockchain saved</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1670"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1687"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1699"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3165"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3183"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3196"/> <source>Height </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1671"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1688"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1700"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3197"/> <source>transaction </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1672"/> - <source>received </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1689"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3185"/> <source>spent </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1701"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3198"/> <source>unsupported transaction format</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1718"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3219"/> <source>Starting refresh...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1731"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3232"/> <source>Refresh done, blocks received: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2186"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2701"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3758"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4230"/> <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="2201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3773"/> <source>bad locked_blocks parameter:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2228"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2726"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3801"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4248"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4462"/> <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="2237"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2735"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3810"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4257"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4430"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4470"/> <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="2262"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2355"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2533"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2749"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2794"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3835"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3916"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3987"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4096"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4271"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4329"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4484"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4527"/> <source>transaction cancelled.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2323"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3895"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3905"/> + <source>Is this okay anyway? (Y/Yes/N/No): </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3900"/> + <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="3905"/> + <source>Failed to check for backlog: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3946"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4302"/> + <source> +Transaction </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3951"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4307"/> + <source>Spending from address index %d +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3953"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4309"/> + <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="3955"/> <source>Sending %s. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2326"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3958"/> <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="2332"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3964"/> <source>The transaction fee is %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2335"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3967"/> <source>, of which %s is dust from change</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2336"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3968"/> <source>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2336"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3968"/> <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="2341"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3973"/> <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="2367"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2544"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2805"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3999"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4011"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4107"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4119"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4340"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4352"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4537"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4549"/> <source>Failed to write transaction(s) to file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2371"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2548"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2809"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4003"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4015"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4111"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4344"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4356"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4541"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4553"/> <source>Unsigned transaction(s) successfully written to file: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2406"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2583"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2844"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3157"/> - <source>Not enough money in unlocked balance</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4066"/> + <source>No unmixable outputs found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2415"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2592"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2853"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3166"/> - <source>Failed to find a way to create transactions. This is usually due to dust which is so small it cannot pay for itself in fees, or trying to send more money than the unlocked balance, or not leaving enough for fees</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4149"/> + <source>No address given</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2435"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2612"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2873"/> - <source>Reason: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4424"/> + <source>failed to parse Payment ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2447"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2624"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2885"/> - <source>failed to find a suitable way to split transactions</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4440"/> + <source>usage: sweep_single [<priority>] [<ring_size>] <key_image> <address> [<payment_id>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2503"/> - <source>No unmixable outputs found</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4447"/> + <source>failed to parse key image</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2709"/> - <source>No address given</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4499"/> + <source>No outputs found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4504"/> + <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="2921"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4509"/> + <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="4586"/> <source>missing threshold amount</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2926"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4591"/> <source>invalid amount threshold</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4601"/> + <source>donations are not enabled on the testnet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4608"/> + <source>usage: donate [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <amount> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4702"/> <source>Claimed change does not go to a paid address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3013"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4707"/> <source>Claimed change is larger than payment to the change address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3035"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4738"/> <source>sending %s to %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3041"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4748"/> + <source> dummy output(s)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4751"/> <source>with no destinations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4763"/> + <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="4787"/> + <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="4797"/> + <source>usage: sign_transfer [export]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4809"/> <source>Failed to sign transaction</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3094"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4815"/> <source>Failed to sign transaction: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3120"/> - <source>Failed to load transaction from file</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4836"/> + <source>Transaction raw hex data exported to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3137"/> - <source>daemon is busy. Please try again later</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4852"/> + <source>Failed to load transaction from file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1745"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1995"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2395"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2572"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2833"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3146"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3248"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3551"/> <source>RPC error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="312"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="522"/> <source>wallet is watch-only and has no spend key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="390"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="780"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="848"/> <source>Your original password was incorrect.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="404"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="650"/> <source>Error with wallet rewrite: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="513"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1289"/> <source>priority must be 0, 1, 2, 3, or 4 </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="525"/> - <source>priority must be 0, 1, 2, 3, or 4</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="540"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1301"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1316"/> <source>priority must be 0, 1, 2, 3, or 4</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="623"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1404"/> <source>invalid unit</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="641"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1422"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1484"/> <source>invalid count: must be an unsigned integer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="659"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1440"/> <source>invalid value</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="705"/> - <source>Same as transfer, but using an older transaction building algorithm</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1942"/> + <source>usage: set_log <log_level_number_0-4> | <categories></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2013"/> + <source>(Y/Yes/N/No): </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2509"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2536"/> + <source>bad m_restore_height parameter: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2514"/> + <source>date format must be YYYY-MM-DD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2527"/> + <source>Restore height is: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2528"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3980"/> + <source>Is this okay? (Y/Yes/N/No): </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2575"/> + <source>Daemon is local, assuming trusted</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3004"/> + <source>Password for new watch-only wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3063"/> + <source>invalid arguments. Please use start_mining [<number_of_threads>] [do_bg_mining] [ignore_battery], <number_of_threads> should be from 1 to </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3258"/> + <source>internal error: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1185"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3263"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3556"/> + <source>unexpected error: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1119"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1190"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3268"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3561"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4030"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4138"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4371"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4570"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4865"/> + <source>unknown error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3273"/> + <source>refresh failed: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3273"/> + <source>Blocks received: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3304"/> + <source>unlocked balance: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1925"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> + <source>amount</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="219"/> + <source>false</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="493"/> + <source>Unknown command: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="500"/> + <source>Command usage: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="503"/> + <source>Command description: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="551"/> + <source>wallet is multisig but not yet finalized</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="567"/> + <source>Enter optional seed encryption passphrase, empty to see raw seed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="584"/> + <source>Failed to retrieve seed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="603"/> + <source>wallet is multisig and has no seed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="674"/> + <source>Cannot connect to daemon</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="679"/> + <source>Current fee is %s monero per kB</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="709"/> - <source>sweep_all [mixin] address [<payment_id>] - Send all unlocked balance to an address</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="695"/> + <source>Error: failed to estimate backlog array size: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="700"/> + <source>Error: bad estimated backlog array size</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="711"/> - <source>donate [<mixin_count>] <amount> [payment_id] - Donate <amount> to the development team (donate.getmonero.org)</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="712"/> + <source> (current)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="714"/> - <source>set_log <level>|<categories> - Change current log detail (level must be <0-4>)</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="715"/> + <source>%u block (%u minutes) backlog at priority %u%s</source> <translation type="unfinished"></translation> </message> <message> <location filename="../src/simplewallet/simplewallet.cpp" line="717"/> - <source>address_book [(add (<address> [pid <long or short payment id>])|<integrated address> [<description possibly with whitespaces>])|(delete <index>)] - Print all entries in the address book, optionally adding/deleting an entry to/from it</source> + <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="720"/> + <source>No backlog at priority </source> <translation type="unfinished"></translation> </message> <message> <location filename="../src/simplewallet/simplewallet.cpp" line="729"/> - <source>show_transfers [in|out|pending|failed|pool] [<min_height> [<max_height>]] - Show incoming/outgoing transfers within an optional height range</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="762"/> + <source>This wallet is already multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="741"/> - <source>Show information about a transfer to/from this address</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="734"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="767"/> + <source>wallet is watch-only and cannot be made multisig</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="742"/> - <source>Change wallet password</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="740"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="773"/> + <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="820"/> - <source>usage: set_log <log_level_number_0-4> | <categories></source> + <location filename="../src/simplewallet/simplewallet.cpp" line="747"/> + <source>Your password is incorrect.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="886"/> - <source>(Y/Yes/N/No): </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="753"/> + <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="1157"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1184"/> - <source>bad m_restore_height parameter: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="754"/> + <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="1162"/> - <source>date format must be YYYY-MM-DD</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="786"/> + <source>usage: make_multisig <threshold> <multisiginfo1> [<multisiginfo2>...]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1175"/> - <source>Restore height is: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="794"/> + <source>Invalid threshold</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="807"/> + <source>Another step is needed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="809"/> + <source>Send this multisig info to all other participants, then use finalize_multisig <info1> [<info2>...] with others' multisig info</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="815"/> + <source>Error creating multisig: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="822"/> + <source>Error creating multisig: new wallet is not multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="825"/> + <source> multisig address: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="836"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="880"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="927"/> + <source>This wallet is not multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="841"/> + <source>This wallet is already finalized</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="854"/> + <source>usage: finalize_multisig <multisiginfo1> [<multisiginfo2>...]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="862"/> + <source>Failed to finalize multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="868"/> + <source>Failed to finalize multisig: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="885"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="932"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1006"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1074"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1136"/> + <source>This multisig wallet is not yet finalized</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="890"/> + <source>usage: export_multisig_info <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="913"/> + <source>Error exporting multisig info: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="917"/> + <source>Multisig info exported to </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="937"/> + <source>usage: import_multisig_info <filename1> [<filename2>...] - one for each other participant</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="965"/> + <source>Multisig info imported</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="969"/> + <source>Failed to import multisig info: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="980"/> + <source>Failed to update spent status after importing multisig info: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="985"/> + <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="1001"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1069"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1131"/> + <source>This is not a multisig wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1011"/> + <source>usage: sign_multisig <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1024"/> + <source>Failed to sign multisig transaction</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1030"/> + <source>Multisig error: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1035"/> + <source>Failed to sign multisig transaction: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1058"/> + <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="1079"/> + <source>usage: submit_multisig <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1094"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1155"/> + <source>Failed to load multisig transaction from file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1160"/> + <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="1108"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6750"/> + <source>Transaction successfully submitted, transaction </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1109"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6751"/> + <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="1141"/> + <source>usage: export_raw_multisig <filename></source> <translation type="unfinished"></translation> </message> <message> <location filename="../src/simplewallet/simplewallet.cpp" line="1176"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2348"/> - <source>Is this okay? (Y/Yes/N/No): </source> + <source>Failed to export multisig transaction to file </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1212"/> - <source>Daemon is local, assuming trusted</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1180"/> + <source>Saved exported multisig transaction file(s): </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1553"/> - <source>Password for new watch-only wallet</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1252"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1258"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1272"/> + <source>ring size must be an integer >= </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1277"/> + <source>could not change default ring size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1518"/> + <source>Invalid height</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1564"/> + <source>start_mining [<number_of_threads>] [bg_mining] [ignore_battery]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1565"/> + <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="1568"/> + <source>Stop mining in the daemon.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1571"/> + <source>set_daemon <host>[:<port>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1572"/> + <source>Set another daemon to connect to.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1575"/> + <source>Save the current blockchain data.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1578"/> + <source>Synchronize the transactions and balance.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1581"/> + <source>balance [detail]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1582"/> + <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="1585"/> + <source>incoming_transfers [available|unavailable] [verbose] [index=<N1>[,<N2>[,...]]]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1586"/> + <source>Show the incoming transfers, all or filtered by availability and address index.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1589"/> + <source>payments <PID_1> [<PID_2> ... <PID_N>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1590"/> + <source>Show the payments for the given payment IDs.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1593"/> + <source>Show the blockchain height.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1596"/> + <source>transfer_original [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> <amount> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1597"/> + <source>Transfer <amount> to <address> using an older transaction building algorithm. 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 <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="1599"/> + <source>transfer [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> <amount> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1600"/> + <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 <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="1603"/> + <source>locked_transfer [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <addr> <amount> <lockblocks> [<payment_id>]</source> <translation type="unfinished"></translation> </message> <message> <location filename="../src/simplewallet/simplewallet.cpp" line="1604"/> - <source>invalid arguments. Please use start_mining [<number_of_threads>] [do_bg_mining] [ignore_battery], <number_of_threads> should be from 1 to </source> + <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 <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="1755"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2457"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2634"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2895"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3205"/> - <source>internal error: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1607"/> + <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="1760"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2000"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2462"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2639"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2900"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3210"/> - <source>unexpected error: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1609"/> + <source>sweep_all [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1610"/> + <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.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1613"/> + <source>sweep_below <amount_threshold> [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1614"/> + <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="1617"/> + <source>sweep_single [<priority>] [<ring_size>] <key_image> <address> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1618"/> + <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="1621"/> + <source>donate [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <amount> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1622"/> + <source>Donate <amount> to the development team (donate.getmonero.org).</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1625"/> + <source>sign_transfer <file></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1626"/> + <source>Sign a transaction from a <file>.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1629"/> + <source>Submit a signed transaction from a file.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1632"/> + <source>set_log <level>|{+,-,}<categories></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1633"/> + <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="1636"/> + <source>account + account new <label text with white spaces allowed> + account switch <index> + account label <index> <label text with white spaces allowed> + account tag <tag_name> <account_index_1> [<account_index_2> ...] + account untag <account_index_1> [<account_index_2> ...] + account tag_description <tag_name> <description></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1643"/> + <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>. +If the "label" argument is specified, the wallet sets the label of the account specified by <index> to the provided label text. +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> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1652"/> + <source>address [ new <label text with white spaces allowed> | all | <index_min> [<index_max>] | label <index> <label text with white spaces allowed>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1653"/> + <source>If no arguments are specified or <index> is specified, the wallet shows the default or specified address. If "all" is specified, the walllet 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="1656"/> + <source>integrated_address [<payment_id> | <address>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1657"/> + <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="1660"/> + <source>address_book [(add ((<address> [pid <id>])|<integrated address>) [<description possibly with whitespaces>])|(delete <index>)]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1661"/> + <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="1664"/> + <source>Save the wallet data.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1667"/> + <source>Save a watch-only keys file.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1670"/> + <source>Display the private view key.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1673"/> + <source>Display the private spend key.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1676"/> + <source>Display the Electrum-style mnemonic seed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1679"/> + <source>set <option> [<value>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1680"/> + <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 (default and minimum is 5). + 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 too default/unimportant/normal/elevated/priority. + confirm-missing-payment-id <1|0> + ask-password <1|0> + 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.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1717"/> + <source>Display the encrypted Electrum-style mnemonic seed.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1720"/> + <source>Rescan the blockchain for spent outputs.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1723"/> + <source>get_tx_key <txid></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1724"/> + <source>Get the transaction key (r) for a given <txid>.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1727"/> + <source>check_tx_key <txid> <txkey> <address></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1728"/> + <source>Check the amount going to <address> in <txid>.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1731"/> + <source>get_tx_proof <txid> <address> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1732"/> + <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="1735"/> + <source>check_tx_proof <txid> <address> <signature_file> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1736"/> + <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="1739"/> + <source>get_spend_proof <txid> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1740"/> + <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="1743"/> + <source>check_spend_proof <txid> <signature_file> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1744"/> + <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="1747"/> + <source>get_reserve_proof (all|<amount>) [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1748"/> + <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="1753"/> + <source>check_reserve_proof <address> <signature_file> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1754"/> + <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="1757"/> + <source>show_transfers [in|out|pending|failed|pool] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1758"/> + <source>Show the incoming/outgoing transfers within an optional height range.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1761"/> + <source>unspent_outputs [index=<N1>[,<N2>,...]] [<min_amount> [<max_amount>]]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1762"/> + <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="1765"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2005"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2467"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2644"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2905"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3215"/> - <source>unknown error</source> + <source>Rescan the blockchain from scratch.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1770"/> - <source>refresh failed: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1768"/> + <source>set_tx_note <txid> [free text note]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1770"/> - <source>Blocks received: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1769"/> + <source>Set an arbitrary string note for a <txid>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1795"/> - <source>unlocked balance: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1772"/> + <source>get_tx_note <txid></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="808"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/> - <source>amount</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1773"/> + <source>Get a string note for a txid.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> - <source>spent</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1776"/> + <source>set_description [free text note]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> - <source>global index</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1777"/> + <source>Set an arbitrary description for the wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> - <source>tx id</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1780"/> + <source>Get the description of the wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1868"/> - <source>No incoming transfers</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1783"/> + <source>Show the wallet's status.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1872"/> - <source>No incoming available transfers</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1786"/> + <source>Show the wallet's information.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1876"/> - <source>No incoming unavailable transfers</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1789"/> + <source>sign <file></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1887"/> - <source>expected at least one payment ID</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1790"/> + <source>Sign the contents of a file.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/> - <source>payment</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1793"/> + <source>verify <filename> <address> <signature></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/> - <source>transaction</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1794"/> + <source>Verify a signature on the contents of a file.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/> - <source>height</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1797"/> + <source>export_key_images <file></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/> - <source>unlock time</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1798"/> + <source>Export a signed set of key images to a <file>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1908"/> - <source>No payments with id </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1801"/> + <source>import_key_images <file></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1960"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2026"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2280"/> - <source>failed to get blockchain height: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1802"/> + <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="2016"/> - <source>failed to connect to the daemon</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1805"/> + <source>export_outputs <file></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2034"/> - <source> -Transaction %llu/%llu: txid=%s</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1806"/> + <source>Export a set of outputs owned by this wallet.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2044"/> - <source> -Input %llu/%llu: amount=%s</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1809"/> + <source>import_outputs <file></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2060"/> - <source>failed to get output: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="1810"/> + <source>Import a set of outputs owned by this wallet.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1813"/> + <source>show_transfer <txid></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1814"/> + <source>Show information about a transfer to/from this address.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1817"/> + <source>Change the wallet's password.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1820"/> + <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="1823"/> + <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="1825"/> + <source>Export data needed to create a multisig wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1827"/> + <source>make_multisig <threshold> <string1> [<string>...]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1828"/> + <source>Turn this wallet into a multisig wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1831"/> + <source>finalize_multisig <string> [<string>...]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1832"/> + <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="1835"/> + <source>export_multisig_info <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1836"/> + <source>Export multisig info for other participants</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1839"/> + <source>import_multisig_info <filename> [<filename>...]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1840"/> + <source>Import multisig info from other participants</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1843"/> + <source>sign_multisig <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1844"/> + <source>Sign a multisig transaction from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1847"/> + <source>submit_multisig <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1848"/> + <source>Submit a signed multisig transaction from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1851"/> + <source>export_raw_multisig_tx <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1852"/> + <source>Export a signed multisig transaction to a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1855"/> + <source>help [<command>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1856"/> + <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="1917"/> + <source>integer >= </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1930"/> + <source>block height</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2012"/> + <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="2068"/> - <source>output key's originating block height shouldn't be higher than the blockchain height</source> + <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" and --generate-from-json="jsonfilename"</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2072"/> - <source> -Originating block heights: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="2084"/> + <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="2087"/> - <source> -|</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="2090"/> + <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="2087"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3915"/> - <source>| + <location filename="../src/simplewallet/simplewallet.cpp" line="2106"/> + <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="2133"/> + <source>Multisig seed failed verification</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2149"/> + <source>Enter seed encryption passphrase, empty if none</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2185"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2259"/> + <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="2337"/> + <source>Error: expected M/N, but got: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2342"/> + <source>Error: expected N > 1 and N <= M, but got: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2347"/> + <source>Error: M/N is currently unsupported. </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2350"/> + <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="2379"/> + <source>failed to parse secret view key</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2388"/> + <source>failed to verify secret view key</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2408"/> + <source>Secret spend key (%u of %u):</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2432"/> + <source>Error: M/N is currently unsupported</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2550"/> + <source>Restore height </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2551"/> + <source>Still apply restore height? (Y/Yes/N/No): </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2582"/> + <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="2636"/> + <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="2768"/> + <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. +Use "help <command>" to see a command's documentation. +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> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2104"/> - <source> -Warning: Some input keys being spent are from </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="2850"/> + <source>failed to generate new mutlisig wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2106"/> - <source>, which can break the anonymity of ring signature. Make sure this is intentional!</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="2853"/> + <source>Generated new %u/%u multisig wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2152"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2937"/> - <source>wrong number of arguments</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="2889"/> + <source>Opened %u/%u multisig wallet%s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2257"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2744"/> - <source>No payment id is included with this transaction. Is this okay? (Y/Yes/N/No): </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="2942"/> + <source>Use "help <command>" to see a command's documentation. +</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2298"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2762"/> - <source>No outputs found, or daemon is not ready</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3000"/> + <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="2399"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2576"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2837"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3150"/> - <source>failed to get random outputs to mix: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3105"/> + <source>missing daemon URL argument</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2518"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2779"/> - <source>Sweeping %s in %llu transactions for a total fee of %s. Is this okay? (Y/Yes/N/No): </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3116"/> + <source>Unexpected array length - Exited simple_wallet::set_daemon()</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2524"/> - <source>Sweeping %s for a total fee of %s. Is this okay? (Y/Yes/N/No): </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3130"/> + <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="2969"/> - <source>Donating </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3184"/> + <source>txid </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3053"/> - <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min mixin %lu. %sIs this okay? (Y/Yes/N/No): </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3168"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3186"/> + <source>idx </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3077"/> - <source>This is a watch only wallet</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3299"/> + <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="4443"/> - <source>usage: show_transfer <txid></source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3300"/> + <source>Currently selected account: [</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4557"/> - <source>Transaction ID not found</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3300"/> + <source>] </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="237"/> - <source>true</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3302"/> + <source>Tag: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="266"/> - <source>failed to parse refresh type</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3302"/> + <source>(No tag assigned)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="330"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="362"/> - <source>wallet is watch-only and has no seed</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3309"/> + <source>Balance per address:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="353"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="367"/> - <source>wallet is non-deterministic and has no seed</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <source>Address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="450"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="467"/> - <source>wallet is watch-only and cannot transfer</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5921"/> + <source>Balance</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="474"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="480"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="496"/> - <source>mixin must be an integer >= 2</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5921"/> + <source>Unlocked balance</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="501"/> - <source>could not change default mixin</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <source>Outputs</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="545"/> - <source>could not change default priority</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5921"/> + <source>Label</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="700"/> - <source>Synchronize transactions and balance</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3318"/> + <source>%8u %6s %21s %21s %7u %21s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="702"/> - <source>incoming_transfers [available|unavailable] - Show incoming transfers, all or filtered by availability</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3327"/> + <source>usage: balance [detail]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="703"/> - <source>payments <PID_1> [<PID_2> ... <PID_N>] - Show payments for given payment ID[s]</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3339"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3381"/> + <source>usage: incoming_transfers [available|unavailable] [verbose] [index=<N>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="706"/> - <source>transfer [<priority>] [<mixin_count>] <address> <amount> [<payment_id>] - Transfer <amount> to <address>. <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. <mixin_count> is the number of extra inputs to include for untraceability. Multiple payments can be made at once by adding <address_2> <amount_2> etcetera (before the payment ID, if it's included)</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> + <source>spent</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="707"/> - <source>locked_transfer [<mixin_count>] <addr> <amount> <lockblocks>(Number of blocks to lock the transaction for, max 1000000) [<payment_id>]</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> + <source>global index</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="708"/> - <source>Send all unmixable outputs to yourself with mixin 0</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> + <source>tx id</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="712"/> - <source>Sign a transaction from a file</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> + <source>addr index</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="713"/> - <source>Submit a signed transaction from a file</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3423"/> + <source>No incoming transfers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="716"/> - <source>integrated_address [PID] - Encode a payment ID into an integrated address for the current wallet public address (no argument uses a random payment ID), or decode an integrated address to standard address and payment ID</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3427"/> + <source>No incoming available transfers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="718"/> - <source>Save wallet data</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3431"/> + <source>No incoming unavailable transfers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="719"/> - <source>Save a watch-only keys file</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3442"/> + <source>expected at least one payment ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="720"/> - <source>Display private view key</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> + <source>payment</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="721"/> - <source>Display private spend key</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> + <source>transaction</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="722"/> - <source>Display Electrum-style mnemonic seed</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> + <source>height</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="723"/> - <source>Available options: seed language - set wallet seed language; always-confirm-transfers <1|0> - whether to confirm unsplit txes; print-ring-members <1|0> - whether to print detailed information about ring members during confirmation; store-tx-info <1|0> - whether to store outgoing tx info (destination address, payment ID, tx secret key) for future reference; default-mixin <n> - set default mixin (default is 4); auto-refresh <1|0> - whether to automatically sync new blocks from the daemon; refresh-type <full|optimize-coinbase|no-coinbase|default> - set wallet refresh behaviour; priority [0|1|2|3|4] - default/unimportant/normal/elevated/priority fee; confirm-missing-payment-id <1|0>; ask-password <1|0>; unit <monero|millinero|micronero|nanonero|piconero> - set default monero (sub-)unit; min-outputs-count [n] - try to keep at least that many outputs of value at least min-outputs-value; min-outputs-value [n] - try to keep at least min-outputs-count outputs of at least that value; merge-destinations <1|0> - whether to merge multiple payments to the same destination address</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> + <source>unlock time</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="724"/> - <source>Rescan blockchain for spent outputs</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3463"/> + <source>No payments with id </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="725"/> - <source>Get transaction key (r) for a given <txid></source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3516"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3582"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3853"/> + <source>failed to get blockchain height: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="726"/> - <source>Check amount going to <address> in <txid></source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3572"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5136"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5174"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5226"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5259"/> + <source>failed to connect to the daemon</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="727"/> - <source>Generate a signature to prove payment to <address> in <txid> using the transaction secret key (r) without revealing it</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3590"/> + <source> +Transaction %llu/%llu: txid=%s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="728"/> - <source>Check tx proof for payment going to <address> in <txid></source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3600"/> + <source> +Input %llu/%llu: amount=%s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="730"/> - <source>unspent_outputs [<min_amount> <max_amount>] - Show unspent outputs within an optional amount range</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3616"/> + <source>failed to get output: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="731"/> - <source>Rescan blockchain from scratch</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3624"/> + <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="732"/> - <source>Set an arbitrary string note for a txid</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3628"/> + <source> +Originating block heights: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="733"/> - <source>Get a string note for a txid</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3643"/> + <source> +|</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="734"/> - <source>Show wallet status information</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3643"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5651"/> + <source>| +</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="735"/> - <source>Sign the contents of a file</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3660"/> + <source> +Warning: Some input keys being spent are from </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="736"/> - <source>Verify a signature on the contents of a file</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3662"/> + <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="737"/> - <source>Export a signed set of key images</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3705"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4184"/> + <source>Ring size must not be 0</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="738"/> - <source>Import signed key images list and verify their spent status</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3717"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4196"/> + <source>ring size %u is too small, minimum is %u</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="739"/> - <source>Export a set of outputs owned by this wallet</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3724"/> + <source>wrong number of arguments</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="740"/> - <source>Import set of outputs owned by this wallet</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="3830"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4266"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4479"/> + <source>No payment id is included with this transaction. Is this okay? (Y/Yes/N/No): </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3872"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4286"/> + <source>No outputs found, or daemon is not ready</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6743"/> + <source>Transaction successfully saved to </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6743"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6745"/> + <source>, txid </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6745"/> + <source>Failed to save transaction to </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4081"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4314"/> + <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="4087"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4320"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4519"/> + <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="4630"/> + <source>Donating </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4792"/> + <source>This is a watch only wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6571"/> + <source>usage: show_transfer <txid></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6673"/> + <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="6708"/> + <source>Transaction ID not found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="214"/> + <source>true</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="267"/> + <source>failed to parse refresh type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="541"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="608"/> + <source>wallet is watch-only and has no seed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="802"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="557"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="613"/> + <source>wallet is non-deterministic and has no seed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1226"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1245"/> + <source>wallet is watch-only and cannot transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1321"/> + <source>could not change default priority</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1919"/> <source>full (slowest, no assumptions); optimize-coinbase (fast, assumes the whole coinbase is paid to a single address); no-coinbase (fastest, assumes we receive no coinbase transaction), default (same as optimize-coinbase)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="806"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1923"/> <source>monero, millinero, micronero, nanonero, piconero</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="851"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1975"/> <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="868"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1992"/> <source>Wallet and key files found, loading...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="874"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1998"/> <source>Key file found but not wallet file. Regenerating...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="880"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2004"/> <source>Key file not found. Failed to open wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2023"/> <source>Generating new wallet...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="937"/> - <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-json="jsonfilename" and --generate-from-keys="wallet_name"</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="953"/> - <source>can't specify both --restore-deterministic-wallet and --non-deterministic</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="982"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2141"/> <source>Electrum-style word list failed verification</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="994"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1011"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1046"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1063"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1079"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2174"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2194"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2229"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2248"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2268"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2284"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2332"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2357"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2373"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2413"/> <source>No data supplied, cancelled</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1002"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1054"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2220"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2718"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3276"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3378"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3530"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4048"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4239"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2180"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2254"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2363"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3791"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4240"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4454"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4926"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4994"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5058"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5266"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6106"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6353"/> <source>failed to parse address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1017"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1085"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2200"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2290"/> <source>failed to parse view key secret key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1027"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1103"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2210"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2308"/> <source>failed to verify view key secret key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1031"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1107"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2214"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2312"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2393"/> <source>view key does not match standard address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1036"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1111"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1128"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2219"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2238"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2316"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2450"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2480"/> <source>account creation failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1069"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2274"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2418"/> <source>failed to parse spend key secret key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1095"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2300"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2439"/> <source>failed to verify spend key secret key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2304"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2444"/> <source>spend key does not match standard address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1199"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2562"/> <source>failed to open account</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1203"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1579"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1626"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1647"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3348"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2566"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3030"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3085"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3142"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4962"/> <source>wallet is null</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1262"/> - <source>Daemon either is not started or wrong port was passed. Please make sure daemon is running or restart the wallet with the correct daemon address.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1306"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1311"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2680"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2685"/> <source>invalid language choice entered. Please try again. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1370"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2753"/> <source>View key: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1385"/> - <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. -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> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1492"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2935"/> <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="1518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2963"/> <source>failed to deinitialize wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1570"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1968"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3021"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3524"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6410"/> <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="1657"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3152"/> <source>blockchain can't be saved: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1736"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1982"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2386"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2563"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2824"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3239"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3538"/> <source>daemon is busy. Please try again later.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1740"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1986"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2390"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2567"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2828"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3243"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3542"/> <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="1750"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3253"/> <source>refresh error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1794"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3303"/> <source>Balance: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1845"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3399"/> <source>pubkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1845"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3399"/> <source>key image</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1856"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3410"/> <source>unlocked</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> <source>ringct</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1855"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3409"/> <source>T</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1855"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3409"/> <source>F</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1856"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3410"/> <source>locked</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1857"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3411"/> <source>RingCT</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1857"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3411"/> <source>-</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1929"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3485"/> <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="1990"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3546"/> <source>failed to get spent status</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3661"/> <source>the same transaction</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3661"/> <source>blocks that are temporally very close</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2206"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3778"/> <source>Locked blocks too high, max 1000000 (˜4 yrs)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3258"/> - <source>usage: get_tx_proof <txid> <dest_address> [<tx_key>]</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5077"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5188"/> + <source>Good signature</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3289"/> - <source>failed to parse tx_key</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5104"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5190"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5293"/> + <source>Bad signature</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3298"/> - <source>Tx secret key was found for the given txid, but you've also provided another tx secret key which doesn't match the found one.</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6046"/> + <source>usage: integrated_address [payment ID]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3306"/> - <source>Tx secret key wasn't found in the wallet file. Provide it as the optional third parameter if you have it elsewhere.</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6082"/> + <source>Standard address: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3330"/> - <source>Signature: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6087"/> + <source>failed to parse payment ID or address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3508"/> - <source>usage: check_tx_proof <txid> <address> <signature></source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6098"/> + <source>usage: address_book [(add (<address> [pid <long or short payment id>])|<integrated address> [<description possibly with whitespaces>])|(delete <index>)]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3539"/> - <source>Signature header check error</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6128"/> + <source>failed to parse payment ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3550"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3555"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3560"/> - <source>Signature decoding error</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6146"/> + <source>failed to parse index</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3602"/> - <source>Tx pubkey was not found</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6154"/> + <source>Address book is empty.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3609"/> - <source>Good signature</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6160"/> + <source>Index: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3613"/> - <source>Bad signature</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6161"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6287"/> + <source>Address: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3621"/> - <source>failed to generate key derivation</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6162"/> + <source>Payment ID: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3994"/> - <source>usage: integrated_address [payment ID]</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6163"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6286"/> + <source>Description: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4017"/> - <source>Integrated address: account %s, payment ID %s</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6173"/> + <source>usage: set_tx_note [txid] free text note</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4022"/> - <source>Standard address: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6201"/> + <source>usage: get_tx_note [txid]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4027"/> - <source>failed to parse payment ID or address</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6304"/> + <source>usage: sign <filename></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4038"/> - <source>usage: address_book [(add (<address> [pid <long or short payment id>])|<integrated address> [<description possibly with whitespaces>])|(delete <index>)]</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6309"/> + <source>wallet is watch-only and cannot sign</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4070"/> - <source>failed to parse payment ID</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="951"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6323"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6346"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6501"/> + <source>failed to read file </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4088"/> - <source>failed to parse index</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5039"/> + <source>usage: check_tx_proof <txid> <address> <signature_file> [<message>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4096"/> - <source>Address book is empty.</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5066"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5278"/> + <source>failed to load signature file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4102"/> - <source>Index: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5117"/> + <source>usage: get_spend_proof <txid> [<message>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4103"/> - <source>Address: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5123"/> + <source>wallet is watch-only and cannot generate the proof</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4104"/> - <source>Payment ID: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5161"/> + <source>usage: check_spend_proof <txid> <signature_file> [<message>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4105"/> - <source>Description: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5202"/> + <source>usage: get_reserve_proof (all|<amount>) [<message>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4115"/> - <source>usage: set_tx_note [txid] free text note</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5208"/> + <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="4143"/> - <source>usage: get_tx_note [txid]</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5253"/> + <source>usage: check_reserve_proof <address> <signature_file> [<message>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4193"/> - <source>usage: sign <filename></source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5271"/> + <source>Address must not be a subaddress</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4198"/> - <source>wallet is watch-only and cannot sign</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5289"/> + <source>Good signature -- total: %s, spent: %s, unspent: %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4207"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4230"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4374"/> - <source>failed to read file </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5353"/> + <source>usage: show_transfers [in|out|all|pending|failed] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4219"/> - <source>usage: verify <filename> <address> <signature></source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5490"/> + <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="4246"/> - <source>Bad signature from </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5526"/> + <source>usage: unspent_outputs [index=<N1>[,<N2>,...]] [<min_amount> [<max_amount>]]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4250"/> - <source>Good signature from </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5586"/> + <source>There is no unspent output in the specified address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4259"/> - <source>usage: export_key_images <filename></source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5699"/> + <source> (no daemon)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4264"/> - <source>wallet is watch-only and cannot export key images</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5701"/> + <source> (out of sync)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4274"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4346"/> - <source>failed to save file </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5758"/> + <source>(Untitled account)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4285"/> - <source>Signed key images exported to </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5771"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5789"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5814"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5837"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5990"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6013"/> + <source>failed to parse index: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4293"/> - <source>usage: import_key_images <filename></source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5776"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5995"/> + <source>specify an index between 0 and </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4323"/> - <source>usage: export_outputs <filename></source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5873"/> + <source>usage: + account + account new <label text with white spaces allowed> + account switch <index> + account label <index> <label text with white spaces allowed> + account tag <tag_name> <account_index_1> [<account_index_2> ...] + account untag <account_index_1> [<account_index_2> ...] + account tag_description <tag_name> <description></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4357"/> - <source>Outputs exported to </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5901"/> + <source> +Grand total: + Balance: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4365"/> - <source>usage: import_outputs <filename></source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5901"/> + <source>, unlocked balance: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2246"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3818"/> - <source>amount is wrong: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5909"/> + <source>Untagged accounts:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2247"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3819"/> - <source>expected number from 0 to </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5915"/> + <source>Tag %s is unregistered.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2378"/> - <source>Money successfully sent, transaction </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5918"/> + <source>Accounts with tag: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3141"/> - <source>no connection to daemon. Please, make sure daemon is running.</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5919"/> + <source>Tag's description: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2420"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2597"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2858"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3171"/> - <source>not enough outputs for specified mixin_count</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5921"/> + <source>Account</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2423"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2600"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2861"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3174"/> - <source>output amount</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5927"/> + <source> %c%8u %6s %21s %21s %21s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2423"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2600"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2861"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3174"/> - <source>found outputs to mix</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5937"/> + <source>----------------------------------------------------------------------------------</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2428"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2605"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2866"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3179"/> - <source>transaction was not constructed</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5938"/> + <source>%15s %21s %21s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2432"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2609"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2870"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3183"/> - <source>transaction %s was rejected by daemon with status: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5961"/> + <source>Primary address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2443"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2620"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2881"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3191"/> - <source>one of destinations is zero</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5961"/> + <source>(used)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3195"/> - <source>Failed to find a suitable way to split transactions</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="5982"/> + <source>(Untitled address)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2452"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2629"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2890"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3200"/> - <source>unknown transfer error: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6022"/> + <source><index_min> is already out of bound</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2516"/> - <source>Sweeping </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6027"/> + <source><index_max> exceeds the bound</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6035"/> + <source>usage: address [ new <label text with white spaces allowed> | all | <index_min> [<index_max>] | label <index> <label text with white spaces allowed> ]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6053"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6065"/> + <source>Integrated addresses can only be created for account 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6077"/> + <source>Integrated address: %s, payment ID: %s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6082"/> + <source>Subaddress: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6242"/> + <source>usage: get_description</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6248"/> + <source>no description found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6250"/> + <source>description found: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6285"/> + <source>Filename: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6290"/> + <source>Watch only</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6292"/> + <source>%u/%u multisig%s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6294"/> + <source>Normal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6295"/> + <source>Type: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6296"/> + <source>Testnet: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6296"/> + <source>Yes</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6296"/> + <source>No</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6314"/> + <source>This wallet is multisig and cannot sign</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6335"/> + <source>usage: verify <filename> <address> <signature></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6360"/> + <source>Bad signature from </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6364"/> + <source>Good signature from </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2785"/> - <source>Sweeping %s for a total fee of %s. Is this okay? (Y/Yes/N/No)</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6373"/> + <source>usage: export_key_images <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6378"/> + <source>wallet is watch-only and cannot export key images</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="906"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6391"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6473"/> + <source>failed to save file </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6402"/> + <source>Signed key images exported to </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6416"/> + <source>usage: import_key_images <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6447"/> + <source>usage: export_outputs <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6484"/> + <source>Outputs exported to </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6492"/> + <source>usage: import_outputs <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3819"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5219"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5545"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5553"/> + <source>amount is wrong: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3820"/> + <source>expected number from 0 to </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2555"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2816"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3129"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4079"/> + <source>Sweeping </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4559"/> <source>Money successfully sent, transaction: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3022"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4716"/> <source>Change goes to more than one address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3047"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4757"/> <source>%s change to %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3050"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4760"/> <source>no change</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1044"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1057"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4826"/> <source>Transaction successfully signed to file </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3226"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4876"/> <source>usage: get_tx_key <txid></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3234"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3266"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3354"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3519"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4122"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4150"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4450"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4884"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4919"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4968"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5050"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5168"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6180"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6208"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6578"/> <source>failed to parse txid</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3245"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4898"/> <source>Tx key: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3250"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4903"/> <source>no tx keys found for this txid</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3339"/> - <source>usage: check_tx_key <txid> <txkey> <address></source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3361"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3368"/> - <source>failed to parse tx key</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3573"/> - <source>failed to get transaction from daemon</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4912"/> + <source>usage: get_tx_proof <txid> <address> [<message>]</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3411"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3584"/> - <source>failed to parse transaction from daemon</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4937"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5147"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5239"/> + <source>signature file saved to: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3418"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3591"/> - <source>failed to validate transaction from daemon</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4939"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5149"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5241"/> + <source>failed to save signature file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3423"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3596"/> - <source>failed to get the right transaction from daemon</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4953"/> + <source>usage: check_tx_key <txid> <txkey> <address></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3385"/> - <source>failed to generate key derivation from supplied parameters</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="4976"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4985"/> + <source>failed to parse tx key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3471"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4943"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5031"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5109"/> <source>error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3477"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5007"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5080"/> <source>received</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3477"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5007"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5080"/> <source>in txid</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3481"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5026"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5099"/> <source>received nothing in txid</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3485"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5010"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5083"/> <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="3494"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5016"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5089"/> <source>This transaction has %u confirmations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3498"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5020"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5093"/> <source>WARNING: failed to determine number of confirmations!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3661"/> - <source>usage: show_transfers [in|out|all|pending|failed] [<min_height> [<max_height>]]</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3700"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5401"/> <source>bad min_height parameter:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3712"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5413"/> <source>bad max_height parameter:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3760"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5473"/> <source>in</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3760"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3798"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5473"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5514"/> <source>out</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3798"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5514"/> <source>failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3798"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5514"/> <source>pending</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3809"/> - <source>usage: unspent_outputs [<min_amount> <max_amount>]</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3824"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5560"/> <source><min_amount> should be smaller than <max_amount></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3856"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5592"/> <source> Amount: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3856"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5592"/> <source>, number of keys: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3861"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5597"/> <source> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3866"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5602"/> <source> Min block height: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3867"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5603"/> <source> Max block height: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3868"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5604"/> <source> Min amount found: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3869"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5605"/> <source> Max amount found: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3870"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5606"/> <source> Total count: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3910"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5646"/> <source> Bin size: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3911"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5647"/> <source> Outputs per *: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3913"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5649"/> <source>count ^ </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3915"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5651"/> <source> |</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3917"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5653"/> <source> +</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3917"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5653"/> <source>+--> block height </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3918"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5654"/> <source> ^</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3918"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5654"/> <source>^ </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3919"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5655"/> <source> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3969"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5696"/> <source>wallet</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="420"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4000"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="666"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6057"/> <source>Random payment ID: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4001"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6058"/> <source>Matching integrated address: </source> <translation type="unfinished"></translation> </message> </context> <context> + <name>genms</name> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="70"/> + <source>Base filename (-1, -2, etc suffixes will be appended as needed)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="71"/> + <source>Give threshold and participants at once as M/N</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="72"/> + <source>How many participants wil share parts of the multisig wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="73"/> + <source>How many signers are required to sign a valid transaction</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="74"/> + <source>Create testnet multisig wallets</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="81"/> + <source>Generating %u %u/%u multisig wallets</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="138"/> + <source>Error verifying multisig extra info</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="146"/> + <source>Error finalizing multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="153"/> + <source>Generated multisig wallets for address </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="157"/> + <source>Error creating multisig wallets: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="176"/> + <source>This program generates a set of multisig wallets - use this simpler scheme only if all the participants trust each other</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="194"/> + <source>Error: expected N/M, but got: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="202"/> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="211"/> + <source>Error: either --scheme or both of --threshold and --participants may be given</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="218"/> + <source>Error: expected N > 1 and N <= M, but got N==%u and M==%d</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="227"/> + <source>Error: --filename-base is required</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="233"/> + <source>Error: unsupported scheme: only N/N and N-1/N are supported</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>sw</name> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="116"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="115"/> <source>Generate new wallet and save it to <arg></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="117"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="116"/> <source>Generate incoming-only wallet from view key</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="117"/> + <source>Generate deterministic wallet from spend key</source> + <translation type="unfinished"></translation> + </message> + <message> <location filename="../src/simplewallet/simplewallet.cpp" line="118"/> <source>Generate wallet from private keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="120"/> - <source>Specify Electrum seed for wallet recovery/creation</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="119"/> + <source>Generate a master wallet from multisig wallet keys</source> <translation type="unfinished"></translation> </message> <message> <location filename="../src/simplewallet/simplewallet.cpp" line="121"/> - <source>Recover wallet using Electrum-style mnemonic seed</source> + <source>Language for mnemonic</source> <translation type="unfinished"></translation> </message> <message> <location filename="../src/simplewallet/simplewallet.cpp" line="122"/> - <source>Generate non-deterministic view and spend keys</source> + <source>Specify Electrum seed for wallet recovery/creation</source> <translation type="unfinished"></translation> </message> <message> <location filename="../src/simplewallet/simplewallet.cpp" line="123"/> - <source>Enable commands which rely on a trusted daemon</source> + <source>Recover wallet using Electrum-style mnemonic seed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../src/simplewallet/simplewallet.cpp" line="124"/> - <source>Allow communicating with a daemon that uses a different RPC version</source> + <source>Recover multisig wallet using Electrum-style mnemonic seed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../src/simplewallet/simplewallet.cpp" line="125"/> - <source>Restore from specific blockchain height</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="136"/> - <source>daemon is busy. Please try again later.</source> + <source>Generate non-deterministic view and spend keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="145"/> - <source>possibly lost connection to daemon</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="126"/> + <source>Enable commands which rely on a trusted daemon</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="226"/> - <source>Error: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="127"/> + <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="4614"/> - <source>Failed to initialize wallet</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="128"/> + <source>Restore from specific blockchain height</source> <translation type="unfinished"></translation> </message> -</context> -<context> - <name>tools::dns_utils</name> <message> - <location filename="../src/common/dns_utils.cpp" line="430"/> - <source>DNSSEC validation passed</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="129"/> + <source>The newly created transaction will not be relayed to the monero network</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/common/dns_utils.cpp" line="434"/> - <source>WARNING: DNSSEC validation was unsuccessful, this address may not be correct!</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="171"/> + <source>daemon is busy. Please try again later.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/common/dns_utils.cpp" line="437"/> - <source>For URL: </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="180"/> + <source>possibly lost connection to daemon</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/common/dns_utils.cpp" line="439"/> - <source> Monero Address = </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="197"/> + <source>Error: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/common/dns_utils.cpp" line="441"/> - <source>Is this OK? (Y/n) </source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6787"/> + <source>This is the command line monero wallet. It needs to connect to a monero +daemon to work correctly.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/common/dns_utils.cpp" line="451"/> - <source>you have cancelled the transfer request</source> + <location filename="../src/simplewallet/simplewallet.cpp" line="6801"/> + <source>Failed to initialize wallet</source> <translation type="unfinished"></translation> </message> </context> <context> <name>tools::wallet2</name> <message> - <location filename="../src/wallet/wallet2.cpp" line="106"/> + <location filename="../src/wallet/wallet2.cpp" line="113"/> <source>Use daemon instance at <host>:<port></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="107"/> + <location filename="../src/wallet/wallet2.cpp" line="114"/> <source>Use daemon instance at host <arg> instead of localhost</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="460"/> - <source>Wallet password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/wallet/wallet2.cpp" line="109"/> + <location filename="../src/wallet/wallet2.cpp" line="116"/> <source>Wallet password file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="110"/> + <location filename="../src/wallet/wallet2.cpp" line="117"/> <source>Use daemon instance at port <arg> instead of 18081</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="112"/> + <location filename="../src/wallet/wallet2.cpp" line="119"/> <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="113"/> + <location filename="../src/wallet/wallet2.cpp" line="120"/> <source>Restricts to view-only commands</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="152"/> + <location filename="../src/wallet/wallet2.cpp" line="168"/> <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="188"/> + <location filename="../src/wallet/wallet2.cpp" line="204"/> <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="204"/> + <location filename="../src/wallet/wallet2.cpp" line="217"/> <source>the password file specified could not be read</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="460"/> - <source>Enter new password for the wallet</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/wallet/wallet2.cpp" line="464"/> - <source>failed to read wallet password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/wallet/wallet2.cpp" line="227"/> + <location filename="../src/wallet/wallet2.cpp" line="240"/> <source>Failed to load file </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="108"/> + <location filename="../src/wallet/wallet2.cpp" line="115"/> <source>Wallet password (escape/quote as needed)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="111"/> + <location filename="../src/wallet/wallet2.cpp" line="118"/> <source>Specify username[:password] for daemon RPC client</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="233"/> + <location filename="../src/wallet/wallet2.cpp" line="224"/> + <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="246"/> <source>Failed to parse JSON</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="240"/> + <location filename="../src/wallet/wallet2.cpp" line="253"/> <source>Version %u too new, we can only grok up to %u</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="258"/> + <location filename="../src/wallet/wallet2.cpp" line="269"/> <source>failed to parse view key secret key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="264"/> - <location filename="../src/wallet/wallet2.cpp" line="331"/> - <location filename="../src/wallet/wallet2.cpp" line="373"/> + <location filename="../src/wallet/wallet2.cpp" line="274"/> + <location filename="../src/wallet/wallet2.cpp" line="339"/> + <location filename="../src/wallet/wallet2.cpp" line="380"/> <source>failed to verify view key secret key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="276"/> + <location filename="../src/wallet/wallet2.cpp" line="285"/> <source>failed to parse spend key secret key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="282"/> - <location filename="../src/wallet/wallet2.cpp" line="343"/> - <location filename="../src/wallet/wallet2.cpp" line="394"/> + <location filename="../src/wallet/wallet2.cpp" line="290"/> + <location filename="../src/wallet/wallet2.cpp" line="349"/> + <location filename="../src/wallet/wallet2.cpp" line="405"/> <source>failed to verify spend key secret key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="295"/> + <location filename="../src/wallet/wallet2.cpp" line="302"/> <source>Electrum-style word list failed verification</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="306"/> - <source>At least one of Electrum-style word list and private view key must be specified</source> + <location filename="../src/wallet/wallet2.cpp" line="319"/> + <source>At least one of Electrum-style word list and private view key and private spend key must be specified</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="311"/> + <location filename="../src/wallet/wallet2.cpp" line="323"/> <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="324"/> + <location filename="../src/wallet/wallet2.cpp" line="333"/> <source>invalid address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="335"/> + <location filename="../src/wallet/wallet2.cpp" line="342"/> <source>view key does not match standard address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="347"/> + <location filename="../src/wallet/wallet2.cpp" line="352"/> <source>spend key does not match standard address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="356"/> + <location filename="../src/wallet/wallet2.cpp" line="360"/> <source>Cannot generate deprecated wallets from JSON</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="403"/> + <location filename="../src/wallet/wallet2.cpp" line="392"/> + <source>failed to parse address: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="398"/> + <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="413"/> <source>failed to generate new wallet: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="5205"/> + <location filename="../src/wallet/wallet2.cpp" line="2813"/> + <location filename="../src/wallet/wallet2.cpp" line="2873"/> + <location filename="../src/wallet/wallet2.cpp" line="2952"/> + <location filename="../src/wallet/wallet2.cpp" line="2998"/> + <location filename="../src/wallet/wallet2.cpp" line="3089"/> + <location filename="../src/wallet/wallet2.cpp" line="3189"/> + <location filename="../src/wallet/wallet2.cpp" line="3599"/> + <location filename="../src/wallet/wallet2.cpp" line="3955"/> + <source>Primary account</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="7914"/> + <source>No funds received in this tx.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="8607"/> <source>failed to read file </source> <translation type="unfinished"></translation> </message> @@ -2599,94 +3874,125 @@ Outputs per *: </source> <context> <name>tools::wallet_rpc_server</name> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="151"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="160"/> <source>Daemon is local, assuming trusted</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="171"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="175"/> + <source>Failed to create directory </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="177"/> + <source>Failed to create directory %s: %s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="188"/> <source>Cannot specify --</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="171"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="188"/> <source> and --</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="198"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="207"/> <source>Failed to create file </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="198"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="207"/> <source>. Check permissions or remove file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="209"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="217"/> <source>Error writing to 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="220"/> <source>RPC username/password is stored in file </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1748"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="443"/> + <source>Tag %s is unregistered.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2435"/> + <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="2870"/> + <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="2893"/> <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="1760"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2905"/> <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="1764"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2909"/> <source>Loading wallet...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1789"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1814"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2942"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2975"/> <source>Saving wallet...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1791"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1816"/> - <source>Saved ok</source> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2944"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2977"/> + <source>Successfully saved</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1794"/> - <source>Loaded ok</source> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2947"/> + <source>Successfully loaded</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1798"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2951"/> <source>Wallet initialization failed: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1805"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2958"/> <source>Failed to initialize wallet RPC server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1809"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2962"/> <source>Starting wallet RPC server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1811"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2969"/> + <source>Failed to run wallet: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2972"/> <source>Stopped wallet RPC server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1820"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2981"/> <source>Failed to save wallet: </source> <translation type="unfinished"></translation> </message> @@ -2694,58 +4000,65 @@ Outputs per *: </source> <context> <name>wallet_args</name> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1715"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4580"/> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6760"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2856"/> <source>Wallet options</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="59"/> + <location filename="../src/wallet/wallet_args.cpp" line="73"/> <source>Generate wallet from JSON format file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="63"/> + <location filename="../src/wallet/wallet_args.cpp" line="77"/> <source>Use wallet <arg></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="87"/> + <location filename="../src/wallet/wallet_args.cpp" line="104"/> <source>Max number of threads to use for a parallel job</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="88"/> + <location filename="../src/wallet/wallet_args.cpp" line="105"/> <source>Specify log file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="89"/> + <location filename="../src/wallet/wallet_args.cpp" line="106"/> <source>Config file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="98"/> + <location filename="../src/wallet/wallet_args.cpp" line="115"/> <source>General options</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="128"/> + <location filename="../src/wallet/wallet_args.cpp" line="138"/> + <source>This is the command line 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_args.cpp" line="161"/> <source>Can't find config file </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="172"/> + <location filename="../src/wallet/wallet_args.cpp" line="195"/> <source>Logging to: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="173"/> + <location filename="../src/wallet/wallet_args.cpp" line="197"/> <source>Logging to %s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="153"/> + <location filename="../src/wallet/wallet_args.cpp" line="140"/> <source>Usage:</source> <translation type="unfinished"></translation> </message> diff --git a/translations/monero_fr.ts b/translations/monero_fr.ts index c4e9a0f36..37d7d5928 100644 --- a/translations/monero_fr.ts +++ b/translations/monero_fr.ts @@ -4,24 +4,24 @@ <context> <name>Monero::AddressBookImpl</name> <message> - <location filename="../src/wallet/api/address_book.cpp" line="55"/> + <location filename="../src/wallet/api/address_book.cpp" line="53"/> <source>Invalid destination address</source> <translation>Adresse de destination invalide</translation> </message> <message> - <location filename="../src/wallet/api/address_book.cpp" line="65"/> + <location filename="../src/wallet/api/address_book.cpp" line="63"/> <source>Invalid payment ID. Short payment ID should only be used in an integrated address</source> <translation>ID de paiement invalide. L'identifiant de paiement court devrait seulement être utilisé dans une adresse intégrée</translation> </message> <message> - <location filename="../src/wallet/api/address_book.cpp" line="72"/> + <location filename="../src/wallet/api/address_book.cpp" line="70"/> <source>Invalid payment ID</source> <translation>ID de paiement invalide</translation> </message> <message> - <location filename="../src/wallet/api/address_book.cpp" line="79"/> - <source>Integrated address and long payment id can't be used at the same time</source> - <translation>Une adresse intégrée et un identifiant de paiement long ne peuvent pas être utilisés en même temps</translation> + <location filename="../src/wallet/api/address_book.cpp" line="77"/> + <source>Integrated address and long payment ID can't be used at the same time</source> + <translation type="unfinished"></translation> </message> </context> <context> @@ -37,32 +37,32 @@ <translation>Échec de l'écriture de(s) transaction(s) dans le fichier</translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="114"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="115"/> <source>daemon is busy. Please try again later.</source> <translation>le démon est occupé. Veuillez réessayer plus tard.</translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="117"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="118"/> <source>no connection to daemon. Please make sure daemon is running.</source> <translation>pas de connexion au démon. Veuillez vous assurer que le démon fonctionne.</translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="121"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="122"/> <source>transaction %s was rejected by daemon with status: </source> <translation>la transaction %s a été rejetée par le démon avec le statut : </translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="126"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="127"/> <source>. Reason: </source> <translation>. Raison : </translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="128"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="129"/> <source>Unknown exception: </source> <translation>Exception inconnue : </translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="131"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="132"/> <source>Unhandled exception</source> <translation>Exception non gérée</translation> </message> @@ -81,323 +81,324 @@ <translation>Échec de signature de transaction</translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="135"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="168"/> <source>Claimed change does not go to a paid address</source> <translation>La monnaie réclamée ne va pas à une adresse payée</translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="141"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="174"/> <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/wallet/api/unsigned_transaction.cpp" line="151"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="184"/> <source>Change goes to more than one address</source> <translation>La monnaie rendue va à plus d'une adresse</translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="164"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="197"/> <source>sending %s to %s</source> <translation>envoi de %s à %s</translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="170"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="203"/> <source>with no destinations</source> <translation>sans destination</translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="176"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="209"/> <source>%s change to %s</source> <translation>%s de monnaie rendue à %s</translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="179"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="212"/> <source>no change</source> <translation>sans monnaie rendue</translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="181"/> - <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min mixin %lu. %s</source> - <translation>%lu transactions chargées, pour %s, %s de frais, %s, %s, avec mixin minimum de %lu, %s</translation> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="214"/> + <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min ring size %lu. %s</source> + <translation type="unfinished"></translation> </message> </context> <context> <name>Monero::WalletImpl</name> <message> - <location filename="../src/wallet/api/wallet.cpp" line="942"/> + <location filename="../src/wallet/api/wallet.cpp" line="1111"/> <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="952"/> + <location filename="../src/wallet/api/wallet.cpp" line="1121"/> <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="978"/> - <location filename="../src/wallet/api/wallet.cpp" line="1072"/> + <location filename="../src/wallet/api/wallet.cpp" line="1154"/> + <location filename="../src/wallet/api/wallet.cpp" line="1258"/> <source>daemon is busy. Please try again later.</source> <translation>le démon est occupé. Veuillez réessayer plus tard.</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="981"/> - <location filename="../src/wallet/api/wallet.cpp" line="1075"/> + <location filename="../src/wallet/api/wallet.cpp" line="1157"/> + <location filename="../src/wallet/api/wallet.cpp" line="1261"/> <source>no connection to daemon. Please make sure daemon is running.</source> <translation>pas de connexion au démon. Veuillez vous assurer que le démon fonctionne.</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="984"/> - <location filename="../src/wallet/api/wallet.cpp" line="1078"/> + <location filename="../src/wallet/api/wallet.cpp" line="1160"/> + <location filename="../src/wallet/api/wallet.cpp" line="1264"/> <source>RPC error: </source> <translation>Erreur RPC : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1081"/> + <location filename="../src/wallet/api/wallet.cpp" line="1197"/> + <location filename="../src/wallet/api/wallet.cpp" line="1301"/> + <source>not enough outputs for specified ring size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="1199"/> + <location filename="../src/wallet/api/wallet.cpp" line="1303"/> + <source>found outputs to use</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="1201"/> + <source>Please sweep unmixable outputs.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="1267"/> <source>failed to get random outputs to mix</source> <translation>échec de la récupération de sorties aléatoires à mélanger</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="994"/> - <location filename="../src/wallet/api/wallet.cpp" line="1088"/> + <location filename="../src/wallet/api/wallet.cpp" line="1170"/> + <location filename="../src/wallet/api/wallet.cpp" line="1274"/> <source>not enough money to transfer, available only %s, sent amount %s</source> <translation>pas assez de fonds pour le transfert, montant disponible %s, montant envoyé %s</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="403"/> + <location filename="../src/wallet/api/wallet.cpp" line="474"/> <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="415"/> + <location filename="../src/wallet/api/wallet.cpp" line="486"/> <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="425"/> + <location filename="../src/wallet/api/wallet.cpp" line="496"/> <source>No view key supplied, cancelled</source> <translation>Pas de clé d'audit fournie, annulation</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="432"/> + <location filename="../src/wallet/api/wallet.cpp" line="503"/> <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="442"/> + <location filename="../src/wallet/api/wallet.cpp" line="513"/> <source>failed to verify secret spend key</source> <translation>échec de la vérification de la clé secrète de dépense</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="447"/> + <location filename="../src/wallet/api/wallet.cpp" line="518"/> <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="453"/> + <location filename="../src/wallet/api/wallet.cpp" line="524"/> <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="458"/> + <location filename="../src/wallet/api/wallet.cpp" line="529"/> <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="477"/> + <location filename="../src/wallet/api/wallet.cpp" line="548"/> <source>failed to generate new wallet: </source> <translation>échec de la génération du nouveau portefeuille : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="799"/> + <location filename="../src/wallet/api/wallet.cpp" line="773"/> + <source>Failed to send import wallet request</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="919"/> <source>Failed to load unsigned transactions</source> <translation>Échec du chargement des transaction non signées</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="820"/> + <location filename="../src/wallet/api/wallet.cpp" line="940"/> <source>Failed to load transaction from file</source> <translation>Échec du chargement de la transaction du fichier</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="838"/> + <location filename="../src/wallet/api/wallet.cpp" line="958"/> <source>Wallet is view only</source> <translation>Portefeuille d'audit uniquement</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="847"/> + <location filename="../src/wallet/api/wallet.cpp" line="967"/> <source>failed to save file </source> <translation>échec de l'enregistrement du fichier </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="874"/> + <location filename="../src/wallet/api/wallet.cpp" line="986"/> + <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="999"/> <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="987"/> + <location filename="../src/wallet/api/wallet.cpp" line="1032"/> + <source>Failed to get subaddress label: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="1046"/> + <source>Failed to set subaddress label: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="1163"/> <source>failed to get random outputs to mix: %s</source> <translation>échec de la récupération de sorties aléatoires à mélanger : %s</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1003"/> - <location filename="../src/wallet/api/wallet.cpp" line="1097"/> - <source>not enough money to transfer, available only %s, transaction amount %s = %s + %s (fee)</source> - <translation>pas assez de fonds pour le transfert, montant disponible %s, montant envoyé %s = %s + %s (frais)</translation> + <location filename="../src/wallet/api/wallet.cpp" line="1179"/> + <location filename="../src/wallet/api/wallet.cpp" line="1283"/> + <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="1012"/> - <location filename="../src/wallet/api/wallet.cpp" line="1106"/> - <source>not enough outputs for specified mixin_count</source> - <translation>pas assez de sorties pour le mixin spécifié</translation> + <location filename="../src/wallet/api/wallet.cpp" line="1188"/> + <location filename="../src/wallet/api/wallet.cpp" line="1292"/> + <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="1014"/> - <location filename="../src/wallet/api/wallet.cpp" line="1108"/> + <location filename="../src/wallet/api/wallet.cpp" line="1199"/> + <location filename="../src/wallet/api/wallet.cpp" line="1303"/> <source>output amount</source> <translation>montant de la sortie</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1014"/> - <location filename="../src/wallet/api/wallet.cpp" line="1108"/> - <source>found outputs to mix</source> - <translation>sorties à mélanger trouvées</translation> - </message> - <message> - <location filename="../src/wallet/api/wallet.cpp" line="1019"/> - <location filename="../src/wallet/api/wallet.cpp" line="1113"/> + <location filename="../src/wallet/api/wallet.cpp" line="1205"/> + <location filename="../src/wallet/api/wallet.cpp" line="1308"/> <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="1023"/> - <location filename="../src/wallet/api/wallet.cpp" line="1117"/> + <location filename="../src/wallet/api/wallet.cpp" line="1209"/> + <location filename="../src/wallet/api/wallet.cpp" line="1312"/> <source>transaction %s was rejected by daemon with status: </source> <translation>la transaction %s a été rejetée par le démon avec le statut : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1030"/> - <location filename="../src/wallet/api/wallet.cpp" line="1124"/> + <location filename="../src/wallet/api/wallet.cpp" line="1216"/> + <location filename="../src/wallet/api/wallet.cpp" line="1319"/> <source>one of destinations is zero</source> <translation>une des destinations est zéro</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1033"/> - <location filename="../src/wallet/api/wallet.cpp" line="1127"/> + <location filename="../src/wallet/api/wallet.cpp" line="1219"/> + <location filename="../src/wallet/api/wallet.cpp" line="1322"/> <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="1036"/> - <location filename="../src/wallet/api/wallet.cpp" line="1130"/> + <location filename="../src/wallet/api/wallet.cpp" line="1222"/> + <location filename="../src/wallet/api/wallet.cpp" line="1325"/> <source>unknown transfer error: </source> <translation>erreur de transfert inconnue : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1039"/> - <location filename="../src/wallet/api/wallet.cpp" line="1133"/> + <location filename="../src/wallet/api/wallet.cpp" line="1225"/> + <location filename="../src/wallet/api/wallet.cpp" line="1328"/> <source>internal error: </source> <translation>erreur interne : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1042"/> - <location filename="../src/wallet/api/wallet.cpp" line="1136"/> + <location filename="../src/wallet/api/wallet.cpp" line="1228"/> + <location filename="../src/wallet/api/wallet.cpp" line="1331"/> <source>unexpected error: </source> <translation>erreur inattendue : </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1045"/> - <location filename="../src/wallet/api/wallet.cpp" line="1139"/> + <location filename="../src/wallet/api/wallet.cpp" line="1231"/> + <location filename="../src/wallet/api/wallet.cpp" line="1334"/> <source>unknown error</source> <translation>erreur inconnue</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1419"/> - <source>Rescan spent can only be used with a trusted daemon</source> - <translation>Réexaminer les dépenses ne peut se faire qu'avec un démon de confiance</translation> - </message> -</context> -<context> - <name>Monero::WalletManagerImpl</name> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="192"/> - <source>failed to parse txid</source> - <translation>échec de l'analyse de l'ID de transaction</translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="199"/> - <location filename="../src/wallet/api/wallet_manager.cpp" line="206"/> - <source>failed to parse tx key</source> - <translation>échec de l'analyse de la clé de transaction</translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="217"/> - <source>failed to parse address</source> - <translation>échec de l'analyse de l'adresse</translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="227"/> - <source>failed to get transaction from daemon</source> - <translation>échec de la récupération de la transaction du démon</translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="238"/> - <source>failed to parse transaction from daemon</source> - <translation>échec de l'analyse de la transaction du démon</translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="245"/> - <source>failed to validate transaction from daemon</source> - <translation>échec de la validation de la transaction du démon</translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="250"/> - <source>failed to get the right transaction from daemon</source> - <translation>échec de la récupération de la bonne transaction du démon</translation> + <location filename="../src/wallet/api/wallet.cpp" line="1412"/> + <location filename="../src/wallet/api/wallet.cpp" line="1441"/> + <location filename="../src/wallet/api/wallet.cpp" line="1494"/> + <location filename="../src/wallet/api/wallet.cpp" line="1525"/> + <location filename="../src/wallet/api/wallet.cpp" line="1556"/> + <location filename="../src/wallet/api/wallet.cpp" line="1579"/> + <source>Failed to parse txid</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="257"/> - <source>failed to generate key derivation from supplied parameters</source> - <translation>échec de la génération de la dérivation de clé à partir des paramètres fournis</translation> + <location filename="../src/wallet/api/wallet.cpp" line="1430"/> + <source>no tx keys found for this txid</source> + <translation type="unfinished">aucune clé de transaction trouvée pour cet ID de transaction</translation> </message> <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="313"/> - <source>error: </source> - <translation>erreur : </translation> + <location filename="../src/wallet/api/wallet.cpp" line="1450"/> + <location filename="../src/wallet/api/wallet.cpp" line="1460"/> + <source>Failed to parse tx key</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="319"/> - <source>received</source> - <translation>a reçu</translation> + <location filename="../src/wallet/api/wallet.cpp" line="1470"/> + <location filename="../src/wallet/api/wallet.cpp" line="1502"/> + <location filename="../src/wallet/api/wallet.cpp" line="1533"/> + <location filename="../src/wallet/api/wallet.cpp" line="1621"/> + <source>Failed to parse address</source> + <translation type="unfinished">Échec de l'analyse de l'adresse</translation> </message> <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="319"/> - <source>in txid</source> - <translation>dans la transaction</translation> + <location filename="../src/wallet/api/wallet.cpp" line="1627"/> + <source>Address must not be a subaddress</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="323"/> - <source>received nothing in txid</source> - <translation>n'a rien reçu dans la transaction</translation> + <location filename="../src/wallet/api/wallet.cpp" line="1849"/> + <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> </context> <context> <name>Wallet</name> <message> - <location filename="../src/wallet/api/wallet.cpp" line="212"/> + <location filename="../src/wallet/api/wallet.cpp" line="246"/> <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="219"/> + <location filename="../src/wallet/api/wallet.cpp" line="253"/> <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="227"/> + <location filename="../src/wallet/api/wallet.cpp" line="261"/> <source>failed to verify key</source> <translation>Échec de la vérification de la clé</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="237"/> + <location filename="../src/wallet/api/wallet.cpp" line="271"/> <source>key does not match address</source> <translation>la clé ne correspond pas à l'adresse</translation> </message> @@ -405,1931 +406,3081 @@ <context> <name>command_line</name> <message> - <location filename="../src/common/command_line.cpp" line="76"/> + <location filename="../src/common/command_line.cpp" line="57"/> <source>yes</source> <translation>oui</translation> </message> + <message> + <location filename="../src/common/command_line.cpp" line="71"/> + <source>no</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>cryptonote::rpc_args</name> <message> - <location filename="../src/rpc/rpc_args.cpp" line="38"/> + <location filename="../src/rpc/rpc_args.cpp" line="40"/> <source>Specify IP to bind RPC server</source> <translation>Spécifier l'IP à laquelle lier le serveur RPC</translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="39"/> + <location filename="../src/rpc/rpc_args.cpp" line="41"/> <source>Specify username[:password] required for RPC server</source> <translation>Spécifier le nom_utilisateur[:mot_de_passe] requis pour le serveur RPC</translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="40"/> + <location filename="../src/rpc/rpc_args.cpp" line="42"/> <source>Confirm rpc-bind-ip value is NOT a loopback (local) IP</source> <translation>Confirmer que la valeur de rpc-bind-ip n'est PAS une IP de bouclage (locale)</translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="66"/> + <location filename="../src/rpc/rpc_args.cpp" line="43"/> + <source>Specify a comma separated list of origins to allow cross origin resource sharing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/rpc/rpc_args.cpp" line="70"/> <source>Invalid IP address given for --</source> <translation>Adresse IP invalide fournie pour --</translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="74"/> + <location filename="../src/rpc/rpc_args.cpp" line="78"/> <source> permits inbound unencrypted external connections. Consider SSH tunnel or SSL proxy instead. Override with --</source> <translation> autorise les connexions entrantes non cryptées venant de l'extérieur. Considérez plutôt un tunnel SSH ou un proxy SSL. Outrepasser avec --</translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="89"/> + <location filename="../src/rpc/rpc_args.cpp" line="95"/> <source>Username specified with --</source> <translation>Le nom d'utilisateur spécifié avec --</translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="89"/> + <location filename="../src/rpc/rpc_args.cpp" line="95"/> + <location filename="../src/rpc/rpc_args.cpp" line="105"/> <source> cannot be empty</source> <translation> ne peut pas être vide</translation> </message> + <message> + <location filename="../src/rpc/rpc_args.cpp" line="105"/> + <source> requires RFC server password --</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>cryptonote::simple_wallet</name> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="290"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="479"/> <source>Commands: </source> <translation>Commandes : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1557"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3008"/> <source>failed to read wallet password</source> <translation>échec de la lecture du mot de passe du portefeuille</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1325"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2699"/> <source>invalid password</source> <translation>mot de passe invalide</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="697"/> - <source>start_mining [<number_of_threads>] - Start mining in daemon</source> - <translation>start_mining [<nombre_de_threads>] - Démarrer l'extraction minière dans le démon</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="698"/> - <source>Stop mining in daemon</source> - <translation>Stopper l'extraction minière dans le démon</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="699"/> - <source>Save current blockchain data</source> - <translation>Sauvegarder les données actuelles de la chaîne de blocs</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="701"/> - <source>Show current wallet balance</source> - <translation>Afficher le solde actuel du portefeuille</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="704"/> - <source>Show blockchain height</source> - <translation>Afficher la hauteur de la chaîne de blocs</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="715"/> - <source>Show current wallet public address</source> - <translation>Afficher l'adresse publique du portefeuille actuel</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="744"/> - <source>Show this help</source> - <translation>Afficher cette aide</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="788"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1905"/> <source>set seed: needs an argument. available options: language</source> <translation>set seed : requiert un argument. options disponibles : language</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="811"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1933"/> <source>set: unrecognized argument(s)</source> <translation>set : argument(s) non reconnu(s)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1442"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2869"/> <source>wallet file path not valid: </source> <translation>chemin du fichier portefeuille non valide : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="863"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1987"/> <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="416"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="662"/> <source>usage: payment_id</source> <translation>usage : payment_id</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="710"/> - <source>sweep_below <amount_threshold> [mixin] address [<payment_id>] - Send all unlocked outputs below the threshold to an address</source> - <translation>sweep_below <montant_seuil> [mixin] adresse [<ID_paiement>] - Envoyer toutes les sorties débloquées sous le seuil vers une adresse</translation> - </message> - <message> - <source>Available options: seed language - set wallet seed language; always-confirm-transfers <1|0> - whether to confirm unsplit txes; print-ring-members <1|0> - whether to print detailed information about ring members during confirmation; store-tx-info <1|0> - whether to store outgoing tx info (destination address, payment ID, tx secret key) for future reference; default-mixin <n> - set default mixin (default is 4); auto-refresh <1|0> - whether to automatically sync new blocks from the daemon; refresh-type <full|optimize-coinbase|no-coinbase|default> - set wallet refresh behaviour; priority [0|1|2|3|4] - default/unimportant/normal/elevated/priority fee; confirm-missing-payment-id <1|0>; ask-password <1|0>; unit <monero|millinero|micronero|nanonero|piconero> - set default monero (sub-)unit; min-outputs-count [n] - try to keep at least that many outputs of value at least min-outputs-value; min-outputs-value [n] - try to keep at least min-outputs-count outputs of at least that value - merge-destinations <1|0> - whether to merge multiple payments to the same destination address</source> - <translation type="obsolete">Options disponibles : seed language - définir la langue de la graine du portefeuille; always-confirm-transfers <1|0> - confirmer ou non les transactions non scindées; print-ring-members <1|0> - afficher ou non des informations détaillées sur les membres du cercle pendant la confirmation; store-tx-info <1|0> - sauvegarder ou non les informations des transactions sortantes (adresse de destination, ID de paiement, clé secrète de transaction) pour référence future; default-mixin <n> - définir le mixin par défaut (4 par défaut); auto-refresh <1|0> - synchroniser automatiquement ou non les nouveau blocs du démon; refresh-type <full|optimize-coinbase|no-coinbase|default> - définir le comportement du rafraîchissement du portefeuille; priority [0|1|2|3|4] - frais de transaction par défault/peu important/normal/élevé/prioritaire; confirm-missing-payment-id <1|0>; ask-password <1|0>; unit <monero|millinero|micronero|nanonero|piconero> - définir la (sous-)unité monero par défaut; min-outputs-count [n] - essayer de garder au moins ce nombre de sortie d'une valeur d'au moins min-outputs-value; min-outputs-value [n] - essayer de garder au moins min-outputs-count sorties d'une valeur d'au moins ce montant; merge-destinations <1|0> - fusionner ou non de multiples paiements à une même adresse de destination</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="743"/> - <source>Generate a new random full size payment id - these will be unencrypted on the blockchain, see integrated_address for encrypted short payment ids</source> - <translation>Générer un nouvel ID de paiement long aléatoire - ceux-ci seront non cryptés dans la chaîne de blocs, voir integrated_address pour les IDs de paiement courts cryptés</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="774"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1891"/> <source>needs an argument</source> <translation>requiert un argument</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="797"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="798"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="799"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="801"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="804"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="805"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="809"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1914"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1915"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1916"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1918"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1921"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1922"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1926"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1927"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1929"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1931"/> <source>0 or 1</source> <translation>0 ou 1</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="800"/> - <source>integer >= 2</source> - <translation>entier >= 2</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="803"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1920"/> <source>0, 1, 2, 3, or 4</source> <translation>0, 1, 2, 3 ou 4</translation> </message> <message> - <source>monero, millinero, micronero, nanop, piconero</source> - <translation type="obsolete">monero, millinero, micronero, nanonero, piconero</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="807"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1924"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1928"/> <source>unsigned integer</source> <translation>entier non signé</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="912"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2041"/> <source>NOTE: the following 25 words 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>VEUILLEZ NOTER : les 25 mots suivants peuvent être utilisés pour restaurer votre portefeuille. Veuillez les écrire sur papier et les garder dans un endroit sûr. Ne les gardez pas dans un courriel ou dans un service de stockage de fichiers hors de votre contrôle. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="958"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2092"/> <source>--restore-deterministic-wallet uses --generate-new-wallet, not --wallet-file</source> <translation>--restore-deterministic-wallet utilise --generate-new-wallet, pas --wallet-file</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="973"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2121"/> <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="1123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2471"/> <source>specify a wallet path with --generate-new-wallet (not --wallet-file)</source> <translation>spécifiez un chemin de portefeuille avec --generate-new-wallet (pas --wallet-file)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1261"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2635"/> <source>wallet failed to connect to daemon: </source> <translation>échec de la connexion du portefeuille au démon : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1269"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2643"/> <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="1288"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2662"/> <source>List of available languages for your wallet's seed:</source> <translation>Liste des langues disponibles pour la graine de votre portefeuille :</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1297"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2671"/> <source>Enter the number corresponding to the language of your choice: </source> <translation>Entrez le nombre correspondant à la langue de votre choix : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1354"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2737"/> <source>You had been using a deprecated version of the wallet. Please use the new seed that we provide. </source> <translation>Vous avez utilisé une version obsolète du portefeuille. Veuillez dorénavant utiliser la nouvelle graine que nous fournissons. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1368"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1425"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2751"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2809"/> <source>Generated new wallet: </source> <translation>Nouveau portefeuille généré : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1374"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1430"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2757"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2814"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2858"/> <source>failed to generate new wallet: </source> <translation>échec de la génération du nouveau portefeuille : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1457"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2887"/> <source>Opened watch-only wallet</source> <translation>Ouverture du portefeuille d'audit</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1457"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2891"/> <source>Opened wallet</source> <translation>Ouverture du portefeuille</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1466"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2901"/> <source>You had been using a deprecated version of the wallet. Please proceed to upgrade your wallet. </source> <translation>Vous avez utilisé une version obsolète du portefeuille. Veuillez procéder à la mise à jour de votre portefeuille. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1481"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2916"/> <source>You had been using a deprecated version of the wallet. Your wallet file format is being upgraded now. </source> <translation>Vous avez utilisé une version obsolète du portefeuille. Le format de votre fichier portefeuille est en cours de mise à jour. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1489"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2924"/> <source>failed to load wallet: </source> <translation>échec du chargement du portefeuille : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1497"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2941"/> <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="1541"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2986"/> <source>Wallet data saved</source> <translation>Données du portefeuille sauvegardées</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1613"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3072"/> <source>Mining started in daemon</source> <translation>L'extraction minière dans le démon a démarré</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1615"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3074"/> <source>mining has NOT been started: </source> <translation>l'extraction minière n'a PAS démarré : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1634"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3093"/> <source>Mining stopped in daemon</source> <translation>L'extraction minière dans le démon a été stoppée</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3095"/> <source>mining has NOT been stopped: </source> <translation>l'extraction minière n'a PAS été stoppée : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1655"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3150"/> <source>Blockchain saved</source> <translation>Chaîne de blocs sauvegardée</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1670"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1687"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1699"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3165"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3183"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3196"/> <source>Height </source> <translation>Hauteur </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1671"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1688"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1700"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3197"/> <source>transaction </source> <translation>transaction </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1672"/> - <source>received </source> - <translation>reçu </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1689"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3185"/> <source>spent </source> <translation>dépensé </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1701"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3198"/> <source>unsupported transaction format</source> <translation>format de transaction non supporté</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1718"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3219"/> <source>Starting refresh...</source> <translation>Démarrage du rafraîchissement...</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1731"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3232"/> <source>Refresh done, blocks received: </source> <translation>Rafraîchissement effectué, blocs reçus : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2186"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2701"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3758"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4230"/> <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="2201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3773"/> <source>bad locked_blocks parameter:</source> <translation>mauvais paramètre locked_blocks :</translation> </message> <message> - <source>Locked blocks too high, max 1000000 (Ë4 yrs)</source> - <translation type="vanished" variants="yes"> - <lengthvariant>Blocs vérrouillés trop élevé, 1000000 maximum (Ë</lengthvariant> - <lengthvariant>4 ans)</lengthvariant> - </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2228"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2726"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3801"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4248"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4462"/> <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="2237"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2735"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3810"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4257"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4430"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4470"/> <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="2262"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2355"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2533"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2749"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2794"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3835"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3916"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3987"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4096"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4271"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4329"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4484"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4527"/> <source>transaction cancelled.</source> <translation>transaction annulée.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2323"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3895"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3905"/> + <source>Is this okay anyway? (Y/Yes/N/No): </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3900"/> + <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="3905"/> + <source>Failed to check for backlog: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3946"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4302"/> + <source> +Transaction </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3951"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4307"/> + <source>Spending from address index %d +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3953"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4309"/> + <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="3955"/> <source>Sending %s. </source> <translation>Envoi de %s. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2326"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3958"/> <source>Your transaction needs to be split into %llu transactions. This will result in a transaction fee being applied to each transaction, for a total fee of %s</source> <translation>Votre transaction doit être scindée en %llu transactions. Il en résulte que des frais de transaction doivent être appliqués à chaque transaction, pour un total de %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2332"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3964"/> <source>The transaction fee is %s</source> <translation>Les frais de transaction sont de %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2335"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3967"/> <source>, of which %s is dust from change</source> <translation>, dont %s est de la poussière de monnaie rendue</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2336"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3968"/> <source>.</source> <translation>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2336"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3968"/> <source>A total of %s from dust change will be sent to dust address</source> <translation>Un total de %s de poussière de monnaie rendue sera envoyé à une adresse de poussière</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2341"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3973"/> <source>. This transaction will unlock on block %llu, in approximately %s days (assuming 2 minutes per block)</source> <translation>. Cette transaction sera déverrouillée au bloc %llu, dans approximativement %s jours (en supposant 2 minutes par bloc)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2367"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2544"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2805"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3999"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4011"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4107"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4119"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4340"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4352"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4537"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4549"/> <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="2371"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2548"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2809"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4003"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4015"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4111"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4344"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4356"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4541"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4553"/> <source>Unsigned transaction(s) successfully written to file: </source> <translation>Transaction(s) non signée(s) écrite(s) dans le fichier avec succès : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2406"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2583"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2844"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3157"/> - <source>Not enough money in unlocked balance</source> - <translation>Pas assez de fonds dans le solde débloqué</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4066"/> + <source>No unmixable outputs found</source> + <translation>Aucune sortie non mélangeable trouvée</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2415"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2592"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2853"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3166"/> - <source>Failed to find a way to create transactions. This is usually due to dust which is so small it cannot pay for itself in fees, or trying to send more money than the unlocked balance, or not leaving enough for fees</source> - <translation>Échec de la recherche d'une façon de créer les transactions. Ceci est généralement dû à de la poussière si petite qu'elle de peut pas payer ses propre frais, à une tentative d'envoi d'un montant supérieur au solde débloqué, ou parce qu'il n'en reste pas assez pour les frais de transaction</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4149"/> + <source>No address given</source> + <translation>Aucune adresse fournie</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2435"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2612"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2873"/> - <source>Reason: </source> - <translation>Raison : </translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4424"/> + <source>failed to parse Payment ID</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2447"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2624"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2885"/> - <source>failed to find a suitable way to split transactions</source> - <translation>échec de la recherche d'une façon adéquate de scinder les transactions</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4440"/> + <source>usage: sweep_single [<priority>] [<ring_size>] <key_image> <address> [<payment_id>]</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2503"/> - <source>No unmixable outputs found</source> - <translation>Aucune sortie non mélangeable trouvée</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4447"/> + <source>failed to parse key image</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2709"/> - <source>No address given</source> - <translation>Aucune adresse fournie</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4499"/> + <source>No outputs found</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2921"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4504"/> + <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="4509"/> + <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="4586"/> <source>missing threshold amount</source> <translation>montant seuil manquant</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2926"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4591"/> <source>invalid amount threshold</source> <translation>montant seuil invalide</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4601"/> + <source>donations are not enabled on the testnet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4608"/> + <source>usage: donate [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <amount> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4702"/> <source>Claimed change does not go to a paid address</source> <translation>La monnaie réclamée ne va pas à une adresse payée</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3013"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4707"/> <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="3035"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4738"/> <source>sending %s to %s</source> <translation>envoi de %s à %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3041"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4748"/> + <source> dummy output(s)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4751"/> <source>with no destinations</source> <translation>sans destination</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4763"/> + <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="4787"/> + <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="4797"/> + <source>usage: sign_transfer [export]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4809"/> <source>Failed to sign transaction</source> <translation>Échec de signature de transaction</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3094"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4815"/> <source>Failed to sign transaction: </source> <translation>Échec de signature de transaction : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3120"/> - <source>Failed to load transaction from file</source> - <translation>Échec du chargement de la transaction du fichier</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4836"/> + <source>Transaction raw hex data exported to </source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3137"/> - <source>daemon is busy. Please try again later</source> - <translation>le démon est occupé. Veuillez réessayer plus tard</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4852"/> + <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="1745"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1995"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2395"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2572"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2833"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3146"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3248"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3551"/> <source>RPC error: </source> <translation>Erreur RPC : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="312"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="522"/> <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="390"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="780"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="848"/> <source>Your original password was incorrect.</source> <translation>Votre mot de passe original est incorrect.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="404"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="650"/> <source>Error with wallet rewrite: </source> <translation>Erreur avec la réécriture du portefeuille : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="513"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1289"/> <source>priority must be 0, 1, 2, 3, or 4 </source> <translation>la priorité doit être 0, 1, 2, 3 ou 4 </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="525"/> - <source>priority must be 0, 1, 2, 3, or 4</source> - <translation>la priorité doit être 0, 1, 2, 3 ou 4</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="540"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1301"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1316"/> <source>priority must be 0, 1, 2, 3, or 4</source> <translation>la priorité doit être 0, 1, 2, 3 ou 4</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="623"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1404"/> <source>invalid unit</source> <translation>unité invalide</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="641"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1422"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1484"/> <source>invalid count: must be an unsigned integer</source> <translation>nombre invalide : un entier non signé est attendu</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="659"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1440"/> <source>invalid value</source> <translation>valeur invalide</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="705"/> - <source>Same as transfer, but using an older transaction building algorithm</source> - <translation>Comme transfer, mais utilise an algorithme de construction de transaction plus ancien</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="709"/> - <source>sweep_all [mixin] address [<payment_id>] - Send all unlocked balance to an address</source> - <translation>sweep_all [mixin] adresse [<ID_paiement>] - Envoyer tout le solde débloqué à une adresse</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="711"/> - <source>donate [<mixin_count>] <amount> [payment_id] - Donate <amount> to the development team (donate.getmonero.org)</source> - <translation>donate [<mixin>] <montant> [ID_paiement] - Donner <montant> à l'équipe de développement (donate.getmonero.org)</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="714"/> - <source>set_log <level>|<categories> - Change current log detail (level must be <0-4>)</source> - <translation>set_log <niveau>|<catégories> - Changer les détails du journal (niveau entre <0-4>)</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="717"/> - <source>address_book [(add (<address> [pid <long or short payment id>])|<integrated address> [<description possibly with whitespaces>])|(delete <index>)] - Print all entries in the address book, optionally adding/deleting an entry to/from it</source> - <translation>address_book [(add (<adresse> [pid <ID de paiement long ou court>])|<adresse integrée> [<description avec des espaces possible>])|(delete <index>)] - Afficher toutes les entrées du carnet d'adresses, éventuellement en y ajoutant/supprimant une entrée</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="729"/> - <source>show_transfers [in|out|pending|failed|pool] [<min_height> [<max_height>]] - Show incoming/outgoing transfers within an optional height range</source> - <translation>show_transfers [in|out|pending|failed|pool] [<hauteur_minimum> [<hauteur_maximum>]] - Afficher les transferts entrants/sortants en précisant éventuellement un intervalle de hauteurs</translation> - </message> - <message> - <source>unspent_outputs [<min_amount> <max_amount>] - Show unspent outputs within an optional amount range)</source> - <translation type="obsolete">unspent_outputs [<montant_minimum> <montant_maximum>] - Afficher les sorties non dépensées en précisant éventuellement un intervalle de montants</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="741"/> - <source>Show information about a transfer to/from this address</source> - <translation>Afficher les informations à propos d'un transfert vers/de cette adresse</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="742"/> - <source>Change wallet password</source> - <translation>Changer le mot de passe du portefeuille</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="820"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1942"/> <source>usage: set_log <log_level_number_0-4> | <categories></source> <translation>usage : set_log <niveau_de_journalisation_0-4> | <catégories></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="886"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2013"/> <source>(Y/Yes/N/No): </source> <translation>(Y/Yes/Oui/N/No/Non) : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1157"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1184"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2509"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2536"/> <source>bad m_restore_height parameter: </source> <translation>mauvais paramètre m_restore_height : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1162"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2514"/> <source>date format must be YYYY-MM-DD</source> <translation>le format de date doit être AAAA-MM-JJ</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1175"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2527"/> <source>Restore height is: </source> <translation>La hauteur de restauration est : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1176"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2348"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2528"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3980"/> <source>Is this okay? (Y/Yes/N/No): </source> <translation>Est-ce correct ? (Y/Yes/Oui/N/No/Non) : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1212"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2575"/> <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="1553"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3004"/> <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="1604"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3063"/> <source>invalid arguments. Please use start_mining [<number_of_threads>] [do_bg_mining] [ignore_battery], <number_of_threads> should be from 1 to </source> <translation>arguments invalides. Veuillez utiliser start_mining [<nombre_de_threads>] [mine_en_arrière_plan] [ignorer_batterie], <nombre_de_threads> devrait être entre 1 et </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1755"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2457"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2634"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2895"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3205"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3258"/> <source>internal error: </source> <translation>erreur interne : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1760"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2000"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2462"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2639"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2900"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3210"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1185"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3263"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3556"/> <source>unexpected error: </source> <translation>erreur inattendue : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1765"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2005"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2467"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2644"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2905"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3215"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1119"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1190"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3268"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3561"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4030"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4138"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4371"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4570"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4865"/> <source>unknown error</source> <translation>erreur inconnue</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1770"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3273"/> <source>refresh failed: </source> <translation>échec du rafraîchissement : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1770"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3273"/> <source>Blocks received: </source> <translation>Blocs reçus : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1795"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3304"/> <source>unlocked balance: </source> <translation>solde débloqué : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="808"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1925"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> <source>amount</source> <translation>montant</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="219"/> + <source>false</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="493"/> + <source>Unknown command: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="500"/> + <source>Command usage: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="503"/> + <source>Command description: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="551"/> + <source>wallet is multisig but not yet finalized</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="567"/> + <source>Enter optional seed encryption passphrase, empty to see raw seed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="584"/> + <source>Failed to retrieve seed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="603"/> + <source>wallet is multisig and has no seed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="674"/> + <source>Cannot connect to daemon</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="679"/> + <source>Current fee is %s monero per kB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="695"/> + <source>Error: failed to estimate backlog array size: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="700"/> + <source>Error: bad estimated backlog array size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="712"/> + <source> (current)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="715"/> + <source>%u block (%u minutes) backlog at priority %u%s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="717"/> + <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="720"/> + <source>No backlog at priority </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="729"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="762"/> + <source>This wallet is already multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="734"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="767"/> + <source>wallet is watch-only and cannot be made multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="740"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="773"/> + <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="747"/> + <source>Your password is incorrect.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="753"/> + <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="754"/> + <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="786"/> + <source>usage: make_multisig <threshold> <multisiginfo1> [<multisiginfo2>...]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="794"/> + <source>Invalid threshold</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="807"/> + <source>Another step is needed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="809"/> + <source>Send this multisig info to all other participants, then use finalize_multisig <info1> [<info2>...] with others' multisig info</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="815"/> + <source>Error creating multisig: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="822"/> + <source>Error creating multisig: new wallet is not multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="825"/> + <source> multisig address: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="836"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="880"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="927"/> + <source>This wallet is not multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="841"/> + <source>This wallet is already finalized</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="854"/> + <source>usage: finalize_multisig <multisiginfo1> [<multisiginfo2>...]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="862"/> + <source>Failed to finalize multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="868"/> + <source>Failed to finalize multisig: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="885"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="932"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1006"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1074"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1136"/> + <source>This multisig wallet is not yet finalized</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="890"/> + <source>usage: export_multisig_info <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="913"/> + <source>Error exporting multisig info: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="917"/> + <source>Multisig info exported to </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="937"/> + <source>usage: import_multisig_info <filename1> [<filename2>...] - one for each other participant</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="965"/> + <source>Multisig info imported</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="969"/> + <source>Failed to import multisig info: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="980"/> + <source>Failed to update spent status after importing multisig info: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="985"/> + <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="1001"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1069"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1131"/> + <source>This is not a multisig wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1011"/> + <source>usage: sign_multisig <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1024"/> + <source>Failed to sign multisig transaction</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1030"/> + <source>Multisig error: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1035"/> + <source>Failed to sign multisig transaction: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1058"/> + <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="1079"/> + <source>usage: submit_multisig <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1094"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1155"/> + <source>Failed to load multisig transaction from file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1160"/> + <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="1108"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6750"/> + <source>Transaction successfully submitted, transaction </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1109"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6751"/> + <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="1141"/> + <source>usage: export_raw_multisig <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1176"/> + <source>Failed to export multisig transaction to file </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1180"/> + <source>Saved exported multisig transaction file(s): </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1252"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1258"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1272"/> + <source>ring size must be an integer >= </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1277"/> + <source>could not change default ring size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1518"/> + <source>Invalid height</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1564"/> + <source>start_mining [<number_of_threads>] [bg_mining] [ignore_battery]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1565"/> + <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="1568"/> + <source>Stop mining in the daemon.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1571"/> + <source>set_daemon <host>[:<port>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1572"/> + <source>Set another daemon to connect to.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1575"/> + <source>Save the current blockchain data.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1578"/> + <source>Synchronize the transactions and balance.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1581"/> + <source>balance [detail]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1582"/> + <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="1585"/> + <source>incoming_transfers [available|unavailable] [verbose] [index=<N1>[,<N2>[,...]]]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1586"/> + <source>Show the incoming transfers, all or filtered by availability and address index.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1589"/> + <source>payments <PID_1> [<PID_2> ... <PID_N>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1590"/> + <source>Show the payments for the given payment IDs.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1593"/> + <source>Show the blockchain height.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1596"/> + <source>transfer_original [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> <amount> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1597"/> + <source>Transfer <amount> to <address> using an older transaction building algorithm. 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 <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="1599"/> + <source>transfer [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> <amount> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1600"/> + <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 <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="1603"/> + <source>locked_transfer [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <addr> <amount> <lockblocks> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1604"/> + <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 <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="1607"/> + <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="1609"/> + <source>sweep_all [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1610"/> + <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.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1613"/> + <source>sweep_below <amount_threshold> [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1614"/> + <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="1617"/> + <source>sweep_single [<priority>] [<ring_size>] <key_image> <address> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1618"/> + <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="1621"/> + <source>donate [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <amount> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1622"/> + <source>Donate <amount> to the development team (donate.getmonero.org).</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1625"/> + <source>sign_transfer <file></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1626"/> + <source>Sign a transaction from a <file>.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1629"/> + <source>Submit a signed transaction from a file.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1632"/> + <source>set_log <level>|{+,-,}<categories></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1633"/> + <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="1636"/> + <source>account + account new <label text with white spaces allowed> + account switch <index> + account label <index> <label text with white spaces allowed> + account tag <tag_name> <account_index_1> [<account_index_2> ...] + account untag <account_index_1> [<account_index_2> ...] + account tag_description <tag_name> <description></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1643"/> + <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>. +If the "label" argument is specified, the wallet sets the label of the account specified by <index> to the provided label text. +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> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1652"/> + <source>address [ new <label text with white spaces allowed> | all | <index_min> [<index_max>] | label <index> <label text with white spaces allowed>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1653"/> + <source>If no arguments are specified or <index> is specified, the wallet shows the default or specified address. If "all" is specified, the walllet 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="1656"/> + <source>integrated_address [<payment_id> | <address>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1657"/> + <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="1660"/> + <source>address_book [(add ((<address> [pid <id>])|<integrated address>) [<description possibly with whitespaces>])|(delete <index>)]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1661"/> + <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="1664"/> + <source>Save the wallet data.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1667"/> + <source>Save a watch-only keys file.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1670"/> + <source>Display the private view key.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1673"/> + <source>Display the private spend key.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1676"/> + <source>Display the Electrum-style mnemonic seed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1679"/> + <source>set <option> [<value>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1680"/> + <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 (default and minimum is 5). + 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 too default/unimportant/normal/elevated/priority. + confirm-missing-payment-id <1|0> + ask-password <1|0> + 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.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1717"/> + <source>Display the encrypted Electrum-style mnemonic seed.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1720"/> + <source>Rescan the blockchain for spent outputs.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1723"/> + <source>get_tx_key <txid></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1724"/> + <source>Get the transaction key (r) for a given <txid>.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1727"/> + <source>check_tx_key <txid> <txkey> <address></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1728"/> + <source>Check the amount going to <address> in <txid>.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1731"/> + <source>get_tx_proof <txid> <address> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1732"/> + <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="1735"/> + <source>check_tx_proof <txid> <address> <signature_file> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1736"/> + <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="1739"/> + <source>get_spend_proof <txid> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1740"/> + <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="1743"/> + <source>check_spend_proof <txid> <signature_file> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1744"/> + <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="1747"/> + <source>get_reserve_proof (all|<amount>) [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1748"/> + <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="1753"/> + <source>check_reserve_proof <address> <signature_file> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1754"/> + <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="1757"/> + <source>show_transfers [in|out|pending|failed|pool] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1758"/> + <source>Show the incoming/outgoing transfers within an optional height range.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1761"/> + <source>unspent_outputs [index=<N1>[,<N2>,...]] [<min_amount> [<max_amount>]]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1762"/> + <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="1765"/> + <source>Rescan the blockchain from scratch.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1768"/> + <source>set_tx_note <txid> [free text note]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1769"/> + <source>Set an arbitrary string note for a <txid>.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1772"/> + <source>get_tx_note <txid></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1773"/> + <source>Get a string note for a txid.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1776"/> + <source>set_description [free text note]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1777"/> + <source>Set an arbitrary description for the wallet.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1780"/> + <source>Get the description of the wallet.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1783"/> + <source>Show the wallet's status.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1786"/> + <source>Show the wallet's information.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1789"/> + <source>sign <file></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1790"/> + <source>Sign the contents of a file.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1793"/> + <source>verify <filename> <address> <signature></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1794"/> + <source>Verify a signature on the contents of a file.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1797"/> + <source>export_key_images <file></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1798"/> + <source>Export a signed set of key images to a <file>.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1801"/> + <source>import_key_images <file></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1802"/> + <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="1805"/> + <source>export_outputs <file></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1806"/> + <source>Export a set of outputs owned by this wallet.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1809"/> + <source>import_outputs <file></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1810"/> + <source>Import a set of outputs owned by this wallet.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1813"/> + <source>show_transfer <txid></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1814"/> + <source>Show information about a transfer to/from this address.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1817"/> + <source>Change the wallet's password.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1820"/> + <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="1823"/> + <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="1825"/> + <source>Export data needed to create a multisig wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1827"/> + <source>make_multisig <threshold> <string1> [<string>...]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1828"/> + <source>Turn this wallet into a multisig wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1831"/> + <source>finalize_multisig <string> [<string>...]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1832"/> + <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="1835"/> + <source>export_multisig_info <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1836"/> + <source>Export multisig info for other participants</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1839"/> + <source>import_multisig_info <filename> [<filename>...]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1840"/> + <source>Import multisig info from other participants</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1843"/> + <source>sign_multisig <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1844"/> + <source>Sign a multisig transaction from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1847"/> + <source>submit_multisig <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1848"/> + <source>Submit a signed multisig transaction from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1851"/> + <source>export_raw_multisig_tx <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1852"/> + <source>Export a signed multisig transaction to a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1855"/> + <source>help [<command>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1856"/> + <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="1917"/> + <source>integer >= </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1930"/> + <source>block height</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2012"/> + <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="2068"/> + <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" and --generate-from-json="jsonfilename"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2084"/> + <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="2090"/> + <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="2106"/> + <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="2133"/> + <source>Multisig seed failed verification</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2149"/> + <source>Enter seed encryption passphrase, empty if none</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2185"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2259"/> + <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="2337"/> + <source>Error: expected M/N, but got: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2342"/> + <source>Error: expected N > 1 and N <= M, but got: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2347"/> + <source>Error: M/N is currently unsupported. </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2350"/> + <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="2379"/> + <source>failed to parse secret view key</source> + <translation type="unfinished">échec de l'analyse de la clé secrète d'audit</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2388"/> + <source>failed to verify secret view key</source> + <translation type="unfinished">échec de la vérification de la clé secrète d'audit</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2408"/> + <source>Secret spend key (%u of %u):</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2432"/> + <source>Error: M/N is currently unsupported</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2550"/> + <source>Restore height </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2551"/> + <source>Still apply restore height? (Y/Yes/N/No): </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2582"/> + <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="2636"/> + <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="2768"/> + <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. +Use "help <command>" to see a command's documentation. +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> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2850"/> + <source>failed to generate new mutlisig wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2853"/> + <source>Generated new %u/%u multisig wallet: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2889"/> + <source>Opened %u/%u multisig wallet%s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2942"/> + <source>Use "help <command>" to see a command's documentation. +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3000"/> + <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="3105"/> + <source>missing daemon URL argument</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3116"/> + <source>Unexpected array length - Exited simple_wallet::set_daemon()</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3130"/> + <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="3166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3184"/> + <source>txid </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3168"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3186"/> + <source>idx </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3299"/> + <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="3300"/> + <source>Currently selected account: [</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3300"/> + <source>] </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3302"/> + <source>Tag: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3302"/> + <source>(No tag assigned)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3309"/> + <source>Balance per address:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <source>Address</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5921"/> + <source>Balance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5921"/> + <source>Unlocked balance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <source>Outputs</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5921"/> + <source>Label</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3318"/> + <source>%8u %6s %21s %21s %7u %21s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3327"/> + <source>usage: balance [detail]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3339"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3381"/> + <source>usage: incoming_transfers [available|unavailable] [verbose] [index=<N>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> <source>spent</source> <translation>dépensé</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> <source>global index</source> <translation>index global</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> <source>tx id</source> <translation>ID de transaction</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1868"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> + <source>addr index</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3423"/> <source>No incoming transfers</source> <translation>Aucun transfert entrant</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1872"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3427"/> <source>No incoming available transfers</source> <translation>Aucun transfert entrant disponible</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1876"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3431"/> <source>No incoming unavailable transfers</source> <translation>Aucun transfert entrant non disponible</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1887"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3442"/> <source>expected at least one payment ID</source> <translation>au moins un ID de paiement attendu</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> <source>payment</source> <translation>paiement</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> <source>transaction</source> <translation>transaction</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> <source>height</source> <translation>hauteur</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> <source>unlock time</source> <translation>durée de déverrouillage</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1908"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3463"/> <source>No payments with id </source> <translation>Aucun paiement avec l'ID </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1960"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2026"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2280"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3516"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3582"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3853"/> <source>failed to get blockchain height: </source> <translation>échec de la récupération de la hauteur de la chaîne de blocs : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2016"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3572"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5136"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5174"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5226"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5259"/> <source>failed to connect to the daemon</source> <translation>échec de la connexion au démon</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2034"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3590"/> <source> Transaction %llu/%llu: txid=%s</source> <translation> Transaction %llu/%llu : ID=%s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2044"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3600"/> <source> Input %llu/%llu: amount=%s</source> <translation> Entrée %llu/%llu : montant=%s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2060"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3616"/> <source>failed to get output: </source> <translation>échec de la récupération de la sortie : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2068"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3624"/> <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="2072"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3628"/> <source> Originating block heights: </source> <translation> Hauteurs des blocs d'origine : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2087"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3643"/> <source> |</source> <translation> |</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2087"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3915"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3643"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5651"/> <source>| </source> <translation>| </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2104"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3660"/> <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="2106"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3662"/> <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="2152"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2937"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3705"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4184"/> + <source>Ring size must not be 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3717"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4196"/> + <source>ring size %u is too small, minimum is %u</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3724"/> <source>wrong number of arguments</source> <translation>mauvais nombre d'arguments</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2257"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2744"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3830"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4266"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4479"/> <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> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2298"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2762"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3872"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4286"/> <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="2399"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2576"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2837"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3150"/> - <source>failed to get random outputs to mix: </source> - <translation>échec de la récupération de sorties aléatoires à mélanger : </translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="6743"/> + <source>Transaction successfully saved to </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6743"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6745"/> + <source>, txid </source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2518"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2779"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6745"/> + <source>Failed to save transaction to </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4081"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4314"/> <source>Sweeping %s in %llu transactions for a total fee of %s. Is this okay? (Y/Yes/N/No): </source> <translation>Balayage de %s dans %llu transactions pour des frais totaux de %s. Est-ce correct ? (Y/Yes/Oui/N/No/Non) : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2524"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4087"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4320"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4519"/> <source>Sweeping %s for a total fee of %s. Is this okay? (Y/Yes/N/No): </source> <translation>Balayage de %s pour des frais totaux de %s. Est-ce correct ? (Y/Yes/Oui/N/No/Non) : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2969"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4630"/> <source>Donating </source> <translation>Don de </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3053"/> - <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min mixin %lu. %sIs this okay? (Y/Yes/N/No): </source> - <translation>Chargement de %lu transactions, pour %s, %s de frais, %s. %s, avec mixin minimum de %lu. %sEst-ce correct ? (Y/Yes/Oui/N/No/Non) : </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3077"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4792"/> <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="4443"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6571"/> <source>usage: show_transfer <txid></source> <translation>usage : show_transfer <ID_de_transaction></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4557"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6673"/> + <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="6708"/> <source>Transaction ID not found</source> <translation>ID de transaction non trouvé</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="237"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="214"/> <source>true</source> <translation>vrai</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="266"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="267"/> <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="330"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="362"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="541"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="608"/> <source>wallet is watch-only and has no seed</source> <translation>c'est un portefeuille d'audit et il n'a pas de graine</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="353"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="367"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="557"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="613"/> <source>wallet is non-deterministic and has no seed</source> <translation>c'est un portefeuille non déterministe et il n'a pas de graine</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="450"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="467"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1226"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1245"/> <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="474"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="480"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="496"/> - <source>mixin must be an integer >= 2</source> - <translation>mixin doit être un entier >= 2</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="501"/> - <source>could not change default mixin</source> - <translation>échec du changement du mixin par défaut</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="545"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1321"/> <source>could not change default priority</source> <translation>échec du changement de la priorité par défaut</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="700"/> - <source>Synchronize transactions and balance</source> - <translation>Synchroniser les transactions et le solde</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="702"/> - <source>incoming_transfers [available|unavailable] - Show incoming transfers, all or filtered by availability</source> - <translation>incoming_transfers [available|unavailable] - Afficher les transferts entrants, soit tous soit filtrés par disponibilité</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="703"/> - <source>payments <PID_1> [<PID_2> ... <PID_N>] - Show payments for given payment ID[s]</source> - <translation>payments <PID_1> [<PID_2> ... <PID_N>] - Affichier les paiements pour certains ID de paiement donnés</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="706"/> - <source>transfer [<priority>] [<mixin_count>] <address> <amount> [<payment_id>] - Transfer <amount> to <address>. <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. <mixin_count> is the number of extra inputs to include for untraceability. Multiple payments can be made at once by adding <address_2> <amount_2> etcetera (before the payment ID, if it's included)</source> - <translation>transfer [<priorité>] [<mixin>] <adresse> <montant> [<ID_paiement>] - Transférer <montant> à <adresse>. <priorité> est la priorité de la transaction. Plus la priorité est élevée, plues les frais de transaction seront élévés. Les valeurs de priorité valies sont dans l'ordre (de la plus basse à la plus élevée) : unimportant, normal, elevated, priority. Si ce paramètre est omis, la valeur par défaut (voir la commande "set priority") est utilisée. <mixin> est le nombre d'entrées supplémentaires à inclure pour l'intraçabilité. De multiples paiements peuvent être effectués d'un coup en ajoutant <adresse_2> <montant_2> et cetera (avant l'ID de paiement, s'il est inclus)</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="707"/> - <source>locked_transfer [<mixin_count>] <addr> <amount> <lockblocks>(Number of blocks to lock the transaction for, max 1000000) [<payment_id>]</source> - <translation>locked_transfer [<mixin>] <adresse> <montant> <blocs_vérrous>(Nombre de blocs pendant lequel vérrouiller la transaction, maximum 1000000) [<ID_paiement>]</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="708"/> - <source>Send all unmixable outputs to yourself with mixin 0</source> - <translation>Envoyer toutes les sorties non méleangeables à vous-même avec un mixin de 0</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="712"/> - <source>Sign a transaction from a file</source> - <translation>Signer une transaction d'un fichier</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="713"/> - <source>Submit a signed transaction from a file</source> - <translation>Soumettre une transaction signée d'un fichier</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="716"/> - <source>integrated_address [PID] - Encode a payment ID into an integrated address for the current wallet public address (no argument uses a random payment ID), or decode an integrated address to standard address and payment ID</source> - <translation>integrated_address [PID] - Encoder un ID de paiement dans une adresse intégrée pour l'adresse publique du portefeuille actuel (sans argument un ID de paiement aléatoire est utilisé), ou décoder une adresse intégrée en une adresse standard et un ID de paiement</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="718"/> - <source>Save wallet data</source> - <translation>Sauvegarder les données du portefeuille</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="719"/> - <source>Save a watch-only keys file</source> - <translation>Sauvegarder un fichier de clés d'audit</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="720"/> - <source>Display private view key</source> - <translation>Afficher la clé privée d'audit</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="721"/> - <source>Display private spend key</source> - <translation>Afficher la clé privée de dépense</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="722"/> - <source>Display Electrum-style mnemonic seed</source> - <translation>Afficher la graine mnémonique de style Electrum</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="723"/> - <source>Available options: seed language - set wallet seed language; always-confirm-transfers <1|0> - whether to confirm unsplit txes; print-ring-members <1|0> - whether to print detailed information about ring members during confirmation; store-tx-info <1|0> - whether to store outgoing tx info (destination address, payment ID, tx secret key) for future reference; default-mixin <n> - set default mixin (default is 4); auto-refresh <1|0> - whether to automatically sync new blocks from the daemon; refresh-type <full|optimize-coinbase|no-coinbase|default> - set wallet refresh behaviour; priority [0|1|2|3|4] - default/unimportant/normal/elevated/priority fee; confirm-missing-payment-id <1|0>; ask-password <1|0>; unit <monero|millinero|micronero|nanonero|piconero> - set default monero (sub-)unit; min-outputs-count [n] - try to keep at least that many outputs of value at least min-outputs-value; min-outputs-value [n] - try to keep at least min-outputs-count outputs of at least that value; merge-destinations <1|0> - whether to merge multiple payments to the same destination address</source> - <translation>Options disponibles : seed language - définir la langue de la graine du portefeuille; always-confirm-transfers <1|0> - confirmer ou non les transactions non scindées; print-ring-members <1|0> - afficher ou non des informations détaillées sur les membres du cercle pendant la confirmation; store-tx-info <1|0> - sauvegarder ou non les informations des transactions sortantes (adresse de destination, ID de paiement, clé secrète de transaction) pour référence future; default-mixin <n> - définir le mixin par défaut (4 par défaut); auto-refresh <1|0> - synchroniser automatiquement ou non les nouveau blocs du démon; refresh-type <full|optimize-coinbase|no-coinbase|default> - définir le comportement du rafraîchissement du portefeuille; priority [0|1|2|3|4] - frais de transaction par défault/peu important/normal/élevé/prioritaire; confirm-missing-payment-id <1|0>; ask-password <1|0>; unit <monero|millinero|micronero|nanonero|piconero> - définir la (sous-)unité monero par défaut; min-outputs-count [n] - essayer de garder au moins ce nombre de sortie d'une valeur d'au moins min-outputs-value; min-outputs-value [n] - essayer de garder au moins min-outputs-count sorties d'une valeur d'au moins ce montant; merge-destinations <1|0> - fusionner ou non de multiples paiements à une même adresse de destination</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="724"/> - <source>Rescan blockchain for spent outputs</source> - <translation>Réexaminer la chaîne de blocs pour trouver les sorties dépensées</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="725"/> - <source>Get transaction key (r) for a given <txid></source> - <translation>Obtenir la clé de transaction (r) pour un <ID_de_transaction> donné</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="726"/> - <source>Check amount going to <address> in <txid></source> - <translation>Vérifier le montant allant à <adresse> dans <ID_de_transaction></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="727"/> - <source>Generate a signature to prove payment to <address> in <txid> using the transaction secret key (r) without revealing it</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="728"/> - <source>Check tx proof for payment going to <address> in <txid></source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="730"/> - <source>unspent_outputs [<min_amount> <max_amount>] - Show unspent outputs within an optional amount range</source> - <translation>unspent_outputs [<montant_minimum> <montant_maximum>] - Afficher les sorties non dépensées en précisant éventuellement un intervalle de montants</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="731"/> - <source>Rescan blockchain from scratch</source> - <translation>Réexaminer la chaîne de blocs depuis le début</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="732"/> - <source>Set an arbitrary string note for a txid</source> - <translation>Définir une note arbitraire pour un ID de transaction</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="733"/> - <source>Get a string note for a txid</source> - <translation>Obtenir une note pour un ID de transaction</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="734"/> - <source>Show wallet status information</source> - <translation>Afficher les informations sur le statut du portefuille</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="735"/> - <source>Sign the contents of a file</source> - <translation>Signer le contenu d'un fichier</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="736"/> - <source>Verify a signature on the contents of a file</source> - <translation>Vérifier une signature du contenu d'un fichier</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="737"/> - <source>Export a signed set of key images</source> - <translation>Exporter un ensemble signé d'images de clé</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="738"/> - <source>Import signed key images list and verify their spent status</source> - <translation>Importer un ensemble signé d'images de clé et vérifier leurs statuts de dépense</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="739"/> - <source>Export a set of outputs owned by this wallet</source> - <translation>Exporter un ensemble de sorties possédées par ce portefeuille</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="740"/> - <source>Import set of outputs owned by this wallet</source> - <translation>Importer un ensemble de sorties possédées par ce portefeuille</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="802"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1919"/> <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="806"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1923"/> <source>monero, millinero, micronero, nanonero, piconero</source> <translation>monero, millinero, micronero, nanonero, piconero</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="851"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1975"/> <source>Wallet name not valid. Please try again or use Ctrl-C to quit.</source> <translation>Nom de portefeuille non valide. Veuillez réessayer ou utilisez Ctrl-C pour quitter.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="868"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1992"/> <source>Wallet and key files found, loading...</source> <translation>Fichier portefeuille et fichier de clés trouvés, chargement...</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="874"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1998"/> <source>Key file found but not wallet file. Regenerating...</source> <translation>Fichier de clés trouvé mais pas le fichier portefeuille. Régénération...</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="880"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2004"/> <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="894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2023"/> <source>Generating new wallet...</source> <translation>Génération du nouveau portefeuille...</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="937"/> - <source>can't specify more than one of --generate-new-wallet="wallet_name", --wallet-file="wallet_name", --generate-from-view-key="wallet_name", --generate-from-json="jsonfilename" and --generate-from-keys="wallet_name"</source> - <translation>impossible de spécifier plus d'une option parmis --generate-new-wallet="nom_du_portefeuille", --wallet-file="nom_du_portefeuille", --generate-from-view-key="nom_du_portefeuille", --generate-from-json="nom_du_fichier_json" et --generate-from-keys="nom_du_portefeuille"</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="953"/> - <source>can't specify both --restore-deterministic-wallet and --non-deterministic</source> - <translation>impossible de spécifier à la fois --restore-deterministic-wallet et --non-deterministic</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="982"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2141"/> <source>Electrum-style word list failed verification</source> <translation>Échec de la vérification de la liste de mots de style Electrum</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="994"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1011"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1046"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1063"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1079"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2174"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2194"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2229"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2248"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2268"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2284"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2332"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2357"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2373"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2413"/> <source>No data supplied, cancelled</source> <translation>Pas de données fournies, annulation</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1002"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1054"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2220"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2718"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3276"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3378"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3530"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4048"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4239"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2180"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2254"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2363"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3791"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4240"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4454"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4926"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4994"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5058"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5266"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6106"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6353"/> <source>failed to parse address</source> <translation>échec de l'analyse de l'adresse</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1017"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1085"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2200"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2290"/> <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="1027"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1103"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2210"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2308"/> <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="1031"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1107"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2214"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2312"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2393"/> <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="1036"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1111"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1128"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2219"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2238"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2316"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2450"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2480"/> <source>account creation failed</source> <translation>échec de la création du compte</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1069"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2274"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2418"/> <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="1095"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2300"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2439"/> <source>failed to verify spend key secret key</source> <translation>échec de la vérification de la clé secrète de dépense</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2304"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2444"/> <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="1199"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2562"/> <source>failed to open account</source> <translation>échec de l'ouverture du compte</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1203"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1579"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1626"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1647"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3348"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2566"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3030"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3085"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3142"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4962"/> <source>wallet is null</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1262"/> - <source>Daemon either is not started or wrong port was passed. Please make sure daemon is running or restart the wallet with the correct daemon address.</source> - <translation>Le démon n'est pas démarré ou un mauvais port a été passé. Veuillez vous assurer que le démon fonctionne ou redémarrez le portefeuille avec l'adresse de démon correcte.</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1306"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1311"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2680"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2685"/> <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="1370"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2753"/> <source>View key: </source> <translation>Clé d'audit : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1385"/> - <source>Your wallet has been generated! -To start synchronizing with the daemon, use the "refresh" command. -Use the "help" command to see the list of available commands. -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>Votre portefeuille a été généré ! -Pour commencer la synchronisation avec le démon, utilisez la commande "refresh". -Utilisez la commande "help" pour voir la liste des commandes disponibles. -Utilisez toujours la commande "exit" pour fermer monero-wallet-cli afin de sauvegarder -l'état actuel de votre session. Sinon vous pourriez avoir besoin de synchroniser -votre portefeuille à nouveau (mais les clés de votre portefeuille ne risquent rien). -</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1492"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2935"/> <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="1518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2963"/> <source>failed to deinitialize wallet</source> <translation>échec de la désinitialisation du portefeuille</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1570"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1968"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3021"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3524"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6410"/> <source>this command requires a trusted daemon. Enable with --trusted-daemon</source> <translation>cette commande requiert un démon de confiance. Activer avec --trusted-daemon</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1657"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3152"/> <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="1736"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1982"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2386"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2563"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2824"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3239"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3538"/> <source>daemon is busy. Please try again later.</source> <translation>le démon est occupé. Veuillez réessayer plus tard.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1740"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1986"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2390"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2567"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2828"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3243"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3542"/> <source>no connection to daemon. Please make sure daemon is running.</source> <translation>pas de connexion au démon. Veuillez vous assurer que le démon fonctionne.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1750"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3253"/> <source>refresh error: </source> <translation>erreur du rafraîchissement : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1794"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3303"/> <source>Balance: </source> <translation>Solde : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1845"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3399"/> <source>pubkey</source> <translation>clé publique</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1845"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3399"/> <source>key image</source> <translation>image de clé</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1856"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3410"/> <source>unlocked</source> <translation>déverrouillé</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> <source>ringct</source> <translation>ringct</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1855"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3409"/> <source>T</source> <translation>V</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1855"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3409"/> <source>F</source> <translation>F</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1856"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3410"/> <source>locked</source> <translation>vérrouillé</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1857"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3411"/> <source>RingCT</source> <translation>RingCT</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1857"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3411"/> <source>-</source> <translation>-</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1929"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3485"/> <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="1990"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3546"/> <source>failed to get spent status</source> <translation>échec de la récupération du statut de dépense</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3661"/> <source>the same transaction</source> <translation>la même transaction</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3661"/> <source>blocks that are temporally very close</source> <translation>blocs très proches dans le temps</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2206"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3778"/> <source>Locked blocks too high, max 1000000 (˜4 yrs)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3258"/> - <source>usage: get_tx_proof <txid> <dest_address> [<tx_key>]</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3289"/> - <source>failed to parse tx_key</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3298"/> - <source>Tx secret key was found for the given txid, but you've also provided another tx secret key which doesn't match the found one.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3306"/> - <source>Tx secret key wasn't found in the wallet file. Provide it as the optional third parameter if you have it elsewhere.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3330"/> - <source>Signature: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3508"/> - <source>usage: check_tx_proof <txid> <address> <signature></source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3539"/> - <source>Signature header check error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3550"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3555"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3560"/> - <source>Signature decoding error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3602"/> - <source>Tx pubkey was not found</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3609"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5077"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5188"/> <source>Good signature</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3613"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5104"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5190"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5293"/> <source>Bad signature</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3621"/> - <source>failed to generate key derivation</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3994"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6046"/> <source>usage: integrated_address [payment ID]</source> <translation>usage : integrated_address [ID paiement]</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4017"/> - <source>Integrated address: account %s, payment ID %s</source> - <translation>Adresse intégrée : compte %s, ID de paiement %s</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4022"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6082"/> <source>Standard address: </source> <translation>Adresse standard : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4027"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6087"/> <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="4038"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6098"/> <source>usage: address_book [(add (<address> [pid <long or short payment id>])|<integrated address> [<description possibly with whitespaces>])|(delete <index>)]</source> <translation>usage : address_book [(add (<adresse> [pid <ID de paiement long ou court>])|<adresse integrée> [<description avec des espaces possible>])|(delete <index>)]</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4070"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6128"/> <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="4088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6146"/> <source>failed to parse index</source> <translation>échec de l'analyse de l'index</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4096"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6154"/> <source>Address book is empty.</source> <translation>Le carnet d'adresses est vide.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4102"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6160"/> <source>Index: </source> <translation>Index : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4103"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6161"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6287"/> <source>Address: </source> <translation>Adresse : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4104"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6162"/> <source>Payment ID: </source> <translation>ID de paiement : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6163"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6286"/> <source>Description: </source> <translation>Description : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4115"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6173"/> <source>usage: set_tx_note [txid] free text note</source> <translation>usage : set_tx_note [ID transaction] note de texte libre</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4143"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6201"/> <source>usage: get_tx_note [txid]</source> <translation>usage : get_tx_note [ID transaction]</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6304"/> <source>usage: sign <filename></source> <translation>usage : sign <fichier></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4198"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6309"/> <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="4207"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4230"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4374"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="951"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6323"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6346"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6501"/> <source>failed to read file </source> <translation>échec de la lecture du fichier </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4219"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5039"/> + <source>usage: check_tx_proof <txid> <address> <signature_file> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5066"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5278"/> + <source>failed to load signature file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5117"/> + <source>usage: get_spend_proof <txid> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5123"/> + <source>wallet is watch-only and cannot generate the proof</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5161"/> + <source>usage: check_spend_proof <txid> <signature_file> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5202"/> + <source>usage: get_reserve_proof (all|<amount>) [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5208"/> + <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="5253"/> + <source>usage: check_reserve_proof <address> <signature_file> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5271"/> + <source>Address must not be a subaddress</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5289"/> + <source>Good signature -- total: %s, spent: %s, unspent: %s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5353"/> + <source>usage: show_transfers [in|out|all|pending|failed] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5490"/> + <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="5526"/> + <source>usage: unspent_outputs [index=<N1>[,<N2>,...]] [<min_amount> [<max_amount>]]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5586"/> + <source>There is no unspent output in the specified address</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5699"/> + <source> (no daemon)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5701"/> + <source> (out of sync)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5758"/> + <source>(Untitled account)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5771"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5789"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5814"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5837"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5990"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6013"/> + <source>failed to parse index: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5776"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5995"/> + <source>specify an index between 0 and </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5873"/> + <source>usage: + account + account new <label text with white spaces allowed> + account switch <index> + account label <index> <label text with white spaces allowed> + account tag <tag_name> <account_index_1> [<account_index_2> ...] + account untag <account_index_1> [<account_index_2> ...] + account tag_description <tag_name> <description></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5901"/> + <source> +Grand total: + Balance: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5901"/> + <source>, unlocked balance: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5909"/> + <source>Untagged accounts:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5915"/> + <source>Tag %s is unregistered.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5918"/> + <source>Accounts with tag: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5919"/> + <source>Tag's description: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5921"/> + <source>Account</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5927"/> + <source> %c%8u %6s %21s %21s %21s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5937"/> + <source>----------------------------------------------------------------------------------</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5938"/> + <source>%15s %21s %21s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5961"/> + <source>Primary address</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5961"/> + <source>(used)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5982"/> + <source>(Untitled address)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6022"/> + <source><index_min> is already out of bound</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6027"/> + <source><index_max> exceeds the bound</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6035"/> + <source>usage: address [ new <label text with white spaces allowed> | all | <index_min> [<index_max>] | label <index> <label text with white spaces allowed> ]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6053"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6065"/> + <source>Integrated addresses can only be created for account 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6077"/> + <source>Integrated address: %s, payment ID: %s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6082"/> + <source>Subaddress: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6242"/> + <source>usage: get_description</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6248"/> + <source>no description found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6250"/> + <source>description found: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6285"/> + <source>Filename: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6290"/> + <source>Watch only</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6292"/> + <source>%u/%u multisig%s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6294"/> + <source>Normal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6295"/> + <source>Type: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6296"/> + <source>Testnet: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6296"/> + <source>Yes</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6296"/> + <source>No</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6314"/> + <source>This wallet is multisig and cannot sign</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6335"/> <source>usage: verify <filename> <address> <signature></source> <translation>usage : verify <fichier> <adresse> <signature></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4246"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6360"/> <source>Bad signature from </source> <translation>Mauvaise signature de </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4250"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6364"/> <source>Good signature from </source> <translation>Bonne signature de </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4259"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6373"/> <source>usage: export_key_images <filename></source> <translation>usage : export_key_images <fichier></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4264"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6378"/> <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="4274"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4346"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="906"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6391"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6473"/> <source>failed to save file </source> <translation>échec de l'enregistrement du fichier </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4285"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6402"/> <source>Signed key images exported to </source> <translation>Images de clé signées exportées vers </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6416"/> <source>usage: import_key_images <filename></source> <translation>usage : import_key_images <fichier></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4323"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6447"/> <source>usage: export_outputs <filename></source> <translation>usage : export_outputs <fichier></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4357"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6484"/> <source>Outputs exported to </source> <translation>Sorties exportées vers </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4365"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6492"/> <source>usage: import_outputs <filename></source> <translation>usage : import_outputs <fichier></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2246"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3818"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3819"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5219"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5545"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5553"/> <source>amount is wrong: </source> <translation>montant erroné : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2247"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3819"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3820"/> <source>expected number from 0 to </source> <translation>attend un nombre de 0 à </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2378"/> - <source>Money successfully sent, transaction </source> - <translation>Fonds envoyés avec succès, transaction </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3141"/> - <source>no connection to daemon. Please, make sure daemon is running.</source> - <translation>pas de connexion au démon. Veuillez vous assurer que le démon fonctionne.</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2420"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2597"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2858"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3171"/> - <source>not enough outputs for specified mixin_count</source> - <translation>pas assez de sorties pour le mixin spécifié</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2423"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2600"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2861"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3174"/> - <source>output amount</source> - <translation>montant de la sortie</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2423"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2600"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2861"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3174"/> - <source>found outputs to mix</source> - <translation>sorties à mélanger trouvées</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2428"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2605"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2866"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3179"/> - <source>transaction was not constructed</source> - <translation>la transaction n'a pas été construite</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2432"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2609"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2870"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3183"/> - <source>transaction %s was rejected by daemon with status: </source> - <translation>la transaction %s a été rejetée par le démon avec le statut : </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2443"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2620"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2881"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3191"/> - <source>one of destinations is zero</source> - <translation>une des destinations est zéro</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3195"/> - <source>Failed to find a suitable way to split transactions</source> - <translation>Échec de la recherche d'une façon adéquate de scinder les transactions</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2452"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2629"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2890"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3200"/> - <source>unknown transfer error: </source> - <translation>erreur de transfert inconnue : </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2516"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4079"/> <source>Sweeping </source> <translation>Balayage de </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2785"/> - <source>Sweeping %s for a total fee of %s. Is this okay? (Y/Yes/N/No)</source> - <translation>Balayage de %s pour des frais totaux de %s. Est-ce correct ? (Y/Yes/Oui/N/No/Non)</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2555"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2816"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3129"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4559"/> <source>Money successfully sent, transaction: </source> <translation>Fonds envoyés avec succès, transaction : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3022"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4716"/> <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="3047"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4757"/> <source>%s change to %s</source> <translation>%s de monnaie rendue à %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3050"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4760"/> <source>no change</source> <translation>sans monnaie rendue</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1044"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1057"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4826"/> <source>Transaction successfully signed to file </source> <translation>Transaction signée avec succès dans le fichier </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3226"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4876"/> <source>usage: get_tx_key <txid></source> <translation>usage : get_tx_key <ID transaction></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3234"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3266"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3354"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3519"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4122"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4150"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4450"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4884"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4919"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4968"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5050"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5168"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6180"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6208"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6578"/> <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="3245"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4898"/> <source>Tx key: </source> <translation>Clé de transaction : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3250"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4903"/> <source>no tx keys found for this txid</source> <translation>aucune clé de transaction trouvée pour cet ID de transaction</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3339"/> - <source>usage: check_tx_key <txid> <txkey> <address></source> - <translation>usage : check_tx_key <ID transaction> <clé transaction> <adresse></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3361"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3368"/> - <source>failed to parse tx key</source> - <translation>échec de l'analyse de la clé de transaction</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3573"/> - <source>failed to get transaction from daemon</source> - <translation>échec de la récupération de la transaction du démon</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4912"/> + <source>usage: get_tx_proof <txid> <address> [<message>]</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3411"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3584"/> - <source>failed to parse transaction from daemon</source> - <translation>échec de l'analyse de la transaction du démon</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4937"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5147"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5239"/> + <source>signature file saved to: </source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3418"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3591"/> - <source>failed to validate transaction from daemon</source> - <translation>échec de la validation de la transaction du démon</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4939"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5149"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5241"/> + <source>failed to save signature file</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3423"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3596"/> - <source>failed to get the right transaction from daemon</source> - <translation>échec de la récupération de la bonne transaction du démon</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4953"/> + <source>usage: check_tx_key <txid> <txkey> <address></source> + <translation>usage : check_tx_key <ID transaction> <clé transaction> <adresse></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3385"/> - <source>failed to generate key derivation from supplied parameters</source> - <translation>échec de la génération de la dérivation de clé à partir des paramètres fournis</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4976"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4985"/> + <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="3471"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4943"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5031"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5109"/> <source>error: </source> <translation>erreur : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3477"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5007"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5080"/> <source>received</source> <translation>a reçu</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3477"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5007"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5080"/> <source>in txid</source> <translation>dans la transaction</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3481"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5026"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5099"/> <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="3485"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5010"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5083"/> <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="3494"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5016"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5089"/> <source>This transaction has %u confirmations</source> <translation>Cette transaction a %u confirmations</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3498"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5020"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5093"/> <source>WARNING: failed to determine number of confirmations!</source> <translation>ATTENTION : échec de la détermination du nombre de confirmations !</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3661"/> - <source>usage: show_transfers [in|out|all|pending|failed] [<min_height> [<max_height>]]</source> - <translation>usage : show_transfers [in|out|all|pending|failed] [<hauteur_minimum> [<hauteur_maximum>]]</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3700"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5401"/> <source>bad min_height parameter:</source> <translation>mauvais paramètre hauteur_minimum :</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3712"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5413"/> <source>bad max_height parameter:</source> <translation>mauvais paramètre hauteur_maximum :</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3760"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5473"/> <source>in</source> <translation>reçu</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3760"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3798"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5473"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5514"/> <source>out</source> <translation>payé</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3798"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5514"/> <source>failed</source> <translation>échoué</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3798"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5514"/> <source>pending</source> <translation>en attente</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3809"/> - <source>usage: unspent_outputs [<min_amount> <max_amount>]</source> - <translation>usage : unspent_outputs [<montant_minimum> <montant_maximum>]</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3824"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5560"/> <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="3856"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5592"/> <source> Amount: </source> <translation> Montant : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3856"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5592"/> <source>, number of keys: </source> <translation>, nombre de clés : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3861"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5597"/> <source> </source> <translation> </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3866"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5602"/> <source> Min block height: </source> <translation> Hauteur de bloc minimum : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3867"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5603"/> <source> Max block height: </source> <translation> Hauteur de bloc maximum : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3868"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5604"/> <source> Min amount found: </source> <translation> Montant minimum trouvé : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3869"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5605"/> <source> Max amount found: </source> <translation> Montant maximum trouvé : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3870"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5606"/> <source> Total count: </source> <translation> Compte total : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3910"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5646"/> <source> Bin size: </source> <translation> Taille de classe : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3911"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5647"/> <source> Outputs per *: </source> <translation> Sorties par * : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3913"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5649"/> <source>count ^ </source> @@ -2338,310 +3489,409 @@ Sorties par * : </translation> </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3915"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5651"/> <source> |</source> <translation> |</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3917"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5653"/> <source> +</source> <translation> +</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3917"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5653"/> <source>+--> block height </source> <translation>+--> hauteur de bloc </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3918"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5654"/> <source> ^</source> <translation> ^</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3918"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5654"/> <source>^ </source> <translation>^ </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3919"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5655"/> <source> </source> <translation> </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3969"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5696"/> <source>wallet</source> <translation>portefeuille</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="420"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4000"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="666"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6057"/> <source>Random payment ID: </source> <translation>ID de paiement aléatoire : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4001"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6058"/> <source>Matching integrated address: </source> <translation>Adresse intégrée correspondante : </translation> </message> </context> <context> + <name>genms</name> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="70"/> + <source>Base filename (-1, -2, etc suffixes will be appended as needed)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="71"/> + <source>Give threshold and participants at once as M/N</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="72"/> + <source>How many participants wil share parts of the multisig wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="73"/> + <source>How many signers are required to sign a valid transaction</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="74"/> + <source>Create testnet multisig wallets</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="81"/> + <source>Generating %u %u/%u multisig wallets</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="138"/> + <source>Error verifying multisig extra info</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="146"/> + <source>Error finalizing multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="153"/> + <source>Generated multisig wallets for address </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="157"/> + <source>Error creating multisig wallets: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="176"/> + <source>This program generates a set of multisig wallets - use this simpler scheme only if all the participants trust each other</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="194"/> + <source>Error: expected N/M, but got: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="202"/> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="211"/> + <source>Error: either --scheme or both of --threshold and --participants may be given</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="218"/> + <source>Error: expected N > 1 and N <= M, but got N==%u and M==%d</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="227"/> + <source>Error: --filename-base is required</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="233"/> + <source>Error: unsupported scheme: only N/N and N-1/N are supported</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>sw</name> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="116"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="115"/> <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="117"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="116"/> <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="117"/> + <source>Generate deterministic wallet from spend key</source> + <translation type="unfinished"></translation> + </message> + <message> <location filename="../src/simplewallet/simplewallet.cpp" line="118"/> <source>Generate wallet from private keys</source> <translation>Générer un portefeuille à partir de clés privées</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="120"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="119"/> + <source>Generate a master wallet from multisig wallet keys</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="121"/> + <source>Language for mnemonic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="122"/> <source>Specify Electrum seed for wallet recovery/creation</source> <translation>Spécifier la graine Electrum pour la récupération/création d'un portefeuille</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="121"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="123"/> <source>Recover wallet using Electrum-style mnemonic seed</source> <translation>Récupérer un portefeuille en utilisant une graine mnémonique de style Electrum</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="122"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="124"/> + <source>Recover multisig wallet using Electrum-style mnemonic seed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="125"/> <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="123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="126"/> <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/simplewallet/simplewallet.cpp" line="124"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="127"/> <source>Allow communicating with a daemon that uses a different RPC version</source> <translation>Autoriser la communication avec un démon utilisant une version de RPC différente</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="125"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="128"/> <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="136"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="129"/> + <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="171"/> <source>daemon is busy. Please try again later.</source> <translation>le démon est occupé. Veuillez réessayer plus tard.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="145"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="180"/> <source>possibly lost connection to daemon</source> <translation>connexion avec le démon peut-être perdue</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="226"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="197"/> <source>Error: </source> <translation>Erreur : </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4614"/> - <source>Failed to initialize wallet</source> - <translation>Échec de l'initialisation du portefeuille</translation> - </message> -</context> -<context> - <name>tools::dns_utils</name> - <message> - <location filename="../src/common/dns_utils.cpp" line="430"/> - <source>DNSSEC validation passed</source> - <translation>validation DNSSEC réussie</translation> - </message> - <message> - <location filename="../src/common/dns_utils.cpp" line="434"/> - <source>WARNING: DNSSEC validation was unsuccessful, this address may not be correct!</source> - <translation>ATTENTION : validation DNSSEC échouée, cette adresse pourrait ne pas être correcte !</translation> - </message> - <message> - <location filename="../src/common/dns_utils.cpp" line="437"/> - <source>For URL: </source> - <translation>Pour l'URL : </translation> - </message> - <message> - <location filename="../src/common/dns_utils.cpp" line="439"/> - <source> Monero Address = </source> - <translation> Adresse Monero = </translation> - </message> - <message> - <location filename="../src/common/dns_utils.cpp" line="441"/> - <source>Is this OK? (Y/n) </source> - <translation>Est-ce correct ? (Y/n) </translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="6787"/> + <source>This is the command line monero wallet. It needs to connect to a monero +daemon to work correctly.</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/common/dns_utils.cpp" line="451"/> - <source>you have cancelled the transfer request</source> - <translation>vous avez annulé la requête de transfert</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="6801"/> + <source>Failed to initialize wallet</source> + <translation>Échec de l'initialisation du portefeuille</translation> </message> </context> <context> <name>tools::wallet2</name> <message> - <location filename="../src/wallet/wallet2.cpp" line="106"/> + <location filename="../src/wallet/wallet2.cpp" line="113"/> <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="107"/> + <location filename="../src/wallet/wallet2.cpp" line="114"/> <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="460"/> - <source>Wallet password</source> - <translation>Mot de passe du portefeuille</translation> - </message> - <message> - <location filename="../src/wallet/wallet2.cpp" line="109"/> + <location filename="../src/wallet/wallet2.cpp" line="116"/> <source>Wallet password file</source> <translation>Fichier mot de passe du portefeuille</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="110"/> + <location filename="../src/wallet/wallet2.cpp" line="117"/> <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="112"/> + <location filename="../src/wallet/wallet2.cpp" line="119"/> <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="113"/> + <location filename="../src/wallet/wallet2.cpp" line="120"/> <source>Restricts to view-only commands</source> <translation>Restreindre aux commandes en lecture-seule</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="152"/> + <location filename="../src/wallet/wallet2.cpp" line="168"/> <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="188"/> + <location filename="../src/wallet/wallet2.cpp" line="204"/> <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="204"/> + <location filename="../src/wallet/wallet2.cpp" line="217"/> <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="460"/> - <source>Enter new password for the wallet</source> - <translation>Entrez le mot de passe du portefeuille</translation> - </message> - <message> - <location filename="../src/wallet/wallet2.cpp" line="464"/> - <source>failed to read wallet password</source> - <translation>échec de la lecture du mot de passe du portefeuille</translation> - </message> - <message> - <location filename="../src/wallet/wallet2.cpp" line="227"/> + <location filename="../src/wallet/wallet2.cpp" line="240"/> <source>Failed to load file </source> <translation>Échec du chargement du fichier </translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="108"/> + <location filename="../src/wallet/wallet2.cpp" line="115"/> <source>Wallet password (escape/quote as needed)</source> <translation>Mot de passe du portefeuille (échapper/citer si nécessaire)</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="111"/> + <location filename="../src/wallet/wallet2.cpp" line="118"/> <source>Specify username[:password] for daemon RPC client</source> <translation>Spécifier le nom_utilisateur:[mot_de_passe] pour le client RPC du démon</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="233"/> + <location filename="../src/wallet/wallet2.cpp" line="224"/> + <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="246"/> <source>Failed to parse JSON</source> <translation>Échec de l'analyse JSON</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="240"/> + <location filename="../src/wallet/wallet2.cpp" line="253"/> <source>Version %u too new, we can only grok up to %u</source> <translation>Version %u trop récente, on comprend au mieux %u</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="258"/> + <location filename="../src/wallet/wallet2.cpp" line="269"/> <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="264"/> - <location filename="../src/wallet/wallet2.cpp" line="331"/> - <location filename="../src/wallet/wallet2.cpp" line="373"/> + <location filename="../src/wallet/wallet2.cpp" line="274"/> + <location filename="../src/wallet/wallet2.cpp" line="339"/> + <location filename="../src/wallet/wallet2.cpp" line="380"/> <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="276"/> + <location filename="../src/wallet/wallet2.cpp" line="285"/> <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="282"/> - <location filename="../src/wallet/wallet2.cpp" line="343"/> - <location filename="../src/wallet/wallet2.cpp" line="394"/> + <location filename="../src/wallet/wallet2.cpp" line="290"/> + <location filename="../src/wallet/wallet2.cpp" line="349"/> + <location filename="../src/wallet/wallet2.cpp" line="405"/> <source>failed to verify spend key secret key</source> <translation>échec de la vérification de la clé secrète de dépense</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="295"/> + <location filename="../src/wallet/wallet2.cpp" line="302"/> <source>Electrum-style word list failed verification</source> <translation>Échec de la vérification de la liste de mots de style Electrum</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="306"/> - <source>At least one of Electrum-style word list and private view key must be specified</source> - <translation>Au moins une des listes de mots de style Electrum ou clé privée d'audit doit être spécifiée</translation> + <location filename="../src/wallet/wallet2.cpp" line="319"/> + <source>At least one of Electrum-style word list and private view key and private spend key must be specified</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="311"/> + <location filename="../src/wallet/wallet2.cpp" line="323"/> <source>Both Electrum-style word list and private key(s) specified</source> <translation>Liste de mots de style Electrum et clé privée spécifiées en même temps</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="324"/> + <location filename="../src/wallet/wallet2.cpp" line="333"/> <source>invalid address</source> <translation>adresse invalide</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="335"/> + <location filename="../src/wallet/wallet2.cpp" line="342"/> <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="347"/> + <location filename="../src/wallet/wallet2.cpp" line="352"/> <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="356"/> + <location filename="../src/wallet/wallet2.cpp" line="360"/> <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="403"/> + <location filename="../src/wallet/wallet2.cpp" line="392"/> + <source>failed to parse address: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="398"/> + <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="413"/> <source>failed to generate new wallet: </source> <translation>échec de la génération du nouveau portefeuille : </translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="5205"/> + <location filename="../src/wallet/wallet2.cpp" line="2813"/> + <location filename="../src/wallet/wallet2.cpp" line="2873"/> + <location filename="../src/wallet/wallet2.cpp" line="2952"/> + <location filename="../src/wallet/wallet2.cpp" line="2998"/> + <location filename="../src/wallet/wallet2.cpp" line="3089"/> + <location filename="../src/wallet/wallet2.cpp" line="3189"/> + <location filename="../src/wallet/wallet2.cpp" line="3599"/> + <location filename="../src/wallet/wallet2.cpp" line="3955"/> + <source>Primary account</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="7914"/> + <source>No funds received in this tx.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="8607"/> <source>failed to read file </source> <translation>échec de la lecture du fichier </translation> </message> @@ -2649,94 +3899,125 @@ Sorties par * : </translation> <context> <name>tools::wallet_rpc_server</name> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="151"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="160"/> <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/wallet_rpc_server.cpp" line="171"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="175"/> + <source>Failed to create directory </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="177"/> + <source>Failed to create directory %s: %s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="188"/> <source>Cannot specify --</source> <translation>Impossible de spécifier --</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="171"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="188"/> <source> and --</source> <translation> et --</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="198"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="207"/> <source>Failed to create file </source> <translation>Échec de la création du fichier </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="198"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="207"/> <source>. Check permissions or remove file</source> <translation>. Vérifiez les permissions ou supprimez le fichier</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="209"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="217"/> <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="212"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="220"/> <source>RPC username/password is stored in file </source> <translation>nom_utilisateur/mot_de_passe RPC sauvegardé dans le fichier </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1748"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="443"/> + <source>Tag %s is unregistered.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2435"/> + <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="2870"/> + <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="2893"/> <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="1760"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2905"/> <source>Must specify --wallet-file or --generate-from-json or --wallet-dir</source> <translation>--wallet-file, --generate-from-json ou --wallet-dir doit être spécifié</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1764"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2909"/> <source>Loading wallet...</source> <translation>Chargement du portefeuille...</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1789"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1814"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2942"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2975"/> <source>Saving wallet...</source> <translation>Sauvegarde du portefeuille...</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1791"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1816"/> - <source>Saved ok</source> - <translation>Sauvegarde réussie</translation> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2944"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2977"/> + <source>Successfully saved</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1794"/> - <source>Loaded ok</source> - <translation>Chargement OK</translation> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2947"/> + <source>Successfully loaded</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1798"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2951"/> <source>Wallet initialization failed: </source> <translation>Échec de l'initialisation du portefeuille : </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1805"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2958"/> <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="1809"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2962"/> <source>Starting wallet RPC server</source> <translation>Démarrage du serveur RPC du portefeuille</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1811"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2969"/> + <source>Failed to run wallet: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2972"/> <source>Stopped wallet RPC server</source> <translation>Arrêt du serveur RPC du portefeuille</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1820"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2981"/> <source>Failed to save wallet: </source> <translation>Échec de la sauvegarde du portefeuille : </translation> </message> @@ -2744,58 +4025,65 @@ Sorties par * : </translation> <context> <name>wallet_args</name> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1715"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4580"/> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6760"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2856"/> <source>Wallet options</source> <translation>Options du portefeuille</translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="59"/> + <location filename="../src/wallet/wallet_args.cpp" line="73"/> <source>Generate wallet from JSON format file</source> <translation>Générer un portefeuille à partir d'un fichier au format JSON</translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="63"/> + <location filename="../src/wallet/wallet_args.cpp" line="77"/> <source>Use wallet <arg></source> <translation>Utiliser le portefeuille <arg></translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="87"/> + <location filename="../src/wallet/wallet_args.cpp" line="104"/> <source>Max number of threads to use for a parallel job</source> <translation>Nombre maximum de threads à utiliser pour les travaux en parallèle</translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="88"/> + <location filename="../src/wallet/wallet_args.cpp" line="105"/> <source>Specify log file</source> <translation>Spécifier le fichier journal</translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="89"/> + <location filename="../src/wallet/wallet_args.cpp" line="106"/> <source>Config file</source> <translation>Fichier de configuration</translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="98"/> + <location filename="../src/wallet/wallet_args.cpp" line="115"/> <source>General options</source> <translation>Options générales</translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="128"/> + <location filename="../src/wallet/wallet_args.cpp" line="138"/> + <source>This is the command line 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_args.cpp" line="161"/> <source>Can't find config file </source> <translation>Impossible de trouver le fichier de configuration </translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="172"/> + <location filename="../src/wallet/wallet_args.cpp" line="195"/> <source>Logging to: </source> <translation>Journalisation dans : </translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="173"/> + <location filename="../src/wallet/wallet_args.cpp" line="197"/> <source>Logging to %s</source> <translation>Journalisation dans %s</translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="153"/> + <location filename="../src/wallet/wallet_args.cpp" line="140"/> <source>Usage:</source> <translation>Usage :</translation> </message> diff --git a/translations/monero_it.ts b/translations/monero_it.ts index d0cc40304..9a00f9d51 100644 --- a/translations/monero_it.ts +++ b/translations/monero_it.ts @@ -4,24 +4,24 @@ <context> <name>Monero::AddressBookImpl</name> <message> - <location filename="../src/wallet/api/address_book.cpp" line="55"/> + <location filename="../src/wallet/api/address_book.cpp" line="53"/> <source>Invalid destination address</source> <translation>Indirizzo destinatario non valido</translation> </message> <message> - <location filename="../src/wallet/api/address_book.cpp" line="65"/> + <location filename="../src/wallet/api/address_book.cpp" line="63"/> <source>Invalid payment ID. Short payment ID should only be used in an integrated address</source> <translation>ID pagamento non valido. Il pagamento ID corto dovrebbe essere usato solo in un indirizzo integrato</translation> </message> <message> - <location filename="../src/wallet/api/address_book.cpp" line="72"/> + <location filename="../src/wallet/api/address_book.cpp" line="70"/> <source>Invalid payment ID</source> <translation>ID pagamento non valido</translation> </message> <message> - <location filename="../src/wallet/api/address_book.cpp" line="79"/> - <source>Integrated address and long payment id can't be used at the same time</source> - <translation>Indirizzo integrato e ID pagamento lungo non possono essere usati nello stesso momento</translation> + <location filename="../src/wallet/api/address_book.cpp" line="77"/> + <source>Integrated address and long payment ID can't be used at the same time</source> + <translation type="unfinished"></translation> </message> </context> <context> @@ -37,32 +37,32 @@ <translation>Impossibile scrivere transazione/i su file</translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="114"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="115"/> <source>daemon is busy. Please try again later.</source> <translation>Il daemon è impegnato. Prova più tardi.</translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="117"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="118"/> <source>no connection to daemon. Please make sure daemon is running.</source> <translation>Nessuna connessione con il daemon. Controlla che sia operativo.</translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="121"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="122"/> <source>transaction %s was rejected by daemon with status: </source> <translation>La transazione %s è stata respinta dal daemon con status: </translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="126"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="127"/> <source>. Reason: </source> <translation>. Motivo: </translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="128"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="129"/> <source>Unknown exception: </source> <translation>Eccezione sconosciuta: </translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="131"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="132"/> <source>Unhandled exception</source> <translation>Eccezione non gestita</translation> </message> @@ -81,323 +81,324 @@ <translation>Firma transazione fallita</translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="135"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="168"/> <source>Claimed change does not go to a paid address</source> <translation>Il cambiamento richiesto non porta a un indirizzo pagato</translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="141"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="174"/> <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/wallet/api/unsigned_transaction.cpp" line="151"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="184"/> <source>Change goes to more than one address</source> <translation>Il cambiamento ha effetto su più di un indirizzo</translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="164"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="197"/> <source>sending %s to %s</source> <translation>inviando %s a %s</translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="170"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="203"/> <source>with no destinations</source> <translation>senza destinazioni</translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="176"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="209"/> <source>%s change to %s</source> <translation>%s cambia in %s</translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="179"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="212"/> <source>no change</source> <translation>nessuna modifica</translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="181"/> - <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min mixin %lu. %s</source> - <translation>Caricato %lu transazioni, per %s, commissione %s, %s, %s, %s, con mixin %lu. %s</translation> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="214"/> + <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min ring size %lu. %s</source> + <translation type="unfinished"></translation> </message> </context> <context> <name>Monero::WalletImpl</name> <message> - <location filename="../src/wallet/api/wallet.cpp" line="942"/> + <location filename="../src/wallet/api/wallet.cpp" line="1111"/> <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/wallet/api/wallet.cpp" line="952"/> + <location filename="../src/wallet/api/wallet.cpp" line="1121"/> <source>Failed to add short payment id: </source> <translation>Impossibile aggiungere id pagamento corto</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="978"/> - <location filename="../src/wallet/api/wallet.cpp" line="1072"/> + <location filename="../src/wallet/api/wallet.cpp" line="1154"/> + <location filename="../src/wallet/api/wallet.cpp" line="1258"/> <source>daemon is busy. Please try again later.</source> <translation>il daemon è impegnato. Prova più tardi</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="981"/> - <location filename="../src/wallet/api/wallet.cpp" line="1075"/> + <location filename="../src/wallet/api/wallet.cpp" line="1157"/> + <location filename="../src/wallet/api/wallet.cpp" line="1261"/> <source>no connection to daemon. Please make sure daemon is running.</source> <translation>nessuna connessione con il daemon. Accertati che sia operativo</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="984"/> - <location filename="../src/wallet/api/wallet.cpp" line="1078"/> + <location filename="../src/wallet/api/wallet.cpp" line="1160"/> + <location filename="../src/wallet/api/wallet.cpp" line="1264"/> <source>RPC error: </source> <translation>errore RPC: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1081"/> + <location filename="../src/wallet/api/wallet.cpp" line="1197"/> + <location filename="../src/wallet/api/wallet.cpp" line="1301"/> + <source>not enough outputs for specified ring size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="1199"/> + <location filename="../src/wallet/api/wallet.cpp" line="1303"/> + <source>found outputs to use</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="1201"/> + <source>Please sweep unmixable outputs.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="1267"/> <source>failed to get random outputs to mix</source> <translation>impossibile recuperare outputs random da mixare</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="994"/> - <location filename="../src/wallet/api/wallet.cpp" line="1088"/> + <location filename="../src/wallet/api/wallet.cpp" line="1170"/> + <location filename="../src/wallet/api/wallet.cpp" line="1274"/> <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="403"/> + <location filename="../src/wallet/api/wallet.cpp" line="474"/> <source>failed to parse address</source> <translation>parsing indirizzo fallito</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="415"/> + <location filename="../src/wallet/api/wallet.cpp" line="486"/> <source>failed to parse secret spend key</source> <translation>impossibile fare il parsing della chiave segreta di spesa</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="425"/> + <location filename="../src/wallet/api/wallet.cpp" line="496"/> <source>No view key supplied, cancelled</source> <translation>Non è stata fornita nessuna chiave di visualizzazione</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="432"/> + <location filename="../src/wallet/api/wallet.cpp" line="503"/> <source>failed to parse secret view key</source> <translation>impossibile fare il parsing della chiave segreta di visualizzazione</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="442"/> + <location filename="../src/wallet/api/wallet.cpp" line="513"/> <source>failed to verify secret spend key</source> <translation>impossibile verificare chiave segreta di spesa</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="447"/> + <location filename="../src/wallet/api/wallet.cpp" line="518"/> <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="453"/> + <location filename="../src/wallet/api/wallet.cpp" line="524"/> <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="458"/> + <location filename="../src/wallet/api/wallet.cpp" line="529"/> <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="477"/> + <location filename="../src/wallet/api/wallet.cpp" line="548"/> <source>failed to generate new wallet: </source> <translation>impossibile generare nuovo portafoglio: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="799"/> + <location filename="../src/wallet/api/wallet.cpp" line="773"/> + <source>Failed to send import wallet request</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="919"/> <source>Failed to load unsigned transactions</source> <translation>Caricamento transazioni non firmate fallito</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="820"/> + <location filename="../src/wallet/api/wallet.cpp" line="940"/> <source>Failed to load transaction from file</source> <translation>Caricamento transazione da file fallito</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="838"/> + <location filename="../src/wallet/api/wallet.cpp" line="958"/> <source>Wallet is view only</source> <translation>Il portafoglio è di tipo solo visualizzazione</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="847"/> + <location filename="../src/wallet/api/wallet.cpp" line="967"/> <source>failed to save file </source> <translation>impossibile salvare il file </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="874"/> + <location filename="../src/wallet/api/wallet.cpp" line="986"/> + <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="999"/> <source>Failed to import key images: </source> <translation>Impossibile importare immagini chiave: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="987"/> + <location filename="../src/wallet/api/wallet.cpp" line="1032"/> + <source>Failed to get subaddress label: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="1046"/> + <source>Failed to set subaddress label: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="1163"/> <source>failed to get random outputs to mix: %s</source> <translation>impossibile recuperare outputs casuali da mixare: %s</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1003"/> - <location filename="../src/wallet/api/wallet.cpp" line="1097"/> - <source>not enough money to transfer, available only %s, transaction amount %s = %s + %s (fee)</source> - <translation>non hai abbastanza fondi da trasferire, disponibili solo %s, ammontare transazione %s = %s + %s (commissione)</translation> + <location filename="../src/wallet/api/wallet.cpp" line="1179"/> + <location filename="../src/wallet/api/wallet.cpp" line="1283"/> + <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="1012"/> - <location filename="../src/wallet/api/wallet.cpp" line="1106"/> - <source>not enough outputs for specified mixin_count</source> - <translation>outputs insufficienti per il numero di mixaggi specificato </translation> + <location filename="../src/wallet/api/wallet.cpp" line="1188"/> + <location filename="../src/wallet/api/wallet.cpp" line="1292"/> + <source>not enough money to transfer, available only %s, transaction amount %s = %s + %s (fee)</source> + <translation>non hai abbastanza fondi da trasferire, disponibili solo %s, ammontare transazione %s = %s + %s (commissione)</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1014"/> - <location filename="../src/wallet/api/wallet.cpp" line="1108"/> + <location filename="../src/wallet/api/wallet.cpp" line="1199"/> + <location filename="../src/wallet/api/wallet.cpp" line="1303"/> <source>output amount</source> <translation>ammontare output</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1014"/> - <location filename="../src/wallet/api/wallet.cpp" line="1108"/> - <source>found outputs to mix</source> - <translation>trovati outputs da mixare</translation> - </message> - <message> - <location filename="../src/wallet/api/wallet.cpp" line="1019"/> - <location filename="../src/wallet/api/wallet.cpp" line="1113"/> + <location filename="../src/wallet/api/wallet.cpp" line="1205"/> + <location filename="../src/wallet/api/wallet.cpp" line="1308"/> <source>transaction was not constructed</source> <translation>transazione non costruita</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1023"/> - <location filename="../src/wallet/api/wallet.cpp" line="1117"/> + <location filename="../src/wallet/api/wallet.cpp" line="1209"/> + <location filename="../src/wallet/api/wallet.cpp" line="1312"/> <source>transaction %s was rejected by daemon with status: </source> <translation>la transazione %s è stata rifiutata dal daemon con status: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1030"/> - <location filename="../src/wallet/api/wallet.cpp" line="1124"/> + <location filename="../src/wallet/api/wallet.cpp" line="1216"/> + <location filename="../src/wallet/api/wallet.cpp" line="1319"/> <source>one of destinations is zero</source> <translation>una delle destinazioni è zero</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1033"/> - <location filename="../src/wallet/api/wallet.cpp" line="1127"/> + <location filename="../src/wallet/api/wallet.cpp" line="1219"/> + <location filename="../src/wallet/api/wallet.cpp" line="1322"/> <source>failed to find a suitable way to split transactions</source> <translation>impossibile trovare un modo per dividere le transazioni</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1036"/> - <location filename="../src/wallet/api/wallet.cpp" line="1130"/> + <location filename="../src/wallet/api/wallet.cpp" line="1222"/> + <location filename="../src/wallet/api/wallet.cpp" line="1325"/> <source>unknown transfer error: </source> <translation>errore trasferimento sconosciuto: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1039"/> - <location filename="../src/wallet/api/wallet.cpp" line="1133"/> + <location filename="../src/wallet/api/wallet.cpp" line="1225"/> + <location filename="../src/wallet/api/wallet.cpp" line="1328"/> <source>internal error: </source> <translation>errore interno: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1042"/> - <location filename="../src/wallet/api/wallet.cpp" line="1136"/> + <location filename="../src/wallet/api/wallet.cpp" line="1228"/> + <location filename="../src/wallet/api/wallet.cpp" line="1331"/> <source>unexpected error: </source> <translation>errore inaspettato: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1045"/> - <location filename="../src/wallet/api/wallet.cpp" line="1139"/> + <location filename="../src/wallet/api/wallet.cpp" line="1231"/> + <location filename="../src/wallet/api/wallet.cpp" line="1334"/> <source>unknown error</source> <translation>errore sconosciuto</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1419"/> - <source>Rescan spent can only be used with a trusted daemon</source> - <translation>"Riscannerizza spesi" può essere utilizzato solo da un daemon fidato</translation> - </message> -</context> -<context> - <name>Monero::WalletManagerImpl</name> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="192"/> - <source>failed to parse txid</source> - <translation>analisi txid fallita</translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="199"/> - <location filename="../src/wallet/api/wallet_manager.cpp" line="206"/> - <source>failed to parse tx key</source> - <translation>parsing chiave tx fallito</translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="217"/> - <source>failed to parse address</source> - <translation>parsing indirizzo fallito</translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="227"/> - <source>failed to get transaction from daemon</source> - <translation>impossibile recuperare la transazione dal daemon</translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="238"/> - <source>failed to parse transaction from daemon</source> - <translation>impossibile fare il parsing della transazione dal daemon</translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="245"/> - <source>failed to validate transaction from daemon</source> - <translation>convalida transazione dal daemon fallita</translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="250"/> - <source>failed to get the right transaction from daemon</source> - <translation>impossibile recuperare la giusta transazione dal daemon</translation> + <location filename="../src/wallet/api/wallet.cpp" line="1412"/> + <location filename="../src/wallet/api/wallet.cpp" line="1441"/> + <location filename="../src/wallet/api/wallet.cpp" line="1494"/> + <location filename="../src/wallet/api/wallet.cpp" line="1525"/> + <location filename="../src/wallet/api/wallet.cpp" line="1556"/> + <location filename="../src/wallet/api/wallet.cpp" line="1579"/> + <source>Failed to parse txid</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="257"/> - <source>failed to generate key derivation from supplied parameters</source> - <translation>impossibile generare derivazione chiave dai parametri forniti</translation> + <location filename="../src/wallet/api/wallet.cpp" line="1430"/> + <source>no tx keys found for this txid</source> + <translation type="unfinished">nessuna chiave tx trovata per questo txid</translation> </message> <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="313"/> - <source>error: </source> - <translation>errore: </translation> + <location filename="../src/wallet/api/wallet.cpp" line="1450"/> + <location filename="../src/wallet/api/wallet.cpp" line="1460"/> + <source>Failed to parse tx key</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="319"/> - <source>received</source> - <translation>ricevuto</translation> + <location filename="../src/wallet/api/wallet.cpp" line="1470"/> + <location filename="../src/wallet/api/wallet.cpp" line="1502"/> + <location filename="../src/wallet/api/wallet.cpp" line="1533"/> + <location filename="../src/wallet/api/wallet.cpp" line="1621"/> + <source>Failed to parse address</source> + <translation type="unfinished">Parsing indirizzo fallito</translation> </message> <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="319"/> - <source>in txid</source> - <translation>in txid</translation> + <location filename="../src/wallet/api/wallet.cpp" line="1627"/> + <source>Address must not be a subaddress</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="323"/> - <source>received nothing in txid</source> - <translation>nulla ricevuto in txid</translation> + <location filename="../src/wallet/api/wallet.cpp" line="1849"/> + <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> </context> <context> <name>Wallet</name> <message> - <location filename="../src/wallet/api/wallet.cpp" line="212"/> + <location filename="../src/wallet/api/wallet.cpp" line="246"/> <source>Failed to parse address</source> <translation>Parsing indirizzo fallito</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="219"/> + <location filename="../src/wallet/api/wallet.cpp" line="253"/> <source>Failed to parse key</source> <translation>Parsing chiave fallito</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="227"/> + <location filename="../src/wallet/api/wallet.cpp" line="261"/> <source>failed to verify key</source> <translation>verifica chiave fallita</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="237"/> + <location filename="../src/wallet/api/wallet.cpp" line="271"/> <source>key does not match address</source> <translation>la chiave non corrisponde all'indirizzo</translation> </message> @@ -405,2212 +406,3481 @@ <context> <name>command_line</name> <message> - <location filename="../src/common/command_line.cpp" line="76"/> + <location filename="../src/common/command_line.cpp" line="57"/> <source>yes</source> <translation>sì</translation> </message> + <message> + <location filename="../src/common/command_line.cpp" line="71"/> + <source>no</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>cryptonote::rpc_args</name> <message> - <location filename="../src/rpc/rpc_args.cpp" line="38"/> + <location filename="../src/rpc/rpc_args.cpp" line="40"/> <source>Specify IP to bind RPC server</source> <translation>Specificare IP da associare al server RPC</translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="39"/> + <location filename="../src/rpc/rpc_args.cpp" line="41"/> <source>Specify username[:password] required for RPC server</source> <translation>Specifica username[:password] richiesta per server RPC</translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="40"/> + <location filename="../src/rpc/rpc_args.cpp" line="42"/> <source>Confirm rpc-bind-ip value is NOT a loopback (local) IP</source> <translation>Conferma valore rpc-bind-ip NON è un loopback IP (locale)</translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="66"/> + <location filename="../src/rpc/rpc_args.cpp" line="43"/> + <source>Specify a comma separated list of origins to allow cross origin resource sharing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/rpc/rpc_args.cpp" line="70"/> <source>Invalid IP address given for --</source> <translation>Indirizzo IP non valido dato per --</translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="74"/> + <location filename="../src/rpc/rpc_args.cpp" line="78"/> <source> permits inbound unencrypted external connections. Consider SSH tunnel or SSL proxy instead. Override with --</source> <translation>permette connessioni esterne non criptate in entrata. Considera in alternativa un tunnel SSH o un proxy SSL. Sovrascrivi con --</translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="89"/> + <location filename="../src/rpc/rpc_args.cpp" line="95"/> <source>Username specified with --</source> <translation>Nome utente specificato con --</translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="89"/> + <location filename="../src/rpc/rpc_args.cpp" line="95"/> + <location filename="../src/rpc/rpc_args.cpp" line="105"/> <source> cannot be empty</source> <translation> non può essere vuoto</translation> </message> + <message> + <location filename="../src/rpc/rpc_args.cpp" line="105"/> + <source> requires RFC server password --</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>cryptonote::simple_wallet</name> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="290"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="479"/> <source>Commands: </source> <translation>Comandi: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1557"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3008"/> <source>failed to read wallet password</source> <translation>impossibile leggere la password del portafoglio</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1325"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2699"/> <source>invalid password</source> <translation>password non valida</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="697"/> - <source>start_mining [<number_of_threads>] - Start mining in daemon</source> - <translation>start_mining [<number_of_threads>] - Avvia mining nel daemon</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="698"/> - <source>Stop mining in daemon</source> - <translation>Interrompi mining nel daemon</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="699"/> - <source>Save current blockchain data</source> - <translation>Salva dati correnti blockchain</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="701"/> - <source>Show current wallet balance</source> - <translation>Mostra bilancio portafoglio attuale</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="704"/> - <source>Show blockchain height</source> - <translation>Mostra "altezza" blockchain</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="715"/> - <source>Show current wallet public address</source> - <translation>Mostra indirizzo pubblico del portafoglio corrente</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="744"/> - <source>Show this help</source> - <translation>Mostra questo aiuto</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="788"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1905"/> <source>set seed: needs an argument. available options: language</source> <translation>imposta seed: richiede una definizione. opzioni disponibili: lingua</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="811"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1933"/> <source>set: unrecognized argument(s)</source> <translation>imposta: definizione/i non riconosciuta/e</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1442"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2869"/> <source>wallet file path not valid: </source> <translation>percorso file portafoglio non valido: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="863"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1987"/> <source>Attempting to generate or restore wallet, but specified file(s) exist. Exiting to not risk overwriting.</source> <translation>Sto tentando di generare o ripristinare il portafoglio, ma i(l) file specificato/i esiste/esistono già. Sto uscendo per non rischiare di sovrascrivere.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="416"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="662"/> <source>usage: payment_id</source> <translation>uso: payment_id</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="710"/> - <source>sweep_below <amount_threshold> [mixin] address [<payment_id>] - Send all unlocked outputs below the threshold to an address</source> - <translation>sweep_below <amount_threshold> [mixin] address [<payment_id>] - Invia tutti gli outputs sbloccati sotto la soglia specificata a un indirizzo</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="727"/> - <source>Generate a signature to prove payment to <address> in <txid> using the transaction secret key (r) without revealing it</source> - <translation>Genera una firma per provare un pagamento a <address> in <txid> usando la chiave di transazione (r) senza rivelarla</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="728"/> - <source>Check tx proof for payment going to <address> in <txid></source> - <translation>Verifica prova tx per pagamento inviato a <indirizzo> in <txid></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="743"/> - <source>Generate a new random full size payment id - these will be unencrypted on the blockchain, see integrated_address for encrypted short payment ids</source> - <translation>Genera un nuovo id pagamento casuale di dimensione completa - queste non saranno criptate nel blockchain, considera integrated_address per payment ids corti crittati</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="774"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1891"/> <source>needs an argument</source> <translation>ha bisogno di un argomento</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="797"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="798"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="799"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="801"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="804"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="805"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="809"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1914"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1915"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1916"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1918"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1921"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1922"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1926"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1927"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1929"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1931"/> <source>0 or 1</source> <translation>0 o 1</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="800"/> - <source>integer >= 2</source> - <translation>integrale >= 2</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="803"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1920"/> <source>0, 1, 2, 3, or 4</source> <translation>0, 1, 2, 3, o 4</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="807"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1924"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1928"/> <source>unsigned integer</source> <translation>integrale non firmato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="912"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2041"/> <source>NOTE: the following 25 words 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>ATTENZIONE: le seguenti 25 parole possono essere usate per ripristinare il tuo portafoglio. Scrivile e conservale da qualche parte al sicuro.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="973"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2121"/> <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="1261"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2635"/> <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="1269"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2643"/> <source>Daemon uses a different RPC major version (%u) than the wallet (%u): %s. Either update one of them, or use --allow-mismatched-daemon-version.</source> <translation>Il daemon usa una versione principale RPC (%u) diversa da quella del portafoglio (%u): %s. Aggiorna una delle due, o usa --allow-mismatched-daemon-version.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1288"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2662"/> <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="1297"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2671"/> <source>Enter the number corresponding to the language of your choice: </source> <translation>Inserisci il numero corrispondente al linguaggio da te scelto: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1354"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2737"/> <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> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1368"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1425"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2751"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2809"/> <source>Generated new wallet: </source> <translation>Nuovo portafoglio generato: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1374"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1430"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2757"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2814"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2858"/> <source>failed to generate new wallet: </source> <translation>impossibile generare nuovo portafoglio: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1457"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2887"/> <source>Opened watch-only wallet</source> <translation>Portafoglio solo-vista aperto</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1457"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2891"/> <source>Opened wallet</source> <translation>Portafoglio aperto</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1466"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2901"/> <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> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1481"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2916"/> <source>You had been using a deprecated version of the wallet. Your wallet file format is being upgraded now. </source> <translation>Stai utilizzando una versione disapprovata del portafoglio. Il formato del tuo portafoglio sta venendo aggiornato adesso.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1489"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2924"/> <source>failed to load wallet: </source> <translation>impossibile caricare portafoglio: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1497"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2941"/> <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> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1541"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2986"/> <source>Wallet data saved</source> <translation>Dati del portafoglio salvati</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1613"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3072"/> <source>Mining started in daemon</source> <translation>Mining avviato nel daemon</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1615"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3074"/> <source>mining has NOT been started: </source> <translation>il mining NON è stato avviato: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1634"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3093"/> <source>Mining stopped in daemon</source> <translation>Mining nel daemon interrotto</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3095"/> <source>mining has NOT been stopped: </source> <translation>il mining NON è stato interrotto: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1655"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3150"/> <source>Blockchain saved</source> <translation>Blockchain salvata</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1670"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1687"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1699"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3165"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3183"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3196"/> <source>Height </source> <translation>Blocco </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1671"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1688"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1700"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3197"/> <source>transaction </source> <translation>transazione </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1672"/> - <source>received </source> - <translation>ricevuto/i </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1689"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3185"/> <source>spent </source> <translation>speso/i </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1701"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3198"/> <source>unsupported transaction format</source> <translation>formato transazione non supportato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1718"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3219"/> <source>Starting refresh...</source> <translation>Sto iniziando il refresh...</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1731"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3232"/> <source>Refresh done, blocks received: </source> <translation>Refresh finito, blocchi ricevuti: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2186"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2701"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3758"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4230"/> <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="2201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3773"/> <source>bad locked_blocks parameter:</source> <translation>parametro locked_blocks non corretto:</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2228"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2726"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3801"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4248"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4462"/> <source>a single transaction cannot use more than one payment id: </source> <translation>una singola transazione non può usare più di un id pagamento: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2237"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2735"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3810"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4257"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4430"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4470"/> <source>failed to set up payment id, though it was decoded correctly</source> <translation>impossibile impostare id pagamento, anche se è stato decodificado correttamente</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2262"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2355"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2533"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2749"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2794"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3835"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3916"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3987"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4096"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4271"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4329"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4484"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4527"/> <source>transaction cancelled.</source> <translation>transazione cancellata.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2323"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3955"/> <source>Sending %s. </source> <translation>Sto inviando %s. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2326"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3958"/> <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="2332"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3964"/> <source>The transaction fee is %s</source> <translation>La commissione per la transazione è %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2335"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3967"/> <source>, of which %s is dust from change</source> <translation>, della quale %s è polvere dovuta allo scambio</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2336"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3968"/> <source>.</source> <translation>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2336"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3968"/> <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="2341"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3973"/> <source>. This transaction will unlock on block %llu, in approximately %s days (assuming 2 minutes per block)</source> <translation>. Questa transazione verrà sbloccata al blocco %llu, in approssimativamente %s giorni (supponendo 2 minuti per blocco)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2367"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2544"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2805"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3999"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4011"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4107"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4119"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4340"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4352"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4537"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4549"/> <source>Failed to write transaction(s) to file</source> <translation>Impossibile scrivere transazione/i su file</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2371"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2548"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2809"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4003"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4015"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4111"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4344"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4356"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4541"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4553"/> <source>Unsigned transaction(s) successfully written to file: </source> <translation>Transazioni/e non firmata/e scritte/a con successo su file: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2406"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2583"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2844"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3157"/> - <source>Not enough money in unlocked balance</source> - <translation>Non hai abbastanza fondi nel bilancio sbloccato</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2415"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2592"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2853"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3166"/> - <source>Failed to find a way to create transactions. This is usually due to dust which is so small it cannot pay for itself in fees, or trying to send more money than the unlocked balance, or not leaving enough for fees</source> - <translation>Impossibile creare transazioni. Questo succede di solito perchè l'ammontare di polvere è così piccolo da non poter pagare le proprie commissioni, oppure stai provando a mandare più fondi di quelli che possiedi nel bilancio sbloccato, o non hai aggiunto abbastanza commissioni</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2435"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2612"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2873"/> - <source>Reason: </source> - <translation>Motivo: </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2447"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2624"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2885"/> - <source>failed to find a suitable way to split transactions</source> - <translation>impossibile trovare un modo adatto per dividere le transazioni</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2503"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4066"/> <source>No unmixable outputs found</source> <translation>Nessun output non-mixabile trovato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4149"/> <source>No address given</source> <translation>Non è stato fornito nessun indirizzo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4702"/> <source>Claimed change does not go to a paid address</source> <translation>Il cambiamento richiesto non porta a un indirizzo pagato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3013"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4707"/> <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="3035"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4738"/> <source>sending %s to %s</source> <translation>sto mandando %s a %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3041"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4748"/> + <source> dummy output(s)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4751"/> <source>with no destinations</source> <translation>senza destinazioni</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4763"/> + <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="4787"/> + <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="4797"/> + <source>usage: sign_transfer [export]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4809"/> <source>Failed to sign transaction</source> <translation>Impossibile firmare transazione</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3094"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4815"/> <source>Failed to sign transaction: </source> <translation>Impossibile firmare transazione: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3120"/> - <source>Failed to load transaction from file</source> - <translation>Caricamento transazione da file fallito</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4836"/> + <source>Transaction raw hex data exported to </source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3137"/> - <source>daemon is busy. Please try again later</source> - <translation>il daemon è occupato. Prova più tardi</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4852"/> + <source>Failed to load transaction from file</source> + <translation>Caricamento transazione da file fallito</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1745"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1995"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2395"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2572"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2833"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3146"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3248"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3551"/> <source>RPC error: </source> <translation>errore RPC: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="312"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="522"/> <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="390"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="780"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="848"/> <source>Your original password was incorrect.</source> <translation>La tua password originale era scorretta</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="404"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="650"/> <source>Error with wallet rewrite: </source> <translation>Errore riscrittura wallet: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="513"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1289"/> <source>priority must be 0, 1, 2, 3, or 4 </source> <translation>la priorità deve essere 0, 1, 2, 3, or 4 </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="525"/> - <source>priority must be 0, 1, 2, 3, or 4</source> - <translation>la priorità deve essere 0, 1, 2, 3, or 4</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="540"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1301"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1316"/> <source>priority must be 0, 1, 2, 3, or 4</source> <translation>la priorità deve essere 0, 1, 2, 3, or 4</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="623"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1404"/> <source>invalid unit</source> <translation>unità invalida</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="641"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1422"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1484"/> <source>invalid count: must be an unsigned integer</source> <translation>conteggio invalido: deve essere un integrale non firmato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="659"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1440"/> <source>invalid value</source> <translation>valore invalido</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="705"/> - <source>Same as transfer, but using an older transaction building algorithm</source> - <translation>Lo stesso di transfer, ma usando un vecchio algoritmo per costruire la transazione</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="709"/> - <source>sweep_all [mixin] address [<payment_id>] - Send all unlocked balance to an address</source> - <translation>sweep_all [mixin] address [<payment_id>] - Manda tutto il bilancio sbloccato ad un indirizzo</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="711"/> - <source>donate [<mixin_count>] <amount> [payment_id] - Donate <amount> to the development team (donate.getmonero.org)</source> - <translation>donate [<mixin_count>] <amount> [payment_id] - Dona <amount> al team di sviluppo (donate.getmonero.org)</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="714"/> - <source>set_log <level>|<categories> - Change current log detail (level must be <0-4>)</source> - <translation>set_log <level>|<categories> - Cambia livello dettaglio log (il livello deve essere <0-4>)</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="717"/> - <source>address_book [(add (<address> [pid <long or short payment id>])|<integrated address> [<description possibly with whitespaces>])|(delete <index>)] - Print all entries in the address book, optionally adding/deleting an entry to/from it</source> - <translation>address_book [(add (<address> [pid <long or short payment id>])|<integrated address> [<description possibly with whitespaces>])|(delete <index>)] - Mostra tutte le voci nella rubrica, hai l'opzione di aggiungere/eliminare delle voci</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="729"/> - <source>show_transfers [in|out|pending|failed|pool] [<min_height> [<max_height>]] - Show incoming/outgoing transfers within an optional height range</source> - <translation>show_transfers [in|out|pending|failed|pool] [<min_height> [<max_height>]] - Mostra trasferimenti in entrata/uscita entro un altezza del blocco opzionale</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="741"/> - <source>Show information about a transfer to/from this address</source> - <translation>Mostra informazioni riguardo un trasferimento da/per questo indirizzo</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="742"/> - <source>Change wallet password</source> - <translation>Cambia password portafoglio</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="820"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1942"/> <source>usage: set_log <log_level_number_0-4> | <categories></source> <translation>uso: set_log <log_level_number_0-4> | <categories></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="886"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2013"/> <source>(Y/Yes/N/No): </source> <translation>(S/Sì/N/No): </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1157"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1184"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2509"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2536"/> <source>bad m_restore_height parameter: </source> <translation>parametro m_restore_height non corretto: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1162"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2514"/> <source>date format must be YYYY-MM-DD</source> <translation>il formato della data deve essere YYYY-MM-DD</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1175"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2527"/> <source>Restore height is: </source> <translation>Ripristina altezza è: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1176"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2348"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2528"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3980"/> <source>Is this okay? (Y/Yes/N/No): </source> <translation>Va bene? (S/Sì/N/No): </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1212"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2575"/> <source>Daemon is local, assuming trusted</source> <translation>Il daemon è locale, viene considerato fidato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1553"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3004"/> <source>Password for new watch-only wallet</source> <translation>Password per il nuovo portafoglio solo-vista</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1604"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3063"/> <source>invalid arguments. Please use start_mining [<number_of_threads>] [do_bg_mining] [ignore_battery], <number_of_threads> should be from 1 to </source> <translation>argomenti invalidi. Usa start_mining [<number_of_threads>] [do_bg_mining] [ignore_battery], <number_of_threads> dovrebbe risultare da 1 a </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1755"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2457"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2634"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2895"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3205"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3258"/> <source>internal error: </source> <translation>errore interno: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1760"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2000"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2462"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2639"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2900"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3210"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1185"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3263"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3556"/> <source>unexpected error: </source> <translation>errore inaspettato: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1765"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2005"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2467"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2644"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2905"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3215"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1119"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1190"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3268"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3561"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4030"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4138"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4371"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4570"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4865"/> <source>unknown error</source> <translation>errore sconosciuto</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1770"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3273"/> <source>refresh failed: </source> <translation>refresh fallito: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1770"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3273"/> <source>Blocks received: </source> <translation>Blocchi ricevuti: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1795"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3304"/> <source>unlocked balance: </source> <translation>bilancio sbloccato: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="808"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1925"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> <source>amount</source> <translation>ammontare</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="219"/> + <source>false</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="493"/> + <source>Unknown command: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="500"/> + <source>Command usage: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="503"/> + <source>Command description: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="551"/> + <source>wallet is multisig but not yet finalized</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="567"/> + <source>Enter optional seed encryption passphrase, empty to see raw seed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="584"/> + <source>Failed to retrieve seed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="603"/> + <source>wallet is multisig and has no seed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="674"/> + <source>Cannot connect to daemon</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="679"/> + <source>Current fee is %s monero per kB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="695"/> + <source>Error: failed to estimate backlog array size: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="700"/> + <source>Error: bad estimated backlog array size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="712"/> + <source> (current)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="715"/> + <source>%u block (%u minutes) backlog at priority %u%s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="717"/> + <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="720"/> + <source>No backlog at priority </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="729"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="762"/> + <source>This wallet is already multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="734"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="767"/> + <source>wallet is watch-only and cannot be made multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="740"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="773"/> + <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="747"/> + <source>Your password is incorrect.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="753"/> + <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="754"/> + <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="786"/> + <source>usage: make_multisig <threshold> <multisiginfo1> [<multisiginfo2>...]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="794"/> + <source>Invalid threshold</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="807"/> + <source>Another step is needed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="809"/> + <source>Send this multisig info to all other participants, then use finalize_multisig <info1> [<info2>...] with others' multisig info</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="815"/> + <source>Error creating multisig: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="822"/> + <source>Error creating multisig: new wallet is not multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="825"/> + <source> multisig address: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="836"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="880"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="927"/> + <source>This wallet is not multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="841"/> + <source>This wallet is already finalized</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="854"/> + <source>usage: finalize_multisig <multisiginfo1> [<multisiginfo2>...]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="862"/> + <source>Failed to finalize multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="868"/> + <source>Failed to finalize multisig: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="885"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="932"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1006"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1074"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1136"/> + <source>This multisig wallet is not yet finalized</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="890"/> + <source>usage: export_multisig_info <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="913"/> + <source>Error exporting multisig info: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="917"/> + <source>Multisig info exported to </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="937"/> + <source>usage: import_multisig_info <filename1> [<filename2>...] - one for each other participant</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="965"/> + <source>Multisig info imported</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="969"/> + <source>Failed to import multisig info: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="980"/> + <source>Failed to update spent status after importing multisig info: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="985"/> + <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="1001"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1069"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1131"/> + <source>This is not a multisig wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1011"/> + <source>usage: sign_multisig <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1024"/> + <source>Failed to sign multisig transaction</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1030"/> + <source>Multisig error: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1035"/> + <source>Failed to sign multisig transaction: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1058"/> + <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="1079"/> + <source>usage: submit_multisig <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1094"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1155"/> + <source>Failed to load multisig transaction from file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1160"/> + <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="1108"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6750"/> + <source>Transaction successfully submitted, transaction </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1109"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6751"/> + <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="1141"/> + <source>usage: export_raw_multisig <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1176"/> + <source>Failed to export multisig transaction to file </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1180"/> + <source>Saved exported multisig transaction file(s): </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1252"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1258"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1272"/> + <source>ring size must be an integer >= </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1277"/> + <source>could not change default ring size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1518"/> + <source>Invalid height</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1564"/> + <source>start_mining [<number_of_threads>] [bg_mining] [ignore_battery]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1565"/> + <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="1568"/> + <source>Stop mining in the daemon.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1571"/> + <source>set_daemon <host>[:<port>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1572"/> + <source>Set another daemon to connect to.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1575"/> + <source>Save the current blockchain data.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1578"/> + <source>Synchronize the transactions and balance.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1581"/> + <source>balance [detail]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1582"/> + <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="1585"/> + <source>incoming_transfers [available|unavailable] [verbose] [index=<N1>[,<N2>[,...]]]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1586"/> + <source>Show the incoming transfers, all or filtered by availability and address index.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1589"/> + <source>payments <PID_1> [<PID_2> ... <PID_N>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1590"/> + <source>Show the payments for the given payment IDs.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1593"/> + <source>Show the blockchain height.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1596"/> + <source>transfer_original [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> <amount> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1597"/> + <source>Transfer <amount> to <address> using an older transaction building algorithm. 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 <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="1599"/> + <source>transfer [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> <amount> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1600"/> + <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 <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="1603"/> + <source>locked_transfer [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <addr> <amount> <lockblocks> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1604"/> + <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 <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="1607"/> + <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="1609"/> + <source>sweep_all [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1610"/> + <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.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1613"/> + <source>sweep_below <amount_threshold> [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1614"/> + <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="1617"/> + <source>sweep_single [<priority>] [<ring_size>] <key_image> <address> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1618"/> + <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="1621"/> + <source>donate [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <amount> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1622"/> + <source>Donate <amount> to the development team (donate.getmonero.org).</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1625"/> + <source>sign_transfer <file></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1626"/> + <source>Sign a transaction from a <file>.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1629"/> + <source>Submit a signed transaction from a file.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1632"/> + <source>set_log <level>|{+,-,}<categories></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1633"/> + <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="1636"/> + <source>account + account new <label text with white spaces allowed> + account switch <index> + account label <index> <label text with white spaces allowed> + account tag <tag_name> <account_index_1> [<account_index_2> ...] + account untag <account_index_1> [<account_index_2> ...] + account tag_description <tag_name> <description></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1643"/> + <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>. +If the "label" argument is specified, the wallet sets the label of the account specified by <index> to the provided label text. +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> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1652"/> + <source>address [ new <label text with white spaces allowed> | all | <index_min> [<index_max>] | label <index> <label text with white spaces allowed>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1653"/> + <source>If no arguments are specified or <index> is specified, the wallet shows the default or specified address. If "all" is specified, the walllet 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="1656"/> + <source>integrated_address [<payment_id> | <address>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1657"/> + <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="1660"/> + <source>address_book [(add ((<address> [pid <id>])|<integrated address>) [<description possibly with whitespaces>])|(delete <index>)]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1661"/> + <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="1664"/> + <source>Save the wallet data.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1667"/> + <source>Save a watch-only keys file.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1670"/> + <source>Display the private view key.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1673"/> + <source>Display the private spend key.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1676"/> + <source>Display the Electrum-style mnemonic seed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1679"/> + <source>set <option> [<value>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1680"/> + <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 (default and minimum is 5). + 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 too default/unimportant/normal/elevated/priority. + confirm-missing-payment-id <1|0> + ask-password <1|0> + 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.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1717"/> + <source>Display the encrypted Electrum-style mnemonic seed.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1720"/> + <source>Rescan the blockchain for spent outputs.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1723"/> + <source>get_tx_key <txid></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1724"/> + <source>Get the transaction key (r) for a given <txid>.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1727"/> + <source>check_tx_key <txid> <txkey> <address></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1728"/> + <source>Check the amount going to <address> in <txid>.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1731"/> + <source>get_tx_proof <txid> <address> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1732"/> + <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="1735"/> + <source>check_tx_proof <txid> <address> <signature_file> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1736"/> + <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="1739"/> + <source>get_spend_proof <txid> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1740"/> + <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="1743"/> + <source>check_spend_proof <txid> <signature_file> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1744"/> + <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="1747"/> + <source>get_reserve_proof (all|<amount>) [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1748"/> + <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="1753"/> + <source>check_reserve_proof <address> <signature_file> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1754"/> + <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="1757"/> + <source>show_transfers [in|out|pending|failed|pool] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1758"/> + <source>Show the incoming/outgoing transfers within an optional height range.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1761"/> + <source>unspent_outputs [index=<N1>[,<N2>,...]] [<min_amount> [<max_amount>]]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1762"/> + <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="1765"/> + <source>Rescan the blockchain from scratch.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1768"/> + <source>set_tx_note <txid> [free text note]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1769"/> + <source>Set an arbitrary string note for a <txid>.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1772"/> + <source>get_tx_note <txid></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1773"/> + <source>Get a string note for a txid.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1776"/> + <source>set_description [free text note]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1777"/> + <source>Set an arbitrary description for the wallet.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1780"/> + <source>Get the description of the wallet.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1783"/> + <source>Show the wallet's status.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1786"/> + <source>Show the wallet's information.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1789"/> + <source>sign <file></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1790"/> + <source>Sign the contents of a file.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1793"/> + <source>verify <filename> <address> <signature></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1794"/> + <source>Verify a signature on the contents of a file.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1797"/> + <source>export_key_images <file></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1798"/> + <source>Export a signed set of key images to a <file>.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1801"/> + <source>import_key_images <file></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1802"/> + <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="1805"/> + <source>export_outputs <file></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1806"/> + <source>Export a set of outputs owned by this wallet.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1809"/> + <source>import_outputs <file></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1810"/> + <source>Import a set of outputs owned by this wallet.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1813"/> + <source>show_transfer <txid></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1814"/> + <source>Show information about a transfer to/from this address.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1817"/> + <source>Change the wallet's password.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1820"/> + <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="1823"/> + <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="1825"/> + <source>Export data needed to create a multisig wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1827"/> + <source>make_multisig <threshold> <string1> [<string>...]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1828"/> + <source>Turn this wallet into a multisig wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1831"/> + <source>finalize_multisig <string> [<string>...]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1832"/> + <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="1835"/> + <source>export_multisig_info <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1836"/> + <source>Export multisig info for other participants</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1839"/> + <source>import_multisig_info <filename> [<filename>...]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1840"/> + <source>Import multisig info from other participants</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1843"/> + <source>sign_multisig <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1844"/> + <source>Sign a multisig transaction from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1847"/> + <source>submit_multisig <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1848"/> + <source>Submit a signed multisig transaction from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1851"/> + <source>export_raw_multisig_tx <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1852"/> + <source>Export a signed multisig transaction to a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1855"/> + <source>help [<command>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1856"/> + <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="1917"/> + <source>integer >= </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1930"/> + <source>block height</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2012"/> + <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="2068"/> + <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" and --generate-from-json="jsonfilename"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2084"/> + <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="2090"/> + <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="2106"/> + <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="2133"/> + <source>Multisig seed failed verification</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2149"/> + <source>Enter seed encryption passphrase, empty if none</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2185"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2259"/> + <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="2337"/> + <source>Error: expected M/N, but got: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2342"/> + <source>Error: expected N > 1 and N <= M, but got: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2347"/> + <source>Error: M/N is currently unsupported. </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2350"/> + <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="2379"/> + <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="2388"/> + <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="2408"/> + <source>Secret spend key (%u of %u):</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2432"/> + <source>Error: M/N is currently unsupported</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2550"/> + <source>Restore height </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2551"/> + <source>Still apply restore height? (Y/Yes/N/No): </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2582"/> + <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="2636"/> + <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="2768"/> + <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. +Use "help <command>" to see a command's documentation. +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> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2850"/> + <source>failed to generate new mutlisig wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2853"/> + <source>Generated new %u/%u multisig wallet: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2889"/> + <source>Opened %u/%u multisig wallet%s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2942"/> + <source>Use "help <command>" to see a command's documentation. +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3000"/> + <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="3105"/> + <source>missing daemon URL argument</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3116"/> + <source>Unexpected array length - Exited simple_wallet::set_daemon()</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3130"/> + <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="3166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3184"/> + <source>txid </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3168"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3186"/> + <source>idx </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3299"/> + <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="3300"/> + <source>Currently selected account: [</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3300"/> + <source>] </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3302"/> + <source>Tag: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3302"/> + <source>(No tag assigned)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3309"/> + <source>Balance per address:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <source>Address</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5921"/> + <source>Balance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5921"/> + <source>Unlocked balance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <source>Outputs</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5921"/> + <source>Label</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3318"/> + <source>%8u %6s %21s %21s %7u %21s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3327"/> + <source>usage: balance [detail]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3339"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3381"/> + <source>usage: incoming_transfers [available|unavailable] [verbose] [index=<N>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> <source>spent</source> <translation>spesi</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> <source>global index</source> <translation>indice globale</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> <source>tx id</source> <translation>tx id</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1868"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> + <source>addr index</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3423"/> <source>No incoming transfers</source> <translation>Nessun trasferimento in entrata</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1872"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3427"/> <source>No incoming available transfers</source> <translation>Nessun trasferimento in entrata disponibile</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1876"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3431"/> <source>No incoming unavailable transfers</source> <translation>Nessun trasferimento indisponibile in entrata</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1887"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3442"/> <source>expected at least one payment ID</source> <translation>deve esserci almeno un payment ID</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> <source>payment</source> <translation>pagamento</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> <source>transaction</source> <translation>transazione</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> <source>height</source> <translation>altezza</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> <source>unlock time</source> <translation>tempo sbloccato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1908"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3463"/> <source>No payments with id </source> <translation>Nessun pagamento con id </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1960"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2026"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2280"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3516"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3582"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3853"/> <source>failed to get blockchain height: </source> <translation>impossibile recuperare altezza blockchain: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2016"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3572"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5136"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5174"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5226"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5259"/> <source>failed to connect to the daemon</source> <translation>impossibile connettersi al daemon</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2034"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3590"/> <source> Transaction %llu/%llu: txid=%s</source> <translation> Transazione %llu/%llu: txid=%s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2044"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3600"/> <source> Input %llu/%llu: amount=%s</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2060"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3616"/> <source>failed to get output: </source> <translation>impossibile recuperare output: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2068"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3624"/> <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="2072"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3628"/> <source> Originating block heights: </source> <translation> Originando blocchi: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2087"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3643"/> <source> |</source> <translation> |</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2087"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3915"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3643"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5651"/> <source>| </source> <translation>| </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2104"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3660"/> <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="2106"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3662"/> <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="2152"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2937"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3705"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4184"/> + <source>Ring size must not be 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3717"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4196"/> + <source>ring size %u is too small, minimum is %u</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3724"/> <source>wrong number of arguments</source> <translation>numero di argomenti errato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2257"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2744"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3830"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4266"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4479"/> <source>No payment id is included with this transaction. Is this okay? (Y/Yes/N/No): </source> <translation>Nessun id pagamento è incluso in questa transazione. Questo è corretto? (S/Sì/N/No): </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2298"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2762"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3872"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4286"/> <source>No outputs found, or daemon is not ready</source> <translation>Nessun output trovato, o il daemon non è pronto</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2399"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2576"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2837"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3150"/> - <source>failed to get random outputs to mix: </source> - <translation>impossibile recuperare output casuali da mixare: </translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="6743"/> + <source>Transaction successfully saved to </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6743"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6745"/> + <source>, txid </source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2518"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2779"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6745"/> + <source>Failed to save transaction to </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4081"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4314"/> <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> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2524"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4087"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4320"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4519"/> <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="2969"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4630"/> <source>Donating </source> <translation>Donando </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3053"/> - <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min mixin %lu. %sIs this okay? (Y/Yes/N/No): </source> - <translation>Caricate %lu transazioni, per %s, commissioni %s, %s, %s, con mixaggio %lu. %sQuesto è corretto? (S/Sì/N/No): </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3077"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4792"/> <source>This is a watch only wallet</source> <translation>Questo è un portafoglio solo-vista</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4443"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6571"/> <source>usage: show_transfer <txid></source> <translation>uso: show_transfer <txid></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4557"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6673"/> + <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="6708"/> <source>Transaction ID not found</source> <translation>ID transazione non trovato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="237"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="214"/> <source>true</source> <translation>vero</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="266"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="267"/> <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="330"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="362"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="541"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="608"/> <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="353"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="367"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="557"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="613"/> <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="450"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="467"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1226"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1245"/> <source>wallet is watch-only and cannot transfer</source> <translation>il portafoglio è solo-vista e non può eseguire trasferimenti</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="474"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="480"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="496"/> - <source>mixin must be an integer >= 2</source> - <translation>mixin deve essere un integrale >= 2</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="501"/> - <source>could not change default mixin</source> - <translation>impossibile cambiare mixin standard</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="545"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1321"/> <source>could not change default priority</source> <translation>impossibile cambiare priorità standard</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="700"/> - <source>Synchronize transactions and balance</source> - <translation>Sincronizzare transazioni e bilancio</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="702"/> - <source>incoming_transfers [available|unavailable] - Show incoming transfers, all or filtered by availability</source> - <translation>incoming_transfers [available|unavailable] - Mostra trasferimenti in entrata, tutti o filtrati per disponibilità</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="703"/> - <source>payments <PID_1> [<PID_2> ... <PID_N>] - Show payments for given payment ID[s]</source> - <translation>payments <PID_1> [<PID_2> ... <PID_N>] - Mostra pagamenti per gli/l' ID fornito/i</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="706"/> - <source>transfer [<priority>] [<mixin_count>] <address> <amount> [<payment_id>] - Transfer <amount> to <address>. <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. <mixin_count> is the number of extra inputs to include for untraceability. Multiple payments can be made at once by adding <address_2> <amount_2> etcetera (before the payment ID, if it's included)</source> - <translation>transfer [<priority>] [<mixin_count>] <address> <amount> [<payment_id>] - Transfer <amount> to <address>. <priority> è la priorità della transazione. Maggiore è la priorità, maggiori saranno le tasse per la transazione. Valori validi in ordini di priorità (dal più basso al più alto) sono:unimportant, normal, elevated, priority. se omesso, verrà usato il valore standard (vedi il comando "set priority"). <mixin_count> è il numero di inputs extra da inludere per intracciabilità. Puoi eseguire pagamenti multipli in una volta aggiungendo <address_2> <amount_2> etcetera (prima dell' ID pagamento, se incluso)</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="707"/> - <source>locked_transfer [<mixin_count>] <addr> <amount> <lockblocks>(Number of blocks to lock the transaction for, max 1000000) [<payment_id>]</source> - <translation>locked_transfer [<mixin_count>] <addr> <amount> <lockblocks>(Numero di blocchi durante i quali bloccare la transazione, max 1000000) [<payment_id>]</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="708"/> - <source>Send all unmixable outputs to yourself with mixin 0</source> - <translation>Manda tutti gli outputs non spendibili a te stesso con mixaggio 0</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="712"/> - <source>Sign a transaction from a file</source> - <translation>Firma una transazione da file</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="713"/> - <source>Submit a signed transaction from a file</source> - <translation>Invia una transazione firmata da file</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="716"/> - <source>integrated_address [PID] - Encode a payment ID into an integrated address for the current wallet public address (no argument uses a random payment ID), or decode an integrated address to standard address and payment ID</source> - <translation>integrated_address [PID] - Codifica un ID pagamento in un indirizzo integrato per l'indirizzo pubblico del portafoglio corrente (nessun parametro usa un payment ID casuale), oppure decodifica un indirizzo integrato in indirizzo standard e payment ID</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="718"/> - <source>Save wallet data</source> - <translation>Salva i dati del portafoglio</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="719"/> - <source>Save a watch-only keys file</source> - <translation>Salva una chiave solo-vista</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="720"/> - <source>Display private view key</source> - <translation>Visualizza chiave di visualizzazione privata</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="721"/> - <source>Display private spend key</source> - <translation>Visualizza chiave di spesa privata</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="722"/> - <source>Display Electrum-style mnemonic seed</source> - <translation>Visualizza il seed mnemonico in stile Electrum</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="723"/> - <source>Available options: seed language - set wallet seed language; always-confirm-transfers <1|0> - whether to confirm unsplit txes; print-ring-members <1|0> - whether to print detailed information about ring members during confirmation; store-tx-info <1|0> - whether to store outgoing tx info (destination address, payment ID, tx secret key) for future reference; default-mixin <n> - set default mixin (default is 4); auto-refresh <1|0> - whether to automatically sync new blocks from the daemon; refresh-type <full|optimize-coinbase|no-coinbase|default> - set wallet refresh behaviour; priority [0|1|2|3|4] - default/unimportant/normal/elevated/priority fee; confirm-missing-payment-id <1|0>; ask-password <1|0>; unit <monero|millinero|micronero|nanonero|piconero> - set default monero (sub-)unit; min-outputs-count [n] - try to keep at least that many outputs of value at least min-outputs-value; min-outputs-value [n] - try to keep at least min-outputs-count outputs of at least that value; merge-destinations <1|0> - whether to merge multiple payments to the same destination address</source> - <translation>Opzioni disponibili: seed language - seleziona lingua del seed per il portafoglio; always-confirm-transfers <1|0> - se confermare unsplit txes; print-ring-members <1|0> - se mostrare informazioni dettagliate sui ring members durante le conferme; store-tx-info <1|0> - se salvare le informazioni tx in uscita (indirizzo di destinazione, payment ID, chiave tx segreta) per riferimento futuro; default-mixin <n> - imposta default mixin (default è 4); auto-refresh <1|0> - se sincronizzare automaticamente i nuovi blocchi dal daemon; refresh-type <full|optimize-coinbase|no-coinbase|default> - imposta modalità wallet refresh; priority [0|1|2|3|4] - default/unimportant/normal/elevated/priority fee; confirm-missing-payment-id <1|0>; ask-password <1|0>; unit <monero|millinero|micronero|nanonero|piconero> - imposta default monero (sub-)unit; min-outputs-count [n] - cerca di mantenere come minimo tanti outputs quanti il valore di min-outputs-value; min-outputs-value [n] - cerca di mantenere i min-outputs-count outputs come minimo a questo valore; merge-destinations <1|0> - se fondere pagamenti multipli allo stessp indirizzo di destinazione</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="724"/> - <source>Rescan blockchain for spent outputs</source> - <translation>Riscannerizza blockchain in cerca di outputs spesi</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="725"/> - <source>Get transaction key (r) for a given <txid></source> - <translation>Ricevi una chiave transazione (r) per ogni <txid></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="726"/> - <source>Check amount going to <address> in <txid></source> - <translation>Controlla l'ammontare che va da <address> a <txid></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="730"/> - <source>unspent_outputs [<min_amount> <max_amount>] - Show unspent outputs within an optional amount range</source> - <translation>unspent_outputs [<min_amount> <max_amount>] - Mostra gli outputs non spesi entro un intervallo di valori opzionale</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="731"/> - <source>Rescan blockchain from scratch</source> - <translation>Avvia scansione blockchain dal principio</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="732"/> - <source>Set an arbitrary string note for a txid</source> - <translation>Imposta una stringa arbitraria per un txid</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="733"/> - <source>Get a string note for a txid</source> - <translation>Ricevi una stringa di annotazione per un txid</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="734"/> - <source>Show wallet status information</source> - <translation>Visualizza informazioni sulla stato del portafoglio</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="735"/> - <source>Sign the contents of a file</source> - <translation>Firma il contenuto di un file</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="736"/> - <source>Verify a signature on the contents of a file</source> - <translation>Verifica firma sul contesto del file</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="737"/> - <source>Export a signed set of key images</source> - <translation>Esporta un set di chiavi firmate</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="738"/> - <source>Import signed key images list and verify their spent status</source> - <translation>Importa immagine firmata della lista chiavi e verifica lo status degli spesi</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="739"/> - <source>Export a set of outputs owned by this wallet</source> - <translation>Esporta un set di outputs posseduti da questo portafoglio</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="740"/> - <source>Import set of outputs owned by this wallet</source> - <translation>Importa un set di outputs posseduti da questo portafoglio</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="802"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1919"/> <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="806"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1923"/> <source>monero, millinero, micronero, nanonero, piconero</source> <translation>monero, millinero, micronero, nanonero, piconero</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="851"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1975"/> <source>Wallet name not valid. Please try again or use Ctrl-C to quit.</source> <translation>Nome del portafoglio non valido. Prova di nuovo o usa Ctrl-C per uscire</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="868"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1992"/> <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="874"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1998"/> <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="880"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2004"/> <source>Key file not found. Failed to open wallet: </source> <translation>Chiave non trovata. Impossibile aprire portafoglio: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2023"/> <source>Generating new wallet...</source> <translation>Sto generando un nuovo portafoglio...</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="937"/> - <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-json="jsonfilename" and --generate-from-keys="wallet_name"</source> - <translation>non puoi specificare più di un --generate-new-wallet="wallet_name", --wallet-file="wallet_name", --generate-from-view-key="wallet_name", --generate-from-json="jsonfilename" e --generate-from-keys="wallet_name"</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="953"/> - <source>can't specify both --restore-deterministic-wallet and --non-deterministic</source> - <translation>impossibile specificare sia --restore-deterministic-wallet che --non-deterministic</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="958"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2092"/> <source>--restore-deterministic-wallet uses --generate-new-wallet, not --wallet-file</source> <translation>--restore-deterministic-wallet usa --generate-new-wallet, non --wallet-file</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="982"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2141"/> <source>Electrum-style word list failed verification</source> <translation>La lista di parole stile Electrum ha fallito la verifica</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="994"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1011"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1046"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1063"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1079"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2174"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2194"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2229"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2248"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2268"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2284"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2332"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2357"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2373"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2413"/> <source>No data supplied, cancelled</source> <translation>Nessun dato fornito, cancellato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1002"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1054"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2220"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2718"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3276"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3378"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3530"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4048"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4239"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2180"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2254"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2363"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3791"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4240"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4454"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4926"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4994"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5058"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5266"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6106"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6353"/> <source>failed to parse address</source> <translation>impossibile fare il parsing dell'indirizzo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1017"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1085"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2200"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2290"/> <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="1027"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1103"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2210"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2308"/> <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="1031"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1107"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2214"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2312"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2393"/> <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="1036"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1111"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1128"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2219"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2238"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2316"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2450"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2480"/> <source>account creation failed</source> <translation>creazione dell'account fallita</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1069"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2274"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2418"/> <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="1095"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2300"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2439"/> <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="1099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2304"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2444"/> <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="1123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2471"/> <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="1199"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2562"/> <source>failed to open account</source> <translation>impossibile aprire account</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1203"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1579"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1626"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1647"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3348"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2566"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3030"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3085"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3142"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4962"/> <source>wallet is null</source> <translation>il portafoglio è nullo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1262"/> - <source>Daemon either is not started or wrong port was passed. Please make sure daemon is running or restart the wallet with the correct daemon address.</source> - <translation>Il daemon non è partito o è settato con la porta sbagliata. Assicurati che il daemon stia funzionando o fai ripartire il wallet con l'indirizzo corretto del daemon</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1306"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1311"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2680"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2685"/> <source>invalid language choice entered. Please try again. </source> <translation>linguaggio selezionato scorretto. Prova di nuovo.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1370"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2753"/> <source>View key: </source> <translation>Chiave di visualizzazione: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1385"/> - <source>Your wallet has been generated! -To start synchronizing with the daemon, use the "refresh" command. -Use the "help" command to see the list of available commands. -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>Il tuo portafoglio è stato generato! -Per iniziare a sincronizzarlo con il daemon, usa il comando "refresh". -Usa il comando "help" per vedere la lista dei comandi disponibili. -Usa sempre il comando "exit" quando chiudi monero-wallet-cli per salvare -lo stato della tua sessione 's corrente. Altrimenti potresti dover sincronizzare -di nuovo il tuo portafoglio (le chiavi del tuo portafoglio NON sono a rischio in sessun caso).</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1492"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2935"/> <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="1518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2963"/> <source>failed to deinitialize wallet</source> <translation>deinizializzazione portafoglio fallita</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1570"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1968"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3021"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3524"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6410"/> <source>this command requires a trusted daemon. Enable with --trusted-daemon</source> <translation>questo comando richiede un daemon fidato. Abilita questa opzione con --trusted-daemon</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1657"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3152"/> <source>blockchain can't be saved: </source> <translation>impossibile salvare la blockchain: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1736"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1982"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2386"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2563"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2824"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3239"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3538"/> <source>daemon is busy. Please try again later.</source> <translation>il daemon è impegnato. Prova più tardi</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1740"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1986"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2390"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2567"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2828"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3243"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3542"/> <source>no connection to daemon. Please make sure daemon is running.</source> <translation>nessuna connessione con il daemon. Assicurati che sia in funzione</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1750"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3253"/> <source>refresh error: </source> <translation>errore refresh: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1794"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3303"/> <source>Balance: </source> <translation>Bilancio: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1845"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3399"/> <source>pubkey</source> <translation>pubkey</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1845"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3399"/> <source>key image</source> <translation>immagine chiave</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1856"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3410"/> <source>unlocked</source> <translation>sbloccato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> <source>ringct</source> <translation>ringct</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1855"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3409"/> <source>T</source> <translation>T</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1855"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3409"/> <source>F</source> <translation>F</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1856"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3410"/> <source>locked</source> <translation>bloccato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1857"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3411"/> <source>RingCT</source> <translation>RingCT</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1857"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3411"/> <source>-</source> <translation>-</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1929"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3485"/> <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="1990"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3546"/> <source>failed to get spent status</source> <translation>impossibile recuperare status spesi</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3661"/> <source>the same transaction</source> <translation>la stessa transazione</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3661"/> <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="2206"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3778"/> <source>Locked blocks too high, max 1000000 (˜4 yrs)</source> <translation>I blocchi bloccati sono troppo alti, max 1000000 (˜4 anni)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2921"/> - <source>missing threshold amount</source> - <translation>manca la soglia massima dell'ammontare</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="3895"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3905"/> + <source>Is this okay anyway? (Y/Yes/N/No): </source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2926"/> - <source>invalid amount threshold</source> - <translation>ammontare soglia invalido</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="3900"/> + <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="3022"/> - <source>Change goes to more than one address</source> - <translation>Il cambiamento va a più di un indirizzo</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="3905"/> + <source>Failed to check for backlog: </source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3258"/> - <source>usage: get_tx_proof <txid> <dest_address> [<tx_key>]</source> - <translation>uso: get_tx_proof <txid> <dest_address> [<tx_key>]</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="3946"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4302"/> + <source> +Transaction </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3951"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4307"/> + <source>Spending from address index %d +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3953"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4309"/> + <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="4424"/> + <source>failed to parse Payment ID</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4440"/> + <source>usage: sweep_single [<priority>] [<ring_size>] <key_image> <address> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4447"/> + <source>failed to parse key image</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3289"/> - <source>failed to parse tx_key</source> - <translation>impossibile fare il parsing del tx_key</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4499"/> + <source>No outputs found</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3298"/> - <source>Tx secret key was found for the given txid, but you've also provided another tx secret key which doesn't match the found one.</source> - <translation>Una chiave tx segreta è stata trovata per il txid fornito, ma hai anche fornito un'altra chiave segreta tx che non corrsisponde a quella trovata.</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4504"/> + <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="3306"/> - <source>Tx secret key wasn't found in the wallet file. Provide it as the optional third parameter if you have it elsewhere.</source> - <translation>Chiave segreta tx non trovata nel file del portafoglio. Forniscila come terzo parametro opzionale se la conservi da qualche altra parte.</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4509"/> + <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="3330"/> - <source>Signature: </source> - <translation>Firma: </translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4586"/> + <source>missing threshold amount</source> + <translation>manca la soglia massima dell'ammontare</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3508"/> - <source>usage: check_tx_proof <txid> <address> <signature></source> - <translation>uso: check_tx_proof <txid> <address> <signature></translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4591"/> + <source>invalid amount threshold</source> + <translation>ammontare soglia invalido</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3539"/> - <source>Signature header check error</source> - <translation>Errore controllo firma intestazione</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4601"/> + <source>donations are not enabled on the testnet</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3550"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3555"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3560"/> - <source>Signature decoding error</source> - <translation>Errore decodificazione firma</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4608"/> + <source>usage: donate [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <amount> [<payment_id>]</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3602"/> - <source>Tx pubkey was not found</source> - <translation>Chiave pubblica tx non trovata</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4716"/> + <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="3609"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5077"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5188"/> <source>Good signature</source> <translation>Firma valida</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3613"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5104"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5190"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5293"/> <source>Bad signature</source> <translation>Firma invalida</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3621"/> - <source>failed to generate key derivation</source> - <translation>generazione derivazione chiave fallita</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3994"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6046"/> <source>usage: integrated_address [payment ID]</source> <translation>uso: integrated_address [ID pagamento]</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4017"/> - <source>Integrated address: account %s, payment ID %s</source> - <translation>Indirizzo integrato: account %s, ID pagamento %s</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4022"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6082"/> <source>Standard address: </source> <translation>Indirizzo standard: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4027"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6087"/> <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="4038"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6098"/> <source>usage: address_book [(add (<address> [pid <long or short payment id>])|<integrated address> [<description possibly with whitespaces>])|(delete <index>)]</source> <translation>uso: address_book [(add (<address> [pid <long or short payment id>])|<integrated address> [<description possibly with whitespaces>])|(delete <index>)]</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4070"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6128"/> <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="4088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6146"/> <source>failed to parse index</source> <translation>impossibile fare il parsing dell'indice</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4096"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6154"/> <source>Address book is empty.</source> <translation>La rubrica è vuota.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4102"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6160"/> <source>Index: </source> <translation>Indice: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4103"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6161"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6287"/> <source>Address: </source> <translation>Indirizzo: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4104"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6162"/> <source>Payment ID: </source> <translation>ID Pagamento: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6163"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6286"/> <source>Description: </source> <translation>Descrizione: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4115"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6173"/> <source>usage: set_tx_note [txid] free text note</source> <translation>uso: set_tx_note [txid] free text note</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4143"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6201"/> <source>usage: get_tx_note [txid]</source> <translation>uso: get_tx_note [txid]</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4193"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6304"/> <source>usage: sign <filename></source> <translation>uso: sign <filename></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4198"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6309"/> <source>wallet is watch-only and cannot sign</source> <translation>il portafoglio è solo-vista e non può firmare</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4207"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4230"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4374"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="951"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6323"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6346"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6501"/> <source>failed to read file </source> <translation>impossibile leggere il file </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4219"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5039"/> + <source>usage: check_tx_proof <txid> <address> <signature_file> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5066"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5278"/> + <source>failed to load signature file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5117"/> + <source>usage: get_spend_proof <txid> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5123"/> + <source>wallet is watch-only and cannot generate the proof</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5161"/> + <source>usage: check_spend_proof <txid> <signature_file> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5202"/> + <source>usage: get_reserve_proof (all|<amount>) [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5208"/> + <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="5253"/> + <source>usage: check_reserve_proof <address> <signature_file> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5271"/> + <source>Address must not be a subaddress</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5289"/> + <source>Good signature -- total: %s, spent: %s, unspent: %s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5353"/> + <source>usage: show_transfers [in|out|all|pending|failed] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5490"/> + <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="5526"/> + <source>usage: unspent_outputs [index=<N1>[,<N2>,...]] [<min_amount> [<max_amount>]]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5586"/> + <source>There is no unspent output in the specified address</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5699"/> + <source> (no daemon)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5701"/> + <source> (out of sync)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5758"/> + <source>(Untitled account)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5771"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5789"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5814"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5837"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5990"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6013"/> + <source>failed to parse index: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5776"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5995"/> + <source>specify an index between 0 and </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5873"/> + <source>usage: + account + account new <label text with white spaces allowed> + account switch <index> + account label <index> <label text with white spaces allowed> + account tag <tag_name> <account_index_1> [<account_index_2> ...] + account untag <account_index_1> [<account_index_2> ...] + account tag_description <tag_name> <description></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5901"/> + <source> +Grand total: + Balance: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5901"/> + <source>, unlocked balance: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5909"/> + <source>Untagged accounts:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5915"/> + <source>Tag %s is unregistered.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5918"/> + <source>Accounts with tag: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5919"/> + <source>Tag's description: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5921"/> + <source>Account</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5927"/> + <source> %c%8u %6s %21s %21s %21s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5937"/> + <source>----------------------------------------------------------------------------------</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5938"/> + <source>%15s %21s %21s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5961"/> + <source>Primary address</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5961"/> + <source>(used)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5982"/> + <source>(Untitled address)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6022"/> + <source><index_min> is already out of bound</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6027"/> + <source><index_max> exceeds the bound</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6035"/> + <source>usage: address [ new <label text with white spaces allowed> | all | <index_min> [<index_max>] | label <index> <label text with white spaces allowed> ]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6053"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6065"/> + <source>Integrated addresses can only be created for account 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6077"/> + <source>Integrated address: %s, payment ID: %s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6082"/> + <source>Subaddress: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6242"/> + <source>usage: get_description</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6248"/> + <source>no description found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6250"/> + <source>description found: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6285"/> + <source>Filename: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6290"/> + <source>Watch only</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6292"/> + <source>%u/%u multisig%s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6294"/> + <source>Normal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6295"/> + <source>Type: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6296"/> + <source>Testnet: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6296"/> + <source>Yes</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6296"/> + <source>No</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6314"/> + <source>This wallet is multisig and cannot sign</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6335"/> <source>usage: verify <filename> <address> <signature></source> <translation>uso: verify <filename> <address> <signature></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4246"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6360"/> <source>Bad signature from </source> <translation>Firma non valida da </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4250"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6364"/> <source>Good signature from </source> <translation>Firma valida da </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4259"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6373"/> <source>usage: export_key_images <filename></source> <translation>uso: export_key_images <filename></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4264"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6378"/> <source>wallet is watch-only and cannot export key images</source> <translation>il portafoglio è solo-vista e non può esportare immagini chiave</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4274"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4346"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="906"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6391"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6473"/> <source>failed to save file </source> <translation>impossibile salvare file </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4285"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6402"/> <source>Signed key images exported to </source> <translation>Chiave immagine firmata esportata in </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4293"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6416"/> <source>usage: import_key_images <filename></source> <translation>uso: import_key_images <filename></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4323"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6447"/> <source>usage: export_outputs <filename></source> <translation>uso: export_outputs <filename></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4357"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6484"/> <source>Outputs exported to </source> <translation>Outputs esportati in </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4365"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6492"/> <source>usage: import_outputs <filename></source> <translation>uso: import_outputs <filename></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2246"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3818"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3819"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5219"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5545"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5553"/> <source>amount is wrong: </source> <translation>l'ammontare non è corretto: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2247"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3819"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3820"/> <source>expected number from 0 to </source> <translation>deve essere un numero da 0 a </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2378"/> - <source>Money successfully sent, transaction </source> - <translation>Fondi inviati con successo, transazione </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3141"/> - <source>no connection to daemon. Please, make sure daemon is running.</source> - <translation>nessuna connessione con il daemon, assicurati che stia funzionando.</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2420"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2597"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2858"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3171"/> - <source>not enough outputs for specified mixin_count</source> - <translation>non ci sono abbastanza output per lo specificato mixin_count</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2423"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2600"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2861"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3174"/> - <source>output amount</source> - <translation>ammontare output</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2423"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2600"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2861"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3174"/> - <source>found outputs to mix</source> - <translation>trovati outputs da mixare</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2428"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2605"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2866"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3179"/> - <source>transaction was not constructed</source> - <translation>la transazione non è stata costruita</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2432"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2609"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2870"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3183"/> - <source>transaction %s was rejected by daemon with status: </source> - <translation>la transazione %s è stata respinta dal daemon con status: </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2443"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2620"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2881"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3191"/> - <source>one of destinations is zero</source> - <translation>una delle destinazioni è zero</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3195"/> - <source>Failed to find a suitable way to split transactions</source> - <translation>Impossibile trovare un modo corretto per dividere le transazioni</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2452"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2629"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2890"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3200"/> - <source>unknown transfer error: </source> - <translation>errore trasferimento sconosciuto: </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2516"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4079"/> <source>Sweeping </source> <translation>Eseguendo lo sweeping </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2785"/> - <source>Sweeping %s for a total fee of %s. Is this okay? (Y/Yes/N/No)</source> - <translation>Eseguendo lo sweeping di %s per un totale commissioni di %s. Va bene? (S/Sì/N/No)</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2555"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2816"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3129"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4559"/> <source>Money successfully sent, transaction: </source> <translation>Fondi inviati con successo, transazione: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3047"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4757"/> <source>%s change to %s</source> <translation>%s cambia in %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3050"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4760"/> <source>no change</source> <translation>nessun cambiamento</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1044"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1057"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4826"/> <source>Transaction successfully signed to file </source> <translation>Transazione firmata con successo nel file </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3226"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4876"/> <source>usage: get_tx_key <txid></source> <translation>uso: get_tx_key <txid></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3234"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3266"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3354"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3519"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4122"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4150"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4450"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4884"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4919"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4968"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5050"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5168"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6180"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6208"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6578"/> <source>failed to parse txid</source> <translation>parsing txid fallito</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3245"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4898"/> <source>Tx key: </source> <translation>Chiave Tx: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3250"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4903"/> <source>no tx keys found for this txid</source> <translation>nessuna chiave tx trovata per questo txid</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3339"/> - <source>usage: check_tx_key <txid> <txkey> <address></source> - <translation>uso: check_tx_key <txid> <txkey> <address></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3361"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3368"/> - <source>failed to parse tx key</source> - <translation>impossibile fare il parsing della chiave tx</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3573"/> - <source>failed to get transaction from daemon</source> - <translation>impossibile recuperare transazione dal daemon</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4912"/> + <source>usage: get_tx_proof <txid> <address> [<message>]</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3411"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3584"/> - <source>failed to parse transaction from daemon</source> - <translation>impossibile fare il parsing della transazione dal daemon</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4937"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5147"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5239"/> + <source>signature file saved to: </source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3418"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3591"/> - <source>failed to validate transaction from daemon</source> - <translation>convalida transazione dal daemon fallita</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4939"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5149"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5241"/> + <source>failed to save signature file</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3423"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3596"/> - <source>failed to get the right transaction from daemon</source> - <translation>impossibile recuperare la corretta transazione dal daemon</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4953"/> + <source>usage: check_tx_key <txid> <txkey> <address></source> + <translation>uso: check_tx_key <txid> <txkey> <address></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3385"/> - <source>failed to generate key derivation from supplied parameters</source> - <translation>impossibile generare chiave derivazione dai parametri forniti</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4976"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4985"/> + <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="3471"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4943"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5031"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5109"/> <source>error: </source> <translation>errore: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3477"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5007"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5080"/> <source>received</source> <translation>ricevuto/i</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3477"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5007"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5080"/> <source>in txid</source> <translation>in txid</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3481"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5026"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5099"/> <source>received nothing in txid</source> <translation>nulla ricevuto in txid</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3485"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5010"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5083"/> <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="3494"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5016"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5089"/> <source>This transaction has %u confirmations</source> <translation>Questa transazione ha %u conferme</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3498"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5020"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5093"/> <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="3661"/> - <source>usage: show_transfers [in|out|all|pending|failed] [<min_height> [<max_height>]]</source> - <translation>uso: show_transfers [in|out|all|pending|failed] [<min_height> [<max_height>]]</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3700"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5401"/> <source>bad min_height parameter:</source> <translation>parametro min_height non corretto:</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3712"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5413"/> <source>bad max_height parameter:</source> <translation>parametro max_height non corretto:</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3760"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5473"/> <source>in</source> <translation>in</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3760"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3798"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5473"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5514"/> <source>out</source> <translation>out</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3798"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5514"/> <source>failed</source> <translation>fallito</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3798"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5514"/> <source>pending</source> <translation>in attesa</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3809"/> - <source>usage: unspent_outputs [<min_amount> <max_amount>]</source> - <translation>uso: unspent_outputs [<min_amount> <max_amount>]</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3824"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5560"/> <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="3856"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5592"/> <source> Amount: </source> <translation> Ammontare: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3856"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5592"/> <source>, number of keys: </source> <translation>, numero di chiavi: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3861"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5597"/> <source> </source> <translation> </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3866"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5602"/> <source> Min block height: </source> <translation> Altezza minima blocco: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3867"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5603"/> <source> Max block height: </source> <translation> Altezza massima blocco: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3868"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5604"/> <source> Min amount found: </source> <translation> Ammontare minimo trovato: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3869"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5605"/> <source> Max amount found: </source> <translation> Ammontare massimo trovato: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3870"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5606"/> <source> Total count: </source> <translation> Conto totale: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3910"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5646"/> <source> Bin size: </source> <translation> Dimensione Bin: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3911"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5647"/> <source> Outputs per *: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3913"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5649"/> <source>count ^ </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3915"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5651"/> <source> |</source> <translation> |</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3917"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5653"/> <source> +</source> <translation> +</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3917"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5653"/> <source>+--> block height </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3918"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5654"/> <source> ^</source> <translation> ^</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3918"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5654"/> <source>^ </source> <translation>^ </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3919"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5655"/> <source> </source> <translation> </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3969"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5696"/> <source>wallet</source> <translation>portafoglio</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="420"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4000"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="666"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6057"/> <source>Random payment ID: </source> <translation>ID pagamento casuale: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4001"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6058"/> <source>Matching integrated address: </source> <translation>Indirizzo integrato corrispondente: </translation> </message> </context> <context> + <name>genms</name> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="70"/> + <source>Base filename (-1, -2, etc suffixes will be appended as needed)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="71"/> + <source>Give threshold and participants at once as M/N</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="72"/> + <source>How many participants wil share parts of the multisig wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="73"/> + <source>How many signers are required to sign a valid transaction</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="74"/> + <source>Create testnet multisig wallets</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="81"/> + <source>Generating %u %u/%u multisig wallets</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="138"/> + <source>Error verifying multisig extra info</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="146"/> + <source>Error finalizing multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="153"/> + <source>Generated multisig wallets for address </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="157"/> + <source>Error creating multisig wallets: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="176"/> + <source>This program generates a set of multisig wallets - use this simpler scheme only if all the participants trust each other</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="194"/> + <source>Error: expected N/M, but got: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="202"/> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="211"/> + <source>Error: either --scheme or both of --threshold and --participants may be given</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="218"/> + <source>Error: expected N > 1 and N <= M, but got N==%u and M==%d</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="227"/> + <source>Error: --filename-base is required</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="233"/> + <source>Error: unsupported scheme: only N/N and N-1/N are supported</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>sw</name> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="116"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="115"/> <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="117"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="116"/> <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="117"/> + <source>Generate deterministic wallet from spend key</source> + <translation type="unfinished"></translation> + </message> + <message> <location filename="../src/simplewallet/simplewallet.cpp" line="118"/> <source>Generate wallet from private keys</source> <translation>Genera portafoglio da chiavi private</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="120"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="119"/> + <source>Generate a master wallet from multisig wallet keys</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="121"/> + <source>Language for mnemonic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="122"/> <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="121"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="123"/> <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="122"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="124"/> + <source>Recover multisig wallet using Electrum-style mnemonic seed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="125"/> <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="123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="126"/> <source>Enable commands which rely on a trusted daemon</source> <translation>Abilita comandi dipendenti da un daemon fidato</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="124"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="127"/> <source>Allow communicating with a daemon that uses a different RPC version</source> <translation>Permetti comunicazioni con un daemon che usa una versione RPC differente</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="125"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="128"/> <source>Restore from specific blockchain height</source> <translation>Ripristina da specifico blocco</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="136"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="129"/> + <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="171"/> <source>daemon is busy. Please try again later.</source> <translation>il daemon è occupato. Prova più tardi.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="145"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="180"/> <source>possibly lost connection to daemon</source> <translation>possibile perdita di connessione con il daemon</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="226"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="197"/> <source>Error: </source> <translation>Errore: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4614"/> - <source>Failed to initialize wallet</source> - <translation>Inizializzazione wallet fallita</translation> - </message> -</context> -<context> - <name>tools::dns_utils</name> - <message> - <location filename="../src/common/dns_utils.cpp" line="430"/> - <source>DNSSEC validation passed</source> - <translation>Convalida DNSSEC passata</translation> - </message> - <message> - <location filename="../src/common/dns_utils.cpp" line="434"/> - <source>WARNING: DNSSEC validation was unsuccessful, this address may not be correct!</source> - <translation>AVVISO: convalida DNSSEC fallita, questo indirizzo potrebbe non essere corretto!</translation> - </message> - <message> - <location filename="../src/common/dns_utils.cpp" line="437"/> - <source>For URL: </source> - <translation>Per URL: </translation> - </message> - <message> - <location filename="../src/common/dns_utils.cpp" line="439"/> - <source> Monero Address = </source> - <translation> Indirizzo Monero = </translation> - </message> - <message> - <location filename="../src/common/dns_utils.cpp" line="441"/> - <source>Is this OK? (Y/n) </source> - <translation>Va bene? (S/n) </translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="6787"/> + <source>This is the command line monero wallet. It needs to connect to a monero +daemon to work correctly.</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/common/dns_utils.cpp" line="451"/> - <source>you have cancelled the transfer request</source> - <translation>hai cancellato la richiesta di transferimento</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="6801"/> + <source>Failed to initialize wallet</source> + <translation>Inizializzazione wallet fallita</translation> </message> </context> <context> <name>tools::wallet2</name> <message> - <location filename="../src/wallet/wallet2.cpp" line="106"/> + <location filename="../src/wallet/wallet2.cpp" line="113"/> <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="107"/> + <location filename="../src/wallet/wallet2.cpp" line="114"/> <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="460"/> - <source>Wallet password</source> - <translation>Password portafoglio</translation> - </message> - <message> - <location filename="../src/wallet/wallet2.cpp" line="109"/> + <location filename="../src/wallet/wallet2.cpp" line="116"/> <source>Wallet password file</source> <translation>File password portafoglio</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="110"/> + <location filename="../src/wallet/wallet2.cpp" line="117"/> <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="112"/> + <location filename="../src/wallet/wallet2.cpp" line="119"/> <source>For testnet. Daemon must also be launched with --testnet flag</source> <translation>Per testnet. Il daemon può anche essere lanciato con la flag --testnet</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="113"/> + <location filename="../src/wallet/wallet2.cpp" line="120"/> <source>Restricts to view-only commands</source> <translation>Restringi a comandi di tipo solo-vista</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="152"/> + <location filename="../src/wallet/wallet2.cpp" line="168"/> <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="188"/> + <location filename="../src/wallet/wallet2.cpp" line="204"/> <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="204"/> + <location filename="../src/wallet/wallet2.cpp" line="217"/> <source>the password file specified could not be read</source> <translation>il file password specificato non può essere letto</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="460"/> - <source>Enter new password for the wallet</source> - <translation>Inserisci una nuova password per il portafoglio</translation> - </message> - <message> - <location filename="../src/wallet/wallet2.cpp" line="464"/> - <source>failed to read wallet password</source> - <translation>impossibile leggere password portafoglio</translation> - </message> - <message> - <location filename="../src/wallet/wallet2.cpp" line="227"/> + <location filename="../src/wallet/wallet2.cpp" line="240"/> <source>Failed to load file </source> <translation>Impossibile caricare file </translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="108"/> + <location filename="../src/wallet/wallet2.cpp" line="115"/> <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="111"/> + <location filename="../src/wallet/wallet2.cpp" line="118"/> <source>Specify username[:password] for daemon RPC client</source> <translation>Specificare username[:password] per client del daemon RPC</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="233"/> + <location filename="../src/wallet/wallet2.cpp" line="224"/> + <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="246"/> <source>Failed to parse JSON</source> <translation>Impossibile fare il parsing di JSON</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="240"/> + <location filename="../src/wallet/wallet2.cpp" line="253"/> <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="258"/> + <location filename="../src/wallet/wallet2.cpp" line="269"/> <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="264"/> - <location filename="../src/wallet/wallet2.cpp" line="331"/> - <location filename="../src/wallet/wallet2.cpp" line="373"/> + <location filename="../src/wallet/wallet2.cpp" line="274"/> + <location filename="../src/wallet/wallet2.cpp" line="339"/> + <location filename="../src/wallet/wallet2.cpp" line="380"/> <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="276"/> + <location filename="../src/wallet/wallet2.cpp" line="285"/> <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="282"/> - <location filename="../src/wallet/wallet2.cpp" line="343"/> - <location filename="../src/wallet/wallet2.cpp" line="394"/> + <location filename="../src/wallet/wallet2.cpp" line="290"/> + <location filename="../src/wallet/wallet2.cpp" line="349"/> + <location filename="../src/wallet/wallet2.cpp" line="405"/> <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="295"/> + <location filename="../src/wallet/wallet2.cpp" line="302"/> <source>Electrum-style word list failed verification</source> <translation>Verifica lista di parole stile-Electrum fallita</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="306"/> - <source>At least one of Electrum-style word list and private view key must be specified</source> - <translation>Almeno una parola della lista stile-Electrum e una chiave privata di visualizzazione devono essere specificate</translation> + <location filename="../src/wallet/wallet2.cpp" line="319"/> + <source>At least one of Electrum-style word list and private view key and private spend key must be specified</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="311"/> + <location filename="../src/wallet/wallet2.cpp" line="323"/> <source>Both Electrum-style word list and private key(s) specified</source> <translation>Specificate entrambe lista parole stile-Electrum e chiave/i privata/e </translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="324"/> + <location filename="../src/wallet/wallet2.cpp" line="333"/> <source>invalid address</source> <translation>indirizzo invalido</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="335"/> + <location filename="../src/wallet/wallet2.cpp" line="342"/> <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="347"/> + <location filename="../src/wallet/wallet2.cpp" line="352"/> <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="356"/> + <location filename="../src/wallet/wallet2.cpp" line="360"/> <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="403"/> + <location filename="../src/wallet/wallet2.cpp" line="392"/> + <source>failed to parse address: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="398"/> + <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="413"/> <source>failed to generate new wallet: </source> <translation>impossibile generare nuovo portafoglio: </translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="5205"/> + <location filename="../src/wallet/wallet2.cpp" line="2813"/> + <location filename="../src/wallet/wallet2.cpp" line="2873"/> + <location filename="../src/wallet/wallet2.cpp" line="2952"/> + <location filename="../src/wallet/wallet2.cpp" line="2998"/> + <location filename="../src/wallet/wallet2.cpp" line="3089"/> + <location filename="../src/wallet/wallet2.cpp" line="3189"/> + <location filename="../src/wallet/wallet2.cpp" line="3599"/> + <location filename="../src/wallet/wallet2.cpp" line="3955"/> + <source>Primary account</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="7914"/> + <source>No funds received in this tx.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="8607"/> <source>failed to read file </source> <translation>lettura file fallita</translation> </message> @@ -2618,94 +3888,125 @@ Outputs per *: </source> <context> <name>tools::wallet_rpc_server</name> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="151"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="160"/> <source>Daemon is local, assuming trusted</source> <translation>Il daemon è locale, viene considerato fidato</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="171"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="175"/> + <source>Failed to create directory </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="177"/> + <source>Failed to create directory %s: %s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="188"/> <source>Cannot specify --</source> <translation>Impossibile specificare --</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="171"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="188"/> <source> and --</source> <translation> e --</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="198"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="207"/> <source>Failed to create file </source> <translation>Impossibile creare file </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="198"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="207"/> <source>. Check permissions or remove file</source> <translation>. Controlla permessi o rimuovi il file</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="209"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="217"/> <source>Error writing to file </source> <translation>Errore durante scrittura su file </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="212"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="220"/> <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="1748"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="443"/> + <source>Tag %s is unregistered.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2435"/> + <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="2870"/> + <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="2893"/> <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="1760"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2905"/> <source>Must specify --wallet-file or --generate-from-json or --wallet-dir</source> <translation>Devi specificare --wallet-file o --generate-from-json o --wallet-dir</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1764"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2909"/> <source>Loading wallet...</source> <translation>Sto caricando il portafoglio...</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1789"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1814"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2942"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2975"/> <source>Saving wallet...</source> <translation>Sto salvando il portafoglio...</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1791"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1816"/> - <source>Saved ok</source> - <translation>Salvato con successo</translation> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2944"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2977"/> + <source>Successfully saved</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1794"/> - <source>Loaded ok</source> - <translation>Caricato con successo</translation> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2947"/> + <source>Successfully loaded</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1798"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2951"/> <source>Wallet initialization failed: </source> <translation>Inizializzazione portafoglio fallita: </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1805"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2958"/> <source>Failed to initialize wallet RPC server</source> <translation>Inizializzazione server RPC portafoglio fallita</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1809"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2962"/> <source>Starting wallet RPC server</source> <translation>Server RPC portafoglio in avvio</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1811"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2969"/> + <source>Failed to run wallet: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2972"/> <source>Stopped wallet RPC server</source> <translation>Server RPC portafoglio arrestato</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1820"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2981"/> <source>Failed to save wallet: </source> <translation>Impossibile salvare portafoglio: </translation> </message> @@ -2713,58 +4014,65 @@ Outputs per *: </source> <context> <name>wallet_args</name> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1715"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4580"/> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6760"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2856"/> <source>Wallet options</source> <translation>Opzioni portafoglio</translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="59"/> + <location filename="../src/wallet/wallet_args.cpp" line="73"/> <source>Generate wallet from JSON format file</source> <translation>Genera portafoglio da file JSON</translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="63"/> + <location filename="../src/wallet/wallet_args.cpp" line="77"/> <source>Use wallet <arg></source> <translation>Usa portafoglio <arg></translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="87"/> + <location filename="../src/wallet/wallet_args.cpp" line="104"/> <source>Max number of threads to use for a parallel job</source> <translation>Numero massimo di threads da utilizzare per un lavoro parallelo</translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="88"/> + <location filename="../src/wallet/wallet_args.cpp" line="105"/> <source>Specify log file</source> <translation>Specificare file di log</translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="89"/> + <location filename="../src/wallet/wallet_args.cpp" line="106"/> <source>Config file</source> <translation>File configurazione</translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="98"/> + <location filename="../src/wallet/wallet_args.cpp" line="115"/> <source>General options</source> <translation>Opzioni generali</translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="128"/> + <location filename="../src/wallet/wallet_args.cpp" line="138"/> + <source>This is the command line 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_args.cpp" line="161"/> <source>Can't find config file </source> <translation>Impossibile trovare file configurazione </translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="172"/> + <location filename="../src/wallet/wallet_args.cpp" line="195"/> <source>Logging to: </source> <translation>Sto salvando il Log in: </translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="173"/> + <location filename="../src/wallet/wallet_args.cpp" line="197"/> <source>Logging to %s</source> <translation>Sto salvando il Log in %s</translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="153"/> + <location filename="../src/wallet/wallet_args.cpp" line="140"/> <source>Usage:</source> <translation>Uso:</translation> </message> diff --git a/translations/monero_sv.ts b/translations/monero_sv.ts index 7decd2f5a..6b461c102 100644 --- a/translations/monero_sv.ts +++ b/translations/monero_sv.ts @@ -1,27 +1,27 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE TS []> +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> <TS version="2.1"> <context> <name>Monero::AddressBookImpl</name> <message> - <location filename="../src/wallet/api/address_book.cpp" line="55"/> + <location filename="../src/wallet/api/address_book.cpp" line="53"/> <source>Invalid destination address</source> <translation>Ogiltig måladress</translation> </message> <message> - <location filename="../src/wallet/api/address_book.cpp" line="65"/> + <location filename="../src/wallet/api/address_book.cpp" line="63"/> <source>Invalid payment ID. Short payment ID should only be used in an integrated address</source> <translation>Ogiltigt betalnings-ID. Kort betalnings-ID ska endast användas i en integrerad adress</translation> </message> <message> - <location filename="../src/wallet/api/address_book.cpp" line="72"/> + <location filename="../src/wallet/api/address_book.cpp" line="70"/> <source>Invalid payment ID</source> <translation>Ogiltigt betalnings-ID</translation> </message> <message> - <location filename="../src/wallet/api/address_book.cpp" line="79"/> - <source>Integrated address and long payment id can't be used at the same time</source> - <translation>Integrerad adress och långt betalnings-ID kan inte användas samtidigt</translation> + <location filename="../src/wallet/api/address_book.cpp" line="77"/> + <source>Integrated address and long payment ID can't be used at the same time</source> + <translation type="unfinished"></translation> </message> </context> <context> @@ -37,32 +37,32 @@ <translation>Det gick inte att skriva transaktioner till fil</translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="114"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="115"/> <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="117"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="118"/> <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="121"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="122"/> <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="126"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="127"/> <source>. Reason: </source> <translation>. Orsak: </translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="128"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="129"/> <source>Unknown exception: </source> <translation>Okänt undantag: </translation> </message> <message> - <location filename="../src/wallet/api/pending_transaction.cpp" line="131"/> + <location filename="../src/wallet/api/pending_transaction.cpp" line="132"/> <source>Unhandled exception</source> <translation>Ohanterat undantag</translation> </message> @@ -81,323 +81,324 @@ <translation>Det gick inte att signera transaktionen</translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="135"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="168"/> <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/wallet/api/unsigned_transaction.cpp" line="141"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="174"/> <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/wallet/api/unsigned_transaction.cpp" line="151"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="184"/> <source>Change goes to more than one address</source> <translation>Växel går till mer än en adress</translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="164"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="197"/> <source>sending %s to %s</source> <translation>skickar %s till %s</translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="170"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="203"/> <source>with no destinations</source> <translation>utan några mål</translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="176"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="209"/> <source>%s change to %s</source> <translation>%s växel till %s</translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="179"/> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="212"/> <source>no change</source> <translation>ingen växel</translation> </message> <message> - <location filename="../src/wallet/api/unsigned_transaction.cpp" line="181"/> - <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min mixin %lu. %s</source> - <translation>Läste in %lu transaktioner, för %s, avgift %s, %s, %s, med minsta mixin %lu. %s</translation> + <location filename="../src/wallet/api/unsigned_transaction.cpp" line="214"/> + <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min ring size %lu. %s</source> + <translation type="unfinished"></translation> </message> </context> <context> <name>Monero::WalletImpl</name> <message> - <location filename="../src/wallet/api/wallet.cpp" line="942"/> + <location filename="../src/wallet/api/wallet.cpp" line="1111"/> <source>payment id has invalid format, expected 16 or 64 character hex string: </source> <translation>betalnings-ID har ogiltigt format. En 16- eller 64-teckens hex-sträng förväntades: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="952"/> + <location filename="../src/wallet/api/wallet.cpp" line="1121"/> <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="978"/> - <location filename="../src/wallet/api/wallet.cpp" line="1072"/> + <location filename="../src/wallet/api/wallet.cpp" line="1154"/> + <location filename="../src/wallet/api/wallet.cpp" line="1258"/> <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="981"/> - <location filename="../src/wallet/api/wallet.cpp" line="1075"/> + <location filename="../src/wallet/api/wallet.cpp" line="1157"/> + <location filename="../src/wallet/api/wallet.cpp" line="1261"/> <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="984"/> - <location filename="../src/wallet/api/wallet.cpp" line="1078"/> + <location filename="../src/wallet/api/wallet.cpp" line="1160"/> + <location filename="../src/wallet/api/wallet.cpp" line="1264"/> <source>RPC error: </source> <translation>RPC-fel: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1081"/> + <location filename="../src/wallet/api/wallet.cpp" line="1197"/> + <location filename="../src/wallet/api/wallet.cpp" line="1301"/> + <source>not enough outputs for specified ring size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="1199"/> + <location filename="../src/wallet/api/wallet.cpp" line="1303"/> + <source>found outputs to use</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="1201"/> + <source>Please sweep unmixable outputs.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="1267"/> <source>failed to get random outputs to mix</source> <translation>det gick inte att hämta slumpmässiga utgångar att mixa</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="994"/> - <location filename="../src/wallet/api/wallet.cpp" line="1088"/> + <location filename="../src/wallet/api/wallet.cpp" line="1170"/> + <location filename="../src/wallet/api/wallet.cpp" line="1274"/> <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="403"/> + <location filename="../src/wallet/api/wallet.cpp" line="474"/> <source>failed to parse address</source> <translation>det gick inte att parsa adressen</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="415"/> + <location filename="../src/wallet/api/wallet.cpp" line="486"/> <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="425"/> + <location filename="../src/wallet/api/wallet.cpp" line="496"/> <source>No view key supplied, cancelled</source> <translation>Ingen visningsnyckel angiven, avbruten</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="432"/> + <location filename="../src/wallet/api/wallet.cpp" line="503"/> <source>failed to parse secret view key</source> <translation>det gick inte att parsa hemlig visningsnyckel</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="442"/> + <location filename="../src/wallet/api/wallet.cpp" line="513"/> <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="447"/> + <location filename="../src/wallet/api/wallet.cpp" line="518"/> <source>spend key does not match address</source> <translation>spendernyckel matchar inte adress</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="453"/> + <location filename="../src/wallet/api/wallet.cpp" line="524"/> <source>failed to verify secret view key</source> <translation>det gick inte att verifiera hemlig visningsnyckel</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="458"/> + <location filename="../src/wallet/api/wallet.cpp" line="529"/> <source>view key does not match address</source> <translation>visningsnyckel matchar inte adress</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="477"/> + <location filename="../src/wallet/api/wallet.cpp" line="548"/> <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="799"/> + <location filename="../src/wallet/api/wallet.cpp" line="773"/> + <source>Failed to send import wallet request</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="919"/> <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="820"/> + <location filename="../src/wallet/api/wallet.cpp" line="940"/> <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="838"/> + <location filename="../src/wallet/api/wallet.cpp" line="958"/> <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="847"/> + <location filename="../src/wallet/api/wallet.cpp" line="967"/> <source>failed to save file </source> <translation>det gick inte att spara fil </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="874"/> + <location filename="../src/wallet/api/wallet.cpp" line="986"/> + <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="999"/> <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="987"/> + <location filename="../src/wallet/api/wallet.cpp" line="1032"/> + <source>Failed to get subaddress label: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="1046"/> + <source>Failed to set subaddress label: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/api/wallet.cpp" line="1163"/> <source>failed to get random outputs to mix: %s</source> <translation>det gick inte att hitta slumpmässiga utgångar att mixa: %s</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1003"/> - <location filename="../src/wallet/api/wallet.cpp" line="1097"/> - <source>not enough money to transfer, available only %s, transaction amount %s = %s + %s (fee)</source> - <translation>ej tillräckligt med pengar för överföring, endast tillgängligt %s, transaktionsbelopp %s = %s + %s (avgift)</translation> + <location filename="../src/wallet/api/wallet.cpp" line="1179"/> + <location filename="../src/wallet/api/wallet.cpp" line="1283"/> + <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="1012"/> - <location filename="../src/wallet/api/wallet.cpp" line="1106"/> - <source>not enough outputs for specified mixin_count</source> - <translation>inte tillräckligt många utgångar för angiven mixin_count</translation> + <location filename="../src/wallet/api/wallet.cpp" line="1188"/> + <location filename="../src/wallet/api/wallet.cpp" line="1292"/> + <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="1014"/> - <location filename="../src/wallet/api/wallet.cpp" line="1108"/> + <location filename="../src/wallet/api/wallet.cpp" line="1199"/> + <location filename="../src/wallet/api/wallet.cpp" line="1303"/> <source>output amount</source> <translation>utgångens belopp</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1014"/> - <location filename="../src/wallet/api/wallet.cpp" line="1108"/> - <source>found outputs to mix</source> - <translation>hittade utgångar att mixa</translation> - </message> - <message> - <location filename="../src/wallet/api/wallet.cpp" line="1019"/> - <location filename="../src/wallet/api/wallet.cpp" line="1113"/> + <location filename="../src/wallet/api/wallet.cpp" line="1205"/> + <location filename="../src/wallet/api/wallet.cpp" line="1308"/> <source>transaction was not constructed</source> <translation>transaktionen konstruerades inte</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1023"/> - <location filename="../src/wallet/api/wallet.cpp" line="1117"/> + <location filename="../src/wallet/api/wallet.cpp" line="1209"/> + <location filename="../src/wallet/api/wallet.cpp" line="1312"/> <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="1030"/> - <location filename="../src/wallet/api/wallet.cpp" line="1124"/> + <location filename="../src/wallet/api/wallet.cpp" line="1216"/> + <location filename="../src/wallet/api/wallet.cpp" line="1319"/> <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="1033"/> - <location filename="../src/wallet/api/wallet.cpp" line="1127"/> + <location filename="../src/wallet/api/wallet.cpp" line="1219"/> + <location filename="../src/wallet/api/wallet.cpp" line="1322"/> <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="1036"/> - <location filename="../src/wallet/api/wallet.cpp" line="1130"/> + <location filename="../src/wallet/api/wallet.cpp" line="1222"/> + <location filename="../src/wallet/api/wallet.cpp" line="1325"/> <source>unknown transfer error: </source> <translation>okänt överföringsfel: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1039"/> - <location filename="../src/wallet/api/wallet.cpp" line="1133"/> + <location filename="../src/wallet/api/wallet.cpp" line="1225"/> + <location filename="../src/wallet/api/wallet.cpp" line="1328"/> <source>internal error: </source> <translation>internt fel: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1042"/> - <location filename="../src/wallet/api/wallet.cpp" line="1136"/> + <location filename="../src/wallet/api/wallet.cpp" line="1228"/> + <location filename="../src/wallet/api/wallet.cpp" line="1331"/> <source>unexpected error: </source> <translation>oväntat fel: </translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1045"/> - <location filename="../src/wallet/api/wallet.cpp" line="1139"/> + <location filename="../src/wallet/api/wallet.cpp" line="1231"/> + <location filename="../src/wallet/api/wallet.cpp" line="1334"/> <source>unknown error</source> <translation>okänt fel</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="1419"/> - <source>Rescan spent can only be used with a trusted daemon</source> - <translation>Genomsök efter spenderade kan endast användas med en betrodd daemon</translation> - </message> -</context> -<context> - <name>Monero::WalletManagerImpl</name> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="192"/> - <source>failed to parse txid</source> - <translation>det gick inte att parsa transaktions-id</translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="199"/> - <location filename="../src/wallet/api/wallet_manager.cpp" line="206"/> - <source>failed to parse tx key</source> - <translation>det gick inte att parsa transaktionsnyckeln</translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="217"/> - <source>failed to parse address</source> - <translation>det gick inte att parsa adressen</translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="227"/> - <source>failed to get transaction from daemon</source> - <translation>det gick inte att hämta transaktion från daemon</translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="238"/> - <source>failed to parse transaction from daemon</source> - <translation>det gick inte att parsa transaktion från daemonen</translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="245"/> - <source>failed to validate transaction from daemon</source> - <translation>det gick inte att validera transaktion från daemon</translation> - </message> - <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="250"/> - <source>failed to get the right transaction from daemon</source> - <translation>det gick inte att hämta rätt transaktion från daemonen</translation> + <location filename="../src/wallet/api/wallet.cpp" line="1412"/> + <location filename="../src/wallet/api/wallet.cpp" line="1441"/> + <location filename="../src/wallet/api/wallet.cpp" line="1494"/> + <location filename="../src/wallet/api/wallet.cpp" line="1525"/> + <location filename="../src/wallet/api/wallet.cpp" line="1556"/> + <location filename="../src/wallet/api/wallet.cpp" line="1579"/> + <source>Failed to parse txid</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="257"/> - <source>failed to generate key derivation from supplied parameters</source> - <translation>det gick inte att skapa nyckelhärledning från angivna parametrar</translation> + <location filename="../src/wallet/api/wallet.cpp" line="1430"/> + <source>no tx keys found for this txid</source> + <translation type="unfinished">inga tx-nycklar kunde hittas för detta txid</translation> </message> <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="313"/> - <source>error: </source> - <translation>fel: </translation> + <location filename="../src/wallet/api/wallet.cpp" line="1450"/> + <location filename="../src/wallet/api/wallet.cpp" line="1460"/> + <source>Failed to parse tx key</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="319"/> - <source>received</source> - <translation>mottaget</translation> + <location filename="../src/wallet/api/wallet.cpp" line="1470"/> + <location filename="../src/wallet/api/wallet.cpp" line="1502"/> + <location filename="../src/wallet/api/wallet.cpp" line="1533"/> + <location filename="../src/wallet/api/wallet.cpp" line="1621"/> + <source>Failed to parse address</source> + <translation type="unfinished">Det gick inte att parsa adressen</translation> </message> <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="319"/> - <source>in txid</source> - <translation>i transaktions-id</translation> + <location filename="../src/wallet/api/wallet.cpp" line="1627"/> + <source>Address must not be a subaddress</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/api/wallet_manager.cpp" line="323"/> - <source>received nothing in txid</source> - <translation>tog emot ingenting i transaktions-id</translation> + <location filename="../src/wallet/api/wallet.cpp" line="1849"/> + <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> </context> <context> <name>Wallet</name> <message> - <location filename="../src/wallet/api/wallet.cpp" line="212"/> + <location filename="../src/wallet/api/wallet.cpp" line="246"/> <source>Failed to parse address</source> <translation>Det gick inte att parsa adressen</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="219"/> + <location filename="../src/wallet/api/wallet.cpp" line="253"/> <source>Failed to parse key</source> <translation>Det gick inte att parsa nyckeln</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="227"/> + <location filename="../src/wallet/api/wallet.cpp" line="261"/> <source>failed to verify key</source> <translation>det gick inte att verifiera nyckeln</translation> </message> <message> - <location filename="../src/wallet/api/wallet.cpp" line="237"/> + <location filename="../src/wallet/api/wallet.cpp" line="271"/> <source>key does not match address</source> <translation>nyckeln matchar inte adressen</translation> </message> @@ -405,1911 +406,3080 @@ <context> <name>command_line</name> <message> - <location filename="../src/common/command_line.cpp" line="76"/> + <location filename="../src/common/command_line.cpp" line="57"/> <source>yes</source> <translation>ja</translation> </message> + <message> + <location filename="../src/common/command_line.cpp" line="71"/> + <source>no</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>cryptonote::rpc_args</name> <message> - <location filename="../src/rpc/rpc_args.cpp" line="38"/> - <source>Specify ip to bind rpc server</source> - <translation>Ange IP-adress för att binda till RPC-server</translation> + <location filename="../src/rpc/rpc_args.cpp" line="40"/> + <source>Specify IP to bind RPC server</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="39"/> + <location filename="../src/rpc/rpc_args.cpp" line="41"/> <source>Specify username[:password] required for RPC server</source> <translation>Ange användarnamn[:lösenord] som krävs av RPC-servern</translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="40"/> + <location filename="../src/rpc/rpc_args.cpp" line="42"/> <source>Confirm rpc-bind-ip value is NOT a loopback (local) IP</source> <translation>Bekräftelsevärde för rpc-bind-ip är INTE ett lokalt (loopback) IP</translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="66"/> + <location filename="../src/rpc/rpc_args.cpp" line="43"/> + <source>Specify a comma separated list of origins to allow cross origin resource sharing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/rpc/rpc_args.cpp" line="70"/> <source>Invalid IP address given for --</source> <translation>Ogiltig IP-adress angiven för --</translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="74"/> + <location filename="../src/rpc/rpc_args.cpp" line="78"/> <source> permits inbound unencrypted external connections. Consider SSH tunnel or SSL proxy instead. Override with --</source> <translation> tillåter inkommande okrypterade externa anslutningar. Överväg att använda SSH-tunnel eller SSL-proxy istället. Åsidosätt med --</translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="89"/> + <location filename="../src/rpc/rpc_args.cpp" line="95"/> <source>Username specified with --</source> <translation>Användarnamn angivet med --</translation> </message> <message> - <location filename="../src/rpc/rpc_args.cpp" line="89"/> + <location filename="../src/rpc/rpc_args.cpp" line="95"/> + <location filename="../src/rpc/rpc_args.cpp" line="105"/> <source> cannot be empty</source> <translation> kan inte vara tomt</translation> </message> + <message> + <location filename="../src/rpc/rpc_args.cpp" line="105"/> + <source> requires RFC server password --</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>cryptonote::simple_wallet</name> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="290"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="479"/> <source>Commands: </source> <translation>Kommandon: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1557"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3008"/> <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="1325"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2699"/> <source>invalid password</source> <translation>ogiltigt lösenord</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="697"/> - <source>start_mining [<number_of_threads>] - Start mining in daemon</source> - <translation>start_mining [<antal_trådar>] - Starta brytning i daemonen</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="698"/> - <source>Stop mining in daemon</source> - <translation>Avbryt brytning i daemonen</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="699"/> - <source>Save current blockchain data</source> - <translation>Spara aktuella blockkedje-data</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="701"/> - <source>Show current wallet balance</source> - <translation>Visa aktuellt saldo för plånboken</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="704"/> - <source>Show blockchain height</source> - <translation>Visa blockkedjans höjd</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="715"/> - <source>Show current wallet public address</source> - <translation>Visa plånbokens aktuella öppna adress</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="744"/> - <source>Show this help</source> - <translation>Visa denna hjälp</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="788"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1905"/> <source>set seed: needs an argument. available options: language</source> <translation>set seed: behöver ett argument. tillgängliga alternativ: språk</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="811"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1933"/> <source>set: unrecognized argument(s)</source> <translation>set: okända argument</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1442"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2869"/> <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="863"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1987"/> <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 existerar. Avslutar för att inte riskera att skriva över någonting.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="416"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="662"/> <source>usage: payment_id</source> <translation>användning: payment_id</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="710"/> - <source>sweep_below <amount_threshold> [mixin] address [payment_id] - Send all unlocked outputs below the threshold to an address</source> - <translation>sweep_below <tröskelbelopp> [mixin] <adress> [<betalnings_ID>] - Skicka alla upplåsta utgångar under tröskelbeloppet till en adress</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="743"/> - <source>Generate a new random full size payment id - these will be unencrypted on the blockchain, see integrated_address for encrypted short payment ids</source> - <translation>Skapa ett nytt slumpmässigt betalnings-ID av full storlek - 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="774"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1891"/> <source>needs an argument</source> <translation>kräver ett argument</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="797"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="798"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="799"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="801"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="804"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="805"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="809"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1914"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1915"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1916"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1918"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1921"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1922"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1926"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1927"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1929"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1931"/> <source>0 or 1</source> <translation>0 eller 1</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="800"/> - <source>integer >= 2</source> - <translation>heltal >= 2</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="803"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1920"/> <source>0, 1, 2, 3, or 4</source> <translation>0, 1, 2, 3 eller 4</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="807"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1924"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1928"/> <source>unsigned integer</source> <translation>positivt heltal</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="912"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2041"/> <source>NOTE: the following 25 words 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>OBSERVERA: följande 25 ord kan användas för att återfå tillgång till din plånbok. Skriv ner och spara dem på ett säkert ställe. Spara dem inte i din e-post eller på något lagringsutrymme som du inte har direkt kontroll över. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="958"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2092"/> <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="973"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2121"/> <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="1123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2471"/> <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="1261"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2635"/> <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="1269"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2643"/> <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="1288"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2662"/> <source>List of available languages for your wallet's seed:</source> <translation>Lista över tillgängliga språk för din plånboks frö:</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1297"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2671"/> <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="1354"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2737"/> <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 frö som vi tillhandahåller. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1368"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1425"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2751"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2809"/> <source>Generated new wallet: </source> <translation>Ny plånbok skapad: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1374"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1430"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2757"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2814"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2858"/> <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="1457"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2887"/> <source>Opened watch-only wallet</source> <translation>Öppnade plånbok för granskning</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1457"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2891"/> <source>Opened wallet</source> <translation>Öppnade plånbok</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1466"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2901"/> <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="1481"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2916"/> <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="1489"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2924"/> <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="1497"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2941"/> <source>Use the "help" command to see the list of available commands. </source> <translation>Använd kommandot "help" för att se en lista över tillgängliga kommandon. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1541"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2986"/> <source>Wallet data saved</source> <translation>Plånboksdata sparades</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1613"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3072"/> <source>Mining started in daemon</source> <translation>Brytning startad i daemonen</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1615"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3074"/> <source>mining has NOT been started: </source> <translation>brytning har INTE startats: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1634"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3093"/> <source>Mining stopped in daemon</source> <translation>Brytning stoppad i daemonen</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3095"/> <source>mining has NOT been stopped: </source> <translation>brytning har INTE stoppats: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1655"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3150"/> <source>Blockchain saved</source> <translation>Blockkedjan sparad</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1670"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1687"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1699"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3165"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3183"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3196"/> <source>Height </source> <translation>Höjd </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1671"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1688"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1700"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3197"/> <source>transaction </source> <translation>transaktion </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1672"/> - <source>received </source> - <translation>mottaget </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1689"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3185"/> <source>spent </source> <translation>spenderad </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1701"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3198"/> <source>unsupported transaction format</source> <translation>transaktionsformatet stöds inte</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1718"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3219"/> <source>Starting refresh...</source> <translation>Startar uppdatering …</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1731"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3232"/> <source>Refresh done, blocks received: </source> <translation>Uppdatering färdig, mottagna block: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2186"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2701"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3758"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4230"/> <source>payment id has invalid format, expected 16 or 64 character hex string: </source> <translation>betalnings-ID har ogiltigt format. En 16- eller 64-teckens hex-sträng förväntades: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2201"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3773"/> <source>bad locked_blocks parameter:</source> <translation>dålig parameter för locked_blocks:</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2228"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2726"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3801"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4248"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4462"/> <source>a single transaction cannot use more than one payment id: </source> <translation>en enstaka transaktion kan inte använda mer än ett betalnings-ID: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2237"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2735"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3810"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4257"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4430"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4470"/> <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="2262"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2355"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2533"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2749"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2794"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3835"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3916"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3987"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4096"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4271"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4329"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4484"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4527"/> <source>transaction cancelled.</source> <translation>transaktion avbröts.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2323"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3895"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3905"/> + <source>Is this okay anyway? (Y/Yes/N/No): </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3900"/> + <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="3905"/> + <source>Failed to check for backlog: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3946"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4302"/> + <source> +Transaction </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3951"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4307"/> + <source>Spending from address index %d +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3953"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4309"/> + <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="3955"/> <source>Sending %s. </source> <translation>Skickar %s. </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2326"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3958"/> <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 kommer att göra att en transaktionsavgift läggs till varje transaktion, med ett totalt belopp på %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2332"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3964"/> <source>The transaction fee is %s</source> <translation>Transaktionsavgiften är %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2335"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3967"/> <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="2336"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3968"/> <source>.</source> <translation>.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2336"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3968"/> <source>A total of %s from dust change will be sent to dust address</source> <translation>Ett total belopp på %s från växeldamm kommer att skickas till damm-adressen</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2341"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3973"/> <source>. This transaction will unlock on block %llu, in approximately %s days (assuming 2 minutes per block)</source> <translation>. Denna transaktion kommer att låsas 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="2367"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2544"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2805"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3999"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4011"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4107"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4119"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4340"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4352"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4537"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4549"/> <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="2371"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2548"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2809"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4003"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4015"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4111"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4344"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4356"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4541"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4553"/> <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="2406"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2583"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2844"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3157"/> - <source>Not enough money in unlocked balance</source> - <translation>Inte tillräckligt med pengar i upplåst saldo</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2415"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2592"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2853"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3166"/> - <source>Failed to find a way to create transactions. This is usually due to dust which is so small it cannot pay for itself in fees, or trying to send more money than the unlocked balance, or not leaving enough for fees</source> - <translation>Det gick inte att hitta något sätt att skapa transaktioner. Detta beror vanligtvis på damm som är så litet att det inte kan betala för sig självt i avgifter, eller ett försök att skicka mer pengar än upplåst saldo, eller att inte lämna tillräckligt för att täcka avgifterna</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2435"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2612"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2873"/> - <source>Reason: </source> - <translation>Orsak: </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2447"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2624"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2885"/> - <source>failed to find a suitable way to split transactions</source> - <translation>det gick inte att hitta ett lämpligt sätt att dela upp transaktioner</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2503"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4066"/> <source>No unmixable outputs found</source> <translation>Inga omixbara utgångar kunde hittas</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2709"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4149"/> <source>No address given</source> <translation>Ingen adress har angivits</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2921"/> - <source>missing amount threshold</source> - <translation>beloppströskel saknas</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2926"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4591"/> <source>invalid amount threshold</source> <translation>ogiltig beloppströskel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3008"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4702"/> <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="3013"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4707"/> <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="3035"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4738"/> <source>sending %s to %s</source> <translation>skickar %s till %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3041"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4751"/> <source>with no destinations</source> <translation>utan några mål</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4809"/> <source>Failed to sign transaction</source> <translation>Det gick inte att signera transaktionen</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3094"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4815"/> <source>Failed to sign transaction: </source> <translation>Det gick inte att signera transaktion: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3120"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4852"/> <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="3137"/> - <source>daemon is busy. Please try later</source> - <translation>daemonen är upptagen. Försök senare</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1745"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1995"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2395"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2572"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2833"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3146"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3248"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3551"/> <source>RPC error: </source> <translation>RPC-fel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="312"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="522"/> <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="390"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="636"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="780"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="848"/> <source>Your original password was incorrect.</source> <translation>Ditt ursprungliga lösenord var fel.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="404"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="650"/> <source>Error with wallet rewrite: </source> <translation>Fel vid återskrivning av plånbok: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="513"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1289"/> <source>priority must be 0, 1, 2, 3, or 4 </source> <translation>prioritet måste vara 0, 1, 2, 3 eller 4 </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="525"/> - <source>priority must be 0, 1, 2, 3,or 4</source> - <translation>prioritet måste vara 0, 1, 2, 3 eller 4</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="540"/> - <source>priority must be 0, 1, 2 3,or 4</source> - <translation>prioritet måste vara 0, 1, 2, 3 eller 4</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="623"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1404"/> <source>invalid unit</source> <translation>ogiltig enhet</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="641"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1422"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1484"/> <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="659"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1440"/> <source>invalid value</source> <translation>ogiltigt värde</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="705"/> - <source>Same as transfer, but using an older transaction building algorithm</source> - <translation>Samma som transfer, men använder en äldre algoritm för att bygga transaktionen</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="1942"/> + <source>usage: set_log <log_level_number_0-4> | <categories></source> + <translation>användning: set_log <loggnivå_nummer_0-4> | <kategorier></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="709"/> - <source>sweep_all [mixin] address [payment_id] - Send all unlocked balance to an address</source> - <translation>sweep_all [mixin] adress [betalnings_id] - Skicka allt upplåst saldo till en adress</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="711"/> - <source>donate [<mixin_count>] <amount> [payment_id] - Donate <amount> to the development team (donate.getmonero.org)</source> - <translation>donate [<mixin_antal>] <belopp> [<betalnings_id>] - Donera <belopp> till utvecklingsteamet (donate.getmonero.org)</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="714"/> - <source>set_log <level>|<categories> - Change current log detail (level must be <0-4>)</source> - <translation>set_log <nivå>|<kategorier> - Ändra detaljnivån för aktuell logg (nivå måste vara 0-4)</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="717"/> - <source>address_book [(add (<address> [pid <long or short payment id>])|<integrated address> [<description possibly with whitespaces>])|(delete <index>)] - Print all entries in the address book, optionally adding/deleting an entry to/from it</source> - <translation>address_book [(add (<adress> [pid <långt eller kort betalnings-ID>])|<integrerad adress> [<beskrivning eventuellt med blanktecken>])|(delete <index>)] - Skriv ut alla poster i adressboken, eventuellt lägg till/ta bort en post till/från den</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="729"/> - <source>show_transfers [in|out|pending|failed|pool] [<min_height> [<max_height>]] - Show incoming/outgoing transfers within an optional height range</source> - <translation>show_transfers [in|out|pending|failed|pool] [<min_höjd> [<max_höjd>]] - Visa inkommande/utgående överföringar inom ett valfritt höjdintervall</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="741"/> - <source>Show information about a transfer to/from this address</source> - <translation>Visa information om en överföring till/från denna adress</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="742"/> - <source>Change wallet password</source> - <translation>Ändra lösenord för plånbok</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="820"/> - <source>usage: set_log <log_level_number_0-4> | <categories></source> - <translation>användning: set_log <loggnivå_nummer_0-4> | <kategorier></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="886"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2013"/> <source>(Y/Yes/N/No): </source> <translation>(J/Ja/N/Nej): </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1157"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1184"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2509"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2536"/> <source>bad m_restore_height parameter: </source> <translation>dålig parameter för m_restore_height: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1162"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2514"/> <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="1175"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2527"/> <source>Restore height is: </source> <translation>Återställningshöjd är: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1176"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2348"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2528"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3980"/> <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="1212"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2575"/> <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="1553"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3004"/> <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="1604"/> - <source>invalid arguments. Please use start_mining [<number_of_threads>] [do_bg_mining] [ignore_battery], <number_of_threads> should be from 1 to </source> - <translation>ogiltiga argument. Använd start_mining [<antal_trådar>] [do_bg_mining] [ignore_battery], <antal_trådar> ska vara från 1 till </translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="3063"/> + <source>invalid arguments. Please use start_mining [<number_of_threads>] [do_bg_mining] [ignore_battery], <number_of_threads> should be from 1 to </source> + <translation>ogiltiga argument. Använd start_mining [<antal_trådar>] [do_bg_mining] [ignore_battery], <antal_trådar> ska vara från 1 till </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1755"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2457"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2634"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2895"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3205"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3258"/> <source>internal error: </source> <translation>internt fel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1760"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2000"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2462"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2639"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2900"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3210"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1185"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3263"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3556"/> <source>unexpected error: </source> <translation>oväntat fel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1765"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2005"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2467"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2644"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2905"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3215"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1119"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1190"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3268"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3561"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4030"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4138"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4371"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4570"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4865"/> <source>unknown error</source> <translation>okänt fel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1770"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3273"/> <source>refresh failed: </source> <translation>det gick inte att att uppdatera: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1770"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3273"/> <source>Blocks received: </source> <translation>Mottagna block: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1795"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3304"/> <source>unlocked balance: </source> <translation>upplåst saldo: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="808"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1925"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> <source>amount</source> <translation>belopp</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="219"/> + <source>false</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="493"/> + <source>Unknown command: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="500"/> + <source>Command usage: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="503"/> + <source>Command description: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="551"/> + <source>wallet is multisig but not yet finalized</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="567"/> + <source>Enter optional seed encryption passphrase, empty to see raw seed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="584"/> + <source>Failed to retrieve seed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="603"/> + <source>wallet is multisig and has no seed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="674"/> + <source>Cannot connect to daemon</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="679"/> + <source>Current fee is %s monero per kB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="695"/> + <source>Error: failed to estimate backlog array size: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="700"/> + <source>Error: bad estimated backlog array size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="712"/> + <source> (current)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="715"/> + <source>%u block (%u minutes) backlog at priority %u%s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="717"/> + <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="720"/> + <source>No backlog at priority </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="729"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="762"/> + <source>This wallet is already multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="734"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="767"/> + <source>wallet is watch-only and cannot be made multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="740"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="773"/> + <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="747"/> + <source>Your password is incorrect.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="753"/> + <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="754"/> + <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="786"/> + <source>usage: make_multisig <threshold> <multisiginfo1> [<multisiginfo2>...]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="794"/> + <source>Invalid threshold</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="807"/> + <source>Another step is needed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="809"/> + <source>Send this multisig info to all other participants, then use finalize_multisig <info1> [<info2>...] with others' multisig info</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="815"/> + <source>Error creating multisig: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="822"/> + <source>Error creating multisig: new wallet is not multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="825"/> + <source> multisig address: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="836"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="880"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="927"/> + <source>This wallet is not multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="841"/> + <source>This wallet is already finalized</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="854"/> + <source>usage: finalize_multisig <multisiginfo1> [<multisiginfo2>...]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="862"/> + <source>Failed to finalize multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="868"/> + <source>Failed to finalize multisig: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="885"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="932"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1006"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1074"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1136"/> + <source>This multisig wallet is not yet finalized</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="890"/> + <source>usage: export_multisig_info <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="913"/> + <source>Error exporting multisig info: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="917"/> + <source>Multisig info exported to </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="937"/> + <source>usage: import_multisig_info <filename1> [<filename2>...] - one for each other participant</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="965"/> + <source>Multisig info imported</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="969"/> + <source>Failed to import multisig info: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="980"/> + <source>Failed to update spent status after importing multisig info: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="985"/> + <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="1001"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1069"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1131"/> + <source>This is not a multisig wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1011"/> + <source>usage: sign_multisig <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1024"/> + <source>Failed to sign multisig transaction</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1030"/> + <source>Multisig error: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1035"/> + <source>Failed to sign multisig transaction: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1058"/> + <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="1079"/> + <source>usage: submit_multisig <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1094"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1155"/> + <source>Failed to load multisig transaction from file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1160"/> + <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="1108"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6750"/> + <source>Transaction successfully submitted, transaction </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1109"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6751"/> + <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="1141"/> + <source>usage: export_raw_multisig <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1176"/> + <source>Failed to export multisig transaction to file </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1180"/> + <source>Saved exported multisig transaction file(s): </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1252"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1258"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1272"/> + <source>ring size must be an integer >= </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1277"/> + <source>could not change default ring size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1301"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1316"/> + <source>priority must be 0, 1, 2, 3, or 4</source> + <translation type="unfinished">prioritet måste vara 0, 1, 2, 3 eller 4 {0, 1, 2, 3,?} {4?}</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1518"/> + <source>Invalid height</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1564"/> + <source>start_mining [<number_of_threads>] [bg_mining] [ignore_battery]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1565"/> + <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="1568"/> + <source>Stop mining in the daemon.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1571"/> + <source>set_daemon <host>[:<port>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1572"/> + <source>Set another daemon to connect to.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1575"/> + <source>Save the current blockchain data.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1578"/> + <source>Synchronize the transactions and balance.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1581"/> + <source>balance [detail]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1582"/> + <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="1585"/> + <source>incoming_transfers [available|unavailable] [verbose] [index=<N1>[,<N2>[,...]]]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1586"/> + <source>Show the incoming transfers, all or filtered by availability and address index.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1589"/> + <source>payments <PID_1> [<PID_2> ... <PID_N>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1590"/> + <source>Show the payments for the given payment IDs.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1593"/> + <source>Show the blockchain height.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1596"/> + <source>transfer_original [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> <amount> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1597"/> + <source>Transfer <amount> to <address> using an older transaction building algorithm. 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 <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="1599"/> + <source>transfer [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> <amount> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1600"/> + <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 <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="1603"/> + <source>locked_transfer [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <addr> <amount> <lockblocks> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1604"/> + <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 <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="1607"/> + <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="1609"/> + <source>sweep_all [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1610"/> + <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.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1613"/> + <source>sweep_below <amount_threshold> [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1614"/> + <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="1617"/> + <source>sweep_single [<priority>] [<ring_size>] <key_image> <address> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1618"/> + <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="1621"/> + <source>donate [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <amount> [<payment_id>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1622"/> + <source>Donate <amount> to the development team (donate.getmonero.org).</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1625"/> + <source>sign_transfer <file></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1626"/> + <source>Sign a transaction from a <file>.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1629"/> + <source>Submit a signed transaction from a file.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1632"/> + <source>set_log <level>|{+,-,}<categories></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1633"/> + <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="1636"/> + <source>account + account new <label text with white spaces allowed> + account switch <index> + account label <index> <label text with white spaces allowed> + account tag <tag_name> <account_index_1> [<account_index_2> ...] + account untag <account_index_1> [<account_index_2> ...] + account tag_description <tag_name> <description></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1643"/> + <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>. +If the "label" argument is specified, the wallet sets the label of the account specified by <index> to the provided label text. +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> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1652"/> + <source>address [ new <label text with white spaces allowed> | all | <index_min> [<index_max>] | label <index> <label text with white spaces allowed>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1653"/> + <source>If no arguments are specified or <index> is specified, the wallet shows the default or specified address. If "all" is specified, the walllet 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="1656"/> + <source>integrated_address [<payment_id> | <address>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1657"/> + <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="1660"/> + <source>address_book [(add ((<address> [pid <id>])|<integrated address>) [<description possibly with whitespaces>])|(delete <index>)]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1661"/> + <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="1664"/> + <source>Save the wallet data.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1667"/> + <source>Save a watch-only keys file.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1670"/> + <source>Display the private view key.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1673"/> + <source>Display the private spend key.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1676"/> + <source>Display the Electrum-style mnemonic seed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1679"/> + <source>set <option> [<value>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1680"/> + <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 (default and minimum is 5). + 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 too default/unimportant/normal/elevated/priority. + confirm-missing-payment-id <1|0> + ask-password <1|0> + 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.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1717"/> + <source>Display the encrypted Electrum-style mnemonic seed.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1720"/> + <source>Rescan the blockchain for spent outputs.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1723"/> + <source>get_tx_key <txid></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1724"/> + <source>Get the transaction key (r) for a given <txid>.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1727"/> + <source>check_tx_key <txid> <txkey> <address></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1728"/> + <source>Check the amount going to <address> in <txid>.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1731"/> + <source>get_tx_proof <txid> <address> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1732"/> + <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="1735"/> + <source>check_tx_proof <txid> <address> <signature_file> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1736"/> + <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="1739"/> + <source>get_spend_proof <txid> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1740"/> + <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="1743"/> + <source>check_spend_proof <txid> <signature_file> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1744"/> + <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="1747"/> + <source>get_reserve_proof (all|<amount>) [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1748"/> + <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="1753"/> + <source>check_reserve_proof <address> <signature_file> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1754"/> + <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="1757"/> + <source>show_transfers [in|out|pending|failed|pool] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1758"/> + <source>Show the incoming/outgoing transfers within an optional height range.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1761"/> + <source>unspent_outputs [index=<N1>[,<N2>,...]] [<min_amount> [<max_amount>]]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1762"/> + <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="1765"/> + <source>Rescan the blockchain from scratch.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1768"/> + <source>set_tx_note <txid> [free text note]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1769"/> + <source>Set an arbitrary string note for a <txid>.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1772"/> + <source>get_tx_note <txid></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1773"/> + <source>Get a string note for a txid.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1776"/> + <source>set_description [free text note]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1777"/> + <source>Set an arbitrary description for the wallet.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1780"/> + <source>Get the description of the wallet.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1783"/> + <source>Show the wallet's status.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1786"/> + <source>Show the wallet's information.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1789"/> + <source>sign <file></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1790"/> + <source>Sign the contents of a file.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1793"/> + <source>verify <filename> <address> <signature></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1794"/> + <source>Verify a signature on the contents of a file.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1797"/> + <source>export_key_images <file></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1798"/> + <source>Export a signed set of key images to a <file>.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1801"/> + <source>import_key_images <file></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1802"/> + <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="1805"/> + <source>export_outputs <file></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1806"/> + <source>Export a set of outputs owned by this wallet.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1809"/> + <source>import_outputs <file></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1810"/> + <source>Import a set of outputs owned by this wallet.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1813"/> + <source>show_transfer <txid></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1814"/> + <source>Show information about a transfer to/from this address.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1817"/> + <source>Change the wallet's password.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1820"/> + <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="1823"/> + <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="1825"/> + <source>Export data needed to create a multisig wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1827"/> + <source>make_multisig <threshold> <string1> [<string>...]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1828"/> + <source>Turn this wallet into a multisig wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1831"/> + <source>finalize_multisig <string> [<string>...]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1832"/> + <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="1835"/> + <source>export_multisig_info <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1836"/> + <source>Export multisig info for other participants</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1839"/> + <source>import_multisig_info <filename> [<filename>...]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1840"/> + <source>Import multisig info from other participants</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1843"/> + <source>sign_multisig <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1844"/> + <source>Sign a multisig transaction from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1847"/> + <source>submit_multisig <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1848"/> + <source>Submit a signed multisig transaction from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1851"/> + <source>export_raw_multisig_tx <filename></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1852"/> + <source>Export a signed multisig transaction to a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1855"/> + <source>help [<command>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1856"/> + <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="1917"/> + <source>integer >= </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="1930"/> + <source>block height</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2012"/> + <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="2068"/> + <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" and --generate-from-json="jsonfilename"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2084"/> + <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="2090"/> + <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="2106"/> + <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="2133"/> + <source>Multisig seed failed verification</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2149"/> + <source>Enter seed encryption passphrase, empty if none</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2185"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2259"/> + <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="2337"/> + <source>Error: expected M/N, but got: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2342"/> + <source>Error: expected N > 1 and N <= M, but got: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2347"/> + <source>Error: M/N is currently unsupported. </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2350"/> + <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="2379"/> + <source>failed to parse secret view key</source> + <translation type="unfinished">det gick inte att parsa hemlig visningsnyckel</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2388"/> + <source>failed to verify secret view key</source> + <translation type="unfinished">det gick inte att verifiera hemlig visningsnyckel</translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2408"/> + <source>Secret spend key (%u of %u):</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2432"/> + <source>Error: M/N is currently unsupported</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2550"/> + <source>Restore height </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2551"/> + <source>Still apply restore height? (Y/Yes/N/No): </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2582"/> + <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="2636"/> + <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="2680"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2685"/> + <source>invalid language choice entered. Please try again. +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2768"/> + <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. +Use "help <command>" to see a command's documentation. +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> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2850"/> + <source>failed to generate new mutlisig wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2853"/> + <source>Generated new %u/%u multisig wallet: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2889"/> + <source>Opened %u/%u multisig wallet%s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="2942"/> + <source>Use "help <command>" to see a command's documentation. +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3000"/> + <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="3105"/> + <source>missing daemon URL argument</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3116"/> + <source>Unexpected array length - Exited simple_wallet::set_daemon()</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3130"/> + <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="3166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3184"/> + <source>txid </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3168"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3186"/> + <source>idx </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3299"/> + <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="3300"/> + <source>Currently selected account: [</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3300"/> + <source>] </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3302"/> + <source>Tag: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3302"/> + <source>(No tag assigned)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3309"/> + <source>Balance per address:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <source>Address</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5921"/> + <source>Balance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5921"/> + <source>Unlocked balance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <source>Outputs</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3310"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5921"/> + <source>Label</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3318"/> + <source>%8u %6s %21s %21s %7u %21s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3327"/> + <source>usage: balance [detail]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3339"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3381"/> + <source>usage: incoming_transfers [available|unavailable] [verbose] [index=<N>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> <source>spent</source> <translation>spenderad</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> <source>global index</source> <translation>globalt index</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> <source>tx id</source> <translation>tx-ID</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1868"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> + <source>addr index</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3423"/> <source>No incoming transfers</source> <translation>Inga inkommande överföringar</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1872"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3427"/> <source>No incoming available transfers</source> <translation>Inga inkommande tillgängliga överföringar</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1876"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3431"/> <source>No incoming unavailable transfers</source> <translation>Inga inkommande otillgängliga överföringar</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1887"/> - <source>expected at least one payment_id</source> - <translation>åtminstone ett payment_id förväntades</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="6743"/> + <source>Transaction successfully saved to </source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6743"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6745"/> + <source>, txid </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6745"/> + <source>Failed to save transaction to </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> <source>payment</source> <translation>betalning</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> <source>transaction</source> <translation>transaktion</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> <source>height</source> <translation>höjd</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1896"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3451"/> <source>unlock time</source> <translation>upplåsningstid</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1908"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3463"/> <source>No payments with id </source> <translation>Inga betalningar med ID </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1960"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2026"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2280"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3516"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3582"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3853"/> <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="2016"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3572"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5136"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5174"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5226"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5259"/> <source>failed to connect to the daemon</source> <translation>det gick inte att ansluta till daemonen</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2034"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3590"/> <source> Transaction %llu/%llu: txid=%s</source> <translation> Transaktion %llu/%llu: txid=%s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2044"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3600"/> <source> Input %llu/%llu: amount=%s</source> <translation> Ingång %llu/%llu: belopp=%s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2060"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3616"/> <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="2068"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3624"/> <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="2072"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3628"/> <source> Originating block heights: </source> <translation> Ursprungsblockhöjder: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2087"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3643"/> <source> |</source> <translation> |</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2087"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3915"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3643"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5651"/> <source>| </source> <translation>| </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2104"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3660"/> <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="2106"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3662"/> <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="2152"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2937"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3724"/> <source>wrong number of arguments</source> <translation>fel antal argument</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2257"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2744"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3830"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4266"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4479"/> <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> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2298"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2762"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3872"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4286"/> <source>No outputs found, or daemon is not ready</source> <translation>Inga utgångar hittades, eller så är daemonen inte redo</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2399"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2576"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2837"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3150"/> - <source>failed to get random outputs to mix: </source> - <translation>det gick inte att hitta slumpmässiga utgångar att mixa: </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2518"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2779"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4081"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4314"/> <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="2524"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4087"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4320"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4519"/> <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="2969"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4630"/> <source>Donating </source> <translation>Donerar </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3053"/> - <source>Loaded %lu transactions, for %s, fee %s, %s, %s, with min mixin %lu. %sIs this okay? (Y/Yes/N/No): </source> - <translation>Läste in %lu transaktioner, för %s, avgift %s, %s, %s, med minsta mixin %lu. %sÄr detta okej? (J/Ja/N/Nej): </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3077"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4792"/> <source>This is a watch only wallet</source> <translation>Detta är en granskningsplånbok</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4443"/> - <source>usage: show_transfer <txid></source> - <translation>användning: show_transfer <transaktions-ID></translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="6571"/> + <source>usage: show_transfer <txid></source> + <translation>användning: show_transfer <transaktions-ID></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4557"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6673"/> + <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="6708"/> <source>Transaction ID not found</source> <translation>Transaktions-ID kunde inte hittas</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="237"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="214"/> <source>true</source> <translation>sant</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="266"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="267"/> <source>failed to parse refresh type</source> <translation>det gick inte att parsa uppdateringstyp</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="330"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="362"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="541"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="608"/> <source>wallet is watch-only and has no seed</source> <translation>plånboken är enbart för granskning och saknar frö</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="353"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="367"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="557"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="613"/> <source>wallet is non-deterministic and has no seed</source> <translation>plånboken är icke-deterministisk och saknar frö</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="450"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="467"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1226"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1245"/> <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="474"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="480"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="496"/> - <source>mixin must be an integer >= 2</source> - <translation>mixin måste vara ett heltal >= 2</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="501"/> - <source>could not change default mixin</source> - <translation>det gick inte att ändra standardinställning för mixin</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="545"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1321"/> <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="700"/> - <source>Synchronize transactions and balance</source> - <translation>Synkronisera transaktioner och saldo</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="702"/> - <source>incoming_transfers [available|unavailable] - Show incoming transfers, all or filtered by availability</source> - <translation>incoming_transfers [available|unavailable] - Visa inkommande överföringar, alla eller filtrerade efter tillgänglighet</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="703"/> - <source>payments <PID_1> [<PID_2> ... <PID_N>] - Show payments for given payment ID[s]</source> - <translation>payments <B_ID_1> [<B_ID_2> … <B_ID_N>] - Visa betalningar för angivna betalnings-ID</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="706"/> - <source>transfer [<priority>] [<mixin_count>] <address> <amount> [<payment_id>] - Transfer <amount> to <address>. <priority> is the priority of the transaction. The higher the priority, the higher the fee of the transaction. Valid values in priority order (from lowest to highest) are: unimportant, normal, elevated, priority. If omitted, the default value (see the command "set priority") is used. <mixin_count> is the number of extra inputs to include for untraceability. Multiple payments can be made at once by adding <address_2> <amount_2> etcetera (before the payment ID, if it's included)</source> - <translation>transfer [<prioritet>] [<mixin_antal>] <adress> <belopp> [<betalnings_id>] - Överför <belopp> till <adress>. <prioritet> är transaktionens prioritet. Ju högre prioritet, desto högre transaktionsavgift. Giltiga värden i prioritetsordning (från lägsta till högsta) är: unimportant, normal, elevated, priority. Om det utelämnas kommer standardvärdet (se kommandot "set priority") att användas. <mixin_antal> är det antal extra ingångar som ska inkluderas för att uppnå ospårbarhet. Flera betalningar kan göras på en gång genom att lägga till <adress_2> <belopp_2> etcetera (före betalnings-ID, om det inkluderas)</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="707"/> - <source>locked_transfer [<mixin_count>] <addr> <amount> <lockblocks>(Number of blocks to lock the transaction for, max 1000000) [<payment_id>]</source> - <translation>locked_transfer [<mixin_antal>] <adress> <belopp> <låsblock>(Antal block som transaktionen ska låsas för, max 1000000) [<betalnings_id>]</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="708"/> - <source>Send all unmixable outputs to yourself with mixin 0</source> - <translation>Skicka alla omixbara utgångar till dig själv med mixin 0</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="712"/> - <source>Sign a transaction from a file</source> - <translation>Signera en transaktion från en fil</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="713"/> - <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="716"/> - <source>integrated_address [PID] - Encode a payment ID into an integrated address for the current wallet public address (no argument uses a random payment ID), or decode an integrated address to standard address and payment ID</source> - <translation>integrated_address [PID] - Koda ett betalnings-ID till en integrerad adress för den aktuella plånbokens öppna adress (utan argument används ett slumpmässigt betalnings-ID), eller avkoda en integrerad adress till standardadress och betalnings-ID</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="718"/> - <source>Save wallet data</source> - <translation>Spara plånboksdata</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="719"/> - <source>Save a watch-only keys file</source> - <translation>Spara en fil med granskningsnycklar</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="720"/> - <source>Display private view key</source> - <translation>Visa privat visningsnyckel</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="721"/> - <source>Display private spend key</source> - <translation>Visa privat spendernyckel</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="722"/> - <source>Display Electrum-style mnemonic seed</source> - <translation>Visa minnesfrö (Electrum-typ)</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="723"/> - <source>Available options: seed language - set wallet seed language; always-confirm-transfers <1|0> - whether to confirm unsplit txes; print-ring-members <1|0> - whether to print detailed information about ring members during confirmation; store-tx-info <1|0> - whether to store outgoing tx info (destination address, payment ID, tx secret key) for future reference; default-mixin <n> - set default mixin (default is 4); auto-refresh <1|0> - whether to automatically sync new blocks from the daemon; refresh-type <full|optimize-coinbase|no-coinbase|default> - set wallet refresh behaviour; priority [0|1|2|3|4] - default/unimportant/normal/elevated/priority fee; confirm-missing-payment-id <1|0>; ask-password <1|0>; unit <monero|millinero|micronero|nanonero|piconero> - set default monero (sub-)unit; min-outputs-count [n] - try to keep at least that many outputs of value at least min-outputs-value; min-outputs-value [n] - try to keep at least min-outputs-count outputs of at least that value; merge-destinations <1|0> - whether to merge multiple payments to the same destination address</source> - <translation>Tillgängliga alternativ: seed language - ange språk för plånbokens frö; always-confirm-transfers <1|0> - huruvida ej delade transaktioner ska bekräftas; print-ring-members <1|0> - huruvida detaljerad information om ringmedlemmar ska skrivas ut vid bekräftelse; store-tx-info <1|0> - huruvida info om utgående transaktioner ska sparas (måladress, betalnings-ID, hemlig transaktionsnyckel) för framtida referens; default-mixin <n> - ange standardvärde för mixin (standard är 4); auto-refresh <1|0> - huruvida nya block från daemonen ska synkas automatiskt; refresh-type <full|optimize-coinbase|no-coinbase|default> - ange uppdateringsbeteende för plånbok; priority [0|1|2|3|4] - standard/oviktigt/normal/förhöjd/prioritetsavgift; confirm-missing-payment-id <1|0>; ask-password <1|0>; unit <monero|millinero|micronero|nanonero|piconero> - ange standardvärde för monero-(under-)enhet; min-outputs-count [n] - försök behålla åtminstone så många utgångar med ett värde på åtminstone min-outputs-value; min-outputs-value [n] - försök behålla åtminstone min-outputs-count utgångar av åtminstone detta värde; merge-destinations <1|0> - huruvida flera betalningar till samma måladress ska slås samman</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="724"/> - <source>Rescan blockchain for spent outputs</source> - <translation>Genomsök blockkedjan igen för spenderade utgångar</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="725"/> - <source>Get transaction key (r) for a given <txid></source> - <translation>Hämta transaktionsnyckel (r) för ett givet <transaktions-ID></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="726"/> - <source>Check amount going to <address> in <txid></source> - <translation>Kontrollera belopp som går till <adress> i <transaktions-ID></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="727"/> - <source>Generate a signature to prove payment to <address> in <txid> using the transaction secret key (r) without revealing it</source> - <translation>Skapa en signatur för att bevisa betalning till <adress> i <transaktions-ID> genom att använda hemlig nyckel för transaktion (r) utan att avslöja den</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="728"/> - <source>Check tx proof for payment going to <address> in <txid></source> - <translation>Kontrollera transaktionsbevis för betalning som går till <adress> i <transaktions-ID></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="730"/> - <source>unspent_outputs [<min_amount> <max_amount>] - Show unspent outputs within an optional amount range</source> - <translation>unspent_outputs [<min_belopp> <max_belopp>] - Visa ej spenderade utgångar inom ett valfritt beloppsintervall</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="731"/> - <source>Rescan blockchain from scratch</source> - <translation>Genomsök blockkedjan från början</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="732"/> - <source>Set an arbitrary string note for a txid</source> - <translation>Ange en godtycklig sträng som anteckning för ett transaktions-ID</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="733"/> - <source>Get a string note for a txid</source> - <translation>Hämta en stränganteckning för ett transaktions-ID</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="734"/> - <source>Show wallet status information</source> - <translation>Visa statusinformation för plånbok</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="735"/> - <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="736"/> - <source>Verify a signature on the contents of a file</source> - <translation>Verifera signaturen för innehållet i en fil</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="737"/> - <source>Export a signed set of key images</source> - <translation>Exportera en signerad uppsättning nyckelavbildningar</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="738"/> - <source>Import signed key images list and verify their spent status</source> - <translation>Importera lista med signerade nyckelavbildningar och verifera deras spenderingsstatus</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="739"/> - <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="740"/> - <source>Import 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="802"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1919"/> <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="806"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1923"/> <source>monero, millinero, micronero, nanonero, piconero</source> <translation>monero, millinero, micronero, nanonero, piconero</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="851"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1975"/> <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="868"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1992"/> <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="874"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1998"/> <source>Key file found but not wallet file. Regenerating...</source> <translation>Nyckelfil hittades men inte plånboksfilen. Återskapar …</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="880"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2004"/> <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="894"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2023"/> <source>Generating new wallet...</source> <translation>Skapar ny plånbok …</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="937"/> - <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-json="jsonfilename" and --generate-from-keys="wallet_name"</source> - <translation>det går inte att ange mer än en av --generate-new-wallet="plånboksnamn", --wallet-file="plånboksnamn", --generate-from-view-key="plånboksnamn", --generate-from-json="json-filnamn" och --generate-from-keys="plånboksnamn"</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="953"/> - <source>can't specify both --restore-deterministic-wallet and --non-deterministic</source> - <translation>det går inte att ange både --restore-deterministic-wallet och --non-deterministic</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="982"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2141"/> <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="994"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1011"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1046"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1063"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1079"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2174"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2194"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2229"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2248"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2268"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2284"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2332"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2357"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2373"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2413"/> <source>No data supplied, cancelled</source> <translation>Ingen data angiven, avbryter</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1002"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1054"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2220"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2718"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3276"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3378"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3530"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4048"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4239"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2180"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2254"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2363"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3791"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4240"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4454"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4926"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4994"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5058"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5266"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6106"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6353"/> <source>failed to parse address</source> <translation>det gick inte att parsa adressen</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1017"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1085"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2200"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2290"/> <source>failed to parse view key secret key</source> <translation>det gick inte att parsa hemlig visningsnyckel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1027"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1103"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2210"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2308"/> <source>failed to verify view key secret key</source> <translation>det gick inte att verifiera hemlig visningsnyckel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1031"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1107"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2214"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2312"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2393"/> <source>view key does not match standard address</source> <translation>visningsnyckel matchar inte standardadress</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1036"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1111"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1128"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2219"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2238"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2316"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2450"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2480"/> <source>account creation failed</source> <translation>det gick inte att skapa konto</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1069"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2234"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2274"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2418"/> <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="1095"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2300"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2439"/> <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="1099"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2304"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2444"/> <source>spend key does not match standard address</source> <translation>spendernyckel matchar inte standardadress</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1199"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2562"/> <source>failed to open account</source> <translation>det gick inte att öppna konto</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1203"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1579"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1626"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1647"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3348"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2566"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3030"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3085"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3142"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4962"/> <source>wallet is null</source> <translation>plånbok är null</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1262"/> - <source>Daemon either is not started or wrong port was passed. Please make sure daemon is running or restart the wallet with the correct daemon address.</source> - <translation>Antingen har daemonen inte startat eller så angavs fel port. Se till att daemonen kör eller starta om plånboken med korrekt daemonadress.</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1306"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1311"/> - <source>invalid language choice passed. Please try again. -</source> - <translation>ogiltigt språkval angavs. Försök igen. -</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1370"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2753"/> <source>View key: </source> <translation>Visningsnyckel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1385"/> - <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. -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>Din plånbok har skapats! -För att starta synkronisering med daemonen, använd kommandot "refresh". -Använd kommandot "help" för att se en lista över tillgängliga kommandon. -Använd alltid kommandot "exit" när du stänger monero-wallet-cli så att ditt aktuella sessionstillstånd sparas. Annars kan du bli tvungen att synkronisera -din plånbok igen (din plånboks nycklar är dock INTE hotade i vilket fall som helst). -</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1492"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2935"/> <source>You may want to remove the file "%s" and try again</source> <translation>Du kan också vilja ta bort filen "%s" och försöka igen</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1518"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="2963"/> <source>failed to deinitialize wallet</source> <translation>det gick inte att avinitiera plånboken</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1570"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1968"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3021"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3524"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6410"/> <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="1657"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3152"/> <source>blockchain can't be saved: </source> <translation>blockkedjan kan inte sparas: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1736"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1982"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2386"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2563"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2824"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3239"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3538"/> <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="1740"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1986"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2390"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2567"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2828"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3243"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3542"/> <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="1750"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3253"/> <source>refresh error: </source> <translation>fel vid uppdatering: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1794"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3303"/> <source>Balance: </source> <translation>Saldo: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1845"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3399"/> <source>pubkey</source> <translation>öppen nyckel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1845"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3399"/> <source>key image</source> <translation>nyckelavbildning</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="1856"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3410"/> <source>unlocked</source> <translation>upplåst</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1846"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> <source>ringct</source> <translation>ringct</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1855"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3409"/> <source>T</source> <translation>S</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1855"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3409"/> <source>F</source> <translation>F</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1856"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3410"/> <source>locked</source> <translation>låst</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1857"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3411"/> <source>RingCT</source> <translation>RingCT</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1857"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3411"/> <source>-</source> <translation>-</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1929"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3442"/> + <source>expected at least one payment ID</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="3485"/> <source>payment ID has invalid format, expected 16 or 64 character hex string: </source> <translation>betalnings-ID har ogiltigt format, en 16- eller 64-teckens hex-sträng förväntades: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="1990"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3546"/> <source>failed to get spent status</source> <translation>det gick inte att hämta spenderingsstatus</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3661"/> <source>the same transaction</source> <translation>samma transaktion</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3661"/> <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="2206"/> - <source>Locked blocks too high, max 1000000 (˜4 yrs)</source> - <translation>Låsta block för högt, max 1000000 (˜~4 år)</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3258"/> - <source>usage: get_tx_proof <txid> <dest_address> [<tx_key>]</source> - <translation>användning: get_tx_proof <txid> <måladress> [<tx_key>]</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3289"/> - <source>failed to parse tx_key</source> - <translation>det gick inte att parsa tx_nyckel</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3298"/> - <source>Tx secret key was found for the given txid, but you've also provided another tx secret key which doesn't match the found one.</source> - <translation>Hemlig transaktionsnyckel hittades för det givna txid, men du har också angivit en annan hemlig transaktionsnyckel som inte matchar den hittade nyckeln.</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3306"/> - <source>Tx secret key wasn't found in the wallet file. Provide it as the optional third parameter if you have it elsewhere.</source> - <translation>Den hemliga transaktionsnyckeln kunde inte hittas i plånboksfilen. Ange den som den valfria tredje parametern om du har den någon annanstans.</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3330"/> - <source>Signature: </source> - <translation>Signatur: </translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3508"/> - <source>usage: check_tx_proof <txid> <address> <signature></source> - <translation>användning: check_tx_proof <txid> <adress> <signatur></translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="3705"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4184"/> + <source>Ring size must not be 0</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3539"/> - <source>Signature header check error</source> - <translation>Fel vid kontroll av signaturhuvud</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="3717"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4196"/> + <source>ring size %u is too small, minimum is %u</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3550"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3555"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3560"/> - <source>Signature decoding error</source> - <translation>nFel vid avkodning av signatur</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3602"/> - <source>Tx pubkey was not found</source> - <translation>Transaktionens öppna nyckel kunde inte hittas</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="3778"/> + <source>Locked blocks too high, max 1000000 (˜4 yrs)</source> + <translation>Låsta block för högt, max 1000000 (˜~4 år)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3609"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5077"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5188"/> <source>Good signature</source> <translation>Bra signatur</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3613"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5104"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5190"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5293"/> <source>Bad signature</source> <translation>Dålig signatur</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3621"/> - <source>failed to generate key derivation</source> - <translation>det gick inte att skapa nyckelhärledning</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3994"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6046"/> <source>usage: integrated_address [payment ID]</source> <translation>användning: integrated_address [betalnings-ID]</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4017"/> - <source>Integrated address: account %s, payment ID %s</source> - <translation>Integrerad adress: konto %s, betalnings-ID %s</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4022"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6082"/> <source>Standard address: </source> <translation>Standardadress: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4027"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6087"/> <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="4038"/> - <source>usage: address_book [(add (<address> [pid <long or short payment id>])|<integrated address> [<description possibly with whitespaces>])|(delete <index>)]</source> - <translation>användning: address_book [(add (<adress> [pid <långt eller kort betalnings-ID>])|<Integrerad adress> [<beskrivning eventuellt med blanktecken>])|(delete <index>)]</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="6098"/> + <source>usage: address_book [(add (<address> [pid <long or short payment id>])|<integrated address> [<description possibly with whitespaces>])|(delete <index>)]</source> + <translation>användning: address_book [(add (<adress> [pid <långt eller kort betalnings-ID>])|<Integrerad adress> [<beskrivning eventuellt med blanktecken>])|(delete <index>)]</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4070"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6128"/> <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="4088"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6146"/> <source>failed to parse index</source> <translation>det gick inte att parsa index</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4096"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6154"/> <source>Address book is empty.</source> <translation>Adressboken är tom.</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4102"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6160"/> <source>Index: </source> <translation>Index: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4103"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6161"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6287"/> <source>Address: </source> <translation>Adress: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4104"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6162"/> <source>Payment ID: </source> <translation>Betalnings-ID: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4105"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6163"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6286"/> <source>Description: </source> <translation>Beskrivning: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4115"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6173"/> <source>usage: set_tx_note [txid] free text note</source> <translation>användning: set_tx_note [txid] fri textanteckning</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4143"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6201"/> <source>usage: get_tx_note [txid]</source> <translation>användning: get_tx_note [txid]</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4193"/> - <source>usage: sign <filename></source> - <translation>användning: sign <filnamn></translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="6304"/> + <source>usage: sign <filename></source> + <translation>användning: sign <filnamn></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4198"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6309"/> <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="4207"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4230"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4374"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="951"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6323"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6346"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6501"/> <source>failed to read file </source> <translation>det gick inte att läsa filen </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4219"/> - <source>usage: verify <filename> <address> <signature></source> - <translation>användning: verify <filnamn> <adress> <signatur></translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="5039"/> + <source>usage: check_tx_proof <txid> <address> <signature_file> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5066"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5181"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5278"/> + <source>failed to load signature file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5117"/> + <source>usage: get_spend_proof <txid> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5123"/> + <source>wallet is watch-only and cannot generate the proof</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5161"/> + <source>usage: check_spend_proof <txid> <signature_file> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5202"/> + <source>usage: get_reserve_proof (all|<amount>) [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5208"/> + <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="5253"/> + <source>usage: check_reserve_proof <address> <signature_file> [<message>]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5271"/> + <source>Address must not be a subaddress</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5289"/> + <source>Good signature -- total: %s, spent: %s, unspent: %s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5353"/> + <source>usage: show_transfers [in|out|all|pending|failed] [index=<N1>[,<N2>,...]] [<min_height> [<max_height>]]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5490"/> + <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="5526"/> + <source>usage: unspent_outputs [index=<N1>[,<N2>,...]] [<min_amount> [<max_amount>]]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5586"/> + <source>There is no unspent output in the specified address</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5699"/> + <source> (no daemon)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5701"/> + <source> (out of sync)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5758"/> + <source>(Untitled account)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5771"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5789"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5814"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5837"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5990"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6013"/> + <source>failed to parse index: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5776"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5995"/> + <source>specify an index between 0 and </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5873"/> + <source>usage: + account + account new <label text with white spaces allowed> + account switch <index> + account label <index> <label text with white spaces allowed> + account tag <tag_name> <account_index_1> [<account_index_2> ...] + account untag <account_index_1> [<account_index_2> ...] + account tag_description <tag_name> <description></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5901"/> + <source> +Grand total: + Balance: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5901"/> + <source>, unlocked balance: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5909"/> + <source>Untagged accounts:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5915"/> + <source>Tag %s is unregistered.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5918"/> + <source>Accounts with tag: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5919"/> + <source>Tag's description: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5921"/> + <source>Account</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5927"/> + <source> %c%8u %6s %21s %21s %21s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5937"/> + <source>----------------------------------------------------------------------------------</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5938"/> + <source>%15s %21s %21s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5961"/> + <source>Primary address</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5961"/> + <source>(used)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="5982"/> + <source>(Untitled address)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6022"/> + <source><index_min> is already out of bound</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6027"/> + <source><index_max> exceeds the bound</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6035"/> + <source>usage: address [ new <label text with white spaces allowed> | all | <index_min> [<index_max>] | label <index> <label text with white spaces allowed> ]</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6053"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6065"/> + <source>Integrated addresses can only be created for account 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6077"/> + <source>Integrated address: %s, payment ID: %s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6082"/> + <source>Subaddress: </source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4246"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6242"/> + <source>usage: get_description</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6248"/> + <source>no description found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6250"/> + <source>description found: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6285"/> + <source>Filename: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6290"/> + <source>Watch only</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6292"/> + <source>%u/%u multisig%s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6294"/> + <source>Normal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6295"/> + <source>Type: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6296"/> + <source>Testnet: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6296"/> + <source>Yes</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6296"/> + <source>No</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6314"/> + <source>This wallet is multisig and cannot sign</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6335"/> + <source>usage: verify <filename> <address> <signature></source> + <translation>användning: verify <filnamn> <adress> <signatur></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="6360"/> <source>Bad signature from </source> <translation>Dålig signatur från </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4250"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6364"/> <source>Good signature from </source> <translation>Bra signatur från </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4259"/> - <source>usage: export_key_images <filename></source> - <translation>användning: export_key_images <filnamn></translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="6373"/> + <source>usage: export_key_images <filename></source> + <translation>användning: export_key_images <filnamn></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4264"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6378"/> <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="4274"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4346"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="906"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6391"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6473"/> <source>failed to save file </source> <translation>det gick inte att spara fil </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4285"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6402"/> <source>Signed key images exported to </source> <translation>Signerade nyckelavbildningar exporterades till </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4293"/> - <source>usage: import_key_images <filename></source> - <translation>användning: import_key_images <filnamn></translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="6416"/> + <source>usage: import_key_images <filename></source> + <translation>användning: import_key_images <filnamn></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4323"/> - <source>usage: export_outputs <filename></source> - <translation>användning: export_outputs <filnamn></translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="6447"/> + <source>usage: export_outputs <filename></source> + <translation>användning: export_outputs <filnamn></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4357"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6484"/> <source>Outputs exported to </source> <translation>Utgångar exporterades till </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4365"/> - <source>usage: import_outputs <filename></source> - <translation>användning: import_outputs <filnamn></translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="6492"/> + <source>usage: import_outputs <filename></source> + <translation>användning: import_outputs <filnamn></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2246"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3818"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3819"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5219"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5545"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5553"/> <source>amount is wrong: </source> <translation>beloppet är fel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2247"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3819"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="3820"/> <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="2378"/> - <source>Money successfully sent, transaction </source> - <translation>Pengar skickades, transaktion </translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4079"/> + <source>Sweeping </source> + <translation>Sveper upp </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3141"/> - <source>no connection to daemon. Please, make sure daemon is running.</source> - <translation>ingen anslutning till daemonen. Se till att daemonen körs.</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4559"/> + <source>Money successfully sent, transaction: </source> + <translation>Pengar skickades, transaktion: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2420"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2597"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2858"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3171"/> - <source>not enough outputs for specified mixin_count</source> - <translation>inte tillräckligt många utgångar för angiven mixin_count</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4716"/> + <source>Change goes to more than one address</source> + <translation>Växel går till mer än en adress</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2423"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2600"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2861"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3174"/> - <source>output amount</source> - <translation>utgångens belopp</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4757"/> + <source>%s change to %s</source> + <translation>%s växel till %s</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2423"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2600"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2861"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3174"/> - <source>found outputs to mix</source> - <translation>hittade utgångar att mixa</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4760"/> + <source>no change</source> + <translation>ingen växel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2428"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2605"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2866"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3179"/> - <source>transaction was not constructed</source> - <translation>transaktionen konstruerades inte</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="1044"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="1057"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4826"/> + <source>Transaction successfully signed to file </source> + <translation>Transaktionen signerades till fil </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2432"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2609"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2870"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3183"/> - <source>transaction %s was rejected by daemon with status: </source> - <translation>transaktionen %s avvisades av daemonen med status: </translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4424"/> + <source>failed to parse Payment ID</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2443"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2620"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2881"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3191"/> - <source>one of destinations is zero</source> - <translation>ett av målen är noll</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4440"/> + <source>usage: sweep_single [<priority>] [<ring_size>] <key_image> <address> [<payment_id>]</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3195"/> - <source>Failed to find a suitable way to split transactions</source> - <translation>Det gick inte att hitta ett passande sätt att dela upp transaktioner</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4447"/> + <source>failed to parse key image</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2452"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2629"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2890"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3200"/> - <source>unknown transfer error: </source> - <translation>okänt överföringsfel: </translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4499"/> + <source>No outputs found</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="2516"/> - <source>Sweeping </source> - <translation>Sveper upp </translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4504"/> + <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="2785"/> - <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> + <location filename="../src/simplewallet/simplewallet.cpp" line="4509"/> + <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="2555"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="2816"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3129"/> - <source>Money successfully sent, transaction: </source> - <translation>Pengar skickades, transaktion: </translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4586"/> + <source>missing threshold amount</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3022"/> - <source>Change goes to more than one address</source> - <translation>Växel går till mer än en adress</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4601"/> + <source>donations are not enabled on the testnet</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3047"/> - <source>%s change to %s</source> - <translation>%s växel till %s</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4608"/> + <source>usage: donate [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <amount> [<payment_id>]</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3050"/> - <source>no change</source> - <translation>ingen växel</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4748"/> + <source> dummy output(s)</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3105"/> - <source>Transaction successfully signed to file </source> - <translation>Transaktionen signerades till fil </translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4763"/> + <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="4787"/> + <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="3226"/> - <source>usage: get_tx_key <txid></source> - <translation>användning: get_tx_key <transaktions-ID></translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4797"/> + <source>usage: sign_transfer [export]</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3234"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3266"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3354"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3519"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4122"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4150"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4450"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4836"/> + <source>Transaction raw hex data exported to </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4876"/> + <source>usage: get_tx_key <txid></source> + <translation>användning: get_tx_key <transaktions-ID></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="4884"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4919"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4968"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5050"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5130"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5168"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6180"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6208"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6578"/> <source>failed to parse txid</source> <translation>det gick inte att parsa transaktions-id</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3245"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4898"/> <source>Tx key: </source> <translation>Tx-nyckel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3250"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4903"/> <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="3339"/> - <source>usage: check_tx_key <txid> <txkey> <address></source> - <translation>användning: check_tx_key <txid> <txnyckel> <adress></translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3361"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3368"/> - <source>failed to parse tx key</source> - <translation>det gick inte att parsa transaktionsnyckeln</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3400"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3573"/> - <source>failed to get transaction from daemon</source> - <translation>det gick inte att hämta transaktion från daemon</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4912"/> + <source>usage: get_tx_proof <txid> <address> [<message>]</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3411"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3584"/> - <source>failed to parse transaction from daemon</source> - <translation>det gick inte att parsa transaktion från daemonen</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4937"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5147"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5239"/> + <source>signature file saved to: </source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3418"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3591"/> - <source>failed to validate transaction from daemon</source> - <translation>det gick inte att validera transaktion från daemon</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4939"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5149"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5241"/> + <source>failed to save signature file</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3423"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3596"/> - <source>failed to get the right transaction from daemon</source> - <translation>det gick inte att hämta rätt transaktion från daemonen</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4953"/> + <source>usage: check_tx_key <txid> <txkey> <address></source> + <translation>användning: check_tx_key <txid> <txnyckel> <adress></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3385"/> - <source>failed to generate key derivation from supplied parameters</source> - <translation>det gick inte att skapa nyckelhärledning från angivna parametrar</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="4976"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4985"/> + <source>failed to parse tx key</source> + <translation>det gick inte att parsa transaktionsnyckeln</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3471"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="4943"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5031"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5109"/> <source>error: </source> <translation>fel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3477"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5007"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5080"/> <source>received</source> <translation>mottaget</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3477"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5007"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5080"/> <source>in txid</source> <translation>i transaktions-id</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3481"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5026"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5099"/> <source>received nothing in txid</source> <translation>tog emot ingenting i transaktions-id</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3485"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5010"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5083"/> <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="3494"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5016"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5089"/> <source>This transaction has %u confirmations</source> <translation>Transaktionen har %u bekräftelser</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3498"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5020"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5093"/> <source>WARNING: failed to determine number of confirmations!</source> <translation>VARNING: det gick inte att avgöra antal bekräftelser!</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3661"/> - <source>usage: show_transfers [in|out|all|pending|failed] [<min_height> [<max_height>]]</source> - <translation>användning: show_transfers [in|out|all|pending|failed] [<min_höjd> [<max_höjd>]]</translation> - </message> - <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3700"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5401"/> <source>bad min_height parameter:</source> <translation>dålig parameter för min_height:</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3712"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5413"/> <source>bad max_height parameter:</source> <translation>dålig parameter för max_height:</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3760"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5473"/> <source>in</source> <translation>in</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3760"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="3798"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5473"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5514"/> <source>out</source> <translation>ut</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3798"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5514"/> <source>failed</source> <translation>misslyckades</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3798"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5514"/> <source>pending</source> <translation>väntar</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3809"/> - <source>usage: unspent_outputs [<min_amount> <max_amount>]</source> - <translation>användning: unspent_outputs [<min_belopp> <max_belopp>]</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="5560"/> + <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="3824"/> - <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="3856"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5592"/> <source> Amount: </source> <translation> Belopp: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3856"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5592"/> <source>, number of keys: </source> <translation>, antal nycklar: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3861"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5597"/> <source> </source> <translation></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3866"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5602"/> <source> Min block height: </source> <translation> Minblockhöjd: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3867"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5603"/> <source> Max block height: </source> <translation> Maxblockhöjd: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3868"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5604"/> <source> Min amount found: </source> <translation> Minbelopp funnet: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3869"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5605"/> <source> Max amount found: </source> <translation> Maxbelopp funnet: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3870"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5606"/> <source> Total count: </source> <translation> Totalt antal: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3910"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5646"/> <source> Bin size: </source> <translation> Storlek för binge: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3911"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5647"/> <source> Outputs per *: </source> <translation> Utgångar per *: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3913"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5649"/> <source>count ^ </source> @@ -2318,310 +3488,409 @@ Utgångar per *: </translation> </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3915"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5651"/> <source> |</source> <translation> |</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3917"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5653"/> <source> +</source> <translation> +</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3917"/> - <source>+--> block height + <location filename="../src/simplewallet/simplewallet.cpp" line="5653"/> + <source>+--> block height </source> - <translation>+--> blockhöjd + <translation>+--> blockhöjd </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3918"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5654"/> <source> ^</source> <translation> ^</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3918"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5654"/> <source>^ </source> <translation>^ </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3919"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5655"/> <source> </source> <translation></translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="3969"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="5696"/> <source>wallet</source> <translation>plånbok</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="420"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4000"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="666"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6057"/> <source>Random payment ID: </source> <translation>Slumpmässigt betalnings-ID: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4001"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6058"/> <source>Matching integrated address: </source> <translation>Matchande integrerad adress: </translation> </message> </context> <context> + <name>genms</name> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="70"/> + <source>Base filename (-1, -2, etc suffixes will be appended as needed)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="71"/> + <source>Give threshold and participants at once as M/N</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="72"/> + <source>How many participants wil share parts of the multisig wallet</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="73"/> + <source>How many signers are required to sign a valid transaction</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="74"/> + <source>Create testnet multisig wallets</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="81"/> + <source>Generating %u %u/%u multisig wallets</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="138"/> + <source>Error verifying multisig extra info</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="146"/> + <source>Error finalizing multisig</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="153"/> + <source>Generated multisig wallets for address </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="157"/> + <source>Error creating multisig wallets: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="176"/> + <source>This program generates a set of multisig wallets - use this simpler scheme only if all the participants trust each other</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="194"/> + <source>Error: expected N/M, but got: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="202"/> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="211"/> + <source>Error: either --scheme or both of --threshold and --participants may be given</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="218"/> + <source>Error: expected N > 1 and N <= M, but got N==%u and M==%d</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="227"/> + <source>Error: --filename-base is required</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="233"/> + <source>Error: unsupported scheme: only N/N and N-1/N are supported</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>sw</name> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="116"/> - <source>Generate new wallet and save it to <arg></source> - <translation>Skapa ny plånbok och spara den till <arg></translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="115"/> + <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="117"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="116"/> <source>Generate incoming-only wallet from view key</source> <translation>Skapa granskningsplånbok från visningsnyckel</translation> </message> <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="117"/> + <source>Generate deterministic wallet from spend key</source> + <translation type="unfinished"></translation> + </message> + <message> <location filename="../src/simplewallet/simplewallet.cpp" line="118"/> <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="120"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="119"/> + <source>Generate a master wallet from multisig wallet keys</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="121"/> + <source>Language for mnemonic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="122"/> <source>Specify Electrum seed for wallet recovery/creation</source> <translation>Ange Electrum-frö för att återställa/skapa plånbok</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="121"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="123"/> <source>Recover wallet using Electrum-style mnemonic seed</source> <translation>Återställ plånbok genom användning av minnesfrö (Electrum-typ)</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="122"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="124"/> + <source>Recover multisig wallet using Electrum-style mnemonic seed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/simplewallet/simplewallet.cpp" line="125"/> <source>Generate non-deterministic view and spend keys</source> <translation>Skapa non-deterministic visnings- och spendernyckel</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="123"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="126"/> <source>Enable commands which rely on a trusted daemon</source> <translation>Aktivera kommandon som kräver en betrodd daemon</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="124"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="127"/> <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="125"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="128"/> <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="136"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="129"/> + <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="171"/> <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="145"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="180"/> <source>possibly lost connection to daemon</source> <translation>anslutning till daemonen kan ha tappats</translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="226"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="197"/> <source>Error: </source> <translation>Fel: </translation> </message> <message> - <location filename="../src/simplewallet/simplewallet.cpp" line="4614"/> - <source>Failed to initialize wallet</source> - <translation>Det gick inte att initiera plånbok</translation> - </message> -</context> -<context> - <name>tools::dns_utils</name> - <message> - <location filename="../src/common/dns_utils.cpp" line="430"/> - <source>DNSSEC validation passed</source> - <translation>DNSSEC-validering godkänd</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="6787"/> + <source>This is the command line monero wallet. It needs to connect to a monero +daemon to work correctly.</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/common/dns_utils.cpp" line="434"/> - <source>WARNING: DNSSEC validation was unsuccessful, this address may not be correct!</source> - <translation>VARNING: DNSSEC-verifiering misslyckades, denna adress kanske inte är korrekt!</translation> - </message> - <message> - <location filename="../src/common/dns_utils.cpp" line="437"/> - <source>For URL: </source> - <translation>För URL: </translation> - </message> - <message> - <location filename="../src/common/dns_utils.cpp" line="439"/> - <source> Monero Address = </source> - <translation> Monero-adress = </translation> - </message> - <message> - <location filename="../src/common/dns_utils.cpp" line="441"/> - <source>Is this OK? (Y/n) </source> - <translation>är det OK? (J/n) </translation> - </message> - <message> - <location filename="../src/common/dns_utils.cpp" line="451"/> - <source>you have cancelled the transfer request</source> - <translation>du har avbrutit överföringsbegäran</translation> + <location filename="../src/simplewallet/simplewallet.cpp" line="6801"/> + <source>Failed to initialize wallet</source> + <translation>Det gick inte att initiera plånbok</translation> </message> </context> <context> <name>tools::wallet2</name> <message> - <location filename="../src/wallet/wallet2.cpp" line="106"/> - <source>Use daemon instance at <host>:<port></source> - <translation>Använd daemoninstans på <värddator>:<port></translation> - </message> - <message> - <location filename="../src/wallet/wallet2.cpp" line="107"/> - <source>Use daemon instance at host <arg> instead of localhost</source> - <translation>Använd daemon-instansen på värddator <arg> istället för localhost</translation> + <location filename="../src/wallet/wallet2.cpp" line="113"/> + <source>Use daemon instance at <host>:<port></source> + <translation>Använd daemoninstans på <värddator>:<port></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="460"/> - <source>Wallet password</source> - <translation>Lösenord för plånboken</translation> + <location filename="../src/wallet/wallet2.cpp" line="114"/> + <source>Use daemon instance at host <arg> instead of localhost</source> + <translation>Använd daemon-instansen på värddator <arg> istället för localhost</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="109"/> + <location filename="../src/wallet/wallet2.cpp" line="116"/> <source>Wallet password file</source> <translation>Lösenordsfil för plånboken</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="110"/> - <source>Use daemon instance at port <arg> instead of 18081</source> - <translation>Använd daemon-instansen på port <arg> istället för 18081</translation> + <location filename="../src/wallet/wallet2.cpp" line="117"/> + <source>Use daemon instance at port <arg> instead of 18081</source> + <translation>Använd daemon-instansen på port <arg> istället för 18081</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="112"/> + <location filename="../src/wallet/wallet2.cpp" line="119"/> <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="113"/> + <location filename="../src/wallet/wallet2.cpp" line="120"/> <source>Restricts to view-only commands</source> <translation>Begränsar till granskningskommandon</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="152"/> + <location filename="../src/wallet/wallet2.cpp" line="168"/> <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="188"/> + <location filename="../src/wallet/wallet2.cpp" line="204"/> <source>can't specify more than one of --password and --password-file</source> <translation>det går inte att ange mer än en av --password och --password-file</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="204"/> + <location filename="../src/wallet/wallet2.cpp" line="217"/> <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="460"/> - <source>Enter new wallet password</source> - <translation>Ange nytt lösenord för plånboken</translation> - </message> - <message> - <location filename="../src/wallet/wallet2.cpp" line="464"/> - <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/wallet/wallet2.cpp" line="227"/> + <location filename="../src/wallet/wallet2.cpp" line="240"/> <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="108"/> + <location filename="../src/wallet/wallet2.cpp" line="115"/> <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="111"/> + <location filename="../src/wallet/wallet2.cpp" line="118"/> <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="233"/> + <location filename="../src/wallet/wallet2.cpp" line="224"/> + <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="246"/> <source>Failed to parse JSON</source> <translation>Det gick inte att parsa JSON</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="240"/> + <location filename="../src/wallet/wallet2.cpp" line="253"/> <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="258"/> + <location filename="../src/wallet/wallet2.cpp" line="269"/> <source>failed to parse view key secret key</source> <translation>det gick inte att parsa hemlig visningsnyckel</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="264"/> - <location filename="../src/wallet/wallet2.cpp" line="331"/> - <location filename="../src/wallet/wallet2.cpp" line="373"/> + <location filename="../src/wallet/wallet2.cpp" line="274"/> + <location filename="../src/wallet/wallet2.cpp" line="339"/> + <location filename="../src/wallet/wallet2.cpp" line="380"/> <source>failed to verify view key secret key</source> <translation>det gick inte att verifiera hemlig visningsnyckel</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="276"/> + <location filename="../src/wallet/wallet2.cpp" line="285"/> <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="282"/> - <location filename="../src/wallet/wallet2.cpp" line="343"/> - <location filename="../src/wallet/wallet2.cpp" line="394"/> + <location filename="../src/wallet/wallet2.cpp" line="290"/> + <location filename="../src/wallet/wallet2.cpp" line="349"/> + <location filename="../src/wallet/wallet2.cpp" line="405"/> <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="295"/> + <location filename="../src/wallet/wallet2.cpp" line="302"/> <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="306"/> - <source>At least one of Electrum-style word list and private view key must be specified</source> - <translation>Åtminstone en av ordlista av Electrum-typ och privat visningsnyckel måste anges</translation> + <location filename="../src/wallet/wallet2.cpp" line="319"/> + <source>At least one of Electrum-style word list and private view key and private spend key must be specified</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="311"/> + <location filename="../src/wallet/wallet2.cpp" line="323"/> <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="324"/> + <location filename="../src/wallet/wallet2.cpp" line="333"/> <source>invalid address</source> <translation>ogiltig adress</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="335"/> + <location filename="../src/wallet/wallet2.cpp" line="342"/> <source>view key does not match standard address</source> <translation>visningsnyckel matchar inte standardadress</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="347"/> + <location filename="../src/wallet/wallet2.cpp" line="352"/> <source>spend key does not match standard address</source> <translation>spendernyckel matchar inte standardadress</translation> </message> <message> - <location filename="../src/wallet/wallet2.cpp" line="356"/> + <location filename="../src/wallet/wallet2.cpp" line="360"/> <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="403"/> + <location filename="../src/wallet/wallet2.cpp" line="392"/> + <source>failed to parse address: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="398"/> + <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="413"/> <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="5205"/> + <location filename="../src/wallet/wallet2.cpp" line="2813"/> + <location filename="../src/wallet/wallet2.cpp" line="2873"/> + <location filename="../src/wallet/wallet2.cpp" line="2952"/> + <location filename="../src/wallet/wallet2.cpp" line="2998"/> + <location filename="../src/wallet/wallet2.cpp" line="3089"/> + <location filename="../src/wallet/wallet2.cpp" line="3189"/> + <location filename="../src/wallet/wallet2.cpp" line="3599"/> + <location filename="../src/wallet/wallet2.cpp" line="3955"/> + <source>Primary account</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="7914"/> + <source>No funds received in this tx.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet2.cpp" line="8607"/> <source>failed to read file </source> <translation>det gick inte att läsa filen </translation> </message> @@ -2629,153 +3898,191 @@ Utgångar per *: </translation> <context> <name>tools::wallet_rpc_server</name> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="151"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="160"/> <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/wallet/wallet_rpc_server.cpp" line="171"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="175"/> + <source>Failed to create directory </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="177"/> + <source>Failed to create directory %s: %s</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="188"/> <source>Cannot specify --</source> <translation>Det går inte att ange --</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="171"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="188"/> <source> and --</source> <translation> och --</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="198"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="207"/> <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="198"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="207"/> <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="209"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="217"/> <source>Error writing to file </source> <translation>Fel vid skrivning till fil </translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="212"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="220"/> <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="1748"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="443"/> + <source>Tag %s is unregistered.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2435"/> + <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="2870"/> + <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="2893"/> <source>Can't specify more than one of --wallet-file and --generate-from-json</source> <translation>Det går inte att ange mer än en av --wallet-file och --generate-from-json</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1760"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2905"/> <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="1764"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2909"/> <source>Loading wallet...</source> <translation>Läser in plånbok …</translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1789"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1814"/> - <source>Storing wallet...</source> - <translation>Sparar plånbok …</translation> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2942"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2975"/> + <source>Saving wallet...</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1791"/> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1816"/> - <source>Stored ok</source> - <translation>Sparad ok</translation> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2944"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2977"/> + <source>Successfully saved</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1794"/> - <source>Loaded ok</source> - <translation>Inläst ok</translation> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2947"/> + <source>Successfully loaded</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1798"/> - <source>Wallet initialization failed: </source> - <translation>Det gick inte att initiera plånbok: </translation> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2958"/> + <source>Failed to initialize wallet RPC server</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2962"/> + <source>Starting wallet RPC server</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1805"/> - <source>Failed to initialize wallet rpc server</source> - <translation>Det gick inte att initiera RPC-servern för plånbok</translation> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2969"/> + <source>Failed to run wallet: </source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1809"/> - <source>Starting wallet rpc server</source> - <translation>Startar RPC-servern för plånbok</translation> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2972"/> + <source>Stopped wallet RPC server</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1811"/> - <source>Stopped wallet rpc server</source> - <translation>Stoppade RPC-servern för plånbok</translation> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2981"/> + <source>Failed to save wallet: </source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1820"/> - <source>Failed to store wallet: </source> - <translation>Det gick inte att spara plånbok: </translation> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2951"/> + <source>Wallet initialization failed: </source> + <translation>Det gick inte att initiera plånbok: </translation> </message> </context> <context> <name>wallet_args</name> <message> - <location filename="../src/wallet/wallet_rpc_server.cpp" line="1715"/> - <location filename="../src/simplewallet/simplewallet.cpp" line="4580"/> + <location filename="../src/gen_multisig/gen_multisig.cpp" line="166"/> + <location filename="../src/simplewallet/simplewallet.cpp" line="6760"/> + <location filename="../src/wallet/wallet_rpc_server.cpp" line="2856"/> <source>Wallet options</source> <translation>Alternativ för plånbok</translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="59"/> + <location filename="../src/wallet/wallet_args.cpp" line="73"/> <source>Generate wallet from JSON format file</source> <translation>Skapa plånbok från fil i JSON-format</translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="63"/> - <source>Use wallet <arg></source> - <translation>Använd plånbok <arg></translation> + <location filename="../src/wallet/wallet_args.cpp" line="77"/> + <source>Use wallet <arg></source> + <translation>Använd plånbok <arg></translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="87"/> + <location filename="../src/wallet/wallet_args.cpp" line="104"/> <source>Max number of threads to use for a parallel job</source> <translation>Max antal trådar att använda för ett parallellt jobb</translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="88"/> + <location filename="../src/wallet/wallet_args.cpp" line="105"/> <source>Specify log file</source> <translation>Ange loggfil</translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="89"/> + <location filename="../src/wallet/wallet_args.cpp" line="106"/> <source>Config file</source> <translation>Konfigurationsfil</translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="98"/> + <location filename="../src/wallet/wallet_args.cpp" line="115"/> <source>General options</source> <translation>Allmänna alternativ</translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="128"/> + <location filename="../src/wallet/wallet_args.cpp" line="138"/> + <source>This is the command line 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_args.cpp" line="161"/> <source>Can't find config file </source> <translation>Det gick inte att hitta konfigurationsfilen </translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="172"/> + <location filename="../src/wallet/wallet_args.cpp" line="195"/> <source>Logging to: </source> <translation>Loggar till: </translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="173"/> + <location filename="../src/wallet/wallet_args.cpp" line="197"/> <source>Logging to %s</source> <translation>Loggar till %s</translation> </message> <message> - <location filename="../src/wallet/wallet_args.cpp" line="153"/> + <location filename="../src/wallet/wallet_args.cpp" line="140"/> <source>Usage:</source> <translation>Användning:</translation> </message> diff --git a/utils/systemd/monerod.service b/utils/systemd/monerod.service index b6b6b6ce6..696be4c33 100644 --- a/utils/systemd/monerod.service +++ b/utils/systemd/monerod.service @@ -15,7 +15,6 @@ ExecStart=/usr/bin/monerod --config-file /etc/monerod.conf \ --detach --pidfile /run/monero/monerod.pid Restart=always -PrivateTmp=true [Install] WantedBy=multi-user.target |