관리 메뉴

평행우주 : world 1

[Solidity] Faucet을 구현하는 솔리디티 컨트랙트 분석 본문

텃밭 1 : BlockChain/Solidity

[Solidity] Faucet을 구현하는 솔리디티 컨트랙트 분석

parallelworlds 2022. 3. 27. 02:21

contract Faucet {
	//요청하는 사람에게 이더 주기
	function withdraw(uint withdraw_amount) public {
    //출금 액수 제한
   		require(withdraw_amount <= 1000000000000000000);
    //요청한 주소로 금액 보내기
        msg.sender.transfer(withdraw_amount);
        }
    //입금 금액 수락
    function () public payable {
    }
 }

 withdraw

이 함수는 다른 함수에 의해 호출될 수 있는 공개(public) 함수로 선언된다

함수 정의는 중괄호 사이에 온다

함수의 첫 번째 부분은 출금에 대한 제한을 설정한다

 

require

전제조건을 테스트 하기 위해 내장된 솔리디티 함수 require을 사용한다

해당 금액보다 큰 amount로 withdraw함수가 호출되면,

require함수는 컨트랙트 실행을 중지하고 예외로 실패처리한다

 

msg

이 객체는 모든 컨트랙트에서 접근할 수 있는 입력 중 하나로

이 컨트랙트의 실행을 시작한 트랜잭션을 나타낸다

 

sender

이 속성은 해당 트랜잭션의 발신자 주소다

 

transfer

이더를 현재 컨트랙트에서 발신자의 주소로 전송하는 내장함수

유일한 인수로서 amount를 받는다

앞에 선언된 withdraw함수의 파라미터인 withdraw_amount 값을 전달한다

 

function()  public payable {}

이 함수는 소위 풀백 또는 기본 함수로

컨트랙트를 실행한 트랜잭션이 컨트랙트에 선언된 함수 또는

어떠한 함수도 지정하지 않았거나

데이터를 포함하지 않은 경우에 호출된다

이런 이유로 기본함수는 public이고 payable 함수로 정의되며,

이는 이더를 컨트랙트에 받아들일 수 있음을 의미한다

{} 안의 비어있는 정의는 이더를 받는 일 외에 아무것도 하지 않음을 의미한다

이더를 지갑같은 컨트랙트 주소로 보내는 트랜잭션을 발생시키면 이 함수가 처리한다

 

 

 

 

 

 

 

Comments