Seltsame Ausgabe von Truffle Migrate --network live --dry-run

Ich kann meinen Vertrag nicht mit Infura, MetaMask und Truffle erfolgreich bereitstellen.

Beim Ausführen truffle migrate --network liveerhalte ich diesen Fehler:

Error encountered, bailing. Network state unknown. Review successful transactions manually. insufficient funds for gas * price + value

Aber dann, wenn ich laufe truffle migrate --network live --dry-run, bekomme ich diese Ausgabe:

sender doesn't have enough funds to send tx. The upfront cost is: 672197500000000000 and the sender's account only has: 60000000000000000

Unter der Annahme, dass der Wert in Wei angegeben ist, warum würde es dann so viel kosten, einen Vertrag bereitzustellen? Was kann ich dagegen tun?

Hier ist meine truffle.jsDatei:

var HDWalletProvider = require("truffle-hdwallet-provider");

var mnemonic = "my_mnemonic";

module.exports = {
  networks: {
    live: {
      network_id: 1,
      provider: new HDWalletProvider(mnemonic, "https://mainnet.infura.io/my_api_key")    
    }   
  }
};
Senden Sie auch Ether zur Bereitstellungszeit? Es würde helfen, wenn du deinen Code postest.
@AdamKipnis Nein. Guter Punkt, ich habe den Code meines Vertrags gepostet.
@vipertherapper hat nichts mit Ihrer Frage zu tun, aber wenn Sie es nicht msg.valuein einer Funktion verwenden, sollten Sie diese Funktion nicht erstellen payable. Dieses Schlüsselwort bedeutet, dass Sie ETH mit der Transaktion an den Vertrag senden können, aber Ihr returnEth, und feetun Sie das nicht - adopterwartet nur, dass ETH dorthin gesendet wird
@ Andrey danke für den Hinweis. Also sollte ich einfach payableaus returnEthund entfernen fee? Welche Auswirkungen hat es, das payableSchlüsselwort in diesen Funktionen zu belassen?
Die Auswirkungen sind, dass jemand eth senden kann, wenn er diese Funktionen aufruft, und dass eth im Vertrag hängen bleibt, da der Vertrag keine Möglichkeit hat, es an den Aufrufer oder den Eigentümer zurückzusenden
@AdamKipnis Irgendeine Idee, warum dies so viel Eth für die Bereitstellung erfordert?
Ich fange an zu glauben, dass es sowohl eine irreführende Fehlermeldung ist als auch Ismaels Antwort richtig ist (sorry Ismael). Ich konnte das gleiche Problem in Rinkeby reproduzieren. Wenn die Bereitstellung fehlschlägt, wird immer derselbe Wert für die Vorabkosten verwendet, auch wenn dies im Erfolgsfall nicht Ihre tatsächlichen Kosten sind. Da Sie nur 0,06 eth auf Ihrem Konto haben, übersteigen Ihre Kosten Ihre Mittel (3M Gas bei 20 Gwei sind ~0,06 eth). Versuchen Sie es mit einem wirklich niedrigen Gaspreis (~ 2 Gwei) und wiederholen Sie den Vorgang. Das Mining kann eine Weile dauern, aber es sollte funktionieren.
@AdamKipnis Ich werde das versuchen. Sollte ich dasselbe 4M für Benzin verwenden, das Ismael vorgeschlagen hat?
Ja. Was nicht verwendet wird, wird Ihnen zurückgegeben. Sie können davon ausgehen, dass die Bereitstellung ungefähr 0,006 eth (oder ~ 5 US-Dollar) kosten wird.

Antworten (1)

Sie können remix.ethereum.org verwenden, um Ihren Vertrag zu testen und den Gasverbrauch zu berechnen. Für mich verbraucht es ungefähr 2M Gas beim Einsatz.

Sie haben das Gaslimit in Ihrer Konfiguration nicht angegeben, es wird standardmäßig verwendet (es waren etwa 6,7 ​​Millionen Gas). Sie können versuchen, es in Ihrer truffle.js zu verringern.

var HDWalletProvider = require("truffle-hdwallet-provider");

var mnemonic = "my_mnemonic";

module.exports = {
  networks: {
    live: {
      network_id: 1,
      provider: new HDWalletProvider(mnemonic, "https://mainnet.infura.io/my_api_key"),
      gas: "4000000",           // 4M
      gasPrice: "20000000000"   // 20gwei
    }   
  }
};
Ich dachte dasselbe, aber derselbe Fehler (mit denselben Kosten) wird unabhängig vom eingestellten gas/gasPrice ausgegeben truffle.js. Außerdem sollten die Kosten selbst mit diesen Parametern viel geringer sein (insgesamt < 0,03 eth @ 20 Gwei).
@AdamKipnis Da muss ich dir zustimmen. Ich bin hier ratlos. Ich versuche zu verstehen, warum das passiert.