У меня возникла проблема с развертыванием простого токена-контракта в сети Ropsten.
Ошибка: «Не удалось сохранить код контракта, проверьте количество газа».
Я много раз пытался изменить значения газа в файле «Truffle.js», также кажется, что у меня нет никаких абстрактных функций в файле «TestToken.sol».
Программное обеспечение обновлено. Но я до сих пор не могу понять, в чем проблема, я всего лишь новичок, поэтому, пожалуйста, помогите мне, буду очень признателен!
// 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);
}
}
Ваш TestToken
наследуется непосредственно от ERC20Basic
. ERC20Basic
является interface
. Это означает, что TestToken
он должен реализовать объявленные абстрактные методы, ERC20Basic
прежде чем его можно будет развернуть.
Ошибка, которую вы получаете, не указывает на эту проблему, что я считаю недостатком, но она возникает, когда вы пытаетесь развернуть контракт, который не реализует все абстрактные методы.
Совет: вместо наследования от OpenZeppelin ERC20Basic
используйте StandardToken
. Он реализует все функции, необходимые для создания токена ERC-20.
Документы:
Попробуйте этот контракт:
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
реализует ERC20Basic
, StandardToken
реализует и то , ERC20Basic
и другоеERC20
Эта ошибка обычно вызвана либо проблемами с газом (менее типичный сценарий), либо проблемами в коде.
Вы пробовали сначала развернуть в Ganache? Если нет, попробуйте это. Если это удастся, то, скорее всего, действительно проблема с газом.
Раньше у меня была такая же проблема целую вечность, но кто-то предложил добавить магическое число для лимита газа в truffle.js
. Раньше у меня было 4000000, но потом я попробовал это магическое число, и оно сработало. Не уверен, была ли это просто какая-то проблема со временем или магическое число действительно помогло.
Вот как выглядит мой Ropsten (и это сработало):
ropsten: {
network_id: 3,
host: "localhost",
port: 8545,
gas: 4867350,
gasPrice: 10000000000 // 10 gwei
},
Джозефхх
Рагхав Суд
Джозефхх
Джозефхх
Рагхав Суд
Джозефхх
Рагхав Суд
0x
, а это означает, что что-то в вашем исходном коде препятствует его правильной компиляции.Джозефхх