Error de transacción. Excepción lanzada en el código del contrato. REVERT código de operación al enviar ETH a crowdsale

Quería seguir el tutorial: https://blog.zeppelin.solutions/how-to-create-token-and-initial-coin-offering-contracts-using-truffle-openzeppelin-1b7a5dae99b6 , pero había una nueva versión: https://github.com/OpenZeppelin/zeppelin-solidity/releases/tag/v1.7.0 - así que estoy tratando de resolverlo...

El código real se verifica en Etherscan.

Venta al público: https://ropsten.etherscan.io/address/0x018ea8f3fef7bd14c7bff98e898842925f05e6ea#code

Moneda: https://ropsten.etherscan.io/address/0x37ca578d3d847d27741b2ffc033419a7d11b7bef#code

Mi cuenta enviando ETH a crowdsale: https://ropsten.etherscan.io/address/0x85a363699c6864248a6ffca66e4a1a5ccf9f5567

Hash de transacción: https://ropsten.etherscan.io/tx/0x7f99bca20b767073eb48ed2e6d01186c55bcc97ee8316523977e15c4286f6c5a

ingrese la descripción de la imagen aquí

Aquí hay un video corto de mí explicando lo que estoy haciendo: https://youtu.be/oKP9ea5PNho


Mirando el código: https://github.com/OpenZeppelin/zeppelin-solidity/blob/3c489127306d09dc08c6a22263134fb5413d2f80/contracts/crowdsale/Crowdsale.sol#L48

function Crowdsale(uint256 _rate, address _wallet, ERC20 _token) public

Hago una instancia de coin y crowdsale de la siguiente manera:

contract MailHustleCrowdsale is Crowdsale {

  uint256 _rate = 1000; 
  address _wallet = 0x315f80c7caacbe7fb1c14e65a634db89a33a9637;
  ERC20 _token = new MailHustleCoin();

  function MailHustleCrowdsale() Crowdsale(_rate, _wallet, _token) {          
  }
}

Supongo que el error está en algún lugar aquí, pero no puedo entender la sintaxis de trabajo ...


Enfoque alternativo:

¿Cómo hacer referencia a un contrato de monedas que ya está en la cadena?

Si incluir el código fuente original no es práctico, una forma fácil de evitarlo es simplemente hacer un contrato de código auxiliar sobre su propio contrato que contenga la firma de la función a la que desea llamar.

Para simplificar, he decidido incluir todo en un solo archivo.

Respuestas (1)

El crédito es para Vidor:

¿Tal vez puedas ganar algo de reputación de desbordamiento de pila y poner estos consejos en la pregunta original?

demasiada molestia para poca diversión

Entiendo, lo haré entonces.

Me doy cuenta de que sé tan poco y que no debería tocar el código.


Uno

function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool)

Solo el propietario puede acuñar. La creación de monedas debe estar en el contrato de venta colectiva.

Dos

function _deliverTokens(address _beneficiary, uint256 _tokenAmount) internal { require(MintableToken(token).mint(_beneficiary, _tokenAmount)); }

En lugar de

function _deliverTokens(address _beneficiary, uint256 _tokenAmount) internal { token.transfer(_beneficiary, _tokenAmount); }

Actualmente, está transfiriendo tokens desde la dirección del remitente que tiene 0. Desea optar por una estrategia de acuñación que sea mejor

Aquí está TX que funciona: https://ropsten.etherscan.io/tx/0x1b4c11eee16e06bc53a273a9a805ea11def461c9f81847edb2d8f95daa273ae5

(puede navegar hasta el contrato para ver la fuente de trabajo)


Aquí hay un mejor ejemplo: https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/examples/SampleCrowdsale.sol