${habrauser}, Привет!

Я — Старов Александр, сооснователь и главный разработчик в VOLT. В процессе создания собственной криптовалюты VOLT Coin (сейчас проводится аирдроп монеты, информацию можно найти на сайте volt-ink.com, поэтому можете присоединяться) мы столкнулись с достаточной нехваткой информации в интернете. Да, у Aptos зачётная документация, но некоторые моменты либо не указаны, либо неактуальны. Поэтому информацию пришлось собирать по кусочкам.

Данная статья — это пошаговое руководство по созданию собственного FA Asset (Fungible Asset) на основе блокчейна Aptos. Надеюсь, что эта информация будет для кого-нибудь полезной )

VOLT Coin
VOLT Coin

Установка Aptos CLI

Если вы всё-таки решились поработать с экосистемой Aptos, то самое первое, что стоит сделать, — это установить Aptos CLI. Ничего сложного нет, тут следуйте чётко по инструкции с сайта: https://aptos.dev/build/cli

Если вы — обладатель сея прекрасного дистрибутива Arch Linux, то команду установки Aptos CLI оставлю внизу:

git clone https://aur.archlinux.org/aptos-bin.git
cd aptos-bin
makepkg -si

Или с помощью AUR:

yay -S aptos-bin

Базовая структура проекта

Специально для этой статьи мы подготовили репозиторий на GitHub с шаблоном смарт-контракта по стандарту FA Asset: https://github.com/VOLT-Crypto/basic-aptos-fa-coin?tab=readme-ov-file. Клонируйте его, так как далее мы займёмся рассмотрением Move-модуля.

Но сперва создадим Aptos-аккаунт в сети Devnet в корне проекта с помощью команды:

aptos init

После того как вы получили адрес своего Aptos-аккаунта, измените адрес в этой строке файла Move.toml на текущий:

[addresses]
admin = "YOUR ADDRESS"

Последнее, что сделаем - это соберём и опубликуем монету в devnet, а также проведём тестовую транзакцию, отчеканив монету сразу на каком-нибудь другом кошельке (желателен Petra Wallet, потому что был разработан специально для экосистемы Aptos)

Собираем Move-модуль:

aptos move compile

Публикуем его:

aptos move publish

Теперь чеканим монету на Petra Wallet в сети devnet. Вместо Address Wallet впишите адрес вашего Petra или какого-нибудь другого кошелька.

aptos move run --function-id 'default::basic_fa_coin::mint' --args address:<Address Wallet> u64:100000000 --profile default

Вот для этой команды стоит оставить комментарий: если у вас Windows, то проблема может возникнуть в кавычках команды, просто уберите их. Да, это забавно, но именно из-за них мы потеряли полтора часа. Если на Arch Linux всё было GOOD, то на Windowsнет!

Если все эти этапы были успешно выполнены, то можно перейти к разбору самого смарт-контракта.

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

Для Aptos он составляется на специальном языке Move, синтаксис которого отдаёт нотками Rust. Изначально он разрабатывался для блокчейна Diem от Meta, но теперь также используется и в других проектах. Смысла расписывать про него здесь я как такового не вижу, ибо тема довольно обширная.

Объектная модель и Инициализация

В отличие от старого стандарта FA Coin, где данные хранились в аккаунте создателя, этот контракт использует Aptos Object Model.

При инициализации создается именованный объект с детерминированным адресом, основанным на ASSET_SYMBOL ("BFC"). Это позволяет любому пользователю легко найти адрес метаданных токена, не зная адреса создателя.

Все критические ресурсы (ManagedFungibleAsset и TotalSupply) перемещаются внутрь этого созданного объекта (metadata_object_signer), а не на аккаунт администратора. Это чистый паттерн, отделяющий логику токена от личного кошелька разработчика.

Контракт активирует поддержку "первичного хранилища", что означает, что балансы пользователей привязываются к их адресам стандартным образом, обеспечивая совместимость с кошельками.

Управление возможностями

Стандарт FA Asset использует систему ссылок (Refs) для управления правами доступа. В структуре ManagedFungibleAsset хранятся три ключевые ссылки:

  1. MintRef: Право на создание новых токенов.

  2. TransferRef: Право на принудительное перемещение токенов (игнорируя заморозку) и заморозку аккаунтов.

  3. BurnRef: Право на сжигание токенов с любого баланса.

Эти ссылки генерируются один раз при инициализации и "запираются" внутри объекта метаданных. Доступ к ним может получить только владелец объекта (администратор) через функцию-хелпер authorized_borrow_refs.

Реализация Hard Cap

Стандарт Fungible Asset по умолчанию не ограничивает максимальное предложение (Max Supply). Данный контракт реализует эту логику вручную: используется ресурс TotalSupply, хранящий текущее количество токенов.

Проверка при минте: В функции mint происходит проверка: assert!(supply.current + amount <= MAX_SUPPLY, ...). Если лимит превышен, транзакция отменяется с ошибкой E_SUPPLY_EXCEEDED.

Административные функции

Администратору предоставляется абсолютная власть над активом, что типично для централизованных стейблкоинов или корпоративных токенов:

Функция transfer использует transfer_ref администратора. Это позволяет перемещать средства между пользователями без их подписи.

Функции freeze_account и unfreeze_account переключают флаг заморозки на кошельке пользователя (primary_fungible_store). Замороженный пользователь не может отправлять или принимать токены стандартными методами.

Администратор может сжечь токены с баланса любого пользователя, используя burn_from, при этом корректно уменьшая счетчик TotalSupply.

Конец

Да, на этом, в принципе, всё. Если вдруг возникли какие-то вопросы, то жду ваш комментарий. Для тех, кого заинтересовал проект VOLT оставлю ссылочки на соц-сети ниже:

Telegram - Telegram

X - X (Twitter)

Спасибо за прочтение )

Комментарии (1)


  1. kerberos464
    26.11.2025 19:24

    это пошаговое руководство по созданию собственного FA Asset (Fungible Asset) на основе блокчейна Aptos.

    А зачем это нужно?