Solidity
如果智能合約沒有發送功能,它可以發送代幣/乙太坊嗎?
假設您剛剛在地址 0x012345 創建了 1,000 個令牌。你,0x012345 的所有者錯誤地將所有代幣和 1ETH 發送到地址為 0x987654 的智能合約。該智能合約沒有“支付代幣”或“發送乙太坊”功能,它非常基本,如下所示:
pragma solidity ^0.5.1; contract simpleSmartContract{ address public inventor; string public message; constructor() public { inventor = msg.sender; } function changeMessage(string memory message_) public returns(string memory) { message = message_; return message; } }
該合約可以使用您發送給它的代幣或乙太坊,並可能將其轉發給所有者嗎?(假設智能合約已經部署,無法修改)
假設閱讀您的問題,我可以強調您沒有描述部署在地址 0x0123 的智能合約。
我可以說乙太無法恢復。句點。
但是,如果您是 0x0123 的所有者並且您為它提供了 forceTransfer 函式,即如果由代幣合約所有者操作,將代幣從任何賬戶轉移到任何其他賬戶的方法,是的,您可以恢復這些代幣。
出於很多充分的理由,擁有類似的功能並不常見,但原則上你可以。這是非常簡單的事情,原則上類似於:
function forceTransfer(address _from, address _to, uint _value) { require(msg.sender == owner); balances[_from] -= _value; balances[_to] += _value; emit Transfer(_from, _to, _value); }
在這種情況下,您可以從任何地方(不幸的是,甚至從您的任何使用者的錢包中)恢復您的代幣,也可以從智能合約 0x987654…
另一方面,如果您沒有任何類似 forceTransfer() 的方法或等效方法,那麼您的令牌將永遠消失,就像您的乙太幣一樣。