Неофициальное руководство по написанию смарт-контрактов Qubic
Это неофициальное руководство предоставляет обзор разработки смарт-контрактов Qubic, детализируя ключевые функции, распределение памяти и процедуры тестирования для обеспечения надежного и эффективного развертывания.
Qsilver · 27 июня 2024 года.
Введение
Добро пожаловать в неофициальное руководство по написанию смарт-контрактов Qubic (SC). Это руководство направлено на предоставление четкого и краткого обзора того, как разрабатывать и внедрять смарт-контракты в экосистеме Qubic, опираясь на основную документацию QPI.
Обзор смарт-контрактов Qubic
В настоящее время основная документация для написания SC находится в файле QPI на GitHub. QPI означает Qubic Programming Interface, аналог API (Application Programming Interface), но специфичен для Qubic.
Файл QPI включает:
- Запрещенные символы: отсутствие операторов умножения или деления, отсутствие директив препроцессора.
- Основная структура кода:
- 5000 строк кода: определяют каждый тип переменной от одиночных битов до массивов с миллионами элементов.
- 1000 строк кода: управляют различными очередями и связанными типами данных для эффективной обработки данных.
- Последние несколько сотен строк: обеспечивают доступ к состоянию сети Qubic.
Ключевые функции в QPI
Вот некоторые из основных функций, предоставляемых в QPI:
id arbitrator() const;
id computor(uint16 computorIndex) const; // [0..675]
uint8 day() const; // [1..31]
uint8 dayOfWeek() const; // [0..6]
uint16 epoch() const; // [0..9'999]
bit getEntity() const; // Возвращает “true”, если сущность найдена, “false” в противном случае
uint8 hour() const; // [0..23]
sint64 invocationReward() const;
id invocator() const; // Возвращает ID пользователя/контракта, который инициировал этот контракт; возвращает NULL_ID, если нет
template <typename T> id K12(const T& data) const;
uint16 millisecond() const; // [0..999]
uint8 minute() const; // [0..59]
uint8 month() const; // [1..12]
id nextId(const id& currentId) const;
sint64 numberOfPossessedShares() const;
id originator() const; // Возвращает ID пользователя, который инициировал всю цепочку вызовов; возвращает NULL_ID, если нет
uint8 second() const; // [0..59]
bit signatureValidity() const;
uint32 tick() const; // [0..999'999'999]
uint8 year() const; // [0..99] (0 = 2000, 1 = 2001, …, 99 = 2099)
Что это значит?
Смарт-контракты Qubic являются Тьюринг-полными, что означает, что вы можете реализовать практически любую вычислительную логику. Однако определенные ограничения обеспечивают, что SC выполняются в строго изолированной и безопасной среде.
Распределение памяти
SC используют статическую модель распределения памяти, где вся память должна быть предварительно выделена. Этот дизайн важен для эффективного управления структурами данных в пределах лимита 1 ГБ ОЗУ. Хотя этот лимит в будущем удвоится, он остается фиксированным выделением, требующим тщательного планирования использования памяти.
Использование библиотек
В настоящее время нельзя использовать внешние библиотеки в SC; весь необходимый код должен быть включен непосредственно в исходный код. Со временем, по мере того, как больше SC будут включать различные библиотеки, они могут стать доступными для публичного использования в других SC.
Транзакции и сообщения сети RCF
Каждый SC имеет уникальный адрес, полученный из открытого ключа, при этом ID контракта является младшими 64 битами. SC вызываются посредством транзакций, отправленных на этот адрес, с inputData
, указывающим операцию. Кроме того, состояние SC можно запросить, используя сообщения сети RCF.
Пример: Airdrop SC
Airdrop SC может перебирать набор данных и распределять QU или токены на каждый адрес за один тик на транзакцию SC. С текущим лимитом в 1024 транзакции на тик это может привести к до 500 миллионов переводов за тик. Фактическая пропускная способность зависит от сложности SC.
Как тестировать свой SC
- Разработайте свой SC: Напишите и отладьте ваш код смарт-контракта.
- Обновите qubic-cli: Убедитесь, что ваши транзакции SC и функции RCF интегрированы.
- Создайте обновление Testnet Core: Интегрируйте свой SC в тестовую сеть.
- Запустите тесты: Используйте qubic-cli для запроса вашего узла тестовой сети и проверки производительности SC.
- Стресс-тестирование: Проведите нагрузочные тесты и автоматизированные тесты для обеспечения стабильности.
- Отправьте на утверждение: После завершения отладки отправьте свой SC для кворумного утверждения и затем переходите к IPO.
Следуя этим шагам, вы можете обеспечить, что ваши смарт-контракты надежны, эффективны и готовы к развертыванию в сети Qubic. Удачного кодирования!
Читайте серию Qsilver «Неофициальная»
- Неофициальный промежуточный документ Qubic
- Детали Qubic Crypto
- Неофициальное руководство по интеграции Qubic Services
- Неофициальное руководство по написанию смарт-контрактов Qubic
Чтобы быть в курсе последних обновлений, присоединяйтесь к Discord-серверу Valis, подпишитесь на нас в X и добавьте наш блог в закладки.
Следующий →
На этой странице