Transferir USDC de una billetera a otra de forma programática es una habilidad fundamental para cualquier desarrollador que trabaje con blockchain. A continuación se recorre, paso a paso, el proceso completo: desde la instalación de dependencias hasta la configuración de billeteras y claves privadas, usando únicamente Ethers JS y la red de pruebas Ethereum Sepolia.
¿Cómo preparar el entorno para enviar USDC con Ethers JS?
El primer paso es instalar la librería Ethers JS, que permite interactuar directamente con el blockchain desde JavaScript. Esto se hace desde la terminal con el comando npm i ethers [0:11]. Una vez instalados los paquetes, se crea un archivo que puede llamarse como se prefiera; en el ejemplo se usa send.js [0:22].
El archivo se abre en VSCode, aunque cualquier editor de código funciona. Dentro se pega el código base que Circle proporciona en su documentación oficial [0:34].
¿Qué billeteras se necesitan para la transferencia?
Antes de revisar el código, conviene tener claras las dos billeteras involucradas:
- Circle Sending: la billetera que envía, con 9 USDC y algo de Sepolia ETH [1:02].
- Circle Receiving: la billetera que recibe, con 1 USDC y sin Sepolia ETH [1:10].
Ambas se gestionan desde Metamask, y el objetivo del script es mover USDC entre ellas de manera automatizada.
¿Cómo obtener el token contract de USDC en Sepolia?
Para verificar la dirección del USDC token contract en la red de pruebas Sepolia, se accede a la plataforma de Circle en circle.com y se selecciona "build Web3-enabled apps" [1:30]. Dentro de la documentación, buscando "USDC" y filtrando por test networks, aparece el contrato de Ethereum Sepolia [1:56]. Esa dirección se copia y se pega en el código para confirmar que coincide.
¿Qué es un RPC endpoint y cómo obtenerlo?
Un RPC (Remote Procedure Call) es un nodo que permite que la aplicación se comunique directamente con el blockchain [2:18]. El script solicita un RPC endpoint para Sepolia, y se puede obtener de Infura.
- Se ingresa a
infura.io y se accede al dashboard [2:27].
- Se crea una nueva API key con un nombre descriptivo [2:40].
- Se selecciona la red Ethereum Sepolia [2:48].
- Se copia el endpoint generado y se pega en el código, reemplazando el texto placeholder [2:58].
¿Qué hace cada sección del script de transferencia?
El código se estructura de forma clara y secuencial:
- Imports de Ethers JS: se importan los módulos necesarios para interactuar con el blockchain [2:07].
- Provider: se inicializa el provider de Ethers JS usando el RPC endpoint de Infura, lo que establece la conexión con la red [3:06].
- ABI del token contract: se define el ABI (Application Binary Interface), que especifica los métodos del smart contract que el script va a utilizar. En este caso, solo se necesita la función
transfer, junto con sus outputs, state mutability, type e inputs [3:14].
- Instancia del contrato: se crea un instance del contrato USDC para poder llamar sus funciones desde el código [3:34].
- Datos de billeteras: se ingresan tres valores clave: la dirección de la billetera que envía, la dirección de la que recibe y la clave privada de la billetera que envía [3:42].
¿Cómo manejar la clave privada de forma segura?
La clave privada (private key) es información extremadamente sensible que nunca debe exponerse en un lugar público [4:08]. Para extraerla desde Metamask:
- Se hace clic en la cuenta y se selecciona "account details" [4:24].
- Se elige "show private key" e ingresa la contraseña de la cuenta [4:30].
- Se mantiene presionado para revelarla y se copia al código [4:38].
Es fundamental proteger este dato: si alguien obtiene tu clave privada, tiene control total sobre los fondos de esa billetera. Incluso en entornos de prueba, desarrollar buenos hábitos de seguridad marca la diferencia.
¿Has implementado transferencias programáticas de tokens en tus proyectos? Comparte tu experiencia o dudas sobre el proceso.