Сайт в разработке

Сайт в разработке: мы создаём его к запуску MainNet. Детали будут меняться.

Этот сайт ещё строится

ZooBC развивается открыто. Всё, что вы здесь видите, актуально и честно, но ещё не завершено: воспринимайте это как картину того, где мы находимся сегодня, а не как окончательное заявление.

До запуска MainNet многое изменится: формулировки, структура, изображения и цифры. Некоторые страницы пока содержат только заглушки.

Экосистема ZooBC появляется поэтапно. Кошелёк, обозреватель и каналы сообщества запускаются по мере приближения MainNet, и этот сайт растёт вместе с ними.

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

ZOOBC / РУКОВОДСТВО

Руководство по транзакциям ZooBC

Все способы перемещать ценности и данные в блокчейне: структуры, монеты и модификаторы

Перемещайте ценности. Перемещайте данные. На ваших условиях.

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

01Анатомия транзакции

Всё сериализуется в порядке little-endian в единый байтовый буфер, который затем подписывается. Синие поля образуют конверт (одинаковый для всех типов); фиолетовое тело меняется от типа к типу.

тип 4 version 1 timestamp 8 sender 4+key recipient 4+ключ / пусто fee 8 bodyLen 4 body bodyLen escrow пусто / секция msgLen 4 message msgLen подпись при отправке

Адрес аккаунта состоит из 4-байтового типа (LE) и открытого ключа: 00000000+32 Б ed25519 для ZBC, 04000000+ETH, 05000000+BTC и так далее. Отсутствующий получатель записывается как пустой тип 02000000. В хвостовом поле сообщения обычная отправка передаёт свою заметку, а тело SendZBC содержит только сумму; получатель и заметка находятся в конверте.

02Подписание

Тип аккаунта определяет и префикс адреса, и схему подписи. Подписывается весь конверт (без поля подписи) с префиксом из тега подписания и хеша генезиса. Все три схемы детерминированы, поэтому браузерный кошелёк и узел совпадают байт в байт.

ZooBC (ed25519) · тип 00000000

// digest, then sign
digest = SHA3_256("ZBC-TX" ‖ genesis_hash ‖ txBytes)
sig    = ed25519(digest, privkey)   // 64 bytes

Эта же схема используется для Solana, Cardano, Tezos, Polkadot: тот же ключ ed25519, но другие префикс адреса и кодировка отображения.

Ethereum (secp256k1) · тип 04000000

// recoverable ECDSA, low-s
digest = keccak256(SHA3_256("ZBC-TX" ‖ genesis_hash ‖ txBytes))
r,s,v  = secp256k1.sign(digest)
sig    = r ‖ s ‖ (v+27)          // 65 bytes

MetaMask может также отправить собственную подписанную RLP-транзакцию; узел восстанавливает отправителя и преобразует её в перевод ZBC.

Bitcoin (secp256k1) · тип 05000000

// double-sha over the SHA3 payload
digest = SHA256d(SHA3_256("ZBC-TX" ‖ genesis_hash ‖ txBytes))
sig    = secp256k1.sign(digest)
field  = [len(2)] ‖ compressedPub(33) ‖ sig

Коротко о комиссии

Минимальная комиссия зависит от размера: базовая ставка × коэффициент комиссий сети плюс побайтовая составляющая за хранение и срок. Получайте её в реальном времени из https://zoobc.network/api/v1/blockchain/fee-params или рассчитывайте точную стоимость транзакции через /estimate-fee, чтобы кошелёк никогда не расходился с узлом даже на одну атомарную единицу. Переплата при отправке с точной комиссией возвращается.

Дайджест, привязанный к блокчейну (версия подписания 2)

Начиная с узла v0.4.0 самый внутренний член одинаков во всех трёх схемах, потому что узел вычисляет этот дайджест один раз и передаёт его той схеме подписи, которую выбирает тип аккаунта.

  • "ZBC-TX" состоит из шести байтов ASCII без завершающего символа: 5a 42 43 2d 54 58.
  • genesis_hash представляет собой 32 необработанных байта блока 0 того блокчейна, для которого делается подпись.

Считывайте genesis_hash из GET /api/v1/node/info; тот же ответ содержит signing_version: 2 и signing_tag: "ZBC-TX". Никогда не прописывайте его жёстко в коде: он меняется при каждом перезапуске тестовой сети.

Именно включение хеша генезиса в дайджест делает подпись действительной ровно в одной сети, поэтому транзакцию, подписанную для тестового блокчейна, нельзя повторно воспроизвести в другом. Подписание голого SHA3_256(txBytes) соответствует версии подписания 1, и узел отклоняет его с ошибкой:

Invalid transaction signature: legacy unbound digest (signing v1); this chain requires signing v2

03Три вида монет

Суммы всегда указываются в атомарных единицах (1 ZBC = 100 000 000). Между монетами меняется только поле token_id, механика перемещения одинакова.

① Нативный ZBC

token_id = 0 везде. Монета для газа и комиссий, наград за блоки и стейкинга. SendZBC (тип 1) является простым путём.

② Токены генезиса / моста

Обёрнутые внешние активы, выпущенные при генезисе (ZBTC, ZETH, ZSOL…). Это обычные цветные токены с фиксированным token_id, назначенным в конфигурации генезиса; на уровне протокола в них нет ничего особенного.

③ Токены, выпущенные пользователями

Любой может выпустить токен с помощью IssueToken (тип 10): символ, предложение, число знаков после запятой, необязательное обеспечение в ZBC. Его token_id выводится из транзакции выпуска. Применяются те же TransferToken / MintToken / BurnToken.

Везде, где в теле есть token_id (перевод, обмен, ставка в приложении, ликвидный платёж, вестинг…), передавайте 0 для ZBC или идентификатор токена для цветной монеты. Обеспеченные токены могут даже сами оплачивать свою комиссию (флаг fee_in_token) по цене относительно их обеспечения в ZBC.

04Модификаторы: один платёж, много форм

Помимо базовых типов, четыре обёртки времени и доверия меняют то, когда средства поступят и поступят ли вообще. Именно благодаря им возможности кажутся такими обширными.

Эскроу

Добавьте секцию эскроу в конверт любой транзакции с ценностью (утверждающий · комиссия · тайм-аут · инструкция). Средства удерживаются, пока назначенный утверждающий не подпишет ApprovalEscrow (тип 4), чтобы выплатить или отклонить, либо пока не истечёт тайм-аут. Условная сделка поверх любого перевода.

Ликвидный

LiquidPayment (тип 6): один отложенный платёж на протяжении окна. Получатель получает всю сумму по завершении окна или пропорциональную долю, если отправитель досрочно вызовет LiquidPaymentStop (тип 262). Краткосрочный (часы), в ZBC или токене.

Запланированный / с вестингом

ScheduledTransfer (тип 29): выплата траншами по таймеру в виде вестинга (средства блокируются заранее) или регулярной зарплаты (списывается каждый период). Клифф, отзыв, отказ получателя, переназначение. Долгосрочный (от недель до лет). Выплаты отображаются как движения в реестре, а не как новые транзакции.

Триггер / остановка

Облегчённый таймер: CreateTrigger (15) блокирует сумму для срабатывания на будущей высоте; CancelTrigger (16) возвращает её. Чтобы остановить долгосрочные: CancelSchedule (30) для отзыва или отказа, LiquidPaymentStop (262).

Их можно комбинировать. Ежемесячная зарплата, которая к тому же проходит через эскроу, грант с вестингом в цветном токене: примитивы сочетаются друг с другом. (Полное сочетание регулярных платежей с эскроу есть в дорожной карте; все строительные блоки доступны уже сегодня.)

05Поддержание жизни объектов данных

Объекты в блокчейне, которые хранят данные, а именно наборы данных (профили «ключ/значение», чат, бизнес-формы) и токены, платят аренду, чтобы продолжать существовать. «Пополнить объект» означает пополнить финансирование его существования.

Наборы данных и файлы → предоплаченное хранилище

Данные записываются через SetupAccountDataset (тип 3, пара свойство → значение), а файл сохраняется через DFSCreateFile (8). Каждый блок списывает арендную плату за хранение с предоплаченного хранилища вашего аккаунта; когда средства заканчиваются, объект удаляется. Пополняйте его через AddPrepaidStorage (тип 9): тело содержит только сумму, которая зачисляется прямо на ваш баланс предоплаченного хранилища. Больше предоплаты = дольше жизнь.

Токены → финансирование существования

Цветной токен тоже платит за своё существование. FinanceToken (тип 14) продлевает горизонт существования токена за счёт комиссии, увеличивая срок, в течение которого он остаётся активным, прежде чем неиспользованное обеспечение вернётся создателю. Та же идея, но для каждого токена отдельно.

06Полный каталог транзакций

Все 50 типов транзакций с точной структурой тела в порядке little-endian. монета = поддерживает token_id · модифицируемый = принимает секцию эскроу · новый блокчейн = уровень консенсуса (появляется с запуском блокчейна).

Байтовые структуры перенесены из сериализаторов узла ZooBC (transaction_util.cpp, исполнители отдельных типов и архивный декодер). lp4 = 4-байтовый префикс длины + байты UTF-8; addr = 4-байтовый тип + ключ; все целые числа в порядке little-endian; суммы в атомарных единицах (÷1e8 для ZBC). Справочник для интеграторов, создающих кошельки и инструменты на ZooBC.