На прошлой неделе я имел удовольствие посетить интерактивный двухдневный семинар Jimmy Song Programming Blockchain. Для тех, кто не знаком с курсом, это интенсивное и глубокое погружение в протокол Биткойн, охватывающее такие детали, как конечные поля, криптография на основе эллиптических кривых, создание/подписание/анализ транзакций, построение дерева Меркла и многое другое… не теоретическая лекция.

Посещение этого семинара может заставить ваш мозг взорваться, но в очень хорошем смысле.За 2 дня нужно охватить так много контента, что вам может показаться, что вы пьете из пожарного шланга. Частично это касается не только знаний, но и развития экосистемы разработчиков и присоединения к сообществу разработчиков-единомышленников для совместной работы и создания вещей. Меня впечатлило разнообразие моих одноклассников, которые были разного происхождения, возраста и пола. Большой процент людей был вовлечен в блокчейн/биткойн еще до 2015 года, что может быть несколько необычно для других событий, связанных с блокчейном, в наши дни.

Итак, что вам нужно знать, чтобы пройти этот курс? По крайней мере, базовое понимание блокчейна/биткойна и немного Python. Если вы кодер, вы, вероятно, сможете разобраться с синтаксисом Python на лету, но тогда это точно будет время пожарного шланга (все в порядке — если я могу это сделать, вы тоже можете это сделать!)

Перед началом семинара вас попросят настроить вашу среду таким образом, чтобы вы использовали правильную версию Python и могли выполнять некоторые предварительные упражнения в блокноте Jupyter. Это гарантирует, что класс работает с той же средой разработки и что вы немного знакомы с блокнотом Jupyter.

По прибытии вы получите копию Освоение биткойнов: программирование открытого блокчейна и удобную ламинированную шпаргалку.

Чтобы понять, как все это работает, сначала мы должны потратить некоторое время на фундаментальную математику. Так что, если это было давно, стряхните пыль с этих колпачков с количественным мышлением.

Конечные поля

Конечное поле — это набор чисел, которые:

  • конечны
  • Замкнутый набор под +, -, *, /, кроме деления на 0
  • В нашем случае используется с эллиптическими кривыми для криптографии.

Что такое по модулю? Его можно рассматривать как остаток.

Пример: если мы работаем в основном поле 19…

11 + 6 = 17 (мод 19)

8 + 14 = 3 (мод 19)

Обычно 8 + 14 = 22. Теперь, если мы находимся в моде 19, это означает, что 22–19 = 3 (мод 19).

Обратите внимание, что негативы также работают…

4 -12 = 11 (мод 19)

Вы проходите через гораздо больше примеров в классе, включая, конечно, все различные операции.

Теперь, почему мы заботимся о конечных полях? Потому что они используются в криптографии на эллиптических кривых (ECC), которую использует Биткойн.

Эллиптические кривые

Эллиптические кривые важны из-за так называемого сложения точек. Если мы вернемся к уроку алгебры, вы, возможно, вспомните понятия линейного, квадратичного и кубического. Эллиптические кривые следуют формату y² = x³ + ax + b. В частности, Биткойн использует secp256k1, то есть y² = x³ +7.

Эллиптическая кривая – это неособая плоская алгебраическая кривая; то есть у него нет точек возврата или самопересечений. Он выглядит симметричным относительно оси x, поэтому для любой конкретной координаты x у вас есть положительная координата y и отрицательная координата y.

Добавление точки

Как упоминалось ранее, эллиптические кривые важны из-за сложения точек. На эллиптическую кривую можно «добавить» 2 разные точки.

Для любой прямой, проходящей через эллиптическую кривую, если она пересекается дважды, по определению она пересекается в третий раз. Чтобы добавить точки P и Q в приведенном ниже примере:

  • Вы рисуете линию, соединяющую P и Q
  • Посмотрите, где она пересекается в третий раз, в точке R.
  • P + Q = точка зеркала точки R

Существует понятие Точки в Бесконечности, которую можно рассматривать как ноль.

Какое это имеет отношение к Биткойну? Вся эта канитель состоит в том, чтобы создать открытый ключ из закрытого ключа! Открытый ключ на самом деле является точкой!

В приведенном выше представлении эллиптической кривой это кривая над действительными числами. У вас могут быть кривые над конечными полями, и добавление точек все еще работает.

Ниже мы можем подтвердить, что точка находится на кривой с конечным полем.

Пробежавшись по многим деталям, которые вы узнали бы в классе, знайте, что в Биткойне есть установленная Точка Генератора (G). Ваш закрытый ключ представляет собой скаляр (ы), и вы используете их для получения вашего открытого ключа (P). В биткойне закрытые ключи secp256k1 представляют собой 256 бит данных.

P = sG

В действительно большой группе порядка 2²⁵⁶ (созданной математикой конечных полей), где s действительно велико, найти P, когда мы знаем s, несложно. Нахождение s, когда мы знаем, что P не является. Это называется проблемой дискретного журнала и является частью того, что помогает сделать биткойн безопасным. Если вы слышали о математических связях открытых и закрытых ключей, то вот что они означают.

Как бы то ни было, 2²⁵⁶ — это действительно большое число.

2²⁵⁶ примерно равно 10⁷⁷

Количество атомов в земле и на земле ~ 10⁵⁰

Количество атомов в Солнечной системе ~ 10⁵⁷

Триллион компьютеров выполняет триллион операций каждую триллионную долю секунды в течение триллиона лет ‹ 10⁵⁶ операций

Детали адресов

Итак, если публичный ключ — это просто ТОЧКА (!), что не так с адресами? Вот где пригодится удобная шпаргалка денди. Вы обнаружите, что существует стандартный формат для таких вещей, как форматы транзакций, форматы блоков, форматы подписи и т. д. Вы можете сериализовать их в коде, потому что знаете, например, что если первые 2 цифры в строке SEC равны «04», , то это несжатый формат.

Со временем и практикой вы сможете легко начать их расшифровывать (говорит Джимми).

В приведенном выше примере знайте, что существует 2 формата SEC. Первые 2 цифры говорят вам, является ли это сжатым или несжатым форматом. В несжатом формате точка явно именуется x и y. В сжатом формате дается только координата x, а первые 2 цифры говорят вам, является ли координата y верхним зеркальным отражением y или нижним y.

Для всех вас в ICO-стране SEC НЕ расшифровывается как Комиссия по ценным бумагам и биржам. Это расшифровывается как Standard for Efficient Cryptography, а-ля secp256k1. 256 относится к количеству битов в простом поле.

Чтобы вычислить адрес, вы:

  1. Начните со сжатого или несжатого формата SEC.
  2. Результат SHA-256, а затем результат RIPEMD160 (также известный как HASH160).
  3. Добавьте префикс сети (00 для основной сети, 6F для тестовой сети)
  4. Добавьте в конце 32-битную контрольную сумму с двойным SHA256.
  5. Кодировать в Base58

Да все это! До посещения семинара Джимми я знал, что Биткойн использует хэш-алгоритм SHA-256, но понятия не имел, что он также использует RIPEMD160, а затем ДВОЙНОЕ хэширование контрольной суммы и ЗАТЕМ кодирование в Base58. Напоминаем, что все это связано с проблемой дискретного журнала, упомянутой ранее. Благослови параноидальных криптолюдей. Уважать.

Но подождите, есть еще

У тебя еще не болит мозг? Я только что закончил подводить итоги сессий 1 и 2 из 8! Как вы можете себе представить, мы берем строительные блоки с нуля и продолжаем работать, пока у вас не будет всего протокола Биткойн. Для некоторого контекста мы рассмотрели Сессии 1 и 2 перед обедом в День 1. Для полного расширения кругозора подайте заявку на www.programmingblockchain.com.

Вы получаете скидки за раннюю регистрацию, и в настоящее время запланированы сеансы для NY Blockchain Week, Торонто, Денвера, Сан-Паулу и Афин. В децентрализованном мире будут рассмотрены другие местоположения, просто напишите! Доступны стипендии, и в настоящее время вы можете подать заявку на получение стипендии на предстоящей сессии в Нью-Йорке.

Говоря о стипендиях, я была одним из счастливчиков, получивших стипендию для женщин-разработчиков на этот семинар.

Я очень благодарен за предоставленную возможность и хотел поблагодарить спонсоров John Pfeffer и Chaincode Labs. Некоторым людям нравится *говорить* о поддержке женщин-разработчиков, и это действительно освежает, когда люди и компании действительно идут вперед и делают это с помощью ACTION. Спасибо!

Ваш щедрый вклад позволил 10 женщинам принять участие в этом потрясающем опыте: одна из них является новым стажером в Lightning Labs, а другой всего 19 лет! Что касается того, как они это сделали — каждый мог создать и транслировать биткойн-транзакцию в тестовой сети с нуля. Тот, кто говорит, что женщины и женщины-разработчики не заинтересованы в блокчейне и Биткойне, просто ошибается. Заявок на стипендии было намного больше, чем мест. За построение инклюзивного децентрализованного будущего.

Курс дает вам достаточно, чтобы быть опасным и начать создавать свои собственные кошельки и обозреватели блоков. Хотя вы можете не знать всех ответов — а технология развивается так быстро, что никто не знает всех ответов, — она дает знания и контекст, чтобы задавать правильные вопросы и копаться в них.

Мы как группа обсудили, что мы хотели бы сделать с нашими новыми знаниями. Несколько человек, включая меня, надеются внести свой вклад в открытый исходный код. Многие верят в принцип прозрачности, владения собственными данными и отказа от централизованных источников власти и контроля. Некоторые надеются использовать эту технологию для социального воздействия и интеграции. НА ЛУНУ!

Большое спасибо Джимми Сонгу за то, что он был нашим бесстрашным преподавателем лидеров и за то, что позволил мне поделиться с вами некоторыми его материалами.

Первоначально опубликовано на www.blockchaing.org.