TON Overflow на русском

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

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

  • Как мне расшифровать ответ от getTransactions в TonWeb SDK?

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

    Это интерфейс для getTransactions в typescript. Вы можете использовать его для получения дополнительной информации о том, как разобрать ответ - [ссылка на github](https://github.com/ton - сообщество/ton/blob/master/src/клиент/api/HttpApi.ts#L85)

    Возврат Tonweb содержит те же данные. То есть оба клиента используют один и тот же API

  • [Решено] Существует ли расширение TONCLI для VSCode?

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

    Не могли бы вы, пожалуйста, поподробнее?

    TONCLI - это (очевидно) клиент CLI, что бы вы ожидали от него в VSCode?

  • [Решено] Как мне настроить сайт TON?

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

    Затем вам необходимо установить и настроить rldp-http-прокси. Вот пошаговое руководство: https://ton.org/docs/#/web3/sites-and-proxy?id=running-ton-site

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

    Поскольку клиентское программное обеспечение и рассматриваемый смарт-контракт являются двумя отдельными объектами, было бы лучше фактически проверить, что транзакция действительно была обработана, а исходящие сообщения были созданы и отправлены на обработку.

    ** Что вам следует сделать, так это:**

    1). Создайте внешнее сообщение для вашего кошелька highload со списком денежных переводов, которые необходимо выполнить. Получите хэш внешнего сообщения или его тела.

    2). Отправьте сообщение в сеть.

    3). Опросите последние транзакции из блокчейна, используя идентификатор учетной записи вашего кошелька, и сопоставьте транзакцию, используя предварительно сгенерированный хэш.

    4). Проверьте, что транзакция была выполнена успешно (код выхода = 0 || 1) и убедитесь, что исходящие сообщения содержат все требуемые передачи значений с правильными значениями.

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

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

    Решено

    В TON нет единого формата хранения данных. Каждый смарт-контракт может иметь свой собственный способ хранения / кодирования своих данных. Возьмем [смарт-контракт NFT item](https://github.com/ton-blockchain/token-contract/blob/main/nft/nft - item.fc#L19-L47) в качестве примера. Он хранит свои данные в следующем формате:

    ;; ;; Storage ;; ;; uint64 index ;; MsgAddressInt collection_address ;; MsgAddressInt owner_address ;; cell content ;;

    И у контракта есть две внутренние функции для фактической загрузки и сохранения своих данных:

    (int, int, slice, slice, cell) load_data() { slice ds = get_data().begin_parse(); var (index, collection_address) = (ds~load_uint(64), ds~load_msg_addr()); if (ds.slice_bits() > 0) { return (-1, index, collection_address, ds~load_msg_addr(), ds~load_ref()); } else { return (0, index, collection_address, null(), null()); ;; nft not initialized yet } } () store_data(int index, slice collection_address, slice owner_address, cell content) impure { set_data( begin_cell() .store_uint(index, 64) .store_slice(collection_address) .store_slice(owner_address) .store_ref(content) .end_cell() ); }

    Данные хранятся в виде "ячейки", которая может иметь произвольный формат и может ссылаться на другие вложенные ячейки. Ищите концепцию "Мешка с ячейками" в белой книге.

    Однако вам не следует пытаться декодировать данные смарт-контракта напрямую, даже если вы знаете формат сохраненных данных. Правильным способом было бы использовать "общедоступный API" контракта посредством вызова его методов get. В контракте NFT item есть [метод получения](https://github.com/ton-blockchain/token - contract/blob/main/nft/nft-item.fc#L137-L144) именно для этой цели:

    ;; ;; GET Methods ;; (int, int, slice, slice, cell) get_nft_data() method_id { (int init?, int index, slice collection_address, slice owner_address, cell content) = load_data(); return (init?, index, collection_address, owner_address, content); }

    Он вернет вам все необходимые данные в декодированном виде.

    И [здесь](https://github.com/slavafomin/tonweb/blob/typescripted/src/contract/token/nft/nft - item.ts#L83-L109) - это то, как вы бы проанализировали результат этого метода get:

    // Calling the get-method const result = await this.provider.call2( myAddress.toString(), 'get_nft_data' ); // Parsing the data returned by it const isInitialized = ( (expectBN(result[0]).toNumber() === -1) ); const index = expectBN(result[1]).toNumber(); const collectionAddress = ( parseAddressFromCell(result[2]) ); const ownerAddress = (isInitialized ? parseAddressFromCell(result[3]) : null ); const contentCell = result[4]; // Single NFT without a collection const contentUri = ((isInitialized && !collectionAddress) ? parseOffchainUriCell(contentCell) : null );

    Кроме того, некоторые массивы данных хранятся в виде двоичных строк и требуют некоторого нетривиального синтаксического анализа с использованием TL-B schemas. Каждая библиотека предоставит вам несколько утилит для использования. Один из таких инструментов обычно называется "CellSlice", который позволяет вам считывать и декодировать биты битовой строки вручную.

    Рассмотрим этот пример из TonWeb:

    // Encoding some data as a cell const cell = new Cell(); cell.bits.writeUint('100500', 32); cell.bits.writeString('Hello World'); // Reading the data from cell (bit-string) const slice = new CellSlice(cell); slice.loadUint(32); // 100500 slice.loadString(); // Hello World slice.isEmpty(); // true

    Это должно помочь вам начать. Просто обязательно изучите все связанные концепции.

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

    Решено

    Самый удобный ресурс находится прямо из https://www.tonspace.co/. Сообщество TON день за днем совершенствует этот ресурс, чтобы новичкам было легче работать.

    Кроме того, предположим, что вы студент и у вас есть выбор, какой язык программы вам следует изучать. На данный момент базовым языком для написания смарт-контрактов TON является FunC. FunC - это специфичный для конкретной предметной области C-подобный статически типизированный язык, поэтому вы можете изучить любой аналогичный программный язык (например, C, Java), чтобы улучшить свое понимание FunC в будущем. Но, в любом случае, самый быстрый способ освоить разработку TON - это изучать и практиковать все непосредственно из документации TON.

    Кроме того, конкурсы, организуемые фондом TON, помогают погрузиться в разработку и познакомиться с другими единомышленниками. Вы можете узнать больше о планируемых конкурсах здесь.

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

    Решено

    Нет, прямо сейчас вы можете использовать только FunC в качестве языка высокого уровня для разработки смарт-контракта.

    Чтобы использовать Rust (или любой другой язык, использующий LLVM), вам следует начать с написания для него серверной части, тогда вы сможете создавать действительные инструкции TON VM из кода rust.

  • [Решено] Как работают цены на проект TON DNS?

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

    Существует 3 статьи на эту тему:

    Общие вопросы (7 вопросов-ответов) https://telegra.ph/Otvety-na-voprosy-o-TON-DNS-kanalu-Investment-kingyru-CHast-1-08-05 2. Технические вопросы (10 вопросов-ответов) https://telegra.ph/Otvety-na-voprosy-o-TON-DNS-kanalu-Investment-kingyru-CHast-2-08-06 3. Вопросы про будущее (7 вопросов-ответов) https://telegra.ph/Otvety-na-voprosy-o-TON-DNS-kanalu-Investment-kingyru-CHast-3-08-09
  • 0 Голоса
    2 Сообщения
    16 Просмотры

    Решено

    https://github.com/awesome-doge/ton-compile/blob/main/ninja-Apple M1.md

    # Install dependent packages brew update brew install openssl cmake llvm brew link openssl --force # Install ninja brew install ninja # generate env folder / clone ton source code mkdir ~/ton-env cd ~/ton-env git clone --recursive https://github.com/ton-blockchain/ton.git # compile cd ~/ton-env/ mkdir ton-bin cd ~/ton-env/ton-bin cmake ~/ton-env/ton \ -DCMAKE_BUILD_TYPE=Release \ -GNinja cpunumber=$(sysctl -n hw.logicalcpu) ninja -j $cpunumber
  • [Решено] В чем разница между wallet contract v3 и v4?

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

    Основное отличие заключается в том, что в версии 4 введены плагины, которыми может управлять пользователь и которые могут взаимодействовать с контрактами onchain.

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

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

    Я вижу токены, завернутые в Binance и Ethereum, только в качестве опций в моем ledger live. Пожалуйста, помогите.

  • [Решено] Как вы отправляете транзакции TON на Python?

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

    Решено

    Существует одно решение, основанное на сообществе, под названием pytonlib, который я нашел для отправки транзакции на Python. Пожалуйста, обратите внимание, что я сам этого не пробовал, поэтому не могу добросовестно рекомендовать это, но члены сообщества, которые работают над этим, довольно активны.

    Установите с помощью:

    pip install ton

    Вот пример того, как он используется для отправки транзакции.

    from .init import client from .wallet import wallet # Viewing transactions txs = await wallet.get_transactions() in_msg = txs[0].in_msg in_msg.source.account_address # Sender in_msg.destination.account_address # Recipient int(in_msg.amount) # Amount in nanoTONs client.from_nano(int(in_msg.value)) # Amount in TONs # Sending transaction with 1 TON await wallet.transfer('EQCl1Ug9ZT9ZfGyFH9l4q-bqaUy6kyOzVPmrk7bivmVKJRRZ', client.to_nano(1), comment='test') # Send transaction with multiple outputs await wallet.transfer( ('EQCl1Ug9ZT9ZfGyFH9l4q-bqaUy6kyOzVPmrk7bivmVKJRRZ', client.to_nano(1), 'test comment'), ('EQCl1Ug9ZT9ZfGyFH9l4q-bqaUy6kyOzVPmrk7bivmVKJRRZ', client.to_nano(0.5), 'test comment 2'), ('EQCl1Ug9ZT9ZfGyFH9l4q-bqaUy6kyOzVPmrk7bivmVKJRRZ', client.to_nano(1)) ) # Sending transaction with raw BOC data from tvm_valuetypes import Cell await wallet.transfer('EQCl1Ug9ZT9ZfGyFH9l4q-bqaUy6kyOzVPmrk7bivmVKJRRZ', client.to_nano(1), data=Cell().serialize_boc())
  • Как вы создаете новый кошелек TON программным путем?

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

    Вы можете использовать TonWeb javascript SDK.

    const tonweb = new TonWeb(); const wallet = tonweb.wallet.create({publicKey}); const address = await wallet.getAddress(); const nonBounceableAddress = address.toString(true, true, false); const seqno = await wallet.methods.seqno().call(); await wallet.deploy(secretKey).send(); // deploy wallet to blockchain const fee = await wallet.methods.transfer({ secretKey, toAddress: 'EQDjVXa_oltdBP64Nc__p397xLCvGm2IcZ1ba7anSW0NAkeP', amount: TonWeb.utils.toNano(0.01), // 0.01 TON seqno: seqno, payload: 'Hello', sendMode: 3, }).estimateFee(); const Cell = TonWeb.boc.Cell; const cell = new Cell(); cell.bits.writeUint(0, 32); cell.bits.writeAddress(address); cell.bits.writeGrams(1); console.log(cell.print()); // print cell data like Fift const bocBytes = cell.toBoc(); const history = await tonweb.getTransactions(address); const balance = await tonweb.getBalance(address); tonweb.sendBoc(bocBytes);
  • Поддерживает ли блокчейн TON HD кошельки?

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

    я думаю, это то, что вам нужно https://github.com/ton-blockchain/mnemonic2key

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

    Развертывание кошелька - это процесс загрузки его байт-кода в блокчейн. Но все, что необходимо для успешного проведения транзакции, - это правильный адрес TON (например, при использовании приложения кошелька), даже если оно не было развернуто.

    Когда вы отправляете средства TONcoin на неинициализированный правильный адрес, происходит одно из следующих событий:

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

    Вы можете узнать больше о развертывании смарт-контрактов TON здесь.

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

    Решено

    Вы можете узнать больше здесь: https://ton.org/docs/develop/smart-contracts/fees

    Мастер-цепочка стоит намного дороже базовой рабочей цепочки, примерно в тысячу раз.

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

    Вы можете использовать [toncenter.com ](https://toncenter.com /) API-интерфейсы:

    Mainnet: https://toncenter.com/api/v2/jsonRPC Testnet: https://testnet.toncenter.com/api/v2/jsonRPC

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

    Решено

    Чтобы разрабатывать смарт-контракты, вам нужно, по крайней мере, изучить FunC. В процессе вы также можете изучить Fift, чтобы лучше понять, как все работает на более низком уровне.

    Для разработки Telegram-ботов вы можете использовать множество различных языков программирования общего назначения. Здесь доступно множество вариантов.

    Для клиентской части dApps вы можете использовать JavaScript или другие инструменты, которые могут сгенерировать клиентское приложение.

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

    Невозможно обновить версию кошелька с версии v3 до версии 4 без изменения адреса.

    По сути, кошелек является одним из смарт-контрактов TON blockchain, а адрес кошелька - это адрес смарт-контракта. Адрес вновь развернутого контракта в TON зависит от двух факторов - развернутого байт-кода и исходного хранилища контракта. Поскольку у нас будет новый байт-код (из-за разницы между контрактами v3 и v4) и новые исходные данные - мы всегда будем получать новый адрес.

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