Der Vertragscode konnte nicht gespeichert werden, bitte überprüfen Sie Ihre Gasmenge. [Zeppelin, Truffle.js, Ropsten]

Ich habe ein Problem mit der Bereitstellung des einfachen Token-Vertrags im Ropsten-Netzwerk.

Fehler ist "Der Vertragscode konnte nicht gespeichert werden, bitte überprüfen Sie Ihre Gasmenge".

Ich habe viele Male versucht, die Gaswerte in der Datei „Truffle.js“ zu ändern, es scheint auch, als hätte ich keine abstrakten Funktionen in der Datei „TestToken.sol“.

Software ist aktuell. Aber ich kann immer noch nicht herausfinden, was das Problem ist, ich bin nur ein Anfänger, also bitte helft mir, würde mich sehr freuen!

// truffle.js
require('dotenv').config();
const HDWalletProvider = require("truffle-hdwallet-provider");
module.exports = {
  networks: {
development: {
  host: "localhost",
  port: 9545,
  gas: 6712390,
  network_id: "*"
},
ropsten: {
    provider: function() { 
      return new HDWalletProvider(process.env.MNENOMIC, "https://ropsten.infura.io/" + process.env.INFURA_API_KEY) },
    network_id: 3,
    gas: 4700000,
    },
  }
};

//TestToken.sol

pragma solidity ^0.4.24;


import "zeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol";
import "zeppelin-solidity/contracts/math/SafeMath.sol";


contract TestToken is ERC20Basic {
    using SafeMath for uint;
    string public name;
    string public symbol;
    uint8 public decimals;
    uint public _totalSupply;


    mapping(address => uint) balances;
    mapping(address => mapping(address => uint)) allowed;


    function TestToken() public {
        name = "TestToken";
        symbol = "tttest";
        decimals = 18;

        _totalSupply = 4000000000000000000000000000;
        balances[0xE3FdfaAF08F4778c7E88Ed1E31696745ed610328] = _totalSupply;
        Transfer (address(0), 0xE3FdfaAF08F4778c7E88Ed1E31696745ed610328, _totalSupply); 
     }
}
PS Portnummer Ich habe zuerst 7545 verwendet, nur für den Fall, dass jemand eine Änderung vorschlägt
Haben Sie eine Transaktions-ID?
@RaghavSood ist das der richtige? 0xd2860dcb2466e064955a46f1f40e40c5e898f87dd6f33f2a94c0874fdd2842f7 0x3af00d91a4a4b8fb935dc40a667b96e344adbe172009d8a0b90adb786ce4eeae
2_deploy_contract.js ist wie folgt: const TestToken = artifacts.require(./TestToken.sol"); module.exports = function(deployer) { deployer.deploy(TestToken); };
Der zweite scheint einen Vertrag bereitgestellt zu haben, aber er hat kein Ereignis ausgegeben, also ist es möglicherweise nicht der richtige.
@RaghavSood Ich habe gerade den Migrationsbefehl erneut ausgeführt, 0x3e2be8283ed37112c65cecf6bfb0e42ad8b835a04d2372765ef937859dc7037e
Es sieht so aus, als würde Ihr TX versuchen, leeren Code bereitzustellen 0x, was impliziert, dass etwas in Ihrer Vertragsquelle die korrekte Kompilierung verhindert
@RaghavSood was verhindert das deiner Meinung nach? Ich habe meine token.sol-Datei angehängt, ist etwas seltsam? Wo könnte sich normalerweise die Ursache verstecken?

Antworten (2)

Ihr TestTokenerbt direkt von ERC20Basic. ERC20Basicist ein interface. Das bedeutet, dass TestTokendie abstrakten Methodendeklarationen implementiert werden müssen, ERC20Basicbevor sie bereitgestellt werden können.

Der Fehler, den Sie erhalten, weist nicht auf dieses Problem hin, das ich für einen Fehler halte, aber es wird ausgelöst, wenn Sie versuchen, einen Vertrag bereitzustellen, der nicht alle abstrakten Methoden implementiert.

Ein Tipp: Anstatt von OpenZeppelin zu erben ERC20Basic, verwenden Sie StandardToken. Es implementiert alle Funktionen, die zum Erstellen eines ERC-20-Tokens erforderlich sind

Dokumente:

Probieren Sie diesen Vertrag aus:

pragma solidity 0.4.24;

import "http://github.com/OpenZeppelin/openzeppelin-solidity/contracts/token/ERC20/StandardToken.sol";
import "http://github.com/OpenZeppelin/openzeppelin-solidity/contracts/math/SafeMath.sol";

contract TestToken is StandardToken {
    using SafeMath for uint;
    string public name;
    string public symbol;
    uint8 public decimals;
    uint public _totalSupply;


    mapping(address => uint) balances;
    mapping(address => mapping(address => uint)) allowed;


    constructor() public {

        name = "TestToken";
        symbol = "tttest";
        decimals = 18;
        _totalSupply = 4000000000000000000000000000;
        balances[0xE3FdfaAF08F4778c7E88Ed1E31696745ed610328] = _totalSupply;
        emit Transfer (address(0), 0xE3FdfaAF08F4778c7E88Ed1E31696745ed610328, _totalSupply); 
    }
}
Hallo Henk, klingt nach einer echten Lösung, aber ich habe versucht, sie zu ändern. import "zeppelin-solidity/contracts/token/ERC20/BasicToken.sol"; importiere „zeppelin-solidity/contracts/token/ERC20/ERC20.sol“; import "zeppelin-solidity/contracts/math/SafeMath.sol"; Vertrag TestToken ist ERC20, BasicToken {
Versucht, ein Test-Token (0x0d0a79027660c068ab739450f9c301b720d7e60ecece055c69d09b4018f07bfb) bereitzustellen, und gibt denselben Fehler „Netzwerkstatus unbekannt. Erfolgreiche Transaktionen manuell überprüfen. Fehler: Der Vertragscode konnte nicht gespeichert werden, bitte überprüfen Sie Ihre Gasmenge.“
Ja, versuche es mal mit StandardToken. BasicTokenimplementiert ERC20Basic, StandardTokenimplementiert sowohl ERC20Basicals auchERC20
Ich habe diese Teile bereits geändert und erhalte immer noch denselben Fehler. Aber kompiliert richtig. Oben habe ich Ihnen den TX-Code gesendet.
Hast du die Lösung schon gefunden?

Dieser Fehler wird normalerweise entweder durch Gasprobleme (weniger typisches Szenario) oder Probleme im Code verursacht.

Haben Sie zuerst versucht, in Ganache bereitzustellen? Wenn nicht, versuchen Sie es. Wenn das gelingt, dann ist es höchstwahrscheinlich wirklich ein Gasproblem.

Ich hatte das gleiche Problem für eine Ewigkeit, aber jemand schlug vor, eine magische Zahl für das Gaslimit in hinzuzufügen truffle.js. Früher hatte ich 4000000, aber dann habe ich diese magische Zahl ausprobiert und es hat funktioniert. Ich bin mir nicht sicher, ob es nur ein Timing-Problem war oder ob die magische Zahl tatsächlich geholfen hat.

So sieht mein Ropsten aus (und es hat funktioniert):

ropsten:  {
         network_id: 3,
         host: "localhost",
         port:  8545,
         gas: 4867350,
         gasPrice: 10000000000 // 10 gwei
        },
Danke Kumpel, Zahlen sind leider keine Zauberei für mich :(
Ja, ich werde versuchen, in Ganache bereitzustellen, wenn ich keine Antwort finden kann. Meine token.sol-Codes sind oben geteilt, können Sie irgendwelche Fehler oder seltsame Dinge entdecken, die verhindern, dass es normal bereitgestellt wird?