Во всех сообщениях фигурирует ошибка 37, это "Not enough Toncoin". Блокчейн тут не при чем.
@TheOpenDevBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
TON Monitoring
📦 Пользователи нового маркета стикеров Goodies столкнулись с массовыми проблемами при выводе TON, поскольку транзакции зависают в блокчейне.
😁21👍5❤3 3
Мы релизнули DAMM пулы. Факты:
Мемтокены. У нас можно максимально просто запустить свой. Факты:
Один из авторов канала запустил мем самого себя. Важно: никто ничего не обещает, не рекомендует, чистый фан. НИКАКИХ ПЛАНОВ НЕТ.
UPD: в данный момент торговать в DAMM пулах можно только на @bidask.
@TheOpenDevBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
11🔥16 12👍10❤1🕊1
The Open Dev Blog
ВАЖНО: DAMM пулы не залисчены никуда, всё впереди. Если покупать, то только на @bidask, все остальные пулы — вероятный скам. Будьте осторожны, не ведитесь.
🔥5 3❤2🕊1
Пескарь спустя года решил вспомнить про функционал подписок на TON, снял деньги у 400 кошельков, огрёб хейта, после чего возместил всё из своего кармана.
Что такое подписка? Это адрес контракта, который добавляется в storage вашего кошелька. После этого с данного адреса можно совершать действия от вашего wallet контракта (например, отправлять TON за ежемесячную подписку). Это безопасная архитектура, ведь такие плагины списывают средства раз в какой-то промежуток времени.
Что за баг он обнаружил? При отказе от подписки можно было удалить контракт плагина из блокчейна, но не удалить сам адрес подписки из кошелька. Это означало, что если кто-либо заново задеплоит в блокчейн контракт вашей подписки на тот же адрес, то он снова сможет списать с вас деньги. Проверьте свои подписки, энтузиасты уже выкатили тулзу.
Что за баг он проэксплуатировал? Никакой. Бага не было, он просто снял TON за активные подписки, то есть сделал то, что эти подписки должны были делать последние 2 года (но не делали).
Чему нам надо научиться? Репортить баги. Не допускать их невозможно, это нормальная часть разработки, но для здоровой атмосферы в комьюнити нужно соблюдать этику. В своё время мы подали всем хороший пример, как заметили в одной из приваток.
Пескарь красавчик.
@TheOpenDevBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍17 11🎃8❤4🦄2💯1
Ton Core поучаствовала в 3-х апдейтах, которые начинаются или заканчиваются на букву C. Это:
Anonymous Poll
36%
USDC
53%
FunC
64%
tgBTC
59%
Cocoon
26%
СBidaskС
4%
Предположу в комментариях
Недавно мы провели аудит смарт-контрактов проекта webdom. Среди найденных багов один был наивысшего приоритета — Critical. Что мы нашли?
Для многих из видов контрактов (аукционы, продажи доменов, etc) webdom предусмотрели возможность закрытия сделки не только с помощью internal, но и через external сообщение. То есть любой желающий может обратиться на контракт по external интерфейсу и уведомить его, что все условия сделки выполнены, пора ее исполнять. Это крайне полезно, например, для аукционов, когда время аукциона может выйти, но без внешнего вызова смарт-контракт сам не сможет реализовать окончание сделки.
Что такое external сообщение? Когда вы делаете свап на @bidask, ваш wallet контракт посылает internal сообщение от себя к пулу ликвидности. Но сам wallet контракт вызывается external сообщением, которое вы подписываете в кошельке. Любая цепочка транзакций в TON вызвана сообщением, которое приходит извне блокчейна — оно и называется external.
Следующий закономерный вопрос — почему злой Пескарь не может послать на мой wallet контракт 100 миллиардов external сообщений, чтобы сжечь на газ блокчейна мой 1 миллиард TON? Для этого предусмотрена защита — у каждого external вызова есть бесплатные 10000 газа (это 0.004 TON). Этот газ может быть потрачен без списания с аккаунта. Он тратится, например, на проверку подписи wallet контрактом. Если подпись верна, то контракт вызывает инструкцию
acceptExternalMessage. Даже если злой Пескарь будет слать на ваш кошелек сообщения, то все они не будут приниматься контрактом, пока у злого Пескаря не появится ваш приватный ключ.С webdom всё интереснее. Аукцион может завершить кто угодно. Это означает, что контракт всегда принимает external сообщение. В таком случае очень важно, чтобы любое external сообщение обрабатывалось корректно после того, как вызовется
acceptExternalMessage. Иначе можно будет послать сообщение с ошибкой, контракт его примет, потратит свой газ, а аукцион не закроется — и продолжать так можно до бесконечности.Именно в этом и заключалась ошибка webdom. В контрактах аукционов сначала external сообщение принималось, а затем из сообщения считывался queryId — 64 бита информации. Это означало, что можно было составить сообщение с недостаточным количеством бит, и контракт бы падал с ошибкой 9 (Cell underflow), тратя при этом газ. Это крайне критично для, например, аукционов в TON, где сумма за домен хранилась на контракте продажи, и могла быть потрачена полностью на газ. Итогом была бы потеря домена и суммы, которую за него заплатили. Такую ошибку мог бы совершить каждый, это необычный баг, ничьей вины в этом нет.
Баг был крайне оперативно исправлен.
В ближайшую субботу (08.11) один из авторов канала будет разбирать работу контрактов webdom в онлайн формате (там есть интересные нюансы) — вы сможете узнать что-то новое, спросить интересующие вас вопросы. Анонс в @toncishub будет чуть позже, мы приложим его к посту.
@TheOpenDevBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥43 20👍14😁3❤2
TON Status
upcoming release of Major Regulated Stablecoin coming to the TON Ecosystem
Please open Telegram to view this post
VIEW IN TELEGRAM
💯6🤔4👍2❤1
Как многие могли заметить, уже вторая команда (некий Major Stablecoin) после tgBTC для своей реализации требует добавить некое изменение в config блокчейна.
Что такое config? Это глобальный dict, в котором хранится информация о, как ни странно, конфигурации блокчейна. Чтобы ончейн получить gas_limit, gas_price, max_validators и другие в 99% не нужные обычному разработчику параметры, можно брать глобальный config блокчейна, и напрямую его парсить. В стандартной библиотеке FunC для этого есть функция
config_param, в tolk за это отвечает функция blockchain.configParam. До того, как появился отдельный TVM опкод для калькуляции трат на газ (GETGASFEE), stonfi в своей первой версии протокола парсили параметры напрямую.Подробнее о самой структуре config, и что там есть, можно почитать в доке, это полезно.
Судя по github, TON Core всерьез задумались об общедоступной возможности менять config блокчейна. Для этого уже написан контракт на tolk, обновлен governance контракт блокчейна. В тестнете, предположительно, были проведены первые успешные тесты. В отличие от library cell-ов, плата ожидается одноразовая (20-50к TON), и дополнительно оплачивается каждое последующее изменение (10-20к TON). Цены такие, поскольку размер config-а влияет на сложность эмуляции, сильно раздувать его нельзя.
Что думаете?
@TheOpenDevBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍10 10🔥5😱4✍1❤1🤮1
В прошлом посте мы рассказывали про config блокчейна, какая информация там хранится. Одно из полей в конфиге отвечает за все стандартные значения, связанные с тратой газа. Gas price — стоимость 1 единицы газа в nanoTON (на данный момент это 400). Gas limit — максимальное количество газа, которое может потратить контракт (на данный момент это 1 000 000 газа или 0.4 TON).
Параметр gas limit можно поменять внутри контракта с помощью TVM опкода
SETGASLIMIT (в tolk функция setGasLimit), но есть нюанс — только в меньшую сторону. Установить gas limit больше миллиона невозможно.Но нет ничего невозможного! В ноде блокчейна есть отдельные адреса, для которых этот параметр увеличен. Для этого даже устраивали голосование валидаторов (нашлось только это), и это зафиксировано в коде ноды (обратите внимание на номер строки). Как можно заметить по коду, время этих увеличенных параметров вышло 9 месяцев назад, но код пока что остается, хоть и, вероятно, уже не работает (UPD код остаётся для валидации блоков от самого начала блокчейна).
Вот, например, контракт потратил на трансфер 20 000 000 газа (или 83 TON).
Про gas limit понятно, а что насчет gas price? Их есть у нас. В 31 параметре config TON блокчейна есть отдельные адреса, для которых gas price обнулён. Это означает, что эти контракты исполняются бесплатно. Понятно, зачем это нужно — всякие системные контракты лежат в мастерчейне, и их регулярные вызовы (например, tick-tock на Elector контракте) требуют много TON.
Многие задавались вопросом — зачем tgBTC нужно было менять что-то в config блокчейна? Ответ — они обнулили gas_price для своего адреса. Вот пример транзакции tgBTC (не трансфер жетонов), которая не потратила газ (все значения равны 0, мечта!).
Следим.
@TheOpenDevBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥17❤5👍5 2
Я бы хотел писать тесты смарт-контрактов на...
Anonymous Poll
33%
Typescript, как в blueprint
19%
Tolk, по аналогии с foundry
33%
Python
14%
Свой вариант
1
Давно не было постов, но скоро будут, писать есть о чем.
@TheOpenDevBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
1🎄11 7💩6🔥2😁2