# Как создать аккаунт / кошелек Waves
Чтобы создать аккаунт Waves, не нужно регистрироваться где-либо. Создание аккаунта заключается в генерации ключей аккаунта и адреса на основе секретной фразы (seed-фразы).
⚠️ Предупреждение о безопасности
- Секретная фраза или созданный из нее закрытый ключ предоставляют полный доступ к аккаунту, включая возможность распоряжаться средствами. Никому не сообщайте секретную фразу и закрытый ключ, не публикуйте и не пересылайте их.
- Секретную фразу нельзя изменить: из другой секретной фразы (даже отличающейся на один символ) получится другая пара ключей, а следовательно, другой аккаунт.
- Если вы потеряете секретную фразу и закрытый ключ, вы утратите доступ к аккаунту навсегда, без возможности восстановления. Рекомендуем записать секретную фразу на бумаге и хранить в надежном месте.
- Если секретная фраза скомпрометирована (вы ее кому-то отправили или подозреваете, что ее узнали мошенники), немедленно создайте новый аккаунт и переведите на него все активы со старого.
Для создания аккаунта вы можете использовать одно из рекомендованных приложений:
Расширение браузера Keeper Wallet
См. инструкции в разделе Начало.
Online-/desktop-/мобильное приложение WX Network, разработанное сторонней командой из сообщества.
См. инструкции в разделе Как создать новый аккаунт базы знаний WX Network.
WavesFX, разработанное сторонней командой из сообщества.
Или одну из клиентских библиотек, например:
TypeScript/JavaScript-библиотеку ts-lib-crypto (также входит в состав waves-transactions):
const libCrypto = require('@waves/ts-lib-crypto') const seed = libCrypto.randomSeed() // or input your existing seed const sk = libCrypto.privateKey(seed) const pk = libCrypto.publicKey(seed) const addressBase58 = libCrypto.address(seed) // address for Mainnet const addressTestnetBase58 = libCrypto.address(seed, 'T') // address for Testnet
Python-библиотеку Pywaves
import pywaves as pw # pw.setChain('testnet') # Mainnet by default # generate a new address myAddress = pw.Address(seed='<insert your seed here>') print(f'Your seed: {myAddress.seed}') print(f'Private Key: {myAddress.privateKey}') print(f'Public Key: {myAddress.publicKey}') print(f'Address: {myAddress.address}')
Java-библиотеку WavesJ
String seed = Crypto.getRandomSeedPhrase(); PrivateKey privateKey = PrivateKey.fromSeed(seed); PublicKey publicKey = PublicKey.from(privateKey); Address address = Address.from(publicKey);
Обратите внимание:
- Ключи аккаунта и адрес генерируются и хранятся локально. Никакие данные не нужно отправлять на ноду или куда-либо еще.
- Адрес сразу же доступен для перевода токенов — например, его можно указать в качестве получателя в транзакции перевода.
- Информация об адресе появляется на блокчейне вместе с первой транзакцией, в которой участвует аккаунт.
- Чтобы пользоваться аккаунтом в другом приложении или на другом устройстве, нужно ввести там секретную фразу и повторить генерацию ключей из нее.
# Как массово создавать кошельки для пользователей?
Централизованно генерировать аккаунты для пользователей — плохая практика. Владение секретной фразой или закрытым ключом позволяет делать что угодно от имени аккаунта. Хранить и передавать эти данные небезопасно: кроме риска злоупотребления, есть риск кражи или утечки данных.
Каждый пользователь должен создать свой аккаунт самостоятельно, а приложение должно запрашивать подпись пользователя отдельно для каждой транзакции. Для этого можно подключить на сайте библиотеку Signer — она предоставляет пользователю возможность войти в свой аккаунт или создать его и подписывать транзакции, не передавая приложению секретную фразу или закрытый ключ.