Leçon 2

Детальніше ознайомтеся з прикладами контрактів Multisig

У цьому уроці ми розпочнемо поглиблене вивчення трьох різних структур контракту multisig, представлених у Уроці 1: контракт Lambda, контракт MultisigAction і контракт MultisigView. Ці контракти є ключовими для розуміння через критичну роль, яку вони відіграють у сфері блокчейну та децентралізованих фінансів. Наше дослідження включатиме ретельну деконструкцію їх коду, розробку їхніх унікальних особливостей та обговорення практичних застосувань і випадків використання.

Лямбда-контракт Multisig

Лямбда-контракт Multisig є значним кроком у програмуванні смарт-контрактів завдяки використанню типу sp.lambda . Він вводить можливість виконання довільних функцій, які не були заздалегідь визначені під час розгортання контракту. Ось детальний огляд його основних компонентів:

  1. Початкові параметри: договір ініціалізується (__init__) зі списком учасників, яким дозволено пропонувати та підписувати пропозиції, а також мінімальною кількістю підписів, необхідних для виконання пропозиції. Вони зберігаються в сховищі контракту (self.data), створення довідкового запису для роботи договору.

  2. Функція пропозиції: функція propose слугує для створення нових пропозицій. Учасники можуть надсилати лямбда-функції (що складаються з довільних операцій), які вони хотіли б виконувати в контракті. Ці пропозиції зберігаються в структурі даних big_map , кожній пропозиції присвоюється унікальний ідентифікатор.

  3. Функція підпису: функція sign полегшує схвалення пропозиції. Члени можуть підписатися на підтримку пропозицій. Ці підписи, додані до унікального ідентифікатора пропозиції, збираються та зберігаються в окремій big_map.

  4. Функція виконання: функція execute представляє суть операції контракту. Якщо пропозиція зібрала необхідну кількість підписів, учасники можуть викликати цю функцію, щоб виконати запропоновану лямбда-функцію, застосувавши її до сховища контракту.
    Контракт Multisig Lambda пропонує широку гнучкість, придатну для сценаріїв, що вимагають складних, гнучких і потенційно динамічних структур контролю, таких як DAO (децентралізовані автономні організації), послуги гаманців з декількома власниками та складні протоколи DeFi.

Цей контракт вимагає виконання довільних лямбда-функцій із кількома підписами. Він знайомить із поняттями подання та підпису лямбда-функцій. Розберемо його функції:

  1. submit_lambda: Ця функція дозволяє учасникам надсилати лямбда-функції до контракту. По суті, це пропонує контрактну операцію, яка потребує багаторазового схвалення. На правій панелі SmartPy IDE після успішного надсилання лямбда-функції ви побачите нову транзакцію, ініційовану адресою відправника на адресу контракту.

  2. vote_lambda: Ця функція дозволяє учасникам віддавати свої голоси (підписи) на користь представленої лямбда-функції. Після голосування на панелі IDE ви помітите нову транзакцію з адреси учасника на адресу контракту.

Контракт MultisigAction

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

Основними компонентами цього контракту є:

  1. Початкові параметри: як і в контракті Lambda, контракт MultisigAction отримує список учасників і кількість необхідних голосів під час ініціалізації.

  2. Функція «Запропонувати дію»: ця функція слугує для додавання нових пропозицій. Учасники можуть надсилати дії, попередньо визначені в контракті, пов’язуючи їх з унікальним ідентифікатором. Ці запропоновані дії зберігаються в big_map.

  3. Функція голосування: ця функція призначена для голосування на користь запропонованих дій. Голоси пов’язуються з унікальним ідентифікатором пропозиції та зберігаються в окремій big_map.

  4. Функція «Виконання дій». Ця функція починає діяти, коли пропозиція набирає достатню кількість голосів. Учасники можуть викликати цю функцію, щоб виконати запропоновану дію.
    Контракт MultisigAction ідеально підходить для ситуацій, коли групі осіб потрібно досягти консенсусу щодо конкретних контрактних дій, наприклад, у DAO, де учасники голосують за розподіл ресурсів або зміни протоколу.

  5. submit_proposal: це процес пропозиції нової дії. У контексті нашого прикладу учасник пропонує додати нового підписанта до договору.

  6. Коли цю операцію буде виконано в IDE SmartPy, ви побачите нову транзакцію, яка створюється на правій панелі IDE. У підсумку транзакції вказуватиметься відправник (адреса учасника, що пропонує) та одержувач (адреса контракту). Це може виглядати приблизно так:

Тут статус «ОК» показує, що пропозицію успішно подано.

  1. vote_proposal: Наступним кроком є голосування за пропозицію. Ця функція дає змогу підписантам проголосувати за пропозицію, подану на попередньому кроці.

  2. Коли підписувач 1 проголосує за пропозицію, ви побачите нову транзакцію, у якій підписувач 1 буде відправником, а контракт — отримувачем. Подібна транзакція буде зареєстрована, коли підписувач 2 проголосує за пропозицію:

Ці транзакції вказують на те, що підписувач 1 і підписант 2 успішно віддали свої голоси за пропозицію.

Контракт MultisigView

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

Основними складовими цього контракту є:

  1. Початкові параметри: як і в попередніх контрактах, Контракт MultisigView ініціалізується списком учасників і числом, що вказує на необхідні голоси.

  2. Функція «Подати пропозицію»: Ця функція дозволяє учасникам вводити нові пропозиції у формі довільних байтів. Байти зберігаються в big_map, індексовані самими байтами, що представляє унікальний ідентифікатор пропозиції.

  3. Функція голосування пропозицій: ця функція дозволяє учасникам схвалювати пропозиції. Голоси відстежуються в окремій big_map, пов’язаній з унікальним байтовим ідентифікатором пропозиції.

  4. Функція голосування: ця функція, перегляд у ланцюжку, перевіряє, чи набрала пропозиція необхідні голоси. Він повертає логічне значення, яке вказує на статус голосування пропозиції.
    Контракт MultisigView особливо корисний у випадках, коли смарт-контракт потребує ведення запису схвалених пропозицій, як-от у криптографічних програмах, де байти можуть представляти хешовані угоди, докази або будь-яку іншу форму даних, яка вимагає колективного схвалення.

Clause de non-responsabilité
* Les investissements en cryptomonnaies comportent des risques importants. Veuillez faire preuve de prudence. Le cours n'est pas destiné à fournir des conseils en investissement.
* Ce cours a été créé par l'auteur qui a rejoint Gate Learn. Toute opinion partagée par l'auteur ne représente pas Gate Learn.
Catalogue
Leçon 2

Детальніше ознайомтеся з прикладами контрактів Multisig

У цьому уроці ми розпочнемо поглиблене вивчення трьох різних структур контракту multisig, представлених у Уроці 1: контракт Lambda, контракт MultisigAction і контракт MultisigView. Ці контракти є ключовими для розуміння через критичну роль, яку вони відіграють у сфері блокчейну та децентралізованих фінансів. Наше дослідження включатиме ретельну деконструкцію їх коду, розробку їхніх унікальних особливостей та обговорення практичних застосувань і випадків використання.

Лямбда-контракт Multisig

Лямбда-контракт Multisig є значним кроком у програмуванні смарт-контрактів завдяки використанню типу sp.lambda . Він вводить можливість виконання довільних функцій, які не були заздалегідь визначені під час розгортання контракту. Ось детальний огляд його основних компонентів:

  1. Початкові параметри: договір ініціалізується (__init__) зі списком учасників, яким дозволено пропонувати та підписувати пропозиції, а також мінімальною кількістю підписів, необхідних для виконання пропозиції. Вони зберігаються в сховищі контракту (self.data), створення довідкового запису для роботи договору.

  2. Функція пропозиції: функція propose слугує для створення нових пропозицій. Учасники можуть надсилати лямбда-функції (що складаються з довільних операцій), які вони хотіли б виконувати в контракті. Ці пропозиції зберігаються в структурі даних big_map , кожній пропозиції присвоюється унікальний ідентифікатор.

  3. Функція підпису: функція sign полегшує схвалення пропозиції. Члени можуть підписатися на підтримку пропозицій. Ці підписи, додані до унікального ідентифікатора пропозиції, збираються та зберігаються в окремій big_map.

  4. Функція виконання: функція execute представляє суть операції контракту. Якщо пропозиція зібрала необхідну кількість підписів, учасники можуть викликати цю функцію, щоб виконати запропоновану лямбда-функцію, застосувавши її до сховища контракту.
    Контракт Multisig Lambda пропонує широку гнучкість, придатну для сценаріїв, що вимагають складних, гнучких і потенційно динамічних структур контролю, таких як DAO (децентралізовані автономні організації), послуги гаманців з декількома власниками та складні протоколи DeFi.

Цей контракт вимагає виконання довільних лямбда-функцій із кількома підписами. Він знайомить із поняттями подання та підпису лямбда-функцій. Розберемо його функції:

  1. submit_lambda: Ця функція дозволяє учасникам надсилати лямбда-функції до контракту. По суті, це пропонує контрактну операцію, яка потребує багаторазового схвалення. На правій панелі SmartPy IDE після успішного надсилання лямбда-функції ви побачите нову транзакцію, ініційовану адресою відправника на адресу контракту.

  2. vote_lambda: Ця функція дозволяє учасникам віддавати свої голоси (підписи) на користь представленої лямбда-функції. Після голосування на панелі IDE ви помітите нову транзакцію з адреси учасника на адресу контракту.

Контракт MultisigAction

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

Основними компонентами цього контракту є:

  1. Початкові параметри: як і в контракті Lambda, контракт MultisigAction отримує список учасників і кількість необхідних голосів під час ініціалізації.

  2. Функція «Запропонувати дію»: ця функція слугує для додавання нових пропозицій. Учасники можуть надсилати дії, попередньо визначені в контракті, пов’язуючи їх з унікальним ідентифікатором. Ці запропоновані дії зберігаються в big_map.

  3. Функція голосування: ця функція призначена для голосування на користь запропонованих дій. Голоси пов’язуються з унікальним ідентифікатором пропозиції та зберігаються в окремій big_map.

  4. Функція «Виконання дій». Ця функція починає діяти, коли пропозиція набирає достатню кількість голосів. Учасники можуть викликати цю функцію, щоб виконати запропоновану дію.
    Контракт MultisigAction ідеально підходить для ситуацій, коли групі осіб потрібно досягти консенсусу щодо конкретних контрактних дій, наприклад, у DAO, де учасники голосують за розподіл ресурсів або зміни протоколу.

  5. submit_proposal: це процес пропозиції нової дії. У контексті нашого прикладу учасник пропонує додати нового підписанта до договору.

  6. Коли цю операцію буде виконано в IDE SmartPy, ви побачите нову транзакцію, яка створюється на правій панелі IDE. У підсумку транзакції вказуватиметься відправник (адреса учасника, що пропонує) та одержувач (адреса контракту). Це може виглядати приблизно так:

Тут статус «ОК» показує, що пропозицію успішно подано.

  1. vote_proposal: Наступним кроком є голосування за пропозицію. Ця функція дає змогу підписантам проголосувати за пропозицію, подану на попередньому кроці.

  2. Коли підписувач 1 проголосує за пропозицію, ви побачите нову транзакцію, у якій підписувач 1 буде відправником, а контракт — отримувачем. Подібна транзакція буде зареєстрована, коли підписувач 2 проголосує за пропозицію:

Ці транзакції вказують на те, що підписувач 1 і підписант 2 успішно віддали свої голоси за пропозицію.

Контракт MultisigView

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

Основними складовими цього контракту є:

  1. Початкові параметри: як і в попередніх контрактах, Контракт MultisigView ініціалізується списком учасників і числом, що вказує на необхідні голоси.

  2. Функція «Подати пропозицію»: Ця функція дозволяє учасникам вводити нові пропозиції у формі довільних байтів. Байти зберігаються в big_map, індексовані самими байтами, що представляє унікальний ідентифікатор пропозиції.

  3. Функція голосування пропозицій: ця функція дозволяє учасникам схвалювати пропозиції. Голоси відстежуються в окремій big_map, пов’язаній з унікальним байтовим ідентифікатором пропозиції.

  4. Функція голосування: ця функція, перегляд у ланцюжку, перевіряє, чи набрала пропозиція необхідні голоси. Він повертає логічне значення, яке вказує на статус голосування пропозиції.
    Контракт MultisigView особливо корисний у випадках, коли смарт-контракт потребує ведення запису схвалених пропозицій, як-от у криптографічних програмах, де байти можуть представляти хешовані угоди, докази або будь-яку іншу форму даних, яка вимагає колективного схвалення.

Clause de non-responsabilité
* Les investissements en cryptomonnaies comportent des risques importants. Veuillez faire preuve de prudence. Le cours n'est pas destiné à fournir des conseils en investissement.
* Ce cours a été créé par l'auteur qui a rejoint Gate Learn. Toute opinion partagée par l'auteur ne représente pas Gate Learn.