Publicación
Comparte tu conocimiento.
Guía de transacciones de SUI: desde la configuración hasta la ejecución y la verificación
Guía de transacciones de Sui: desde la configuración hasta la ejecución y la verificación
Si sientes curiosidad por conocer los aspectos básicos de la ejecución de transacciones en la cadena de bloques Sui y quieres una guía práctica y detallada que te guíe paso a paso.
En este artículo, analizaremos todo el proceso: desde configurar tu entorno de cliente, comprobar los objetos de tu monedero, calcular las comisiones de gas, hasta firmar y ejecutar una transacción y, por último, verificar sus detalles.
Vamos a desglosarlo paso a paso:
¿Qué hace que Sui sea tan especial? 🔥
Sui ofrece una plataforma altamente optimizada para aplicaciones descentralizadas (dApps) y contratos inteligentes. Su elegante diseño para gestionar las tarifas de gas y la lógica de las transacciones lo convierte en un emocionante campo de juego para los desarrolladores que buscan ampliar los límites de la tecnología Web3.
#2. Primeros pasos: configuración del entorno y configuración de billetera ⚙️
2.1. Configuración de su entorno de cliente Sui
Antes de sumergirse en las transacciones, asegúrese de que su cliente de Sui esté configurado correctamente. Sui admite múltiples redes (devnet, mainnet, testnet) y puedes comprobar cuál está activa con el siguiente comando:
➜ sui client envs
╭─────────┬─────────────────────────────────────┬─��──────╮
│ alias │ url │ active │
├─────────┼─────────────────────────────────────┼────────┤
│ devnet │ https://fullnode.devnet.sui.io:443 │ │
│ mainnet │ https://fullnode.mainnet.sui.io:443 │ │
│ testnet │ https://fullnode.testnet.sui.io:443 │ * │
╰─────────┴─────────────────────────────────────┴────────╯
Esto confirma que está conectado a la red de prueba. Estar en la red correcta es el primer paso hacia una transacción exitosa.
#2.2. Comprobando tu billetera activa
A continuación, verifica la dirección de tu monedero activo. Esto es crucial porque cada transacción está vinculada a la identidad de tu monedero:
➜ sui client active-address
0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73
#2.3. Consulta de objetos propios
Con la API SUIX_GetOwnedObjects, puedes obtener detalles sobre los objetos (como monedas) que posees en la cadena de bloques. Este comando te ayuda a comprobar el saldo de tu cuenta y los activos disponibles para las transacciones:
{
"jsonrpc": "2.0",
"id": 1,
"method": "suix_getOwnedObjects",
"params": [
"0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73",
{
"filter": {
"MatchAll": [
{
"StructType": "0x2::coin::Coin<0x2::sui::SUI>"
}
]
},
"options": {
"showType": true,
"showOwner": true,
"showPreviousTransaction": true
}
}
]
}
Este paso es vital para verificar que tu monedero tiene las monedas necesarias (en este caso, monedas SUI) antes de intentar realizar cualquier transacción.
#3. Cálculo del gas: presupuestación de los costos de transacción 💸
El gas es el combustible que impulsa las transacciones de la cadena de bloques. Es esencial entender tanto el precio del gas como su presupuesto para evitar errores en las transacciones.
3.1. Buscando el precio de la gasolina
El precio actual de la gasolina se puede recuperar mediante la llamada a la API Suix_GetReferenceGasPrice:
{
"jsonrpc": "2.0",
"id": 1,
"method": "suix_getReferenceGasPrice",
"params": []
}
Si la API devuelve «1000", significa que cada unidad de gas cuesta 1000 MIST. Recuerde que 1 SUI equivale a 10^9 MIST, por lo que incluso los números más pequeños en MIST pueden sumar a la hora de presupuestar.
3.2. Establecer el presupuesto de gas
Su presupuesto de gas es la cantidad máxima de gas (en términos de cantidad de combustible) que está dispuesto a gastar. Para nuestro ejemplo, supongamos que su presupuesto de gas es de 4964000 MIST. El costo total de una transacción normalmente se calcula de la siguiente manera:
Costo total = costo de cálculo más costo de almacenamiento: reembolso de almacenamiento
Por ejemplo: • Costo de cálculo: 1 000 000 MIST • Costo de almacenamiento: 2.964.000 MIST • Reembolso por almacenamiento: 978.120 MIST
Por lo tanto, el costo neto se convierte en 1 000 000 + 2 964 000 − 978.120 = 2.985.880 MIST.
Definir con precisión su presupuesto de gas garantiza que su transacción cuente con fondos suficientes para ejecutarse con éxito.
4. Elaborar la transacción: un simulacro de confianza 🔧
Antes de enviar una transacción real, es mejor realizar un «simulacro» para detectar cualquier posible problema. Esto te permite validar la lógica de la transacción sin gastar gasolina.
#4.1. Creación de una transacción simulada
Este es un ejemplo de una función de TypeScript que muestra cómo preparar y ejecutar una transacción en seco. Este código describe cómo dividir monedas y preparar las operaciones de transferencia:
export const signSuiDryRunTransaction = async (requestParams: SignDryRequestParams): Promise<string> => {
const { gasPrice, privateKey, coinRefs, network, recipients } = requestParams;
const keypair = Ed25519Keypair.fromSecretKey(privateKey);
const tx = newTransaction();
// Configure gas payment, price, and sender
tx.setGasPayment(coinRefs);
tx.setGasPrice(gasPrice);
tx.setSender(keypair.toSuiAddress());
// Split coins based on each recipient's amount
const coins = tx.splitCoins(tx.gas, recipients.map((transfer) => transfer.amount));
recipients.forEach((transfer, index) => {
tx.transferObjects([coins[index]], transfer.to);
});
// Build and sign the transaction with the client
const client = newSuiClient({ url: getFullnodeUrl(network) });
const bytes = await tx.build({ client });
const { signature } = await keypair.signTransaction(bytes);
await verifyTransactionSignature(bytes, signature, { address: keypair.getPublicKey().toSuiAddress() });
return JSON.stringify([toBase64(bytes), signature]);
};
Este paso en seco es crucial para garantizar que todos los detalles sean correctos antes de comprometer fondos reales.
#5. Firmar y ejecutar la transacción: juntándolo todo ✍️
Tras un exitoso simulacro, el siguiente paso es firmar y enviar la transacción en la cadena de bloques.
#5.1. Firmar la transacción
A continuación se muestra un ejemplo refinado de función que firma la transacción con el presupuesto de gas especificado:
const signSuiTransaction = async (requestParams: SignRequestParams): Promise<string> => {
const { gasBudget, gasPrice, privateKey, coinRefs, network, recipients } = requestParams;
const keypair = Ed25519Keypair.fromSecretKey(privateKey);
const tx = newTransaction();
// Set up gas parameters, including the gas budget
tx.setGasPayment(coinRefs);
tx.setGasPrice(gasPrice);
tx.setGasBudget(gasBudget);
tx.setSender(keypair.toSuiAddress());
// Split coins for each recipient
const coins = tx.splitCoins(tx.gas, recipients.map((transfer) => transfer.amount));
recipients.forEach((transfer, index) => {
tx.transferObjects([coins[index]], transfer.to);
});
// Build the transaction and sign it
const client = newSuiClient({ url: getFullnodeUrl(network) });
const bytes = await tx.build({ client });
const { signature } = await keypair.signTransaction(bytes);
await verifyTransactionSignature(bytes, signature, { address: keypair.getPublicKey().toSuiAddress() });
return JSON.stringify([toBase64(bytes), signature]);
};
Esta función integra todos los parámetros necesarios, incluidos los detalles del gas y los destinatarios, para garantizar que su transacción esté firmada de forma segura y lista para su ejecución.
5.2. Ejecutando la transacción
Una vez firmada, la transacción se envía a la cadena de bloques mediante el punto final de la API SUI_ExecuteTransactionBlock:
curl --location 'https://fullnode.testnet.sui.io:443' \
--header 'Content-Type: application/json' \
--data '{
"jsonrpc": "2.0",
"id": 1,
"method": "sui_executeTransactionBlock",
"params": [
"<base64-encoded-transaction>",
["<signature>"],
{
"showInput": true,
"showRawInput": true,
"showEffects": true,
"showEvents": true,
"showObjectChanges": true,
"showBalanceChanges": true
},
"WaitForLocalExecution"
]
}'
Esta llamada devuelve una respuesta JSON detallada con información como el resumen de la transacción, el consumo de gas, las modificaciones de objetos y las actualizaciones de saldo.
Nº 6. Verificación de su transacción: Cross-Check Everything 🔍
Después de ejecutar la transacción, es esencial verificar que todo se haya ejecutado según lo esperado.
#6.1. Verificación del navegador
Puedes comprobar tu transacción en un explorador de cadenas de bloques como Suivision Testnet Explorer. El explorador muestra todos los detalles de la transacción en un formato visual intuitivo, lo que facilita la detección de cualquier problema.
6.2. Verificación de línea de comandos
Para una auditoría más detallada, utilice la línea de comandos:
sui client tx-block -- 3FopuDy5qzKm1kLRFZCdi8Lynadym9j15NaVxzUH6nYD
Este comando proporciona un desglose completo de la transacción, incluidos los detalles del remitente, el pago del gas, los cambios en los objetos y el estado de ejecución.
7. Análisis de la respuesta de JSON: comprensión de las capas de una transacción
Analicemos la respuesta JSON que recibes después de ejecutar tu transacción:
7.1. Descripción general de la transacción
- jsonrpc e id: campos estándar para el protocolo JSON-RPC.
- resumen: el hash único de la transacción (p. ej., «3fopudy5qzkm1klrfzcdi8lynadym9j15navxzuh6nyd»), que se utiliza para el seguimiento.
- Timestamps y punto de control: proporciona un contexto sobre cuándo se ejecutó la transacción y el punto de control de la cadena de bloques en ese momento.
7.2. Contenido de la transacción
- Datos del remitente y del gas: incluye la dirección del remitente y todas las configuraciones relacionadas con el gas (pago, precio, presupuesto).
- Operaciones (transacciones): la lógica de las transacciones incluye operaciones como:
- SplitCoins: dividir una moneda de gasolina en partes más pequeñas.
- TransferObjects: mueve segmentos de monedas a las direcciones de los destinatarios especificadas.
- Firmas: las firmas criptográficas (codificadas en Base64) garantizan la autenticidad de la transacción.
7.3. Efectos de ejecución
- Estado: el estado de «éxito» confirma que la transacción se procesó sin errores.
- Consumo de gas: detalla los costos computacionales y de almacenamiento, junto con cualquier reembolso aplicable.
- Cambios en los objetos: describe qué objetos se modificaron, crearon o actualizaron como resultado de la transacción.
- Dependencias: muestra los valores hash de las transacciones relacionadas de los que depende esta transacción.
Este desglose granular es esencial para depurar y mejorar el rendimiento de su dApp.
8. Perspectivas prácticas para desarrolladores: consejos y conclusiones
Comprender cada paso de este proceso le proporciona las habilidades necesarias para crear aplicaciones Web3 seguras y eficientes en Sui. Estos conocimientos no solo lo ayudan a solucionar problemas, sino que también le permiten innovar con confianza dentro del ecosistema de Sui.
- Sui
- SDKs and Developer Tools
- Transaction Processing
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.