использование abi, сгенерированного трюфелем в DApp

Я использую трюфель для развертывания контракта в сети ganache. Мне нравится использовать файл json, созданный трюфелем в DApp, а не писать в него беспорядочный ABI. Я попробовал приведенный ниже фрагмент кода, и он дает ошибку.

var fs = require('fs');
var publish_service_abi = JSON.parse(fs.readFileSync('./PublishService_abi.json', 'utf8'));
console.log(publish_service_abi); //prints the contents of the abi
var PublishServiceContractAddress = "0x0da136781e562e28fb1c0b3efc8ce9d8b4e226f2";
PublishServiceContract = await new web3.eth.Contract(publish_service_abi,PublishServiceContractAddress);

Вот ошибка, которую я получаю при запуске приложения.

Ошибка: вы должны предоставить json-интерфейс контракта при создании экземпляра объекта контракта. в контракте (/home/ltu/Ganache/node3/node_modules/web3-eth-contract/src/index.js:70:15) в новом контракте (/home/ltu/Ganache/node3/node_modules/web3-eth/src /index.js:147:22) в initweb3 (/home/ltu/Ganache/node3/app.js:32:34)

Любая помощь, пожалуйста.

Ответы (2)

Итак, если я правильно понял, файл PublishService_abi.json - это вывод трюфеля в папке сборки - верно?

Если да, то этот файл содержит больше, чем просто abi, поэтому, чтобы решить вашу проблему, просто измените последнюю строку кода на:

PublishServiceContract = await new web3.eth.Contract(publish_service_abi.abi,PublishServiceContractAddress);

Файл, сгенерированный truffle, содержит не только ABI, но и дополнительную информацию. В вашем случае вам нужно перейти publish_service_abi.abiк вашему контракту, чтобы заставить его работать.