我对功能 selfdestruct 的可靠性感到怀疑。我在下面有这份合同:
pragma solidity ^0.4.25;
contract TestMetamask {
string public name = "Joao";
event EtherReceived();
function changeName(string _name) public {
name = _name;
}
function() public payable {
emit EtherReceived();
}
function receiveEther() payable public {
address(this).transfer(msg.value);
}
function balance() public view returns (uint256) {
return address(this).balance;
}
function kill() public {
selfdestruct(msg.sender);
}
}
因此,该合同有效,但是当我执行功能kill()时,合同会继续在应付款 receiveEther 中接收以太币。 另一个函数不起作用,状态变量很干净,问题仅在于合同被破坏了接收以太。
这是rinkeby的合同地址: https://rinkeby.etherscan.io/address/0xe0491e86b972ae4b0f8359a6066b79256ea01274
有人遇到过同样的情况吗?
tks。
答案 0 :(得分:1)
自毁之后,仍然可以将以太币发送到合同中,这将永远丢失。 也请参见以下stackexchange问题:https://ethereum.stackexchange.com/questions/46813/what-is-happening-after-a-self-destruct-is-called-for