@CareyGregory невелику кількість випадково, ймовірно, нешкідливі, але в рекомендаціях накладні витрати мають на увазі невеликі суми кожен день два рази? Необхідно вказати, як встановити Убунту? поруч чи ні? @nitstorm : 7de611b50c283c1755b4007a4feb0379 компакт-диск ХХХ потім `LS-ла` і показати мені результат Це, здається, добре, я спробую сьогодні. Дякую за швидку відповідь. Я дам вам знати. Бережіть себе! @senshin дякую, буду редагувати моя відповідь, щоб включити це. Мені дуже цікаво, а скільки комп'ютерної інфраструктури і витрат на персонал банків сума, за ті ж гроші передані і кількість оброблюваних транзакцій.

Структура Der закодована підпису ECDSA виглядає наступним чином:

enter image description here

30 визначає послідовність є asn1 кодування, яке супроводжується довжини з (послідовність). р і С.Може бути або 32 або 33 байт, в залежності від того, наскільки великий дер закодовані значення. р і и завжди на чолі з 02, в яких визначаються цілим числом є asn1. Нарешті, хвостів (ХТ) байт представляє hashtype

Для того, щоб розібрати підпис, щоб отримати обидва значення потрібно перевірити їх довжину, а це завжди 1 байт, і витягти значення в залежності від результату. Ось код для цього:

деф parse_element(hex_str, зсув, element_size):
"""
 :парам hex_str: рядку елемент.
 :hex_str вул. тип: шестигранні 
 :параметр зсуву: початкове положення об'єкта всередині hex_str.
 :тип зсуву: інт
 :парам element_size: розмір елемента для вилучення.
 :element_size тип: int
 :повернення: витягнутий елемент з рядка, і оновлений зміщення після його вилучення.
 :вул. rtype кортеж (, інт)
"""

 повернення hex_str[зсув зсув+element_size], зсув+element_size


деф dissect_signature(hex_sig):
"""
 Екстракти р, S і компоненти ХТ з биткоин підпису ECDSA.
 :парам hex_sig: підписи в шістнадцятковому форматі.
 :hex_sig вул. тип: шестигранні 
 :повернення: r, s, т як кортеж.
 :rtype: кортеж(вул. вул. вул.)
"""

 зсув = 0
 # Перевіряємо SIG містить, принаймні, розмір і маркер послідовності 
 стверджувати, льон(hex_sig) > 4, "неправильна підпис формат".
 послідовності, зсув = parse_element(hex_sig, офсет, 2)
 # Перевірити маркер послідовності правильно
 стверджувати послідовність == '30', "неправильної послідовності маркера."
 signature_length, зсув = parse_element(hex_sig, офсет, 2)
 # Перевіряємо довжину решти збігається з довжиною підпису + довжина hashflag (1 байт)
 стверджувати, льон(hex_sig[зміщення])/2 == інт(signature_length, 16) + 1, "неправильної довжини".
 # Отримати Р
 маркер, зсув = parse_element(hex_sig, офсет, 2)
 стверджувати маркера == '02', "неправильний Р маркер."
 len_r, зсув = parse_element(hex_sig, офсет, 2)
 len_r_int = інт(len_r, 16) * 2 # кожен байт являє собою 2 символа
 Р, зсув = parse_element(hex_sig, офсет, len_r_int)
 # Отримуємо s
 маркер, зсув = parse_element(hex_sig, офсет, 2)
 стверджувати маркера == '02', "неправильного маркера."
 len_s, зсув = parse_element(hex_sig, офсет, 2)
 len_s_int = інт(len_s, 16) * 2 # кожен байт являє собою 2 символа
 и, зсув = parse_element(hex_sig, офсет, len_s_int)
 # Отримуємо ХТ
 ХТ, зсув = parse_element(hex_sig, офсет, 2)
 стверджувати, зсув == льон(hex_sig), "неправильний розбір".

 повернення р, с, ХТ


example_sig = ніхто insert_sig_here # 
р, с, ХТ = dissect_signature(example_sig)
друку "р: %з\н: %з\НХТ: %з\п" % (р, с, ХТ)