Mit truffle-contract war alles, was Sie tun mussten, um die Vertragsinstanz zu erhalten, ungefähr so:
const getContract = require('truffle-contract')
const contractJSON = require('./MyContract.json')
const contract = getContract(contractJSON)
contract.setProvider(web3.currentProvider)
const instance = await contract.deployed()
return instance
MyContract.json
Datei das Build-Artefakt von Truffle ist.Aber da die von truffle-contract erstellte Instanz anstelle des PromiEvents , das mit Version 1.0 von Web3 geliefert wurde, Versprechungen zurückgibt, entschied ich, dass ich das reguläre v1.0 Web3 verwenden wollte, um die Vertragsinstanz zu erhalten. Mit anderen Worten, ich wollte mich nicht mehr auf Trüffelverträge verlassen.
Leider bin ich mit der Vertrags-API im neuen 1.0 Web3 nicht so vertraut. Das ist mein Versuch:
const contract = new web3.eth.Contract(contractJSON.abi)
contract.methods.get().call()
Die erste Zeile ist in Ordnung, aber die zweite Zeile wirft den folgenden Fehler:
Für diesen Vertragsgegenstand ist noch keine Adresse eingestellt, bitte legen Sie zuerst eine Adresse fest.
Ich sehe, dass dies sinnvoll ist, da die Dokumentation zu besagen scheint, dass Sie eine Adresse festlegen können, damit sie weiß, wo die bereitgestellte Instanz zu finden ist.
Bedeutet das, dass ich zu meiner Truffle Console (auch bekannt als testrpc) gehen müsste, um die Vertragsadresse zu finden und diese jedes Mal zu kopieren und einzufügen? Ich hoffe nicht, denn mit Truffle-Contract musste ich nur die JSON-Datei einfügen und es hat es für mich herausgefunden.
Wie soll ich diese Adresse bekommen und weitergeben?
Ich konnte nicht finden, wo die Adresse gespeichert war, weil die JSON-Datei, die ich genommen habe, eine veraltete Version war. Es war eine, die generiert wurde, bevor ich auf Truffle migrierte. Es stellt sich heraus, dass die JSON-Datei jedes Mal aktualisiert wird, wenn Truffle seine Migrationen durchführt. Und damit wird die Adresse der bereitgestellten Vertragsinstanz hinzugefügt.
Ich musste tief in ihre Dokumente graben, um sie hier zu finden: https://github.com/trufflesuite/truffle/tree/develop/packages/truffle-contract-schema#networks
Von dort aus war es einfach, die vorinstallierte Adresse zu finden. Der endgültige Code sieht in etwa so aus:
const networkId = await web3.eth.net.getId()
const deployedAddress = contractJSON.networks[networkId].address
const contract = new web3.eth.Contract(contractJSON.abi, deployedAddress)
Benutzer19510
MyContract.json
muss die Adresse enthalten, also könntest du sie einfach von dort aus lesen, wenn du willst.Adrianc
Adrianc
Benutzer19510
build/contracts
. Nach einer schnellen Suche sieht es für mich so aus, als ob Sie dort die Adresse finden sollten. Ich benutze Truffle selbst nicht, also habe ich nichts zur Hand, um darin herumzustöbern, sorry.Adrianc
Adrianc