Багатопідпис

Підписи транзакцій

Зоряне використання підписи як дозвіл. Транзакції завжди потребують дозволу принаймні з одного відкритого ключа, щоб вважатися дійсними. Як правило, транзакції потребують дозволу лише з відкритого ключа вихідного рахунку.

підписів

Сигнатури транзакцій створюються шляхом криптографічного підписання вмісту об'єкта транзакції секретним ключем. В даний час Stellar використовує схему підпису ed25519, але існує також механізм додавання додаткових типів схем відкритих/приватних ключів. Вважається, що транзакція з доданим підписом має дозвіл від цього відкритого ключа.

У двох випадках для транзакції може знадобитися більше одного підпису. Якщо транзакція має операції, які стосуються декількох рахунків, вона потребує авторизації з кожного відповідного рахунку. Трансакція також потребуватиме додаткових підписів, якщо обліковий запис, пов’язаний з транзакцією, має кілька відкритих ключів. Приклади див. В посібнику з експлуатації.

Пороги

Операції підпадають під певну порогову категорію: низька, середня або висока. Пороговим значенням для даного рівня може бути встановлене будь-яке число від 0-255. Цей поріг - це вага ваги підпису, необхідний для авторизації операції на цьому рівні.

Скажімо, Діян встановлює середній поріг для одного зі своїх рахунків рівним 4. Якщо цей рахунок подає транзакцію, що включає платіжну операцію (середня безпека), поріг транзакції дорівнює 4 - ваги підпису на ньому повинні бути більше або дорівнювати 4 для того, щоб бігти. Якщо головний ключ Діяна - ключ, що відповідає відкритому ключу, що ідентифікує рахунок, яким вона володіє - має вагу менше 4, вона не може авторизувати транзакцію без інших підписувачів.

Як тільки порогове значення підпису буде досягнуто, якщо залишилися підписи, транзакція не вдасться. Це станеться, навіть якщо підписи дійсні. Наприклад, якщо для вашої транзакції потрібні 3 підписи, надання більше 3 підписів призведе до невдалої транзакції з помилкою TX_BAD_AUTH_EXTRA (навіть якщо всі вони дійсні). Причиною цієї помилки є продуктивність, оскільки непотрібна перевірка підпису має великий вплив на продуктивність перед тим, як приймати транзакції консенсусом.

Кожен рахунок може встановлювати власні порогові значення. За замовчуванням для всіх рівнів порогових значень встановлено значення 0, а для головного ключа встановлено вагу 1. Операція Встановити параметри дозволяє змінити вагу головного ключа та додати інші ключі підпису з різними вагами.

  • Обробка транзакцій
    • Стягнення плати або оновлення порядкового номера вихідного рахунку
  • Дозволити операцію довіри
    • Використовується, щоб дозволити людям утримувати кредит з цього рахунку, не відкриваючи ключа, що дозволяє надсилати платежі з цього рахунку.
  • Послідовність ударів
    • Змініть безпосередньо порядковий номер рахунку

  • Встановіть Параметри, щоб змінити підписувачів або порогові значення
    • Дозволяє створити набір підписувачів, які надають або скасовують доступ до облікового запису.
  • Злиття рахунків для об’єднання облікових записів

У більшості випадків рекомендується встановлювати такі порогові значення, що низькі .

Додаткові ключі підписання

Рахунки ідентифікуються за відкритим ключем. Приватний ключ, який відповідає цьому відкритому ключу, називається головний ключ. Додаткові ключі підписання можна додати до облікового запису за допомогою операції Встановити параметри.

Якщо вагу головного ключа оновлено до 0, він не може використовуватися для підписання транзакцій (навіть для операцій з пороговим значенням 0), поки інші підписувачі, що відповідають високому порогу, не можуть бути відновлені. Якщо на рахунку перелічені інші підписанти, вони все ще можуть продовжувати підписувати транзакції.

«Підписувачі» стосуються головного ключа або будь-яких ключів підписання, доданих пізніше. Підписант визначається як пара: відкритий ключ, вага.

Кожен додатковий підписувач за основним ключем збільшує мінімальний залишок на рахунку.

Альтернативні типи підписів

Щоб увімкнути деякі розширені функції інтелектуального контракту, існує кілька додаткових типів підписів. Ці типи підписів також мають ваги, і їх можна додавати та видаляти подібно до звичайних типів підписів. Але замість перевірки криптографічного підпису на авторизацію вони використовують інший метод підтвердження дійсності мережі.

Попередньо авторизована транзакція

Обліковий запис може попередньо авторизувати певну транзакцію, додавши хеш майбутньої транзакції як «підписанта» на рахунку. Для цього вам потрібно заздалегідь підготувати транзакцію з належним порядковим номером. Тоді ви можете отримати хеш цієї транзакції та додати його як підписувача на рахунок.

Підписники цього типу автоматично видаляються з облікового запису, коли відповідну транзакцію застосовано належним чином. У разі помилки або коли відповідна транзакція ніколи не подана, підписувач залишається і повинен бути видалений вручну за допомогою операції Встановити параметри.

Цей тип підписувачів особливо корисний в ескроу-рахунках. Ви можете попередньо авторизувати дві різні транзакції. Обидва можуть мати однаковий порядковий номер, але різні пункти призначення. Це означає, що може бути виконана лише одна з них.

Хеш (х)

Додавання підпису типу хеш (x) дозволяє кожному, хто знає x, підписати транзакцію. Цей тип підписувачів особливо корисний для атомних міжланцюгових свопів, які необхідні для міжблокових протоколів, таких як блискавичні мережі.

Спочатку створіть випадкове 256-бітове значення, яке ми називаємо x. Хеш SHA256 цього значення може бути доданий як підписувач типу хеш (x). Потім, щоб авторизувати транзакцію, х додається як один із підписів транзакції. Майте на увазі, що x буде відомий усьому світу, як тільки транзакція буде подана в мережу з x як підпис. Це означає, що кожен бажаючий зможе підписатись на цей рахунок за допомогою підписувача хеш (x) на той момент. Часто ви хочете, щоб були додаткові підписувачі, тому хтось повинен мати певний секретний ключ і знати х, щоб досягти межі ваги, необхідної для авторизації транзакцій на рахунку.

Конверти

Угода конверт обгортає транзакцію набором підписів. Об’єкт транзакції - це те, що підписанти насправді підписують. Технічно конверт транзакцій - це те, що передається по мережі та включається в набори транзакцій.

Авторизація

Щоб визначити, чи має транзакція необхідну авторизацію для запуску, ваги всіх підписів у конверті транзакції складаються. Якщо ця сума дорівнює або перевищує порогове значення (див. Нижче), встановлене для цього типу операції, тоді операція авторизована.

Ця схема дуже гнучка. Ви можете вимагати від багатьох підписантів авторизації платежів з певного рахунку. Ви можете мати обліковий запис, для якого може авторизуватися будь-яка кількість людей. Ви можете мати головний ключ, який надає доступ або скасовує доступ інших. Він підтримує будь-яку m n настройку.

Операції

Приклад 1: Якіри

Ви запускаєте якір, який хотів би зберегти ключ видачі в автономному режимі. Таким чином, менш імовірно, що поганий актор зможе отримати ключ якоря і почати неправильно видавати кредит. Однак ваш прив’язувач повинен дозволити людям, які мають кредит, запустивши операцію Дозволити довіру. Перш ніж видавати кредит на рахунок, потрібно підтвердити, що з рахунком все в порядку.

Multisig дозволяє зробити все це, не відкриваючи головного ключа вашого якоря. Ви можете додати ще один ключ підписання до свого облікового запису за допомогою операції Встановити параметри. Цей додатковий ключ повинен мати вагу нижче середнього порогу вашого облікового запису. Оскільки Allow Trust є низькопороговою операцією, цей додатковий ключ дозволяє користувачам утримувати кредит вашого якоря. Але оскільки Оплата є середньопороговою операцією, цей ключ не дозволяє нікому, хто скомпрометує ваш якір, видавати кредит.

Налаштування вашого облікового запису:

Приклад 2: Спільні рахунки

Ви хочете створити спільний рахунок з Білалом та Каріною таким чином, щоб будь-хто з вас дозволив здійснити платіж. Ви також хочете налаштувати обліковий запис, щоб, якщо ви вирішите змінити підписувачів (наприклад, вилучити або додати когось), високопорогову операцію, ви всі 3 повинні погодитися. Ви додаєте Білала та Каріну як підписантів до спільного рахунку. Ви також гарантуєте, що для очищення високого порогу потрібні всі ваші ключові ваги, а лише середнього.

Налаштування спільного рахунку:

Приклад 3: Рахунки компанії

Ваша компанія хоче створити рахунок, який вимагає, щоб 3 із 6 співробітників погодились на будь-які транзакції з цього рахунку.

Налаштування облікового запису компанії:

Приклад 4: Рахунки витрат

Ви повністю контролюєте рахунок витрат, але хочете, щоб двоє колег Діюань та Еміль мали змогу санкціонувати транзакції з цього рахунку. Ви додаєте ключі підпису Діюаня та Еміля на рахунок витрат. Якщо Діюан або Еміль залишають компанію, ви можете вилучити їхній ключ підписання, що є високопороговою операцією.

Налаштування облікового запису витрат:

Приклад 5: Спеціальні валюти

Ви хочете випустити власну валюту та переконатися, що більше ніколи не створюватиметься. Ви створюєте вихідний рахунок і випускаєте максимальну суму валюти на рахунок, що зберігається. Потім ви встановлюєте головну вагу вихідного рахунку нижче середнього порогу - вихідний рахунок більше не може випускати валюту.

Налаштування вихідного облікового запису:

Зауважте, що навіть незважаючи на те, що пороги тут дорівнюють 0, головний ключ не може успішно підписати транзакцію, оскільки його власна вага дорівнює 0.