部署 Crowdsale 後在 Etherscan 上找不到令牌
我正在部署基於從 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 等。
如果你做的一切都正確,你應該看到這個: