Смарт-контракт
Смарт-контракт — это программа, которая автоматически исполняет и обеспечивает выполнение заданных условий в блокчейне. Ее код хранится и выполняется прямо в сети, без посредников, по заранее определенным правилам.Общая информация
- Блокчейн: Solana
- Репозиторий: https://github.com/whalescorp/holders-vesting-sol/
- Язык: Rust
- Лицензия: MIT
Блок-схема работы контракта
(1).png?fit=max&auto=format&n=Ev4p22cRFxlmwX97&q=85&s=f5335b5c36df7f9d9b819d41585f4046)
- Создание vesting:
- Пользователь инициирует создание vesting.
- Информация передается в Issuer, а затем в базу данных, где запись сохраняется в статусе
PENDING.
- Деплой контракта:
- База данных уведомляет ChainManager о необходимости задеплоить контракт.
- ChainManager инициирует деплой контракта в блокчейне.
- После успешного деплоя статус обновляется до
ACTIVE.
- Пополнение депозита:
- Пользователь вносит токены в контракт.
- Это действие фиксируется в базе данных.
- Распределение токенов:
- Пользователю выплачивается часть токенов.
- ChainManager получает из блокчейна информацию о завершении выплаты.
- ChainManager уведомляет Issuer о том, что выплата выполнена.
- Issuer передает в базу данных информацию о выплате и обновленном балансе и решает, нужно ли запускать следующий цикл.
Роли контракта
- Config Authority:
- Отвечает за создание и управление конфигурациями vesting.
- Имеет право назначать controller.
- Controller:
- Участник, который управляет конкретной конфигурацией и может выполнять операции, связанные с vesting.
- Может создавать новые vesting и добавлять или удалять beneficiaries.
- Grantor:
- Лицо или адрес, который создает конкретный vesting.
- Может добавлять beneficiaries и инициировать выплаты.
- Beneficiary:
- Получает токены в соответствии с графиком vesting.
- Может участвовать в получении токенов при их распределении.
Основные операции и сценарии
- Создание конфигурации,
create_config— инициализация новой конфигурации vesting с заданными параметрами, включая configurator и controller. - Смена controller,
set_controller— обновление controller для уже существующей конфигурации. - Создание vesting,
create_vesting— инициализация нового vesting с определением таких параметров, как время распределения токенов, номинальная сумма и инфляция. - Добавление beneficiary,
add_beneficiary— добавляет нового beneficiary в существующий vesting, проверяя, чтобы число beneficiaries не превышало допустимые пределы. - Удаление beneficiary,
remove_beneficiary— удаляет beneficiary из списка получателей vesting, при этом проверяется соблюдение минимальных требований по числу beneficiaries. - Запрос токенов,
claim— позволяет beneficiary запросить токены в соответствии с условиями vesting, проверяя доступные средства и временные ограничения.
Расчет инфляции
В структуреVestingV0 есть поле inflation_rate_per_interval, которое отвечает за процент инфляции. Этот параметр позволяет задавать уровень инфляции для заданного интервала.Метод
total_release_amount_with_inflation_at в структуре VestingV0 вычисляет общее количество токенов, которое может быть выплачено с учетом заданной инфляции:
Структура данных
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.