
Solana Dev 101 — Cómo transferir tokens de Solana con TypeScript
Tabla de contenido
- 1. Configura el proyecto
- 2. Importa las bibliotecas
- 3. Establece una conexión con la red de Solana
- 4. Define los pares de claves del pagador de comisiones y del propietario anterior
- 5. Especifica la clave pública del mint y la dirección de la billetera del destinatario
- 6. Genera la dirección de token asociada (ATA) para el destinatario
- 7. Especifica las claves públicas de la cuenta de token de origen y la cuenta de destino
- 8. Crea una nueva transacción y agrega la instrucción de transferencia
- 9. Envía la transacción a la red de Solana
- Código completo
En Solana, las cuentas de token se utilizan para almacenar y administrar tokens, incluidos los tokens no fungibles (NFT). Esto puede hacer que transferir tokens mediante código resulte algo complicado para quienes comienzan a desarrollar en Solana. En este tutorial, aprenderemos a transferir NFT de una billetera a otra en la blockchain de Solana. Para ello, crearemos una nueva cuenta de token asociada (ATA) para el destinatario y transferiremos el NFT a esa cuenta.
Simplifica el desarrollo de programas de Solana con Kite.
Diferencias entre las transferencias de NFT y SOL
En una transferencia de tokens, se debe crear una nueva cuenta de token asociada (ATA) para iniciar la transferencia del propietario anterior al nuevo propietario. Esto no ocurre mediante una transferencia de billetera → billetera.
Esto difiere de una transferencia normal de SOL, ya que el programa del sistema gestiona la transferencia y no es necesario crear una nueva ATA para almacenar los SOL de la transacción.
Consulta la siguiente representación visual para ver un breve resumen del proceso:
En resumen, en una transferencia de NFT o tokens, el activo se envía desde la ATA actual a una ATA recién creada que pertenece al destinatario, en lugar de transferirlo directamente a la billetera.
Requisitos previos
Antes de continuar con este tutorial, asegúrate de cumplir los siguientes requisitos:
- Conocimientos básicos de TypeScript.
- Tener Node.js instalado en tu equipo.
- Tener instalado el gestor de paquetes npm o yarn.
Pasos para crear el código
Ahora, sigue estos pasos para crear el código:
1. Configura el proyecto
- Crea un nuevo directorio para tu proyecto llamado “Transfer”.
- Abre una terminal y navega hasta la carpeta del proyecto.
- Inicializa un nuevo proyecto de Node.js con el comando:
npm init -yoyarn init -y. - Instala las dependencias necesarias ejecutando el comando:
npm install @solana/web3.js @solana/spl-token bs58- Crea un nuevo archivo de TypeScript, por ejemplo, transferNFT.ts, y ábrelo en un editor de código.
2. Importa las bibliotecas
Importa las bibliotecas necesarias y define la función de transferencia en un nuevo archivo transferNFT.ts:
import { Keypair, Transaction, Connection, PublicKey } from "@solana/web3.js";
import { createTransferCheckedInstruction, getAssociatedTokenAddress } from "@solana/spl-token";
import * as bs58 from "bs58";
async function transfer() {
// Code for transferring NFTs goes here
}
transfer();En el código anterior, importamos los paquetes necesarios y creamos la función de transferencia.
3. Establece una conexión con la red de Solana
const connection = new Connection("https://rpc.helius.xyz/?api-key=");En el código anterior, usamos nuestro RPC de Helius para establecer una conexión con la blockchain de Solana.
4. Define los pares de claves del pagador de comisiones y del propietario anterior
const feePayer = Keypair.fromSecretKey(bs58.decode("privateKey"));
const prevOwner = Keypair.fromSecretKey(bs58.decode("privateKey"));5. Especifica la clave pública del mint y la dirección de la billetera del destinatario
La clave pública del mint será la dirección del token del NFT que deseas transferir:
const mintPubkey = new PublicKey("4umMdShNxbdnoV2EZjUp6h5GYYneZFLH9otBEU2K3ZYP");
const receiveAddress = new PublicKey("2xSHLfiPs3aEhzbLnYbyzWYMEaYnwSwJwAnVh5CwHWwX");6. Genera la dirección de token asociada (ATA) para el destinatario
const ata = await getAssociatedTokenAddress(mintPubkey, receiveAddress);En este código, configuramos como nuevo propietario de la ATA una clave pública de otra dirección. Esta no tiene que pertenecer al pagador de la transacción.
Asegúrate de establecer receiveAddress en la dirección que debe recibir el activo transferido.
7. Especifica las claves públicas de la cuenta de token de origen y la cuenta de destino
const tokenAccount1Pubkey = new PublicKey("CE2uTSeVbBhy2Q8qVEnp8qAJYBQkVxMC4uGzchiAn6gG");
const tokenAccount2Pubkey = new PublicKey(ata);8. Crea una nueva transacción y agrega la instrucción de transferencia
const tx = new Transaction();
tx.add(
createTransferCheckedInstruction(
tokenAccount1Pubkey,
mintPubkey,
tokenAccount2Pubkey,
prevOwner.publicKey,
1, // Amount you are transferring.
0 // Decimals, since this is an NFT you can leave 0.
)
);En el código anterior:
- Definimos las cuentas de token anterior y actual.
- Establecemos en 1 la cantidad que se transferirá, ya que la dirección del mint solo tiene un suministro de 1.
- Establecemos los decimales en 0 para cumplir con el estándar de tokens no fungibles. En el caso de un token fungible, puedes configurar correctamente los decimales para la transferencia.
9. Envía la transacción a la red de Solana
const txhash = await connection.sendTransaction(tx, [feePayer, prevOwner]);
console.log(`Transaction hash: ${txhash}`);Ahora usamos el método sendTransaction para completar la transacción e indicar que el pagador de comisiones y el propietario anterior del activo deben firmarla.
Código completo
import { Keypair, Transaction, Connection, PublicKey } from "@solana/web3.js";
import { createTransferCheckedInstruction, getAssociatedTokenAddress } from "@solana/spl-token";
import * as bs58 from "bs58";
async function transfer() {
// connection to Solana.
const connection = new Connection("https://rpc.helius.xyz/?api-key=");
// Payer of new ATA.
const feePayer = Keypair.fromSecretKey(
bs58.decode("privateKey")
);
// Previous owner of Token or NFT
const prevOwner = Keypair.fromSecretKey(
bs58.decode("privateKey")
);
// Mint address of the NFT.
const mintPubkey = new PublicKey("4umMdShNxbdnoV2EZjUp6h5GYYneZFLH9otBEU2K3ZYP");
// Recipient of the NFT.
const receiveAdress = new PublicKey('2xSHLfiPs3aEhzbLnYbyzWYMEaYnwSwJwAnVh5CwHWwX')
// Original Token Account
const tokenAccount1Pubkey = new PublicKey("CE2uTSeVbBhy2Q8qVEnp8qAJYBQkVxMC4uGzchiAn6gG");
let ata = await getAssociatedTokenAddress(
mintPubkey, // mint
receiveAdress // owner
);
// Create transfer instruction to from the previous ATA owned by old wallet, to new ATA.
const tokenAccount2Pubkey = new PublicKey(ata);
let tx = new Transaction();
tx.add(
createTransferCheckedInstruction(
tokenAccount1Pubkey, // from
mintPubkey, // mint
tokenAccount2Pubkey, // to
prevOwner.publicKey, // from's owner
1, // amount
0 // decimals
)
);
// Send Transaction here.
console.log(`txhash: ${await connection.sendTransaction(tx, [feePayer, prevOwner])}`);
}
transfer()Recuerda reemplazar los valores de marcador de posición del código por tus valores reales, como la URL del RPC, las claves secretas y las claves públicas de la transferencia.
Conclusión
¡Felicitaciones! Creaste correctamente el código para transferir NFT en Solana mediante la creación de una nueva cuenta de token asociada (ATA) y la transferencia del NFT a la cuenta del destinatario. En este tutorial, aprendiste a establecer una conexión, generar ATA y enviar transacciones en la blockchain de Solana. Ahora puedes aplicar esta información a cualquier ejemplo de dApp que estés creando.
Artículos relacionados
Suscríbete a Helius
Mantente al día con las novedades del desarrollo en Solana y recibe actualizaciones cuando publiquemos


