Рекомендации по обмену файлами сборки трюфелей между разработчиками

Я работаю над несколькими проектами, используя truffle, как вы знаете, truffle компилирует и переносит контракты в различные сети ethereum, например , MyContract.sol создает MyContract.json , который содержит ссылку на адрес этого контракта в этой сети вместе с abi.

Одна из проблем, с которыми мы сталкиваемся, заключается в том, как поделиться этими сгенерированными файлами сборки между командой разработчиков, работающих над проектом.

Кто-нибудь сталкивался с этой проблемой и какое лучшее решение?

Основные проблемы:

  • Если мы зафиксируем файлы сборки в системе управления версиями, они будут содержать элементы, характерные для локальной машины пользователя, например , sourcePath и absolutePath .

  • Если мы не зафиксируем их, мы должны либо вручную обновить файлы abi json, чтобы они указывали на правильный адрес контракта.

Я чувствую, что, возможно, мы не понимаем, какой правильный процесс использовать при использовании трюфеля между командами, превышающими несколько человек в общем проекте.

Вся помощь приветствуется

Abi из файла contract.json, вероятно, не будет связан с компьютером пользователя или какой-либо сетевой конфигурацией. поэтому совместного использования этого вместе с развернутым адресом контракта должно быть достаточно для работы между командами с web3 напрямую, но не для трюфеля.
Вы согласились, проблема в том, что трюфель генерирует файлы сборки, в которых также есть машинные данные. Может потребоваться некоторая форма преобразования.

Ответы (1)

Я не знаю, есть ли на это реальный ответ, но я использую это решение: я меняю файл миграции и пишу ABI и его адрес после развертывания.

вар фс = требуется ('фс');
var MyContract = артефакты.require('./MyContract.sol');
var fileContent = require('../build/contracts/MyContract.json');

module.exports = функция (развертыватель) {
  deployer.deploy(MyContract).then(() => {
    вар контрактКонфигурация = {
        abi: fileContent.abi,
        адрес: MyContract.address
    };

    fs.writeFileSync('contractConfiguration/MyContract.json', JSON.stringify(contractConfiguration), { флаг: 'w' });
  });
};

В моем случае я использую его, чтобы информация о моем контракте всегда обновлялась для целей пользовательского интерфейса. Таким образом, пользовательский интерфейс будет читать информацию внутри contractConfigurationпапки и всегда будет иметь обновленный адрес и ABI.

Мне нравится эта идея, но мне нужно расширить функцию, чтобы сохранить адрес для каждой сети, например, ropsten, rinkeby, mainet. Я отдам его назад и посмотрю, поможет ли это. В идеале было бы хорошо, если бы truffle выводил два файла, один с адресами и ABI, а другой с любыми пользовательскими данными, такими как sourcePath и absolutePath , в идеале указанными в разных папках через конфигурацию.
Ну, трюфель не делает этого сам по себе. Так что просто расширьте приведенный выше скрипт по своему усмотрению. Вы можете использовать свою конфигурацию и загружать выходные каталоги, поддерживать несколько сетей и так далее.
Похоже , что truffle-artifactor делает что-то подобное.