Signet призначений для спільного тестування програм Bitcoin. Він має власний ланцюг і тестові монети. Окрім звичайних правил і Proof of Work, нові блоки повинні виконати особливу умову мережі; у типовому Signet вона заснована на підписі. Це полегшує випробування, але передбачає іншу модель довіри, ніж основна мережа.
Анна хоче побачити, що новий гаманець покаже після надсилання платежу та після його підтвердження в блоці. Гаманець — це застосунок або пристрій для отримання й надсилання біткоїнів. Блок об’єднує транзакції в пакет, який додають до спільної історії. У Signet вона може використати тестові монети, наприклад із faucet — сервісу, що роздає їх для дослідів. Це не BTC основної мережі, mainnet, і протокол не обмінює їх на справжні біткоїни. Уважності потребують й адреси: Signet має деякі спільні тестові формати з Testnet. Самого вигляду адреси недостатньо, щоб визначити потрібну мережу. [1] [2] [8]
BIP 325 (технічний документ, що описує Signet) написали Karl-Johan Alm і Anthony Towns; підтримку Signet додав Bitcoin Core v0.21.0. Програма пропонує типову публічну мережу, але команда може встановити власну умову створення блоків і визначити учасників. Тому слів «ми використовуємо Signet» замало: обидві сторони мають користуватися тією самою мережею. Ідентифікатор мережевих повідомлень походить від цієї умови, а не від назви проєкту. [1] [3] [4]
Full Node, вузол, який сам перевіряє правила, і далі перевіряє транзакції та Proof of Work — результат обчислювальної роботи, необхідної для створення блоку. До цього додається особлива умова Signet. Отже, у типовій мережі самого майнінгу недостатньо: потрібен відповідний підпис. Заголовок, стислий опис блоку, не замінює цієї перевірки; потрібні дані містяться всередині блоку. [1] [9]
Цифровий підпис дозволяє перевірити, що повідомлення схвалив власник відповідного приватного ключа — секретного числового значення, яке при цьому не розкривається. Той, хто здатний виконати умову підпису, впливає на появу блоків. Він може затримувати підписання або обмежувати включені транзакції. Але це не дає йому приватних ключів Анни чи права змусити її вузол прийняти будь-яку недійсну транзакцію. Інші правила залишаються чинними. Така контрольована участь корисна для тестів і водночас пояснює, чому Signet не копіює модель безпеки mainnet. [1] [9]
Для розробки недостатньо одного успішного платежу. Команда має знати, як застосунок реагує на зупинку блоків або реорганізацію, коли вузол замінює недавні блоки іншою дійсною гілкою. Узгоджений тест дозволяє підготувати таку ситуацію й перевірити, чи гаманець правильно оновлює підтвердження. Signet не обіцяє безперервної роботи. Він допомагає передбачуваніше випробовувати й невдалі ситуації. [1] [5] [6]
У Testnet створення блоків відкрите, а його коливання можуть ускладнювати спільний дослід. Regtest, навпаки, дозволяє легко створювати блоки на вимогу, що зручно для власних автоматичних тестів. Він може поєднувати кілька комп’ютерів; це не обов’язково ізольована програма. Signet відповідає іншій потребі: тривалій співпраці незалежних учасників з узгодженими умовами створення блоків. Жоден режим не замінює всіх інших перевірок. [1] [2]
Challenge — це скрипт, коротка програма, що визначає необхідний доказ для блоку. Вона може вимагати один підпис або Multisig, тобто узгоджену кількість підписів від кількох ключів. Власний Signet може також використовувати OP_TRUE — умову, що виконується без підпису. Тоді вистачає порожнього розв’язання. Точніше говорити про додаткову скриптову умову, а не стверджувати, що кожному Signet завжди потрібен підписувач. [1] [9]
BIP 325 розміщує непорожнє розв’язання в особливих даних Coinbase Transaction, першої транзакції блоку. Ця назва тут не стосується однойменної біржі. Дані розширюють криптографічне зобов’язання (commitment) за BIP 141, яке пов’язує блок із його witness-даними, зокрема підписами, і мають позначку 0xecc7daa2. Це не ще один звичайний платіж підписувачу. Тривіально виконувана умова дозволяє пропустити додаткове розв’язання, але не автоматично решту правил блоку. [1] [9] [10]
Якби підписане повідомлення містило той самий підпис, виникла б циклічна залежність. Тому перевірка використовує змінений відбиток транзакцій з очищеним розв’язанням і дві віртуальні транзакції. Вони потрібні для обчислення, а не надсилаються як додаткові платежі. Підпис також не охоплює nonce заголовка — число, яке змінюють у пошуку Proof of Work. Його зміна не потребує нового підпису, але це не дозволяє довільно змінювати решту блоку. [1] [9]
Анна спочатку перевіряє, чи гаманець, вузол та оглядач блоків використовують ту саму тестову мережу. Оглядач блоків — це застосунок для пошуку транзакцій і блоків певної мережі. У Bitcoin Core допомагають getblockchaininfo та поле signet_challenge, яке показує налаштовану умову. Потім вона стежить за справжнім підтвердженням, а не лише повідомленням про надсилання, і використовує окремий тестовий гаманець. Успіх показує поведінку застосунку за цих умов; він не гарантує безпеки коштів чи стійкості до нападника в mainnet. [7] [8]
Для повної картини прочитайте також Nakamoto Consensus, Block Propagation, Initial Block Download, Block Weight, Bitcoin, Bitcoin Core. На цю статтю також посилаються Testnet, Miniscript, Dead Man’s Switch.