• 0 Голоса
    1 Сообщения
    38 Просмотры
    // Create a transfer const seqno: number = await contract.getSeqno(); const transfer = await contract.createTransfer({ seqno, secretKey: keyPair.secretKey, messages: [ internal({ value: '0.11', to: 'EQBVXzBT4lcTA3S7gdrg5hnl5fnsSWj4oNEzNp09aQxkwj1G', body: '123456', }), ], }); const res = await contract.send(transfer);

    Я попытался расшифровать передачу с помощью transfer.hash().toString('hex'); Но после отправки я сравнил хэши, и они оказались разными.

    Я думал, что смогу найти это в данных getTransactions(): Transaction[] после отправки перевода. При попытке найти его по seqno. Потому что я знаю, что текущий seqno и транзакция с seqno+1 должны быть тем, что мне нужно. Но я не нашел seqno в элементах getTransactions().

    Как я могу получить фактический хэш после отправки перевода? Я использую библиотеку TypeScript ton. Спасибо тебе.

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

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

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

    const bocCell = TonWeb.boc.Cell.oneFromBoc(TonWeb.utils.base64ToBytes(response.boc)); const hash = TonWeb.utils.bytesToBase64(await bocCell.hash());
  • 0 Голоса
    1 Сообщения
    76 Просмотры

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

    Адрес кошелька: адрес кошелька основного владельца 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());

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

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

    Я хочу убедиться, что передача прошла успешно, используя этот метод ответа tonConnectUI.sendTransaction()

    Я использую : React js @tonconnect/ui-react @ton/тонна

    Среда : Тестовая сеть

    отправить транзакцию с помощью : tonConnectUI.sendTransaction()

    ответ на транзакцию с помощью веб-расширения : {boc:"x{B92CC224AD7A1546F9974E8ACD9B4D7305D90A21A75A24C9732DB161B7D034A0D78239814924A11BAED572D69782624216DE00BCEE93A99090469BFEE2477D0029A9A31764E4EA950000000503}\n x{620019F5CCE72C6549AE5B6A58A2B80A5E02FD23B696B24A5EDCD3C6E47A671D3AECA017D7840000000000000000000000000001}\n x{5FCC3D140000000000000000801DC05C9F00471C18F28FB322BE12D4FE504AE6C28DCE7493DB17433AE4959A0CF001AF614CF808EEEE5A8EB27AC9BD31B27BB5F6B986682F71A7F8E1A0C5F0A51F54202}"} ответ на транзакцию с помощью мобильного кошелька :

    {boc: 'te6cckEBAwEA/gAB4YgB3AXJ8ARxwY8o+zIr4S1P5QSubCjc50…T4Ajjgx5R9mRXwlqfyglc2FG5zpJ7YuhnXJKzQZwgKMscEHI='}

    =============================================================

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

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

    Итак, я решил расшифровать ответ и получить хэш Trasaction и данные проверки с помощью этого хэша из api.

    Но я не знаю, как получить хэш транзакции.

    Кто-нибудь может каким-либо образом помочь решить эту проблему? мне просто нужно подтвердить, что NFT получен в x wallet.

    Спасибо

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

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

    Вообще говоря, из сообщения об ошибке следует, что для BigInt

    Вы должны заметить, что ваша строка кода неверна: .storeUint(0,1) // forward_payload:(любая ячейка ^Cell)

    Я думаю, это должна быть "ячейка", не использующая "Uint".

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

    Решено

    Ваше понимание близко к истине.

    Насколько я понимаю, "атомарность" в данном контексте - это концепция, которая родилась задолго до блокчейна TON. Вероятно, это появилось в поле базы данных: https://en.wikipedia.org/wiki/Atomicity_(database_systems)

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

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