Verwenden von abi, das von Truffle in DApp generiert wurde

Ich verwende Trüffel, um den Vertrag im Ganache-Netzwerk bereitzustellen. Ich verwende gerne die JSON-Datei, die von der Trüffel in der DApp generiert wird, anstatt eine unordentliche ABI hineinzuschreiben. Ich habe das folgende Stück Code ausprobiert und es gibt einen Fehler.

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);

Hier ist der Fehler, den ich bekomme, wenn ich die Anwendung ausführe.

Fehler: Sie müssen beim Instanziieren eines Vertragsobjekts die json-Schnittstelle des Vertrags angeben. bei Vertrag (/home/ltu/Ganache/node3/node_modules/web3-eth-contract/src/index.js:70:15) bei neuem Vertrag (/home/ltu/Ganache/node3/node_modules/web3-eth/src /index.js:147:22) bei initweb3 (/home/ltu/Ganache/node3/app.js:32:34)

Bitte um Hilfe.

Antworten (2)

Wenn ich das also richtig verstanden habe, ist die Datei PublishService_abi.json die Ausgabe von Truffle im Build-Ordner - richtig?

Wenn ja, dann enthält diese Datei mehr als nur das abi - um Ihr Problem zu beheben, ändern Sie einfach Ihre letzte Codezeile in:

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

Die von Truffle generierte Datei enthält nicht nur die ABI, sondern weitere Informationen. In Ihrem Fall müssen Sie zu Ihrem Vertrag übergehen, publish_service_abi.abidamit es funktioniert.