Кошелёк Monero CLI


Обзор

Кошелёк с поддержкой командной строки

«Официальный» кошелёк Monero с поддержкой командной строки. Доступны версии для Linux, MacOS и Windows.

Кошелёк использует приватные ключи, благодаря которым вы можете узнать свой общий баланс, историю транзакций. Также эти ключи облегчают проведение транзакций.

Тем не менее кошелёк не хранит копию блокчейна и не участвует напрямую в p2p сети.

CLI-кошелёк является самым надёжным и полным с точки зрения имеющихся функций кошельком Monero.

Зависимость от полного узла

Кошелёк подключается к полному узлу, чтобы просканировать выходы ваших транзакций, а также отправить ваши транзакции в сеть.

Полный узел может быть как локальным (тот же компьютер), так и удалённым.

Как правило, полный узел запускается на том же компьютере, на который установлен кошелёк (или в пределах вашей домашней сети).

Соединение происходит через HTTP и использует этот API.

Любая транзакция, покидающая кошелёк, уже защищена всеми функциями обеспечения анонимности Monero. Это означает, что передача данных простым текстом через HTTP сама по себе не является проблемой, даже если вы подсоединяетесь к удалённому узлу.

Тем не менее подсоединение к удалённому узлу связано с другими нюансами и компромиссами, которые являются темой отдельной статьи.

Синтаксис

./monero-wallet-cli [options] [command]

Пример:

./monero-wallet-cli --stagenet

Запуск

Перейдите в директорию, в которую были распакованы файлы Monero.

Запустите полный узел и подождите, пока он не синхронизируется с сетью (это может занять до нескольких дней):

./monerod --stagenet

Запустите кошелёк в отдельном окне:

./monero-wallet-cli --stagenet --generate-new-wallet MoneroExampleStagenetWallet

Опции

Помощь и версия

ОпцияОписание
--helpВыводит список доступных опций.
--versionПоказывает версию monero-wallet-cli в stdout. Пример:
Monero 'Boron Butterfly' (v0.14.0.0-release)

Выбор сети

ОпцияОписание
(отсутствует)По умолчанию кошелёк выбирает основную сеть.
--stagenetЗапускает кошелёк в отладочной сети. Следует помнить, что демон также запускается в --stagenet.
--testnetЗапускает кошелёк в тестовой сети. Следует помнить, что демон также запускается в --testnet.

Журнал регистрации

ОпцияОписание
--log-file <arg>Полный путь к файлу журнала.
--log-level <arg>От 0 до 4, где 0 обозначает минимальную регистрацию данных в журнале, а 4 запись всех регистрационных данных. По умолчанию имеет значение 0. Это общие предварительные настройки, которые не связаны напрямую с уровнями сложности. Например, при минимальном значении 0, можно увидеть только некоторые важные данные INFO.
--max-log-file-size <arg>Запрограммированный и выраженный в байтах размер для регистрационного файла (по умолчанию равен 104850000, что составляет менее 100 Мб). Как только размер регистрационного файла вырастет сверх этого размера, Monero создаст следующий регистрационный файл с постфиксной временной меткой в формате -YYYY-MM-DD-HH-MM-SS.

В реальных условиях, вы скорее всего предпочтёте использовать проверенные решения, такие как logrotate. В этом случае вам следует установить флаг --max-log-file-size 0, чтобы запретить возможность управлять файлами журнала.
--max-log-files <arg>Предельное количество регистрационных файлов (50 по умолчанию). Старые файлы журнала удаляются автоматически. Вероятно, что вместо этого параметра вы предпочтёте использовать проверенные решения, такие как logrotate.

Соединение с полным узлом

При совершении всех нелокальных операций кошелёк зависит от полного узла. Следующие опции определяют, как подсоединиться к monerod:

ОпцияОписание
--daemon-address <arg>Использовать monerod на адресе <host>:<port>. Пример:
./monero-wallet-cli --daemon-address monero-stagenet.exan.tech:38081 --stagenet
--daemon-host <arg>Использовать monerod на хосте <arg>, а не на локальном хосте (localhost).
--daemon-port <arg>Использовать monerod на порте <arg>, вместо 18081.
--daemon-login <arg>Указать username[:password] для monerod RPC API. Опция основана на схеме базовой аутентификации HTTP. Следует помнить о том, что соединения являются незашифрованными по умолчанию. Аутентификация имеет смысл только в том случае, если вы создаёте безопасное соединение (возможно, посредством Tor, SSH туннеля или обратного прокси-сервера с TLS).
--trusted-daemonПозволяет использовать команды и типы поведения, рассчитанные на доверенный monerod. Используется по умолчанию для соединения localhost. Доверие в этом контексте является вопросом вашей анонимности. Этот флаг можно использовать только в том случае, если вы контролируете monerod. Доверенный демон позволяет использовать такие команды, как rescan_spent, start_mining, import_key_images, и типы поведения не такие, как предупреждение о возможной атаке по средствам отправки транзакций.
--untrusted-daemonОтключает команды и типы поведения, рассчитанные на доверенный monerod. Используется по умолчанию для соединений не с локальным хостом. См. подробную информацию в пункте --trusted-daemon.
--do-not-relayТолько что созданная транзакция не будет передана в сеть Monero. Вместо этого она будет сброшена в файл в необработанном шестнадцатеричном формате. Опция полезна в том случае, если вы желаете пропустить транзакцию через такой шлюз, как https://xmrchain.net/rawtx. Её проще использовать с Tor, а не кошельком Monero.
--allow-mismatched-daemon-versionПозволяет связываться с monerod, использующим другую версию RPC.

Создание нового кошелька

ОпцияОписание
--generate-new-wallet <arg>Создание нового кошелька Monero и его сохранение в файл <arg>. Предварительно у вас попросят задать пароль. Пароль используется для шифрования файла кошелька, но он не связан с вашим главным ключом траты или мнемонической фразой. Следует создать очень сложный пароль, воспользовавшись вашим менеджером паролей (энтропия должна составлять ~256 бит). Пример:

./monero-wallet-cli --stagenet --generate-new-wallet $HOME/.bitmonero/stagenet/wallets/MoneroExampleStagenetWallet
--kdf-rounds <arg>CКасается шифрования файла кошелька. Файл кошелька шифруется при помощи поточного шифра ChaCha. Ключ шифрования выводится на основе предоставленного пользователем пароля путём хеширования этого пароля при помощи. Эта опция определяет, сколько раз будет использовано хеширование CryptoNight. По умолчанию хеширование происходит 1 раз.

Следует отметить, что это не связано с генерированием ключа траты.

Чем больше раз будет производиться хеширование, тем больше времени вы будете ждать открытия кошелька или проведения транзакции. Но при этом злоумышленнику будет сложнее подобрать пароль к вашему кошельку методом перебора.

Примечание: Вам будет необходимо запомнить и вводить одни и те же kdf-rounds при каждом получении доступа к вашему кошельку!

Рекомендация: Не меняйте значения используемые по умолчанию. Вместо этого генерируйте очень сложный пароль, воспользовавшись вашим менеджером паролей (энтропия должна составлять 256 бит).

Открытие существующего кошелька

ОпцияОписание
--wallet-file <arg>Открывает существующий кошелёк. Пример:

./monero-wallet-cli --stagenet --wallet-file $HOME/.bitmonero/stagenet/wallets/MoneroExampleStagenetWallet

Применяется только к файлам кошелька, созданного при помощи инструментов monero-wallet-cli, monero-wallet-gui или monero-wallet-rpc. Если вы используете другой тип кошелька, то вам необходимо ознакомиться с опциями переноса.
--password <arg>Позволяет использовать пароль в качестве параметра, а не интерактивно. Не забывайте использовать пробелы / кавычки при такой необходимости.

Не рекомендуется использовать эту опцию, так как пароль останется в вашей истории команд, а также будет виден в таблице процессов. В целях автоматизации лучше использовать опцию --password-file.

Опция также работает в сочетании с --generate-new-wallet.
--password-file <arg>Позволяет использовать пароль в качестве файла, а не интерактивно. Конечные \n отбрасываются при считывании файла пароля.

Если вы автоматизируете доступ к кошельку, то лучше использовать эту опцию, а не --password. Следует убедиться в том, что файл пароля надёжно отделён от файла кошелька. В противном случае опция не даст никаких преимуществ с точки зрения безопасности.

Опция также работает в сочетании с --generate-new-wallet.

Восстановление кошелька

ОпцияОписание
--generate-from-device <arg>Восстановление/создание специального кошелька для аппаратного устройства, такого как Ledger или Trezor, и его сохранения в файле <arg>. Например:

./monero-wallet-cli --stagenet --generate-from-device MoneroExampleDeviceWallet --subaddress-lookahead 5:20

Это одноразовое действие. В следующий раз просто откроете кошелёк.

По умолчанию команда ожидает подсоединения устройства Ledger. В случае использования аппаратного кошелька Trezor - --hw-device Trezor (expected ~May 2019).

При настройках, используемых по умолчанию, это занимает до 25 минут. Причина состоит в том, что аппаратные устройства медленно генерируют подадреса. Во избежание этого следует использовать --subaddress-lookahead 5:20.

У локального кошелька не будет приватного ключа траты, и он не сможет самостоятельно потратить средства. Он служит пользовательским интерфейсом для аппаратных устройств малой мощности. Подписание транзакций публичным ключом траты всегда происходит на аппаратном устройстве.

См. полное руководство по настройке аппаратного кошелька.
--generate-from-view-key <arg>Восстановление версии кошелька, предназначенной только для просмотра, позволяющей отслеживать входящие транзакции, и её сохранение в файле <arg>. TКошелёк создаётся на основе секретного ключа просмотра и стандартного адреса. Секретный ключ просмотра представляется в шестнадцатеричном формате.
--generate-from-spend-key <arg>Восстановление кошелька на основе секретного ключа траты и его сохранение в <arg>. Секретный ключ просмотра представляется в шестнадцатеричном формате.
--restore-deterministic-walletВосстановление кошелька на основе секретной мнемонической фразы. Используется для восстановления кошелька с использованием 25 мнемонических слов.

Для шифрования самого файла кошелька (после восстановления) будет запрошен пароль. Мнемонические фразы, генерируемые кошельками Monero, являются открытыми.
--restore-height <arg>Сканирование на наличие транзакций после определённой высоты блока. Значение, используемое по умолчанию, — 0. Увеличение этого значения делает восстановление кошелька гораздо более быстрым. Оптимальное значение должно соответствовать тому дню, когда был создан кошелёк (не рекомендуется использовать более поздний интервал дат). Соответствие высоты блока дате/времени можно определить при помощи блок-эксплореров, таких как https://xmrchain.net. Если кошелёк был создан, например, в 2019 году или позже, следует использовать высоту блока, равную 1730000.

Multisig кошелёк

ОпцияОписание
--generate-from-multisig-keys <arg>Создание стандартного кошелька на основе multisig ключей. Полезно объединять все секретные multisig ключи в стандартном кошельке (когда у вас более нет необходимости в использовании multisig). После этого кошелёк получает контроль над средствами. Он поддерживает все секретные ключи, даже если схема multisig использует ограничение (только N/N, но не N/M).
--restore-multisig-walletВосстановление multisig кошелька на основе секретной мнемонической фразы. , которая была ранее экспортирована при помощи интерактивной команды seed. Эта опция просто восстанавливает вашу часть кошелька. Другим участникам схемы multisig по-прежнему понадобится подписывать транзакции.

Конфигурационный файл

ОпцияОписание
--config-file <arg>Указывает полный путь к конфигурационному файлу. Следует отметить, что это должен быть отдельный конфигурационный файл, используемый monerod, поскольку эти инструменты принимают различные наборы опций.

Рабочие параметры

ОпцияОписание
--subaddress-lookahead <arg>Устанавливает значения m:n (по умолчанию 50:200). Первое значение указывает количество счетов, а второе — количество подадресов на счёт.

Кошелёк не проверяет платежи, приходящие на подадреса, сверх значения n, начиная с последнего полученного платежа. Это может произойти, если вы создали уникальные подадреса для n клиентов, но ни на один из них не поступил платёж.

С другой стороны, чем больше адресов вы указываете, тем больше времени займёт создание кошелька, поскольку их необходимо предварительно вычислить. Как правило, это не является проблемой, за исключением случаев использования аппаратных кошельков. При использовании Ledger и значении 50:200, используемом по умолчанию, это может занять 20 минут (только для создания кошелька)!
--max-concurrency <arg>Максимальное количество используемых при работе потоков. При значении 0, заданном по умолчанию, используется общее количество потоков CPU.

Интернационализация (Локализация)

ОпцияОписание
--mnemonic-language <arg>Устанавливает язык для слов, входящих в состав мнемонической фразы. Возможен выбор одного из следующих языков: english, english_old, esperanto, french, german, italian, japanese, lojban, portuguese, russian, spanish.

Лучше всего пользовать английский язык, установленный по умолчанию, так как он является самым популярным и проверенным. Также это позволит избежать ошибок, связанных с использованием символов не в формате ASCII.
--use-english-language-namesЕсли ваш дисплей зависает, выйдите «вслепую», используя ^C, а затем зайдите снова при помощи --use-english-language-names. Это может случиться, если Monero предлагает выбрать язык, отображая названия языков и их родных алфавитов.

Унаследованные опции

Следующие опции либо являются унаследованными, либо устаревшими.

ОпцияОписание
--non-deterministicГенерирует унаследованный не детерминированный кошелёк. Ключ просмотра не выводится на основе ключа траты. Также вам придётся создать резервную копию *.keys. Чтобы восстановить не детерминированный кошелёк (стандартный адрес), следует использовать --generate-from-keys. Чтобы восстановить всё полностью, понадобится файл *.keys.
--generate-from-keys <arg>Восстановление унаследованного не детерминированного кошелька путём предоставления ключей траты и просмотра, а также стандартного адреса.
--shared-ringdb-dir <arg>Задаёт путь к общей базе данных колец. Использование опции более нецелесообразно.
--create-address-fileНи на что не влияет. Файл *.address.txt создаётся независимо от этой опции.
--electrum-seed <arg>Предлагает использовать мнемоническую фразу в качестве опции командной строки для --restore-deterministic-wallet, а не интерактивно. Не рекомендуется использовать, поскольку мнемоническая фраза сохранится в истории команд, а также будет видна в таблице процессов.
--generate-from-json <arg>Для использования этой опции будет необходимо запустить monero-wallet-rpc. Кажется, эта опция появилась в monero-wallet-cli случайно.
--tx-notify <arg>Для использования этой опции будет необходимо запустить monero-wallet-rpc. Кажется, эта опция появилась в monero-wallet-cli случайно.

Параметры, установленные по умолчанию

Файлы кошелька создаются и находятся в текущей директории. Едва ли это то, что вам нужно. Для того чтобы изменить ситуацию, следует использовать --wallet-file и подобные опции.

Файл журнала создается в той же директории, что и двоичный файл monero-wallet-cli. Чтобы указать другое местоположение, следует использовать опцию --log-file.

Команды

Команды вводятся интерактивно в командной строке monero-wallet-cli.

Вы также можете использовать одноразовую команду, указав её в качестве параметра командной строки. Тем не менее этот вариант используется редко. Для автоматизации лучше использовать monero-wallet-rpc.

CLI-кошелёк имеет возможность вывода справки для отдельных команд. Мы не станем воспроизводить её. Вместо этого мы сфокусируемся на группировке команд, чтобы вы могли быстро найти именно то, что вам нужно. Воспользуйтесь help command_name, чтобы узнать больше.

Помощь и версия

help - список всех команд

help command_name - показать помощь по отдельной команде

version - вывод информации о версии двоичного файла monero-wallet-cli

Статус сети

status - показать, до какой высоты синхронизирован блокчейн

fee - показывает текущую комиссию за байт и mempool узла (отставание транзакций в зависимости от приоритета)

wallet_info - показывает путь к файлу кошелька, адрес, тип и статус сети

Баланс

account - общий баланс; список счетов с соответствующим балансом

balance detail - список адресов для текущего счёта с соответствующим балансом

refresh - принудительно обновить баланс и транзакции (автообновление срабатывает только один раз в 90 секунд)

Управление счетами

account

account new

account switch

account label

Управление адресами

address all

address new

address label

Просмотр транзакций

show_transfers - показывает все транзакции для текущего счёта. Есть возможность опционально применить фильтр: входящие (in) | исходящие (out) | в очереди (pending) | не удавшиеся (failed) | в пуле (pool) | coinbase; также опционально выдаёт индекс подадреса для подбора выходов

show_transfer <txid> - показывает подробную информацию по конкретной транзакции

incoming_transfers [available|unavailable] [verbose] [index=<N1>[,<N2>[,...]]] - показывает входящие транзакции — все или отфильтрованные по доступности и индексу адреса в пределах текущего счёта. Отображаются только подтверждённые транзакции — вы не увидите транзакций, ожидающих своей очереди в пуле

get_tx_note <txid> - получение строки уведомления с идентификатором транзакции

Ключи и пароли

Секретная мнемоническая фраза

seed - показывает необработанную мнемоническую фразу

encrypted_seed - создание мнемонической фразы, зашифрованной фразой-паролем. Пароль необходимо запомнить или сохранить отдельно, так как без фразы-пароля восстановление станет невозможным

Секретные ключи

spendkey - показывает секретный ключ траты

viewkey - показывает секретный и публичный ключи просмотра

Пароль кошелька

password - изменяет пароль кошелька. Этот пароль используется для шифрования локальных файлов кошелька. Секретные ключи или резервные копии не изменяются.

Доказательства

get_reserve_proof -> check_reserve_proof - доказательство баланса

get_spend_proof -> check_spend_proof - доказательство платежа

sign <file> -> verify <filename> <address> <signature> - доказательство владения адресом; позволяет проверить, был ли файл подписан владельцем определённого адреса Monero

get_tx_proof -> check_tx_proof

Multisig

Настройка

prepare_multisig

make_multisig

finalize_multisig

Обновление

export_multisig_info

import_multisig_info

Прочие

submit_multisig

exchange_multisig_keys

export_raw_multisig_tx

sign_multisig <filename>

Аппаратный кошелёк

hw_reconnect - переподключить аппаратный кошелёк

Майнинг

start_mining

stop_mining

Дополнительные

Выходы

unspent_outputs - показывает список и гистограмму непотраченных выходов (неделимых частей вашего баланса)

export_outputs <file> -> import_outputs <file> - помогает при осуществлении холодных трат. Экспортирует выходы из кошелька просмотра в холодный кошелёк, чтобы тот знал, что было ему отправлено

mark_output_spent <amount>/<offset> | <filename> [add]

mark_output_unspent <amount>/<offset>

is_output_spent <amount>/<offset>

Образ ключа

export_key_images <file> -> import_key_images <file> - используется, чтобы проинформировать кошелёк, предназначенный только для просмотра, о текущих транзакциях, чтобы он мог вычислить реальный баланс; как правило, кошелькам, предназначенным только для просмотра, известно только о входящих транзакциях, но не об исходящих

Приватный ключ транзакции

Позволяет узнать и верифицировать приватный ключ транзакции r. Опция была полезно с точки зрения создания подтверждения платежа но она была заменена на get_spend_proof

get_tx_key <txid>

check_tx_key <txid> <txkey> <address>

set_tx_key <txid> <tx_key>

Устранение ошибок

rescan_spent - повторное сканирование блокчейна с целью обнаружения потраченных выходов. Иногда данные кошелька, касающиеся того, какие выходы были потрачены, а какие нет, не совпадают с данными блокчейна. Это может произойти, если вы вышли из кошелька без сохранения транзакции после отправки, или же, если в работе кошелька произойдёт сбой. Инструмент осуществляет поиск образов ключей в блокчейне, чтобы убедиться в том, что он актуален

Косметика

donate <amount> - пожертвовать <amount> команде разработчиков

address_book [(add ((<address> [pid <id>])|<integrated address>) [<description possibly with whitespaces>])|(delete <index>)]

set_description [free text note] -> get_description - управление описанием кошелька (информация является локальной)

Наследственные

save - сейчас это происходит автоматически

save_bc - сейчас это происходит автоматически

bc_height - показывает высоту блокчейна (заменена на status)

sweep_unmixable - относится только к очень старым кошелькам (до 2016); отправляет все несмешиваемые выходы вам же при размере кольца, равном 10

locked_sweep_all

rescan_bc - повторно сканирует блокчейн с нуля с потерей любой информации, которую невозможно восстановить на основе данных самого блокчейна

ЧТО ОСТАЛОСЬ?

Задокументировать остающиеся команды:

payment_id

payments <PID_1> [<PID_2> ... <PID_N>]

print_ring <key_image> | <txid>

save_known_rings

save_watch_only

set <option> [<value>]

set_daemon <host>[:<port>] [trusted|untrusted]

set_log <level>|{+,-,}<categories>

set_ring <filename> | ( <key_image> absolute|relative <index> [<index>...])

set_tx_note <txid> [free text note]

sign_transfer [export_raw]

submit_transfer

locked_sweep_all

sweep_all [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] [outputs=<N>] <address> [<payment_id>]

sweep_below <amount_threshold> [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> [<payment_id>]

sweep_single [<priority>] [<ring_size>] [outputs=<N>] <key_image> <address> [<payment_id>]

transfer [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] (<URI> | <address> <amount>) [<payment_id>]

locked_transfer [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] (<URI> | <addr> <amount>) <lockblocks> [<payment_id>]