🌐 Подготовка к релизу EOSIO – Dawn 4.0 (Daniel Larimer)
Прошло около месяца с тех пор, как block.one выпустил EOSIO Dawn 3.0. Весь прошлый месяц наша команда была сосредоточена на шлифовке и поддержании стабильности программного обеспечения EOSIO. Большая часть этой работы была нацелена на то, чтобы приблизить нас к доказательству концепции межчейновой коммуникации.
Не считая слияния, 43 автора сделали 818 коммитов на нашем github. Это вывело EOSIO в топ-8 самых активных c++ проектов на github за последний месяц. Как видите, у нас постоянно что-то происходит.
- Сейчас – это прямо сейчас
- Новая основанная на рынке модель распределения RAM
- Налаживание межчейновой коммуникации
- Обновление алгоритма последнего необратимого блока в DPOS
- Сквоттинг имен
- Проверка по заголовкам
- Легковесные доказательства изменения порядка производителей
- Усовершенствованная модель выплат производителям
- Ослабление голосов, отданных за производителей
- Поддержка интеграции с биржами
Сейчас – это прямо сейчас
Одним из самых больших изменений в EOSIO Dawn 4.0 является то, что мы изменили определение текущего времени с «времени головного блока» на «время текущего блока». Это изменение разрешает множество спорных случаев с базирующимися на времени операциями при наличии пропущенных блоков и позволяет гораздо более точно измерять прошедшее время в рамках смарт-контрактов.
Новая модель распределения RAM
В нашем тестировании мы определили что то, как системный контракт EOSIO распределяет RAM (пространство в базе данных) тем, кто держит токены, в будущем приведет к дефициту. Мы перешли на основанный на рынке подход к размещению с использованием алгоритма Bancor.
Наши расчеты показали, что если 1 ТБ RAM пропорционально распределяется между держателями токенов, тогда стоимость за байт составляет 0,018 долл. США (при стоимости токена 20 долл. США). Реальность же такова, что большинство держателей токенов не имеют особой необходимости использовать оперативную память, на которую они имеют право; поэтому мы первоначально выставим цену RAM на уровне $ 0,000018 за байт (предполагая цену в $ 20/токен). Каждый новый аккаунт требует около 4 КБ RAM, что означает, что он будет стоить около $ 0,10. Поскольку RAM зарезервирована, цена будет автоматически увеличиваться, и таким образом цена приблизится к бесконечности до того, как в системе закончится RAM.
В соответствии с системным контрактом Dawn 3.0 вы можете продать RAM только по той цене, которую вы заплатили. Цель состояла в том, чтобы препятствовать чрезмерному накоплению и спекуляции. Недостатком такого подхода является то, что те, кто купил RAM задешево, не имеют никакого финансового стимула для освобождения этой RAM для других пользователей после того, как сеть становится более нагруженной. В Dawn 4.0 системный контракт теперь покупает и продает RAM по преобладающим рыночным ценам. Это может привести к тому, что трейдеры будут скупать RAM в ожидании завтрашнего потенциального дефицита. В целом это приведет к тому, что рынок сбалансирует спрос и предложение на RAM с течением времени.
Со временем закон Мура позволит производителям блоков обновиться до 4 ТБ или даже 16 ТБ RAM, и это увеличение предложения будет влиять на рынок RAM EOSIO, снижая цены.
Последствия для разработчиков смарт-контрактов
С точки зрения разработчика смарт-контракта, оперативная память – это ценный ресурс, который потребляется записями базы данных, которые вы храните. Из-за стоимости RAM важно минимизировать объем данных, которые вы храните в базе данных в памяти, и разрабатывать приложения с возможностью освобождения RAM после того, как ваши пользователи закончили действие. Например, Steem сохраняет в RAM только контент за одну неделю, так чтобы общий объем не слишком увеличивался со временем.
Минимизация спекуляции
При наличии рынка RAM спекулянты могут захотеть торговать на волатильности цены RAM ради прибыли. Системный контракт EOSIO делает RAM непередаваемой и взимает комиссию в размере 1% на сделках. Смысл этой комиссии – компенсировать естественную инфляцию токенов, выводя их с рынка. Если годовой объем торговли RAM выравнивает стоимости токена, то 100% всех вознаграждений производителей блоков будут покрываться за счет комиссий рынка RAM.
Налаживание межчейновой коммуникации
Для работы высокопроизводительных блокчейнов нужно, чтобы все данные находились в RAM, потому как время на доступ к диску стремительно снизит транзакционную пропускную способность до всего лишь пары сотен транзакций в секунду. Чтобы масштабировать использование RAM, нам нужны несколько цепей с независимыми областями памяти, работающими на отдельном оборудовании.
Производители блоков EOSIO могут оперировать множеством разных чейнов, которые используют один и тот же токен для покупки RAM и распределения пропускной способности. Выбор производителей будет производиться в основном чейне, а все связанные с ним боковые чейны будут управляться одним и тем же набором производителей. Каждый чейн может иметь свой собственный 1 ТБ+ памяти, а децентрализованные приложения смогут отправлять сообщения между чейнами всего с парой секунд задержки.
Цена RAM будет отличаться на всех чейнах, что даст разработчикам DAPP информацию о том, где дешевле работать их приложению.
Дорожная карта внедрения параллелизма
Межчейновая коммуникация (Inter Blockchain Communication – IBC) требует, чтобы чейны проверяли доказательства Меркла размером 1 КБ и более, а также наличия множество десятков криптографических хеш-функций и/или 15 и более подписей. Другими словами, стоимость проверки сообщения из другого чейна примерно в 15 - 30 раз выше, чем стоимость проверки обычных транзакций.
К счастью, проверка этих доказательств легко поддается распараллеливанию, поскольку они не зависят от состояния чейна. Блокчейн, который обрабатывает только сообщения из других чейнов, может легко потреблять 30 ядер процессора, поддерживая всего лишь пару тысяч транзакций в секунду.
Мы считаем, что масштабирование через межчейновую связь обеспечит почти неограниченный потенциал для масштабирования. Этот подход одновременно масштабирует оперативную память, сеть и процессор. Учитывая, что проверка подписи, проверка неконтекстного действия и доказательства IBC и так насытят большинство процессоров с высокой однопоточной пропускной способностью, а оптимизация для многопоточного исполнения WASM, скорее всего, будет затруднена другими ограничениями ресурсов.
В EOSIO Dawn 3.0 мы внедрили множество проектных решений вокруг потенциала для многопоточного исполнения WASM. К сожалению, пока не реализована полная многопоточная имплементация, невозможно узнать, охвачены ли все крайние случаи. Это означает, что архитектура EOSIO Dawn 3.0 обладала излишней сложностью, которая не давала никакой прямой выгоды.
В данный момент мы считаем, что путь перехода от однопоточного к многопоточному исполнению – это запуск нового чейна с поддержкой многопоточности, управляемого теми же производителями блоков и поддерживающего те же нативные токены. Это дает новому чейну полную свободу, позволяющую при необходимости корректировать его структуру в целях поддержки многопоточности, при этом не проводя рискованное обновление работающего чейна.
Благодаря этой дорожной карте по внедрению параллелизма мы можем упростить EOSIO 1.0 и оптимизировать его для максимизации однопоточной производительности и простоты разработки. Мы ожидаем, что однопоточная версия EOSIO может в один прекрасный день достичь 5000 - 10 000 TPS. Мы также предполагаем, что многие приложения предпочтут мультичейновый подход к масштабированию, поскольку это снижает общие затраты и ускоряет масштабирование.
Обновление алгоритма последнего необратимого блока в DPOS
Те из вас, кто следил за дискуссией об алгоритме консенсуса, возможно, слышали, что DPOS с алгоритмом последнего необратимого блока (last irreversible block – LIB) (как он существует в Steem и BitShares) может выйти из состояния консенсуса в случае некоторых экстремальных сбоев подключения к сети. В прошлом я не обращал внимания на этот потенциальный режим отказа из-за его чисто теоретического характера и относительно минимальных сопутствующих затрат и простоя.
Алгоритм LIB был всего лишь метрикой, такой же, как правило 6 блоков для Биткоина. Чистый DPOS изначально полагался на правило самой длинной цепи, позволяющее всегда достигать консенсуса. Алгоритм LIB был сокращен, дабы оптимизировать отмену истории и дать биржам определенную степень уверенности.
Алгоритм IBC EOSIO зависит от DPOS LIB в плане достижения окончательности. Затраты, связанные со сбоем в LIB, и сложность его исправления становятся намного выше, если вы вводите IBC. Наша команда, в частности Bart и Arhag, придумали элегантное усовершенствование алгоритма LIB, которое гарантирует, что две ноды не могут достичь другого LIB, если по крайней мере ⅓ не вступит в сговор. Кроме того, можно даже обнаружить византийское поведение одного участника. Подробнее об этом здесь.
Отсутствие окончательности блоков в сетях Биткоин и Эфириум затрудняет и/или создает очень высокую задержку при межчейновой коммуникации в чейнах старого образца. Эта новая версия DPOS выводит ее на новый уровень византийской отказоустойчивости и делает ее стабильной во всех сетевых средах.
Сквоттинг имен
Некоторые пользователи выразили озабоченность по поводу ограничения в 12 символов для аккаунтов EOSIO. Эти 12-символьные имена получены из 64-битного целого числа. 64-битное целое число – это нативный размер машинного слова и, следовательно, он очень практичен. В транзакции мы неоднократно ссылаемся на имена аккаунтов (код, область действия, разрешения и т.п.), а наши индексы базы данных также основаны на этих 64-битных целых числах. Увеличение длины имен аккаунтов имело бы далеко идущие последствия для производительности и архитектуры.
Тем не менее, наше видение блокчейна предполагает отделение концепции аккаунта от идентичности и установку в рамках чейна динамического сопоставления между именами аккаунтов и более читаемыми отображаемыми именами.
Лучше всего представить имена аккаунтов в качестве номерных знаков автомобиля, чтобы при этом пользователи могли выбирать те, которые легче запомнить. Тем не менее, подавляющее большинство людей должно иметь возможность найти привлекательное имя длиной в 12 символов (или менее).
Из-за потенциальной ценности некоторых имен мы считаем, что система EOSIO должна предлагать динамическую модель ценообразования для имен аккаунтов. Кроме того, возможность давать аккаунтам такие имена, как *.com, может обеспечить дополнительный уровень безопасности для пользователей и/или групп.
Из-за ограниченного времени разработки до момента выпуска версии 1.0 ПО EOSIO мы ограничим длину всех имен аккаунтов максимумом в 12 символов и также запретим использование в имени символа «.». Сообщество сможет обновить системный контракт позже (без хардфорка), как только будет определена адекватная политика ценообразования и противодействия сквоттингу имен. Скорее всего, мы представим модель, похожую на BitShares, где имена аккаунтов оцениваются по длине и типу символов.
Проверка по заголовкам
В Steem, BitShares и EOS Dawn 3.0 и ранее было невозможно проверить заголовок блока без использования полного блока. В EOS Dawn 4.0 теперь поддерживается проверка по одним только заголовкам. Эта функция является основой для легких клиентов и IBC, а также предотвращает ряд векторов атак, позволяя блокам распространяться по сети, не дожидаясь, пока каждый узел выполнит полную проверку.
Простейшая форма IBC для высокочастотной коммуникации включает в себя легких клиентов, обрабатывающих все заголовки, плюс пользователей, обеспечивающих простые доказательства действий Меркла относительно известного блока.
Преобразованное построения блоков и применение архитектуры
Мы потратили значительное время на доводку процесса, с помощью которого строились и внедрялись блоки. В новой модели блок создается с той же последовательностью вызовов API, которая используется для применения блока. Это гарантирует следование одним и тем же кодовым путям и минимизирует вероятность несогласованности между тем, что считает действительным производитель, а что – валидатор. Это преобразование делает процесс применения блока чем-то большим, нежели просто скрипт, который воспроизводит то, что сделал производитель.
Легковесные доказательства изменения порядка производителей
В процессе внедрения доказательства концепции IBC мы поняли, что в Dawn 3.0 есть несколько крайних случаев, когда простые доказательства на базе подписи невозможны. Мы хотели как можно более упростить легковесную проверку разреженного заголовка, что потребовало рефакторинга того, как подписываются блоки.
В EOSIO Dawn 4.0 теперь можно проверить изменения в порядке производителей без всякой проверки заголовков блоков. Когда производитель подписывает блок, он также подписывает новое расписание, так что невозможно, чтобы одновременно было два конкурирующих и достоверно подписанных расписания производителей, если только ⅔+ производителей не находятся в сговоре, или даже ⅓+ в случае серьезного разделения сети.
Усовершенствованная модель выплат производителям
Сообщество активно обсуждало выплаты производителям и то, как распределить максимум 5% инфляции. Пример системного контракта, который block.one предоставит в релизе EOSIO 1.0, будет распределять инфляцию следующим образом:
В системе должен быть 21 активный производитель блоков и любое количество резервных производителей-кандидатов. Топ-21 разделяет на вознаграждения 0,25% с каждого блока пропорционально количеству блоков, которое произвел каждый из них. Все кандидаты в производители блоков (включая топ-21) также делят между собой бюджет вознаграждений в размере 0,75% за каждый голос, пропорционально общему количеству голосов, которое они получили. Они могут запрашивать свою долю вознаграждений за голоса не чаще одного раза в день. Чтобы претендовать на свою долю, они должны оцениваться на не менее 100 токенов в день. Производители-кандидаты, которые не могут претендовать на по меньшей мере 100 токенов в день на основе полученных голосов, не получат ничего.
Идея такого алгоритма сводится к тому, чтобы обеспечить всем производителям-кандидатам достаточную плату для предоставления сообществу услуг фулл-ноды и проследить, чтобы никто не оказался в ситуации, когда получаемых денег недостаточно для покрытия их расходов. Если предположить, что топ-200 производителей-кандидатов получили одинаковое количество голосов, эта схема будет поддерживать 21 активного производителя и 179 резервных производителей. В действительности же некоторые производители получат значительно больше голосов, чем другие, что может уменьшить количество оплачиваемых резервных производителей.
Крайне важно установить минимальную ежедневную выплату, чтобы состоятельные персонажи, которые не собираются создавать блоки, не пытались зарабатывать на своем кандидате в производители, голосуя за самих себя.
Ослабление голосов, отданных за производителей
Большая часть работы, которую мы делаем с момента выхода Dawn 3.0, заключается в отладке системного контракта. Например, реализация ослабления, или снижения силы голосов. Чтобы поддерживать максимальный уровень влияния на голосование, каждый избиратель должен будет повторно утверждать свой голос каждую неделю. У тех, кто не обновляет свои голоса, влияние на голосование ослабевает с периодом распада длиной в 1 год.
Мы рекомендуем, чтобы в конституции содержался запрет на использование ботов для автоматического голосования, поскольку цель ослабления голосов – мотивировать избирателей переоценивать свои решения, а не “проголосовать и забыть”. И хотя доказать использование ботов невозможно, можно будет доказать, что люди не используют смарт-контракты для автоматического голосования.
Поддержка интеграции бирж
По мере приближения к релизу EOSIO 1.0 многие люди спрашивают нас, как именно биржи будут мониторить блокчейн EOSIO на предмет входящих депозитов и/или подтверждать, что их заявки на вывод приняты и необратимо подтверждены. Мы создали туториал по использованию cleos (наш интерфейс командной строки eosio) для мониторинга чейна на предмет входящих депозитов. Мы также создали демонстрационный скрипт на python, который мониторит депозиты и выводы. Данного туториала и скрипта должно быть достаточно для начала интеграции бирж с блокчейнами на основе EOSIO.
Заключение
Программное обеспечение EOSIO делает большие шаги в направлении полноценного релиза версии 1.0 в июне этого года. Код в Dawn 4.0 был серьезно улучшен, и мы уверены в успехе больше, чем когда-либо.
Дисклеймер
block.one является компанией-разработчиком ПО и выпускает программное обеспечение EOS.IO в качестве бесплатного программного обеспечения с открытым исходным кодом. Это программное обеспечение может позволить тем, кто его устанавливает, запустить блокчейн или децентрализованное приложение с функциями, описанными выше. block.one не будет запускать публичный блокчейн на основе программного обеспечения EOS.IO. За реализацию функций и/или предоставление услуг, описанных выше, по своему усмотрению, будут нести ответственность исключительно третьи стороны и сообщество, а также те, кто захочет стать производителями блоков. block.one не гарантирует, что кто-либо будет реализовывать эти функции или предоставлять такие услуги, или что программное обеспечение EOS.IO будет принято и применено каким-либо определенным образом.
Все заявления в этом документе, за исключением заявлений об исторических фактах, включая любые заявления о бизнес-стратегии block.one, ее планах, перспективах, разработках и целях, являются лишь прогнозными заявлениями. Эти утверждения носят сугубо предсказательный характер и отражают текущие убеждения и ожидания block.one относительно будущих событий, которые основаны на предположениях и подвержены рискам, неопределенностям и изменениям в любое время. Мы работаем в быстро меняющейся среде. Время от времени появляются новые риски. Учитывая эти риски и неопределенности, мы предостерегаем вас от всецелого полагания на эти прогнозные заявления. Фактические результаты, производительность или события могут существенно отличаться от тех, которые содержатся в прогнозных заявлениях.
Некоторые из факторов, которые могут привести к существенным отличиям фактических результатов, производительности или событий от прогнозных заявлений, содержащихся в настоящем документе, включают в себя, без ограничений: волатильность рынка; постоянную доступность капитала, финансирования и персонала; принятие продукта; коммерческий успех любых новых продуктов или технологий; конкуренцию; государственное регулирование и законы; а также общие экономические, рыночные или деловые условия. Любое прогнозное заявление, сделанное block.one, актуально только в дату его публикации, и block.one не несет никакой ответственности и прямо отказывается от каких-либо обязательств по обновлению или изменению своих прогнозных заявлений, будь то в результате появления новой информации, последующих событий или иных факторов.
Изложенные здесь идеи отражают только мнение автора и не обязательно совпадают с позицией и взглядами block.one и ее сотрудников.
Оригинал поста: ЗДЕСЬ