Contract-Development
訪問發送到智能合約地址的資金
如果某人創建了一份智能合約(並且是該合約的所有者),該人是否有可能收集發送到智能合約地址的 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
合約中的功能。另一個參考:如何從合約中提取乙太幣