DEV Community

EgorMajj
EgorMajj

Posted on

2 1

Руководство по тестированию транзакций Move

ИССЛЕДУЕМАЯ ФУНКЦИЯ
Тестирование транзакции Move, описанной в этом документе, находится на стадии разработки. Поддержка этой функции будет зависеть от ее использования и принятия сообществом Aptos.

Если вы являетесь разработчиком смарт-контрактов на языке Move, то вы можете использовать тестирование транзакции Move для создания и запуска end-to-end тестов.

В этом руководстве описаны шаги по созданию и запуску end-to-end тестированию транзакции Move с помощью Aptos CLI.

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

Обзор

Как выглядит тестирование транзакции Move, смотрите в папке aptos_test_harness GitHub.

Набор для тестирования транзакции Move состоит из двух типов файлов:

  • Файлы Move с расширением *.move. Эти файлы Move содержат тестирование транзакции. Тестирование транзакции - это команды Rust clap (Command Line Argument Parser). Они записываются в виде символов в файлах Move. Чтобы отличить их от обычных символов Move, команды тестирование транзакции снабжаются специальным индикатором строки символов //# .
  • Файлы базовой линии с расширением *.exp extension. Эти базовые файлы будут созданы пустыми при первом запуске aptos CLI. Если вы запустите тест с опцией UB=1 в первый раз, файлы базовой линии будут заполнены результатами теста.

Быстрый запуск

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

Шаг 1. Установите Aptos CLI

Убедитесь, что вы установили aptos , инструмент Aptos CLI. Как установить и использовать инструмент aptos CLI, смотрите 👇 .

Шаг 2. Запустите набор тестов Move transactional test suite

  • Клонируйте или загрузите репозиторий aptos-core на GitHub.
  • Набор тестов Move transactional находится в aptos-core/aptos-move/aptos-transactional-test-harness/test .
  • Запустите команду aptos CLI с опцией move transactional-test

ИСПОЛЬЗОВАТЬ UB=1
При запуске команды aptos CLI убедитесь, что вы включили UB=1 только в первый раз или если вы обновили тесты, как показано ниже.

UB=1 aptos move transactional-test --root-path aptos-core/aptos-move/aptos-transactional-test-harness/test
Enter fullscreen mode Exit fullscreen mode
  • Параметр --root-path указывает, где находятся все тесты.
  • Запуск теста проходит по иерархии каталогов и находит тесты, указанные в виде символов со специальным префиксом //#, в файлах, имена которых заканчиваются на .move или .mvir.
  • Программа тестирование транзакции Move запускает тесты и сравнивает результаты тестов с базовыми файлами. В базовых файлах хранится содержимое результатов, которые были получены во время первого запуска.

Примеры

В этом разделе представлены примеры, показывающие, как создать и запустить различные команды для тестирования транзакции Move.

Создание учетной записи

//# create_account —name Alice [--initial-coins 10000]
Enter fullscreen mode Exit fullscreen mode

Команда create_account генерирует детерминированную пару закрытый ключ, открытый ключ и создает именованный адрес учетной записи (Alice в приведенном выше примере).

ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ
Начальные coins могут быть заданы, в противном случае используется значение по умолчанию 10000.

Публикация модулей

//# publish [--gas-budget 100]
module Alice::first_module {
    public entry fun foo() {
        return
    }
}
Enter fullscreen mode Exit fullscreen mode

Команда publish публикует модуль Move на указанную учетную запись (Alice в приведенном выше примере). По желанию, количество единиц газа, разрешенное для публикации транзакции, может быть указано через --gas-budget.

ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ
Значение по умолчанию - это максимальное количество coins, доступное на учетной записи отправителя.

Запуск функций скрипта модуля

//# run --signers Alice [--args x"68656C6C6F20776F726C64"] [--type-args "0x1::aptos_coin::AptosCoin"] [--expiration 1658432810] [--sequence-number 1] [--gas-price 1] [--show-events] -- Alice::first_module::function_name
Enter fullscreen mode Exit fullscreen mode

Команда run запускает функцию скрипта модуля путем отправки транзакции.

В приведенном выше примере:

  • --signers указывают, кто подписывает и отправляет транзакцию.
  • Alice::first_module::function_name - полное имя функции модуля Move.
  • --args указывают аргументы, которые нужно передать скрипт-функции.
  • --type-args указывает аргументы типа, если скрипт-функция является родовой функцией.
  • --expiration- время истечения срока действия транзакции.
  • --sequence-number номер последовательности учетной записи.
  • --gas-price цена единицы газа.
  • --show-events выводит события транзакции, если они указаны.

Выполнение скриптов

//# run --script --signers Alice [--args x"68656C6C6F20776F726C64"] [--type-args "0x1::aptos_coin::AptosCoin"] [--expiration 1658432810] [--sequence-number 1] [--gas-price 1]
script {
    use aptos_framework::coin;
    use aptos_framework::aptos_coin::AptosCoin;

    fun main(sender: &signer, receiver: address, amount: u64) {
        coin::transfer<AptosCoin>(sender, receiver, amount);
    }
}
Enter fullscreen mode Exit fullscreen mode

Команду run можно также использовать с опцией --script для выполнения скрипта.

Просмотр ресурсов

//# view_resource --address Alice --type 0x1::coin::CoinStore<0x1::test_coin::TestCoin> [--field coin.value]
Enter fullscreen mode Exit fullscreen mode

View_resource выводит ресурсы, содержащиеся по адресу.

  • --address учетной записи, чьи ресурсы должны быть опубликованы.
  • --type тип ресурса, который должен быть опубликован.
  • --field публикует только указанное поле.

Просмотр таблиц

//# view_table --table_handle 5713946181763753045826830927579154558 --key_type 0x1::string::String --key_value x"68656C6C6F20776F726C64" --value_type 0x1::token::Collection 
Enter fullscreen mode Exit fullscreen mode

View_table выводит элемент в таблице по ключу элемента. Например, в приведенном ниже коде Move:

struct Collections has key {
    collections: Table<string::String, Collection>,
}
Enter fullscreen mode Exit fullscreen mode
  • В хранилище таблица collections имеет handle, хранящийся в ресурсе Collections.
  • Чтобы запросить элемент таблицы по ключу, нам необходимо знать информацию о handle таблицы --table_handle 5713946181763753045826830927579154558.
  • table_handle - это handle таблицы, к которой выполняется запрос. Он может быть найден командой view_resource.
  • Параметр --key_type - это информация о типе ключа. Чтобы получить значение ключа, используйте опцию view_table с параметрами --key_type и --key_value.
  • Значение --key_value - это ключ, который используется для получения значения.
  • Key_type используется для десериализации key_value для получения необработанного ключа, который может быть использован для запроса к хранилищу.
  • Параметр --value_type - информация о типе для десериализации значения таблицы. Возвращаемое значение хранилища также должно быть десериализовано, чтобы быть полезным. Поэтому --value_type также необходим.

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Immerse yourself in a wealth of knowledge with this piece, supported by the inclusive DEV Community—every developer, no matter where they are in their journey, is invited to contribute to our collective wisdom.

A simple “thank you” goes a long way—express your gratitude below in the comments!

Gathering insights enriches our journey on DEV and fortifies our community ties. Did you find this article valuable? Taking a moment to thank the author can have a significant impact.

Okay