TON Overflow на русском

552 Темы 1.0k Сообщения

Русское зеркало answers.ton.org

  • 0 Голоса
    2 Сообщения
    5 Просмотры

    Решено

    CS{ячейка{...} биты: 0..267; ссылки: 0..0} - это строковое представление фрагмента. Срез - это структура для считывания ячейки.

    В вашем примере, в зависимости от контекста, 2 разные ячейки возвращаются и преобразуются в фрагменты. Первый имеет 267 бит, а второй - 268 бит, но также начинается с бита 1.

    То есть, несмотря на то, что эти ячейки разные, поскольку срезы начинаются с разных индексов, в конце они представляют одно и то же, и, как вы сказали, после их синтаксического анализа с использованием parse_std_addr, они оба возвращают один и тот же адрес.

    Используя этот адрес, они должны создать один и тот же дочерний адрес. Ваша проблема может заключаться в этой части вашего кода.

  • 0 Голоса
    2 Сообщения
    19 Просмотры

    В среде testnet есть код операции GASCONSUMED, выполняющий именно это. Обновление еще не отправлено в основную сеть.

  • Импорт кошелька по закрытому ключу

    0 Голоса
    2 Сообщения
    59 Просмотры

    Должна быть возможность отрезать последнюю половину ключа (64 шестнадцатеричных символа), которая на самом деле является открытым ключом, и использовать оставшуюся часть в других кошельках.

  • [Решено] Что означает статус кошелька "неактивный"?

    0 Голоса
    3 Сообщения
    932 Просмотры

    Спасибо вам за ваш ответ. Что я должен сделать, чтобы активировать свой кошелек?

  • Как переключить основную сеть на тестовую в tg wallet bot?

    0 Голоса
    2 Сообщения
    19 Просмотры

    быстрый ответ: на данный момент для @wallet нет тестовой сетевой среды.

    Но если вы хотите, вы можете использовать @CryptoBOT / https://t.me/CryptoTestnetBot чтобы протестировать.

  • Ошибка при установке mytonctrl

    0 Голоса
    1 Сообщения
    63 Просмотры

    Привет. У меня Ubuntu 20.04

    wget https://raw.githubusercontent.com/ton - blockchain/mytonctrl/master/scripts/install.sh - ok

    sudo bash install.sh -m lite - [6/6] TON software installation complete

    ~$ mytonctrl:

    Traceback (most recent call last): File "/usr/src/mytonctrl/mytonctrl.py", line 1216, in <module> console.Run() File "/usr/src/mytonctrl/mypyconsole/mypyconsole.py", line 97, in Run self.startFunction() File "/usr/src/mytonctrl/mytonctrl.py", line 106, in PreUp check_vport() File "/usr/src/mytonctrl/mytonctrl.py", line 122, in check_vport vconfig = ton.GetValidatorConfig() File "/usr/src/mytonctrl/mytoncore.py", line 1929, in GetValidatorConfig result = self.validatorConsole.Run("getconfig") File "/usr/src/mytonctrl/mytoncore.py", line 66, in Run raise Exception("ValidatorConsole error: Validator console is not settings") Exception: ValidatorConsole error: Validator console is not settings

    Что мне теперь делать?

    Оригинал вопроса

  • Как оптимизировать использование газа в смарт-контракте?

    0 Голоса
    2 Сообщения
    19 Просмотры

    Есть страница на ton.org в нем представлены некоторые рекомендации по оптимизации расхода газа:

    https://docs.ton.org/develop/howto/fees-low-level

  • Как измерить длину списка в стиле Lisp?

    0 Голоса
    2 Сообщения
    26 Просмотры

    Определение длины списка в стиле lisp - это ручной процесс. Вы должны просмотреть весь список. Таким образом, это, скорее всего, не имеет смысла в контексте смарт-контракта, поэтому лучше сохранить отдельную переменную счетчика всякий раз, когда вам понадобится использовать length.

  • Какие числа означают "истина" и "ложь" в FunC?

    0 Голоса
    2 Сообщения
    11 Просмотры

    ложь равна нулю. истина - это "-1`. Все остальные ненулевые целые числа также подобны логическому значению "true".

  • Может ли переменная FunC хранить результат логического выражения?

    0 Голоса
    2 Сообщения
    12 Просмотры

    Да, это поддерживается, и ваш код действителен. - достаточно?будет целым числом со значением-1`.

  • 0 Голоса
    2 Сообщения
    16 Просмотры

    Ваш перевод происходит в mainnet и будет отправлен на указанный вами адрес. То, что произойдет, будет зависеть от нескольких факторов:

    Если вы (или ваш кошелек) отключите флажок "отказ", сумма в тоннах будет отправлена и останется на счете получателя.

    Если вы (или ваш кошелек) сохраняете флаг "отказ", то это зависит от учетной записи получателя:

    О. Если в пункте назначения нет смарт-контракта, он восстановится.

    Б. Если существует смарт-контракт, это будет зависеть от его поведения, и он может принять или отклонить его.

  • Как мы генерируем хэш транзакции в блокчейне TON?

    0 Голоса
    2 Сообщения
    117 Просмотры

    Вы можете сгенерировать хэш с помощью boc до транзакции или после транзакции с помощью response boc.

    const bocCell = TonWeb.boc.Cell.oneFromBoc(TonWeb.utils.base64ToBytes(response.boc)); const hash = TonWeb.utils.bytesToBase64(await bocCell.hash());
  • Как прочитать строку по одному символу за раз?

    0 Голоса
    2 Сообщения
    14 Просмотры

    Для чтения фрагмента вы можете использовать load_uint(8) в функции.

    Более подробную информацию можно проверить на примере, подобном здесь: https://docs.ton.org/develop/smart-contracts/guidelines/tips#spend-less-gas-по-крупным-смарт-контрактам

    () recv_external(slice in_msg) impure { var signature = in_msg~load_bits(512); var cs = in_msg; var (subwallet_id, valid_until, msg_seqno) = (cs~load_uint(32), cs~load_uint(32), cs~load_uint(32)); throw_if(36, valid_until <= now()); var ds = get_data().begin_parse(); var (stored_seqno, stored_subwallet, public_key, plugins) = (ds~load_uint(32), ds~load_uint(32), ds~load_uint(256), ds~load_dict()); ds.end_parse(); throw_unless(33, msg_seqno == stored_seqno); throw_unless(34, subwallet_id == stored_subwallet); throw_unless(35, check_signature(slice_hash(in_msg), signature, public_key)); accept_message(); set_data(begin_cell() .store_uint(stored_seqno + 1, 32) .store_uint(stored_subwallet, 32) .store_uint(public_key, 256) .store_dict(plugins) .end_cell()); commit(); cs~touch(); int op = cs~load_uint(8);
  • Где я могу увидеть STON.fi умные контракты?

    0 Голоса
    2 Сообщения
    29 Просмотры

    Да, вы можете найти код здесь

    https://github.com/ston-fi/dex-core

  • Как "объединить" два числа в функции?

    0 Голоса
    2 Сообщения
    21 Просмотры
    int concat(int x, int y, int y_len) { return (x << y_len) ^ y; }
  • Тело транзакции для jetton и NFT

    0 Голоса
    1 Сообщения
    51 Просмотры

    я хочу знать, какой адрес является необязательным, потому что я много раз определял адрес основного кошелька. это рабочий пример. я хочу сократить этот метод, если это возможно. Этот метод длинный, и я сомневаюсь, что я добавил в него ненужный код или метод. итак, кто-нибудь знает, что здесь за ненужный код, который я должен удалить, или как мы можем сократить этот метод?

    Адрес кошелька: адрес кошелька основного владельца toAddress : адрес назначения (для перевода) nftAddress : адрес NFT

    Использование : react js и node js

    const forwardPayload = beginCell(). storeUint(0, 32). storeStringTail("UNSTAKED"). endCell(); const transferNftBody = beginCell(). storeUint(0x5fcc3d14, 32). // Opcode for NFT transfer storeUint(0, 64). // query_id storeAddress(Address.parse(toAddress)). // new_owner storeAddress(walletAddress). // response_destination for excesses storeBit(0). // we do not have custom_payload storeCoins(toNano("0.01")). // forward_amount storeBit(1). // we store forward_payload as a reference storeRef(forwardPayload). // store forward_payload as a reference endCell(); const internalMessage = beginCell(). storeUint(0x18, 6). // bounce storeAddress(Address.parse(nftAddress)). storeCoins(toNano("0.05")). storeUint(1, 1 + 4 + 4 + 64 + 32 + 1 + 1). // We store 1 that means we have body as a reference storeRef(transferNftBody). endCell(); let toSign = beginCell(). storeUint(698983191, 32). // subwallet_id | We consider this further storeUint(Math.floor(Date.now() / 1e3) + 60, 32). // Transaction expiration time, +60 = 1 minute storeUint(seqno, 32). // store seqno storeUint(0, 8). storeUint(3, 8). // store mode of our internal transaction storeRef(internalMessage); // store our internalMessage as a reference let signature = sign(toSign.endCell().hash(), keyPair.secretKey); // get the hash of our message to wallet smart contract and sign it to get signature let body = beginCell(). storeBuffer(signature). // store signature storeBuilder(toSign). // store our message endCell(); let externalMessage = beginCell(). storeUint(0b10, 2). // ext_in_msg_info$10 storeUint(0, 2). // src -> addr_none storeAddress(walletAddress). // Destination address storeCoins(0). // Import Fee storeBit(0). // No State Init storeBit(1). // We store Message Body as a reference storeRef(body). // Store Message Body as a reference endCell(); const result = client.sendFile(externalMessage.toBoc());

    Оригинал вопроса

  • Использование продолжения (cont) в функциях

    0 Голоса
    1 Сообщения
    4 Просмотры

    Позвольте функции "вызывать", например:

    int call((int -> int) f, int x) { return f(x); }

    Но мне нужно сохранить "f" на этапе развертывания smc в качестве начального состояния. Как я могу сохранить "f"? Я вижу функцию "bless" для разбора фрагмента на продолжение, но как создать фрагмент "f"?

    Оригинал вопроса

  • Что означает обозначение "x - y" в документации TON?

    0 Голоса
    2 Сообщения
    12 Просмотры

    Это "входы" и "выходы" операции. Часть перед "-" - это то, что должно быть в верхней части стека для использования. Часть после -" - это то, что помещается на вершину стека после его завершения. Буквы обозначают типы данных (Builder обозначается как b` и так далее).

    Таким образом, в данном конкретном случае это обозначение означает, что операция требует, чтобы экземпляр типа данных Builder находился в верхней части стека, она берет этот экземпляр Builder и возвращает число (битов, уже сохраненных в этом Builder), помещая его в верхнюю часть стека. Обратите внимание, что сам конструктор исчезает из стека в процессе работы.

  • 0 Голоса
    2 Сообщения
    13 Просмотры

    TON стремится быть децентрализованной системой, как и большинство блокчейнов. Это означает, что вместо того, чтобы полагаться на какую-то "единую сверхдержаву", лучше иметь "совокупность равных сил". А это значит, что для системы было бы нехорошо, если бы появился какой-нибудь "доминирующий супервалидатор" с безумной суммой в качестве ставки. Лучше иметь много отдельных валидаторов с меньшими суммами.

    Вот почему система настроена таким образом, что побуждает людей создавать больше валидаторов вместо того, чтобы вкладывать все свои деньги в один. Это достигается за счет ограничения прибыли валидаторов после некоторого ограничения (сейчас это около 900 тысяч, но в будущем это может измениться).

    Когда у валидатора есть ставка от 300 до 900 тысяч, добавление большего количества тонкоинов к ставке приводит к увеличению прибыли, поэтому есть мотивация делать это. Но после достижения предельного уровня добавление большего количества денег перестает приносить больше прибыли. Так что нет особого смысла добавлять деньги в валидатор, который достиг этого предела. Если у кого-то есть Toncoins и он хочет поставить их на кон, гораздо лучше выбрать другого валидатора, который еще не достиг 900 тысяч, чтобы инвестиции приносили прибыль.

    Таким образом, прямого запрета на добавление "слишком большого количества" тонкоинов в валидатор нет, они не исчезнут или что-то в этом роде. Просто нет особого смысла делать это, когда есть более выгодные варианты.

  • Есть ли "перерыв" в функции?

    0 Голоса
    1 Сообщения
    10 Просмотры

    Когда вы реализуете управление потоком в своей программе и у вас есть цикл, иногда вам нужно выпустить путь выполнения из этого цикла, пока его состояние еще не завершено. Во многих языках программирования для этого есть функция break. Есть ли что-то подобное в FunC?

    Этот вопрос был импортирован из чата Telegram: <***Скрыто***

    click to show

    Оригинал вопроса