Payable

(1) payable concept

 

 

Solidity 언어는 코인(coin) 혹은 토큰(token)이라는 가상화폐를 다루는 언어이다. 다른 언어들(ex, C, Java, HTML)은 오로지 프로그램을 만들기 위한 언어로 탄생했지만, Solidity는 가상화폐라는 돈을 다루기 위한 언어로 탄생했기 때문에, 특이한 점이 하나 있다. 바로 가상화폐로 접근하기 위한 키워드인 payable이다.

 

Solidity 언어에서 payable 키워드는 이더리움 플랫폼 위에서 이더(ether) 코인을 전송하는 스마트 컨트랙트 (smart contract)를 작성하기 위해서 반드시 사용해야 한다. 다시 말해서 payable을 작성한 함수에서만 이더(ether)를 보낼 수 있고, payable을 작성하지 않은 함수에서는 이더(ether)를 보낼 수 없는 것이다. 따라서, 개발자가 스마트 컨트랙트 코드를 만들고, 이더리움넷(ex, Main Net, Test Net)에 배포(deploy)를 했다면, 그리고 스마트 컨트랙트 외부에서 스마트 컨트랙트에 있는 함수들 중에서 코인을 이동(=전송)시키는 함수를 사용하려 한다면, 해당 함수는 반드시 payable 키워드가 함께 작성된 함수이어야 한다.

 

Solidity 언어에서 payable을 해석하면 “지불가능한”이라는 의미이며, address 타입과 같이 사용되면 지불가능한 주소(address payable)의 타입이 되고, function 과 같이 사용되면 지불가능한 함수(address function)이 된다.



payable 종류

1. address payable

2. function payable



address payable

address payable 특징

1. address payable 타입의 변수는 address 타입의 확장판이다.

2. address payable 타입의 변수는 이더(ether)를 전송할 수 있는 함수인 send()함수transfer()함수를 내장하고 있다.

※ send()는 예외를 발생시키지 않지만, transfer()는 예외를 발생시킨다는 차이가 있다.


 

address payable 키워드 사용위치

(멤버변수 위치에서) address 옆 : ethereum storage(스토리지)를 사용하는 경우

- (함수 입력 파라미터 위치에서) address 옆 : ethereum memory(메모리)를 사용하는 경우

- address() : address 타입을 address payable로 형변환하는 경우

- msg.sender : 스마트 컨트랙트 함수를 실행한 사용자의 주소(=address payable 타입)를 사용하는 경우

※ address payable 타입의 크기는 다른 언어에서 일반적으로 주소를 가리키는 사이즈와 동일하게 4 bytes이다.

 

 

function payable

function payable 특징

1. smart contract 배포시, smart contract 계정에 초기 ether값을 송금하고 싶다면, constructor function에 payable을 사용한다.

2. smart contract 내에 직접 정의한 함수에서 msg.value(=smart contract 실행한 사람이 전송하는 ether)를 사용하고 싶다면, 해당 function에 payable을 사용한다.

3. smart contract 내에 직접 정의한 함수들을 호출하지 않고, ether만을 전송하고 싶다면, fallback function에 payable을 사용한다.

 

 

function payable 키워드 사용위치

- constructor function 옆

- 일반적인 function 옆

- fallback function 옆



※ solidity에서 ethereum coin과 직결되는 키워드인 payable에 대한 이해가 중요하므로, “payable 키워드 사용”에서 언급한 상황들이 하나씩 어떻게 사용되는지 자세히 살펴볼 필요가 있다. 참고로 각 상황들에서는 중복되는 내용들이 있지만, 관점에 따라 다르게 보면 payable 에 대한 이해를 도울 것이다.