Как конвертировать HEX адресс кошелька в BASE58CHECK
проблема заключается в том, что не могу получить адресс кошелька в формате BASE58CHECK.
На этом сайте все работает правильно, я нашел скрипты на PHP, GO, JAVA но нигде нет на C# https://www.btcschools.net/tron/tron_tool_base58check_hex.php Со строки 41ba133a7e9094ec3b0b2459561e773a2a81c1724d в строку TSw5ikxGCfts2yyRKz1zSetAPt6bL2Crqy
Я начал переписывать код с PHP на С# вручную, однако возникли ошибки при кодировке:
string data = "41ba133a7e9094ec3b0b2459561e773a2a81c1724d";
string address = hex2bin(data);
byte[] _address = hex2binbytes(data);
string h_fromByteToString = Encoding.ASCII.GetString(_address);
byte[] h_fromStringToByte = Encoding.ASCII.GetBytes(h_fromByteToString);
При записи с байтов в строку, и после с полученной строки в байты, я получаю совсем другие байты, а далее надо использовать SHA256 и на этом моменте остановился.
Может кто подсказать готовые библиотеки для конвертации, или как поступить в данном случае с кодом?
Ответы (1 шт):
Нашел решение, не надо было байты каждый раз кодировать, надо с ними же и работать. Вот готовый код, возможно кому-то пригодиться (немного подправил):
Base58: https://www.nuget.org/packages/Base58/1.0.0?_src=template
static string Res(string data)
{
byte[] address = Convert.FromHexString(data);
var hash0 = SHA256.HashData(address);
var hash1 = SHA256.HashData(hash0);
var checksum = hash1[..4];
var res_bytes = address.Concat(checksum).ToArray();
return Base58.Encode(res_bytes);
}