<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Aleksei BELOKUR[off]</title><generator>teletype.in</generator><description><![CDATA[Aleksei BELOKUR[off]]]></description><image><url>https://img3.teletype.in/files/ab/12/ab129f59-2476-4acb-bdc9-d7c23ea54e46.png</url><title>Aleksei BELOKUR[off]</title><link>https://teletype.in/@not_under_ton</link></image><link>https://teletype.in/@not_under_ton?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=not_under_ton</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/not_under_ton?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/not_under_ton?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Wed, 07 Oct 2026 23:53:20 GMT</pubDate><lastBuildDate>Wed, 07 Oct 2026 23:53:20 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@not_under_ton/tlvKlVtYhFm</guid><link>https://teletype.in/@not_under_ton/tlvKlVtYhFm?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=not_under_ton</link><comments>https://teletype.in/@not_under_ton/tlvKlVtYhFm?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=not_under_ton#comments</comments><dc:creator>not_under_ton</dc:creator><title>🎰 TON Lottery — разбор смарт-контракта лотереи на Tact</title><pubDate>Wed, 03 Dec 2025 20:41:08 GMT</pubDate><description><![CDATA[В этой статье разберём полноценный смарт-контракт лотереи, написанный на Tact, который:]]></description><content:encoded><![CDATA[
  <p id="RhDJ">В этой статье разберём полноценный смарт-контракт лотереи, написанный на <strong>Tact</strong>, который:</p>
  <ul id="JhCS">
    <li id="poi9">принимает ставки пользователей</li>
    <li id="ZmDR">автоматически завершает раунд при достижении лимита</li>
    <li id="IgRf">случайным образом выбирает победителя</li>
    <li id="G0yh">распределяет призовой фонд</li>
    <li id="9O7g">возвращает остатки средств</li>
    <li id="bTUD">позволяет владельцу обновлять параметры, отменять раунд и выводить баланс</li>
  </ul>
  <p id="EWKL">Контракт реализует полностью автономную логику — от покупки билетов до выплаты выигрыша и комиссии разработчика.</p>
  <hr />
  <h1 id="8wmg">📌 Основные параметры лотереи</h1>
  <p id="wPiX">Контракт использует следующие параметры:</p>
  <ul id="oYUI">
    <li id="QlE0"><strong>minEntryAmount</strong> — минимальная ставка за один слот</li>
    <li id="5POO"><strong>trigerAmount</strong> — сумма для завершения раунда</li>
    <li id="Q0Zk"><strong>devReward</strong> — награда разработчику</li>
    <li id="RFav"><strong>devWallet</strong> — кошелёк разработчика</li>
    <li id="rYVb"><strong>owner</strong> — владелец контракта</li>
    <li id="TvcJ"><strong>maxSlotCount</strong> — рассчитанное количество слотов (trigerAmount / minEntryAmount)</li>
    <li id="AThr"><strong>roundSlotCounter</strong> — сколько слотов уже куплено</li>
    <li id="kRHv"><strong>roundCounter</strong> — номер текущего раунда</li>
  </ul>
  <p id="gz3M">При запуске контракт вычисляет максимальное количество слотов и определяет forward fee сети TON.</p>
  <hr />
  <h1 id="Evq3">🧩 Как работает лотерея?</h1>
  <h3 id="AjTr">1. Пользователь отправляет сообщение <code>&quot;enter_lottery&quot;</code> вместе с TON</h3>
  <p id="aRox">Контракт вызывает функцию:</p>
  <pre id="Tkwy">processEntry(sender, value)
</pre>
  <p id="GbV3">Она рассчитывает, сколько слотов можно купить на отправленную сумму.</p>
  <hr />
  <h3 id="Ho69">2. Покупка слотов</h3>
  <p id="bJRR">Каждый слот стоит <code>minEntryAmount</code>.<br /> Пользователь может купить сразу много слотов одной транзакцией.</p>
  <p id="fjPd">Контракт записывает:</p>
  <ul id="Tc1n">
    <li id="bW7n">количество слотов</li>
    <li id="WGT9">адрес игрока</li>
    <li id="ffa2">общую сумму раунда</li>
  </ul>
  <hr />
  <h3 id="KsxP">3. Завершение раунда</h3>
  <p id="FFll">Когда куплено достаточно слотов:</p>
  <pre id="xqgI">roundSlotCounter &gt;= maxSlotCount
</pre>
  <p id="ijdu">Контракт:</p>
  <ol id="r9Im">
    <li id="Z5xd">проверяет, хватает ли TON на сеть + награду разработчику</li>
    <li id="mq1F">выбирает победителя</li>
    <li id="zlXa">распределяет:</li>
  </ol>
  <ul id="xKtZ">
    <li id="HFnE">devReward → разработчику</li>
    <li id="6Q2U">prizePayment → победителю</li>
  </ul>
  <hr />
  <h3 id="jwnv">4. Возврат остатка</h3>
  <p id="o1dW">Если пользователь отправил больше, чем нужно — контракт делает <em>refund</em>, удерживая только gas и forward fee:</p>
  <pre id="N5L6">refund = valueLeft - gasConsumed() - FORWARD_FEE
</pre>
  <hr />
  <h3 id="6lr9">5. После завершения раунда</h3>
  <p id="4Y4p">Контракт:</p>
  <ul id="tYxJ">
    <li id="NC0P">очищает список игроков</li>
    <li id="Fumj">обнуляет счётчик</li>
    <li id="9ovv">увеличивает roundCounter</li>
    <li id="xcuY">сохраняет победителя</li>
  </ul>
  <p id="ibFE">Полный процесс полностью автоматизирован.</p>
  <hr />
  <h1 id="OMqD">🎲 Механика выбора победителя</h1>
  <p id="4lDM">Контракт использует простую и честную систему:</p>
  <ol id="HTXW">
    <li id="E4vy">Генерируется случайное число:</li>
  </ol>
  <pre id="rrU0">winningSlot = random(1, roundSlotCounter + 1)
</pre>
  <ol id="f88E">
    <li id="LdcF">Идёт перебор всех игроков и их «слотов»:</li>
  </ol>
  <ul id="AGWh">
    <li id="wNZo">если сумма слотов ≥ winningSlot → этот игрок и есть победитель</li>
  </ul>
  <p id="Ybgl">Чем больше слотов покупает игрок — тем выше шанс.</p>
  <hr />
  <h1 id="0Lrs">💸 Распределение средств</h1>
  <h3 id="LmWh">Призовой фонд:</h3>
  <pre id="BWQo">prizePool = min(maxSlotCount * minEntryAmount, myBalance() - storageReserve)
</pre>
  <h3 id="4wXV">Выплата:</h3>
  <pre id="zL5a">prizeAmount = prizePool - devReward - 2 * forwardFee
</pre>
  <h3 id="Fzi6">Итог:</h3>
  <ul id="JWaj">
    <li id="mKeP">победитель получает prizeAmount</li>
    <li id="gzwN">разработчик получает devReward</li>
    <li id="VZlI">контракт сохраняет 0.02 TON резерв на существование</li>
  </ul>
  <hr />
  <h1 id="a9Id">⛔ Админ-функции</h1>
  <p id="toSh">Контракт поддерживает административные команды:</p>
  <h3 id="HCBJ">🔹 Обновление параметров</h3>
  <p id="X0jh">Получает:</p>
  <pre id="ZDA1">UpdateParams{ minEntryAmount, trigerAmount, devReward, devWallet }
</pre>
  <p id="epBB">Но обновление доступно только если раунд ещё не начался:</p>
  <pre id="EKbh">require(players.isEmpty())
</pre>
  <hr />
  <h3 id="xoQD">🔹 Вывод средств владельцем</h3>
  <pre id="9jc9">receive(&quot;withdraw&quot;)
</pre>
  <p id="fMhs">Выводит весь доступный баланс, кроме обязательного резерва и forwardFee.</p>
  <hr />
  <h3 id="GW86">🔹 Отмена раунда</h3>
  <pre id="26ix">receive(&quot;cancelRound&quot;)
</pre>
  <p id="Czan">Контракт:</p>
  <ol id="tkh2">
    <li id="WmNQ">рассчитывает сумму возвратов</li>
    <li id="2VV2">убеждается, что хватает TON</li>
    <li id="fiam">возвращает деньги всем участникам</li>
  </ol>
  <p id="Uvja">Полностью безопасная отмена раунда.</p>
  <hr />
  <h1 id="ZcSG">🧠 Полный код контракта </h1>
  <blockquote id="wWVb"></blockquote>
  <pre id="esJx">import &quot;@stdlib/ownable&quot;;

// сообщение обновления параметров лотереи
message(0x3a8b046a) UpdateParams {
    queryId: Int as uint64;
    minEntryAmount: Int as coins;    // цена 1 слота
    trigerAmount: Int as coins;      // сумма для окончания раунда
    devReward: Int as coins;         // выплата разработчику
    devWallet: Address;              // кошелек разработчика
}

// сообщение деплоя (ничего не делает)
message(0xf23ea34) Deploy {
    queryId: Int as uint64;
}

// обязательный резерв для существования контракта
const STORAGE_RESERVE: Int = ton(&quot;0.02&quot;);

contract Lottery with Ownable {

    id: Int as uint32;                   // ID лотереи
    roundCounter: Int as uint32;         // номер раунда
    minEntryAmount: Int as coins;        // стоимость 1 слота
    maxSlotCount: Int as uint32;         // слотов всего: triggerAmount / minEntryAmount
    owner: Address;                      // владелец
    trigerAmount: Int as coins;          // сумма окончания раунда
    devWallet: Address;                  // кошелек разработчика
    devReward: Int as coins;             // награда разработчику
    roundWinners: map&lt;Int, Address&gt;;     // история победителей
    players: map&lt;Address, Int&gt;;          // адрес игрока → сколько слотов купил
    roundSlotCounter: Int as uint32;     // сколько слотов куплено в текущем раунде
    FORWARD_FEE: Int as coins;           // комиссия сети на отправку

    // ИНИЦИАЛИЗАЦИЯ — расчет слотов, установка параметров
    init(id, minEntryAmount, devWallet, owner, trigerAmount, devReward) {
        self.id = id;
        self.roundCounter = 0;
        self.roundSlotCounter = 0;
        self.minEntryAmount = minEntryAmount;
        self.devWallet = devWallet;
        self.owner = owner;
        self.trigerAmount = trigerAmount;
        self.devReward = devReward;

        self.maxSlotCount = trigerAmount / minEntryAmount;  // слотов в раунде
        self.FORWARD_FEE = getForwardFee(1, 288, false);    // комиссия TON
    }

    receive(deploy: Deploy) {}   // игнор события деплоя
    receive() {}                 // игнор обычных TON без текстов

    // Покупка слотов пользователем
    receive(&quot;enter_lottery&quot;) {
        self.processEntry(context().sender, context().value);
    }

    // Основная логика покупки слотов
    fun processEntry(sender: Address, valueLeftStart: Int) {
        let valueLeft = valueLeftStart;    // сколько TON осталось использовать
        let stopProcessing = false;

        // цикл — покупаем слоты, пока хватает TON
        while (valueLeft &gt;= self.minEntryAmount &amp;&amp; !stopProcessing) {

            // сколько слотов осталось до конца раунда
            let slotsLeft = self.maxSlotCount - self.roundSlotCounter;

            // сколько слотов игрок может купить на свои TON
            let possibleSlots = valueLeft / self.minEntryAmount;

            // покупаем разрешенное количество
            let slotCount = min(possibleSlots, slotsLeft);

            if (slotCount &gt; 0) {
                // предыдущие покупки игрока
                let prev = self.players.exists(sender) ? self.players.get(sender)!! : 0;

                // обновляем количество его слотов
                self.players.set(sender, prev + slotCount);

                // увеличиваем счетчик раунда
                self.roundSlotCounter += slotCount;

                // списываем деньги
                valueLeft -= slotCount * self.minEntryAmount;

                // если раунд заполнен — пытаемся завершить
                if (self.roundSlotCounter &gt;= self.maxSlotCount) {

                    // нужно TON на devReward + 2 FORWARD_FEE
                    let requiredFee = 2 * self.FORWARD_FEE + self.devReward;

                    // хватает ли TON чтобы завершить раунд
                    if (myBalance() &gt;= requiredFee) {
                        self.finishRound();
                        valueLeft -= self.devReward + 2 * self.FORWARD_FEE;
                    }
                }

            } else {
                stopProcessing = true;   // денег недостаточно → выйти
            }
        }

        // Возврат остатка пользователю
        let refund = valueLeft - gasConsumed() - self.FORWARD_FEE;
        let balanceAfter = myBalance() - refund;

        if (refund &gt; 0 &amp;&amp; balanceAfter &gt; 0) {
            self.transferTons(sender, refund, &quot;Refund&quot;);
        }
    }

    // Завершение раунда — выбор победителя и выплаты
    fun finishRound() {

        let winner = self.pickWinner();  // выбираем случайного игрока

        if (winner != null) {
            // сохраняем победителя в истории
            self.roundWinners.set(self.roundCounter, winner!!);

            // общий пул (не забираем storage reserve)
            let prizePool = min(
                self.maxSlotCount * self.minEntryAmount,
                myBalance() - STORAGE_RESERVE
            );

            // приз победителю
            let prizeAmount = prizePool - self.devReward - 2 * self.FORWARD_FEE;

            // комиссия разработчику
            self.transferTons(self.devWallet, self.devReward, &quot;DevReward&quot;);

            // отправляем приз
            self.transferTons(winner!!, prizeAmount, &quot;Prize&quot;);
        }

        // очистка раунда
        self.players = emptyMap();
        self.roundSlotCounter = 0;
        self.roundCounter += 1;
    }

    // Универсальная отправка TON
    fun transferTons(to: Address, value: Int, body: String) {
        send(SendParameters{
            to: to,
            value: value,
            mode: SendPayGasSeparately,   // газ платит контракт
            bounce: false,
            body: body.asComment()        // строка-комментарий для wallet
        });
    }

    // Выбор случайного победителя
    fun pickWinner(): Address? {
        let winningSlot = random(1, self.roundSlotCounter + 1);  // случайный слот

        let current = 0;

        // перебор игроков
        foreach (addr, count in self.players) {
            current += count;
            if (winningSlot &lt;= current)
                return addr; // этот игрок попал в диапазон
        }
        return null;
    }

    // Обновление параметров лотереи
    receive(msg: UpdateParams){
        self.requireOwner();
        require(self.players.isEmpty(), &quot;Round already started&quot;);

        self.minEntryAmount = msg.minEntryAmount;
        self.trigerAmount = msg.trigerAmount;
        self.devReward = msg.devReward;
        self.devWallet = msg.devWallet;
    }

    // Вывод TON владельцем
    receive(&quot;withdraw&quot;) {
        self.requireOwner();

        // доступный остаток (без хранения и комиссии)
        let available = myBalance() - STORAGE_RESERVE - self.FORWARD_FEE;

        require(available &gt; 0, &quot;Nothing to withdraw&quot;);

        self.transferTons(self.owner, available, &quot;Withdrawal&quot;);
    }

    // Отмена раунда → возврат всем участникам
    receive(&quot;cancelRound&quot;) {
        self.requireOwner();

        let totalRefund = 0;
        let playersCount = 0;

        // суммируем возвраты
        foreach (addr, count in self.players) {
            totalRefund += count * self.minEntryAmount;
            playersCount += 1;
        }

        // комиссия отправки каждому игроку
        let totalFee = getForwardFee(1, 288, false) * playersCount;

        let needed = totalRefund + totalFee + gasConsumed();

        require(myBalance() &gt;= needed, &quot;Not enough balance&quot;);

        // возвращаем деньги
        foreach (addr, count in self.players) {
            self.transferTons(addr, count * self.minEntryAmount, &quot;CancelRefund&quot;);
        }

        // сброс
        self.players = emptyMap();
        self.roundSlotCounter = 0;
    }
}
</pre>
  <p id="0jlF"><a href="https://studio.rubeton.app/" target="_blank">https://studio.rubeton.app/</a></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@not_under_ton/vayKJ6uPRgh</guid><link>https://teletype.in/@not_under_ton/vayKJ6uPRgh?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=not_under_ton</link><comments>https://teletype.in/@not_under_ton/vayKJ6uPRgh?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=not_under_ton#comments</comments><dc:creator>not_under_ton</dc:creator><title>Учимся Tact: создаём и разбираем контракт продажи джеттонов в TON</title><pubDate>Wed, 03 Dec 2025 07:08:51 GMT</pubDate><description><![CDATA[Контракт продаёт джеттоны (Rubeton) за TON.
 Ты отправляешь TON → контракт отправляет тебе джеттоны по фиксированному курсу.
 Владелец контракта может забирать накопившиеся TON командой &quot;withdraw&quot;.]]></description><content:encoded><![CDATA[
  <h1 id="IctZ">📘 Общая идея контракта</h1>
  <p id="TI2S">Контракт <strong>продаёт джеттоны </strong> за TON.<br /> Ты отправляешь TON → контракт отправляет тебе джеттоны по фиксированному курсу.<br /> Владелец контракта может забирать накопившиеся TON командой <code>&quot;withdraw&quot;</code>.</p>
  <hr />
  <h1 id="ImnT">📌 Разбор кода по частям</h1>
  <hr />
  <h1 id="PHKa">1. Импорты</h1>
  <pre id="joQg">import &quot;@stdlib/deploy&quot;;
import &quot;@stdlib/ownable&quot;;
</pre>
  <ul id="yR7i">
    <li id="R4TC"><strong>Deployable</strong> — позволяет удобно деплоить контракт.</li>
    <li id="7QoJ"><strong>Ownable</strong> — добавляет механику владельца (owner) + проверку <code>requireOwner()</code>.</li>
  </ul>
  <hr />
  <h1 id="Ktke">2. Объявление контракта</h1>
  <pre id="aKyp">contract RubetonSeller with Deployable, Ownable {
    owner: Address;
    jetton_wallet: Address;
</pre>
  <p id="xTPW">Контракт хранит:</p>
  <ul id="TA4z">
    <li id="7b0M"><strong>owner</strong> — владелец, который может делать <code>withdraw</code>.</li>
    <li id="FT04"><strong>jetton_wallet</strong> — адрес кошелька джеттона, на который нужно отправлять запрос «выпустить/отправить» джеттоны покупателю.</li>
  </ul>
  <hr />
  <h1 id="Icd8">3. Константы</h1>
  <pre id="YufQ">const TokenCourse: Int = 2;
const MinTonForStorage: Int = ton(&quot;0.01&quot;);
</pre>
  <h3 id="mypr">TokenCourse = 2</h3>
  <p id="oYCh">Это курс:<br /> <strong>1 TON → 2 Rubeton (джеттона)</strong>.</p>
  <h3 id="J6iN">MinTonForStorage = 0.01 TON</h3>
  <p id="NbnQ">Это минимальный остаток TON, который всегда должен лежать на контракте.<br /> Он нужен, чтобы контракт не &quot;умер&quot; от нехватки газа.</p>
  <hr />
  <h1 id="Ulin">4. init — код инициализации</h1>
  <pre id="erXK">init(jetton_code: Cell, jetton_master: Address) {
    self.owner = address(&quot;UQCDnkR1NOwZUzARCLDAY5Z6YuD1k_LVs5iUVUBOiuUJKtOI&quot;);
</pre>
  <p id="ldKw">Здесь вручную прописывается <strong>owner</strong>, владелец контракта.</p>
  <hr />
  <h2 id="oy5g">🧩 Создание Jetton-кошелька контракта</h2>
  <p id="XGy1">Контракт сам создаёт свой Jetton Wallet.</p>
  <pre id="Axph">let jetton_data: Cell = beginCell()
    .storeCoins(0)
    .storeAddress(myAddress())
    .storeAddress(jetton_master)
    .storeRef(jetton_code)
    .endCell();
</pre>
  <p id="Qyhi">Собирается «данные» для кошелька:</p>
  <ul id="88Jg">
    <li id="xyp8">баланс — 0</li>
    <li id="xRq3">владелец — сам контракт</li>
    <li id="iFuQ">мастер-адрес джеттона</li>
    <li id="Atjz">код кошелька</li>
  </ul>
  <hr />
  <pre id="8qio">let jetton_wallet: Address = contractAddressExt(0, jetton_code, jetton_data);
self.jetton_wallet = jetton_wallet;
</pre>
  <ul id="ke0M">
    <li id="5l7W">высчитывается адрес Jetton Wallet контракта</li>
    <li id="BQh2">сохраняется в переменной <code>jetton_wallet</code></li>
  </ul>
  <p id="aRKU">Теперь контракт знает, <strong>куда ему отправлять команду на начисление джеттонов</strong>.</p>
  <hr />
  <h1 id="pUQD">5. Метод receive(&quot;withdraw&quot;) — вывод TON владельцем</h1>
  <p id="NZgj">Этот метод вызывается, если отправить в контракт текстовое сообщение <code>&quot;withdraw&quot;</code>.</p>
  <pre id="Ax7e">receive(&quot;withdraw&quot;) {
    let need_to_withdraw = myBalance() - context().value - self.MinTonForStorage;
</pre>
  <ul id="tO3x">
    <li id="BzTy"><code>myBalance()</code> — сколько TON на контракте</li>
    <li id="y4ij"><code>context().value</code> — сколько TON пришло с этим сообщением</li>
    <li id="FIGD">вычитаем минимальный остаток</li>
  </ul>
  <p id="95mp">Получаем: <strong>сколько TON можно вывести, не затронув 0.01 TON для хранения</strong>.</p>
  <hr />
  <h3 id="cqcw">Проверки</h3>
  <pre id="iLZa">self.requireOwner();
require(myBalance() &gt;= need_to_withdraw, &quot;balance muss be bigger than withdraw amount&quot;);
</pre>
  <ul id="nIth">
    <li id="RIEj">выводить может только владелец</li>
    <li id="Rfjq">проверяем, что баланс вообще позволяет вывести</li>
  </ul>
  <hr />
  <h3 id="KW1G">Отправка TON владельцу</h3>
  <pre id="FnYC">send(SendParameters{
    to: sender(),
    value: need_to_withdraw,
    mode: SendIgnoreErrors + SendRemainingValue,
    bounce: true
});
</pre>
  <ul id="LvNi">
    <li id="opd4">средства отправляются тому, кто вызвал <code>&quot;withdraw&quot;</code> (владельцу)</li>
    <li id="fYZC"><code>SendRemainingValue</code> отдаёт всё указанное количество</li>
    <li id="Uf9B"><code>SendIgnoreErrors</code> игнорирует ошибки доставки</li>
  </ul>
  <hr />
  <h1 id="RfQ2">6. receive() — обработка обычного платежа TON (покупка джеттонов)</h1>
  <p id="O959">Этот метод вызывается, когда кто-то просто отправляет TON на контракт <strong>без текста</strong>.</p>
  <pre id="clJb">let need_to_send: Int = context().value * self.TokenCourse;
</pre>
  <p id="LfEC">Считается, сколько джеттонов нужно отправить покупателю:</p>
  <p id="brGu"><strong>TON × курс = количество джеттонов</strong></p>
  <p id="WxCb">Например:<br /> Отправили 5 TON → курс 2 → получишь 10 Rubeton.</p>
  <hr />
  <h2 id="wXJB">🧩 Формируем тело сообщения для Jetton Wallet</h2>
  <pre id="URR2">let send_body: Cell = beginCell()
    .storeUint(0xf8a7ea5, 32)     // jetton transfer opcode
    .storeUint(0, 64)             // query_id
    .storeCoins(need_to_send)     // amount
    .storeAddress(sender())       // recipient
    .storeAddress(myAddress())    // response destination
    .storeUint(0, 1)
    .storeCoins(1)                // forward TON amount
    .storeUint(0, 1)
    .endCell();
</pre>
  <p id="ASEN">Это стандартное тело сообщения <strong>“transfer”</strong> для джеттонов.</p>
  <p id="LCLT">Смысл:</p>
  <ul id="7cqy">
    <li id="JFZh">opcode: <code>0xf8a7ea5</code> — команда «отправить джеттоны»</li>
    <li id="P7iX">отправляем <code>need_to_send</code></li>
    <li id="TDQS">отправляем их отправителю TON</li>
    <li id="XIRO">пересылаем 1 нанотон вперёд чтобы Jetton Wallet смог выслать внутреннее сообщение</li>
  </ul>
  <hr />
  <h2 id="1qDu">Отправляем сообщение в Jetton Wallet</h2>
  <pre id="1JAh">send(SendParameters{
    to: self.jetton_wallet,
    value: 0,
    mode: SendIgnoreErrors + SendRemainingValue,
    bounce: true,
    body: send_body
});
</pre>
  <p id="Bx6r">Контракт отправляет команду Jetton Wallet:</p>
  <p id="Clcm"><strong>«Переведи N джеттонов пользователю»<br /><br /></strong></p>
  <h2 id="Bgd0">💻 <strong>Полный код с комментариями</strong></h2>
  <pre id="MyVn">import &quot;@stdlib/deploy&quot;;
import &quot;@stdlib/ownable&quot;;

// Контракт-продавец джеттонов Rubeton
contract RubetonSeller with Deployable, Ownable {

    owner: Address;          // владелец контракта
    jetton_wallet: Address;  // адрес кошелька контракта для отправки джеттонов

    // Курс продажи: 1 TON = 2 RUBETON
    const TokenCourse: Int = 2;

    // Минимальный TON, который должен оставаться на контракте
    const MinTonForStorage: Int = ton(&quot;0.01&quot;);

    // Инициализация контракта
    init(jetton_code: Cell, jetton_master: Address) {

        // Адрес владельца жёстко прописывается
        self.owner = address(&quot;UQCDnkR...JKtOI&quot;);

        // Формируем данные Jetton Wallet для вычисления адреса
        let jetton_data = beginCell()
            .storeCoins(0)               // баланс кошелька = 0
            .storeAddress(myAddress())   // владелец — сам контракт
            .storeAddress(jetton_master) // мастер-адрес Jetton
            .storeRef(jetton_code)       // код кошелька
            .endCell();

        // Вычисляем адрес Jetton Wallet
        let jetton_wallet = contractAddressExt(0, jetton_code, jetton_data);

        // Сохраняем адрес Jetton Wallet
        self.jetton_wallet = jetton_wallet;
    }

    // ВЫВОД ТОN владельцем
    receive(&quot;withdraw&quot;) {

        // Сколько TON можно вывести, оставив минимум для работы
        let need_to_withdraw =
            myBalance() - context().value - self.MinTonForStorage;

        self.requireOwner(); // выводить может только владелец

        require(
            myBalance() &gt;= need_to_withdraw,
            &quot;not enough balance&quot;
        );

        // Отправляем TON владельцу
        send(SendParameters{
            to: sender(),
            value: need_to_withdraw,
            mode: SendIgnoreErrors + SendRemainingValue,
            bounce: true
        });
    }

    // ПОКУПКА ДЖЕТТОНОВ: обычный перевод TON без текста
    receive() {

        // Сколько джеттонов нужно отправить покупателю
        let need_to_send = context().value * self.TokenCourse;

        // Формируем тело сообщения Jetton Transfer
        let send_body = beginCell()
            .storeUint(0xf8a7ea5, 32)   // opcode: transfer
            .storeUint(0, 64)           // query_id
            .storeCoins(need_to_send)   // amount — сколько джеттонов отправить
            .storeAddress(sender())     // адрес покупателя
            .storeAddress(myAddress())  // адрес контракта
            .storeUint(0, 1)
            .storeCoins(1)              // forward fee
            .storeUint(0, 1)
            .endCell();

        // Команда Jetton Wallet: отправить пользователю джеттоны
        send(SendParameters{
            to: self.jetton_wallet,
            value: 0,
            mode: SendIgnoreErrors + SendRemainingValue,
            bounce: true,
            body: send_body
        });
    }
}
</pre>
  <hr />
  <h1 id="AsrI">🎯 <strong>Итоговое описание</strong></h1>
  <p id="dmlW">Контракт RubetonSeller реализует простую и надёжную систему продажи джеттонов:</p>
  <ul id="RtAZ">
    <li id="MIna">Пользователь отправляет TON → контракт автоматически пересчитывает количество джеттонов.</li>
    <li id="XWd7">Контракт формирует Jetton Transfer и передаёт его в Jetton Wallet.</li>
    <li id="IIbK">Jetton Wallet отправляет пользователю нужное количество джеттонов.</li>
    <li id="fzaZ">Владелец может вывести накопившиеся TON, но контракт оставляет минимальный резерв для хранения (0.01 TON).</li>
    <li id="mokZ">Курс задаётся константой <code>TokenCourse</code>.</li>
  </ul>
  <p id="kPIn">🎯 РЕЗЮМЕ ПРОСТЫМИ СЛОВАМИ</p>
  <ol id="vpIq">
    <li id="RONM">Контракт принимает TON и продаёт за них джеттоны.</li>
    <li id="ChOi">Курс фиксированный: <strong>1 TON = 2 джеттона</strong>.</li>
    <li id="CmGK">Покупатель просто отправляет TON на контракт → получает джеттоны.</li>
    <li id="RNk5">Контракт вычисляет адрес своего Jetton Wallet при инициализации.</li>
    <li id="beRP">Владелец может снять TON командой <code>&quot;withdraw&quot;</code>, но всегда останется 0.01 TON для хранения.<br /><br /><a href="https://studio.rubeton.app/" target="_blank">https://studio.rubeton.app/</a></li>
  </ol>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@not_under_ton/je_xrlGG6zm</guid><link>https://teletype.in/@not_under_ton/je_xrlGG6zm?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=not_under_ton</link><comments>https://teletype.in/@not_under_ton/je_xrlGG6zm?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=not_under_ton#comments</comments><dc:creator>not_under_ton</dc:creator><title>Институциональные варианты использования TON: создание финансовой инфраструктуры следующего поколения</title><pubDate>Tue, 25 Nov 2025 16:38:11 GMT</pubDate><description><![CDATA[Институты уже не только изучают блокчейн в теории — они начали внедрять эту технологию в производство. От международных денежных переводов до токенизированных казначейских обязательств — реальные финансовые решения переходят на блокчейн, чтобы использовать уникальное сочетание масштабируемости, производительности и прозрачности.]]></description><content:encoded><![CDATA[
  <h1 id="WOHi"><strong>📘 </strong></h1>
  <h2 id="hUAn"><strong>Введение</strong></h2>
  <p id="q53U">Институты уже не только изучают блокчейн в теории — они начали внедрять эту технологию в производство. От международных денежных переводов до токенизированных казначейских обязательств — реальные финансовые решения переходят на блокчейн, чтобы использовать уникальное сочетание масштабируемости, производительности и прозрачности.</p>
  <p id="mfRC">Блокчейн TON стал предпочтительным решением уровня 1 для предприятий и финтех-компаний, которым нужна масштабируемая, экономичная и удобная инфраструктура. Предлагая практически мгновенную финализацию транзакций, минимальные комиссии и встроенную интеграцию с более чем 1 млрд пользователей Telegram, TON обладает потенциалом объединить традиционные финансы и Web3 в невиданных масштабах.</p>
  <p id="xBZH">Эта статья описывает, как институциональные игроки уже используют TON для платежей, выпуска стейблкоинов, токенизации активов и встроенных финансов.</p>
  <hr />
  <h2 id="EuUT"><strong>Эмиссия и платежи стейблкоинов: USDt на TON</strong></h2>
  <p id="VkFb">Запуск USDt на TON в апреле 2024 года стал важной вехой. К декабрю 2024 года объем авторизованной эмиссии превысил <strong>1,43 млрд USD</strong>, что вывело TON в топ-5 блокчейнов по активности USDt.</p>
  <h3 id="ZwMT"><strong>Организации используют USDt на TON для:</strong></h3>
  <ul id="c8zn">
    <li id="WAiF"><strong>Трансграничных переводов</strong> — отправка долларов за секунды по минимальной цене.</li>
    <li id="qB7X"><strong>Торговых и казначейских операций</strong> — мгновенные финальные расчёты по всему миру.</li>
    <li id="p40I"><strong>Интеграции в розничных сервисах</strong> — через Telegram-кошельки (Wallet in Telegram, Tonkeeper, MyTonWallet).</li>
  </ul>
  <p id="T167">USDt на TON — это полностью цифровая долларовая платёжная система, доступная сотням миллионов пользователей Telegram. Она снижает задержки, контрагентские риски и операционные затраты.</p>
  <hr />
  <h2 id="TChj"><strong>Встроенные финансы и токенизация внутри Telegram</strong></h2>
  <p id="mxoi">TON делает возможными финансовые продукты там, где уже находятся пользователи: прямо внутри Telegram.</p>
  <p id="yYfz">Компании могут выпускать, распространять и управлять цифровыми активами напрямую в мессенджере — без регистрации на сторонних сайтах и установки новых приложений.</p>
  <p id="QrTF">Ключевые инструменты:</p>
  <ul id="0xfx">
    <li id="f7mn"><strong>TON Wallet</strong> — отправка средств по username.</li>
    <li id="PDWX"><strong>Storm Trade</strong> — торговля криптой и традиционными активами.</li>
    <li id="rLkv"><strong>Notcoin</strong> — пример SocialFi на миллионы пользователей.</li>
  </ul>
  <h3 id="5vCw"><strong>Открываемые возможности:</strong></h3>
  <ul id="eOTr">
    <li id="3o9I">токенизированные системы лояльности;</li>
    <li id="Javs">встроенные подписки и платежи;</li>
    <li id="zwLT">микроэкономики и монетизация создателей.</li>
  </ul>
  <p id="GRrd">Для брендов Web2 это шанс привести аудиторию в Web3 без сложностей крипто-онбординга.</p>
  <hr />
  <h2 id="C1Mn"><strong>DeFi и институциональные казначейские решения</strong></h2>
  <p id="hiRP">DeFi-экосистема TON быстро взрослеет: от розничных экспериментов — к управлению ликвидностью институционального уровня.</p>
  <p id="Fyzz">Платформы <strong>STON.fi</strong> и <strong>DeDust</strong> предоставляют:</p>
  <ul id="1E8K">
    <li id="1slv">обмены,</li>
    <li id="ri9j">пулы ликвидности,</li>
    <li id="mnxp">доходность по стейблкоинам,</li>
    <li id="w7Ae">прозрачные on-chain расчёты.</li>
  </ul>
  <h3 id="SzMw"><strong>Предприятия могут использовать TON DeFi для:</strong></h3>
  <ul id="BtCa">
    <li id="JSFP">размещения резервов в пулах ликвидности;</li>
    <li id="zGHB">получения доходности на простаивающий капитал;</li>
    <li id="Qi9C">поддержки ранней ликвидности проектов TON.</li>
  </ul>
  <p id="oY1z">Интерфейсы Wallet in Telegram и Tonkeeper упрощают доступ, а базовые протоколы обеспечивают функциональность казначейского уровня.</p>
  <hr />
  <h2 id="EzSM"><strong>Доходные стейблкоины: USDe и tsUSDe от Ethena</strong></h2>
  <p id="DNI8">Интеграция <strong>Ethena USDe/tsUSDe</strong> в апреле 2025 года добавила в TON мощный институциональный инструмент.</p>
  <p id="0vaR">Это синтетические долларовые активы, генерирующие доходность без рыночной волатильности — благодаря дельта-нейтральной стратегии Ethena.</p>
  <p id="oyhD"><strong>tsUSDe</strong> работает как токенизированный фонд денежного рынка:</p>
  <ul id="Q4zH">
    <li id="QW5S">стабильная цена,</li>
    <li id="6GhP">постоянный on-chain доход.</li>
  </ul>
  <h3 id="Eogc"><strong>Идеально подходит для:</strong></h3>
  <ul id="8Bbf">
    <li id="zQUG">управления казначейством;</li>
    <li id="0HPO">платежей с доходностью;</li>
    <li id="Jyem">низкорисковых DeFi-портфелей.</li>
  </ul>
  <p id="1uFL">Появление Ethena усиливает позиционирование TON как полноценной финансовой экосистемы.</p>
  <hr />
  <h2 id="bMWh"><strong>Институциональная готовность: соответствие, опека и масштаб</strong></h2>
  <p id="wtYA">TON обеспечивает ключевые элементы, необходимые институционалам:</p>
  <ul id="J8Ut">
    <li id="0pcW">прозрачные и проверяемые реестры;</li>
    <li id="VR8D">интеграции с регулируемыми кастодианами;</li>
    <li id="89DL">встроенные механизмы KYC и контроля доступа;</li>
    <li id="ZqYx">совместимость с Ethereum-активами.</li>
  </ul>
  <p id="MReT">В сочетании с финализацией &lt;1 секунды и минимальными комиссиями TON становится оптимальным выбором для регулируемых финтех-компаний, платёжных сервисов и управляющих активами.</p>
  <hr />
  <h2 id="OGqr"><strong>Заключение</strong></h2>
  <p id="n9Ly">Институциональная фаза внедрения блокчейна уже началась — и TON находится в её центре.<br />От стейблкоинов и токенизированных активов до встроенных финансов и доходных продуктов — предприятия уже используют TON для создания финансовых решений нового поколения.</p>
  <p id="pInD">TON сочетает производительность уровня институционалов и доступность для массового рынка — более миллиарда пользователей в одном сообщении.</p>
  <hr />
  <h1 id="S7O4"><strong>📘 Institutional Adoption of TON: Stablecoins, Tokenization &amp; Embedded Finance</strong></h1>
  <p id="dRWo">(Английская часть — точный, красиво оформленный эквивалент русской)</p>
  <h2 id="rQD2"><strong>Introduction</strong></h2>
  <p id="c7pm">Institutions are no longer exploring blockchain only in theory—they have begun deploying it in production. From global remittances to tokenized treasuries, real-world financial use cases are moving on-chain to leverage blockchain scalability, performance, and transparency.</p>
  <p id="CaLc">TON Blockchain has emerged as a preferred Layer 1 for enterprises and fintechs seeking scalable, cost-efficient, and user-friendly infrastructure. With near-instant finality, negligible fees, and native access to 1bn+ Telegram users, TON has the potential to bridge traditional finance and Web3 at unprecedented scale.</p>
  <p id="kKp7">This article highlights how institutional players are already using TON across payments, stablecoin issuance, asset tokenization, and embedded finance.</p>
  <hr />
  <h2 id="Lpe7"><strong>Stablecoin Issuance and Payments: USDt on TON</strong></h2>
  <p id="gR8h">The launch of USDt on TON in April 2024 marked a major milestone. By December 2024, authorised issuance surpassed <strong>$1.43 billion</strong>, placing TON among the top five chains for USDt activity.</p>
  <h3 id="bi0p"><strong>Institutions now use USDt on TON for:</strong></h3>
  <ul id="VQBa">
    <li id="wytY"><strong>Cross-border remittances</strong> — dollar transfers in seconds at minimal cost.</li>
    <li id="54oi"><strong>Merchant &amp; treasury operations</strong> — instant, final global settlement.</li>
    <li id="glSF"><strong>Retail integration</strong> — through Telegram-native wallets (Wallet in Telegram, Tonkeeper, MyTonWallet).</li>
  </ul>
  <p id="C9ay">USDt on TON acts as a fully digital dollar rail for enterprises, reducing latency, counterparty risk, and operational overhead.</p>
  <hr />
  <h2 id="QToF"><strong>Embedded Finance and Tokenization Inside Telegram</strong></h2>
  <p id="lTq0">TON enables financial products to exist directly inside Telegram—where users already are.</p>
  <p id="mbDw">Businesses can issue, distribute, and manage digital assets natively within the messenger, eliminating external onboarding friction.</p>
  <p id="gfC5">Key components include:</p>
  <ul id="1zWO">
    <li id="4ZtO"><strong>TON Wallet</strong> — transfers using only a Telegram username.</li>
    <li id="bFvv"><strong>Storm Trade</strong> — trading crypto and traditional assets.</li>
    <li id="yfMO"><strong>Notcoin</strong> — a SocialFi phenomenon with gaming, rewards, and community.</li>
  </ul>
  <h3 id="8KcF"><strong>This model enables:</strong></h3>
  <ul id="PVzx">
    <li id="e66L">tokenized loyalty and tipping;</li>
    <li id="m1Fh">in-app subscriptions and commerce;</li>
    <li id="w2Xs">token-based micro-economies and creator monetization.</li>
  </ul>
  <p id="FDZh">For Web2 brands, it offers a smooth on-ramp into Web3 via a familiar interface.</p>
  <hr />
  <h2 id="R6hw"><strong>DeFi and Institutional Treasury Solutions</strong></h2>
  <p id="aRau">TON’s DeFi landscape is rapidly maturing. Platforms like <strong>STON.fi</strong> and <strong>DeDust</strong> now deliver:</p>
  <ul id="bdGl">
    <li id="XiBZ">swaps,</li>
    <li id="N4TT">liquidity pools,</li>
    <li id="2IBE">stablecoin yield products,</li>
    <li id="s7MV">transparent on-chain settlement.</li>
  </ul>
  <h3 id="LOAZ"><strong>Enterprises can use TON DeFi to:</strong></h3>
  <ul id="dJ0u">
    <li id="hSYd">deploy corporate reserves;</li>
    <li id="a5WZ">earn short-term on-chain yield;</li>
    <li id="WaU0">support early-stage TON-native liquidity.</li>
  </ul>
  <p id="wrGm">User-friendly wallets simplify access while protocols provide treasury-grade capabilities.</p>
  <hr />
  <h2 id="82R0"><strong>Yield-Bearing Stablecoins: Ethena&#x27;s USDe and tsUSDe</strong></h2>
  <p id="ZbOa">The April 2025 integration of <strong>Ethena USDe and tsUSDe</strong> brought yield-bearing synthetic dollars to TON.</p>
  <p id="ABXs">Ethena achieves stable yield through a delta-neutral hedging strategy that offsets crypto price movements.</p>
  <p id="3ZJR"><strong>tsUSDe</strong> behaves like a tokenized money market fund:</p>
  <ul id="ggPJ">
    <li id="DTsX">stable value,</li>
    <li id="YnCQ">steady on-chain yield.</li>
  </ul>
  <h3 id="y1Ln"><strong>Use cases include:</strong></h3>
  <ul id="6x3R">
    <li id="ALkg">on-chain treasury management;</li>
    <li id="Y6bV">yield-bearing payment rails;</li>
    <li id="bUc5">low-risk institutional DeFi exposure.</li>
  </ul>
  <p id="H6WB">Ethena’s arrival highlights TON’s evolution into a full-stack financial ecosystem.</p>
  <hr />
  <h2 id="VTvd"><strong>Institutional Readiness: Compliance, Custody, Scale</strong></h2>
  <p id="8SYz">TON provides critical infrastructure components required for institutional adoption:</p>
  <ul id="Mj21">
    <li id="8HKY">transparent, auditable ledgers;</li>
    <li id="UGAh">integrations with regulated custodians;</li>
    <li id="R93p">native KYC and access control options;</li>
    <li id="7eTS">cross-chain compatibility with Ethereum-based systems.</li>
  </ul>
  <p id="TYVL">Combined with sub-second finality and ultra-low fees, these features make TON ideal for regulated fintechs, payment platforms, and asset managers entering Web3.</p>
  <hr />
  <h2 id="mLJm"><strong>Conclusion</strong></h2>
  <p id="0mTl">The institutional phase of blockchain adoption has arrived—and TON stands at its center.</p>
  <p id="3YF5">From stablecoins and tokenized assets to embedded finance and yield-bearing instruments, enterprises are already using TON to build next-generation financial applications.</p>
  <p id="BqAt">For builders seeking real users—not just wallets—TON offers a rare mix of institutional performance and mass-market reach. With over a billion users only one message away, the next wave of institutional innovation is already forming on TON.</p>
  <p id="s7eG"><a href="https://studio.rubeton.app/" target="_blank">https://studio.rubeton.app/</a></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@not_under_ton/6-RhqiSmErT</guid><link>https://teletype.in/@not_under_ton/6-RhqiSmErT?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=not_under_ton</link><comments>https://teletype.in/@not_under_ton/6-RhqiSmErT?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=not_under_ton#comments</comments><dc:creator>not_under_ton</dc:creator><title>How to Test a Jetton After Launch on TON Mainnet</title><pubDate>Fri, 14 Nov 2025 11:08:25 GMT</pubDate><description><![CDATA[When you launch a Jetton on TON mainnet, the contract is no longer just code in a repo — it’s a live asset that real people can trade, store, and lose money with. Jettons are the fungible token standard on TON (similar to ERC-20 on Ethereum), defined by the TEP-74 standard and implemented through a master contract plus per-user wallet contracts.]]></description><content:encoded><![CDATA[
  <p id="ZQhw">When you launch a Jetton on TON mainnet, the contract is no longer just code in a repo — it’s a live asset that real people can trade, store, and lose money with. Jettons are the fungible token standard on TON (similar to ERC-20 on Ethereum), defined by the TEP-74 standard and implemented through a master contract plus per-user wallet contracts.</p>
  <p id="rETU">Even if you did your homework on testnet, <strong>post-launch testing on mainnet</strong> is critical. In this article we’ll walk through how to test a newly launched Jetton in production: what to check, how to structure the work with your testers, and how to turn testing into a growth loop rather than pure cost.</p>
  <hr />
  <h3 id="PtzU">1. What are we actually testing on mainnet?</h3>
  <p id="irYs">On mainnet, your goal is not just “does the contract work” but:</p>
  <ul id="AGXP">
    <li id="Uod6"><strong>Correctness</strong> – transfers, balances, supply, allowances (if any) behave exactly as designed.</li>
    <li id="iLDz"><strong>Integrations</strong> – wallets, explorers, and DEXes all display and handle your Jetton correctly.</li>
    <li id="ZgoC"><strong>Economics</strong> – fees are sane, liquidity behaves as expected, users don’t get rekt by UX traps.</li>
    <li id="nNgJ"><strong>Safety</strong> – no obvious permission issues, minting rules, or admin powers that can be abused.</li>
  </ul>
  <p id="GwwW">Because TON is a high-throughput L1 with low fees and deep Telegram integration, users tend to move fast and touch your token from many interfaces: mobile wallets, Telegram mini-apps, DEXes and bots.</p>
  <p id="nYQL">That’s why your mainnet test plan must go beyond “unit tests + one swap on a DEX”.</p>
  <hr />
  <h3 id="bTC4">2. Prepare your testing environment</h3>
  <p id="Srqv">Before you and your QA team hit mainnet:</p>
  <ol id="cp2B">
    <li id="95e3"><strong>Use small, sacrificial balances</strong></li>
    <ul id="fZJ1">
      <li id="ZCxs">Fund a few wallets with small amounts of TON and your Jetton.</li>
      <li id="n8B9">Assume every TON you send into testing is potentially gone forever.</li>
    </ul>
    <li id="K6Fi"><strong>Pick a set of wallets and explorers</strong><br />At minimum, test with:</li>
    <ul id="h0yd">
      <li id="t5KM">2–3 popular wallets (e.g., Tonkeeper, Telegram’s TON wallet / TON Space, other ecosystem wallets).</li>
      <li id="0V1u">1–2 block explorers that support Jettons.</li>
    </ul>
    <li id="1pGr"><strong>Prepare tracking &amp; communication</strong></li>
    <ul id="mz9S">
      <li id="vrb9">GitHub Issues, Notion, or a Telegram group with pinned formats.</li>
      <li id="OYFz">A simple bug/feedback template (who, what, how to reproduce, tx link, screenshot).</li>
    </ul>
  </ol>
  <hr />
  <h3 id="uHW5">3. Core test area #1: Transfers &amp; balances</h3>
  <p id="DGwP">This is the “heartbeat” of your Jetton. If transfers or balances are off, nothing else matters.</p>
  <p id="68Yo"><strong>Scenarios to test:</strong></p>
  <ul id="qSkZ">
    <li id="zuDX"><strong>Simple transfer</strong></li>
    <ul id="XDXf">
      <li id="WTEG">Send a small amount of Jetton from Wallet A to Wallet B.</li>
      <li id="XsTQ">Verify:</li>
      <ul id="2zyK">
        <li id="bPlL">balances in both wallets,</li>
        <li id="mpD5">balances in the explorer (by checking user jetton-wallet contract),</li>
        <li id="lfIc">any “excess TON” behavior is as expected (no weird extra refunds).</li>
      </ul>
    </ul>
    <li id="G4z3"><strong>First-time receiver</strong></li>
    <ul id="81Ml">
      <li id="LkMS">Send Jetton to an address that hasn’t interacted with the Jetton before.</li>
      <li id="WR3E">Check that the jetton-wallet contract is deployed correctly and the balance shows up.</li>
    </ul>
    <li id="TH19"><strong>Too little / too much</strong></li>
    <ul id="0LvU">
      <li id="2K53">Try sending <strong>more Jetton than you own</strong> → ensure transaction is rejected or fails clearly.</li>
      <li id="GO50">Try sending <strong>tiny fractions</strong> according to your decimals (e.g., 0.000001) and see how wallets display it.</li>
    </ul>
    <li id="uymD"><strong>Multiple sequential transfers</strong></li>
    <ul id="HY2I">
      <li id="F1iz">Do several transfers in a row to see if balances and explorers keep up and no state desync appears.</li>
    </ul>
  </ul>
  <hr />
  <h3 id="QA50">4. Core test area #2: Wallet &amp; explorer display</h3>
  <p id="PvxF">TON’s Jetton standard defines how to retrieve metadata like name, symbol, decimals, and total supply from the master contract.</p>
  <p id="InuW">You want to confirm that ecosystem tools interpret this correctly.</p>
  <p id="wQLP">Check in each wallet + explorer:</p>
  <ol id="YSse">
    <li id="ZgZV"><strong>Name and symbol</strong></li>
    <ul id="1Kaw">
      <li id="VnWp">No broken characters, no random truncation, no collision with other tokens.</li>
    </ul>
    <li id="nH6d"><strong>Decimals &amp; formatting</strong></li>
    <ul id="E1Ko">
      <li id="gG1A">Amounts look natural to humans.</li>
      <li id="vYwO">1 Jetton is displayed as “1”, not “0.000000000001” or “1000000000000”.</li>
    </ul>
    <li id="2lh1"><strong>Icon &amp; metadata</strong></li>
    <ul id="IA5M">
      <li id="SqpX">If your Jetton includes an icon / metadata URI that wallets use, confirm it loads and caches correctly.</li>
      <li id="iTHP">Check light/dark themes if relevant.</li>
    </ul>
    <li id="gmJG"><strong>Network separation</strong></li>
    <ul id="ysR9">
      <li id="lnmN">Wallet clearly labels the token as <strong>mainnet</strong>, not testnet or some custom network.</li>
    </ul>
  </ol>
  <p id="BbBJ">If any wallet shows your Jetton incorrectly, capture:</p>
  <ul id="QN5d">
    <li id="OMtt">wallet version,</li>
    <li id="Uifv">screenshots,</li>
    <li id="4vme">address of the master contract,</li>
    <li id="tcWM">and open communication with the wallet team if needed.</li>
  </ul>
  <hr />
  <h3 id="p23D">5. Core test area #3: DEX interaction &amp; liquidity</h3>
  <p id="wgf7">Most Jettons live or die on DEX liquidity. On TON, DEXes like STON.fi and others use AMM pools and natively support Jettons.</p>
  <p id="dcfX">If you created a pool for your Jetton:</p>
  <h4 id="hDGn">5.1 Swaps</h4>
  <p id="Yf3J">Test with very small amounts first:</p>
  <ul id="nwND">
    <li id="ggUT">Swap <strong>TON → Jetton</strong></li>
    <ul id="o8Tn">
      <li id="dyb1">Compare expected amount in UI vs actual received.</li>
      <li id="IrFz">Check slippage, price impact, and fees.</li>
    </ul>
    <li id="44Ua">Swap <strong>Jetton → TON</strong></li>
    <ul id="2mP8">
      <li id="J520">Again compare UI vs on-chain result.</li>
      <li id="1SfJ">Ensure the transaction doesn’t unexpectedly fail due to low liquidity or tight slippage.</li>
    </ul>
  </ul>
  <p id="Mcn2">Repeat for different trade sizes to see how the curve reacts and how the UI explains it.</p>
  <h4 id="gk0e">5.2 Liquidity provision (LP)</h4>
  <ul id="z5SS">
    <li id="VUOh"><strong>Add liquidity</strong></li>
    <ul id="kdQ8">
      <li id="kdNO">Provide minimum viable liquidity to the pool (Jetton + TON or Jetton + stablecoin).</li>
      <li id="Ehr9">Verify LP tokens are minted correctly and balances are displayed in the DEX and in the wallet.</li>
    </ul>
    <li id="Gbpf"><strong>Remove partial liquidity</strong></li>
    <ul id="QdSw">
      <li id="dthA">Remove e.g. 25–50% of the position.</li>
      <li id="Y8Pm">Check if the returned amounts match expectations within a small tolerance.</li>
    </ul>
    <li id="wwZf"><strong>Remove all liquidity</strong></li>
    <ul id="UqYv">
      <li id="Pmga">Confirm that withdrawing everything returns LP into your underlying assets, fees included.</li>
    </ul>
  </ul>
  <p id="vuyU">If any DEX integration looks broken (wrong decimals, missing token icon, or pool not discoverable), that’s both a UX problem and a trust signal issue.</p>
  <hr />
  <h3 id="Kn3a">6. Core test area #4: Fees and gas behavior</h3>
  <p id="ozAT">Toncoin is used for transaction fees and for deploying contracts, including Jetton wallet contracts per user.</p>
  <p id="1dER">You want your Jetton to feel “cheap but predictable”.</p>
  <p id="J2uq">Test:</p>
  <ul id="kfQZ">
    <li id="mIiS"><strong>Baseline fee per action</strong></li>
    <ul id="wlsY">
      <li id="0VAz">Transfer Jetton between two active wallets.</li>
      <li id="usWa">Note how much TON is spent for a typical transaction.</li>
    </ul>
    <li id="VXul"><strong>First interaction fee</strong></li>
    <ul id="g9VS">
      <li id="69sb">Send Jetton to an address that hasn’t used this Jetton before.</li>
      <li id="GaN8">See how much additional TON is consumed for creating that wallet-contract.</li>
    </ul>
    <li id="UgXV"><strong>Low-TON edge cases</strong></li>
    <ul id="XaJB">
      <li id="bwm6">Try making a transfer when your address has <em>barely enough</em> TON for the fee.</li>
      <li id="Vnuj">Try when it has <strong>not enough</strong> TON.</li>
      <li id="YyRL">Observe error messages in UI and behavior on-chain.</li>
    </ul>
    <li id="AIxn"><strong>Excess TON refunds</strong></li>
    <ul id="OGBu">
      <li id="LVbS">In some flows, “excess” TON is sent back to the sender or a specified address after fees.</li>
      <li id="t4kc">Check that refund logic matches your expectations and doesn’t confuse users.</li>
    </ul>
  </ul>
  <hr />
  <h3 id="X07X">7. Core test area #5: Edge cases, UX, and safety</h3>
  <p id="Pg6S">Here you’re testing the whole <strong>user experience</strong>, not just the smart contracts.</p>
  <ol id="98W4">
    <li id="sV4e"><strong>Error messages</strong></li>
    <ul id="DCSe">
      <li id="wvn3">Not enough TON for gas.</li>
      <li id="XxvD">Not enough Jetton balance.</li>
      <li id="4xYC">Wrong address format.<br />Are the errors understandable to a non-developer?</li>
    </ul>
    <li id="asO5"><strong>Token confusion</strong></li>
    <ul id="qsMN">
      <li id="PZqQ">Are there other Jettons with a similar name/symbol that can confuse users?</li>
      <li id="J3jk">Does your branding make your Jetton easy to identify?</li>
    </ul>
    <li id="9PMK"><strong>Admin powers &amp; permissions</strong></li>
    <ul id="WrSj">
      <li id="j2jq">Who can mint or burn? Is that visible somewhere for users?</li>
      <li id="JL7I">Are there functions that can freeze balances or seize funds?</li>
      <li id="PbE6">Is there a plan for renouncing or handing over those powers, if needed?</li>
    </ul>
    <li id="F63Y"><strong>Upgrade / migration plan</strong></li>
    <ul id="AfDY">
      <li id="Iod9">If a critical bug is found, how will you migrate users to a fixed Jetton?</li>
      <li id="6qQX">Are you transparent about that in docs or announcements?</li>
    </ul>
  </ol>
  <hr />
  <h3 id="7k25">8. Organizing a tester squad</h3>
  <p id="B5Z3">If you have a community or internal QA team, structure their work:</p>
  <ul id="ZQ09">
    <li id="WVFa">Create a <strong>“Testing campaign” issue</strong> with:</li>
    <ul id="afO1">
      <li id="s99Z">clear checklist (transfers, wallets, DEX, fees, UX),</li>
      <li id="gnoj">instructions on how to report,</li>
      <li id="sJfT">links to the Jetton contract and DEX pools.</li>
    </ul>
    <li id="l9MC">Use a <strong>bug report template</strong>:</li>
    <ul id="QXoB">
      <li id="8Xv9">environment (wallet, platform, network),</li>
      <li id="EXXG">steps to reproduce,</li>
      <li id="szUy">expected vs actual behavior,</li>
      <li id="S8xz">tx link + screenshots.</li>
    </ul>
  </ul>
  <p id="KdAO">This keeps feedback structured and makes it easier to spot patterns.</p>
  <hr />
  <h3 id="2I2Q">9. Incentivizing testing (without turning it into a farm fest)</h3>
  <p id="BGiI">Testing on mainnet is risky and costs real fees, so it’s reasonable to <strong>reward testers</strong> from a dedicated allocation of your Jetton:</p>
  <ul id="48p7">
    <li id="Y9oB">a small pool for <strong>test tasks</strong> (checklists, multi-wallet scenarios);</li>
    <li id="ITJ8">a separate pool for <strong>bug bounties</strong>, especially for critical or security-related issues.</li>
  </ul>
  <p id="ymHW">Some guidelines:</p>
  <ul id="u5Jk">
    <li id="NUm1">Reward <strong>quality, not just clicks</strong> – require real tx links and proof.</li>
    <li id="8Cor">Keep the rules public and simple.</li>
    <li id="RJZh">Never promise price or “guaranteed profit”: this is not financial advice and markets are wild.</li>
  </ul>
  <p id="hkpB">Your testing program should feel like a <strong>collaboration</strong>, not a pump-and-dump scheme.</p>
  <hr />
  <h3 id="xRmV">10. Conclusion</h3>
  <p id="lZRK">A Jetton that’s already live on TON mainnet is a production-level financial asset. The TEP-74 standard gives you a solid technical base, but <strong>only real-world testing</strong> across wallets, explorers, DEXes, and user flows will show whether your token is truly ready for users.</p>
  <p id="ybEN">Be systematic:</p>
  <ul id="KI82">
    <li id="r4SN">test transfers, balances, fees, and DEX behavior;</li>
    <li id="6fPL">verify integrations;</li>
    <li id="QJh3">treat UX and safety as first-class citizens;</li>
    <li id="jqkM">organize your testers and reward them fairly.</li>
  </ul>
  <p id="Lzxu">Do that, and your Jetton stops being “just another token” and becomes a reliable building block in the TON ecosystem.</p>
  <hr />
  <h2 id="5eUx">🇷🇺</h2>
  <p id="jSjH"><strong>Заголовок:</strong><br /><strong>Как тестировать Jetton после запуска в основной сети TON (mainnet)</strong></p>
  <p id="JfB3">Когда вы запускаете Jetton в основной сети TON, это уже не просто код в репозитории — это живой актив, с которым реальные люди хранят и двигают деньги. Jetton — это стандарт взаимозаменяемых токенов в TON (аналог ERC-20 в Ethereum), описанный в стандарте TEP-74 и реализованный через пару контрактов: master-контракт и отдельные wallet-контракты для пользователей.</p>
  <p id="2PEl">Даже если вы хорошо потестили всё в testnet, <strong>пост-релизное тестирование в mainnet</strong> — обязательный этап. В этой статье разберём, как тестировать только что запущенный Jetton в бою: что проверять, как работать с тестерами и как сделать так, чтобы тесты были не просто расходом, а вкладом в рост проекта.</p>
  <hr />
  <h3 id="Hk55">1. Что именно мы проверяем в mainnet?</h3>
  <p id="zdHk">В основной сети цель уже не просто «контракт не падает», а:</p>
  <ul id="M5MR">
    <li id="1IUc"><strong>Корректность</strong> — переводы, балансы, эмиссия/сжигание, разрешения (если есть) работают по задумке.</li>
    <li id="KUo4"><strong>Интеграции</strong> — кошельки, блок-обозреватели и DEX-ы правильно отображают и обрабатывают ваш Jetton.</li>
    <li id="TMVK"><strong>Экономика</strong> — комиссии адекватные, ликвидность ведёт себя ожидаемо, UX не подставляет юзеров.</li>
    <li id="xJsn"><strong>Безопасность</strong> — нет очевидных проблем с правами, минтом, админскими доступами.</li>
  </ul>
  <p id="AeeW">TON — это высоконагруженный L1 с низкими комиссиями и глубокой интеграцией в Telegram, поэтому пользователи взаимодействуют с вашим токеном из разных интерфейсов: мобильные кошельки, мини-приложения, DEX-ы, боты.</p>
  <p id="lIyK">Поэтому план тестирования в mainnet должен быть шире, чем «юнит-тесты + один свап на DEX».</p>
  <hr />
  <h3 id="Yvoo">2. Подготовка среды для тестирования</h3>
  <p id="ro6K">Перед тем как вы и команда QA пойдёте в mainnet:</p>
  <ol id="vQNy">
    <li id="s8lw"><strong>Небольшие боевые балансы</strong></li>
    <ul id="lzzN">
      <li id="wME3">Заведите несколько кошельков с небольшими суммами TON и вашего Jetton.</li>
      <li id="hejA">Считайте эти TON «сожжёнными на тесты» — так психологически проще.</li>
    </ul>
    <li id="YhfW"><strong>Набор кошельков и обозревателей</strong><br />Минимум стоит протестировать:</li>
    <ul id="ER0P">
      <li id="7yVI">2–3 популярных кошелька (Tonkeeper, встроенный TON-кошелёк/TON Space в Telegram, другие кошельки экосистемы).</li>
      <li id="yztZ">1–2 блок-обозревателя, которые поддерживают Jetton.</li>
    </ul>
    <li id="DghC"><strong>Трекинг и коммуникация</strong></li>
    <ul id="GT3N">
      <li id="kcop">GitHub Issues, Notion или чат в Telegram с закреплёнными форматами.</li>
      <li id="fZMx">Шаблон отчёта/багрепорта (кто, что делал, как воспроизвести, ссылка на транзакцию, скрины).</li>
    </ul>
  </ol>
  <hr />
  <h3 id="cyfn">3. Ключевое направление #1: переводы и балансы</h3>
  <p id="jHSh">Это «сердцебиение» вашего Jetton. Если тут что-то сломано, всё остальное уже не важно.</p>
  <p id="IyqK"><strong>Сценарии для проверки:</strong></p>
  <ul id="tCif">
    <li id="C2ew"><strong>Обычный перевод</strong></li>
    <ul id="Xj2J">
      <li id="Jx0L">Отправить небольшое количество Jetton с кошелька A на кошелёк B.</li>
      <li id="t1Jn">Проверить:</li>
      <ul id="k0RB">
        <li id="oObX">балансы в обоих кошельках,</li>
        <li id="Js1D">балансы в блок-обозревателе (адреса jetton-wallet контрактов),</li>
        <li id="qDxy">поведение с возвратом «excess TON» (чтобы не было неожиданных возвратов/лишних транзакций).</li>
      </ul>
    </ul>
    <li id="iJk4"><strong>Первый получатель</strong></li>
    <ul id="lnj6">
      <li id="NmGX">Отправить Jetton на адрес, который раньше с этим Jetton не работал.</li>
      <li id="BhmI">Убедиться, что jetton-wallet контракт развернулся, а баланс появился.</li>
    </ul>
    <li id="IiMk"><strong>Слишком мало / слишком много</strong></li>
    <ul id="85rq">
      <li id="ZnQC">Попробовать отправить <strong>больше токенов, чем есть на балансе</strong> → транзакция должна предсказуемо падать.</li>
      <li id="lz6F">Попробовать отправить <strong>очень маленькую долю</strong> токена (по вашим decimals) и посмотреть, как это отображается в кошельках.</li>
    </ul>
    <li id="OFfh"><strong>Несколько переводов подряд</strong></li>
    <ul id="najF">
      <li id="M33v">Сделать серию переводов и проверить, что состояния и отображение нигде не «заедают».</li>
    </ul>
  </ul>
  <hr />
  <h3 id="OSvD">4. Ключевое направление #2: отображение в кошельках и обозревателях</h3>
  <p id="5T5D">Стандарт Jetton описывает, как из master-контракта получать метаданные токена: имя, символ, decimals, total supply и т.д.</p>
  <p id="4tL2">Нужно убедиться, что экосистема это читает корректно.</p>
  <p id="M7q4">В каждом кошельке и обозревателе проверьте:</p>
  <ol id="fflh">
    <li id="efHH"><strong>Имя и символ</strong></li>
    <ul id="1L6d">
      <li id="9gYO">Нет кривой кодировки, странной обрезки, схожести с чужими токенами.</li>
    </ul>
    <li id="Bitt"><strong>Decimals и форматирование</strong></li>
    <ul id="4Lrj">
      <li id="NcY9">Числа выглядят по-человечески.</li>
      <li id="anBE">1 токен отображается как «1», а не «0.000000000001» или «1000000000000».</li>
    </ul>
    <li id="W60y"><strong>Иконка и метаданные</strong></li>
    <ul id="dTxD">
      <li id="uRZc">Если вы используете иконку/URI, который подхватывают кошельки — убедитесь, что всё грузится и кэшируется.</li>
      <li id="2vW3">При возможности — проверьте и светлую, и тёмную тему.</li>
    </ul>
    <li id="EKT2"><strong>Сеть</strong></li>
    <ul id="v88H">
      <li id="MDHZ">Кошелёк явно показывает, что это <strong>mainnet</strong>, а не testnet или «кастомная сеть».</li>
    </ul>
  </ol>
  <p id="0SlU">Если какой-то кошелёк отображает ваш Jetton криво — фиксируйте:</p>
  <ul id="Q8kq">
    <li id="yozH">версию приложения,</li>
    <li id="oJ3E">скриншоты,</li>
    <li id="fMoG">адрес master-контракта,</li>
    <li id="8oCE">и связывайтесь с командой этого кошелька.</li>
  </ul>
  <hr />
  <h3 id="WwvF">5. Ключевое направление #3: DEX и ликвидность</h3>
  <p id="mIUc">Для большинства Jetton всё крутится вокруг ликвидности на DEX. В TON есть DEX-ы (например, STON.fi и др.), которые используют AMM-пулы и поддерживают Jetton по стандарту.</p>
  <p id="ymuk">Если вы уже создали пул:</p>
  <h4 id="CUle">5.1 Свапы</h4>
  <p id="pw7H">Начните с очень маленьких сумм:</p>
  <ul id="v7eN">
    <li id="gGCa"><strong>TON → Jetton</strong></li>
    <ul id="LzfS">
      <li id="8fNX">Сравните ожидаемое количество в UI и фактическое полученное.</li>
      <li id="gXJj">Обратите внимание на slippage, price impact и комиссии.</li>
    </ul>
    <li id="YQjy"><strong>Jetton → TON</strong></li>
    <ul id="j9cG">
      <li id="f18O">Та же проверка: UI vs результат по факту.</li>
      <li id="F54A">Убедитесь, что транзакция не падает из-за низкой ликвидности или слишком жёсткого slippage.</li>
    </ul>
  </ul>
  <p id="CVdT">Повторите с несколькими размерами ордеров, чтобы увидеть поведение кривой и то, как DEX объясняет это пользователю.</p>
  <h4 id="HIEJ">5.2 Ликвидность (LP)</h4>
  <ul id="8Q4W">
    <li id="ozIf"><strong>Добавление ликвидности</strong></li>
    <ul id="ogpt">
      <li id="hbcg">Внести минимальный объём (Jetton + TON или Jetton + стейбл).</li>
      <li id="R8Eh">Проверить выпуск LP-токенов и их отображение в DEX и в кошельке.</li>
    </ul>
    <li id="Vk2q"><strong>Частичный вывод</strong></li>
    <ul id="vVtK">
      <li id="g4O1">Забрать, например, 25–50% позиции.</li>
      <li id="EG3r">Проверить, что полученные суммы ожидаемы (с учётом комиссий и движения цены).</li>
    </ul>
    <li id="Pa3n"><strong>Полный вывод</strong></li>
    <ul id="Ji6i">
      <li id="BUDM">Вывести 100% ликвидности и убедиться, что все средства вернулись корректно.</li>
    </ul>
  </ul>
  <p id="vOsJ">Если DEX показывает странные decimals, не подхватывает иконку или пул вообще не виден — это и UX-проблема, и удар по доверию к токену.</p>
  <hr />
  <h3 id="yS5Y">6. Ключевое направление #4: комиссии и gas</h3>
  <p id="NmxB">Toncoin используется для оплаты комиссий и развёртывания контрактов, включая jetton-wallet контракты пользователей.</p>
  <p id="jg8K">Задача — чтобы с вашим Jetton было <strong>дёшево и предсказуемо</strong> работать.</p>
  <p id="0CSO">Проверьте:</p>
  <ul id="bReC">
    <li id="usd3"><strong>Базовая комиссия за действие</strong></li>
    <ul id="9or3">
      <li id="opjD">Перевод Jetton между уже активными кошельками.</li>
      <li id="M8jx">Зафиксируйте типичный расход TON.</li>
    </ul>
    <li id="rF7E"><strong>Первая активация</strong></li>
    <ul id="GiYx">
      <li id="dcEf">Отправка Jetton на адрес, который раньше его не получал.</li>
      <li id="nsm0">Посмотрите, насколько дороже обходится создание jetton-wallet контракта.</li>
    </ul>
    <li id="pURJ"><strong>Крайние случаи с низким балансом TON</strong></li>
    <ul id="stKc">
      <li id="Jx4s">Попробовать провести операцию при <strong>почти нулевом</strong> балансе TON.</li>
      <li id="zBiJ">Попробовать сделать действие при <strong>явно недостаточном</strong> балансе.</li>
      <li id="F8jV">Посмотреть, какие сообщения выдаёт интерфейс и что происходит на чейне.</li>
    </ul>
    <li id="h76Q"><strong>Возвраты “лишнего” TON</strong></li>
    <ul id="iiMD">
      <li id="0mcs">В некоторых сценариях «excess TON» возвращается отправителю или на указанный адрес.</li>
      <li id="Uugx">Убедитесь, что логика возврата соответствует вашей модели и не путает пользователя.</li>
    </ul>
  </ul>
  <hr />
  <h3 id="kh1J">7. Ключевое направление #5: крайние кейсы, UX и безопасность</h3>
  <p id="ea4h">Здесь вы проверяете уже не только смарт-контракт, а <strong>общее ощущение продукта</strong>.</p>
  <ol id="cJNa">
    <li id="7wLj"><strong>Сообщения об ошибках</strong></li>
    <ul id="SvD7">
      <li id="qRNo">Недостаточно TON на комиссии.</li>
      <li id="Q5pE">Недостаточно Jetton для перевода.</li>
      <li id="chvG">Неверный адрес.<br />Понятны ли тексты обычному юзеру, который не программист?</li>
    </ul>
    <li id="hiKE"><strong>Путаница с токенами</strong></li>
    <ul id="NhS3">
      <li id="p9pU">Есть ли другие Jetton со схожим названием/символом?</li>
      <li id="Foe7">Насколько легко визуально отличить ваш токен?</li>
    </ul>
    <li id="e6m6"><strong>Админские права и разрешения</strong></li>
    <ul id="mX4R">
      <li id="3f4x">Кто может минтить/жечь токен? Понятно ли это хотя бы из документации?</li>
      <li id="HAL2">Есть ли функции, позволяющие замораживать балансы или забирать средства?</li>
      <li id="mB6r">Есть ли план по отказу от лишних полномочий (или их передаче DAO/мультисигу)?</li>
    </ul>
    <li id="vqic"><strong>План миграции</strong></li>
    <ul id="gQzh">
      <li id="jf9P">Если найдёте критичный баг, как будете мигрировать пользователей на новый Jetton?</li>
      <li id="Gkpr">Есть ли базовое описание этого плана в документации/анонсе?</li>
    </ul>
  </ol>
  <hr />
  <h3 id="pHEq">8. Как организовать команду тестеров</h3>
  <p id="YnZ4">Если у вас есть комьюнити или внутренняя QA-команда, структурируйте их работу:</p>
  <ul id="o2Bj">
    <li id="3vcw">Создайте <strong>issue “Testing campaign”</strong> c:</li>
    <ul id="4O9e">
      <li id="skQd">чеклистом (переводы, кошельки, DEX, комиссии, UX),</li>
      <li id="4fbm">правилами, как оставлять отчёт,</li>
      <li id="utwa">ссылками на master-контракт Jetton и пулы на DEX.</li>
    </ul>
    <li id="G4Cs">Используйте <strong>шаблон багрепорта</strong>:</li>
    <ul id="1kF2">
      <li id="N5hK">окружение (кошелёк, платформа, сеть),</li>
      <li id="3X0u">шаги для воспроизведения,</li>
      <li id="LJ7h">ожидаемый vs фактический результат,</li>
      <li id="QOA2">ссылка на транзакцию + скриншоты.</li>
    </ul>
  </ul>
  <p id="wtxV">Так фидбек будет структурированным, а вам проще будет находить паттерны и приоритизировать правки.</p>
  <hr />
  <h3 id="eWrY">9. Вознаграждение за тесты (и как не превратить всё в фарм)</h3>
  <p id="9yLt">Тестирование в mainnet стоит реальных денег, поэтому логично <strong>вознаграждать тестеров</strong> из заранее выделенного пула Jetton:</p>
  <ul id="vA4F">
    <li id="cam2">отдельный пул под <strong>чек-листы и задачи</strong> (серия тестов, мульти-кошельковые сценарии);</li>
    <li id="Iyxz">отдельный пул под <strong>bug bounty</strong>, особенно за критические и security-баги.</li>
  </ul>
  <p id="sJUL">Несколько простых правил:</p>
  <ul id="Yeoi">
    <li id="grlK">Вознаграждайте <strong>качество, а не количество кликов</strong> — просите реальные ссылки на транзакции и нормальные описания.</li>
    <li id="3Jd4">Держите правила публичными и максимально простыми.</li>
    <li id="JlEw">Не обещайте «гарантированный заработок/доход» — это не инвестсовет, рынок живёт своей жизнью.</li>
  </ul>
  <p id="x7XI">Хорошая программа тестирования должна ощущаться как <strong>совместная работа</strong>, а не как очередной «фарм ради токенов».</p>
  <hr />
  <h3 id="Jip4">10. Итог</h3>
  <p id="zIyr">Jetton, запущенный в основной сети TON, — это уже не тестовый токен, а полноценный финансовый инструмент. Стандарт TEP-74 даёт вам технический фундамент, но <strong>только живое тестирование</strong> во всех реальных сценариях (кошельки, обозреватели, DEX-ы, пользовательские флоу) покажет, насколько ваш токен готов к массовому использованию.</p>
  <p id="DZfp">Будьте системны:</p>
  <ul id="ET7K">
    <li id="hCRf">проверяйте переводы, балансы, комиссии и поведение на DEX;</li>
    <li id="aUGs">уделите внимание интеграциям;</li>
    <li id="esfB">относитесь к UX и безопасности как к ключевым требованиям;</li>
    <li id="QswK">грамотно организуйте и мотивируйте тестеров.</li>
  </ul>
  <p id="JSgC">Так ваш Jetton перестанет быть «ещё одним токеном в списке» и станет надёжным кирпичиком экосистемы TON.</p>
  <p id="WYkj">studio.rubeton.app</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@not_under_ton/z7YXCXQjzbJ</guid><link>https://teletype.in/@not_under_ton/z7YXCXQjzbJ?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=not_under_ton</link><comments>https://teletype.in/@not_under_ton/z7YXCXQjzbJ?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=not_under_ton#comments</comments><dc:creator>not_under_ton</dc:creator><title>TON Marketing: From Zero to a Marketing Machine</title><pubDate>Tue, 11 Nov 2025 21:00:26 GMT</pubDate><description><![CDATA[Объединённая версия серии из 4 статей TON CIS Hub — в одном удобном гайде. Здесь — полный путь продукта в экосистеме TON/Telegram: от первых 100 пользователей до устойчивой маркетинговой машины.]]></description><content:encoded><![CDATA[
  <h1 id="Dx66">TON Marketing: From Zero to a Marketing Machine</h1>
  <p id="tmwe">A unified version of the 4-part TON CIS Hub series — plus a practical guide to marketing a Mini App in TON &amp; Telegram.</p>
  <hr />
  <h2 id="YX09">Phase 1. The First 100 Users with Zero Budget</h2>
  <p id="sztw"><strong>Goal:</strong> validate your value proposition and find your core audience.</p>
  <p id="Bbpo"><strong>Actions:</strong></p>
  <ul id="pg30">
    <li id="kwR9">Run 10–20 user interviews.</li>
    <li id="OcKn">Craft a clear 1–2 sentence value proposition.</li>
    <li id="Z1d6">Get your first 100 users via personal networks and Telegram/X communities.</li>
    <li id="Fd8I">Publish an honest “here’s what we’re building &amp; why” launch story.</li>
    <li id="OQSF">Tap into TON Nest/Fam and related communities for feedback and early evangelists.</li>
  </ul>
  <p id="pWET"><strong>Success signals:</strong><br />100+ active users, repeat sessions, 2–3 genuine evangelists.</p>
  <hr />
  <h2 id="8Pm1">Phase 2. From 100 to 10,000 Users</h2>
  <p id="2TUI"><strong>Goal:</strong> cover key discovery surfaces and kick off partnerships.</p>
  <p id="CqP1"><strong>Key placements:</strong></p>
  <ul id="pt93">
    <li id="qL8S"><strong>Telegram App Center</strong>.</li>
    <li id="5K2E"><strong>Wallets:</strong> Tonkeeper Pro, MyTonWallet, multi-chain wallets.</li>
    <li id="D5KR"><strong>Listings/reviews:</strong> Ton.app, Tonscan, DappRadar, GameFi hubs.</li>
    <li id="WNbY"><strong>Quest platforms:</strong> TBook, xQuest Launch, BroBot, Galxe, Questhub.</li>
  </ul>
  <p id="Djn9"><strong>Partnerships:</strong></p>
  <ul id="Yocb">
    <li id="Ws7l">Cross-quests and joint promo campaigns.</li>
    <li id="JRhP">AMA / X Spaces / joint streams.</li>
    <li id="HXCW">Audience swaps and co-branded drops.<br />Aim for partners with a similar scale and complementary value.</li>
  </ul>
  <p id="7s6l"><strong>Success signals:</strong><br />Steady organic traffic from catalogs/App Center; at least one clearly performing partnership; quests that convert to active users; basic clarity on channel ROI.</p>
  <hr />
  <h2 id="LSsb">Phase 3. Viral Growth: KOLs, Paid, Engagement</h2>
  <p id="2C7y"><strong>KOL marketing:</strong></p>
  <ul id="CIAr">
    <li id="N2jS">Start with micro-KOLs (1–10k audience).</li>
    <li id="SnkS">Prefer performance-based deals (rev share, referrals).</li>
    <li id="AGCU">Authentic content &gt; heavily scripted ad reads.</li>
  </ul>
  <p id="gRsY"><strong>Paid traffic:</strong></p>
  <ul id="ED2u">
    <li id="Jpo1"><strong>Within Telegram:</strong> direct channel buys, Telega.io, Plarin, Clicksdealer, Telegram Ads, AdsGram, OpenAD, Monetag.</li>
    <li id="4PIx"><strong>Outside Telegram:</strong> X, Meta, TikTok, YouTube, Google Ads.<br />Scale only where your CAC / LTV / Payback math works.</li>
  </ul>
  <p id="OI8e"><strong>Virality &amp; engagement:</strong></p>
  <ul id="DbEo">
    <li id="FgSJ">Design for sharing: rewards, leaderboards, competition loops.</li>
    <li id="1YrT">Use Telegram Stories as a distribution and challenge layer.</li>
    <li id="TzrQ">Add in-app challenges and social proof.</li>
  </ul>
  <p id="6LKK"><strong>Referrals:</strong></p>
  <ul id="AaLL">
    <li id="HY7s">Two-sided value (for both inviter and invitee).</li>
    <li id="kUOP">Tiered rewards (e.g., 1 / 3 / 10 invites).</li>
    <li id="gYrA">Time-limited bonuses and seasonal boosts.</li>
    <li id="JVvq">With Stars, leverage Telegram Affiliate where relevant.</li>
  </ul>
  <hr />
  <h2 id="hgqB">Phase 4. The Marketing Machine &amp; Optimization</h2>
  <p id="hvvO"><strong>Official TON support:</strong></p>
  <ul id="04mV">
    <li id="SBaK">AMAs, reposts, mentions.</li>
    <li id="nkjm">TON Blog and partner media.</li>
    <li id="naCl">Best suited for mature products with strong news or traction.</li>
  </ul>
  <p id="xN0G"><strong>PR ladder:</strong></p>
  <ol id="CYpO">
    <li id="iIO4">TON-focused outlets (Trending Apps, The Daily TON, TON Newbie).</li>
    <li id="fmSu">Broader crypto media (e.g., CoinDesk and similar).</li>
    <li id="mXUr">Tech press — only when you truly have a newsworthy story.</li>
  </ol>
  <p id="QM5I"><strong>Advanced analytics:</strong></p>
  <ul id="LViH">
    <li id="id7g"><strong>Off-chain:</strong> reach, engagement rate.</li>
    <li id="roDc"><strong>Product:</strong> MAU, retention, K-factor.</li>
    <li id="laxj"><strong>On-chain:</strong> active addresses, TVL, transactions.</li>
    <li id="uHSy"><strong>Unit economics:</strong> CAC, LTV, ROI.<br />Tools: GA / Mixpanel / Amplitude / Plausible, Telegram Mini Apps analytics/SDK, Dune dashboards.</li>
  </ul>
  <p id="N4ui"><strong>Agencies &amp; experts:</strong></p>
  <ul id="8tat">
    <li id="7ONT">Useful when you lack speed, expertise, or are entering new markets.</li>
    <li id="b2ct">Where to look: TON Talents, TON Nest, personal/peer referrals.</li>
  </ul>
  <p id="J6VJ"><strong>Common pitfalls:</strong></p>
  <ul id="VoSg">
    <li id="aUMJ">Trying to do everything at once.</li>
    <li id="1JV6">Chasing vanity metrics instead of activation and retention.</li>
    <li id="qEtJ">Ignoring retention and cohorts.</li>
    <li id="ZUZM">Blindly copying others’ mechanics without validation.</li>
  </ul>
  <hr />
  <h2 id="tsNW">Add-on Guide: How to Market a Mini App in TON &amp; Telegram</h2>
  <p id="cg60">A practical checklist to launch and grow your Mini App or bot.</p>
  <p id="2yw2">Need a tech partner to build or port your Mini App? Check <strong>RubeTON Studio</strong> → <a href="https://studio.rubeton.app/" target="_blank">https://studio.rubeton.app</a></p>
  <ol id="8Q8d">
    <li id="bIt4"><strong>Product prep:</strong><br />Mini-App-first UX; fast onboarding (30–60 seconds to “aha moment”); monetization (Stars, subscriptions, IAP); integrations (TON Wallet, deeplink scenes, share presets); tracking (UTM / target params, funnels).</li>
    <li id="gmfU"><strong>First hundred users:</strong><br />Personal network; builder chats; TON Nest/Fam/Hubs; a “what we’re building &amp; why” post; demo video.</li>
    <li id="r3wg"><strong>Distribution 100 → 10k:</strong><br />App Center (icons, screenshots, one-liner, 15–30s video); wallets (Tonkeeper Pro, MyTonWallet, multi-chain wallets); catalogs (Ton.app, Tonscan, DappRadar); quests (TBook, xQuest Launch, BroBot, Galxe, Questhub).</li>
    <li id="iXdW"><strong>Launch market pack:</strong><br />Press kit (logo, screenshots, short video, one-pager), “for partners” page, and a 2–4 week content plan.</li>
    <li id="Es6G"><strong>KOL &amp; paid:</strong><br />Micro-KOLs on performance deals; Telegram buys (incl. Telegram Ads, AdsGram, OpenAD, Monetag); off-Telegram campaigns on X/Meta/TikTok/YouTube/Google Ads.</li>
    <li id="pDBj"><strong>Telegram virality:</strong><br />Stories challenges; explicit share CTAs; leaderboards; referrals with two-sided value and tiered rewards.</li>
    <li id="W3C9"><strong>Economics &amp; retention:</strong><br />Track CAC / LTV / Payback; improve D1 / D7 / D30 via reminders, content events, and push notifications.</li>
    <li id="CmwJ"><strong>Analytics &amp; experiments:</strong><br />Mixpanel / Amplitude / GA / Plausible; Telegram Mini Apps analytics/SDK; Dune; weekly channel and A/B test reports, monthly cohort reviews.</li>
    <li id="gmTU"><strong>Localization &amp; hubs:</strong><br />Expand via TON Hubs, local communities, and local KOLs.</li>
  </ol>
  <hr />
  <h2 id="0LIy">Takeaway</h2>
  <p id="8BcV">Validate with your first 100 users → scale via App Center, wallets, catalogs, and partnerships → add KOL, paid, and virality → build analytics, PR, and operational discipline.</p>
  <p id="DDj0"><strong>RubeTON Studio for Mini Apps</strong> → <a href="https://studio.rubeton.app/" target="_blank">https://studio.rubeton.app</a></p>
  <hr />
  <hr />
  <h1 id="TGI3">TON-маркетинг: от 0 до маркетинговой машины</h1>
  <p id="WW9s">Единая версия 4-частной серии TON CIS Hub плюс практический гид по продвижению Mini App в TON и Telegram.</p>
  <hr />
  <h2 id="4ZvC">Фаза 1. Первые 100 пользователей без бюджета</h2>
  <p id="UtrG"><strong>Цель:</strong> подтвердить ценность продукта и найти ядро аудитории.</p>
  <p id="eLj2"><strong>Что делать:</strong></p>
  <ul id="dWhc">
    <li id="f4aD">Провести 10–20 пользовательских интервью.</li>
    <li id="9gZ2">Сформулировать чёткое ценностное предложение в 1–2 предложениях.</li>
    <li id="EMHM">Привести первых 100 пользователей через личные связи и комьюнити в Telegram/X.</li>
    <li id="5RIF">Опубликовать честную историю запуска — что строите и зачем.</li>
    <li id="b8E1">Подключить TON Nest/Fam и другие TON-сообщества для фидбэка и первых евангелистов.</li>
  </ul>
  <p id="7Vk4"><strong>Сигналы успеха:</strong><br />100+ активных пользователей, повторные сессии, 2–3 евангелиста продукта.</p>
  <hr />
  <h2 id="GYqH">Фаза 2. Со 100 до 10 000 пользователей</h2>
  <p id="eFLa"><strong>Цель:</strong> занять ключевые «точки обнаружения» и запустить партнёрства.</p>
  <p id="cT9U"><strong>Где размещаться:</strong></p>
  <ul id="d2HX">
    <li id="TlEQ"><strong>Telegram App Center.</strong></li>
    <li id="TlXz"><strong>Кошельки:</strong> Tonkeeper Pro, MyTonWallet, мультичейн-кошельки.</li>
    <li id="f2BL"><strong>Каталоги и обзоры:</strong> Ton.app, Tonscan, DappRadar, GameFi-площадки.</li>
    <li id="uRLX"><strong>Квест-платформы:</strong> TBook, xQuest Launch, BroBot, Galxe, Questhub.</li>
  </ul>
  <p id="082H"><strong>Партнёрства:</strong></p>
  <ul id="6SUx">
    <li id="x287">Кросс-квесты и совместные промо-кампании.</li>
    <li id="RrtN">AMA / X Spaces / совместные эфиры.</li>
    <li id="xIyh">Обмен аудиториями и ко-брендинговые активности.<br />Выбирайте партнёров с близким масштабом и комплементарной ценностью.</li>
  </ul>
  <p id="Di3L"><strong>Сигналы успеха:</strong><br />Стабильный органический приток из каталогов/App Center; хотя бы одно по-настоящему результативное партнёрство; квесты приводят именно активных юзеров; появляется понимание окупаемости каналов.</p>
  <hr />
  <h2 id="GRxj">Фаза 3. Вирусный рост: KOL, реклама, вовлечение</h2>
  <p id="PMeP"><strong>KOL-маркетинг:</strong></p>
  <ul id="zzKp">
    <li id="sBFe">Начинайте с микро-KOL (аудитория 1–10k).</li>
    <li id="Grt9">Делайте фокус на оплате за результат (ревшары, реферальные модели).</li>
    <li id="dnav">Аутентичность важнее жёстко прописанных рекламных интеграций.</li>
  </ul>
  <p id="ehhm"><strong>Платная реклама:</strong></p>
  <ul id="udVO">
    <li id="2tjM"><strong>Внутри Telegram:</strong> прямые сделки с каналами, Telega.io, Plarin, Clicksdealer, Telegram Ads, AdsGram, OpenAD, Monetag.</li>
    <li id="WJkj"><strong>Вне Telegram:</strong> X, Meta, TikTok, YouTube, Google Ads.<br />Масштабируйтесь только там, где сходится экономика: CAC / LTV / срок окупаемости.</li>
  </ul>
  <p id="dTSl"><strong>Виральные механики и вовлечение:</strong></p>
  <ul id="k5XX">
    <li id="10Hs">Спроектированный шаринг: награды, рейтинги, соревновательные механики.</li>
    <li id="yJCI">Используйте Telegram Stories как канал дистрибуции и челленджей.</li>
    <li id="5fg6">Добавляйте внутриигровые/внутри-app-челленджи и социальное доказательство.</li>
  </ul>
  <p id="1BjS"><strong>Рефералы:</strong></p>
  <ul id="mFcU">
    <li id="EQlS">Двусторонняя выгода для приглашающего и приглашённого.</li>
    <li id="qdCP">Ступенчатые награды (например, за 1 / 3 / 10 приглашённых).</li>
    <li id="DV2P">Лимитированные бонусы и сезонные акции.</li>
    <li id="WTFl">При работе со Stars используйте Telegram Affiliate, где это уместно.</li>
  </ul>
  <hr />
  <h2 id="F1JA">Фаза 4. Маркетинговая машина и оптимизация</h2>
  <p id="lv1S"><strong>Официальная поддержка TON:</strong></p>
  <ul id="q45G">
    <li id="RKK2">AMA, репосты, упоминания.</li>
    <li id="df6R">TON Blog и партнёрские медиа.</li>
    <li id="KAkw">Подходит для более зрелых продуктов с сильным инфоповодом или трекшном.</li>
  </ul>
  <p id="jlFf"><strong>PR-лестница:</strong></p>
  <ol id="eAdk">
    <li id="zp8P">TON-медиа (Trending Apps, The Daily TON, TON Newbie).</li>
    <li id="2ulj">Широкие крипто-СМИ (CoinDesk и др.).</li>
    <li id="ELNX">Тех-СМИ — только при реально сильном инфоповоде.</li>
  </ol>
  <p id="rsIQ"><strong>Продвинутая аналитика:</strong></p>
  <ul id="QUEP">
    <li id="jks6"><strong>Off-chain:</strong> охват, вовлечённость (ER).</li>
    <li id="OIdX"><strong>Продукт:</strong> MAU, retention, K-factor.</li>
    <li id="Oeig"><strong>On-chain:</strong> активные адреса, TVL, транзакции.</li>
    <li id="LsO2"><strong>Юнит-экономика:</strong> CAC, LTV, ROI.<br />Инструменты: GA, Mixpanel, Amplitude, Plausible, аналитика Mini Apps/Telegram SDK, дашборды в Dune.</li>
  </ul>
  <p id="DhBl"><strong>Агентства и эксперты:</strong></p>
  <ul id="d4np">
    <li id="S2yM">Нужны, когда не хватает скорости/экспертизы или вы выходите в новые рынки.</li>
    <li id="vG5c">Где искать: TON Talents, TON Nest, личные рекомендации и реферальные сети.</li>
  </ul>
  <p id="0gnD"><strong>Типичные ошибки:</strong></p>
  <ul id="XCNl">
    <li id="BsZM">Пытаться «делать всё сразу».</li>
    <li id="uDwD">Гнаться за vanity-метриками вместо активации и удержания.</li>
    <li id="1RUa">Игнорировать retention и когорты.</li>
    <li id="Zp5p">Слепо копировать чужие механики без проверки на своей аудитории.</li>
  </ul>
  <hr />
  <h2 id="q14j">Гайд-дополнение: как продвигать Mini App в TON и Telegram</h2>
  <p id="3Due">Практический чек-лист по запуску и росту Mini App или бота.</p>
  <p id="Vuwl">Нужен партнёр по разработке или порту Mini App? Посмотрите <strong>RubeTON Studio</strong> → <a href="https://studio.rubeton.app/" target="_blank">https://studio.rubeton.app</a></p>
  <ol id="ctL8">
    <li id="4zjZ"><strong>Подготовка продукта:</strong><br />Mini App-first UX; быстрый онбординг (30–60 секунд до «момента ценности»); монетизация (Stars, подписки, IAP); интеграции (TON Wallet, deeplink-сцены, готовые пресеты шэринга); трекинг (UTM / target params, воронки).</li>
    <li id="lynP"><strong>Первая сотня пользователей:</strong><br />Личные сети; чаты билдеров; TON Nest/Fam/Hubs; эссе «что строим и зачем»; демо-видео.</li>
    <li id="YJtB"><strong>Дистрибуция 100 → 10k:</strong><br />App Center (иконки, скрины, 1-лайнер, видео 15–30 секунд); кошельки (Tonkeeper Pro, MyTonWallet, мультичейн-кошельки); каталоги (Ton.app, Tonscan, DappRadar); квесты (TBook, xQuest Launch, BroBot, Galxe, Questhub).</li>
    <li id="s2Xa"><strong>Маркет-пакет старта:</strong><br />Пресс-кит (лого, скрины, короткое видео, one-pager), страница «для партнёров», контент-календарь на 2–4 недели.</li>
    <li id="fHNI"><strong>KOL и платное продвижение:</strong><br />Микро-KOL с оплатой за результат; Telegram-размещения (включая Telegram Ads, AdsGram, OpenAD, Monetag); кампании в X/Meta/TikTok/YouTube/Google Ads.</li>
    <li id="GWcr"><strong>Виральность в Telegram:</strong><br />Stories-челленджи; явные CTA на шэринг; рейтинги и таблицы лидеров; реферальные программы с двусторонней выгодой и уровнями наград.</li>
    <li id="Dscy"><strong>Экономика и удержание:</strong><br />Считайте CAC / LTV / срок окупаемости; улучшайте D1 / D7 / D30 с помощью напоминаний, контент-ивентов и пушей.</li>
    <li id="EplI"><strong>Аналитика и эксперименты:</strong><br />Mixpanel / Amplitude / GA / Plausible; аналитика Mini Apps/Telegram SDK; Dune; еженедельные отчёты по каналам и A/B-тестам, ежемесячный разбор когорт.</li>
    <li id="cDFz"><strong>Локализация и Hubs:</strong><br />Выходите в новые регионы через TON Hubs, локальные комьюнити и локальных KOL.</li>
  </ol>
  <hr />
  <h2 id="hsj4">Итог</h2>
  <p id="snUv">Подтвердите ценность на первых 100 пользователях → масштабируйтесь через App Center, кошельки, каталоги и партнёрства → добавляйте KOL, рекламу и виральные механики → стройте аналитику, PR и устойчивые процессы.</p>
  <p id="3mLk"><strong>RubeTON Studio для Mini Apps</strong> → <a href="https://studio.rubeton.app" target="_blank">https://studio.rubeton.app</a></p>

]]></content:encoded></item></channel></rss>