Uncle Bogdan
7 min readJan 17, 2024

Представляємо документ про аспектне програмування

У зв’язку з нещодавнім оголошенням про наш devnet з відкритим вихідним кодом, Артела хотіла б представити V1 нашого документу з програмування Aspect Programming Whitepaper. У цьому документі викладені наші основні ідеї, що виходять за межі мережі Артела, засновані на декількох роках великомасштабної розробки архітектури блокчейну.

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

Огляд брошури з аспектного програмування

Анотація

Аспектне програмування — це модель програмування для блокчейну Artela, яка дозволяє створювати власні розширення (аспекти) на блокчейні. Аспект — це програмоване розширення, яке використовується для динамічної інтеграції додаткової кастомної функціональності в блокчейн під час виконання; це працює в поєднанні зі смарт-контрактами для розширення функціональності в ланцюжку. Відмінною рисою Аспекту є можливість доступу до системних API базового рівня та виконання визначених дій у точках з’єднання протягом усього життєвого циклу транзакції. Смарт-контракти можуть прив’язувати певні Аспекти для активації додаткової функціональності. Коли транзакція викликає смарт-контракти в блокчейні з Аспектами, вона також взаємодіє з асоційованими Аспектами. За допомогою програмування Аспектів розробники можуть впроваджувати базову логіку в смарт-контракти і розширювати додаткові функції для створення багатофункціональних додатків, що виходять за рамки можливостей EVM.

Розширюваність блокчейну

EVM — це широко розповсюджене середовище виконання смарт-контрактів (якщо ви читаєте цю статтю, ви, мабуть, вже знаєте про нього), яке використовується в багатьох блокчейнах. Хоча EVM розроблено як повне за Тьюрінгом, блокчейни, що покладаються на EVM, стикаються з проблемами при підтримці складних додатків з розширеною функціональністю:

  1. Обмежена функціональність смарт-контрактів. EVM-програми не можуть використовувати цикли і повинні завершуватися через певну кількість кроків. Розробники повинні мінімізувати кроки обчислень, щоб уникнути перевищення лімітів газу.
  2. Обмежена розширюваність EVM. Попередньо скомпільований смарт-контракт заборонено збирати на рівні користувача, а право власності на нього контролюється платформою.
  3. Обмежена кастомізація процесу транзакцій. Процес транзакції є статичним, попередньо налаштованим і не може бути змінений.

Вирішення цих обмежень

Аспекти є унікальними як за формою, так і за функціями у порівнянні з традиційними методами покращення основних функцій блокчейну. Деякі з цих унікальних функцій включають:

Blockchain-Native: Нативні розширення — це програми, які працюють повністю в ланцюжку, виконуються детерміновано всіма валідаторами в мережі.

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

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

Локальна активація: Смарт-контракти активують власні розширення локально, гарантуючи, що їх вплив відбувається в локальному, а не в глобальному масштабі.

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

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

Огляд аспектного програмування

Основним принципом фреймворку Аспектного програмування є модель точок з’єднання (JPM), яка складається з трьох ключових компонентів:

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

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

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

Точка приєднання слугує точкою з’єднання на рівні блокчейну і дозволяє користувачам додавати власну логіку. Користувачі можуть отримати доступ до певного контексту в кожній точці приєднання і використовувати системні API для створення індивідуальних функцій.

Приклад того, як працюють Аспекти:

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

1. class SecurityAspect extends Aspect {
2.
3. @joinpoint
/*serves as an entry, triggered once transaction execution completes*/
4. postTxExecute(jpCtx: JPContext) {
/***JPContext** represents the runtime context, containing original transaction context and APIs for interaction.*/
5. if jpCtx.currentCall().methodName() == “withdraw” { // check whether “withdraw” of the smart contract is invoked
6. let mintAmount = jpCtx.currentCall().params()[1]; // retrieve the expect minting amount from the transaction parameters
7. let actualVaultEtherFlow = jpCtx.stateChange(jpCtx.tx.to()).ether().diff(); // retrieve the actual funds flow of the vault from the runtime context
8.
9. if (amount != actualVaultEtherFlow) { // if the actual funds’ flow does not match the mint amount, indicating a discrepancy potentially resulting from coding errors or a cyberattack
10. jpCtx.txControl().revert(); // negating its execution
11. }
12. }
13. }

Як працюють Аспекти:

  1. Аспекти реалізуються за допомогою Assembly Script і компілюються в байт-код WebAssembly (WASM).
  2. Обробка транзакції розгортання Аспектів: включення байт-коду Аспекту в транзакцію розгортання та його відправлення до світового стану блокчейну.
  3. Обробка транзакції зв’язування між Аспектом і смарт-контрактом: власник смарт-контракту підписує транзакцію зв’язування, використовуючи той самий зовнішній обліковий запис (EOA), який полегшує розгортання смарт-контракту. Це прив’язує Aspect до смарт-контракту.
  4. Виконавче середовище Аспекту отримує байт-код Аспекту і завантажує його в середовище виконання WASM. Виконавче середовище викликає функції входу в Aspect.

Розташування точок з’єднання

Протягом життєвого циклу блоків і транзакцій визначаються різні точки з’єднання. Це дозволяє розробникам Aspect реалізовувати значні кастомізації для dApps.

Aspect-Boost

Перша реалізація фреймворку Aspect Programming на Artela відома як “Aspect-Boost”. Це фреймворк для будь-якого типу блокчейну або модульного рівня виконання, який дозволяє інтегрувати і використовувати перші можливості Аспектного Програмування. Для отримання додаткової інформації про Aspect-Boost, будь ласка, зверніться до повної версії документа.

Новий світ з перспективою

Захист смарт-контрактів під час виконання: Aspects може забезпечити захист виконання в режимі реального часу в чорному ящику, покращити рівень виконання та усунути атаки повторного входу.

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

Операція “точно в строк” (JIT): Aspects дозволяє користувачам виконувати логіку ланцюжка одночасно зі смарт-контрактами в рамках однієї атомарної транзакції. Це полегшує JIT-операції в ланцюжку, включаючи ліквідацію JIT, управління JIT LP і захоплення MEV в AMM.

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

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

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

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

Висновок

Таким чином, наші зусилля по розширенню можливостей блокчейну охоплюють наступні ключові ініціативи:

Розробити нову модель програмування для створення власних розширень у блокчейні

Впровадити фреймворк, який відповідає цій моделі програмування

Застосувати фреймворк Aspect Programming до блокчейну Artela, щоб створити безмежну мережу, яка дозволить розробникам створювати розширення для своїх додатків, орієнтованих на конкретні додатки

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

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

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

Слідкуйте за нами, щоб дізнатися більше

Щоб дізнатися про технічні деталі програмування на Aspect, ви можете завантажити повну версію документації тут. Створіть свій перший Aspect, пограйтеся з нашим DevNet і не соромтеся звертатися за підтримкою або залишати відгуки на нашому Discord. Будьте в курсі останніх подій у нашому проекті, включаючи розвиток нашого Github з відкритим вихідним кодом, слідкуючи за нами у Твіттері. Приєднуйтесь до нашої спільноти. Ми будемо раді почути, як Аспектне програмування може покращити те, що ви створюєте далі.