Token wurde nach der Bereitstellung von Crowdsale nicht auf Etherscan gefunden

Ich stelle einen Vertrag bereit, der ein Token und einen Crowdsale erstellt, basierend auf einem leicht modifizierten Code von zeppelin-solidity .

Problem: Nachdem der Vertrag mit Truffle und Infura auf Rinkeby bereitgestellt wurde, ergab die Suche nach der Vertragsadresse 0x9B4b8583048D77F7CDc5c665f138E6dbce1e37Bain [Etherscans ERC20-Token-Suche][2] das Ergebnis, dass in dieser Vertragsadresse kein Token gefunden wurde!

Was schief gelaufen ist?

Ausgabe vontruffle 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_contract.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);
};

Dadurch entstehen 2 Verträge

  • Migrationen: 0xc0e02bc10bc4fbdba607365afcab5f6c992759e0
  • SampleCrowdsale: 0x09451e7df77a32f4b35858385b96ddd0a4e2bff2

0x09451e7df77a32f4b35858385b96ddd0a4e2bff2Bei Verwendung der Metamask- Funktion wird jedoch Add Tokenkein Token hinzugefügt. Auch der ETC20 Standard Token Explorer von Etherscan findet keinen gültigen Token an der Vertragsadresse.

Antworten (2)

*** Das Hinzufügen einer neuen Antwort als meine vorherige spiegelt nicht den aktuellen Stand der Frage wider.

Wenn ich mich nicht irre, suchen Sie auf Etherscan diese Adresse: 0x09451e7df77a32f4b35858385b96ddd0a4e2bff2, was dem Crowdsale entspricht.

Was Sie bei Etherscan suchen müssen, ist die Vertragsadresse für das SampleCrowdsaleToken, das im Crowdsale-Token erstellt wird.

Sie müssen den Crowdsale-Vertrag bereitstellen und dann die Adresse herausfinden, an der das Token bereitgestellt wurde.

Aktualisieren:

Aus der in der Frage geposteten Ausgabe von Truffle Migrate geht hervor, dass nur 2 Verträge erstellt wurden, 1 für die Truffle-Migration (aus 1_intiial_migration.js) und einer für den Crowdsale (aus 2_deploy_contracts.js). Soll für den Token ein dritter Vertrag erstellt werden? Einen dritten Vertrag finde ich nicht.

Konzentrieren Sie sich auf den bereitgestellten Crowdsale-Vertrag. Innerhalb dieses Crowdsale-Vertrags instanziiert die createTokenContract-Methode Ihren Coin-Vertrag und stellt ihn tatsächlich an einer neuen Adresse bereit. Diese Adresse müssen Sie auf Etherscan überprüfen, um Ihren Token zu finden.

Hier ist eine Schritt-für-Schritt-Anleitung zum Durchsuchen des Token-Vertrags. Es basiert auf genau demselben Code, den Sie gepostet haben und der im Ropsten-Testnetz verfügbar ist:

1- Suchen Sie Ihren Crowdsale-Vertrag auf Etherscan: Mine bereitgestellt unter https://ropsten.etherscan.io/address/0xb40b859107e7e788895f06fffdbb8db7777dcb9e

2- Gehen Sie zur Registerkarte "Interne Transaktionen". Hier werden Transaktionen angezeigt, die durch interne Verträge getätigt wurden. https://ropsten.etherscan.io/address/0xb40b859107e7e788895f06fffdbb8db7777dcb9e#internaltx Es wird zunächst 1 Transaktion angezeigt, die Vertragserstellung ist (das ist der Coin-Vertrag, den der Crowdsale-Vertrag bereitgestellt hat). Meine zeigt 2 Transaktionen an, da ich bereits einige Token gekauft habe.

3- Klicken Sie auf die Transaktion zur Vertragserstellung. Es leitet Sie an die Adresse weiter, an der die Münze bereitgestellt wurde. Das ist Ihre Token-Adresse https://ropsten.etherscan.io/address/0x50729cd2a36984b6ee6757755eb59ae2f87a7d20

4- Gehen Sie zu https://ropsten.etherscan.io/token-search und suchen Sie Ihren Token anhand der Adresse, die Sie zuvor erhalten haben. In diesem Fall: 0x50729cd2a36984b6ee6757755eb59ae2f87a7d20

5- Der folgende Bildschirm wird angezeigt, nachdem Sie mindestens 1 Transaktion mit Ihrem Token durchgeführt haben (verwenden Sie beispielsweise Metamask, um Ether an den Crowdsale zu senden, wodurch die Fallback-Funktion des Crowdsale ausgelöst wird, die buyTokens() aufruft. Auch wenn Sie dies nicht getan haben Um eine Transaktion durchzuführen, sollten Sie die Zustandsvariablen Ihres Tokens sehen können, wie z. B. Name, Gesamtversorgung usw.

Wenn Sie alles richtig gemacht haben, sollten Sie Folgendes sehen:

Geben Sie hier die Bildbeschreibung ein

Aus der Ausgabe von truffle migratePosted in der Frage geht hervor, dass nur 2 Verträge erstellt wurden, 1 für die Trüffelmigration (von 1_intiial_migration.js) und einer für den Crowdsale (von 2_deploy_contracts.js). Soll ein dritter Vertrag für das Token erstellt werden? Ich kann nicht scheinen einen dritten Vertrag zu finden.
@pabloruiz55 Sie sollten in der Lage sein, Ihre eigene Antwort zu bearbeiten, um Informationen hinzuzufügen/zu entfernen.
@Ismael Ja, das ist mir bewusst, aber da sich diese Frage seit ihrer ursprünglichen Veröffentlichung verändert hat, habe ich es vorgezogen, eine weitere Antwort zum aktuellen Status hinzuzufügen, anstatt die vorherige zu entfernen, falls sie für jemand anderen nützlich ist ein ähnliches Problem.
Perfekt, jetzt macht alles Sinn! Wusste nicht, wie man nach dem Token-Vertrag aus dem Crowdsale-Vertrag sucht. Die Schritt-für-Schritt-Anleitung ist sehr hilfreich.

Es scheint, dass Sie die Crowsale-Funktion, die die Token-Erstellung handhabt, nicht außer Kraft setzen.

Dies ist die Funktion, wie sie in Crowdsale.sol angezeigt wird

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

Sie sollten es in Ihrer SampleCrowdsale-Implementierung überschreiben:

// 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();
}
Wieder hinzugefügt createTokenContractzu Crowdsale.sol, aber immer noch nicht in der Lage, gültige Token an der Vertragsadresse für die SampleCrowdsaleVerwendung des ERC20-Token-Explorers von Metamask und Etherscan zu finden
Beachten Sie, dass ich eine Erstausstattung des Tokens erstellt und alles an gesendet habemsg.sender