120 / 691CMPCT

Compact block relay

Компактне передавання BIP 152 надсилає заголовок, короткі ID та вибрані повні транзакції. Одержувач використовує відомі транзакції й отримує відсутні дані.

Компактний блок — кодування передавання, не менший консенсусний блок. Full Node має відновити точні транзакції в правильному порядку й перевірити весь блок.

Короткий ID має 48 біт після скорочення SipHash-2-4. Ключі походять із заголовка й наданого nonce; це не глобальний ідентифікатор транзакції. [BIP 152 — Compact Block Relay] [Bitcoin Core — BIP 152 implementation]

Деякі транзакції надходять повністю як попередньо заповнені елементи, зазвичай включно з coinbase. Індекси визначають їхні позиції в блоці. [BIP 152 — Compact Block Relay]

Одержувач зіставляє короткі ID з відомими транзакціями, наприклад у мемпулі. Однаковий короткий ID сам не доводить тотожності транзакцій. [BIP 152 — Compact Block Relay] [Bitcoin Core — BIP 152 implementation]

Відсутні чи неоднозначні елементи запитуються за індексом через getblocktxn. Відповідь blocktxn надає потрібні транзакції для завершення відновлення. [BIP 152 — Compact Block Relay] [Bitcoin Developer Reference — P2P] [Bitcoin Core v29.0 — net processing]

Відновлення зберігає точний порядок і перевіряє криптографічні зобов’язання блока. Full Node усе одно перевіряє консенсус перед прийняттям; компактне передавання не виняток. [BIP 152 — Compact Block Relay] [Bitcoin Core — BIP 152 implementation] [Bitcoin Core v29.0 — net processing]

Після узгодження sendcmpct швидкий режим може оголошувати блок прямо через cmpctblock. Після визначених попередніх перевірок це може передувати повній валідації відправника, не скасовуючи перевірки одержувача. [BIP 152 — Compact Block Relay] [Bitcoin Core v29.0 — net processing]

Ощадливий режим спочатку використовує inv чи headers, після чого одержувач запитує компактний блок. Він може потребувати більше обмінів, ніж пряме оголошення. [BIP 152 — Compact Block Relay] [Bitcoin Developer Reference — P2P]

Колізії ID можуть викликати запити транзакцій або невдале відновлення з подальшим завантаженням повного блока. Вони не дозволяють прийняти неправильний блок як дійсний. [BIP 152 — Compact Block Relay] [Bitcoin Core — BIP 152 implementation] [Bitcoin Optech — Compact block relay]

Версія 2 виводить ID з wtxid замість txid і передає дані witness за BIP 144. Версія компактного протоколу не є номером версії самого блока. [BIP 152 — Compact Block Relay] [BIP 144 — SegWit peer services]

Користь залежить від спільних транзакцій і мережі. Малий перетин додає запити; головна мета — економія передавання, не гарантований розмір повідомлення чи нульова затримка. [BIP 152 — Compact Block Relay] [Bitcoin Optech — Compact block relay]

Для повної картини прочитайте також Block propagation, Initial block download, Eclipse attack, Virtual byte (vbyte). На цю статтю також посилаються Stale Block, Block propagation, Compact Block Filters, Compact Block Filters.

DOC · 001BIP 152 — Compact Block RelayСпецифікація ↗DOC · 002Bitcoin Core — BIP 152 implementationДокументація ↗DOC · 003Bitcoin Developer Reference — P2PДокументація ↗DOC · 004Bitcoin Core v29.0 — net processingДокументація ↗DOC · 005Bitcoin Optech — Compact block relayДокументація ↗DOC · 006BIP 144 — SegWit peer servicesСпецифікація ↗
Спочатку джерела · Не інвестиційна порада