Как повторить транзакцию Sui client: пошаговое руководство по аргументам
Повторение транзакции в блокчейне Sui с помощью клиента часто вызывает трудности у разработчиков, особенно при вызове смарт-контрактов с большим количеством аргументов. В этой статье мы разберём типичную ошибку при повторении транзакции покупки токена через модуль move_pump и покажем, как правильно подставить аргументы для успешного выполнения.
Что такое Sui client и зачем повторять транзакции?
Sui client - это консольный инструмент для взаимодействия с блокчейном Sui. Повторение транзакции может потребоваться для тестирования, аудита или если оригинальная транзакция не прошла из-за ошибки в аргументах. В нашем примере рассматривается вызов функции buy в смарт-контракте 0xfa9302fe83a1b717293ca0d4f80a9195e66ac3d401977df5b16f1aae00232ab9.
Подготовка: разбивка монеты через split-coin
Перед вызовом функции buy необходимо создать монету (coin) с правильным количеством SUI для оплаты. Для этого используется команда sui client split-coin. Пример:
sui client split-coin --coin-id 0x011d6e63bc615c1c1373b....5260864312fd7c9574bdaaa1ecc8b --amounts 1000000000После выполнения вы получите ID новой монеты (например, 0x...RECIEVED_OBJECT), который будет использоваться как --gas в следующей команде.
Структура аргументов для функции buy
В исходном вопросе пользователь столкнулся с проблемой: аргументы в команде sui client call были указаны неверно. Разберём правильный формат на основе смарт-контракта и исходной транзакции AN2kVN31XbVv4ApxnRe9mTT5UALiSTcEMcoyPeUrVVyp.
Правильный синтаксис команды
sui client call --package 0xfa9302fe83a1b717293ca0d4f80a9195e66ac3d401977df5b16f1aae00232ab9 --module move_pump --function buy --type-args 0xd177f070ac9dc7ca9cf13107ff9bebc74b4606ab75dde706e9a6bfa78377de23::nsell::NSELL --args [ID_пула] [ID_токена] [сумма] [ID_монеты_Sui] --gas [ID_разбитой_монеты] --gas-budget 1000000000Расшифровка аргументов
- Первый аргумент (ID пула):
0xd746495d04a6119987c2b9334c5fefd7d8cff52a8a02a3ea4e3995b9a041ace4::3038839::true- это составной идентификатор пула ликвидности. Важно: в некоторых версиях Sui client требуется указывать0x...::id::boolкак одну строку, но в более новых - раздельно. В исходной транзакции всё было в одной строке, но при повторении нужно смотреть на версию клиента. - Второй аргумент (ID токена):
0x3f2d9f724f4a1ce5e71676448dc452be9a6243dac9c5b975a588c8c867066e92::1587827::true- идентификатор токена, который вы покупаете. - Третий аргумент (сумма): числовое значение, например
904956798544794или5483772406238. Это количество токенов, которое вы хотите купить (в минимальных единицах). - Четвёртый аргумент (ID монеты Sui):
0x0000000000000000000000000000000000000000000000000000000000000006::1::false- это ссылка на монету SUI. Обратите внимание на формат:0x6::1::falseв некоторых случаях может быть упрощён до0x6.
Типичные ошибки и их решение
Ошибка 1: Неправильный формат аргументов
Пользователь в исходном вопросе пытался передавать аргументы через символ ^ и перенос строки, что допустимо в .bat-файле, но важно, чтобы каждый аргумент был отделён пробелом, а не лишними символами. Убедитесь, что в вашей команде нет лишних пробелов или переносов, которые могут сломать парсинг.
Ошибка 2: Неверный ID монеты для газа
После split-coin вы получаете новый объект монеты. Его ID нужно подставить в параметр --gas. Не используйте исходный ID монеты! В примере пользователь использовал --gas RECIEVED_OBJECT, но это плейсхолдер - замените его на реальный ID.
Ошибка 3: Игнорирование типа true/false
В аргументах пула и токена есть суффикс ::true или ::false. Это булево значение, которое может указывать на опцию (например, включён ли пул). Не удаляйте эту часть, иначе транзакция завершится ошибкой.
Пример успешной команды
На основе разобранной информации, вот корректная команда для повторения транзакции:
sui client call --package 0xfa9302fe83a1b717293ca0d4f80a9195e66ac3d401977df5b16f1aae00232ab9 --module move_pump --function buy --type-args 0xd177f070ac9dc7ca9cf13107ff9bebc74b4606ab75dde706e9a6bfa78377de23::nsell::NSELL --args 0xd746495d04a6119987c2b9334c5fefd7d8cff52a8a02a3ea4e3995b9a041ace4::3038839::true 0x3f2d9f724f4a1ce5e71676448dc452be9a6243dac9c5b975a588c8c867066e92::1587827::true 5483772406238 0x0000000000000000000000000000000000000000000000000000000000000006::1::false --gas 0x[ID_вашей_разбитой_монеты] --gas-budget 1000000000Заключение
Повторение транзакции Sui client требует внимательности к формату аргументов, особенно при работе со смарт-контрактами, использующими составные идентификаторы. Всегда проверяйте версию Sui client и документацию модуля move_pump для уточнения типов. Если команда не выполняется, используйте флаг --dry-run для отладки.