Mejores prácticas para compartir archivos de compilación de trufas entre desarrolladores

Estoy trabajando en algunos proyectos usando truffle, como saben, truffle compila y migra contratos a varias redes ethereum, por ejemplo, MyContract.sol produce MyContract.json que contiene una referencia a la dirección de ese contrato en esa red junto con abi.

Uno de los problemas que tenemos es cómo compartir estos archivos de compilación generados entre el equipo de desarrolladores que trabajan en el proyecto.

¿Alguien ha tenido alguna experiencia con este problema y cuál es la mejor solución?

Los principales problemas:

  • Si asignamos los archivos de compilación al control de código fuente, contienen elementos que son específicos de la máquina local de los usuarios, por ejemplo, sourcePath y absolutePath

  • Si no los confirmamos, debemos actualizar manualmente los archivos abi json para que apunten a la dirección de contrato correcta

Siento que tal vez no entendemos cuál es el proceso correcto que se debe usar cuando se usa trufa entre equipos de más de unas pocas personas en un proyecto común

Toda ayuda apreciada

El abi del archivo contract.json probablemente no esté relacionado con la máquina del usuario o cualquier tipo de configuración de red que tenga. por lo tanto, compartir eso junto con la dirección del contrato implementada debería ser suficiente para trabajar entre equipos con web3 directamente pero no con truffle.
Estuvo de acuerdo, el problema es que truffle generó archivos de compilación que también tienen datos específicos de la máquina. Es posible que se necesite alguna forma de transformación.

Respuestas (1)

No sé si hay una respuesta real para eso, pero uso esta solución: cambio el archivo de migración y escribo el ABI y su dirección después de la implementación.

var fs = require('fs');
var MiContrato = artefactos.require('./MiContrato.sol');
var fileContent = require('../build/contracts/MyContract.json');

módulo.exportaciones = función (implementador) {
  deployment.deploy(MiContrato).then(() => {
    var contractConfiguration = {
        abi: contenido del archivo.abi,
        dirección: MiContrato.dirección
    };

    fs.writeFileSync('contractConfiguration/MyContract.json', JSON.stringify(contractConfiguration), { flag: 'w' });
  });
};

En mi caso, lo uso para tener la información de mi contrato siempre actualizada para fines de interfaz de usuario. Entonces, la interfaz de usuario leerá la información dentro de la contractConfigurationcarpeta y siempre tendrá la dirección actualizada y ABI.

Me gusta esta idea, pero necesitaría expandir la función para mantener la dirección de cada red, por ejemplo, ropsten, rinkeby, mainet. Lo daré hace y veré si ayuda. Idealmente, sería bueno si truffle generara dos archivos, uno con las direcciones y ABI y otro con detalles específicos del usuario como sourcePath y absolutePath , idealmente especificados en diferentes carpetas a través de la configuración.
Bueno, la trufa no lo hace sola. Así que simplemente expanda el script anterior como desee. Puede usar su configuración y cargar los directorios de salida, admitir varias redes, etc.
Hay un artefacto de trufa que parece que hace algo similar.