Solidity

如果智能合約沒有發送功能,它可以發送代幣/乙太坊嗎?

  • January 15, 2019

假設您剛剛在地址 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() 的方法或等效方法,那麼您的令牌將永遠消失,就像您的乙太幣一樣。

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