Как использовать Taquito Batch API для отправки нескольких транзакций с одним и тем же хешем
Одна из проблем, с которыми вы столкнетесь, когда начнете разрабатывать более сложные децентрализованные приложения для своих смарт-контрактов, возникает при создании нескольких новых транзакций подряд. Каждая учетная запись Tezos содержит счетчик, который увеличивается каждый раз, когда операция включается в блок в сети. Это означает, что вы не можете подделать новую транзакцию, если у вас уже есть ожидающая транзакция, или вы получите теперь печально известное сообщение об ошибке Counter 12345 already used for contract tz1...
Существуют разные сценарии, когда вы хотите отправить несколько транзакций одновременно: например, вы можете хранить в своем децентрализованном приложении каждый запрос на обновление от ваших пользователей, прежде чем просить их подтвердить их и отправить их все сразу. Такито создал Batch API, чтобы упростить процесс. Это предмет данного руководства.
Что такое пакетный API?
Taquito предоставляет простой способ создания и отправки транзакций в блокчейн, независимо от того, хотите ли вы отправить несколько tez на определенный адрес или взаимодействовать со смарт-контрактом. Каждый раз, когда учетная запись Tezos подписывает транзакцию, ее счетчик транзакций увеличивается на 1. Эта функция не позволяет пользователям отправлять две или несколько транзакций подряд, как показано в этом фрагменте кода:
/* * ONE OF THESE TRANSACTIONS WILL FAIL * AND YOU WILL GET AN ERROR MESSAGE */ const op1 = await contract.methods.interact("tezos").send(); const op2 = await contract.methods.wait([["unit"]]).send(); await op1.confirmation(); await op2.confirmation(); /* * Error Message returned by the node: * "Error while applying operation opWH2nEcmmzUwK4T6agHg3bn9GDR7fW1ynqWL58AVRAb7aZFciD: * branch refused (Error: * Counter 1122148 already used for contract tz1VSUr8wwNhLAzempoch5d6hLRiTh8Cjcjb (expected 1122149))" */
Отслеживание подтверждения транзакций и обновление счетчика транзакций может быть очень утомительным и обременительным, поэтому Taquito предоставляет пакетный API. Пакетный API позволяет группировать все транзакции вместе и отправлять их сразу под одним и тем же значением счетчика транзакций.
Как это работает?
Объект TezosToolkit
предоставляет метод под названием batch
. Впоследствии возвращенный объект предоставляет 6 различных методов, которые могут быть объединены в соответствии с количеством транзакций, которые необходимо отправить.
После объединения различных методов пакетных операций вместе создается одна транзакция, которая транслируется с возвращенным хешем одной операции. Что касается любой другой транзакции, созданной Taquito, вы затем ждете определенного количества подтверждений.
Метод withTransfer
Этот метод позволяет добавить к пакетным операциям передачу tez. Он принимает объект как параметр с 4 свойствами. Два из них являются обязательными: to
указывает получателя перевода, а amount
указывает сумму tez, которая должна быть переведена. Два других свойства являются необязательными: если mutez
установлен в true
, значение, указанное в amount
, считается находящимся в mutez.
Метод withOrigination
Этот метод позволяет добавить создание одного или нескольких контрактов к существующему пакету операций. Он принимает объект как параметр с 4 свойствами. Свойство code
является обязательным и может быть строкой, представляющей простой код Майкельсона или JSON-представление контракта Майкельсона. Объект параметра также должен включать свойство init
или storage
: если указано init
, storage
является необязательным, и наоборот. init
- это начальное значение объекта хранения, которое может быть закодировано в кодировке Micheline или JSON. storage
- это представление объекта хранилища в JavaScript. При желании вы также можете указать balance
для вновь созданного контракта и delegate
.
Метод withDelegation
Этот простой метод позволяет группировать несколько транзакций делегирования. Метод принимает объект как параметр с единственным свойством: адрес делегата.
Метод withContractCall
Этот метод может быть одним из самых полезных, поскольку он позволяет вам группировать и отправлять несколько вызовов контрактов в рамках одной транзакции. Параметр также довольно прост: он принимает функцию, которую вы бы вызывали для объекта абстракции контракта, если бы вы отправили одну транзакцию.
Метод with
Если вы предпочитаете иметь массив, содержащий объекты с различными транзакциями, которые вы хотите передать, вы можете использовать метод with
. Он позволяет группировать транзакции как объекты вместо объединения вызовов функций. Используемый вами объект ожидает тех же свойств, что и параметр соответствующего метода, с дополнительным свойством kind
, которое указывает тип транзакции, которую вы хотите отправить (удобное перечисление opKind
экспортируется из пакета Taquito с допустимыми значениями для kind
имущество).
Примечание: вы не можете выполнять вызовы контракта с помощью этого метода.
Метод send
После объединения всех необходимых операций вы должны использовать метод send
для их выполнения. Этот шаг очень похож на то, что вы сделали бы для создания одной транзакции.
Как и в случае с другими операциями, созданными Taquito, метод send
- это обещание, которое возвращает объект, хэш операции которого доступен в свойстве hash
и где вы можете дождаться подтверждения транзакции с помощью метода confirmation
(принимая в качестве параметра количество подтверждения, которые вы хотели бы получить).
Какие есть ограничения?
Ограничения пакетных операций находятся в пределах ограничений отдельных операций, например, количество пакетных операций ограничено лимитом газа блокчейна Tezos.
В дополнение к этому, пакетные операции могут быть подписаны только пользователем единый аккаунт.
использованная литература
- Интеграционные тесты
- "Документация"
Также прочтите
- Лучший Crypto Trading Bot
- Обзор Дерибит | Опции, комиссии, API и тестовая сеть
- Обзор криптобиржи FTX
- Лучший биткойн-аппаратный кошелек
- Торговые платформы для криптографических копий
- Лучшее крипто-налоговое программное обеспечение
- Лучшие криптографические торговые платформы
- Лучшие платформы криптографического кредитования
- Леджер против Трезора
- BlockFi vs Celsius vs Hodlnaut
- Обзор Bitsgap - бот для криптовалюты, который делает легкие деньги
- Quadency Review - робот для торговли криптовалютой, созданный для профессионалов
- Обзор PrimeXBT | Торговля с кредитным плечом, комиссия и покрытие
- Обзор HaasOnline и получите скидку 10%
- Путеводитель идиотов по Маржинальной торговле на Bitmex
- Обзор eToro | Торгуйте акциями, криптовалютами, ETF, CFD и товарами
- Расширенное руководство по маржинальной торговле Bitmex
- Лучшие криптографические API для разработчиков
- Гайд Криптоарбитраж: Как заработать новичку
- Лучшие провайдеры Биткойн-узлов
- Лучший инструмент для построения графиков криптовалюты
- Какие книги о Биткойне лучше всего?
Получайте лучшие предложения по программному обеспечению прямо в свой почтовый ящик