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);
}
}
Ihr TestToken
erbt direkt von ERC20Basic
. ERC20Basic
ist ein interface
. Das bedeutet, dass TestToken
die abstrakten Methodendeklarationen implementiert werden müssen, ERC20Basic
bevor 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);
}
}
StandardToken
. BasicToken
implementiert ERC20Basic
, StandardToken
implementiert sowohl ERC20Basic
als auchERC20
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
},
Josefhh
Raghav Sood
Josefhh
Josefhh
Raghav Sood
Josefhh
Raghav Sood
0x
, was impliziert, dass etwas in Ihrer Vertragsquelle die korrekte Kompilierung verhindertJosefhh