Ідеально для новачків: візуальне програмування смарт-контрактів за допомогою VisualTez

Ідеально для новачків: візуальне програмування смарт-контрактів за допомогою VisualTez

У травні на Tezos з'явився сервіс візуального програмування VisualTez. Розробник вибирає мишкою необхідні блоки, об'єднує їх і задає аргументи, а сервіс робить все інше.

Ми зібрали у VisualTez найпростіший контракт-калькулятор і відразу його протестували. Ділимося відчуттями від візуального програмування смарт-контрактів на Tezos і розповідаємо про фічі цього інструменту.

Кому потрібне візуальне програмування

По-перше, воно підходить для створення простих скриптів без вивчення платформи. Наприклад, за допомогою програми Automate можна запрограмувати смартфон вимикати WiFi, якщо за GPS-координатами він знаходиться поза вашим будинком або офісом. При цьому не потрібно знати Java і відповідних функцій для роботи з WiFi і GPS.

По-друге, візуальне програмування дозволяє вузьким фахівцям сконцентруватися на вирішенні конкретного творчого завдання. Приклади — Blueprints у Unreal Engine для роботи з графічними шейдерами, AudioMulch для написання музики, Houdini для 3D-анімації.

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

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

Як працювати з VisualTez

На головному екрані є два основні посилання — на редактор (IDE) і документацію. При цьому в документації пояснюється лише робота з блоками, компіляція та тестування контрактів у VisualTez. Якщо вам потрібно дізнатися, чим big_map відрізняється від record і що таке сховище — читайте наш курс з розробки або документацію SmartPy.

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

У лівій частині знаходиться меню з блоками:

  • головні блоки (Main Blocks) — контейнери, які відповідають за компіляцію смарт-контрактів, значень та типів;
  • значення (Data Values);
  • типи даних (Types);
  • операції за типами (Operations by Type) — отримати довжину рядка, видалити ключ з map та інші;
  • операції із змінними (Variables) — оголошення, присвоєння, доступ;
  • логічні операції (Logic);
  • цикли та ітерації (Loops);
  • математичні функції (Arithmetics/Math) на зразок ABS та шіфт-операторів;
  • трансфер та делегування tez (Transfer), а також виклики сторонніх контрактів та їх деплой;
  • доступ до ончейн даних (Block/Tx Properties) — функції на кшталт Get Sender;
  • криптографічні функції (Cryptography), наприклад, перевірка підпису;
  • просунуті вирази для пакування та розпакування даних;
  • лямбда-обчислення;
  • on-chain views;
  • функції тестування.

У правій частині — інструменти для роботи з контрактами: компіляція та тестування, шаблони FA1.2 та FA2, генерація посилання на воркспейс із вашим контрактом, імпорт та експорт контрактів у форматі .xml та інші.

Контракти компілюються у Michelson, JSON або SmartPy.

Пишемо простий контракт-калькулятор

Тут ми описуємо весь процес створення контракту з тупняками та помилками для того, щоб показати, де були проблеми та наскільки такий спосіб програмування інтуїтивно зрозумілий.

У нашому контракті будуть дві точки входу — addition і subtraction, додавання і віднімання відповідно. При виклику точки входу користувач передає аргумент типу int, який контракт додає або віднімає від значення у сховищі.

Спочатку додаємо блок Contract Compilation з Main Blocks — у ньому задаємо тип сховища та його початковий стан.

Змінюємо тип сховища з Unit на int і задаємо початкове значення 0. Для цього в меню зліва вибираємо типи int та перетягуємо блоки на відповідні місця.

Перший тупняк — в Initial Storage намагалися перетягнути блок int з меню Types, але треба було з Values. Ми задаємо значення, а не просто тип.

Додаємо дві точки входу, даємо їм назви та ставимо тип вхідного параметра Int. В них потрібно реалізувати функцію виду «сховище = сховище + параметр».

Другий тупняк — довго шукали у Values ​​та Types блок для присвоєння нового значення сховищу. Все виявилося просто: у меню Variables вибираємо блок «Присвоїти значення» (Assign), до нього додаємо сховище та математичну операцію, а вже в неї — дві змінні Storage та Parameter.

Так само заповнюємо функцію віднімання, тільки з мінусом у функції. До речі, VisualTez дозволяє копіювати блоки з усім вмістом, тому ми просто скопіювали блок із присвоєнням нового значення Storage.

Тепер можна скомпілювати смарт-контракт. На SmartPy він має такий вигляд.

У VisualTez немає Dry Run, тобто тестового запуску контракту із заданим параметром. Тому пишемо тест: деплоїмо контракт, викликаємо точки входу та передаємо їм аргументи. У першому тесті додаємо 10, у другому — віднімаємо 15, у третьому пробуємо відняти рядок «kek», щоб отримати помилку.

При тестуванні ми спочатку отримали незаплановану помилку віртуальної машини, тому що забули про важливу річ: Michelson не вміє в рядки і їх потрібно перевести у байтовий формат. Тому замінили рядок «kek» на натуральне число 0 і наш контракт успішно пройшов тести.

Серйозно, спробуйте VisualTez

Загалом ми задоволені результатом і досвідом роботи з VisualTez. Єдине, що трохи збиває з пантелику — практично однаковий фон для загального воркспейсу з контрактом і меню вибору блоку. Наприклад, коли ви натискаєте Main Blocks, на кілька секунд можна подумати, що ви додали на екран відразу чотири доступні блоки.

Зібрати контракт у VisualTez виявилося набагато простіше і швидше, ніж ми очікували. Якщо ви раніше пробували розробляти на LIGO або SmartPy, але кинули через складність — спробуйте щось написати в VisualTez. Вам сподобається.

Якщо ж ви досвідчений розробник, теж спробуйте. VisualTez може підійти як інструмент для прототипування або експериментів.

Підписуйтесь на соціальні мережі Tezos Ukraine, щоб нічого не пропустити:

  1. Telegram-канал
  2. Facebook.
  3. Twitter російською та українською мовами
  4. Twitter англійською мовою
  5. YouTube-канал
  6. Instagram
  7. LinkedIn
  8. hub на ForkLog

наступний

Лімітні ордери на SpicySwap: нововведення, яке всі пропустили

Читайте схожі пости

Що таке мета-транзакції без транзакційних комісій?

Що таке мета-транзакції без транзакційних комісій?

Дорога до 1 000 000 TPS: історія оновлень Tezos

Дорога до 1 000 000 TPS: історія оновлень Tezos

Бонусний урок для блокчейн-індексерів: робимо простий токен трекер

Бонусний урок для блокчейн-індексерів: робимо простий токен трекер

Читайте блог і не пропускайте новини про TezosЧитати блог

Спільнота