Solidity

部署 Crowdsale 後在 Etherscan 上找不到令牌

  • October 13, 2017

我正在部署基於從 zeppelin- solidity 稍微修改的程式碼創建代幣和眾籌的合約。

**問題:**使用 Truffle 和 Infura 將合約部署到 Rinkeby 後,搜尋合約0x9B4b8583048D77F7CDc5c665f138E6dbce1e37Ba地址

$$ Etherscan’s ERC20 Token Search $$$$ 2 $$給出的結果是在該合約地址中沒有找到任何代幣! 什麼地方出了錯?

的輸出truffle 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);
};

這將創建 2 個合約

  • 遷移:0xc0e02bc10bc4fbdba607365afcab5f6c992759e0
  • 樣本眾籌:0x09451e7df77a32f4b35858385b96ddd0a4e2bff2

但是0x09451e7df77a32f4b35858385b96ddd0a4e2bff2在 MetamaskAdd Token功能中使用不會添加任何 Token。Etherscan 的 ETC20 標準代幣瀏覽器也沒有在合約地址找到任何有效的代幣。

*** 添加一個新答案作為我之前的答案並不反映問題的目前狀態。

如果我沒記錯的話,你正在 Etherscan 上搜尋這個地址:0x09451e7df77a32f4b35858385b96ddd0a4e2bff2,它對應於 Crowdsale。

您需要在 Etherscan 上查找的是在 Crowdsale 令牌中創建的 SampleCrowdsaleToken 的合約地址。

您必須部署 Crowdsale 合約,然後找出部署令牌的地址。

更新:

從問題中發布的 truffle migrate 的輸出來看,似乎只創建了 2 個契約,1 個用於 truffle 遷移(來自 1_intiial_migration.js),一個用於眾籌(來自 2_deploy_contracts.js)。是否應該為代幣創建第三份合約?我似乎找不到第三份契約。

關注已部署的 Crowdsale 合約。在這個 Crowdsale 合約中,createTokenContract 方法正在實例化您的 Coin 合約,實際上將其部署到一個新地址。 地址是您必須在 Etherscan 上檢查才能找到您的令牌的地址。

這是搜尋代幣合約的分步指南。它基於您在 Ropsten 測試網上發布和提供的完全相同的程式碼:

1- 在 Etherscan 上搜尋你的 Crowdsale 合約:我的部署在https://ropsten.etherscan.io/address/0xb40b859107e7e788895f06fffdbb8db7777dcb9e

2- 轉到“內部交易”選項卡,這將顯示內部契約進行的交易。https://ropsten.etherscan.io/address/0xb40b859107e7e788895f06fffdbb8db7777dcb9e#internaltx 最初會顯示 1 筆交易,即合約創建(即 Crowdsale 合約部署的 Coin 合約)。我的將顯示 2 筆交易,因為我已經購買了一些代幣。

3- 點擊契約創建交易。它會將您重定向到部署硬幣的地址。那是你的代幣地址 https://ropsten.etherscan.io/address/0x50729cd2a36984b6ee6757755eb59ae2f87a7d20

4- 轉到https://ropsten.etherscan.io/token-search並按地址搜尋您的令牌,這是您之前獲得的那個。在這種情況下:0x50729cd2a36984b6ee6757755eb59ae2f87a7d20

5- 在您使用您的代幣進行至少 1 次交易後,將顯示以下螢幕(例如,使用 Metamask 將乙太幣發送到 Crowdsale,這將觸發 Crowdsale 的備份功能,該功能呼叫 buyTokens()。即使您沒有在進行交易時,您應該能夠看到您的代幣的狀態變數,例如名稱、totalSupply 等。

如果你做的一切都正確,你應該看到這個:

在此處輸入圖像描述

引用自:https://ethereum.stackexchange.com/questions/28357