Немного теории, чтоб материал был доступен для любого уровня криптопанков))
Как получаются адреса в ваших кошельках?
Генерируется случайная последовательность (32 байта), которая называется приватным ключем. Дальше из этой последовательности генерируется другая связанная с ней последовательность (64 байта) которая называется публичным ключем, после чего он хешируется SHA-256 а после и RIPEMD160 (в целях безопасности и уменьшения размера) и на выходе мы имеем (20 байт), которые кодируются с помощью base58 и на выходе мы получаем привычный для нас адрес
Я упустил добавление всяких префиксов и контрольных сумм, так как они добавлены для дополнительной валидации адреса и большей наглядности, а в блокчейне не хранятся.
Какая особенность расходования транзакций существует?
Одним из условий для облегчения хранения и поиска транзакций в блокчейне, а также дополнительного запутывания транзакций является полное расходование входов. То есть сумма монет на входах всегда равна сумме монет на выходах, с учётом комиссии.
Для наглядности возьмём любую реальную транзакцию
https://chainz.cryptoid.info/dash/tx.dws?14213238.htmНа адресе XmDku4mxao2MjdSy8ttFeeNcYr5PNdv3oq находилось 26.42153331 DASH. Дальше его владелец перевёл, либо 0.0872093 DASH на Xho65RQTT2SPFUyFBbj2wfmEpy5Yu5tm3w, либо 26.33432175 DASH на XtKodAYqf4WEmc5XtoB5sdqW7w4nLVLh3U, где адрес получателя мы не знаем и какова из этих двух сумма перевода а какая сдача от входа. Если бы сдача вернулась на тот же адрес с которого была отправлена, это можно было бы понять методом исключения. Давайте представим что владелец перевёл 0.0872093 DASH на адресс Xho65RQTT2SPFUyFBbj2wfmEpy5Yu5tm3w, и заплатил комиссию 0.00000226 DASH (разницу между суммой монет на входах и суммой монет на выходах)
Так это такое и что же нам даёт HD Wallet?
В далёкие времена когда не было Seed фраз и бекапы кошельков не создавались автоматически. Существовало два способа резервного копирования. И у каждого из них были свои недостатки. Первый это сохранением кошелька (wallet.dat) на каком-то внешнем носители, и молится чтоб этот носитель не испортился и не потерялся. Второй способ это экспортировать приватный ключ от адреса на котором хранятся средства. И вот тут начинается самое интересное. Вернемся к примеру транзакции выше и представим что мы и есть владелец адреса XmDku4mxao2MjdSy8ttFeeNcYr5PNdv3oq. Нам подарили на день рождения приватный ключ от 26.42153331 DASH мы его распечатали в виде QR кода (чтоб проще было вводить) и сохранили в самом надежном месте. Но тут вдруг мы захотели купить дилдо за 0.0872093 DASH, ну и чтоб мамка не узнала что мы купили дилдо, удалили кошелек с диска и сожгли компьютер. Каково же будет разочарование когда мы попытаемся восстановить адрес из нашего QR кода и увидим пустой баланс. А всё потому что сдача 26.33432175 DASH вернулась на наш второй адресс в кошельке (XtKodAYqf4WEmc5XtoB5sdqW7w4nLVLh3U), и восстановили мы только один адрес а не весь кошелек. А экспортировать все задействованные адреса такая себе забава. Поэтому поклонники сохранения wallet.dat начали делать его автоматические резервные копии. А сторонники бумажных бекапов придумали HD wallet. Но перед тем как рассказать про устройство HD wallet, расскажу про один недостаток резервных копий про который не все знают. Дело в том что при первом запуске DASH создается кошелек, с предварительно сгенерированными адресами. За количество которых отвечает параметр keypool=1000, также эти адреса помимо использования для сдачи используются в PrivateSend. Так что не забываем что после анонимизации монет, ваш баланс размазан по множеству адресов, так что не забывайте про это. Так вот, в резервной копии кошелька хранятся ключи (по крайней мере раньше так было) в количестве равном keypool. То есть если вы использовали 1001 адрес, то первый адрес из списка не попадёт в резервную копию. И будет обидно если на нём лежала мастернода. Но этого можно избежать если использовать HD wallet. Так как же он устроен? Изначально в нём генерируется Seed, семечка из которой в дальнейшем будет строится всё дерево ключей.