Token no encontrado en Etherscan después de implementar Crowdsale

Estoy implementando un contrato que crea un token y una venta colectiva, basado en un código ligeramente modificado de zeppelin-solidity .

Problema: después de implementar el contrato en Rinkeby usando Truffle e Infura, buscar la dirección del contrato 0x9B4b8583048D77F7CDc5c665f138E6dbce1e37Baen [Búsqueda de tokens ERC20 de Etherscan][2] dio como resultado que no se encontró ningún token en esa dirección de contrato.

¿Qué salió mal?

Salida detruffle migrate --network rinkeby

Using network 'rinkeby'.

Running migration: 1_initial_migration.js
  Replacing Migrations...
  ... 0xb101fbf5cb0c6f2e0e937484c2db43cef906501d5544c0ce742fd6965a06594e
  Migrations: 0x9b4b8583048d77f7cdc5c665f138e6dbce1e37ba
Saving successful migration to network...
  ... 0x53dd9d5eb01e0dc636695a21ea8e95d58862a0c9e010c7fa8c840048fc21f7ad
Saving artifacts...
Running migration: 2_deploy_contracts.js
  Replacing SampleCrowdsale...
  ... 0x31fef6189be9eb877b87751cd27c00f52e46c0fca3ce17722a4a586691a5c995
  SampleCrowdsale: 0x2c7bf1f6c01bd45e104de98e96266a2b1f07907f
Saving successful migration to network...
  ... 0xddfecd93e7d8aefa4c438a0e4a7d8e775e17ff6241177b0511413a5ccb665985
Saving artifacts...

SampleCrowdsale.sol

pragma solidity ^0.4.11;

import "zeppelin-solidity/contracts/crowdsale/CappedCrowdsale.sol";
import "zeppelin-solidity/contracts/crowdsale/RefundableCrowdsale.sol";
import "zeppelin-solidity/contracts/token/MintableToken.sol";


contract SampleCrowdsaleToken is MintableToken {

  string public constant name = "Sample Crowdsale Token";
  string public constant symbol = "SCT";
  uint8 public constant decimals = 18;

  uint256 public constant INITIAL_SUPPLY = 10000 * (10 ** uint256(decimals));

  /**
   * @dev Constructor that gives msg.sender all of existing tokens.
   */
  function SampleCrowdsaleToken() {
    totalSupply = INITIAL_SUPPLY;
    balances[msg.sender] = INITIAL_SUPPLY;
  }

}


contract SampleCrowdsale is CappedCrowdsale, RefundableCrowdsale {

  function SampleCrowdsale(uint256 _startTime, uint256 _endTime, uint256 _rate, uint256 _goal, uint256 _cap, address _wallet)
    CappedCrowdsale(_cap)
    FinalizableCrowdsale()
    RefundableCrowdsale(_goal)
    Crowdsale(_startTime, _endTime, _rate, _wallet)
  {
    //As goal needs to be met for a successful crowdsale
    //the value needs to less or equal than a cap which is limit for accepted funds
    require(_goal <= _cap);
  }

  function createTokenContract() internal returns (MintableToken) {
    return new SampleCrowdsaleToken();
  }

}

2_deploy_contrato.js

var SampleCrowdsale = artifacts.require("../contracts/SampleCrowdsale.sol");

module.exports = function(deployer) {
    var d = new Date()
    var startTime = d.getTime()
    var endTime = startTime + (86400 * 20) // 20 days
    const rate = new web3.BigNumber(1000)
    const goal = 10000
    const cap = 1000000
    const wallet = '0xcede48d8aC162d1b08ed9419010DE3c99F2cfDd6'
  deployer.deploy(SampleCrowdsale, startTime, endTime, rate, goal, cap, wallet);
};

Esto crea 2 contratos.

  • Migraciones: 0xc0e02bc10bc4fbdba607365afcab5f6c992759e0
  • MuestraCrowdsale: 0x09451e7df77a32f4b35858385b96ddd0a4e2bff2

Sin embargo, el uso 0x09451e7df77a32f4b35858385b96ddd0a4e2bff2de la función Metamask Add Tokenno agrega ningún token. El explorador de tokens estándar ETC20 de Etherscan tampoco encuentra ningún token válido en la dirección del contrato.

Respuestas (2)

*** Agregar una nueva respuesta como la anterior no refleja el estado actual de la pregunta.

Si no me equivoco, está buscando en Etherscan esta dirección: 0x09451e7df77a32f4b35858385b96ddd0a4e2bff2 que corresponde a Crowdsale.

Lo que debe buscar en Etherscan es la dirección del contrato para SampleCrowdsaleToken que se crea dentro del token de Crowdsale.

Deberá implementar el contrato Crowdsale y luego averiguar la dirección en la que se implementó el token.

Actualizar:

Del resultado de la migración de trufas publicado en la pregunta, parece que solo se crearon 2 contratos, 1 para la migración de trufas (de 1_intiial_migration.js) y uno para la venta colectiva (de 2_deploy_contracts.js). ¿Se supone que se crea un tercer contrato para el token? Parece que no puedo encontrar un tercer contrato.

Concéntrese en el contrato de Crowdsale que se implementó. Dentro de este contrato de Crowdsale, el método createTokenContract está creando una instancia de su contrato de Moneda, de hecho, desplegándolo en una nueva dirección. Esa dirección es la que debe inspeccionar en Etherscan para encontrar su token.

Aquí hay una guía paso a paso para buscar el contrato de token. Se basa exactamente en el mismo código que publicaste y está disponible en Ropsten testnet:

1- Busque su contrato de Crowdsale en Etherscan: el mío implementado en https://ropsten.etherscan.io/address/0xb40b859107e7e788895f06fffdbb8db7777dcb9e

2- Vaya a la pestaña "Transacciones internas", esto mostrará las transacciones realizadas por contratos internos. https://ropsten.etherscan.io/address/0xb40b859107e7e788895f06fffdbb8db7777dcb9e#internaltx Inicialmente mostrará 1 transacción, que es la creación de contrato (ese es el contrato Coin que implementó el contrato Crowdsale). El mío mostrará 2 transacciones porque ya compré algunos tokens.

3- Haga clic en la transacción de Creación de contrato. Lo redirigirá a la dirección a la que se desplegó la moneda. Esa es su dirección de token https://ropsten.etherscan.io/address/0x50729cd2a36984b6ee6757755eb59ae2f87a7d20

4- Ingresa a https://ropsten.etherscan.io/token-search y busca tu token por dirección, que es la que obtuviste previamente. En este caso: 0x50729cd2a36984b6ee6757755eb59ae2f87a7d20

5- La siguiente pantalla aparecerá después de realizar al menos 1 transacción con su Token (por ejemplo, use Metamask para enviar ether a Crowdsale, lo que activará la función alternativa de Crowdsale, que llama a buyTokens(). Incluso si no lo hizo Al realizar una transacción, debería poder ver las variables de estado de su token, como el nombre, totalSupply, etc.

Si hiciste todo correctamente, deberías ver esto:

ingrese la descripción de la imagen aquí

Del resultado de la truffle migratepublicación en la pregunta, parece que solo se crearon 2 contratos, 1 para la migración de trufas (de 1_intiial_migration.js) y uno para la venta colectiva (de 2_deploy_contracts.js). ¿Se supone que se crea un tercer contrato para el token? Parece que no puedo para encontrar un tercer contrato.
@ pabloruiz55 Debería poder editar su propia respuesta para agregar/eliminar información.
@Ismael Sí, lo sé, pero dado que esta pregunta ha mutado desde que se publicó originalmente, preferí agregar otra respuesta relacionada con el estado actual, en lugar de eliminar la anterior, en caso de que sea útil para alguien más con un problema similar
¡Perfecto, todo tiene sentido ahora! No sabía cómo buscar el contrato token del contrato crowdsale. La guía paso a paso es muy útil.

Parece que no está anulando la función de Crowsale que maneja la creación de tokens.

Esta es la función tal y como aparece en Crowdsale.sol

function createTokenContract() internal returns (MintableToken) {
    return new MintableToken();
}

Debe anularlo en su implementación de SampleCrowdsale:

// creates the token to be sold.
// override this method to have crowdsale of a specific MintableToken token.
function createTokenContract() internal returns (MintableToken) {
  return new SimpleToken();
}
Se volvió a agregar createTokenContracta Crowdsale.sol, pero aún no se pueden encontrar tokens válidos en la dirección del contrato para SampleCrowdsaleusar Metamask y el explorador de tokens ERC20 de Etherscan
Tenga en cuenta que creé un suministro inicial del token y lo envié todo amsg.sender