Ваша первая монета
В этом руководстве подробно описано, как использовать и управлять новой монетой. Рассмотрим следующие шаги:
Разверните модуль MoonCoin. Будем называть его MoonCoin.
Инициализируйте MoonCoin через стандартный модуль фреймворка Coin.
Зарегистрируйте учетную запись получателя, чтобы получить MoonCoin.
Создайте MoonCoin получателю как владелец MoonCoin.
Это руководство основано на секции Ваша первая транзакция в качестве библиотеки для этого примера. Данное руководство содержит пример кода, который можно загрузить ниже:
В этом руководстве основное внимание будет уделено first_coin.py
и повторному использованию библиотекиfirst_transaction.py
из предыдущего руководства.
Вы найдете python project здесь
Шаг 1) Разверните модуль MoonCoin
Шаг 1.1) Загрузите Aptos-core
Для простоты выполнения этой задачи у Aptos-core имеется move-examples
каталог, который позволяет легко создавать и тестировать модули Move без загрузки дополнительных ресурсов. Со временем мы расширим этот раздел и опишем, как использовать инструменты Move для разработки.
А сейчас загрузите и подготовьте Aptos-core:
git clone https://github.com/aptos-labs/aptos-core.git
cd aptos-core
./scripts/dev_setup.sh
source ~/.cargo/env
git checkout origin/devnet
Установите Aptos Commandline tool. См. подробнее Aptos command line tool
cargo install --git https://github.com/aptos-labs/aptos-core.git aptos
Шаг 1.2) Просмотрите модуль
В этом терминале измените каталоги на aptos-move/move-examples/moon_coin
. Сохраните это окно терминала до конца руководства - в дальнейшем мы будем называть его «Move Window». В оставшейся части этого раздела будет рассмотрен файл sources/MoonCoinType.move
.
Этот модуль позволяет пользователям создать новый MoonCoinType::MoonCoin::MoonCoin, который можно использовать для регистрации в платформенном модуле Coin (0x1::Coin) для создания стандартной монеты Coin. Разработчики могут написать свои собственные функции в модуле MoonCoin, если они хотят сделать больше, чем то, что предоставляется в стандартном режиме 0x1::Coin или 0x1::ManagedCoin (добавляет функции создания/сжигания монет).
module MoonCoinType::MoonCoin {
struct MoonCoin {}
}
Код очень прост, так как мы не добавляем в MoonCoin больше функций, чем стандартные, предоставляемые фреймворком Coin (перевод, депозит, вывод, создание, сжигание). Наиболее важной частью является структура MoonCoin, определяющая новый тип монеты, которую можно зарегистрировать с помощью 0x1::Coin.
Шаг 1.3) Развертывание модуля Move, содержащего тип MoonCoin
Для Python3:
Загрузите example project
Откройте свой любимый терминал и перейдите туда, куда вы загрузили приведенный выше пример проекта.
Установите необходимые библиотеки:
pip3 install -r requirements.txt
.Выполните пример:
python3 first_coin.py MoonCoin.mv
Шаг 1.4) Проверка результата выполнения
Через несколько секунд вы увидите сообщение «Обновите модуль с адресом Алисы, создайте, скопируйте указанный путь и нажмите enter».
В терминале «Move Window» и для файла Move, который мы ранее рассматривали:
Скопируйте адрес Алисы
Скомпилируйте модули с адресом Алисы с помощью
aptos move compile --package-dir . --named-addresses MoonCoinType=0x{alice_address_here}
. Здесь мы заменяем общий адресMoonCoinType='_'
вmoon_coin/move.toml
на адрес АлисыСкопируйте
build/Examples/bytecode_modules/MoonCoin.mv
в ту же папку, что и код этого руководства
Вернитесь в другое окно терминала и нажмите "enter" в командной строке, чтобы продолжить выполнение остальной части кода
Результат должен выглядеть следующим образом:
=== Addresses ===
Alice: 11c32982d04fbcc79b694647edff88c5b5d5b1a99c9d2854039175facbeefb40
Bob: 7ec8f962139943bc41c17a72e782b7729b1625cf65ed7812152a5677364a4f88
Update the module with Alice's address, build, copy to the provided path, and press enter.
Шаг 2) Инициализируйте MoonCoin
Модуль MoonCoin уже развернут. Следующим шагом будет инициализация MoonCoin. В этом примере мы будем использовать 0x1::ManagedCoin::initialize, так как нам нужна возможность создавать/сжигать наш новый MoonCoin. Это добавит в MoonCoin стандартные функции, такие как перевод, создание, сжигание и стандартные события (регистрация, депозит, вывод).
def initialize_coin(self, account_from: Account) -> Optional[str]:
""" Initialize a new coin with the given coin type. """
payload = {
"type": "script_function_payload",
"function": "0x1::ManagedCoin::initialize",
"type_arguments": [f"0x{account_from.address()}::MoonCoin::MoonCoin"],
"arguments": [
"Moon Coin".encode("utf-8").hex(),
"MOON".encode("utf-8").hex(),
"6",
False
]
}
res = self.execute_transaction_with_payload(account_from, payload)
return str(res["hash"])
Шаг 3) Зарегистрируйте учетную запись получателя для получения MoonCoin
В других сетях, поскольку токены/монеты — это просто номера баланса в контракте, любой может «отправить» кому угодно случайную монету, даже если получатель этого не хочет. В Aptos пользователь должен зарегистрироваться для получения Coin<RandomCoin>
, прежде чем ее можно будет ему отправить.
Чтобы зарегистрироваться, получателю достаточно запустить 0x1::Coin::register<CoinType>
:
def register_coin(self, account_receiver: Account, coin_type_address: str) -> str:
""" Register the receiver account to receive transfers for the new coin. """
payload = {
"type": "script_function_payload",
"function": "0x1::Coin::register",
"type_arguments": [f"0x{coin_type_address}::MoonCoin::MoonCoin"],
"arguments": []
}
res = self.execute_transaction_with_payload(account_receiver, payload)
return str(res["hash"])
Шаг 4) Отправьте MoonCoin получателю как владельцу MoonCoin
При инициализации новой монеты (Шаг 2) учетная запись владельца получает возможность создавать/сжигать новую монету. Учетная запись владельца может создать MoonCoin, активировав 0x1::ManagedCoin::mint.
def mint_coin(
self,
account_coin_owner: Account,
receiver_address: str,
amount: int
) -> str:
""" Register the receiver account to receive transfers for the new coin. """
payload = {
"type": "script_function_payload",
"function": "0x1::ManagedCoin::mint",
"type_arguments": [f"0x{account_coin_owner.address()}::MoonCoin::MoonCoin"],
"arguments": [
receiver_address,
f"{amount}"
]
}
res = self.execute_transaction_with_payload(account_coin_owner, payload)
return str(res["hash"])
Шаг 5) Проверьте баланс MoonCoin Боба
def get_balance(
self,
account_address: str,
coin_type_address: str,
) -> str:
""" Returns the coin balance of the given account """
return self.account_resource(account_address, f"0x1::Coin::CoinStore<0x{coin_type_address}::MoonCoin::MoonCoin>")
Данные можно проверить, посетив либо интерфейс REST, либо explorer:
Учетная запись Алисы через REST interface
Учетная запись Боба через explorer
Last updated