Construir una Transacción Ethereum con Chat GPT Plus
Introducción
En el articulo 4 de la serie Tecnología Blockchain (TB), explicamos un programa en JavaScript que me permite construir una transacción del blockchain Ethereum y luego enviarla a la Ethereum Virtual Machine (EVM) y transferir una cantidad de ETH de una cuenta a otra.
Para construir una aplicación el desarrollador de TB usualmente lo hace por etapas:
Primera etapa: selecciona un IDE (entorno de desarrollo integrado), que es una aplicación de software que ayuda a los programadores a desarrollar código de manera eficiente.
Segunda etapa: realiza una búsqueda en internet de aplicaciones de código "open source", similares a la aplicación que pretende desarrollar.
Tercera etapa: comienza a construir el código segmento a segmento, programando y ejecutando el código hasta que finalmente logra que funcione.
En este articulo haremos la siguiente investigación:
“Qué posibilidad existe de construir un programa en JavaScript para ejecutar una transacción de una criptomoneda ERC20, entre dos direcciones o cuentas de Ethereum haciendo uso de la inteligencia artificial (AI)”.
Herramientas o recursos tecnológicos por utilizar
Chat GPT Plus:
Chat GPT (Generative Pre-trained Transformer) es un modelo de inteligencia artificial (AI) que:
Es un lenguaje entrenado específicamente para responder preguntas y mantener conversaciones con los usuarios.
Es una arquitectura de red neuronal de aprendizaje profundo utilizada para generar texto.
VS Code:
Visual Studio Code es un editor de código fuente desarrollado por Microsoft. Es un software libre y gratuito, disponible para Windows, Linux y macOS.
Git Bash:
Es un intérprete o terminal de línea de comandos para sistemas operativos Windows que incluye Git. Git es un sistema de control de versiones de código abierto que permite a los usuarios rastrear los cambios en el código fuente de un proyecto y colaborar con otros desarrolladores en el mismo proyecto.
Remix de Ethereum.org:
Remix es un IDE (entorno de desarrollo integrado) basado en navegador para desarrollar y probar contratos inteligentes de Ethereum, proporciona una interfaz de usuario intuitiva y fácil de usar para escribir, compilar y depurar contratos inteligentes.
Librerias Web3 y ethereumjs-tx:
En programación las librerías son conjuntos de código predefinido que se utilizan para realizar tareas específicas en un lenguaje en particular, en el caso de JavaScript, las bibliotecas son colecciones de código que se utilizan para simplificar y agilizar el proceso de desarrollo web:
Web3.js es una biblioteca de JavaScript que se utiliza para interactuar con la red Ethereum.
Proporciona una serie de funciones para realizar tareas como conectarse a un nodo Ethereum.
Enviar transacciones a la red Ethereum.
Interactuar con contratos inteligentes y mucho más.
Ethereumjs-tx es una biblioteca de JavaScript que se utiliza para crear y firmar transacciones en la red Ethereum, que:
Contienen información como la dirección del remitente y la dirección del destinatario.
La cantidad de ether o tokens ERC20 que se está enviando y cualquier otro dato necesario para realizar una transacción en la red Ethereum.
Red de pruebas Goerli:
Goerli es una red de prueba de Ethereum que se utiliza para probar aplicaciones y contratos inteligentes en un entorno seguro y sin riesgos. La red de prueba Goerli se lanzó en marzo de 2019 y es una de las varias redes de prueba de Ethereum que están disponibles para los desarrolladores.
Goerli Etherscan:
Es un explorador de bloques y una herramienta de análisis de transacciones para la red de prueba Goerli de Ethereum, permite a los usuarios explorar y analizar la cadena de bloques de Goerli en tiempo real.
Claves públicas y privadas:
Quien envía los fondos:
Address: 0x30D752489CF27652fcc2553AAaaB2D5DD9359C80
Private Key:
6ace6d753edc427e6159e6b1529383c39f296778cb1310821bcabb397b13335b
Quien recibe los fondos:
Address: 0x2586C4aa8Fccb20aacCe69a75a27726072C560BA
Private Key:
d35a217750bac528a5d4fbcd88b3f2e974ca28efcf2b78554d17479b8132c4fd
Nota: las claves privadas deben permanecer secretas.
Fondos por transferir:
Con fines educativos hemos creado una criptomoneda especialmente para esta investigación, de manera que cualquier persona puede comprobar el contenido del artículo:
Nombre: YEN_Digital educativo.
Símbolo: JPY_edu.
Suministro 50,000,000 de JPY_edu.
Direccion del contrato inteligente: 0xdeE034854c5eaba0c697c4527CBeC5F80C5c7f3e
Creación de la Tx con AI
Nota: Para facilitar la descripción del articulo:
Tx significa transacción.
A Chat GPT Plus lo llamaremos GTP.
Las consultas a GPT las haremos en inglés, para que las instrucciones de los programas sean devueltas en este idioma, que es el más utilizado en programación.
Paso 1.- Preguntamos a GPT (ver flecha roja en la imagen de abajo):
An Ethereum transaction with web3 where address 0x30D752489CF27652fcc2553AAaaB2D5DD9359C80 sends 100 ERC20 tokens to address 0x2586C4aa8Fccb20aacCe69a75a27726072C560BA
GPT nos da como respuesta un programa JavaScript (ver flecha amarilla).
Paso 2.- Copiamos el programa en el editor VS Code:
Paso 3.- Analizamos las primeras instrucciones del programa:
En la línea uno el programa requiere la librería web3. Entramos al sitio web3, y me indica (ver flecha azul) que la versión de la librería fue actualizada o liberada hace 2 meses:
En la línea dos requiere la librería ethereumjs-tx. Entramos al sitio de ethereumjs-tx, y me indica (ver flecha verde) que la versión de la librería está obsoleta (generalmente una librería se abandona cuando presenta ciertas vulnerabilidades).
Observación:
La versión Chat GPT Plus fue entrenada con el contenido del internet disponible hasta finales del 2021, y ethereumjs-tx fue remplazada por la librería ethereumjs/tx a finales de febrero del 2023 (ver flecha naranja imagen de abajo):
Paso 4.- Valores o constantes de entrada:
Línea 5: conexión a un nodo público de la red Goerli.
Líneas 8 y 9: la clave privada del que envía los fondos.
Líneas 10 y 11: la dirección que envía y la dirección que recibe los fondos.
Líneas 12 y 13: la cantidad de criptomoneda a enviar (100 JPY_edu) y la dirección del Smart contract que creo la criptomoneda.
Paso 5.- Aplicación de interface binaria (ABI):
En la línea 14: La ABI de un token Ethereum es un código que contiene una lista de funciones disponibles en el contrato (en formato binario), así como los tipos de datos necesarios para llamar a esas funciones y los tipos de datos devueltos por ellas.
El ABI de un token se obtiene del IDE en que se implementó el token ERC20. En este caso el IDE fue Remix de Ethereum.org (ver flecha roja, imagen de abajo):
Nota: El ABI ocupa de la línea 14 hasta la línea 297 del editor VS.
Paso 6.- Ejecución del programa:
Ahora estudiaremos el resto del código de la línea 298 a la 318 donde procedemos a estructurar, firmar y enviar la Tx:
Paso 7.- Estructuración de la Tx:
De la línea 301 a la 308 se estructura la transacción objeto (Tx en formato JSON). Al ejecutarse esta parte del programa en Git Bash (la terminal de líneas de comando) obtenemos la txObject:
Paso 8.- Creación y firma de la transacción blockchain:
En la línea 309 a 311 la librería ethereumjs-tx se utiliza para crear y firmar la txObject en la red Ethereum.
Al ejecutarse esta parte del programa en Git Bash obtenemos un error (ver flecha amarilla) que dice:
Error: Expected private key to be an Uint8Array with length 32
Paso 9.-Consultamos a GPT sobre este error, y nos sugiere un cambio en el código:
Aplicamos el cambio, ejecutamos de nuevo el programa y se mantiene el error (ver flecha verde):
Error: Expected private key to be an Uint8Array with length 32
Observación: Seguimos aplicando otros cambios incluso consultamos a GPT sobre la nueva librería @ethereumjs/tx (ver flecha roja) y me devuelve un código siempre con la librería obsoleta (ver flecha amarilla) que al ejecutarlo mantiene el error.
Paso 10.- Problema: Como el problema reside en que el programa JavaScript utiliza una librería que ya esta obsoleta y GPT no me da un programa con la nueva librería, porque no lo conoce (no estaba disponible en el 2021), debo buscar un programa que no utilice esta librería obsoleta, pero que conserve la mayoría de las instrucciones originales que me dio GPT.
Paso 11.- Otra solución:
Realizamos una búsqueda en internet de aplicaciones de código "open source", similares a la que pretendemos desarrollar.
La primera parte del programa donde ya introducimos los datos queda igual.
La segunda parte queda así:
Paso 12.- transacción exitosa: Al ejecutarse esta parte del programa en Git Bash obtenemos la transacción confirmada en el blockchain goerli de Ethereum. Esta transacción se identifica con el hash (ver flecha azul):
0xeb36fabcc1e33cea12bc920df573de6498aafd598440d9f4909b348fbb433148
Paso 13: La transacción la podemos visualizar en el explorador de goerli Etherscan:
El hash de la Tx (flecha roja).
La dirección que envía y la que recibe los fondos (flecha amarilla).
La cantidad de 100 unidades del token YEN_Digital (flecha verde).
Observaciones finales:
Al construir una transacción para enviar una transacción de un token ERC20 entre dos direcciones, consultando la aplicación de inteligencia artificial Chat GTP Plus, concluimos que:
Usualmente la búsqueda en internet de código open source, lleva de 4 a 12 horas de trabajo, en cambio con Chat GPG plus se redujo a unos 10 segundos.
Una vez obtenido el programa de GPT, debemos ejecutarlo segmento a segmento como lo haría el desarrollador con o sin GPT. Aquí no hay diferencia.
El hecho de que la librería “ethereumjs-tx” este obsoleta y que GPT no pudo darnos una respuesta apropiada, indica que la inteligencia artificial tiene las limitaciones del contenido con que fue entrenado.
Es posible que la nueva versión por salir GPT 4, pueda superar estos aspectos técnicos.