Logo
  • Главная
  • Блог
  • Контакты
Help us build Valis
🇷🇺

Неофициальное руководство по написанию смарт-контрактов Qubic

image

Неофициальное руководство по написанию смарт-контрактов 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:

Что это значит?

Смарт-контракты 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

  1. Разработайте свой SC: Напишите и отладьте ваш код смарт-контракта.
  2. Обновите qubic-cli: Убедитесь, что ваши транзакции SC и функции RCF интегрированы.
  3. Создайте обновление Testnet Core: Интегрируйте свой SC в тестовую сеть.
  4. Запустите тесты: Используйте qubic-cli для запроса вашего узла тестовой сети и проверки производительности SC.
  5. Стресс-тестирование: Проведите нагрузочные тесты и автоматизированные тесты для обеспечения стабильности.
  6. Отправьте на утверждение: После завершения отладки отправьте свой SC для кворумного утверждения и затем переходите к IPO.

Следуя этим шагам, вы можете обеспечить, что ваши смарт-контракты надежны, эффективны и готовы к развертыванию в сети Qubic. Удачного кодирования!

Читайте серию Qsilver «Неофициальная»

  • 🇷🇺Неофициальный промежуточный документ Qubic
  • 🇷🇺Детали Qubic Crypto
  • 🇷🇺Неофициальное руководство по интеграции Qubic Services
  • 🇷🇺Неофициальное руководство по написанию смарт-контрактов Qubic
Чтобы быть в курсе последних обновлений, присоединяйтесь к Discord‑серверу Valis, подписывайтесь на нас в X и добавьте наш блог в закладки.

← Предыдущая

🇷🇺Qearn: Безрисковая доходность за счет блокировки QU

Следующая →

🇷🇺QWALLET и QPOOL краудфандинг 🎉

На этой странице

  • Неофициальное руководство по написанию смарт-контрактов Qubic
  • Введение
  • Обзор смарт-контрактов Qubic
  • Ключевые функции в QPI
  • Что это значит?
  • Распределение памяти
  • Использование библиотек
  • Транзакции и сообщения сети RCF
  • Пример: Airdrop SC
  • Как тестировать свой SC
  • Читайте серию Qsilver «Неофициальная»
Logo

Execution

|

Transparency

XRSSDiscordGitHub
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)