¿Cuál es la convención utilizada para cargar la ABI de un contrato en una instancia del servidor Node.js?

Todavía soy un nuevo estudiante de Ethereum y estoy tratando de averiguar cómo crear una instancia de un contrato desde una instancia de Node.js usando Web3 . También estoy usando Truffle Suite, pero solo con fines de desarrollo/prueba.

Lo que necesito saber es cómo puedo obtener la ABI de un contrato en un proyecto independiente de Node.js.

Sé que podría simplemente cargarlo como un archivo JSON, o también podría usar la biblioteca solc para compilar el .solarchivo de contrato... la última opción parece ser una buena opción siempre que solo necesite hacerlo una vez (como cuando el servidor se inicia/reinicia, por ejemplo)

Me pregunto cuál es la mejor práctica para hacer esto. No puedo encontrar una respuesta concreta con respecto a este asunto.

Gracias.

Respuestas (1)

No creo que haya una sola forma aceptada y de mejores prácticas para hacer esto y depende de su preferencia y su aplicación.

Como señaló, truffle guarda archivos json en la carpeta de compilación y puede acceder a la abi desde allí. Esto se utiliza en varias plantillas (caja de trufas) como puntos de partida para proyectos.

Para una DApp que tengo en producción, guardé los detalles del contrato y los abi en una base de datos. Esto se debe a que mi DApp tiene múltiples contratos que pueden cambiar, por lo que al usar una base de datos, puedo agregar/eliminar/modificar/acceder a múltiples contratos más fácilmente. Pero esto es específico para mi caso de uso y he encontrado que es bastante eficiente.

Interesante. Gracias por su respuesta. Debo señalar que para mi proyecto tengo la intención de usar una instancia de Node.js independiente de Truffle, y solo expondré algunos puntos finales de API usando express, ¿entonces en realidad es una DApp de API Express? Y cuanto más desvinculado esté del código del contrato real, mejor, porque como dije antes, tengo la intención de implementar mi(s) contrato(s) usando un proyecto Truffle separado. Gracias por tomar parte de su valioso tiempo para responder!
Mi DApp tampoco usa trufa, también es solo nodo/expreso. Así que ni siquiera tengo la carpeta de compilación que tiene truffle de archivos json. Si solo tiene unos pocos (digamos 1 o dos contratos), probablemente sea más simple importar el json o incluso tener el objeto abi en sus archivos javascript como un objeto const contractAbi = [{ your abi }];.
Entiendo. ¿Qué tal tenerlo en un archivo JSON? y luego usar algo como fs.readFileSyncpara conseguirlo? Tenía muchas esperanzas de que la comunidad ya hubiera automatizado este tipo de cosas, pero ahora estoy de acuerdo con su respuesta. ¡Muchas gracias, señor!
Sí, eso también funciona. En realidad, uno de mis microservicios, también lo hago. Además, ni siquiera necesité usar fs. Simplemente lo importé directamente y era accesible: const contractAbi = require('./contractAbi.json');hacer algo así funcionó para mí.