Что такое seqno?
-
В мире разработки TON, когда дело доходит до сообщений, я часто вижу ссылки на "seqno", но я еще не понял, что именно это такое? Для чего нам это нужно?
Этот вопрос был импортирован из чата Telegram: <***Скрыто***
click to show
-
Seqno - это один из способов предотвращения повторных атак. Когда транзакция отправляется в смарт-контракт кошелька, он сравнивает поле seqno транзакции с полем внутри своего хранилища. Если они совпадают, это принимается, и сохраненный seqno увеличивается на единицу. Если они не совпадают, транзакция отменяется.
Без seqno (или другого механизма для предотвращения повторных атак) любой человек (обычно получатель средств) может прочитать данные транзакции (например, от исследователей блокчейна) и создать еще одну поддельную транзакцию и повторно отправить ее в оригинальный смарт-контракт кошелька и заставить его повторно отправить TON еще раз, в конечном итоге истощив все его ресурсы. фонды.
-
Отличный вопрос, "seqno" - это интересная концепция на TVM, которая станет изюминкой
Который больше похож на номер транзакции кошелька, отправляющего Tx. Как "одноразовый номер" в EVM world.
Для дополнительного примера, если вы хотите отправить Txs через SDK в блокчейн, используйте следующий код:
// (=== more codes === ) // console.log("Interacting with Collection Contract: \n" + contract_address); let seqno: number = await wallet_address.getSeqno(); let transfer = await wallet_address.sendTransfer({ seqno: seqno, secretKey: keyPair.secretKey, messages: [ internal({ value: toNano("0.5"), to: contract_address, init: { code: init.code, data: init.data, }, bounce: true, body: packed, }), ], });
Сначала вам нужно будет получить
seqno
для отправки с параметрами в транзакции.