Цитировать по имени
цитировать ответ
|
Re: Raw Tx Tool - Используйте для управления монеты, и не случайно платить огромный гонорар снова!
Благодарю. Честно говоря, я предпочитаю двигаться Txs к / от моего холодного хранения в сыром виде. Тогда я могу легко проверить, если ТЙ не сдержанные, делая например .: кот transaction.bin | OpenSSL SHA256 -binary | OpenSSL sha256 Кроме того, прежде чем тратить их мой бумажник приложение в любом случае нуждается в исходных необработанных данных, чтобы убедиться, что он имеет ожидаемый идентификатор. Поэтому ИМО, это более удобно для бумажника приложения, чтобы иметь ОЕ (несущую неизрасходованный выход) в качестве исходных данных уже. И если мне нужно, чтобы увидеть, что находится внутри сырой ТХ, у меня есть инструмент, чтобы отобразить его в удобочитаемом формате. Я всегда использую его на подписанном ОМ, перед перемещением его из моего холодного хранения. Только в случае, если мой кошелек будет ввернуть что-нибудь. / * GCC bctrans.c -o bctrans.exe -lcrypto -I / местные / SSL / включают -L / местные / SSL / Библиотека * / #включают #включают #включают #включают #включают #включают
статический символ без знака addr_version = 0x00; статический файл * F = NULL;
BIGNUM * bn58, DV, МО; BN_CTX * CTX;
#define SHA256 (р, л, о) {\ SHA256_CTX shactx; \ SHA256_Init (&shactx); \ SHA256_Update (&shactx, (р), (л)); \ SHA256_Final ((о), &shactx); }
недействительный ReadFile (неподписанный символ * р, внутр длина) { если (! е) { ИНТ с, я; полукокс с [3]; в то время как (LEN>0) { для (я = 0; я<2;) { с = GetChar (); если (с == EOF) { fprintf (STDERR, "Файл слишком короткий \ п"); выход (1); } с = ToLower (с); если (с<= '9' && с>= '0' || с<= 'F' && с>= 'А') с [я ++] = (символ) с; } с [2] = 0; sscanf (с, "%Икс", &с); * Р = (символ без знака) с; р ++; len--; } } Еще { если (Fread (р, 1, длина, е)! = LEN) { fprintf (STDERR, "Файл слишком короткий \ п"); fclose (е); выход (1); } } }
без знака долго долго getle (неподписанные символ * р, внутр байт) { беззнаковый длинный длинный Рез = 0; в то время как (bytes--) = ((без знака длиной в длину) (р [байт]))<<(8 * байт); вернуться Рез; }
без знака долго долго getvl () { символ без знака б [8]; ReadFile (б, 1); переключатель (* б) { случай 0xfd: ReadFile (б, 2); вернуть getle (b, 2); случай 0xfe: ReadFile (б, 4); вернуть getle (B, 4); случай 0xff: ReadFile (б, 8); вернуть getle (б, 8); } вернуться * б; }
недействительный prhash (неподписанный символ * р, беззнаковый целочисленное значение л) { в то время как (L--) Е ("% 02x", Р [л]); }
недействительный шестнадцатеричный (неподписанный символ * р, беззнаковый целочисленное значение л) { в то время как (L--) Е ("% 02x"* Р ++); }
недействительный printbtcaddr (неподписанный символ * р) { статический Const символ * = ХР "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; неподписанные символ моды; обугливается из [64]; INT = 0, у = 0; BIGNUM * = BN_bin2bn млрд (р, 25, NULL); в то время как (! BN_is_zero (млрд)) { BN_div (&DV, &мо, млрд, bn58, CTX); если (BN_bn2bin (&мо, &мод) == 0) мод = 0; из [я ++] = ХР [мод]; BN_copy (млрд, &DV); } BN_free (млрд); в то время как ((* р) == 0) { putchar ( '1'); р ++; } в то время как (i--) putchar (из [I]); }
INT основных (INT ARGC, символ * ARGV []) { статический символ без знака ЬеГо [0x10000]; без знака долго долго я С.Л., txcnt, v; без знака VA, VB; ИНТ х; длинный FPOS; символ * имя_файла = NULL;
для (х = 1; х если (зЬгстр (ARGV [х], "-t") == 0) { addr_version = 0x6F; // testnet } Еще { Fname = ARGV [х]; } } если (! имя_файл) { Е ("Введите сделки HexDump данные: \ п"); } Еще { F = Еореп (Fname, "Р.Б."); если (! е) { fprintf (STDERR, "Файл% S не найден \ п", Fname); возвращает 1; } }
ReadFile (BUF, 4); Е ("Версия:% ЛС \ п", Getle (BUF, 4));
txcnt = getvl (); Е ("TX В CNT:% ЛС \ п", Txcnt); для (я = 0; я ReadFile (BUF, 36); SL = getvl ();
Е ("% 6d): ", (INT) я); prhash (BUF, 32); Е (" Idx =% 2lld сл =% LLD", Getle (ЬиЕ + 32, 4), SL); ReadFile (BUF, SL); ReadFile (BUF, 4);
Е (" сл =% х \ п"(Без знака) getle (BUF, 4)); }
txcnt = getvl (); Е ("TX OUT CNT:% ЛС \ п", Txcnt);
CTX = BN_CTX_new (); bn58 = BN_bin2bn ("\ X3A", 1, NULL); BN_init (&DV); BN_init (&мес);
для (я = 0; я ReadFile (BUF, 8); SL = getvl (); v = getle (BUF, 8); ва = (без знака) (об / 100000000LL); VB = (без знака) (v% 100000000LL); Е ("% 6d).% 7U% 08u BTC", (INT) я, VA, VB, SL); ReadFile (BUF, SL); если (сл! = 25 || memcmp (ЬиЕ, "\ X76 \ xA9 \ x14", 3) || ЬиЕ [23]! = 0x88 || ЬиЕ [24]! = 0xac) { Е (" ПРЕДУПРЕЖДЕНИЕ! Неожиданное SIG_SCRIPT: \ п"); шестнадцатеричный (BUF, SL); } Еще { неподписанный символ DAT [25]; символ без знака ша [SHA256_DIGEST_LENGTH]; символ без знака SHA2 [SHA256_DIGEST_LENGTH]; DAT [0] = addr_version; // версия тетср (DAT + 1, ЬиЙ + 3, 20); SHA256 (DAT, 21, SHA); SHA256 (ша, SHA256_DIGEST_LENGTH, SHA2); // Е (" chsum:% 02x% 02x% 02x% 02x", SHA2 [0], SHA2 [1], SHA2 [2], SHA2 [3]); тетср (DAT + 21, SHA2, 4); Е (" адресовать "); printbtcaddr (DAT); } putchar ( '\ п'); }
BN_free (bn58); BN_CTX_free (CTX);
ReadFile (BUF, 4); Е ("Lock Time:% ЛС \ п", Getle (BUF, 4));
если (е) { FPOS = ftell (е); FSEEK (е, 0, SEEK_END); если (FPOS! = ftell (е)) { Е ("ПРЕДУПРЕЖДЕНИЕ!!! Файл слишком долго. Только% Л.Д. байт ожидается (% Л.Д. слишком много) \ п", FPOS, ftell (е) -fpos); } Еще { Е ("Размер файла проверяется OK -% л.д. байт \ п", FPOS); } fclose (е); }
возвращать 0; }
|