🔑 100배 수익 경험자의 노하우가 담긴 치트키 공개 🔑
- 네이버, 카카오 임직원들이 듣고 있는 비트코인 강의
- 아무도 알려주지 않은 비트코인, 이더리움의 리스크
- 블록체인 전문가들도 놓치기 쉬운 비트코인, 이더리움의 핵심 가치
- 천배 수익이 가능한 디파이(DeFi), 코인 생태계 지도
- 토큰 제작, 1억 연봉의 블록체인 개발자로 거듭나자!
payable.transfer(), send()의 부적절한 사용
이스탄불 하드포크에서 EIP1884가 시행된 이후, SLOAD 작업의 가스 비용이 증가함으로써 일부 기존 스마트계약이 손상됨.
ETH를 수신자에게 전송할때, 솔리디티의 transfer() 또는 send() 매서드를 사용하는 경우 특정한 결함이 발생할 수 있는데, 특히 수신자가 스마트계약인 경우임.
이러한 결함으로 인해 ETH를 스마트계약 수신자에게 성공적으로 전송할 수 없게 될 수 있음.
구체적으로 스마트계약이 다음중 하나를 만족할때 전송은 반드시 실패함.
1 . 지불 가능한 fallback 함수를 구현하지 않은 경우.
- 지불 가능한 fallback 함수가 2300 이상의 가스 단위를 소비하는 경우
- 2300 이하의 가스단위를 소비하는 지불 가능한 fallback 함수를 구현하지만, 이 함수가 2300을 초과하는 호출을 발생시키는 프록시를 통해 호출되는 경우.
조치방안
Re-entrancy 가드와 함께 반환된 불리언을 확인하는 call을 사용하는 것이 권장됨.
코드취약부분
테스트소스
https://github.com/SunWeb3Sec/DeFiVulnLabs/blob/main/src/test/payable-transfer.sol
테스트
참고문서
댓글