목차
- address 타입의 분류
- 타입 전환
- address payable의 추가 구성
address type
1. address type 의 두 가지 분류
- address 타입은 크게 두 가지로 나눌 수 있다.
- address: 20 byte 값 (이더리움 address의 크기)
- address payable: address와 같지만, transfer와 send라는 추가 구성을 가짐
이러한 타입 구분의 포인트는
- address payable이 함수 호출자로 하여금 ether를 보낼 수 있게 하는 address인
- 반면 일반적인 address에서는 이더를 보낼 수 없다
는 사실이다.
(일반적으로 스마트 컨트랙트는 이더를 보내기 위한 목적으로 빌드되지 않았다....)
2. 타입 전환
- address payable에서 address로의 변환은 절대적으로 가능하다.
- address에서 address payable로의 변환은 payable(address)를 통한 명시적인 방법으로 가능하다.
address로부터 또는 address로의 '명시적 변환'의 경우 uint160, 정수 리터럴, bytess20, 그리고 contract types로 가능하다.
즉 payable()의 () 안에 들어갈 수 있는 타입이 위와 같다는 것.
Address 리터럴은 address payable 대신에 address 타입을 보유한다.
하지만, payable(address) 와 같은 명시적 변환을 통해서 address payable 타입으로 변환 가능하다.
address 타입과 contract 타입의 표현만이 payable(...)과 같은 명시적 변환을 통해 address payable 타입으로 변환 될 수 있다.
하지만, contract 타입의 경우 이러한 변환은 제한적으로 적용된다.
그 제한적인 유일한 경우는 컨트랙트가 이더를 받을 경우이다.
(예를 들어 컨트랙트 이더가 receive나 payable fallback 함수를 가질 경우이다)
<중요>
만약, address 타입의 변수가 필요하고, 그 address에 이더를 보내고자 한다면
그 address의 타입을 address payable 타입으로 선언해야 한다.
3. Address payable 타입의 추가 구성
- balance 속성: address의 balance 가져오기
- transfer 함수: payable address에 이더(단위: wei) 전송
'블록체인 > 솔리디티' 카테고리의 다른 글
ERC20토큰 (0) | 2022.07.21 |
---|---|
스마트컨트랙트에 결제 기능 넣기 (0) | 2022.07.20 |
솔리디티 문법 실행 (0) | 2022.07.11 |
댓글