Solidity
如何從合約中移除乙太幣
請問,我怎樣才能刪除卡在合約中的乙太幣?如果不可能做到這一點,那麼使我能夠從我創建的合約中刪除乙太幣的功能是什麼?
一旦發布了合約,就無法修改它,因此如果沒有包含提款或自毀功能,那麼以後就無法將它們添加到合約中,並且資金實際上永遠停留在該合約中。
查看您提供的連結中的契約,“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
發送到您的契約的資訊都會立即轉發給契約的所有者。它在程式碼中,檢查它。