본문 바로가기
블록체인/솔리디티

address 타입의 분류: address / address payable

by 혀닙 2022. 7. 20.

목차

  1. address 타입의 분류
  2. 타입 전환
  3. 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

댓글