Експорти контракту
Функції, які контракт експортує, щоб VM їх викликала. (Функції, які контракт імпортує з хоста, описано на інших сторінках цього розділу.)
Кожен контракт також має експортувати свою лінійну memory.
call працює
call(input_ptr: i32, input_len: i32)Точка входу для кожного виклику контракту, читання чи запису.
- VM записує дані виклику (вміст JSON, див. ABI і дані виклику) у пам'ять контракту зі зміщенням 64, а потім викликає
call(64, len). - Контракт без параметрів,
call(), теж приймається; тоді він не може прочитати вхідні дані. - Результат — те, що контракт востаннє передав у
set_return. - Усе дерево викликів фіксується, лише якщо нічого не перервалося.
Залиште зміщення 64 вільним
Оскільки вхідні дані копіюються в memory[64 .. 64 + len], контракт не повинен тримати там потрібні йому дані. За стандартного розташування інструментарію Rust (спершу стек, що росте вниз від верху першого мегабайта) це виконується для вхідних даних звичайного розміру.
Аналоги: execute і query у CosmWasm, @call / @view у NEAR.
init працює
init()Конструктор, виконується один раз під час розгортання контракту — якщо модуль його експортує; відсутність init не є помилкою. Він може писати в сховище і створювати події.
init не отримує вхідних даних, і get_caller() у ньому нічого не повертає. Щоб записати власника чи прийняти параметри, обробляйте функцію initialize у call: транзакція розгортання викликає її з тим, хто розгортає, як викликачем, коли задано init_args (див. Розгортання). Захистіть її, щоб вона виконувалася лише раз.
Аналоги: instantiate у CosmWasm, #[init] у NEAR.
query заплановано
Точка входу лише для читання, якій середовище заборонятиме писати. До того читайте через call з dry_run: true (POST /api/v1/contracts/:address/call).
migrate заплановано
Виконується після заміни байткоду за тією самою адресою .app; дозвіл дає власник або управління.
sudo заплановано
Лише дії протоколу й управління (пауза, задання параметрів) — ніколи не доступна з транзакції користувача.
reply заплановано
Отримує результат (id, result) асинхронного підповідомлення. Потребує асинхронних міжконтрактних викликів, яких ще немає.
Аналоги: reply у CosmWasm, зворотні виклики обіцянок у NEAR.