Contract-Development

訪問發送到智能合約地址的資金

  • June 15, 2021

如果某人創建了一份智能合約(並且是該合約的所有者),該人是否有可能收集發送到智能合約地址的 ETH 和其他代幣?

這只有在智能合約的創建者能夠實現的情況下才有可能。如果合約沒有實現任何提款()功能,那麼資金可能無法被所有者收回。

這是一個功能,而不是一個錯誤。您是否希望乙太坊 delta 智能合約的創建者隨心所欲地從合約中提取所有乙太幣和代幣?不。

智能合約沒有任何所有者或撤回機制,除非它們已在合約中編碼。這賦予了智能合約一種無需信任的能力:通過仔細理解合約程式碼,可以在不信任所有者的情況下使用合約。

提取 ERC-20 代幣

如果您是智能合約作者,並且希望能夠提取 ERC-20 代幣,您需要執行 2 個步驟。

第 1 步:在您的合約上方添加此介面(ERC-20 的子集)

contract Token {
   function transfer(address _to, uint _value) returns (bool success);
   function balanceOf(address _owner) constant returns (uint balance);
}

第 2 步:這是您可以在合約中添加的功能

function withdrawTokens(address tokenContract) external onlyOwner {
   Token tc = Token(tokenContract);

   tc.transfer(owner, tc.balanceOf(this));
}

這假設您已正確編寫並將自己配置為owner. 由於您的合約可能會收到許多不同類型的代幣,因此您需要withdrawTokens從每個tokenContract. 如果owner是另一個合約,它還必須具有withdrawTokens防止代幣卡在owner合約中的功能。

提取乙太幣

程式碼更簡單:

function withdrawEther() external onlyOwner {
   owner.transfer(this.balance);
}

同樣,如果owner是另一個合約,它還必須具有withdrawEther防止乙太幣卡在owner合約中的功能。

另一個參考:如何從合約中提取乙太幣

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