Код:
bitcoinaddress [publicKey_Integer]: = Модуль [{h1, h2, адр},
h1 = ripemd160 [sha256 [PublicKey, 65], 32];
h2 = sha256 [sha256 [h1, 21], 32];
ADDR = 2 ^ 32 H1 + Факторпространство [h2, 2 ^ 224];
Возвращение [ToBase58 [адр]]];
(* Обратите внимание, что второй аргумент в хэш-функции является число байтов сообщения предположить, поскольку Mathematica использует целые числа произвольной точности *)
h1 = ripemd160 [sha256 [PublicKey, 65], 32];
h2 = sha256 [sha256 [h1, 21], 32];
ADDR = 2 ^ 32 H1 + Факторпространство [h2, 2 ^ 224];
Возвращение [ToBase58 [адр]]];
(* Обратите внимание, что второй аргумент в хэш-функции является число байтов сообщения предположить, поскольку Mathematica использует целые числа произвольной точности *)
И вот недостатки код, я использую для ToBase58 []. Изъян в конце, когда я предварять "1" для того, чтобы получить "правильный ответ," но я понимаю, что это хак и не всегда будет работать, если есть ведущие нули в пабе ключа хэша:
Код:
ToBase58 [y_Integer]: =
Модуль [{codestring = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz", OutputString = "", Х = у},
В то время как [х > 0, outputString = outputString <> StringTake [codestring, {Mod [х, 58] + 1}]; х = Факторпространства [х, 58]];
Вернуть["1" <> StringReverse [outputString]]]; (* Предваряя "1" как это неправильно *)
Модуль [{codestring = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz", OutputString = "", Х = у},
В то время как [х > 0, outputString = outputString <> StringTake [codestring, {Mod [х, 58] + 1}]; х = Факторпространства [х, 58]];
Вернуть["1" <> StringReverse [outputString]]]; (* Предваряя "1" как это неправильно *)
На Bitcoin вики, он говорит:
То, что я не понимаю, эти вещи в красном цвете:
address_byte_string (состоящий из 0x01 + Хэш + 4-byte_check_code)
Если я предварять 0х01 до преобразования в base58 я получаю неправильный адрес, в то время как, если я игнорирую эти байты я получаю правильный адрес.
повтор (number_of_leading_zero_bytes_in_hash)
^^ Это кажется странным и произвольности мне. Добавить дополнительный "1" для каждого ведущего байт то есть 0?
ПРИМЕЧАНИЕ ДЛЯ ЧИТАТЕЛЕЙ: Не используйте этот код для чего-то важного. Используйте реальную библиотеку Bitcoin.