The Open Dev Blog
977 subscribers
13 photos
1 video
68 links
Security audits: @TheOpenDevTeam

Contact: @rends_east, @therealmaloleg or @bazrov
Download Telegram
Я бы хотел писать тесты смарт-контрактов на...
Anonymous Poll
33%
Typescript, как в blueprint
20%
Tolk, по аналогии с foundry
33%
Python
14%
Свой вариант
1
🔥 Как вообще ваше настроение, девы?

Давно не было постов, но скоро будут, писать есть о чем.
@TheOpenDevBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
1🎄11💩77🔥2😁2
🔥 Что для вас девелоперское событие года в TON?

Устроим мини премию @TheOpenDevBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
17💩4🎄3👍2
🔥 Подходит к концу 2025 год.

Спасибо всем, кто был тут с нами, участвовал в дискуссиях, приносил инсайды, ставил реакции. Нас почти 1000!

В новом году желаем вам самых крутых инсайтов, самых крутых профессиональных успехов, и самых крутых идей! Мы постараемся помочь.

🎄 С любовью, ваш
@TheOpenDevBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
1129🎄6💩4
🔥 Nonce в каждый дом.

Практически каждый, кто когда-то писал смарт контракты, знаком с концепцией nonce. Каждый пользователь TON хоть раз, но использовал nonce, встроенный в контракт wallet w5/v4/v3.

Nonce — это (обычно) некоторая информация, которая делает уникальным каждое исполнение подписанного offchain ордера в контракте. Это нужно для того, чтобы контракт нельзя было переиспользовать — например, чтобы нельзя было взять ваш свап на @bidask, отправить его снова, и заставить ваш кошелек произвести свап заново.

Обычно все представляют nonce как одно число, которое увеличивается на 1 при исполнении ордера. Однако такая концепция обладает проблемой (вы, возможно, с ней сталкивались) — в таком случае ордера должны быть обязательно исполнены последовательно один за другим, в строго определённом порядке. На пользовательских кошельках в TON могут пропадать транзакции, если быстро исполнить два действия подряд — второе действие может попасть валидатору перед первым, или же у обоих действий будет одинаковый nonce — тогда одно исполнится, а второе пропадёт, ведь nonce в контракте и ордере не совпадут. Ходят слухи, что это хотят исправить.

Для борьбы с этой проблемой существует множество концепций nonce. Расскажем про некоторые:
⚫️В @bidask в trade account-ах реализована система с 16 параллельными nonce-ами. Кроме числа, пользователь также должен приложить к ордеру номер nonce от 0 до 15 — и именно этот nonce будет увеличен на 1 после исполнения ордера. Это позволяет отправлять в любой последовательности
⚫️В TON существует highload wallet. Он сохраняет query_id пришедшего ордера и дедлайн, когда этот ордер перестанет быть валиден. Как только этот дедлайн истекает, он чистит сохранённые query_id, разумно считая, что все ранее исполненные ордера истекли. Таким образом он поддерживает гигантское количество параллельных транзакций — им пользуются CEX и многие сервисы, централизованно взаимодействующие с блокчейном.
⚫️На EVM блокчейнах есть и более экзотические варианты nonce. Совсем недавно его предложили хранить как двойной map { address => {uint256 => uint256}}. Каждому адресу юзера здесь сопоставляется map {uint256 => uint256}. Когда на такой контракт приходит ордер с nonce, контракт берет map по адресу юзера, и извлекает из от nonce два значения:
word = nonce / X;
bitIndex = nonce % X;
// X -- это некоторое число (256 или 64)

Переменная word является ключом, а bitIndex — индекс бита в числе, который, по задумке, является нулевым битом (после исполнения ордера станет равным 1). Таким образом, nonce позволяет исполнять огромное количество параллельных ордеров, являясь bitmap-ом. Подробнее можно почитать тут.

Вариантов nonce очень много — нужно просто понять, для чего он нужен в конкретном случае.

🎄 С новым годом.
@TheOpenDevBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍7🔥5🤓31