Solidity

如何從合約中移除乙太幣

  • August 11, 2018

請問,我怎樣才能刪除卡在合約中的乙太幣?如果不可能做到這一點,那麼使我能夠從我創建的合約中刪除乙太幣的功能是什麼?

一旦發布了合約,就無法修改它,因此如果沒有包含提款或自毀功能,那麼以後就無法將它們添加到合約中,並且資金實際上永遠停留在該合約中。

查看您提供的連結中的契約,“HashnodeTestCoin”契約確實定義了以下內容:

address public fundsWallet;           // Where should the raised ETH go?

在建構子中,這個地址被分配給合約創建者(最後一行):

// This is a constructor function 
// which means the following function name has to match the contract name declared above
function HashnodeTestCoin() {
       balances[msg.sender] = 1000000000000000000000;               // Give the creator all initial tokens. This is set to 1000 for example. If you want your initial tokens to be X and your decimal is 5, set this value to X * 100000. (CHANGE THIS)
       totalSupply = 1000000000000000000000;                        // Update total supply (1000 for example) (CHANGE THIS)
       name = "HashnodeTestCoin";                                   // Set the name for display purposes (CHANGE THIS)
       decimals = 18;                                               // Amount of decimals for display purposes (CHANGE THIS)
       symbol = "HTCN";                                             // Set the symbol for display purposes (CHANGE THIS)
       unitsOneEthCanBuy = 10;                                      // Set the price of your token for the ICO (CHANGE THIS)
       fundsWallet = msg.sender;                                    // The owner of the contract gets ETH
}

合約看起來是​​結構化的,所以它收到的任何 eth 都應該轉發到 fundWallet 地址——這不是最好的做事方式,但它應該有效!

您是否將合約名稱從“HashnodeTestCoin”更改為,如果是,您是否還更改了建構子的名稱以匹配它?

您還沒有說明您部署了哪個契約,也沒有說明您傳遞的參數。如果您沒有部署 HashnodeTestCoin(或您將其重命名的任何內容),則可能未正確分配所有者地址。如果您更改了合約的名稱但沒有更新建構子的名稱,那麼它將永遠不會執行建構子,因此永遠不會將您的地址分配為fundsWallet。

一種更傳統的分配所有權的方法是首先創建一個“Ownable”合約,然後將“HashnodeTestCoin”定義為“Ownable”;這將確保您的地址在部署時分配給契約。Ownable 合約看起來像這樣:

contract Ownable {
   address public owner;

   function Ownable() {owner = msg.sender;}

   modifier onlyOwner {
       if (msg.sender != owner) throw;
       _;
   }

   function transferOwnership(address newOwner) onlyOwner {
       if (newOwner != address(0)) {
           owner = newOwner;
       }
   }

然後 HashnodeTestCoin 將聲明如下:

   contract HashnodeTestCoin is StandardToken, Ownable {

所有Ether發送到您的契約的資訊都會立即轉發給契約的所有者。它在程式碼中,檢查它。

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