Skip to Content
dApps

Transacciones

Conecta la cartera antes de enviar solicitudes. Sustituye las direcciones y URL de manifiesto de ejemplo por valores válidos. Para autenticación, usa un desafío de un solo uso generado por el servidor y verifica la prueba en tu servidor.

Aprende a enviar transacciones en TON.


Enviar una transacción

Envía TON usando el método send con sendTransaction:

const result = await provider.send({ method: 'sendTransaction', id: Date.now().toString(), params: [ JSON.stringify({ valid_until: Math.floor(Date.now() / 1000) + 600, // 10 min validity messages: [ { address: '0:1234...', // Recipient address (raw format) amount: '1000000000', // Amount in nanotons (1 TON = 10^9 nanotons) } ] }) ] }) if ('result' in result) { console.log('Transaction BOC:', result.result) } else { console.error('Transaction failed:', result.error.message) }

Enviar varios mensajes

El proveedor anuncia actualmente un máximo de cuatro mensajes. Consulta deviceInfo.features para conocer el límite anunciado por la cartera; no lo interpretes como un límite de toda la red:

const result = await provider.send({ method: 'sendTransaction', id: Date.now().toString(), params: [ JSON.stringify({ valid_until: Math.floor(Date.now() / 1000) + 600, messages: [ { address: '0:recipient1...', amount: '500000000', // 0.5 TON }, { address: '0:recipient2...', amount: '300000000', // 0.3 TON } ] }) ] })

Enviar con datos asociados

Incluye datos asociados para interactuar con contratos inteligentes:

import { beginCell } from '@ton/core' // Create a comment cell const comment = beginCell() .storeUint(0, 32) // comment op code .storeStringTail('Hello from dApp!') .endCell() const result = await provider.send({ method: 'sendTransaction', id: Date.now().toString(), params: [ JSON.stringify({ valid_until: Math.floor(Date.now() / 1000) + 600, messages: [ { address: '0:recipient...', amount: '100000000', payload: comment.toBoc().toString('base64'), } ] }) ] })

Enviar con StateInit

Despliega un contrato o inicializa el estado:

const result = await provider.send({ method: 'sendTransaction', id: Date.now().toString(), params: [ JSON.stringify({ valid_until: Math.floor(Date.now() / 1000) + 600, messages: [ { address: '0:contract...', amount: '50000000', stateInit: stateInitBoc.toString('base64'), // Base64 encoded StateInit } ] }) ] })

Enviar una transacción con el SDK

import { useTonConnectUI } from '@tonconnect/ui-react' function SendButton() { const [tonConnectUI] = useTonConnectUI() const handleSend = async () => { const result = await tonConnectUI.sendTransaction({ validUntil: Math.floor(Date.now() / 1000) + 600, messages: [ { address: 'EQA...', amount: '1000000000', } ] }) console.log('BOC:', result.boc) } return <button onClick={handleSend}>Send 1 TON</button> }

Formatos de dirección

TON usa distintos formatos de dirección:

import { Address } from '@ton/core' // Raw format (used in provider) const raw = '0:1234567890abcdef...' // User-friendly format (bounceable) const friendly = Address.parse(raw).toString() // e.g., 'EQASdf...' // Non-bounceable format const nonBounceable = Address.parse(raw).toString({ bounceable: false }) // e.g., 'UQASdf...' // Convert from friendly to raw const addr = Address.parse('EQASdf...') const rawAddress = `${addr.workChain}:${addr.hash.toString('hex')}`
Última actualización el