-
Solidity 화폐 송신 - send, call, transfer
Solidity 화폐 수신 - fallback, receive
Solidity Call, Fallback, Receive Ex
가스소비량의 문제
send를 통해 이더를 스마트컨트랙트로 보내면 이 스마트컨트랙트에 정의된 fallback 또는 receive함수가 최대 2300gwei한도 내에서 함수의 로직이 실행되어야 한다. 그 양으로 할 수 있는 일은 매우 제한적이므로 call함수가 탄생하게 되었다.
call을 통해 fallback 또는 receive가 실행되면 그 함수의 로직에 따라 가변적으로 가스소비량이 결정된다. 많은 양의 일을 할 수 있다. 이로 인해서 재진입 공격 등의 문제가 발생할 수 있다.
재진입 공격(Re-entrancy attack)
call함수로 인한 재진입 공격.
call함수가 가스소비량에 제한을 두지 않은 점으로 인해 재진입 공격이 가능해진다.
Ex: call함수를 통해 receive함수가 호출되면 다시 call을 사용해 무한 반복하기.
send
가스소비량 2300gwei로 제한.
예제
function ethdelivery(address payable _addr) public payable { bool rst = _addr.send(10 ether); require(rst, "Failed"); }
transfer
가스소비량 2300gwei로 제한.
예제
function ethdelivery(address _addr) public payable { payable(_addr).transfer(msg.value); }
call
가스소비량 가변적.
SolidityV0.7미만에서 사용예
(송금받는주소 Ex:0x1234dx..).call.value(송금할wei Ex:1000)("")
SolidityV0.7이상에서 사용예
(0x1234dx1).call{value:1000}("")
call함수는 가스소비량에 제한을 두지 않는다.
'Blockchain' 카테고리의 다른 글
Nodejs + Vsc에서 remixd 사용 (0) 2023.01.02 Solidity balance Ex1 (0) 2023.01.02 Solidity Ether units (ether, gwei, wei) Ex1 (0) 2023.01.02 Solidity 화폐 수신 - fallback, receive (0) 2023.01.02 Solidity msg (msg.sender, msg.value) (0) 2023.01.02 Solidity 모디파이어(Modifier) - pure, view, payable (0) 2022.12.31 Etherscan - Ethereum 거래 정보 (0) 2022.12.23 Web3.js 설치, 사용 (0) 2022.12.04