Гарантируется ли успешность всех переводов при отправке значения нескольким учетным записям с помощью send_raw_message в кошельке с высокой загрузкой?
-
Предположим, у меня есть смарт-контракт highload wallet, развернутый в сети TON, и я отправляю ему внешнее сообщение, чтобы доставить 100 переводов средств на разные учетные записи в сети с помощью send_raw_message функция (как в сценарии криптобиржи). Контракт использует механизм seqno, чтобы предотвратить двойную обработку одного и того же внешнего сообщения.
Итак, если после отправки транзакции я замечу, что seqno контракта увеличилось на единицу, могу ли я быть уверен, что все 100 переводов также были успешно завершены или будут гарантированно завершены в ближайшем будущем (следующий блок или около того)? Конечно, я единственный, кто может отправлять внешние сообщения в контракт.
Или мне нужно действительно подтвердить доставку каждого из 100 переводов на их целевые кошельки?
Согласно [белой книге TON](https://ton - blockchain.github.io/docs/ton.pdf ) (раздел 2.4. Сообщения между цепочками блоков ) TON должен обеспечивать доставку точно один раз. Однако мне интересно, действительно ли это работает на практике.
-
Highload wallet не использует явный seqno, он использует недолговечный кэш с использованием словаря, а ключом для каждой транзакции является идентификатор запроса.
Итак, если вы хотите гарантировать, что 100 транзакций были отправлены успешно, вам следует запросить адрес вашего кошелька с помощью getTransactions API с использованием сервиса toncenter (или других) и убедиться, что внешняя транзакция создала 100 выходных сообщений
-
Поскольку клиентское программное обеспечение и рассматриваемый смарт-контракт являются двумя отдельными объектами, было бы лучше фактически проверить, что транзакция действительно была обработана, а исходящие сообщения были созданы и отправлены на обработку.
** Что вам следует сделать, так это:**
1). Создайте внешнее сообщение для вашего кошелька highload со списком денежных переводов, которые необходимо выполнить. Получите хэш внешнего сообщения или его тела.
2). Отправьте сообщение в сеть.
3). Опросите последние транзакции из блокчейна, используя идентификатор учетной записи вашего кошелька, и сопоставьте транзакцию, используя предварительно сгенерированный хэш.
4). Проверьте, что транзакция была выполнена успешно (
код выхода = 0 || 1
) и убедитесь, что исходящие сообщения содержат все требуемые передачи значений с правильными значениями.Это гарантирует, что переводы действительно были осуществлены. Однако, если вам нужно убедиться, что они действительно были доставлены (а не отправлены обратно), вам нужно будет запросить каждую отдельную учетную запись получателя и проверить наличие входящих транзакций, сопоставив их с использованием хэшей исходящих сообщений.