BloCCat

payable 제어자 본문

Study/Solidity

payable 제어자

uooy 2021. 9. 3. 23:20

payable

- 가상화폐로 접근하기 위한 키워드, 이더 코인을 전송하는 smart contract를 작성하기 위해서 반드시 사용

 

* payable을 작성한 함수에서만 이더를 보낼 수 있기 때문에 smart contract 외부에서 해당 함수들 중에 코인을 전송 시키는 함수를 사용하려 한다면, 해당 함수는 반드시 payable 키워드가 함께 작성된 함수이어야 한다.

contract OnlineStore {
  function buySomething() external payable {
    // 함수 실행에 0.001이더가 보내졌는지 확실히 하기 위해 확인:
    require(msg.value == 0.001 ether);
    // 보내졌다면, 함수를 호출한 자에게 디지털 아이템을 전달하기 위한 내용 구성:
    transferThing(msg.sender);
  }
}

address payable

  • address 타입의 확장판
  • 이더를 전송할 수 있는 함수인 send(), transfer() 함수 내장 (transfer함수는 예외처리를 하지만 send는 안함)
  • 멤버변수로 쓰일 경우에는 storage, 매개변수로 쓰일 경우에는 memory와 함께 사용
  • address() : address 타입을 address payable로 형변환
  • msg.sender : 스마트 컨트랙트 함수를 실행한 사용자의 주소를 사용하는 경우
  • 4bytes

 

payable 활용 패턴 정리

https://solidity-kr.readthedocs.io/ko/latest/common-patterns.html

 

자주 쓰이는 패턴 — Solidity 0.5.10 documentation

컨트랙트에서의 출금 Effect 이후 기금송금에 있어 가장 권장되는 방법은 출금 패턴을 사용하는 것입니다. Effect의 결과로 Ether를 송금하는 가장 직관적인 방법은 직접 transfer 를 호출하는 것이겠

solidity-kr.readthedocs.io