Skip to main content

Смарт-контракт

Смарт-контракт — это программа, которая автоматически исполняет и обеспечивает выполнение заданных условий в блокчейне. Ее код хранится и выполняется прямо в сети, без посредников, по заранее определенным правилам.

Общая информация

Блок-схема работы контракта

Image(3)(1) Эта блок-схема описывает процесс создания и использования vesting, а также распределения токенов через блокчейн. Процесс можно разбить на следующие этапы:
  1. Создание vesting:
    1. Пользователь инициирует создание vesting.
    2. Информация передается в Issuer, а затем в базу данных, где запись сохраняется в статусе PENDING.
  2. Деплой контракта:
    1. База данных уведомляет ChainManager о необходимости задеплоить контракт.
    2. ChainManager инициирует деплой контракта в блокчейне.
    3. После успешного деплоя статус обновляется до ACTIVE.
  3. Пополнение депозита:
    1. Пользователь вносит токены в контракт.
    2. Это действие фиксируется в базе данных.
Дальнейшие действия происходят циклически в зависимости от периода разблокировки:
  1. Распределение токенов:
    1. Пользователю выплачивается часть токенов.
    2. ChainManager получает из блокчейна информацию о завершении выплаты.
    3. ChainManager уведомляет Issuer о том, что выплата выполнена.
  • Issuer передает в базу данных информацию о выплате и обновленном балансе и решает, нужно ли запускать следующий цикл.

Роли контракта

  1. Config Authority:
    1. Отвечает за создание и управление конфигурациями vesting.
    2. Имеет право назначать controller.
  2. Controller:
    1. Участник, который управляет конкретной конфигурацией и может выполнять операции, связанные с vesting.
    2. Может создавать новые vesting и добавлять или удалять beneficiaries.
  3. Grantor:
    1. Лицо или адрес, который создает конкретный vesting.
    2. Может добавлять beneficiaries и инициировать выплаты.
  4. Beneficiary:
    1. Получает токены в соответствии с графиком vesting.
    2. Может участвовать в получении токенов при их распределении.

Основные операции и сценарии

  1. Создание конфигурации, create_config — инициализация новой конфигурации vesting с заданными параметрами, включая configurator и controller.
  2. Смена controller, set_controller — обновление controller для уже существующей конфигурации.
  3. Создание vesting, create_vesting — инициализация нового vesting с определением таких параметров, как время распределения токенов, номинальная сумма и инфляция.
  4. Добавление beneficiary, add_beneficiary — добавляет нового beneficiary в существующий vesting, проверяя, чтобы число beneficiaries не превышало допустимые пределы.
  5. Удаление beneficiary, remove_beneficiary — удаляет beneficiary из списка получателей vesting, при этом проверяется соблюдение минимальных требований по числу beneficiaries.
  6. Запрос токенов, claim — позволяет beneficiary запросить токены в соответствии с условиями vesting, проверяя доступные средства и временные ограничения.

Расчет инфляции

В структуре VestingV0 есть поле inflation_rate_per_interval, которое отвечает за процент инфляции. Этот параметр позволяет задавать уровень инфляции для заданного интервала.
Метод total_release_amount_with_inflation_at в структуре VestingV0 вычисляет общее количество токенов, которое может быть выплачено с учетом заданной инфляции:
Метод вычисляет количество интервалов, прошедших с начала vesting, и в зависимости от этого увеличивает сумму с учетом указанной инфляции. Через цикл происходит проход по интервалам и накопление суммы в зависимости от инфляции. Такой подход позволяет динамически рассчитывать размер выплат в зависимости от времени и установленной инфляции, что дает гибкость в управлении финансовыми потоками.

Структура данных

Config

  • bump: используется для обеспечения уникальности аккаунта, это один из механизмов работы с адресами.
  • seqno: последовательный номер конфигурации.
  • authority: адрес владельца конфигурации.
  • controller: адрес контроллера, управляющего конфигурацией.

Vesting

  • bump: как и в Config, используется для предотвращения коллизий при создании аккаунта.
  • seqno: последовательный номер vesting.
  • config: ссылка на аккаунт конфигурации, с которым связан vesting.
  • mint: адрес токена, для которого создается vesting.
  • grantor: адрес создателя vesting.
  • beneficiaries: список адресов получателей токенов.
  • started_at: время начала vesting в формате Unix timestamp.
  • cliff_until: момент окончания периода cliff, то есть отрезка времени, в течение которого токены еще нельзя получить.
  • release_interval: временной интервал между выплатами токенов.
  • nominal_release_amount: номинальная сумма, подлежащая выпуску.
  • inflation_rate_per_interval: процент инфляции для каждого интервала.
  • total_transferred_amount: сумма, которая уже была переведена beneficiaries.

Gas

Contract Creation and Maintenance

В Holders при создании контрактов в Solana используется RentExemption — это разовый платеж за 2 года, который навсегда резервирует место. Стоимость RentExemption в Solana зависит от размера хранилища, в байтах, и текущей ставки аллокации в сети. В среднем цена составляет примерно 0.0023 SOL за каждые 10 KB. При закрытии аккаунта можно запросить возврат этой стоимости, так как аллокация больше не нужна.
Примерная стоимость создания такого контракта составляет около 0.015 SOL, то есть примерно 2 USD при курсе Sol/USDT $139.

Gas for Funding

Чтобы ускорять транзакции в сети Solana, подключен механизм Priority Fee — это дополнительная комиссия, повышающая вероятность подтверждения при высокой нагрузке. Это позволяет обрабатывать транзакции быстрее. Пользователь оплачивает gas только при пополнении контракта; все остальные выплаты уже покрываются сервисом. Gas за пополнение счета в Solana фиксирован и составляет 0.000005 SOL, то есть 0.00069 USD при курсе Sol/USDT $139.