Tengo algunos problemas con la implementación del contrato de token simple en la red de Ropsten.
El error es "No se pudo almacenar el código del contrato, verifique la cantidad de gas".
Traté de cambiar los valores de Gas muchas veces en el archivo "Truffle.js", también parece que no tengo ninguna función abstracta en el archivo "TestToken.sol".
El software está actualizado. Pero todavía no puedo entender cuál es el problema, solo soy un principiante, así que por favor ayúdame, ¡te lo agradecería mucho!
// 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);
}
}
Su TestToken
hereda directamente de ERC20Basic
. ERC20Basic
es un interface
. Eso significa que TestToken
tiene que implementar los métodos abstractos ERC20Basic
declarados antes de que pueda implementarse.
El error que está recibiendo no apunta a este problema, que creo que es una falla, pero aparece cuando intenta implementar un contrato que no implementa todos los métodos abstractos.
Un consejo: en lugar de heredar de OpenZeppelin ERC20Basic
, usa StandardToken
. Implementa toda la funcionalidad necesaria para crear un token ERC-20
Documentos:
Prueba este contrato:
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
implementa ERC20Basic
, StandardToken
implementa ambos ERC20Basic
yERC20
Este error generalmente es causado por problemas de gas (escenario menos típico) o problemas en el código.
¿Has intentado implementar en Ganache primero? Si no, intente eso. Si eso tiene éxito, lo más probable es que sea realmente un problema de gas.
Solía tener el mismo problema por una eternidad, pero alguien sugirió agregar un número mágico para el límite de gas en truffle.js
. Solía tener 4000000 pero luego probé este número mágico y funcionó. No estoy seguro de si fue solo un problema de tiempo o si el número mágico realmente ayudó.
Este es mi aspecto de Ropsten (y ha funcionado):
ropsten: {
network_id: 3,
host: "localhost",
port: 8545,
gas: 4867350,
gasPrice: 10000000000 // 10 gwei
},
josefa
Raghav Sood
josefa
josefa
Raghav Sood
josefa
Raghav Sood
0x
, lo que implica que algo en la fuente de su contrato impide que se compile correctamentejosefa