Skip to content

Експорти контракту ​

Функції, які контракт експортує, щоб VM їх викликала. (Функції, які контракт імпортує з хоста, описано на інших сторінках цього розділу.)

Кожен контракт також має експортувати свою лінійну memory.

call працює ​

text
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 працює ​

text
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.