low-level call은 보통 다음과 같이 작성된다.data에는 bytes의 형태로 return된 값이 저장되게 된다.근데 만약 revert가 나면 어떻게 될까?뭔가 return이 되기는 한다. 한번 분석해보자.bytes 혹은 string 타입의 경우 calldat
잠시동안 곰곰히 고민을 했는데... 답이 안나와서 해설을 봤다.Arithmetic Overflow/Underflow에 대해서는 잘 알고 있다고 생각했는데 생각지도 못한 방법이 있었다.여기서 당연히 msg.value를 이빠이 넣어서 overflow를 발생시킬 것이라고 생
external call이 있는가?contract가 ETH를 send하는가?state update가 after transfer인가? (CEI 패턴)User가 contract일 수 있는가?reentrancy에 대해서 어떻게 수행하는지에 대해서만 알고 있었는데, 이번에 f
Reentrancy 1편 에서 기껏 test를 해놓고 실제로 reetrancy 문제를 풀면서 커다란 것을 놓쳤다... -\_-;;아주 간단하고 클래식한 문제였는데....이렇게 풀고 당연히 앞의 Reentrancy 1편에서 보았던 바와 같이 마지막 external cal
Reentrancy 3편 ERC777 ERC20 토큰과 관련된 reentrancy 문제였다.
이미 알고 있는 내용들이지만, 이번 기회에 이것저것 정리를 해보려고 한다.: external + internal: external call만 가능: internal call (상속받은 child contract 포함): internal call (상속받은 경우 접근 불
SCH 강의에서 나온 2가지의 사례를 짧게 정리해보고자 한다.만약 Oracle이 centralized되어 있다면 문제가 될 수 있다.이 경우에 대해서 나는 당연히 고려를 하지 않았는데, 생각보다 실제 사례가 있었다.예를 들어 하나의 admin account에서 api를
사실 Call Attack이라는 이름은 그냥 붙인 것 같고, 전반적으로 발생할 수 있는 실수들에 대해 몇 가지 소개가 되어 있다.delegate call을 할 때 호출할 contract의 storage layout에 대해 신경쓰지 않으면 변수가 덮어써질 위험이 있다.더