반응형
솔리디티 코딩을 하다보면 어떤 contract 에서는 컨트랙트 호출자로 msg.sender
를 사용하고 어디에는 _msgSender()
함수를 사용한다.외국 빡빡이 말에 의하면 컨트랙트 간에 인터널 트랜잭션을 사용할 때 전달자가 (relayer) 가 아닌 초기 호출자에 대한 정보를 받아오기 위함이다.
그렇다면 아래 코드는 왜쓰는걸까?
require(tx.origin == _msgSender(), "Caller cannot be a contract.");
해당 함수는 컨트랙 어드레스가 호출하지 못하게하여 미연의 악용을 방지한다.
반응형
'블록체인 > 이더리움' 카테고리의 다른 글
보안취약점 external call (0) | 2022.06.29 |
---|---|
트랜잭션 hash 를 가장 빨리 받는 방법 (0) | 2022.05.04 |
오픈씨는 왜 WETH 를 사용할까? (0) | 2022.04.28 |
getPastEvents 함수의 방대한 결과값을 순차적으로 처리하는 방법 (0) | 2022.03.18 |
이더리움 화이트리스트 추출 방법 (0) | 2022.03.16 |