Ich verwende derzeit web3 0.20.6 und plane, in web3@0.20.6 zu bleiben, da es Probleme mit HTTP in den Beta-Versionen von web3@1.0.0-beta.* gibt
Der aktuelle Anbieter unterstützt keine Abonnements: HttpProvider
Jetzt versuche ich herauszufinden, wie ich die Vertragsadresse nach der Bereitstellung bekomme. Denn in web3@1.0.0-beta.* können wir wie im folgenden Beispiel verwenden, um die Vertragsadresse zu erhalten.
contract.deploy({
data: '0x'+bin,
arguments: [request.body.vin, cost, request.body.buyer]
})
.send({
from: request.body.dealer,
gas: gas
})
.on('receipt', receipt => {
util.log(`>>>>> contractApi - Contract sucessfully deployed @ address: ${receipt.contractAddress}`);
data.contract_address = receipt.contractAddress;
response.json(data);
});
Aber wie macht man das in web3@0.20.6 ? Ich konnte die Lösungen online nicht finden, ohne Trüffel zu verwenden. Ich habe nicht vor, auch Trüffel zu verwenden.
Was ich versucht habe, war,
const deployedContract = LoginContract.new ({
data: '0x'+binLogin,
from: '6ded1c5b448819a6cde4293e33fbe54583ef5c52',
gas: 4700000
});
contractData = deployedContract.address;
util.log(`>>>>> setup - Login Contract sucessfully deployed @ address: ${contractData}`)
Das Ergebnis in der Konsole ist jedoch eine undefinierte Adresse
22. März 14:04:15 - >>>>> Einrichtung - Login-Vertrag erfolgreich bereitgestellt @ Adresse: undefiniert
Dann, nach etwa 5-10 Sekunden, tauchte dies in der Konsole auf
Fehler: Der Vertragscode konnte nicht gespeichert werden, bitte überprüfen Sie Ihre Gasmenge.
Ich bin gerade super verwirrt, weil die Gasmenge ausreichen sollte.
BEARBEITEN 1 Dank der Antwort von @mirg ist die Bereitstellung erfolgreich. Mir ist jedoch aufgefallen, dass die Anweisungen unter der Vertragsbereitstellung:
contractData = deployedContract.address;
util.log(`>>>>> setup - Login Contract sucessfully deployed @ address: ${contractData}`)
weiter ausgeführt und wartet nicht, bis die Vertragsbereitstellung abgeschlossen/beendet ist.
Wie geben Sie weitere Anweisungen zum Abwarten und Verarbeiten des Ergebnisses dieser Vertragsbereitstellung? In web3@1.0.0-beta.* ist es durch Verwendung von erreichbar
.on('receipt', receipt => {}
Aber ich habe keine Ahnung, wie es mit web3@0.20.6 erreicht wird.
Im zweiten Fall übergeben Sie die Konstruktorparameter nicht an die Bereitstellungsfunktion.
const deployedContract = LoginContract.new (request.body.vin, Kosten, request.body.buyer, { Daten: '0x'+binLogin, aus: '6ded1c5b448819a6cde4293e33fbe54583ef5c52', Benzin: 4700000 }, Funktion(err, meinVertrag){ wenn (! err) { // HINWEIS: Der Callback wird zweimal ausgelöst! // Sobald der Vertrag die Eigenschaft transactionHash festgelegt hat und einmal auf einer Adresse bereitgestellt wird. // z. B. tx-Hash beim ersten Aufruf prüfen (Transaktion senden) if(!myContract.address) { console.log(myContract.transactionHash) // Der Hash der Transaktion, die den Vertrag bereitstellt // Adresse beim zweiten Aufruf prüfen (Vertrag bereitgestellt) } anders { console.log(myContract.address) // die Vertragsadresse } // Beachten Sie, dass das zurückgegebene "myContractReturned" === "myContract", // Das zurückgegebene "myContractReturned"-Objekt erhält also auch die festgelegte Adresse. } }));
das sollte funktionieren ref
Cristoforus Darryl Widjaya
mirg