본문 바로가기

블록체인/이더리움

msg.sender vs _msgSender()

반응형

솔리디티 코딩을 하다보면 어떤 contract 에서는 컨트랙트 호출자로 msg.sender 를 사용하고 어디에는 _msgSender() 함수를 사용한다.
외국 빡빡이 말에 의하면 컨트랙트 간에 인터널 트랜잭션을 사용할 때 전달자가 (relayer) 가 아닌 초기 호출자에 대한 정보를 받아오기 위함이다.

 

그렇다면 아래 코드는 왜쓰는걸까?

require(tx.origin == _msgSender(), "Caller cannot be a contract.");

해당 함수는 컨트랙 어드레스가 호출하지 못하게하여 미연의 악용을 방지한다.

반응형