Unterzeichnete Transaktion senden, um einen Vertrag zu erstellen

Mein Ziel ist es, eine signierte Transaktion zu senden, um einen Smart Contract zu erstellen, aber ich stehe vor einem Problem, das ich seit einigen Tagen nicht lösen konnte:

Wenn ich die Transaktion sende (auf einer privaten Kette), gibt es zwei verschiedene Enden:

- 1 Web3js sagt mir, dass es funktioniert hat, ich kann die Transaktion im Block sehen. Wenn ich jedoch versuche, den Vertrag zu kontaktieren, habe ich die folgende Ausgabe:

Fehler: Uint256 konnte nicht von ABI dekodiert werden: 0x

Wenn ich versuche, eth.getCode(contractAddress)in Geth zu laufen, kehrt es zurück0x

- 2 Web3js sagt mir, dass die Transaktion nicht für 50 Blöcke abgebaut wurde (der Knoten hatte keine Zeit, 50 Blöcke abzubauen). Aber ich kann die Transaktion im Block (in Geth) sehen.

Hier ist der Code, den ich verwende:

web3g = result;
getContractInstance(function (error, instance) {
    if (error) {
        console.log(error);
    } else {
        let newContract = instance;
        let deploy = newContract.deploy({
            data: bytecode,
            arguments: [MY ARGS]
        }).encodeABI();
        let gas = web3g.utils.toHex(3000000);
        let gasPrice = web3g.utils.toHex(21000000000);
        let gasLimit = web3g.utils.toHex(4000000);
        let nonce;
        web3g.eth.getTransactionCount(req.body.sender_address)
            .then(function (result) {
                nonce = result;
                nonce = web3g.utils.toHex(nonce);
                let transactionObject = {
                    gas: gas,
                    gasPrice: gasPrice,
                    gasLimit: gasLimit,
                    data: deploy,
                    from: req.body.sender_address,
                    nonce: nonce
                };

                web3g.eth.accounts.signTransaction(transactionObject, req.body.private_key, function (error, signedTx) {
                    if (error) {
                        console.log(error);
                    } else {
                        console.log(signedTx);
                        web3g.eth.sendSignedTransaction(signedTx.rawTransaction)
                            .on('confirmation', function (number, receipt) {
                                if (number == 1) {
                                        // do stuff

Kann mir jemand sagen, was ich falsch mache?

Hinweis: Ich kann signierte Transaktionen mit der obigen Methode senden, um Ether zwischen Adressen zu übertragen.

Bearbeiten: Das Schätzen des Gases gibt Folgendes zurück: Fehler: Zurückgegebener Fehler: Das erforderliche Gas überschreitet die Genehmigung oder die Transaktion schlägt immer fehl

Antworten (1)

Ich hatte ähnliche Probleme beim Erstellen signierter Transaktionen und habe schließlich dieses Paket entwickelt. https://www.npmjs.com/package/web3js-raw . Sollte dein Problem lösen.

Vielen Dank für Ihre Antwort. Die Nutzung einer nicht offiziellen Bibliothek kommt für mich jedoch nicht in Frage, da dies zu beruflichen Zwecken dient und Sie Ihre Bibliothek möglicherweise nicht ständig aktualisieren. Aber könnten Sie erklären, was das Problem ist?
Sie müssen die Bibliothek nicht verwenden, da der Quellcode in Git Repo ( github.com/fidenz-chim/web3js-raw ) öffentlich verfügbar ist. Es gibt so viele bewegliche Teile, wenn Sie versuchen, eine Transaktion zu unterzeichnen. Alles, was ich getan habe, ist, web3.js-Funktionen in einer einfach zu verwendenden Weise zu packen, um sie in sendRawTransaction zu verwenden. Wenn Sie bereit sind, den Vertrag zu teilen, könnte ich ihn bereitstellen und sehen, was passiert.
Ich werde es überprüfen, wenn ich kann. Wir kommen so schnell wie möglich auf Sie zurück!
Nun, Ihre Lösung scheint ganz gut zu sein. Werde versuchen es auf meiner Seite umzusetzen. Wenn es zu viele Schwierigkeiten gibt, wird es gegabelt. Danke schön!
Mit web3js ^0.17.0 kann ich keine Verbindung zum Knoten herstellen: VERBINDUNGSFEHLER: Verbindung zum Knoten konnte nicht hergestellt werden. Aber es funktioniert gut mit web3js ^1.0.0-beta.26. Sam =e auf meiner eigenen Implementierung oder mit Ihrer
Ich konnte bestätigen, dass web3js ^0.17.0 an meiner Seite problemlos funktioniert. Funktioniert bei mir und meinem Kollegen auch.
Führen Sie es gegen Ihren eigenen Knoten aus? Wenn ja, was ist die Version von geth? (ich bin auf 1.7.3)
Ich habe mit infura.io getestet, also als mein Kollege.