Выполнение SHA-256 на IBM 1401Наверняка ЭВМ IBM 1401 является самой худшей из всех машин, которые можно было бы выбрать для выполнения хэш-алгоритма SHA-256. Для эффективной работы этому алгоритму необходимы машины, которые могут выполнять битовые операции в 32-битных словах. К сожалению, IBM 1401 не поддерживает ни 32-битные слова, ни байты.
Эта ЭВМ работает с 6-битными символами и не позволяет выполнять битовые операции. Более того, в ней, вместо двоичной, использовалась десятичная арифметика. Следовательно, алгоритм на ЭВМ 1401 будет выполняться медленно и неудобным для пользователя образом.
Я закончил, используя один символ на бит. 32-битное значение сохранялось как 32 символ, либо «0» либо «1». Мой код должен был посимвольно выполнить битовые операции, умножения и сложения, проверяя каждый символ и решая, что с ним делать. Как и можно было ожидать, выполнение кода заняло много времени.
Далее я привожу написанный мной ассемблерный код. В целом принцип работы кода описан в комментариях. В конце кода есть таблица констант, необходимых алгоритму SHA-256 в шестнадцатеричном виде. Так как ЭВМ 1401 не поддерживает шестнадцатеричный формат, мне пришлось написать собственные подпрограммы для преобразования шестнадцатеричного и двоичного форматов.
В этой статье я не буду приводить пояснения ассемблерного кода IBM 1401, подчеркну лишь, что он весьма отличается того, что используют современные компьютеры. Данный код не вызывает подпрограммы и не выдает результаты. В связи с отсутствием регистров общего назначения операции осуществляются в памяти.
Исполняемая программа была нанесена на 85 перфокарт (их вы уже видели в начале статьи). Я также сделал перфокарту с вводом хэш-алгоритма. Для того чтобы запустить программу, мне пришлось загрузить перфокарту в кардридер и нажать кнопку «Загрузка» («Load»).
Кардридер обрабатывал по 800 карт в минуту. Таким образом, на загрузку программы ушло всего несколько секунд. Во время выполнения программы консоль компьютера (см. приведенную ниже иллюстрацию) лихорадочно мигала в течение 40 секунд. Наконец, принтер распечатал для меня итоговый хэш (распечатку вы также видели в начале статьи), и результаты были нанесены на новую перфокарту. Так как майнинг Bitcoin использует двойное хэширование SHA-256, процесс хэширования майнинга занял в два раза больше времени (80 секунд).
Усердная работа консоли IBM 1401 во время расчета хэша SHA-256
Сравнение производительностиЭВМ IBM 1401 может вычислить двойной хэш SHA-256 за 80 секунд. На выполнение данной задачи компьютер потребляет около 3000 Вт мощности, примерно столько же сколько электроплита или сушилка для белья. В свое время базовая система IBM 1401 стоила 125600 долларов США. В реалиях 2015 года это составляет около миллиона долларов США. В то же время, сейчас вы можете купить USB флешку для майнинга за 50 долларов США, в которой имеется специализированная интегральная схема (ASIC USB майнер). Этот USB майнер выполняет 3,6 млрд. хэшей в секунду, потребляя при этом около 4 Вт.
Столь значительные показатели производительности обусловлены несколькими факторами: резким увеличением производительности компьютеров за последние 50 лет согласно закону Мура, потерей производительности, связанной с использованием десятичной арифметики в ЭВМ для решения коммерческих задач, которая была занята вычислением бинарного хэш-кода, а также выигрышем в быстродействии со стороны традиционного аппаратного обеспечения для майнинга биткоинов.
Подведем итоги. Для майнинга блока с учетом текущих требований к данному процессу, ЭВМ IBM 1401 понадобится около 5x10^14 лет (что в 40 000 раз превышает текущий возраст Вселенной). Стоимость израсходованной электроэнергии составит около 10^18 долларов США. В итоге Вы получите 25 биткоинов, чья стоимость в денежном выражении составит около 6000 долларов США. Итак, майнинг биткоинов на мэйнфрейме IBM 1401 прибыльным занятием не назовешь. На приведенных ниже фотографиях сравниваются компьютерные микросхемы 60-х годов прошлого века и современные варианты, наглядно демонстрируя технологический прогресс.
SMS карты, использовавшиеся в IBM 1401. Каждая карта состоит из множества компонентов с микросхемой. Количество таких карт в компьютере превышало тысячу.
чип Bitfury ASIC позволяет майнить биткоины со скоростью 2-3 гигахэша в секунду. Источник фотографии: zeptobars (CC BY 3.0)
Передача данных по сетиВы можете решить, что биткоины несовместимы с технологиями 60-х годов прошлого века из-за отсутствия возможности передачи данных по сети. Понадобится ли кому-то пересылать перфокарты с блочной цепью на другие компьютеры? Общение между компьютерами посредством сети появилось достаточно давно.
Еще в 1941 году IBM поддерживала так называемый процесс телеметрической (дистанционной) обработки данных. В 60-е годы IBM 1401 можно было подключить к устройству передачи данных IBM 1009 (IBM 1009 Data Transmission Unit) — модему размером с посудомоечную машину, который позволял компьютерам обмениваться друг с другом данными по телефонной линии со скоростью до 300 символов в секунду.
То есть, теоретически построение сети Bitcoin на базе технологий 60-х годов прошлого века вполне возможно. К сожалению, мне не удалось заполучить оборудование для телеобработки данных и проверить эту теорию.
Устройство передачи данных IBM 1009. Модем размером с посудомоечную машину появился в 1960 году. С его помощью можно было передавать до 300 символов в секунду по телефонной линии. Источник фотографии: Введение в системы обработки данных IBM Introduction to IBM Data Processing Systems).