Vertrag konnte nicht über sendTransaction bereitgestellt werden

Ich versuche, einen Vertrag bereitzustellen ( verfügbar bei Etherscan.io ). Ich gehe wie folgt vor: Kopieren Sie den Vertragserstellungscode und speichern Sie ihn in crCodeeiner Variablen. Dann habe ich versucht, folgenden Code auszuführen;

 async function deployWithCreationCode(){

    var myTrx = await web3.eth.sendTransaction({
      from: account1,
      data: crCode 
  });
  console.log(myTrx)
}

Hier ist meine Ausgabe.

UnhandledPromiseRejectionWarning: Error: Returned error: base fee exceeds gas limit

Wie löst man es?

Antworten (1)

In Ihrer crCodeVariablen müssen Sie nach Contract Creation Code Constructor Arguments anhängen .

Beide Teile des Bytecodes stehen Ihnen unter der URL zur Verfügung, die Sie in Ihrer Frage verlinkt haben.

Da der Vertragsquellcode auch unter diesem Link verfügbar ist, können Sie ihn alternativ kompilieren und dann auf die „Standardmethode“ (mithilfe der web3.js- deployFunktion) bereitstellen.

Tatsächlich ist dies definitiv der empfohlene Weg, da die in diesem Link angegebenen Konstruktorargumente Adressen von Konten oder Verträgen enthalten können, die nicht "Ihre" sind.

aber sie sehen so aus, als ob sie bereits im Erstellungscode angehängt worden wären ... aber ich habe dasselbe getan, wie Sie vorgeschlagen haben ... aber immer noch derselbe Fehler ... BTW. Wenn ich den Vertragserstellungscode in VS-Code kopiere und crCode zuweise, wird er nicht vollständig angezeigt (aufgrund einer sehr großen Zeichenfolge). l bedeutet, wenn ich die 'End'-Taste der Tastatur drücke, konnte ich das letzte Zeichen nicht sehen ... ich glaube, es existierte. Zweitens, wenn ich alternativ über .deploy (wie in meiner vorherigen Frage) verwende - wenn "Standardweg ist für mich nicht machbar, dann WIE könnte ich diese Argumente anführen ... bitte aktualisieren Sie Ihre Antwort.
@AmirAli: 1. Ich empfehle, dass Sie den langen Erstellungscode in eine Datei kopieren und in Ihrem Bereitstellungscode aus der Datei lesen (anstatt ihn in Ihr Programm einzubetten). 2. Was meinst du mit "der Standardweg ist mir nicht machbar"? Bitte erläutern Sie, was genau nicht machbar ist, da Sie dieses Problem im Allgemeinen lösen müssen, anstatt nach anderen Wegen zu suchen. In jedem Fall sollten Sie, um zu wissen, welche Argumente Sie auf die "Standardmethode" (mit der web3.js-Deploy-Funktion) übergeben sollten, constructorim Quellcode nach der Funktion suchen und herausfinden, was für die Konstruktion erforderlich ist.
für mich nicht machbar .. bedeutet, dass ich viele Verträge über das Programm bereitstellen muss, da ich mein Programm nicht anpassen konnte, um Konstruktorparameter für jeden Vertrag separat zu speichern und zuzuweisen. und dann bereitstellen. In der Standardweise weiß ich, dass ich Argumente geben muss, wie man kompiliert, wie man bereitstellt ... ... 2. Ja, Sie haben Recht, manchmal suche ich nicht nach anderen Wegen ... weil der Strom für mich einfach aussieht Szenario ... .. OK, ich werde versuchen herauszufinden, welches in meinem Fall besser ist ... vielen Dank
@AmirAli: Wie ich schon sagte. Diese Methode, die Konstruktionsargumente eines anderen zu kopieren, ist anfällig für klägliche Fehlschläge! Jedes Argument, das eine Adresse eines Kontos oder eines Vertrags ist, macht den bereitgestellten Vertrag möglicherweise für Sie unbrauchbar, wenn Sie es sogar schaffen, ihn ohne Zurücksetzen bereitzustellen (aufgrund verschiedener Überprüfungen oder Aufrufe, die der Konstruktor möglicherweise an eine dieser Adressen sendet). ). Ich verstehe also, dass Sie nach dem "kurzen Weg" suchen, aber beachten Sie, dass dieser Versuch wahrscheinlich auf einem viel längeren Weg enden wird als der, den Sie vermeiden möchten.