[Solidity] Contract 작성에 알아두면 좋을 것들

in upvu •  2 years ago 

현재 주소가 일반 유저 Address인가? 아니면 Contract Address인가 체크하는 함수

  • 체크할Address의 코드 사이즈를 확인해서 코드가 존재하면 Contract Address, 그렇지 않으면 일반 Address라고 판단
uint size;
address target = 체크할Address;
assembly {
   size := extcodesize(target)
}
require(size > 0);

Method ID

  • 컨트랙트의 각 내부 함수에 대한 고유 아이디(4바이트)
  • 아래 이미지를 보면 matchWithCoin이라는 함수의 MethodID는 0x5c2ecfcb로 표시가 되는 것이지요.
  • 바이트코드로 변환시 아래처럼 처음에 4바이트는 Method ID가 들어 가는 것을 볼 수 있습니다.
  • 그리고 그 뒤에는 Parameters 값들이 순서대로 들어갑니다.
  • MethodID 찾는방법은 "함수명(parameter 변수형태,...)"를 keccak256으로 해싱해서 나온 값의 앞 4바이트로 찾을 수 있습니다.
  • ex) safeTransferFrom(address,address,uint256) => 42842e0eb38857a7775b4e7364b2775df7325074d088e7fb39590cd6281184ed ==> MethodID = 0x42842e0e
Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE BLURT!