ZYCORD docs
Русский
ZycordДокументацияКак работает сеть
Zycord (ZCD) — как работает сеть

Собрано вне цепочки.
Проверено параллельно.
Зафиксировано по порядку.

Каждый крупный блокчейн заставляет каждый узел заново исполнять каждую транзакцию против глобального состояния. Zycord выносит исполнение за пределы цепочки: платёж собирает кошелёк, вызов контракта исполняет секвенсор контракта по подписанному интенту пользователя, и в обоих случаях результат приходит целиком, со всем, что он прочитал и записал. Любая машина проверяет его по одним лишь байтам, а единственный цикл его фиксирует — или пропускает и выставляет счёт тому, кто внёс за него депозит.

Three phases: construction by sequencers, parallel verification, sequential fold Сборка — вне цепочки Секвенсоры исполняют интент и совместно подписывают один fill Кошелёк Секвенсор контракт A Секвенсор контракт B Секвенсор контракт C Проверка — параллельно, без состояния Каждый узел проверяет каждый сертификат, на каждом ядре Свёртка — последовательно Один цикл, сравнивает и прибавляет применить или пропустить, никогда не исполнять
Обычные серверы, web2, без консенсуса Растёт с каждым ядром, входящим в сеть Единственный дефицитный ресурс

Транзакция — это сертификат

Он не просит “исполни это”. Он заявляет: “я прочёл вот это, я записал вот то, и вот доказательство”. Любой пересчитывает и сравнивает.

Certificate { chain_id: u64 // сеть, для которой он предназначен seq: u64 // собственный счётчик вносящего депозит program: (type, body) // нативная операция, вызов машины, fill, принудительный reads: [(slot, access, operand)] // что я читаю и как writes: [(slot, op, value)] // что я записываю sigs: [(key, signature)] // право расходования deposit: (cell, amount, change) // кто за него отвечает ttl: height // истекает, если не включён до этой высоты fee_bid: (seq_gas, par_gas) // два рынка }
Действительный = чистая функция от байтовПодписи сходятся, повторное исполнение program над reads даёт ровно writes, а deposit покрывает наихудший случай. Ни диска, ни истории.
Применимый = определяется позициейВыполняются ли заявленные reads ещё и тогда, когда сертификат доходит до своей очереди в блоке?
Идентификатор не включает подписиПовторная подпись с другим одноразовым числом даёт тот же идентификатор. Множество виденных ловит копию. Никто не платит дважды.
Типы доступа к слотуEXACT фиксирует значение. GUARD лишь заявляет “баланс ≥ x”. DELTA прибавляет, не читая. Платежи и чаевые коммутируют и никогда не конфликтуют.

Два глагола, две стадии

Весь замысел состоит в разделении этих двух вопросов — и в ответе на каждый там, где это дешевле всего.

параллельно

Действительный ли он?

Ответ даётся по одному лишь сертификату. Тысячи разом, на любой машине.

  • Строгие подписи Ed25519 сходятся
  • Повторное исполнение совпадает с записями
  • Депозит покрывает наихудший случай
  • Недействительный: никогда не попадает в честный блок
последовательно

Применимый ли он?

Ответ даётся на позиции сертификата в блоке, сравнением байтов с таблицей состояния.

  • Чтения по-прежнему выполняются → записи фиксируются
  • Устаревшее чтение или переполнение → пропуск, вносящий депозит платит фиксированную плату
  • Депозит не пополнен или израсходован → отбрасывание, ничего не взимается
  • Блок остаётся действительным в любом случае

Четыре исхода и кто платит

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

Применён

Каждое заявленное чтение выполняется, поэтому записи применяются, а комиссия взимается по фактической стоимости: базовая комиссия сжигается, а приоритетная выплачивается производителю блока.

Принудительно неудавшийся

Принудительный сертификат, вызов которого откатился или нарушил свои границы. С его плательщиков списываются средства, его сдача возвращается пользователю, больше ничего не записывается, а идентификатор помечается как виденный.

Отброшен

Ячейка депозита не пополнена или уже израсходована, поэтому взимать нечего. Сертификат переносится в блоке, но ничего не оплачивает и не помечается как виденный.

Путь от рождения до реестра

1

Кошелёк собирает платёж или подписывает интент

Платежу сервер не нужен: кошелёк ставит охранное условие на принадлежащую ему одноразовую ячейку, списывает с неё, помечает её израсходованной, зачисляет на свежий адрес получателя и отправляет сдачу на собственный свежий адрес. Вызов секвенируемого контракта — это вместо этого подписанный интент: что вызвать, границы результата, сколько платится секвенсору и одноразовые плательщики, которые его финансируют.

2

Секвенсор исполняет и подтверждает

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

3

Каждый узел проверяет параллельно

Каждый сертификат проверяется по своим байтам при поступлении, до ретрансляции: подписи, повторное исполнение против заявленных чтений, депозит. Ни состояния, ни истории, любое ядро, любая машина.

Недействительный → отбрасывается; внутри блока он делает блок недействительным
4

Производитель упорядочивает

Майнер доказательства работы выбирает действительные сертификаты и решает блок; после перехода на доказательство стейка его вместо этого подписывает стейкер, выбранный жребием для слота. Он не исполняет ничего из того, что ему дают, и помнит идентификаторы, увиденные в пределах окна TTL, потому что двойное включение одного из них делает блок недействительным. В конце своего блока он может исполнить открытые интенты через принудительный путь.

5

Последовательная свёртка (fold)

Сначала fill, в порядке конвейера; затем все остальные сертификаты по (deposit address, seq, id); затем принудительные сертификаты по идентификатору. Производитель не выбирает ничего из этого. Для каждого сертификата: выполняются ли ещё заявленные чтения?

Применён — записи применяются, базовая комиссия сжигается, приоритетная достаётся производителю
Пропущен — ничего не записано, плата за пропуск сожжена с депозита, блок остаётся действительным

Состояние: ячейки, адреса, типизированный доступ

Ячейка — это 256-битное целое число в слоте. Отсутствующие ячейки читаются как ноль. Параллелизм не обнаруживается во время исполнения: он объявляется, слот за слотом.

Типизированный доступ

Чтение бывает EXACT, которое питает вычисление и устаревает, когда ячейка меняется, или охранным условием — GUARD_GE, GUARD_LE, GUARD_EQ — которое ничего не возвращает. Запись — это SET, DELTA_ADD, DELTA_SUB или MARK_SPENT. Устаревает только EXACT, поэтому охраняемые списания и зачисления в один слот коммутируют и пропускаются только при настоящем перерасходе.

Одноразовые и постоянные адреса

Одноразовый адрес расходуется один раз: сертификат, который с него списывает, помечает его израсходованным, навсегда. Кошельки дают каждому входящему платежу свежий адрес — это путь без конкуренции. Постоянный адрес многоразовый — это счёт — и именно на него должны поступать вознаграждения за майнинг: одноразовый адрес сжигает все удерживаемые им вознаграждения, как только с него расходуют, поэтому узел отвергает такой адрес как адрес выплаты. У контрактов есть собственный вид адреса, за который не может подписать ни один ключ.

Нативные активы, без машины

С блока 0: TRANSFER до 32 переводов, ISSUE с ограничением предложения, MINT под охраной этого ограничения, RETIRE до 64 одноразовых адресов. Зачисление на свежую ячейку — это чаевые. Десять тысяч чаевых в одном блоке — это десять тысяч сложений: ноль конфликтов, ни секвенсора, ни машины.

Машина и её секвенсоры

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

cEVM

Диалект виртуальной машины Ethereum, так что Solidity, его компиляторы и аудиторы переносятся. Хранилище объявляется: SLOAD и SSTORE точные, а шесть новых опкодов дают охраняемую, коммутативную дисциплину. NUMBER и TIMESTAMP читают маяк эпохи, постоянный в течение суток; опкоды, которым не на что ссылаться, удалены. Код передаётся в сертификате. Токен, копилка для чаевых и эскроу, написанные в первую очередь на дельтах, предварительно развёртываются, когда машина открывается.

Секвенируемый или открытый

Запись каждого контракта называет ключ секвенсора. Если он ненулевой, точный путь контракта требует подписи этого ключа; если он равен нулю, этим путём может пройти любой, и контракт защищён только своим кодом. Охраняемые дельты никогда не контролируются: секвенируемый токен по-прежнему принимает любой перевод от кого угодно. Каталог сообщает, где отвечает каждый секвенсор, — это обнаружение, а не авторизация.

Интенты, fill, квитанции

Интент — это всё разрешение пользователя, действительное в течение окна не более 8 блоков: секвенсор может изменить то, когда он выполняется, но никогда — что он делает. Идентификатор fill — это хеш интента, так что два fill одного интента имеют общий идентификатор и оплачен может быть только один. Квитанция — это предварительное подтверждение, обещание секвенсора до тех пор, пока fill не применится; две противоречащие друг другу квитанции — это доказательство, которое любой может проверить по байтам, и пользователи уходят.

Конвейеры, fence, совместное секвенирование

Цепочка хранит последний применённый seq для каждого секвенсора и контракта, и fill входит только на следующем, так что конвейер фиксируется в том порядке, в котором подписал его секвенсор. Каждый контракт также хранит счётчик fence: принудительный сертификат, устанавливающий его состояние, или смена секвенсора сдвигают его, и ни один fill, построенный поверх обойдённого состояния, не может войти — ни с кого ничего не взимается, а секвенсор пересобирает. Вызов через несколько секвенсоров — это один fill с подписью каждого секвенсора, атомарный по построению.

Принудительный путь: включение означает применение

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

Каждый блок сворачивается в три класса, в порядке, который производитель не выбирает

Fold order within a block: fills, then every other certificate, then forced certificates порядок свёртки Fill в порядке конвейера любой пропуск оплачивает секвенсор Все остальные сертификаты по адресу депозита, seq, id любой пропуск оплачивает вносящий депозит Принудительные сертификаты исполняются производителем, по id не более 16; неудача всё равно попадает в блок

Пользователь подписывает открытый интент — интент без указанного секвенсора, оплачиваемый собственными одноразовыми плательщиками пользователя, — и передаёт его в сеть. Производитель блока, который располагает состоянием на конец своего блока, исполняет выбранные им открытые интенты против этого состояния и добавляет результаты как последние сертификаты блока. Нет ни очереди, ни аренды, ни квоты, ни крайнего срока. Платёж интента покрывает комиссии, так что производитель зарабатывает столько же, сколько заработал бы секвенсор.

Он сдвигает fence

Принудительный сертификат, устанавливающий ячейку состояния контракта, продвигает счётчик fence этого контракта, так что каждый fill, построенный поверх обойдённого им состояния, пересобирается. Сертификат, который только читает, ставит охранные условия или прибавляет дельты, fence не трогает, как и сертификат, завершившийся неудачей. Секвенсор теряет задержку, и не более того.

Ограничен по построению

Не более 16 принудительных сертификатов на блок, каждый с параллельным бюджетом не более 4 000 единиц деривации (200 000 машинного gas): не более трети параллельного потолка генезиса. Правило для авторов контрактов: вывод средств должен укладываться в этот бюджет.

Кто чем занимается

Ни одна роль не требуется для безопасности. Если исчезнут все секвенсоры, контракты останутся живыми благодаря своим дельта-методам и принудительному пути, по которому пользователи выводят средства, а контракт можно привязать к новому секвенсору.

Кошелёк

Делает
Собирает платежи как сертификаты; подписывает интенты для контрактов
Видит
Публичное состояние, которое ему нужно прочесть
Доверяет
Никому

Секвенсор

Делает
Исполняет интенты для своих контрактов, подписывает квитанции, публикует fill
Ему доверяют
Только живучесть. Если он лжёт, его fill пропускается и платит его собственный депозит
Забирает
Поток заявок собственного приложения, явным образом

Проверяющий узел

Делает
Проверяет каждый сертификат по его байтам, ретранслирует, синхронизируется
Нужны
Ядра. Состояние — только для выполнения свёртки
Цена
Проверка распределяется по всем его ядрам; свёртка — это один цикл по памяти

Производитель блоков

Делает
Майнит на RandomX, упорядочивает действительные сертификаты, исполняет открытые интенты в конце своего блока
Видит
Байты и состояние, а не смысл
Зарабатывает
94% субсидии плюс приоритетные комиссии того, что применяется

Автор контракта

Делает
Объявляет каждый слот точным или охраняемым; выбирает секвенсор или обходится без него
Получает
Параллелизм, включаемый по желанию для каждого слота
Обязан пользователям
Вывод средств, укладывающийся в принудительный бюджет

Сеть: два рынка gas

Цепочка, которая берёт плату за всё на одном аукционе, заставляет проверку доказательства конкурировать с записью состояния. Здесь у каждого ресурса своя цена.

Параллельный gas

Оплачивает проверку: подписи, байты, единицы деривации — тяжёлые доказательства, постквантовые схемы.

Предложение растёт с каждым ядром и GPU, входящим в сеть. Цель и потолок закреплены на уровне 3× от их последовательных аналогов. Высокий потолок, низкая цена.

Последовательный gas

Оплачивает свёртку (fold): чтения, записи, вставки в реестр израсходованных, вставки в множество виденных. Тот единственный цикл, который каждый узел проходит по порядку.

Дефицитен. Эластичен: цель сдвигается раз в сутки вместе с применённым gas, в пределах от 1,6M до 5,12M; мягкий потолок 2× от цели, жёсткий предел 4×. Никто не голосует.

Эры: что работает сегодня и что появится позже

Эра — это высота, скомпилированная в релиз, или условие, измеряемое в цепочке. Блок ниже рубежа, несущий то, что рубеж открывает, недействителен; новая эра никогда не меняет смысла более раннего блока.

Era 0 — майнинг и платежи

Работает с блока 0, 7 октября 2026 года. Доказательство работы по правилам Накамото, нативные активы, одноразовые и постоянные адреса, два рынка комиссий, распределение субсидии 94/3/3 и казна, которая накапливается и с которой не может списать ни один сертификат; путь расходования, если он вообще появится, придёт с более поздним обновлением, не раньше высоты 259 200.

Era 1 — машина

Высота 80 640, около 4 ноября 2026 года, в бинарнике запуска. cEVM и её стандартная библиотека, записи контрактов с секвенсором и администратором, интенты, fill и совместное секвенирование, каталог и принудительный путь.

Era 2 — доказательство стейка

Внесение залога открывается на эпохе 182, около 7 апреля 2027 года: стейк вносится в залог, выводится из залога или делегируется пулу, при минимальном залоге 1 000 ZCD. Как только активный стейк удерживает 10% предложения в течение 30 эпох, и не позднее чем с эпохи 273, начинается разгон длиной 90 эпох: блоки по-прежнему добываются майнингом, и каждый также подписывается стейкером, выбранным жребием пропорционально стейку, который получает k/180 доли производителя. Выходит отдельным релизом, через хардфорк.

Переход

Первый блок эпохи, следующей за 90-й эпохой, прошедшей порог, — 90% её блоков подписаны, активный стейк не менее 10% предложения. Майнинг заканчивается; выбранный жребием стейкер подписывает каждый 5-секундный слот, и эпоха из 17 280 слотов выплачивает столько же, сколько раньше выплачивал день. Блок становится окончательным по глубине: 120 блоков, или 10 минут. Наказывается только двойное подписание, и никогда — делегатор.

За пределами полной проверки

Направление, а не спецификация. Когда дневной объём приблизится к тому, что проверяет обычный узел, более поздняя эра может выбирать жребием подмножество стейков для проверки каждого сертификата вместо всех узлов, тогда как состояние и свёртка остаются едиными, а каждый сертификат — атомарным. До тех пор каждый узел проверяет всё.

Era S — конфиденциальные платежи

Скрытые суммы и одноразовые адреса, только после независимых аудитов и враждебного публичного testnet. Не входит в протокол v2: появится по собственной спецификации.

Сеть сверху

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

вне цепочки

Кошельки и секвенсоры

Обычный web2: websockets, очереди, автомасштабирование. Кошельки сами собирают платежи; секвенсоры исполняют интенты и отвечают за миллисекунды. Им доверяют живучесть, но никогда — безопасность, и они никогда не хранят данные — состояние всегда можно восстановить по одной лишь цепочке.

параллельно

Ретрансляция и проверка

Каждый узел проверяет каждый сертификат по его байтам, прежде чем ретранслировать. Блоки передаются как заголовок плюс список хешей, большую часть которых получатель уже имеет; тела — это данные цепочки. Узел синхронизируется в сторону наибольшей проверенной работы, а не наибольшей заявленной высоты.

последовательно

Производитель и свёртка

Майнер доказательства работы упорядочивает сертификаты и решает блок, или, после перехода на доказательство стейка, блок подписывает стейкер, выбранный жребием для слота; каждый узел выполняет свёртку, которая сравнивает, складывает и записывает. Порядок свёртки зафиксирован правилами, поэтому единственный выбор производителя — что включить.

последовательно

Принудительный путь

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