# Работа с кошельком ноды
Каждая нода имеет подключенный кошелек, обеспечивающий:
- возможность генерировать блоки;
- возможность подписывать транзакции.
Нода может иметь только один кошелек с одним seed. Seed может представлять собой секретную фразу (случайный набор из 15 английских слов), преобразованную в байты, либо произвольный массив байтов, достаточно длинный, чтобы его вероятность его подобрать была нереально мала.
Основной аккаунт ноды сгенерирован из seed, к которому добавлен 4-байтный префикс nonce, равный 0. Дополнительные аккаунты можно добавить с помощью метода POST /addresses
REST API вашей ноды; для их генерации используется тот же seed и последовательно возрастающие значения nonce. Правила генерации подробно описаны в разделе Cryptographic practical details.
В данной статье мы рассмотрим следующие сценарии работы с кошельком:
- Создание нового кошелька с нуля
- Создание кошелька с использованием имеющейся секретной фразы
- Использование имеющегося кошелька
- Обновление настроек кошелька
- Смена аккаунта у ноды
# Создание нового кошелька с нуля
При запуске нода автоматически создаст кошелек в случае, если основной каталог приложения, указанный в секции wallet
файла конфигурации, не содержит файл wallet.dat
.
В процессе создания кошелька нода:
- сгенерирует seed;
- выведет seed в кодировке base58 в STDOUT;
- запросит новый пароль, при помощи которого seed будет зашифрован.
Зашифрованный seed будет записан в wallet.dat
. Чтобы не вводить пароль при каждом запуске ноды, рекомендуется указать его в секции wallet
файла конфигурации.
# Создание кошелька с использованием имеющейся секретной фразы
Если у вас уже есть секретная фраза (seed в виде набора слов), укажите в секции wallet
файла конфигурации:
- seed в кодировке base58.
- пароль.
Длина seed в кодировке base58 не должна превышать 192 символа. Секретная фраза из 24 слов может не подойти в качестве seed.
Для преобразования секретной фразы в кодировку base58 существует множество конвертеров. С точки зрения безопасности разумным представляется использовать Ride REPL в Waves IDE. Чтобы закодировать секретную фразу в base58, введите в консоль
"your-seed-phrase".toBytes().toBase58String()
При необходимости измените путь к каталогу, где будет размещен сгенерированный wallet.dat
. Пример секции wallet
с рассмотренными настройками:
wallet {
file = ${waves.directory}"/wallet/wallet.dat"
password = "some-string-as-password"
seed = "base58-encoded-seed"
}
В результате в указанном каталоге на основе заданной секретной фразы будет сгенерирован wallet.dat
.
Подробнее о файле конфигурации
# Использование имеющегося кошелька
Если у вас имеется созданный ранее файл wallet.dat
, достаточно поместить его в каталог, указанный в секции wallet
файла конфигурации, и указать пароль к нему в параметре password
. Никаких дополнительных действий не требуется.
# Обновление настроек кошелька
Если вы хотите запустить ноду с другим кошельком, используйте один из следующих способов:
- Замените
wallet.dat
на файл, содержащий seed другого кошелька.
или
- Удалите или переместите файл
wallet.dat
. Обновите seed в файле конфигурации ноды.
Нода начнет работать с новым кошельком после перезапуска.
# Смена аккаунта у ноды
При необходимости поменять аккаунт у ноды, прежде всего потребуется удалить или переместить старый wallet.dat
. После этого вы можете:
- создать новый кошелек с нуля;
- создать кошелек с использованием имеющейся секретной фразы;
- использовать другой кошелек.
Если seed в файле
wallet.dat
и в файле конфигурации не соответствуют друг другу, нода не запускается.
# Получение seed ноды и приватных ключей
Получить seed ноды в кодировке base58 можно с помощью метода REST API GET /wallet/seed
. Метод требует авторизации с помощью API-ключа.
Используя этот seed, вы можете импортировать основной аккаунт ноды в WX Network: Импортировать аккаунты → Секретная фраза или приватный ключ → Зашифр. фраза.
Для других аккаунтов из кошелька ноды этот способ не подходит. Для них можно получить account seed
(см. определение в разделе Cryptographic practical details) с помощью метода REST API GET /addresses/seed/{address}
, а затем сгенерировать из account seed
закрытый ключ аккаунта. Это можно сделать, выполнив на хосте, где работает нода, следующие команды (вставьте свой API-ключ и адрес аккаунта):
curl -s -H "x-api-key: ${api_key}" http://localhost:6869/addresses/seed/${address} | \
jq -c -r .seed | \
tr -d '\n' | \
waves util crypto create-keys -i - -o - | \
jq -r .privateKey
# Генерация блоков несколькими аккаунтами
Несколько аккаунтов могут генерировать блоки, используя одну ноду. Для этого нужно указать закрытые ключи генерирующих аккаунтов в параметре waves.miner.private-keys
файла конфигурации в кодировке base58.
Пример (не используйте эти ключи на реальной ноде!):
waves {
...
miner {
private-keys = [
"8V6ZDT59tAGV9Lwvv4bt7WSEwsBD3cPrTd65dxEJr1",
"FJgR2bv8fbJZanF6dRm7i8D1Y8rCtKyrsBbKs5UPRP"
]
}
}
Если в параметре указан хотя бы один ключ, основной аккаунт из кошелька ноды не будет генерировать блоки (однако его можно продолжать использовать для подписания транзакций).