Mist

按照 ethereum.org 上的代幣教程,收到錯誤消息“合約地址上沒有部署數據”

  • November 29, 2017

我只是複製本教程中找到的完整代幣程式碼,以使用霧在測試網上部署合約,但我收到錯誤消息“合約地址上沒有部署數據”。然後,該合約在我的錢包中顯示為一筆交易,但並未列在合約下。我正在使用盡可能高的費用,並將我自己的錢包地址作為中央鑄幣機地址輸入參數。這是有效的嗎?這個論點似乎只在該行中使用

if(centralMinter != 0) 所有者 = msg.sender;

這對我來說似乎相當多餘,因此無論與錯誤消息相關的任何解釋都值得讚賞!

這不是你的錯,MyAdvancedToken契約是錯的。當您擴展另一個合約並且該合約的建構子需要參數時,您必須在創建階段傳遞這些參數。MyAdvancedToken繼承token但它不會將參數傳遞給其父級,因此它不能按預期工作。我修復了這個例子,我已經向官方頁面發送了一個拉取請求。同時,您可以按照這些說明自行修復。

token合約內部,從建構子中刪除第一行:

balanceOf[msg.sender] = initialSupply;              // Give the creator all initial tokens

MyAdvancedToken合約內部,替換錯誤的建構子:

/* Initializes contract with initial supply tokens to the creator of the contract */
function MyAdvancedToken(
   uint256 initialSupply,
   string tokenName,
   uint8 decimalUnits,
   string tokenSymbol,
   address centralMinter
) {
   if(centralMinter != 0 ) owner = msg.sender;         // Sets the minter
   balanceOf[msg.sender] = initialSupply;              // Give the creator all initial tokens
   name = tokenName;                                   // Set the name for display purposes
   symbol = tokenSymbol;                               // Set the symbol for display purposes
   decimals = decimalUnits;                            // Amount of decimals for display purposes
   totalSupply = initialSupply;
}

有了這個:

/* Initializes contract with initial supply tokens to the creator of the contract */
function MyAdvancedToken(
   uint256 initialSupply,
   string tokenName,
   uint8 decimalUnits,
   string tokenSymbol,
   address centralMinter
) token (initialSupply, tokenName, decimalUnits, tokenSymbol) {
   if(centralMinter != 0 ) owner = centralMinter;      // Sets the owner as specified (or msg.sender if centralMinter is not specified)
   balanceOf[owner] = initialSupply;                   // Give the owner all initial tokens
}

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