• Dedust sdk заменяет jetton на ton

    TON Overflow на русском
    0 Голоса
    1 Сообщения
    59 Просмотры

    https://docs.dedust.io/docs/swaps

    Здравствуйте, это работает, когда я меняю ton на jetton. Но не jetton -> ton.

    В документах "VaultJetton.createSwapPayload({ poolAddress })", откуда берется VaultJetton?

    Это из-за этого?

    const tokenVault = tonClient.open(await factory.getJettonVault(Address.parse(tokenAddress)));

    но в данном случае у него нет функции createSwapPayload

    Спасибо

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

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

    Я пытался повторно использовать кошелек, удаленный с помощью флага DESTROY_ACCOUNT_IF_ZERO (32). Способ, которым я осуществляю перевод:

    Представьте, что у нас есть 2 кошелька: A и B.

    Мы переводим N1 тонну из "A" в "B". Например, с помощью веб-кошелька, скрипта, не имеет значения. 2. B неинициализирован - его еще нет в блокчейне. Имея это в виду, мы хотели бы отправить все деньги из B обратно в A. Для этого мы собираемся использовать прилагаемый скрипт. 3. Теперь мы идем дальше и переносим N2 ТОННЫ из A в B ** снова **. Не имеет значения, сколько.

    Ожидаемое поведение: мы получаем транзакции: A->B (N1), B->A (все), A->B (N2); в конечном итоге в кошельке B содержится N2 тонн.

    Фактическое поведение: мы получаем транзакции A->B (N1), B->A (все), A->B (N2), B->A (все); в кошельке B в итоге 0 тонн.

    Сценарий для передачи B->A (all), который вызывает такое поведение:

    import TonWeb from 'tonweb'; import tonwebMnemonic from 'tonweb-mnemonic'; const apiKey = "" || undefined; // WALLET B const mnemonic = "..."; const walletVersion = "v4R2"; // WALLET A const toAddress = "..."; const SendMode = { CARRY_ALL_REMAINING_BALANCE: 128, CARRY_ALL_REMAINING_INCOMING_VALUE: 64, DESTROY_ACCOUNT_IF_ZERO: 32, PAY_GAS_SEPARATELY: 1, IGNORE_ERRORS: 2, NONE: 0 } const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); (async () => { const provider = new TonWeb.HttpProvider('https://toncenter.com/api/v2/jsonRPC', {apiKey}); const WalletClass = TonWeb.Wallets.all[walletVersion]; const mnemonicArray = mnemonic.split(" "); let { publicKey, secretKey } = await tonwebMnemonic.mnemonicToKeyPair(mnemonicArray); publicKey = Buffer.from(publicKey); secretKey = Buffer.from(secretKey); console.log(`PUBLIC KEY: ${publicKey.toString('hex')}`); const wallet = new WalletClass(provider, { publicKey }); const seqno = await wallet.methods.seqno().call() || 0; console.log(`SEQNO: ${seqno}`); await sleep(2000); const transferParams = { secretKey, toAddress, amount: 0, seqno, sendMode: SendMode.CARRY_ALL_REMAINING_BALANCE | SendMode.IGNORE_ERRORS | SendMode.DESTROY_ACCOUNT_IF_ZERO, payload: "test bug" }; console.log(JSON.stringify({...transferParams, secretKey: transferParams.secretKey.toString('hex')}, null, 2)); const response = await wallet.methods.transfer(transferParams).send(); console.log(`transfer sent to blockchain: ${JSON.stringify(response, null, 2)}`); })();

    Странная вещь: если вы отправите A->B (N) снова, он автоматически создаст новую передачу B->A (all) снова и снова. Иногда она останавливается на 2 повторениях, иногда на 4.

    Я использую недоступный адрес: UQAPqRlewultl8xHCKGsrenb4PZaQ0QDfPYoK1fwVUODdZRd.

    Я также попробовал отправить TON с кошелька "C (C->B). И деньги ДЕЙСТВИТЕЛЬНО остались на B`. НО как только я снова сделал перевод "A->B", все деньги, включая тонны, отправленные с "C", автоматически перешли на "A"!

    Пример проявления этой ошибки (это ошибка??) находится здесь:

    https://tonviewer.com/EQAySjlsHUY2EEedO5GTenzFvAnR5E-4ptwfeox6OZYnNvGF

    Это кошелек B. Скрипт отправил только первое сообщение с текстом "тестовая ошибка". Остальные сообщения отправлялись автоматически при любом входящем переводе с A.

    В этом взаимодействии:

    A is UQAPqRlewultl8xHCKGsrenb4PZaQ0QDfPYoK1fwVUODdZRd * B is EQAySjlsHUY2EEedO5GTenzFvAnR5E-4ptwfeox6OZYnNvGF * C is UQBwpXsIVrij8UQ2OpPK2EyeVBrlN6mnOkmThb3k6K-UHZyL

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

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

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

    Часто предлагается использовать TypeScript для разработки на TON. Руководства по использованию таких библиотек, как ton из npm, полны примеров TS. Что, если я готов использовать JavaScript, но еще не готов к TypeScript? Могу ли я просто использовать те же библиотеки или мне нужны другие?

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

    click to show

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

  • Как создать кошелек V4R2 с помощью JS/TS?

    TON Overflow на русском
    0 Голоса
    2 Сообщения
    264 Просмотры

    Это довольно просто с помощью ton.js или библиотека TonWeb, инструкции для обоих можно найти в этом руководстве: https://ton-community.github.io/tutorials/01-wallet/

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

    Вы можете использовать Buffer.from, чтобы решить эту проблему.

  • 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 Сообщения
    22 Просмотры

    Решено

    Вы можете сохранить хэш транзакции перед ее отправкой, а затем запросить метод API Toncenter getTransactionByInMessageHash, чтобы проверить, была ли подтверждена транзакция с таким хэшем или нет

    Пример:

    // Sleep function: const sleep = ms => new Promise(r => setTimeout(r, ms)) // `msg` is a Cell containing your external message // Convert message Cell to BOC String const boc = await msg.toBoc(false) // Calculate it's hash const hash = tonweb.utils.bytesToBase64(await msg.hash()) // Send message and run a loop until transaction with that hash confirms await tonweb.sendBoc(boc) var txs = [] while (txs.length == 0) { await sleep(1200) // some delay between API calls const resp = await fetch('https://toncenter.com/api/index/getTransactionByInMessageHash?&include_msg_body=false&msg_hash=' + encodeURIComponent(hash)) txs = await resp.json() } console.log('Done!')