Skip to content

IBC v2 і шардинг ​

IBC v2 експериментально ​

NeuroChain з'єднується з іншими мережами через IBC v2 — спрощену, орієнтовану на клієнтів версію протоколу Inter-Blockchain Communication (відому також як Eureka). Перший контрагент — екосистема Cosmos, починаючи з Neutron (CosmWasm).

NeuroChain додає постквантову сумісність: її коміти підписуються ML-DSA-65, тож легкий клієнт контрагента перевіряє NeuroChain постквантовим підписом замість схем ECDSA / Ed25519, на які спирається класичний IBC.

Що передається каналом ​

ПакетФорматПризначення
Взаємозамінний переказ`nc-ics20-v1denom
Атестація безпеки`nc-ibc-attest-v1bytecode_hash
Заголовок коміту`nc-pq-lc-v1chain_id

Пакет атестації — місце, де сходяться дві головні ставки: доказ безпеки від AI, створений у NeuroChain, на який може покластися інша мережа.

Перекази токенів ​

Переказ IBC v2: користувач підписує ibc_transfer; валідатори блокують NRO в ескроу каналу; кожні 1 000 блоків вони підписують заголовок коміту; релеєр отримує заголовок, оновлює клієнт контрагента й доставляє пакет; контрагент випускає ваучер; релеєр підтверджує, і ескроу спалюється; без підтвердження до тайм-ауту відправнику повертаються кошти

Вихідні (NeuroChain → контрагент)

  1. POST /api/v1/ibc/transfer блокує суму на ескроу-акаунті каналу neuro:ibc.escrow.<channel>; пакет — locked.
  2. Релеєр доставляє його; контрагент випускає ваучер.
  3. POST /api/v1/ibc/ack позначає його committed і спалює ескроу.
  4. Немає підтвердження до тайм-ауту → відправнику автоматично повертаються кошти.

Вхідні (контрагент → NeuroChain)

  1. Релеєр надсилає POST /api/v1/ibc/recv з пакетом і його зобов'язанням (commitment).
  2. Отримувачу зараховується IBC-ваучер з denom ibc/<SHA-256 шляху трасування>, як в ibc-go. Пакет з певним id можна отримати лише раз.
  3. POST /api/v1/ibc/redeem спалює ваучер і надсилає актив назад через канал.

Суми в пакетах — цілі числа в базовому denom (unro для NRO).

Хто що підписує ​

ОпераціяХто може надіслатиПідпис
transfer, redeemБудь-який акаунт, для власних коштівПокриває кожне поле — отримувача, канал, мережу, denom, суму
recv, ack, channel/open, channel/pause, client/update, attestЛише оператори IBC: ключі з NEUROCHAIN_IBC_OPERATOR_PUBKEYSТак само, ключем оператора

Повноваження дає публічний ключ оператора, а не заявлена адреса. Усі операції IBC застосовуються в консенсусі й підписуються для neuro:system.ibc.

Поточний стан і обмеження ​

ЧастинаСтан
Ескроу, ваучери, трасування denom, тайм-аути, записи пакетівРеалізовано в ноді, покрито модульними тестами
Постквантові заголовки комітів, що підписуються кожні 1 000 блоківРеалізовано; доступні за GET /api/v1/ibc/header/latest
Підписи, що прив'язують поля кожної операції IBCРеалізовано, з еталонними тестовими векторами
Контракт контрагента neuro-pq-client (CosmWasm)Зібрано (neurochain/contracts/neuro_pq_client). Ще не бездовірчий: перевіряє довірений ключ релеєра і зростання висоти; підпис ML-DSA-65 перевіряє релеєр поза мережею
Вхідні пакетиПриймаються від операторів IBC із зобов'язанням над полями зарахування; доказ членства Меркла від контрагента запропоновано, але не реалізовано
Наскрізний переказ з тестовою мережею NeutronЩе не виконано — скрипт розгортання готовий (tools/ibc-relayer/deploy_neutron.js), потрібен поповнений акаунт у тестовій мережі
Повне рукостискання IBC v2 з ibc-goЗаплановано

Доки контрагент не перевіряє ML-DSA-65 у мережі, канал IBC довіряє своєму релеєру. Тримайте NEUROCHAIN_IBC_MAX_PACKET_UNRO і NEUROCHAIN_IBC_MAX_CHANNEL_ESCROW_UNRO низькими в будь-якій мережі зі справжньою вартістю.

Як це тестується: модульні тести ноди покривають блокування, підтвердження, повернення за тайм-аутом, зарахування й погашення ваучерів, дублікати пакетів, зарезервовані id пакетів, розбіжності зобов'язань, повноваження операторів і канонічні підписані повідомлення (cargo test -p neurochain-node ibc). GET /api/v1/ibc/pq/test-vector повертає фіксовані заголовок, ключ і підпис, щоб реалізація контрагента могла перевірити, що кодує й перевіряє ті самі байти.

Запуск релеєра (лабораторія) ​

bash
# 1. Запустіть ноду з дозволеним ключем оператора
NEUROCHAIN_IBC_OPERATOR_PUBKEYS=<публічний ключ ML-DSA-65 оператора, hex> ./target/debug/neurochain

# 2. Відкрийте канал (підписує оператор)
#    POST /api/v1/ibc/channel/open  { from, channel, port, counterparty_chain, allowed_denoms, … }

# 3. Після контрольної точки експортуйте заголовок для клієнта контрагента
NODE_RPC=http://localhost:9933 node neurochain/tools/ibc-relayer/export_update_client.js

Скрипт виводить повідомлення UpdateClient для neuro-pq-client. Поля запитів для кожного ендпоінта IBC — у довіднику REST.

Конфігурація ​

ЗміннаЗа замовчуваннямЗначення
NEUROCHAIN_IBC_OPERATOR_PUBKEYSпорожньоПублічні ключі через кому, яким дозволено релеїти й адмініструвати канали
NEUROCHAIN_IBC_TRUSTED_PUBKEYSпорожньоКлючі ML-DSA-65, чиї підписи заголовків приймаються для вхідних пакетів; порожньо — приймається будь-який дійсний підпис (лише лабораторія)
NEUROCHAIN_IBC_REQUIRE_HEADERу mainnetВхідні пакети мають супроводжуватися перевіреним заголовком
NEUROCHAIN_IBC_REQUIRE_PACKET_COMMITMENTу mainnetВхідні пакети мають нести зобов'язання над своїми полями
NEUROCHAIN_IBC_TIMEOUT_BLOCKS10Блоків, після яких непідтверджений вихідний пакет повертається
NEUROCHAIN_IBC_MAX_PACKET_UNROбез лімітуНайбільший одиничний переказ
NEUROCHAIN_IBC_MAX_CHANNEL_ESCROW_UNROбез лімітуНайбільше, що один канал може тримати в ескроу
NEUROCHAIN_IBC_NATIVE_DENOMunroБазовий denom NRO в пакетах

Шардинг експериментально ​

Кожен шард запускає власний екземпляр консенсусу зі своїми валідаторами й висотою; акаунти належать шарду FNV-1a(address) mod n_shards. Як урегульовуються міжшардові перекази, описано в Консенсус → Шардинг.

Запускайте одну ноду на шард:

bash
NEUROCHAIN_SHARDS=4 NEUROCHAIN_SHARD_ID=0 NEUROCHAIN_DATA_DIR=./data-s0 NEUROCHAIN_RPC_PORT=9933 … ./target/debug/neurochain
NEUROCHAIN_SHARDS=4 NEUROCHAIN_SHARD_ID=1 NEUROCHAIN_DATA_DIR=./data-s1 NEUROCHAIN_RPC_PORT=9934 … ./target/debug/neurochain
  • Без NEUROCHAIN_SHARD_ID нода працює з одним шардом і не створює міжшардових переказів.
  • Gateway маршрутизує кожну транзакцію до ноди шарда відправника.
  • Стежте за передачами через GET /api/v1/cross-shard/queue?status=locked, а за висотами шардів — через GET /api/v1/shards.

Усередині міжшардові передачі використовують той самий пакетний рушій, що й IBC v2 — шард є одним видом кінця каналу, зовнішня мережа — іншим.